ngx-firebase 1.1.13 → 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 -2299
  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 -779
  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 -1509
  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 -70
  233. package/shared/interfaces/tokens.d.ts +0 -16
  234. package/shared/interfaces/ui-providers.interface.d.ts +0 -66
  235. package/shared/services/analytics.service.d.ts +0 -10
  236. package/shared/services/auth-process.service.d.ts +0 -197
  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","AuthHooksProviderToken","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","hooksService","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","_c","_d","isWebPlatform","_e","_f","refreshToken","currentUser","getIdToken","selectCurrentUserClaim","claim","Observable","subscriber","handleTokenRefresh","getIdTokenResult","token","claims","getCurrentUserClaim","take","resetPassword","email","sendPasswordResetEmail","duration","interpolateParams","position","handleError","signInWith","loading","userCred","mergeContext","prepareMergeSource","ANONYMOUS","EmailAndPassword","PhoneNumber","present","signInAnonymously","skipTosCheck","dismiss","credentials","signInWithEmailAndPassword","password","signOut","socialSignIn","successMessage","displayName","_b","applyMergeToTarget","error_2","error_3","reauthenicateWithProvider","auth","authCred","EmailAuthProvider","credential","reauthenticateWithCredential","getCredential","factoryCred","reauthenticateWithPopup","getAuthProvider","error_4","linkCurrentUserToProvider","linkWithCredential","linkWithPopup","userData","parseUserInfo","photoURL","updateUserInfo","error_5","registerWith","createUserWithEmailAndPassword","sendEmailVerification","error_6","signInWithCredential","signInWithPopup","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","reloadUserInfo","reload","deleteUser","currentUid","beforeDelete","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, IAuthHooksService, 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 AuthHooksProviderToken = new InjectionToken<IAuthHooksService>('AuthHooksProviderToken');\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, 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 AuthHooksProviderToken, MalSharedConfigToken,\n MalSharedConfig, AuthProvider, ISignInOptions, Accounts, IAuthHooksService,\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 /**\n * Provides an array of authentication providers that are valid for the currently signed-in user\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 /**\n * Triggers subscriber actions when the current user token is refreshed\n */\n private readonly tokenRefreshed$: Subject<void> = new Subject<void>();\n\n constructor(\n @Inject(forwardRef(() => MalSharedConfigToken)) public config: MalSharedConfig,\n @Optional() @Inject(forwardRef(() => AuthHooksProviderToken)) public hooksService: IAuthHooksService,\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 * A provider is supported if it is configured to be so in authUi.supportProviders and either the platform is a webplatform\n * (in which case @anguluar/fire will be used). Or the provider is supported by the injected credFactory (such as that provided by /capacitor).\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 /**\n * Refreshes the current user IdToken, and triggers the tokenRefreshed$ subject\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 /**\n * Provides an observable that subscribes to the current user token and returns the value of the specified claim.\n * \n * @param claim Claim to be returned\n * @returns Observable for: Value of claim within current user token || null (if not signed in) || undefined (if no such claim exists)\n */\n public selectCurrentUserClaim<T>(claim: string): Observable<T | null | undefined> {\n return new Observable<T | null | undefined>(subscriber => {\n // Handler function to process the ID token\n // Emits the claim || undefined || null\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 // Subscribe to token refresh events\n this.tokenRefreshed$.subscribe(async () => {\n const user = await this.afa.currentUser;\n await handleTokenRefresh(user);\n });\n // Subscribe to user update events\n this.afa.user.subscribe(async user => {\n await handleTokenRefresh(user);\n });\n });\n }\n\n /**\n * Get the value for a custom claim for the current user (extracted from their ID token)\n * \n * @param claim Claim to be returned\n * @returns Value of claim within current user token || null (if not signed in) || undefined (if no such claim exists)\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 * Firebase sends an email to the user - and managed the reset process directly via google's hosted pages.\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): 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 // Trigger hook for user merge where an anonymoust user >>> non-anonymous user.\n // Two merge hooks are provided, one run as source user (prepareMergeSource) and once the new non-anonymous user is created\n // a second hook applyMergeToTarget is subsequenrly run. The output from prepareMergeSource is passed into applyMergeToTarget.\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.hooksService?.prepareMergeSource && provider !== AuthProvider.ANONYMOUS) {\n mergeContext = await this.hooksService.prepareMergeSource(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 this.confirmTos(userCred, { skipTosCheck: true }); // Save tosAcceptance in firestore if sync enabled\n await loading.dismiss();\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 if (!await this.confirmTos(userCred, options)) {\n await this.signOut();\n userCred = null;\n };\n await loading.dismiss();\n break;\n\n case AuthProvider.PhoneNumber:\n // coming soon - see feature/sms branch\n break;\n\n default:\n userCred = await this.socialSignIn(provider, options);\n break;\n }\n\n // Will be null if user cancels operation\n if (userCred) {\n if (this.config.authUi.toastMessageOnAuthSuccess) {\n const successMessage = ('string' === typeof this.config.authUi.toastMessageOnAuthSuccess)\n ? this.config.authUi.toastMessageOnAuthSuccess\n : `Hello ${userCred.user.displayName ? userCred.user.displayName : ''}!`;\n this.ui.toast(successMessage, { duration: this.config.authUi.toastDefaultDurationMil });\n }\n\n // Run the merge hook if present and mergeContext has been generated by the prepare hook above.\n if (userCred.user && mergeContext && this.hooksService?.applyMergeToTarget) {\n try {\n await this.hooksService.applyMergeToTarget(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 * Reauthenicate the current user - a recent authentication is required for some sensitive operations\n * such as changing account details\n */\n public async reauthenicateWithProvider(provider: AuthProvider, options?: ISignInOptions): 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 reauthenticating 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 }\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 await loading.dismiss();\n break;\n\n default:\n userCred = await this.socialSignIn(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 * Authenticates the user using social provider.\n * \n * @param provider social auth provider\n * @param options \n * @returns user credentials || null if not signed in.\n */\n private async socialSignIn(provider: AuthProvider, options: ISignInOptions): Promise<UserCredential | null> {\n const currentUser = await this.afa.currentUser;\n const loading = await this.ui.createLoading();\n let userCred: UserCredential | null\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\n code: \"auth/popup-closed-by-user\"\n message: \"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 return userCred;\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 * 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 const canDelete = (this.hooksService?.beforeDelete) ? await this.hooksService.beforeDelete(currentUser) : true;\n // Allow exception from beforeDelete to propgate\n if (canDelete) {\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 /**\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==