binnacle 0.4.8

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 (449) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +8 -0
  6. data/Gemfile.lock +138 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.asc +264 -0
  9. data/Rakefile +48 -0
  10. data/bin/binnacle +5 -0
  11. data/binnacle.gemspec +49 -0
  12. data/lib/binnacle.rb +112 -0
  13. data/lib/binnacle/client.rb +115 -0
  14. data/lib/binnacle/commands/commands.rb +20 -0
  15. data/lib/binnacle/commands/help.rb +21 -0
  16. data/lib/binnacle/commands/tail.rb +187 -0
  17. data/lib/binnacle/configuration.rb +278 -0
  18. data/lib/binnacle/connection.rb +66 -0
  19. data/lib/binnacle/errors.rb +4 -0
  20. data/lib/binnacle/http_logging/adapters/ethon.rb +44 -0
  21. data/lib/binnacle/http_logging/adapters/excon.rb +62 -0
  22. data/lib/binnacle/http_logging/adapters/http.rb +63 -0
  23. data/lib/binnacle/http_logging/adapters/httpclient.rb +93 -0
  24. data/lib/binnacle/http_logging/adapters/net_http.rb +54 -0
  25. data/lib/binnacle/http_logging/adapters/patron.rb +24 -0
  26. data/lib/binnacle/http_logging/adapters/typhoeus.rb +20 -0
  27. data/lib/binnacle/http_logging/http_logger.rb +83 -0
  28. data/lib/binnacle/logging/formatter.rb +62 -0
  29. data/lib/binnacle/logging/logging.rb +36 -0
  30. data/lib/binnacle/logging/request_log_subscriber.rb +120 -0
  31. data/lib/binnacle/resource.rb +54 -0
  32. data/lib/binnacle/resources/event.rb +100 -0
  33. data/lib/binnacle/trap/backtrace.rb +130 -0
  34. data/lib/binnacle/trap/exception_event.rb +176 -0
  35. data/lib/binnacle/trap/middleware.rb +45 -0
  36. data/lib/binnacle/trap/railtie.rb +28 -0
  37. data/lib/binnacle/version.rb +3 -0
  38. data/lib/generators/binnacle/binnacle_generator.rb +78 -0
  39. data/lib/generators/binnacle/templates/firebase-messaging-sw.js.erb +35 -0
  40. data/spec/adapters/ethon_adapter.rb +19 -0
  41. data/spec/adapters/excon_adapter.rb +10 -0
  42. data/spec/adapters/faraday_adapter.rb +46 -0
  43. data/spec/adapters/http_adapter.rb +14 -0
  44. data/spec/adapters/http_base_adapter.rb +37 -0
  45. data/spec/adapters/httparty_adapter.rb +10 -0
  46. data/spec/adapters/httpclient_adapter.rb +21 -0
  47. data/spec/adapters/net_http_adapter.rb +14 -0
  48. data/spec/adapters/open_uri_adapter.rb +17 -0
  49. data/spec/adapters/patron_adapter.rb +29 -0
  50. data/spec/adapters/typhoeus_adapter.rb +25 -0
  51. data/spec/backtrace_spec.rb +197 -0
  52. data/spec/binnacle_spec.rb +33 -0
  53. data/spec/client_spec.rb +128 -0
  54. data/spec/commands_spec.rb +91 -0
  55. data/spec/configuration_spec.rb +139 -0
  56. data/spec/connection_spec.rb +34 -0
  57. data/spec/exception_event_spec.rb +72 -0
  58. data/spec/http_logger_spec.rb +77 -0
  59. data/spec/logger_spec.rb +60 -0
  60. data/spec/spec_helper.rb +117 -0
  61. data/spec/support/index.html +8 -0
  62. data/spec/support/index.html.gz +0 -0
  63. data/spec/support/test.bin +0 -0
  64. data/spec/support/test_server.rb +31 -0
  65. data/spec/support/utf8-invalid.html +0 -0
  66. data/spec/support/utf8.html +8 -0
  67. data/spec/vcr/binnacle/configure_can_be_configured_via_a_hash_of_options.yml +42 -0
  68. data/spec/vcr/binnacle/configure_creates_a_module_level_instance_of_a_binnacle_client.yml +42 -0
  69. data/spec/vcr/binnacle_client/events_invokes_the_events_api.yml +124 -0
  70. data/spec/vcr/binnacle_client/events_returns_a_collection_of_event_objects.yml +124 -0
  71. data/spec/vcr/binnacle_client/recents_invokes_the_events_api_recents.yml +83 -0
  72. data/spec/vcr/binnacle_client/recents_returns_a_collection_of_event_objects.yml +83 -0
  73. data/spec/vcr/binnacle_client/report_exception_invokes_the_events_api_signal.yml +121 -0
  74. data/spec/vcr/binnacle_client/signal_asynch_invokes_the_events_api_signal.yml +74 -0
  75. data/spec/vcr/binnacle_client/signal_invokes_the_events_api_signal.yml +74 -0
  76. data/spec/vcr/binnacle_client_ready_/returns_true_if_a_connection_has_been_successfully_established.yml +42 -0
  77. data/spec/vcr/binnacle_command/tail_command_with_n_flag_returns_recent_events.yml +81 -0
  78. data/spec/vcr/binnacle_connection/initialize_fails_with_incorrect_credentials.yml +40 -0
  79. data/spec/vcr/binnacle_connection/initialize_retrieves_available_endpoints_upon_successful_connection.yml +42 -0
  80. data/spec/vcr/binnacle_http_logger/_htt_party_adapter_should_log__ge_t_requests.yml +122 -0
  81. data/spec/vcr/binnacle_http_logger/_http_adapter_should_log__ge_t_requests.yml +165 -0
  82. data/spec/vcr/binnacle_http_logger/_http_client_adapter_should_log__ge_t_requests.yml +274 -0
  83. data/spec/vcr/binnacle_http_logger/ethon_adapter_should_log__ge_t_requests.yml +87 -0
  84. data/spec/vcr/binnacle_http_logger/excon_adapter_should_log__ge_t_requests.yml +204 -0
  85. data/spec/vcr/binnacle_http_logger/faraday_adapter_should_log__ge_t_requests.yml +200 -0
  86. data/spec/vcr/binnacle_http_logger/net_http_adapter_should_log__ge_t_requests.yml +827 -0
  87. data/spec/vcr/binnacle_http_logger/open_uri_adapter_should_log__ge_t_requests.yml +751 -0
  88. data/spec/vcr/binnacle_http_logger/patron_adapter_should_log__ge_t_requests.yml +124 -0
  89. data/spec/vcr/binnacle_http_logger/typhoeus_adapter_should_log__ge_t_requests.yml +124 -0
  90. data/spec/vcr/binnacle_logging/logging_allows_passing_other_parameters_using_a_hash.yml +119 -0
  91. data/spec/vcr/binnacle_logging/logging_invokes_the_events_api_signal.yml +75 -0
  92. data/spec/vcr/binnacle_logging/logging_respects_the_logger_severity.yml +81 -0
  93. data/vendor/assets/javascripts/atmosphere/atmosphere.js +3487 -0
  94. data/vendor/assets/javascripts/base64/base64.js +61 -0
  95. data/vendor/assets/javascripts/binnacle.js +5 -0
  96. data/vendor/assets/javascripts/binnacle/binnacle.js +9090 -0
  97. data/vendor/assets/javascripts/firebase/firebase-app-externs.js +261 -0
  98. data/vendor/assets/javascripts/firebase/firebase-app.js +35 -0
  99. data/vendor/assets/javascripts/firebase/firebase-auth-externs.js +1300 -0
  100. data/vendor/assets/javascripts/firebase/firebase-auth.js +241 -0
  101. data/vendor/assets/javascripts/firebase/firebase-database-externs.js +1700 -0
  102. data/vendor/assets/javascripts/firebase/firebase-database.js +260 -0
  103. data/vendor/assets/javascripts/firebase/firebase-messaging-externs.js +164 -0
  104. data/vendor/assets/javascripts/firebase/firebase-messaging.js +35 -0
  105. data/vendor/assets/javascripts/firebase/firebase-storage-externs.js +663 -0
  106. data/vendor/assets/javascripts/firebase/firebase-storage.js +52 -0
  107. data/vendor/assets/javascripts/firebase/firebase.js +611 -0
  108. data/vendor/assets/javascripts/moment/locale/af.js +73 -0
  109. data/vendor/assets/javascripts/moment/locale/ar-dz.js +59 -0
  110. data/vendor/assets/javascripts/moment/locale/ar-kw.js +59 -0
  111. data/vendor/assets/javascripts/moment/locale/ar-ly.js +126 -0
  112. data/vendor/assets/javascripts/moment/locale/ar-ma.js +60 -0
  113. data/vendor/assets/javascripts/moment/locale/ar-sa.js +105 -0
  114. data/vendor/assets/javascripts/moment/locale/ar-tn.js +59 -0
  115. data/vendor/assets/javascripts/moment/locale/ar.js +142 -0
  116. data/vendor/assets/javascripts/moment/locale/az.js +105 -0
  117. data/vendor/assets/javascripts/moment/locale/be.js +134 -0
  118. data/vendor/assets/javascripts/moment/locale/bg.js +90 -0
  119. data/vendor/assets/javascripts/moment/locale/bn.js +119 -0
  120. data/vendor/assets/javascripts/moment/locale/bo.js +119 -0
  121. data/vendor/assets/javascripts/moment/locale/br.js +108 -0
  122. data/vendor/assets/javascripts/moment/locale/bs.js +143 -0
  123. data/vendor/assets/javascripts/moment/locale/ca.js +88 -0
  124. data/vendor/assets/javascripts/moment/locale/cs.js +172 -0
  125. data/vendor/assets/javascripts/moment/locale/cv.js +63 -0
  126. data/vendor/assets/javascripts/moment/locale/cy.js +81 -0
  127. data/vendor/assets/javascripts/moment/locale/da.js +60 -0
  128. data/vendor/assets/javascripts/moment/locale/de-at.js +79 -0
  129. data/vendor/assets/javascripts/moment/locale/de-ch.js +78 -0
  130. data/vendor/assets/javascripts/moment/locale/de.js +78 -0
  131. data/vendor/assets/javascripts/moment/locale/dv.js +100 -0
  132. data/vendor/assets/javascripts/moment/locale/el.js +100 -0
  133. data/vendor/assets/javascripts/moment/locale/en-au.js +67 -0
  134. data/vendor/assets/javascripts/moment/locale/en-ca.js +63 -0
  135. data/vendor/assets/javascripts/moment/locale/en-gb.js +67 -0
  136. data/vendor/assets/javascripts/moment/locale/en-ie.js +67 -0
  137. data/vendor/assets/javascripts/moment/locale/en-nz.js +67 -0
  138. data/vendor/assets/javascripts/moment/locale/eo.js +73 -0
  139. data/vendor/assets/javascripts/moment/locale/es-do.js +82 -0
  140. data/vendor/assets/javascripts/moment/locale/es.js +83 -0
  141. data/vendor/assets/javascripts/moment/locale/et.js +80 -0
  142. data/vendor/assets/javascripts/moment/locale/eu.js +66 -0
  143. data/vendor/assets/javascripts/moment/locale/fa.js +107 -0
  144. data/vendor/assets/javascripts/moment/locale/fi.js +107 -0
  145. data/vendor/assets/javascripts/moment/locale/fo.js +60 -0
  146. data/vendor/assets/javascripts/moment/locale/fr-ca.js +74 -0
  147. data/vendor/assets/javascripts/moment/locale/fr-ch.js +78 -0
  148. data/vendor/assets/javascripts/moment/locale/fr.js +83 -0
  149. data/vendor/assets/javascripts/moment/locale/fy.js +75 -0
  150. data/vendor/assets/javascripts/moment/locale/gd.js +76 -0
  151. data/vendor/assets/javascripts/moment/locale/gl.js +77 -0
  152. data/vendor/assets/javascripts/moment/locale/gom-latn.js +122 -0
  153. data/vendor/assets/javascripts/moment/locale/he.js +99 -0
  154. data/vendor/assets/javascripts/moment/locale/hi.js +124 -0
  155. data/vendor/assets/javascripts/moment/locale/hr.js +145 -0
  156. data/vendor/assets/javascripts/moment/locale/hu.js +109 -0
  157. data/vendor/assets/javascripts/moment/locale/hy-am.js +95 -0
  158. data/vendor/assets/javascripts/moment/locale/id.js +83 -0
  159. data/vendor/assets/javascripts/moment/locale/is.js +127 -0
  160. data/vendor/assets/javascripts/moment/locale/it.js +70 -0
  161. data/vendor/assets/javascripts/moment/locale/ja.js +80 -0
  162. data/vendor/assets/javascripts/moment/locale/jv.js +83 -0
  163. data/vendor/assets/javascripts/moment/locale/ka.js +89 -0
  164. data/vendor/assets/javascripts/moment/locale/kk.js +87 -0
  165. data/vendor/assets/javascripts/moment/locale/km.js +58 -0
  166. data/vendor/assets/javascripts/moment/locale/kn.js +126 -0
  167. data/vendor/assets/javascripts/moment/locale/ko.js +69 -0
  168. data/vendor/assets/javascripts/moment/locale/ky.js +88 -0
  169. data/vendor/assets/javascripts/moment/locale/lb.js +137 -0
  170. data/vendor/assets/javascripts/moment/locale/lo.js +70 -0
  171. data/vendor/assets/javascripts/moment/locale/lt.js +117 -0
  172. data/vendor/assets/javascripts/moment/locale/lv.js +97 -0
  173. data/vendor/assets/javascripts/moment/locale/me.js +111 -0
  174. data/vendor/assets/javascripts/moment/locale/mi.js +64 -0
  175. data/vendor/assets/javascripts/moment/locale/mk.js +90 -0
  176. data/vendor/assets/javascripts/moment/locale/ml.js +81 -0
  177. data/vendor/assets/javascripts/moment/locale/mr.js +159 -0
  178. data/vendor/assets/javascripts/moment/locale/ms-my.js +83 -0
  179. data/vendor/assets/javascripts/moment/locale/ms.js +82 -0
  180. data/vendor/assets/javascripts/moment/locale/my.js +96 -0
  181. data/vendor/assets/javascripts/moment/locale/nb.js +63 -0
  182. data/vendor/assets/javascripts/moment/locale/ne.js +123 -0
  183. data/vendor/assets/javascripts/moment/locale/nl-be.js +88 -0
  184. data/vendor/assets/javascripts/moment/locale/nl.js +88 -0
  185. data/vendor/assets/javascripts/moment/locale/nn.js +60 -0
  186. data/vendor/assets/javascripts/moment/locale/pa-in.js +124 -0
  187. data/vendor/assets/javascripts/moment/locale/pl.js +107 -0
  188. data/vendor/assets/javascripts/moment/locale/pt-br.js +61 -0
  189. data/vendor/assets/javascripts/moment/locale/pt.js +65 -0
  190. data/vendor/assets/javascripts/moment/locale/ro.js +75 -0
  191. data/vendor/assets/javascripts/moment/locale/ru.js +183 -0
  192. data/vendor/assets/javascripts/moment/locale/sd.js +98 -0
  193. data/vendor/assets/javascripts/moment/locale/se.js +61 -0
  194. data/vendor/assets/javascripts/moment/locale/si.js +71 -0
  195. data/vendor/assets/javascripts/moment/locale/sk.js +150 -0
  196. data/vendor/assets/javascripts/moment/locale/sl.js +162 -0
  197. data/vendor/assets/javascripts/moment/locale/sq.js +70 -0
  198. data/vendor/assets/javascripts/moment/locale/sr-cyrl.js +110 -0
  199. data/vendor/assets/javascripts/moment/locale/sr.js +110 -0
  200. data/vendor/assets/javascripts/moment/locale/ss.js +89 -0
  201. data/vendor/assets/javascripts/moment/locale/sv.js +69 -0
  202. data/vendor/assets/javascripts/moment/locale/sw.js +59 -0
  203. data/vendor/assets/javascripts/moment/locale/ta.js +130 -0
  204. data/vendor/assets/javascripts/moment/locale/te.js +89 -0
  205. data/vendor/assets/javascripts/moment/locale/tet.js +68 -0
  206. data/vendor/assets/javascripts/moment/locale/th.js +67 -0
  207. data/vendor/assets/javascripts/moment/locale/tl-ph.js +62 -0
  208. data/vendor/assets/javascripts/moment/locale/tlh.js +120 -0
  209. data/vendor/assets/javascripts/moment/locale/tr.js +90 -0
  210. data/vendor/assets/javascripts/moment/locale/tzl.js +91 -0
  211. data/vendor/assets/javascripts/moment/locale/tzm-latn.js +58 -0
  212. data/vendor/assets/javascripts/moment/locale/tzm.js +58 -0
  213. data/vendor/assets/javascripts/moment/locale/uk.js +151 -0
  214. data/vendor/assets/javascripts/moment/locale/ur.js +99 -0
  215. data/vendor/assets/javascripts/moment/locale/uz-latn.js +58 -0
  216. data/vendor/assets/javascripts/moment/locale/uz.js +58 -0
  217. data/vendor/assets/javascripts/moment/locale/vi.js +79 -0
  218. data/vendor/assets/javascripts/moment/locale/x-pseudo.js +68 -0
  219. data/vendor/assets/javascripts/moment/locale/yo.js +60 -0
  220. data/vendor/assets/javascripts/moment/locale/zh-cn.js +111 -0
  221. data/vendor/assets/javascripts/moment/locale/zh-hk.js +105 -0
  222. data/vendor/assets/javascripts/moment/locale/zh-tw.js +104 -0
  223. data/vendor/assets/javascripts/moment/min/locales.js +9252 -0
  224. data/vendor/assets/javascripts/moment/min/moment-with-locales.js +13700 -0
  225. data/vendor/assets/javascripts/moment/min/moment.min.js +7 -0
  226. data/vendor/assets/javascripts/moment/min/tests.js +78265 -0
  227. data/vendor/assets/javascripts/moment/moment.js +4463 -0
  228. data/vendor/assets/javascripts/moment/src/lib/create/check-overflow.js +34 -0
  229. data/vendor/assets/javascripts/moment/src/lib/create/date-from-array.js +21 -0
  230. data/vendor/assets/javascripts/moment/src/lib/create/from-anything.js +110 -0
  231. data/vendor/assets/javascripts/moment/src/lib/create/from-array.js +140 -0
  232. data/vendor/assets/javascripts/moment/src/lib/create/from-object.js +16 -0
  233. data/vendor/assets/javascripts/moment/src/lib/create/from-string-and-array.js +50 -0
  234. data/vendor/assets/javascripts/moment/src/lib/create/from-string-and-format.js +113 -0
  235. data/vendor/assets/javascripts/moment/src/lib/create/from-string.js +202 -0
  236. data/vendor/assets/javascripts/moment/src/lib/create/local.js +5 -0
  237. data/vendor/assets/javascripts/moment/src/lib/create/parsing-flags.js +26 -0
  238. data/vendor/assets/javascripts/moment/src/lib/create/utc.js +5 -0
  239. data/vendor/assets/javascripts/moment/src/lib/create/valid.js +49 -0
  240. data/vendor/assets/javascripts/moment/src/lib/duration/abs.js +18 -0
  241. data/vendor/assets/javascripts/moment/src/lib/duration/add-subtract.js +21 -0
  242. data/vendor/assets/javascripts/moment/src/lib/duration/as.js +61 -0
  243. data/vendor/assets/javascripts/moment/src/lib/duration/bubble.js +61 -0
  244. data/vendor/assets/javascripts/moment/src/lib/duration/constructor.js +44 -0
  245. data/vendor/assets/javascripts/moment/src/lib/duration/create.js +122 -0
  246. data/vendor/assets/javascripts/moment/src/lib/duration/duration.js +16 -0
  247. data/vendor/assets/javascripts/moment/src/lib/duration/get.js +25 -0
  248. data/vendor/assets/javascripts/moment/src/lib/duration/humanize.js +85 -0
  249. data/vendor/assets/javascripts/moment/src/lib/duration/iso-string.js +56 -0
  250. data/vendor/assets/javascripts/moment/src/lib/duration/prototype.js +50 -0
  251. data/vendor/assets/javascripts/moment/src/lib/duration/valid.js +35 -0
  252. data/vendor/assets/javascripts/moment/src/lib/format/format.js +92 -0
  253. data/vendor/assets/javascripts/moment/src/lib/locale/base-config.js +44 -0
  254. data/vendor/assets/javascripts/moment/src/lib/locale/calendar.js +15 -0
  255. data/vendor/assets/javascripts/moment/src/lib/locale/constructor.js +5 -0
  256. data/vendor/assets/javascripts/moment/src/lib/locale/en.js +15 -0
  257. data/vendor/assets/javascripts/moment/src/lib/locale/formats.js +23 -0
  258. data/vendor/assets/javascripts/moment/src/lib/locale/invalid.js +5 -0
  259. data/vendor/assets/javascripts/moment/src/lib/locale/lists.js +93 -0
  260. data/vendor/assets/javascripts/moment/src/lib/locale/locale.js +39 -0
  261. data/vendor/assets/javascripts/moment/src/lib/locale/locales.js +186 -0
  262. data/vendor/assets/javascripts/moment/src/lib/locale/ordinal.js +7 -0
  263. data/vendor/assets/javascripts/moment/src/lib/locale/pre-post-format.js +3 -0
  264. data/vendor/assets/javascripts/moment/src/lib/locale/prototype.js +69 -0
  265. data/vendor/assets/javascripts/moment/src/lib/locale/relative.js +30 -0
  266. data/vendor/assets/javascripts/moment/src/lib/locale/set.js +49 -0
  267. data/vendor/assets/javascripts/moment/src/lib/moment/add-subtract.js +55 -0
  268. data/vendor/assets/javascripts/moment/src/lib/moment/calendar.js +26 -0
  269. data/vendor/assets/javascripts/moment/src/lib/moment/clone.js +5 -0
  270. data/vendor/assets/javascripts/moment/src/lib/moment/compare.js +59 -0
  271. data/vendor/assets/javascripts/moment/src/lib/moment/constructor.js +77 -0
  272. data/vendor/assets/javascripts/moment/src/lib/moment/creation-data.js +9 -0
  273. data/vendor/assets/javascripts/moment/src/lib/moment/diff.js +62 -0
  274. data/vendor/assets/javascripts/moment/src/lib/moment/format.js +57 -0
  275. data/vendor/assets/javascripts/moment/src/lib/moment/from.js +17 -0
  276. data/vendor/assets/javascripts/moment/src/lib/moment/get-set.js +55 -0
  277. data/vendor/assets/javascripts/moment/src/lib/moment/locale.js +34 -0
  278. data/vendor/assets/javascripts/moment/src/lib/moment/min-max.js +63 -0
  279. data/vendor/assets/javascripts/moment/src/lib/moment/moment.js +28 -0
  280. data/vendor/assets/javascripts/moment/src/lib/moment/now.js +3 -0
  281. data/vendor/assets/javascripts/moment/src/lib/moment/prototype.js +150 -0
  282. data/vendor/assets/javascripts/moment/src/lib/moment/start-end-of.js +59 -0
  283. data/vendor/assets/javascripts/moment/src/lib/moment/to-type.js +34 -0
  284. data/vendor/assets/javascripts/moment/src/lib/moment/to.js +17 -0
  285. data/vendor/assets/javascripts/moment/src/lib/moment/valid.js +15 -0
  286. data/vendor/assets/javascripts/moment/src/lib/parse/regex.js +54 -0
  287. data/vendor/assets/javascripts/moment/src/lib/parse/token.js +33 -0
  288. data/vendor/assets/javascripts/moment/src/lib/units/aliases.js +30 -0
  289. data/vendor/assets/javascripts/moment/src/lib/units/constants.js +9 -0
  290. data/vendor/assets/javascripts/moment/src/lib/units/day-of-month.js +39 -0
  291. data/vendor/assets/javascripts/moment/src/lib/units/day-of-week.js +364 -0
  292. data/vendor/assets/javascripts/moment/src/lib/units/day-of-year.js +36 -0
  293. data/vendor/assets/javascripts/moment/src/lib/units/hour.js +144 -0
  294. data/vendor/assets/javascripts/moment/src/lib/units/millisecond.js +69 -0
  295. data/vendor/assets/javascripts/moment/src/lib/units/minute.js +29 -0
  296. data/vendor/assets/javascripts/moment/src/lib/units/month.js +283 -0
  297. data/vendor/assets/javascripts/moment/src/lib/units/offset.js +235 -0
  298. data/vendor/assets/javascripts/moment/src/lib/units/priorities.js +16 -0
  299. data/vendor/assets/javascripts/moment/src/lib/units/quarter.js +32 -0
  300. data/vendor/assets/javascripts/moment/src/lib/units/second.js +29 -0
  301. data/vendor/assets/javascripts/moment/src/lib/units/timestamp.js +20 -0
  302. data/vendor/assets/javascripts/moment/src/lib/units/timezone.js +16 -0
  303. data/vendor/assets/javascripts/moment/src/lib/units/units.js +20 -0
  304. data/vendor/assets/javascripts/moment/src/lib/units/week-calendar-utils.js +65 -0
  305. data/vendor/assets/javascripts/moment/src/lib/units/week-year.js +107 -0
  306. data/vendor/assets/javascripts/moment/src/lib/units/week.js +67 -0
  307. data/vendor/assets/javascripts/moment/src/lib/units/year.js +75 -0
  308. data/vendor/assets/javascripts/moment/src/lib/utils/abs-ceil.js +7 -0
  309. data/vendor/assets/javascripts/moment/src/lib/utils/abs-floor.js +8 -0
  310. data/vendor/assets/javascripts/moment/src/lib/utils/abs-round.js +7 -0
  311. data/vendor/assets/javascripts/moment/src/lib/utils/compare-arrays.js +16 -0
  312. data/vendor/assets/javascripts/moment/src/lib/utils/defaults.js +10 -0
  313. data/vendor/assets/javascripts/moment/src/lib/utils/deprecate.js +55 -0
  314. data/vendor/assets/javascripts/moment/src/lib/utils/extend.js +19 -0
  315. data/vendor/assets/javascripts/moment/src/lib/utils/has-own-prop.js +3 -0
  316. data/vendor/assets/javascripts/moment/src/lib/utils/hooks.js +13 -0
  317. data/vendor/assets/javascripts/moment/src/lib/utils/index-of.js +18 -0
  318. data/vendor/assets/javascripts/moment/src/lib/utils/is-array.js +3 -0
  319. data/vendor/assets/javascripts/moment/src/lib/utils/is-date.js +3 -0
  320. data/vendor/assets/javascripts/moment/src/lib/utils/is-function.js +3 -0
  321. data/vendor/assets/javascripts/moment/src/lib/utils/is-number.js +3 -0
  322. data/vendor/assets/javascripts/moment/src/lib/utils/is-object-empty.js +8 -0
  323. data/vendor/assets/javascripts/moment/src/lib/utils/is-object.js +5 -0
  324. data/vendor/assets/javascripts/moment/src/lib/utils/is-undefined.js +3 -0
  325. data/vendor/assets/javascripts/moment/src/lib/utils/keys.js +19 -0
  326. data/vendor/assets/javascripts/moment/src/lib/utils/map.js +7 -0
  327. data/vendor/assets/javascripts/moment/src/lib/utils/some.js +19 -0
  328. data/vendor/assets/javascripts/moment/src/lib/utils/to-int.js +12 -0
  329. data/vendor/assets/javascripts/moment/src/lib/utils/zero-fill.js +7 -0
  330. data/vendor/assets/javascripts/moment/src/locale/af.js +63 -0
  331. data/vendor/assets/javascripts/moment/src/locale/ar-dz.js +50 -0
  332. data/vendor/assets/javascripts/moment/src/locale/ar-kw.js +49 -0
  333. data/vendor/assets/javascripts/moment/src/locale/ar-ly.js +112 -0
  334. data/vendor/assets/javascripts/moment/src/locale/ar-ma.js +51 -0
  335. data/vendor/assets/javascripts/moment/src/locale/ar-sa.js +95 -0
  336. data/vendor/assets/javascripts/moment/src/locale/ar-tn.js +50 -0
  337. data/vendor/assets/javascripts/moment/src/locale/ar.js +128 -0
  338. data/vendor/assets/javascripts/moment/src/locale/az.js +96 -0
  339. data/vendor/assets/javascripts/moment/src/locale/be.js +125 -0
  340. data/vendor/assets/javascripts/moment/src/locale/bg.js +81 -0
  341. data/vendor/assets/javascripts/moment/src/locale/bn.js +109 -0
  342. data/vendor/assets/javascripts/moment/src/locale/bo.js +110 -0
  343. data/vendor/assets/javascripts/moment/src/locale/br.js +99 -0
  344. data/vendor/assets/javascripts/moment/src/locale/bs.js +133 -0
  345. data/vendor/assets/javascripts/moment/src/locale/ca.js +79 -0
  346. data/vendor/assets/javascripts/moment/src/locale/cs.js +163 -0
  347. data/vendor/assets/javascripts/moment/src/locale/cv.js +53 -0
  348. data/vendor/assets/javascripts/moment/src/locale/cy.js +72 -0
  349. data/vendor/assets/javascripts/moment/src/locale/da.js +50 -0
  350. data/vendor/assets/javascripts/moment/src/locale/de-at.js +69 -0
  351. data/vendor/assets/javascripts/moment/src/locale/de-ch.js +68 -0
  352. data/vendor/assets/javascripts/moment/src/locale/de.js +68 -0
  353. data/vendor/assets/javascripts/moment/src/locale/dv.js +89 -0
  354. data/vendor/assets/javascripts/moment/src/locale/el.js +88 -0
  355. data/vendor/assets/javascripts/moment/src/locale/en-au.js +58 -0
  356. data/vendor/assets/javascripts/moment/src/locale/en-ca.js +53 -0
  357. data/vendor/assets/javascripts/moment/src/locale/en-gb.js +58 -0
  358. data/vendor/assets/javascripts/moment/src/locale/en-ie.js +58 -0
  359. data/vendor/assets/javascripts/moment/src/locale/en-nz.js +57 -0
  360. data/vendor/assets/javascripts/moment/src/locale/eo.js +64 -0
  361. data/vendor/assets/javascripts/moment/src/locale/es-do.js +73 -0
  362. data/vendor/assets/javascripts/moment/src/locale/es.js +74 -0
  363. data/vendor/assets/javascripts/moment/src/locale/et.js +71 -0
  364. data/vendor/assets/javascripts/moment/src/locale/eu.js +57 -0
  365. data/vendor/assets/javascripts/moment/src/locale/fa.js +97 -0
  366. data/vendor/assets/javascripts/moment/src/locale/fi.js +98 -0
  367. data/vendor/assets/javascripts/moment/src/locale/fo.js +51 -0
  368. data/vendor/assets/javascripts/moment/src/locale/fr-ca.js +65 -0
  369. data/vendor/assets/javascripts/moment/src/locale/fr-ch.js +69 -0
  370. data/vendor/assets/javascripts/moment/src/locale/fr.js +74 -0
  371. data/vendor/assets/javascripts/moment/src/locale/fy.js +66 -0
  372. data/vendor/assets/javascripts/moment/src/locale/gd.js +67 -0
  373. data/vendor/assets/javascripts/moment/src/locale/gl.js +68 -0
  374. data/vendor/assets/javascripts/moment/src/locale/gom-latn.js +112 -0
  375. data/vendor/assets/javascripts/moment/src/locale/he.js +90 -0
  376. data/vendor/assets/javascripts/moment/src/locale/hi.js +115 -0
  377. data/vendor/assets/javascripts/moment/src/locale/hr.js +135 -0
  378. data/vendor/assets/javascripts/moment/src/locale/hu.js +100 -0
  379. data/vendor/assets/javascripts/moment/src/locale/hy-am.js +86 -0
  380. data/vendor/assets/javascripts/moment/src/locale/id.js +74 -0
  381. data/vendor/assets/javascripts/moment/src/locale/is.js +118 -0
  382. data/vendor/assets/javascripts/moment/src/locale/it.js +61 -0
  383. data/vendor/assets/javascripts/moment/src/locale/ja.js +71 -0
  384. data/vendor/assets/javascripts/moment/src/locale/jv.js +73 -0
  385. data/vendor/assets/javascripts/moment/src/locale/ka.js +80 -0
  386. data/vendor/assets/javascripts/moment/src/locale/kk.js +77 -0
  387. data/vendor/assets/javascripts/moment/src/locale/km.js +49 -0
  388. data/vendor/assets/javascripts/moment/src/locale/kn.js +116 -0
  389. data/vendor/assets/javascripts/moment/src/locale/ko.js +60 -0
  390. data/vendor/assets/javascripts/moment/src/locale/ky.js +78 -0
  391. data/vendor/assets/javascripts/moment/src/locale/lb.js +128 -0
  392. data/vendor/assets/javascripts/moment/src/locale/lo.js +61 -0
  393. data/vendor/assets/javascripts/moment/src/locale/lt.js +108 -0
  394. data/vendor/assets/javascripts/moment/src/locale/lv.js +88 -0
  395. data/vendor/assets/javascripts/moment/src/locale/me.js +101 -0
  396. data/vendor/assets/javascripts/moment/src/locale/mi.js +54 -0
  397. data/vendor/assets/javascripts/moment/src/locale/mk.js +81 -0
  398. data/vendor/assets/javascripts/moment/src/locale/ml.js +72 -0
  399. data/vendor/assets/javascripts/moment/src/locale/mr.js +150 -0
  400. data/vendor/assets/javascripts/moment/src/locale/ms-my.js +74 -0
  401. data/vendor/assets/javascripts/moment/src/locale/ms.js +73 -0
  402. data/vendor/assets/javascripts/moment/src/locale/my.js +86 -0
  403. data/vendor/assets/javascripts/moment/src/locale/nb.js +54 -0
  404. data/vendor/assets/javascripts/moment/src/locale/ne.js +114 -0
  405. data/vendor/assets/javascripts/moment/src/locale/nl-be.js +79 -0
  406. data/vendor/assets/javascripts/moment/src/locale/nl.js +79 -0
  407. data/vendor/assets/javascripts/moment/src/locale/nn.js +51 -0
  408. data/vendor/assets/javascripts/moment/src/locale/pa-in.js +115 -0
  409. data/vendor/assets/javascripts/moment/src/locale/pl.js +97 -0
  410. data/vendor/assets/javascripts/moment/src/locale/pt-br.js +52 -0
  411. data/vendor/assets/javascripts/moment/src/locale/pt.js +56 -0
  412. data/vendor/assets/javascripts/moment/src/locale/ro.js +66 -0
  413. data/vendor/assets/javascripts/moment/src/locale/ru.js +173 -0
  414. data/vendor/assets/javascripts/moment/src/locale/sd.js +88 -0
  415. data/vendor/assets/javascripts/moment/src/locale/se.js +51 -0
  416. data/vendor/assets/javascripts/moment/src/locale/si.js +61 -0
  417. data/vendor/assets/javascripts/moment/src/locale/sk.js +141 -0
  418. data/vendor/assets/javascripts/moment/src/locale/sl.js +152 -0
  419. data/vendor/assets/javascripts/moment/src/locale/sq.js +61 -0
  420. data/vendor/assets/javascripts/moment/src/locale/sr-cyrl.js +100 -0
  421. data/vendor/assets/javascripts/moment/src/locale/sr.js +100 -0
  422. data/vendor/assets/javascripts/moment/src/locale/ss.js +80 -0
  423. data/vendor/assets/javascripts/moment/src/locale/sv.js +60 -0
  424. data/vendor/assets/javascripts/moment/src/locale/sw.js +50 -0
  425. data/vendor/assets/javascripts/moment/src/locale/ta.js +120 -0
  426. data/vendor/assets/javascripts/moment/src/locale/te.js +79 -0
  427. data/vendor/assets/javascripts/moment/src/locale/tet.js +58 -0
  428. data/vendor/assets/javascripts/moment/src/locale/th.js +57 -0
  429. data/vendor/assets/javascripts/moment/src/locale/tl-ph.js +53 -0
  430. data/vendor/assets/javascripts/moment/src/locale/tlh.js +110 -0
  431. data/vendor/assets/javascripts/moment/src/locale/tr.js +81 -0
  432. data/vendor/assets/javascripts/moment/src/locale/tzl.js +82 -0
  433. data/vendor/assets/javascripts/moment/src/locale/tzm-latn.js +49 -0
  434. data/vendor/assets/javascripts/moment/src/locale/tzm.js +49 -0
  435. data/vendor/assets/javascripts/moment/src/locale/uk.js +142 -0
  436. data/vendor/assets/javascripts/moment/src/locale/ur.js +89 -0
  437. data/vendor/assets/javascripts/moment/src/locale/uz-latn.js +49 -0
  438. data/vendor/assets/javascripts/moment/src/locale/uz.js +49 -0
  439. data/vendor/assets/javascripts/moment/src/locale/vi.js +70 -0
  440. data/vendor/assets/javascripts/moment/src/locale/x-pseudo.js +58 -0
  441. data/vendor/assets/javascripts/moment/src/locale/yo.js +50 -0
  442. data/vendor/assets/javascripts/moment/src/locale/zh-cn.js +102 -0
  443. data/vendor/assets/javascripts/moment/src/locale/zh-hk.js +95 -0
  444. data/vendor/assets/javascripts/moment/src/locale/zh-tw.js +94 -0
  445. data/vendor/assets/javascripts/moment/src/moment.js +82 -0
  446. data/vendor/assets/javascripts/moment/templates/default.js +5 -0
  447. data/vendor/assets/javascripts/moment/templates/locale-header.js +6 -0
  448. data/vendor/assets/javascripts/moment/templates/test-header.js +6 -0
  449. metadata +943 -0
@@ -0,0 +1,261 @@
1
+ /**
2
+ * @fileoverview Firebase namespace and Firebase App API.
3
+ * Version: 3.7.1
4
+ *
5
+ * Copyright 2017 Google Inc. All Rights Reserved.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ *
19
+ * @externs
20
+ */
21
+
22
+ /**
23
+ * <code>firebase</code> is a global namespace from which all the Firebase
24
+ * services are accessed.
25
+ *
26
+ * @namespace
27
+ */
28
+ var firebase = {};
29
+
30
+ /**
31
+ * Creates and initializes a Firebase {@link firebase.app.App app} instance.
32
+ *
33
+ * See
34
+ * {@link
35
+ * https://firebase.google.com/docs/web/setup#add_firebase_to_your_app
36
+ * Add Firebase to your app} and
37
+ * {@link
38
+ * https://firebase.google.com/docs/web/setup#initialize_multiple_apps
39
+ * Initialize multiple apps} for detailed documentation.
40
+ *
41
+ * @example
42
+ * // Initialize default app
43
+ * // Retrieve your own options values by adding a web app on
44
+ * // https://console.firebase.google.com
45
+ * firebase.initializeApp({
46
+ * apiKey: "AIza....", // Auth / General Use
47
+ * authDomain: "YOUR_APP.firebaseapp.com", // Auth with popup/redirect
48
+ * databaseURL: "https://YOUR_APP.firebaseio.com", // Realtime Database
49
+ * storageBucket: "YOUR_APP.appspot.com", // Storage
50
+ * messagingSenderId: "123456789" // Cloud Messaging
51
+ * });
52
+ *
53
+ * @example
54
+ * // Initialize another app
55
+ * var otherApp = firebase.initializeApp({
56
+ * databaseURL: "https://<OTHER_DATABASE_NAME>.firebaseio.com",
57
+ * storageBucket: "<OTHER_STORAGE_BUCKET>.appspot.com"
58
+ * }, "otherApp");
59
+ *
60
+ * @param {!Object} options Options to configure the app's services.
61
+ * @param {string=} name Optional name of the app to initialize. If no name
62
+ * is provided, the default is `"[DEFAULT]"`.
63
+ *
64
+ * @return {!firebase.app.App} The initialized app.
65
+ */
66
+ firebase.initializeApp = function(options, name) {};
67
+
68
+ /**
69
+ * Retrieves a Firebase {@link firebase.app.App app} instance.
70
+ *
71
+ * When called with no arguments, the default app is returned. When an app name
72
+ * is provided, the app corresponding to that name is returned.
73
+ *
74
+ * An exception is thrown if the app being retrieved has not yet been
75
+ * initialized.
76
+ *
77
+ * @example
78
+ * // Return the default app
79
+ * var app = firebase.app();
80
+ *
81
+ * @example
82
+ * // Return a named app
83
+ * var otherApp = firebase.app("otherApp");
84
+ *
85
+ * @namespace
86
+ * @param {string=} name Optional name of the app to return. If no name is
87
+ * provided, the default is `"[DEFAULT]"`.
88
+ *
89
+ * @return {!firebase.app.App} The app corresponding to the provided app name.
90
+ * If no app name is provided, the default app is returned.
91
+ */
92
+ firebase.app = function(name) {};
93
+
94
+ /**
95
+ * A (read-only) array of all initialized apps.
96
+ * @type {!Array<firebase.app.App>}
97
+ */
98
+ firebase.apps;
99
+
100
+ /**
101
+ * The current SDK version.
102
+ * @type {string}
103
+ */
104
+ firebase.SDK_VERSION;
105
+
106
+ /**
107
+ * A Firebase App holds the initialization information for a collection of
108
+ * services.
109
+ *
110
+ * Do not call this constructor directly. Instead, use
111
+ * {@link firebase#.initializeApp `firebase.initializeApp()`} to create an app.
112
+ *
113
+ * @interface
114
+ */
115
+ firebase.app.App = function() {};
116
+
117
+ /**
118
+ * The (read-only) name for this app.
119
+ *
120
+ * The default app's name is `"[DEFAULT]"`.
121
+ *
122
+ * @example
123
+ * // The default app's name is "[DEFAULT]"
124
+ * firebase.initializeApp(defaultAppConfig);
125
+ * console.log(firebase.app().name); // "[DEFAULT]"
126
+ *
127
+ * @example
128
+ * // A named app's name is what you provide to initializeApp()
129
+ * var otherApp = firebase.initializeApp(otherAppConfig, "other");
130
+ * console.log(otherApp.name); // "other"
131
+ *
132
+ * @type {string}
133
+ */
134
+ firebase.app.App.prototype.name;
135
+
136
+ /**
137
+ * The (read-only) configuration options for this app. These are the original
138
+ * parameters given in
139
+ * {@link firebase#.initializeApp `firebase.initializeApp()`}.
140
+ *
141
+ * @example
142
+ * var app = firebase.initializeApp(config);
143
+ * console.log(app.options.credential === config.credential); // true
144
+ * console.log(app.options.databaseURL === config.databaseURL); // true
145
+ *
146
+ * @type {!Object}
147
+ */
148
+ firebase.app.App.prototype.options;
149
+
150
+ /**
151
+ * Renders this app unusable and frees the resources of all associated
152
+ * services.
153
+ *
154
+ * @example
155
+ * app.delete()
156
+ * .then(function() {
157
+ * console.log("App deleted successfully");
158
+ * })
159
+ * .catch(function(error) {
160
+ * console.log("Error deleting app:", error);
161
+ * });
162
+ *
163
+ * @return {!firebase.Promise<void>} An empty promise fulfilled when the app has
164
+ * been deleted.
165
+ */
166
+ firebase.app.App.prototype.delete = function() {};
167
+
168
+ /**
169
+ * A Thenable is the standard interface returned by a Promise.
170
+ *
171
+ * @template T
172
+ * @interface
173
+ */
174
+ firebase.Thenable = function() {};
175
+
176
+ /**
177
+ * Assign callback functions called when the Thenable value either
178
+ * resolves, or is rejected.
179
+ *
180
+ * @param {(function(T): *)=} onResolve Called when the Thenable resolves.
181
+ * @param {(function(!Error): *)=} onReject Called when the Thenable is rejected
182
+ * (with an error).
183
+ * @return {!firebase.Thenable<*>}
184
+ */
185
+ firebase.Thenable.prototype.then = function(onResolve, onReject) {};
186
+
187
+ /**
188
+ * Assign a callback when the Thenable rejects.
189
+ *
190
+ * @param {(function(!Error): *)=} onReject Called when the Thenable is rejected
191
+ * (with an error).
192
+ * @return {!firebase.Thenable<*>}
193
+ */
194
+ firebase.Thenable.prototype.catch = function(onReject) {};
195
+
196
+ /**
197
+ * A Promise represents an eventual (asynchronous) value. A Promise should
198
+ * (eventually) either resolve or reject. When it does, it will call all the
199
+ * callback functions that have been assigned via the <code>.then()</code> or
200
+ * <code>.catch()</code> methods.
201
+ *
202
+ * <code>firebase.Promise</code> is the same as the native Promise
203
+ * implementation when available in the current environment, otherwise it is a
204
+ * compatible implementation of the Promise/A+ spec.
205
+ *
206
+ * @template T
207
+ * @constructor
208
+ * @implements {firebase.Thenable}
209
+ * @param {function((function(T): void),
210
+ * (function(!Error): void))} resolver
211
+ */
212
+ firebase.Promise = function(resolver) {};
213
+
214
+ /**
215
+ * Assign callback functions called when the Promise either resolves, or is
216
+ * rejected.
217
+ *
218
+ * @param {(function(T): *)=} onResolve Called when the Promise resolves.
219
+ * @param {(function(!Error): *)=} onReject Called when the Promise is rejected
220
+ * (with an error).
221
+ * @return {!firebase.Promise<*>}
222
+ */
223
+ firebase.Promise.prototype.then = function(onResolve, onReject) {};
224
+
225
+ /**
226
+ * Assign a callback when the Promise rejects.
227
+ *
228
+ * @param {(function(!Error): *)=} onReject Called when the Promise is rejected
229
+ * (with an error).
230
+ */
231
+ firebase.Promise.prototype.catch = function(onReject) {};
232
+
233
+ /**
234
+ * Return a resolved Promise.
235
+ *
236
+ * @template T
237
+ * @param {T=} value The value to be returned by the Promise.
238
+ * @return {!firebase.Promise<T>}
239
+ */
240
+ firebase.Promise.resolve = function(value) {};
241
+
242
+ /**
243
+ * Return (an immediately) rejected Promise.
244
+ *
245
+ * @param {!Error} error The reason for the Promise being rejected.
246
+ * @return {!firebase.Promise<*>}
247
+ */
248
+ firebase.Promise.reject = function(error) {};
249
+
250
+ /**
251
+ * Convert an array of Promises, to a single array of values.
252
+ * <code>Promise.all()</code> resolves only after all the Promises in the array
253
+ * have resolved.
254
+ *
255
+ * <code>Promise.all()</code> rejects when any of the promises in the Array have
256
+ * rejected.
257
+ *
258
+ * @param {!Array<!firebase.Promise<*>>} values
259
+ * @return {!firebase.Promise<!Array<*>>}
260
+ */
261
+ firebase.Promise.all = function(values) {};
@@ -0,0 +1,35 @@
1
+ /*! @license Firebase v3.7.1
2
+ Build: 3.7.1-rc.1
3
+ Terms: https://firebase.google.com/terms/ */
4
+ var firebase = null; (function() { var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},k="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this,l=function(){l=function(){};k.Symbol||(k.Symbol=ba)},ca=0,ba=function(a){return"jscomp_symbol_"+(a||"")+ca++},n=function(){l();var a=k.Symbol.iterator;a||(a=k.Symbol.iterator=
5
+ k.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&aa(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return m(this)}});n=function(){}},m=function(a){var b=0;return da(function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}})},da=function(a){n();a={next:a};a[k.Symbol.iterator]=function(){return this};return a},q=this,r=function(){},t=function(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);
6
+ if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if("function"==b&&"undefined"==typeof a.call)return"object";return b},v=function(a){return"function"==t(a)},ea=function(a,
7
+ b,c){return a.call.apply(a.bind,arguments)},fa=function(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}},w=function(a,b,c){w=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ea:fa;return w.apply(null,arguments)},x=function(a,b){var c=Array.prototype.slice.call(arguments,
8
+ 1);return function(){var b=c.slice();b.push.apply(b,arguments);return a.apply(this,b)}},y=function(a,b){function c(){}c.prototype=b.prototype;a.ha=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.base=function(a,c,h){for(var e=Array(arguments.length-2),d=2;d<arguments.length;d++)e[d-2]=arguments[d];return b.prototype[c].apply(a,e)}};var A;A="undefined"!==typeof window?window:"undefined"!==typeof self?self:global;
9
+ var __extends=function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},__assign=Object.assign||function(a){for(var b,c=1,d=arguments.length;c<d;c++){b=arguments[c];for(var e in b)Object.prototype.hasOwnProperty.call(b,e)&&(a[e]=b[e])}return a},__rest=function(a,b){var c={},d;for(d in a)Object.prototype.hasOwnProperty.call(a,d)&&0>b.indexOf(d)&&(c[d]=a[d]);if(null!=a&&"function"===typeof Object.getOwnPropertySymbols){var e=
10
+ 0;for(d=Object.getOwnPropertySymbols(a);e<d.length;e++)0>b.indexOf(d[e])&&(c[d[e]]=a[d[e]])}return c},__decorate=function(a,b,c,d){var e=arguments.length,h=3>e?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d,g;g=A.Reflect;if("object"===typeof g&&"function"===typeof g.decorate)h=g.decorate(a,b,c,d);else for(var f=a.length-1;0<=f;f--)if(g=a[f])h=(3>e?g(h):3<e?g(b,c,h):g(b,c))||h;return 3<e&&h&&Object.defineProperty(b,c,h),h},__metadata=function(a,b){var c=A.Reflect;if("object"===typeof c&&"function"===
11
+ typeof c.metadata)return c.metadata(a,b)},__param=function(a,b){return function(c,d){b(c,d,a)}},__awaiter=function(a,b,c,d){return new (c||(c=Promise))(function(e,h){function g(a){try{p(d.next(a))}catch(u){h(u)}}function f(a){try{p(d["throw"](a))}catch(u){h(u)}}function p(a){a.done?e(a.value):(new c(function(b){b(a.value)})).then(g,f)}p((d=d.apply(a,b)).next())})},__generator=function(a,b){function c(a){return function(b){return d([a,b])}}function d(c){if(h)throw new TypeError("Generator is already executing.");
12
+ for(;e;)try{if(h=1,g&&(f=g[c[0]&2?"return":c[0]?"throw":"next"])&&!(f=f.call(g,c[1])).done)return f;if(g=0,f)c=[0,f.value];switch(c[0]){case 0:case 1:f=c;break;case 4:return e.label++,{value:c[1],done:!1};case 5:e.label++;g=c[1];c=[0];continue;case 7:c=e.G.pop();e.I.pop();continue;default:if(!(f=e.I,f=0<f.length&&f[f.length-1])&&(6===c[0]||2===c[0])){e=0;continue}if(3===c[0]&&(!f||c[1]>f[0]&&c[1]<f[3]))e.label=c[1];else if(6===c[0]&&e.label<f[1])e.label=f[1],f=c;else if(f&&e.label<f[2])e.label=f[2],
13
+ e.G.push(c);else{f[2]&&e.G.pop();e.I.pop();continue}}c=b.call(a,e)}catch(z){c=[6,z],g=0}finally{h=f=0}if(c[0]&5)throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}var e={label:0,ga:function(){if(f[0]&1)throw f[1];return f[1]},I:[],G:[]},h,g,f;return{next:c(0),"throw":c(1),"return":c(2)}};
14
+ "undefined"!==typeof A.S&&A.S||(A.__extends=__extends,A.__assign=__assign,A.__rest=__rest,A.__extends=__extends,A.__decorate=__decorate,A.__metadata=__metadata,A.__param=__param,A.__awaiter=__awaiter,A.__generator=__generator);var B=function(a){if(Error.captureStackTrace)Error.captureStackTrace(this,B);else{var b=Error().stack;b&&(this.stack=b)}a&&(this.message=String(a))};y(B,Error);B.prototype.name="CustomError";var ga=function(a,b){for(var c=a.split("%s"),d="",e=Array.prototype.slice.call(arguments,1);e.length&&1<c.length;)d+=c.shift()+e.shift();return d+c.join("%s")};var C=function(a,b){b.unshift(a);B.call(this,ga.apply(null,b));b.shift()};y(C,B);C.prototype.name="AssertionError";var ha=function(a,b,c,d){var e="Assertion failed";if(c)var e=e+(": "+c),h=d;else a&&(e+=": "+a,h=b);throw new C(""+e,h||[]);},D=function(a,b,c){a||ha("",null,b,Array.prototype.slice.call(arguments,2))},E=function(a,b,c){v(a)||ha("Expected function but got %s: %s.",[t(a),a],b,Array.prototype.slice.call(arguments,2))};var F=function(a,b,c){this.Y=c;this.T=a;this.Z=b;this.s=0;this.o=null};F.prototype.get=function(){var a;0<this.s?(this.s--,a=this.o,this.o=a.next,a.next=null):a=this.T();return a};F.prototype.put=function(a){this.Z(a);this.s<this.Y&&(this.s++,a.next=this.o,this.o=a)};var G;a:{var ia=q.navigator;if(ia){var ja=ia.userAgent;if(ja){G=ja;break a}}G=""};var ka=function(a){q.setTimeout(function(){throw a;},0)},H,la=function(){var a=q.MessageChannel;"undefined"===typeof a&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&-1==G.indexOf("Presto")&&(a=function(){var a=document.createElement("IFRAME");a.style.display="none";a.src="";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write("");a.close();var c="callImmediate"+Math.random(),d="file:"==b.location.protocol?"*":b.location.protocol+
15
+ "//"+b.location.host,a=w(function(a){if(("*"==d||a.origin==d)&&a.data==c)this.port1.onmessage()},this);b.addEventListener("message",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if("undefined"!==typeof a&&-1==G.indexOf("Trident")&&-1==G.indexOf("MSIE")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.J;c.J=null;a()}};return function(a){d.next={J:a};d=d.next;b.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in
16
+ document.createElement("SCRIPT")?function(a){var b=document.createElement("SCRIPT");b.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){q.setTimeout(a,0)}};var I=function(){this.v=this.g=null},ma=new F(function(){return new J},function(a){a.reset()},100);I.prototype.add=function(a,b){var c=ma.get();c.set(a,b);this.v?this.v.next=c:(D(!this.g),this.g=c);this.v=c};I.prototype.remove=function(){var a=null;this.g&&(a=this.g,this.g=this.g.next,this.g||(this.v=null),a.next=null);return a};var J=function(){this.next=this.scope=this.B=null};J.prototype.set=function(a,b){this.B=a;this.scope=b;this.next=null};
17
+ J.prototype.reset=function(){this.next=this.scope=this.B=null};var M=function(a,b){K||na();L||(K(),L=!0);oa.add(a,b)},K,na=function(){if(-1!=String(q.Promise).indexOf("[native code]")){var a=q.Promise.resolve(void 0);K=function(){a.then(pa)}}else K=function(){var a=pa;!v(q.setImmediate)||q.Window&&q.Window.prototype&&-1==G.indexOf("Edge")&&q.Window.prototype.setImmediate==q.setImmediate?(H||(H=la()),H(a)):q.setImmediate(a)}},L=!1,oa=new I,pa=function(){for(var a;a=oa.remove();){try{a.B.call(a.scope)}catch(b){ka(b)}ma.put(a)}L=!1};var O=function(a,b){this.b=0;this.R=void 0;this.j=this.h=this.u=null;this.m=this.A=!1;if(a!=r)try{var c=this;a.call(b,function(a){N(c,2,a)},function(a){try{if(a instanceof Error)throw a;throw Error("Promise rejected.");}catch(e){}N(c,3,a)})}catch(d){N(this,3,d)}},qa=function(){this.next=this.context=this.i=this.f=this.child=null;this.w=!1};qa.prototype.reset=function(){this.context=this.i=this.f=this.child=null;this.w=!1};
18
+ var ra=new F(function(){return new qa},function(a){a.reset()},100),sa=function(a,b,c){var d=ra.get();d.f=a;d.i=b;d.context=c;return d},ua=function(a,b,c){ta(a,b,c,null)||M(x(b,a))};O.prototype.then=function(a,b,c){null!=a&&E(a,"opt_onFulfilled should be a function.");null!=b&&E(b,"opt_onRejected should be a function. Did you pass opt_context as the second argument instead of the third?");return va(this,v(a)?a:null,v(b)?b:null,c)};O.prototype.then=O.prototype.then;O.prototype.$goog_Thenable=!0;
19
+ O.prototype.ba=function(a,b){return va(this,null,a,b)};var xa=function(a,b){a.h||2!=a.b&&3!=a.b||wa(a);D(null!=b.f);a.j?a.j.next=b:a.h=b;a.j=b},va=function(a,b,c,d){var e=sa(null,null,null);e.child=new O(function(a,g){e.f=b?function(c){try{var e=b.call(d,c);a(e)}catch(z){g(z)}}:a;e.i=c?function(b){try{var e=c.call(d,b);a(e)}catch(z){g(z)}}:g});e.child.u=a;xa(a,e);return e.child};O.prototype.da=function(a){D(1==this.b);this.b=0;N(this,2,a)};
20
+ O.prototype.ea=function(a){D(1==this.b);this.b=0;N(this,3,a)};
21
+ var N=function(a,b,c){0==a.b&&(a===c&&(b=3,c=new TypeError("Promise cannot resolve to itself")),a.b=1,ta(c,a.da,a.ea,a)||(a.R=c,a.b=b,a.u=null,wa(a),3!=b||ya(a,c)))},ta=function(a,b,c,d){if(a instanceof O)return null!=b&&E(b,"opt_onFulfilled should be a function."),null!=c&&E(c,"opt_onRejected should be a function. Did you pass opt_context as the second argument instead of the third?"),xa(a,sa(b||r,c||null,d)),!0;var e;if(a)try{e=!!a.$goog_Thenable}catch(g){e=!1}else e=!1;if(e)return a.then(b,c,d),
22
+ !0;e=typeof a;if("object"==e&&null!=a||"function"==e)try{var h=a.then;if(v(h))return za(a,h,b,c,d),!0}catch(g){return c.call(d,g),!0}return!1},za=function(a,b,c,d,e){var h=!1,g=function(a){h||(h=!0,c.call(e,a))},f=function(a){h||(h=!0,d.call(e,a))};try{b.call(a,g,f)}catch(p){f(p)}},wa=function(a){a.A||(a.A=!0,M(a.V,a))},Aa=function(a){var b=null;a.h&&(b=a.h,a.h=b.next,b.next=null);a.h||(a.j=null);null!=b&&D(null!=b.f);return b};
23
+ O.prototype.V=function(){for(var a;a=Aa(this);){var b=this.b,c=this.R;if(3==b&&a.i&&!a.w){var d;for(d=this;d&&d.m;d=d.u)d.m=!1}if(a.child)a.child.u=null,Ba(a,b,c);else try{a.w?a.f.call(a.context):Ba(a,b,c)}catch(e){Ca.call(null,e)}ra.put(a)}this.A=!1};var Ba=function(a,b,c){2==b?a.f.call(a.context,c):a.i&&a.i.call(a.context,c)},ya=function(a,b){a.m=!0;M(function(){a.m&&Ca.call(null,b)})},Ca=ka;function P(a,b){if(!(b instanceof Object))return b;switch(b.constructor){case Date:return new Date(b.getTime());case Object:void 0===a&&(a={});break;case Array:a=[];break;default:return b}for(var c in b)b.hasOwnProperty(c)&&(a[c]=P(a[c],b[c]));return a};O.all=function(a){return new O(function(b,c){var d=a.length,e=[];if(d)for(var h=function(a,c){d--;e[a]=c;0==d&&b(e)},g=function(a){c(a)},f=0,p;f<a.length;f++)p=a[f],ua(p,x(h,f),g);else b(e)})};O.resolve=function(a){if(a instanceof O)return a;var b=new O(r);N(b,2,a);return b};O.reject=function(a){return new O(function(b,c){c(a)})};O.prototype["catch"]=O.prototype.ba;var Q=O;"undefined"!==typeof Promise&&(Q=Promise);var Da=Q;function Ea(a,b){a=new R(a,b);return a.subscribe.bind(a)}var R=function(a,b){var c=this;this.a=[];this.P=0;this.task=Da.resolve();this.l=!1;this.F=b;this.task.then(function(){a(c)}).catch(function(a){c.error(a)})};R.prototype.next=function(a){S(this,function(b){b.next(a)})};R.prototype.error=function(a){S(this,function(b){b.error(a)});this.close(a)};R.prototype.complete=function(){S(this,function(a){a.complete()});this.close()};
24
+ R.prototype.subscribe=function(a,b,c){var d=this,e;if(void 0===a&&void 0===b&&void 0===c)throw Error("Missing Observer.");e=Fa(a)?a:{next:a,error:b,complete:c};void 0===e.next&&(e.next=T);void 0===e.error&&(e.error=T);void 0===e.complete&&(e.complete=T);a=this.fa.bind(this,this.a.length);this.l&&this.task.then(function(){try{d.K?e.error(d.K):e.complete()}catch(h){}});this.a.push(e);return a};
25
+ R.prototype.fa=function(a){void 0!==this.a&&void 0!==this.a[a]&&(delete this.a[a],--this.P,0===this.P&&void 0!==this.F&&this.F(this))};var S=function(a,b){if(!a.l)for(var c=0;c<a.a.length;c++)Ga(a,c,b)},Ga=function(a,b,c){a.task.then(function(){if(void 0!==a.a&&void 0!==a.a[b])try{c(a.a[b])}catch(d){"undefined"!==typeof console&&console.error&&console.error(d)}})};R.prototype.close=function(a){var b=this;this.l||(this.l=!0,void 0!==a&&(this.K=a),this.task.then(function(){b.a=void 0;b.F=void 0}))};
26
+ function Fa(a){if("object"!==typeof a||null===a)return!1;var b;b=["next","error","complete"];n();var c=b[Symbol.iterator];b=c?c.call(b):m(b);for(c=b.next();!c.done;c=b.next())if(c=c.value,c in a&&"function"===typeof a[c])return!0;return!1}function T(){};var Ha=Error.captureStackTrace,V=function(a,b){this.code=a;this.message=b;if(Ha)Ha(this,U.prototype.create);else{var c=Error.apply(this,arguments);this.name="FirebaseError";Object.defineProperty(this,"stack",{get:function(){return c.stack}})}};V.prototype=Object.create(Error.prototype);V.prototype.constructor=V;V.prototype.name="FirebaseError";var U=function(a,b,c){this.$=a;this.aa=b;this.U=c;this.pattern=/\{\$([^}]+)}/g};
27
+ U.prototype.create=function(a,b){void 0===b&&(b={});var c=this.U[a];a=this.$+"/"+a;var c=void 0===c?"Error":c.replace(this.pattern,function(a,c){a=b[c];return void 0!==a?a.toString():"<"+c+"?>"}),c=this.aa+": "+c+" ("+a+").",c=new V(a,c),d;for(d in b)b.hasOwnProperty(d)&&"_"!==d.slice(-1)&&(c[d]=b[d]);return c};var W=Q,X=function(a,b,c){var d=this;this.M=c;this.N=!1;this.c={};this.D=b;this.H=P(void 0,a);a="serviceAccount"in this.H;("credential"in this.H||a)&&"undefined"!==typeof console&&console.log("The '"+(a?"serviceAccount":"credential")+"' property specified in the first argument to initializeApp() is deprecated and will be removed in the next major version. You should instead use the 'firebase-admin' package. See https://firebase.google.com/docs/admin/setup for details on how to get started.");Object.keys(c.INTERNAL.factories).forEach(function(a){var b=
28
+ c.INTERNAL.useAsService(d,a);null!==b&&(b=d.X.bind(d,b),d[a]=b)})};X.prototype.delete=function(){var a=this;return(new W(function(b){Y(a);b()})).then(function(){a.M.INTERNAL.removeApp(a.D);var b=[];Object.keys(a.c).forEach(function(c){Object.keys(a.c[c]).forEach(function(d){b.push(a.c[c][d])})});return W.all(b.map(function(a){return a.INTERNAL.delete()}))}).then(function(){a.N=!0;a.c={}})};
29
+ X.prototype.X=function(a,b){Y(this);"undefined"===typeof this.c[a]&&(this.c[a]={});var c=b||"[DEFAULT]";return"undefined"===typeof this.c[a][c]?(b=this.M.INTERNAL.factories[a](this,this.W.bind(this),b),this.c[a][c]=b):this.c[a][c]};X.prototype.W=function(a){P(this,a)};var Y=function(a){a.N&&Z("app-deleted",{name:a.D})};k.Object.defineProperties(X.prototype,{name:{configurable:!0,enumerable:!0,get:function(){Y(this);return this.D}},options:{configurable:!0,enumerable:!0,get:function(){Y(this);return this.H}}});
30
+ X.prototype.name&&X.prototype.options||X.prototype.delete||console.log("dc");
31
+ function Ia(){function a(a){a=a||"[DEFAULT]";var b=d[a];void 0===b&&Z("no-app",{name:a});return b}function b(a,b){Object.keys(e).forEach(function(d){d=c(a,d);if(null!==d&&h[d])h[d](b,a)})}function c(a,b){if("serverAuth"===b)return null;var c=b;a=a.options;"auth"===b&&(a.serviceAccount||a.credential)&&(c="serverAuth","serverAuth"in e||Z("sa-not-supported"));return c}var d={},e={},h={},g={__esModule:!0,initializeApp:function(a,c){void 0===c?c="[DEFAULT]":"string"===typeof c&&""!==c||Z("bad-app-name",
32
+ {name:c+""});void 0!==d[c]&&Z("duplicate-app",{name:c});a=new X(a,c,g);d[c]=a;b(a,"create");void 0!=a.INTERNAL&&void 0!=a.INTERNAL.getToken||P(a,{INTERNAL:{getUid:function(){return null},getToken:function(){return W.resolve(null)},addAuthTokenListener:function(){},removeAuthTokenListener:function(){}}});return a},app:a,apps:null,Promise:W,SDK_VERSION:"0.0.0",INTERNAL:{registerService:function(b,c,d,u){e[b]&&Z("duplicate-service",{name:b});e[b]=c;u&&(h[b]=u);c=function(c){void 0===c&&(c=a());return c[b]()};
33
+ void 0!==d&&P(c,d);return g[b]=c},createFirebaseNamespace:Ia,extendNamespace:function(a){P(g,a)},createSubscribe:Ea,ErrorFactory:U,removeApp:function(a){b(d[a],"delete");delete d[a]},factories:e,useAsService:c,Promise:O,deepExtend:P}};g["default"]=g;Object.defineProperty(g,"apps",{get:function(){return Object.keys(d).map(function(a){return d[a]})}});a.App=X;return g}function Z(a,b){throw Ja.create(a,b);}
34
+ var Ja=new U("app","Firebase",{"no-app":"No Firebase App '{$name}' has been created - call Firebase App.initializeApp()","bad-app-name":"Illegal App name: '{$name}","duplicate-app":"Firebase App named '{$name}' already exists","app-deleted":"Firebase App named '{$name}' already deleted","duplicate-service":"Firebase service named '{$name}' already registered","sa-not-supported":"Initializing the Firebase SDK with a service account is only allowed in a Node.js environment. On client devices, you should instead initialize the SDK with an api key and auth domain"});"undefined"!==typeof firebase&&(firebase=Ia()); }).call(this);
35
+ firebase.SDK_VERSION = "3.7.1";
@@ -0,0 +1,1300 @@
1
+ /**
2
+ * @fileoverview Firebase Auth API.
3
+ * Version: 3.7.1
4
+ *
5
+ * Copyright 2017 Google Inc. All Rights Reserved.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ *
19
+ * @externs
20
+ */
21
+
22
+ /**
23
+ * Gets the {@link firebase.auth.Auth `Auth`} service for the default app or a
24
+ * given app.
25
+ *
26
+ * `firebase.auth()` can be called with no arguments to access the default app's
27
+ * {@link firebase.auth.Auth `Auth`} service or as `firebase.auth(app)` to
28
+ * access the {@link firebase.auth.Auth `Auth`} service associated with a
29
+ * specific app.
30
+ *
31
+ * @example
32
+ * // Get the Auth service for the default app
33
+ * var defaultAuth = firebase.auth();
34
+ *
35
+ * @example
36
+ * // Get the Auth service for a given app
37
+ * var otherAuth = firebase.auth(otherApp);
38
+ *
39
+ * @namespace
40
+ * @param {!firebase.app.App=} app
41
+ *
42
+ * @return {!firebase.auth.Auth}
43
+ */
44
+ firebase.auth = function(app) {};
45
+
46
+ /**
47
+ * Interface that represents the credentials returned by an auth provider.
48
+ * Implementations specify the details about each auth provider's credential
49
+ * requirements.
50
+ *
51
+ * @interface
52
+ */
53
+ firebase.auth.AuthCredential = function() {};
54
+
55
+ /**
56
+ * The authentication provider ID for the credential.
57
+ * For example, 'facebook.com', or 'google.com'.
58
+ *
59
+ * @type {string}
60
+ */
61
+ firebase.auth.AuthCredential.prototype.provider;
62
+
63
+ /**
64
+ * Gets the {@link firebase.auth.Auth `Auth`} service for the current app.
65
+ *
66
+ * @example
67
+ * var auth = app.auth();
68
+ * // The above is shorthand for:
69
+ * // var auth = firebase.auth(app);
70
+ *
71
+ * @return {!firebase.auth.Auth}
72
+ */
73
+ firebase.app.App.prototype.auth = function() {};
74
+
75
+ /**
76
+ * User profile information, visible only to the Firebase project's
77
+ * apps.
78
+ *
79
+ * @interface
80
+ */
81
+ firebase.UserInfo = function() {};
82
+
83
+ /**
84
+ * The user's unique ID.
85
+ *
86
+ * @type {string}
87
+ */
88
+ firebase.UserInfo.prototype.uid;
89
+
90
+ /**
91
+ * The authentication provider ID for the current user.
92
+ * For example, 'facebook.com', or 'google.com'.
93
+ *
94
+ * @type {string}
95
+ */
96
+ firebase.UserInfo.prototype.providerId;
97
+
98
+ /**
99
+ * The user's email address (if available).
100
+ * @type {?string}
101
+ */
102
+ firebase.UserInfo.prototype.email;
103
+
104
+ /**
105
+ * The user's display name (if available).
106
+ *
107
+ * @type {?string}
108
+ */
109
+ firebase.UserInfo.prototype.displayName;
110
+
111
+ /**
112
+ * The URL of the user's profile picture (if available).
113
+ *
114
+ * @type {?string}
115
+ */
116
+ firebase.UserInfo.prototype.photoURL;
117
+
118
+ /**
119
+ * A user account.
120
+ *
121
+ * @interface
122
+ * @extends {firebase.UserInfo}
123
+ */
124
+ firebase.User;
125
+
126
+ /** @type {boolean} */
127
+ firebase.User.prototype.isAnonymous;
128
+
129
+ /**
130
+ * True if the user's email address has been verified.
131
+ * @type {boolean}
132
+ */
133
+ firebase.User.prototype.emailVerified;
134
+
135
+ /**
136
+ * Additional provider-specific information about the user.
137
+ * @type {!Array<firebase.UserInfo>}
138
+ */
139
+ firebase.User.prototype.providerData;
140
+
141
+ /**
142
+ * A refresh token for the user account. Use only for advanced scenarios that
143
+ * require explicitly refreshing tokens.
144
+ * @type {string}
145
+ */
146
+ firebase.User.prototype.refreshToken;
147
+
148
+ /**
149
+ * Returns a JWT token used to identify the user to a Firebase service.
150
+ *
151
+ * Returns the current token if it has not expired, otherwise this will
152
+ * refresh the token and return a new one.
153
+ *
154
+ * @param {boolean=} forceRefresh Force refresh regardless of token
155
+ * expiration.
156
+ * @return {!firebase.Promise<string>}
157
+ */
158
+ firebase.User.prototype.getToken = function(forceRefresh) {};
159
+
160
+ /**
161
+ * Refreshes the current user, if signed in.
162
+ *
163
+ * @return {!firebase.Promise<void>}
164
+ */
165
+ firebase.User.prototype.reload = function() {};
166
+
167
+ /**
168
+ * Sends a verification email to a user.
169
+ *
170
+ * The verification process is completed by calling
171
+ * {@link firebase.auth.Auth#applyActionCode}
172
+ *
173
+ * @return {!firebase.Promise<void>}
174
+ */
175
+ firebase.User.prototype.sendEmailVerification = function() {};
176
+
177
+
178
+ /**
179
+ * Links the user account with the given credentials.
180
+ *
181
+ * <h4>Error Codes</h4>
182
+ * <dl>
183
+ * <dt>auth/provider-already-linked</dt>
184
+ * <dd>Thrown if the provider has already been linked to the user. This error is
185
+ * thrown even if this is not the same provider's account that is currently
186
+ * linked to the user.</dd>
187
+ * <dt>auth/invalid-credential</dt>
188
+ * <dd>Thrown if the provider's credential is not valid. This can happen if it
189
+ * has already expired when calling link, or if it used invalid token(s).
190
+ * Please refer to the Guide, under the provider's section you tried to
191
+ * link, and make sure you pass in the correct parameter to the credential
192
+ * method.</dd>
193
+ * <dt>auth/credential-already-in-use</dt>
194
+ * <dd>Thrown if the account corresponding to the credential already exists
195
+ * among your users, or is already linked to a Firebase User.
196
+ * For example, this error could be thrown if you are upgrading an anonymous
197
+ * user to a Google user by linking a Google credential to it and the Google
198
+ * credential used is already associated with an existing Firebase Google
199
+ * user.
200
+ * An <code>error.email</code> and <code>error.credential</code>
201
+ * ({@link firebase.auth.AuthCredential}) fields are also provided. You can
202
+ * recover from this error by signing in with that credential directly via
203
+ * {@link firebase.auth.Auth#signInWithCredential}.</dd>
204
+ * <dt>auth/email-already-in-use</dt>
205
+ * <dd>Thrown if the email corresponding to the credential already exists
206
+ * among your users. When thrown while linking a credential to an existing
207
+ * user, an <code>error.email</code> and <code>error.credential</code>
208
+ * ({@link firebase.auth.AuthCredential}) fields are also provided.
209
+ * You have to link the credential to the existing user with that email if
210
+ * you wish to continue signing in with that credential. To do so, call
211
+ * {@link firebase.auth.Auth#fetchProvidersForEmail}, sign in to
212
+ * <code>error.email</code> via one of the providers returned and then
213
+ * {@link firebase.User#link} the original credential to that newly signed
214
+ * in user.</dd>
215
+ * <dt>auth/operation-not-allowed</dt>
216
+ * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go
217
+ * to the Firebase Console for your project, in the Auth section and the
218
+ * <strong>Sign in Method</strong> tab and configure the provider.</dd>
219
+ * <dt>auth/invalid-email</dt>
220
+ * <dd>Thrown if the email used in a
221
+ * {@link firebase.auth.EmailAuthProvider#credential} is invalid.</dd>
222
+ * <dt>auth/wrong-password</dt>
223
+ * <dd>Thrown if the password used in a
224
+ * {@link firebase.auth.EmailAuthProvider#credential} is not correct or when
225
+ * the user associated with the email does not have a password.</dd>
226
+ * </dl>
227
+ *
228
+ * @param {!firebase.auth.AuthCredential} credential The auth credential.
229
+ * @return {!firebase.Promise<!firebase.User>}
230
+ */
231
+ firebase.User.prototype.link = function(credential) {};
232
+
233
+
234
+ /**
235
+ * Unlinks a provider from a user account.
236
+ *
237
+ * <h4>Error Codes</h4>
238
+ * <dl>
239
+ * <dt>auth/no-such-provider</dt>
240
+ * <dd>Thrown if the user does not have this provider linked or when the
241
+ * provider ID given does not exist.</dd>
242
+ * </dt>
243
+ *
244
+ * @param {string} providerId
245
+ * @return {!firebase.Promise<!firebase.User>}
246
+ */
247
+ firebase.User.prototype.unlink = function(providerId) {};
248
+
249
+
250
+ /**
251
+ * Re-authenticates a user using a fresh credential. Use before operations
252
+ * such as {@link firebase.User#updatePassword} that require tokens from recent
253
+ * sign-in attempts.
254
+ *
255
+ * <h4>Error Codes</h4>
256
+ * <dl>
257
+ * <dt>auth/user-mismatch</dt>
258
+ * <dd>Thrown if the credential given does not correspond to the user.</dd>
259
+ * <dt>auth/user-not-found</dt>
260
+ * <dd>Thrown if the credential given does not correspond to any existing user.
261
+ * </dd>
262
+ * <dt>auth/invalid-credential</dt>
263
+ * <dd>Thrown if the provider's credential is not valid. This can happen if it
264
+ * has already expired when calling link, or if it used invalid token(s).
265
+ * Please refer to the Guide, under the provider's section you tried to
266
+ * link, and make sure you pass in the correct parameter to the credential
267
+ * method.</dd>
268
+ * <dt>auth/invalid-email</dt>
269
+ * <dd>Thrown if the email used in a
270
+ * {@link firebase.auth.EmailAuthProvider#credential} is invalid.</dd>
271
+ * <dt>auth/wrong-password</dt>
272
+ * <dd>Thrown if the password used in a
273
+ * {@link firebase.auth.EmailAuthProvider#credential} is not correct or when
274
+ * the user associated with the email does not have a password.</dd>
275
+ * </dl>
276
+ *
277
+ * @param {!firebase.auth.AuthCredential} credential
278
+ * @return {!firebase.Promise<void>}
279
+ */
280
+ firebase.User.prototype.reauthenticate = function(credential) {};
281
+
282
+
283
+ /**
284
+ * Updates the user's email address.
285
+ *
286
+ * An email will be sent to the original email address (if it was set) that
287
+ * allows to revoke the email address change, in order to protect them from
288
+ * account hijacking.
289
+ *
290
+ * <b>Important:</b> this is a security sensitive operation that requires the
291
+ * user to have recently signed in. If this requirement isn't met, ask the user
292
+ * to authenticate again and then call {@link firebase.User#reauthenticate}.
293
+ *
294
+ * <h4>Error Codes</h4>
295
+ * <dl>
296
+ * <dt>auth/invalid-email</dt>
297
+ * <dd>Thrown if the email used is invalid.</dd>
298
+ * <dt>auth/email-already-in-use</dt>
299
+ * <dd>Thrown if the email is already used by another user.</dd>
300
+ * <dt>auth/requires-recent-login</dt>
301
+ * <dd>Thrown if the user's last sign-in time does not meet the security
302
+ * threshold. Use {@link firebase.User#reauthenticate} to resolve. This does
303
+ * not apply if the user is anonymous.</dd>
304
+ * </dl>
305
+ *
306
+ * @param {string} newEmail The new email address.
307
+ * @return {!firebase.Promise<void>}
308
+ */
309
+ firebase.User.prototype.updateEmail = function(newEmail) {};
310
+
311
+
312
+ /**
313
+ * Updates the user's password.
314
+ *
315
+ * <b>Important:</b> this is a security sensitive operation that requires the
316
+ * user to have recently signed in. If this requirement isn't met, ask the user
317
+ * to authenticate again and then call {@link firebase.User#reauthenticate}.
318
+ *
319
+ * <h4>Error Codes</h4>
320
+ * <dl>
321
+ * <dt>auth/weak-password</dt>
322
+ * <dd>Thrown if the password is not strong enough.</dd>
323
+ * <dt>auth/requires-recent-login</dt>
324
+ * <dd>Thrown if the user's last sign-in time does not meet the security
325
+ * threshold. Use {@link firebase.User#reauthenticate} to resolve. This does
326
+ * not apply if the user is anonymous.</dd>
327
+ * </dl>
328
+ *
329
+ * @param {string} newPassword
330
+ * @return {!firebase.Promise<void>}
331
+ */
332
+ firebase.User.prototype.updatePassword = function(newPassword) {};
333
+
334
+
335
+ /**
336
+ * Updates a user's profile data.
337
+ *
338
+ * @example
339
+ * // Updates the user attributes:
340
+ * user.updateProfile({
341
+ * displayName: "Jane Q. User",
342
+ * photoURL: "https://example.com/jane-q-user/profile.jpg"
343
+ * }).then(function() {
344
+ * // Profile updated successfully!
345
+ * // "Jane Q. User"
346
+ * var displayName = user.displayName;
347
+ * // "https://example.com/jane-q-user/profile.jpg"
348
+ * var photoURL = user.photoURL;
349
+ * }, function(error) {
350
+ * // An error happened.
351
+ * });
352
+ *
353
+ * // Passing a null value will delete the current attribute's value, but not
354
+ * // passing a property won't change the current attribute's value:
355
+ * // Let's say we're using the same user than before, after the update.
356
+ * user.updateProfile({photoURL: null}).then(function() {
357
+ * // Profile updated successfully!
358
+ * // "Jane Q. User", hasn't changed.
359
+ * var displayName = user.displayName;
360
+ * // Now, this is null.
361
+ * var photoURL = user.photoURL;
362
+ * }, function(error) {
363
+ * // An error happened.
364
+ * });
365
+ *
366
+ * @param {!{displayName: ?string, photoURL: ?string}} profile The profile's
367
+ * displayName and photoURL to update.
368
+ * @return {!firebase.Promise<void>}
369
+ */
370
+ firebase.User.prototype.updateProfile = function(profile) {};
371
+
372
+
373
+ /**
374
+ * Deletes and signs out the user.
375
+ *
376
+ * <b>Important:</b> this is a security sensitive operation that requires the
377
+ * user to have recently signed in. If this requirement isn't met, ask the user
378
+ * to authenticate again and then call {@link firebase.User#reauthenticate}.
379
+ *
380
+ * <h4>Error Codes</h4>
381
+ * <dl>
382
+ * <dt>auth/requires-recent-login</dt>
383
+ * <dd>Thrown if the user's last sign-in time does not meet the security
384
+ * threshold. Use {@link firebase.User#reauthenticate} to resolve. This does
385
+ * not apply if the user is anonymous.</dd>
386
+ * </dl>
387
+ *
388
+ * @return {!firebase.Promise<void>}
389
+ */
390
+ firebase.User.prototype.delete = function() {};
391
+
392
+
393
+ /**
394
+ * Returns a JSON-serializable representation of this object.
395
+ *
396
+ * @return {!Object} A JSON-serializable representation of this object.
397
+ */
398
+ firebase.User.prototype.toJSON = function() {};
399
+
400
+
401
+ /**
402
+ * Checks a password reset code sent to the user by email or other out-of-band
403
+ * mechanism.
404
+ *
405
+ * Returns the user's email address if valid.
406
+ *
407
+ * <h4>Error Codes</h4>
408
+ * <dl>
409
+ * <dt>auth/expired-action-code</dt>
410
+ * <dd>Thrown if the password reset code has expired.</dd>
411
+ * <dt>auth/invalid-action-code</dt>
412
+ * <dd>Thrown if the password reset code is invalid. This can happen if the code
413
+ * is malformed or has already been used.</dd>
414
+ * <dt>auth/user-disabled</dt>
415
+ * <dd>Thrown if the user corresponding to the given password reset code has
416
+ * been disabled.</dd>
417
+ * <dt>auth/user-not-found</dt>
418
+ * <dd>Thrown if there is no user corresponding to the password reset code. This
419
+ * may have happened if the user was deleted between when the code was
420
+ * issued and when this method was called.</dd>
421
+ * </dl>
422
+ *
423
+ * @param {string} code A verification code sent to the user.
424
+ * @return {!firebase.Promise<string>}
425
+ */
426
+ firebase.auth.Auth.prototype.verifyPasswordResetCode = function(code) {};
427
+
428
+
429
+ /**
430
+ * A response from {@link firebase.auth.Auth#checkActionCode}.
431
+ *
432
+ * @interface
433
+ */
434
+ firebase.auth.ActionCodeInfo = function() {};
435
+
436
+
437
+ /**
438
+ * The email address associated with the action code.
439
+ *
440
+ * @typedef {{
441
+ * email: string
442
+ * }}
443
+ */
444
+ firebase.auth.ActionCodeInfo.prototype.data;
445
+
446
+
447
+ /**
448
+ * Checks a verification code sent to the user by email or other out-of-band
449
+ * mechanism.
450
+ *
451
+ * Returns metadata about the code.
452
+ *
453
+ * <h4>Error Codes</h4>
454
+ * <dl>
455
+ * <dt>auth/expired-action-code</dt>
456
+ * <dd>Thrown if the action code has expired.</dd>
457
+ * <dt>auth/invalid-action-code</dt>
458
+ * <dd>Thrown if the action code is invalid. This can happen if the code is
459
+ * malformed or has already been used.</dd>
460
+ * <dt>auth/user-disabled</dt>
461
+ * <dd>Thrown if the user corresponding to the given action code has been
462
+ * disabled.</dd>
463
+ * <dt>auth/user-not-found</dt>
464
+ * <dd>Thrown if there is no user corresponding to the action code. This may
465
+ * have happened if the user was deleted between when the action code was
466
+ * issued and when this method was called.</dd>
467
+ * </dl>
468
+ *
469
+ * @param {string} code A verification code sent to the user.
470
+ * @return {!firebase.Promise<!firebase.auth.ActionCodeInfo>}
471
+ */
472
+ firebase.auth.Auth.prototype.checkActionCode = function(code) {};
473
+
474
+
475
+ /**
476
+ * Applies a verification code sent to the user by email or other out-of-band
477
+ * mechanism.
478
+ *
479
+ * <h4>Error Codes</h4>
480
+ * <dl>
481
+ * <dt>auth/expired-action-code</dt>
482
+ * <dd>Thrown if the action code has expired.</dd>
483
+ * <dt>auth/invalid-action-code</dt>
484
+ * <dd>Thrown if the action code is invalid. This can happen if the code is
485
+ * malformed or has already been used.</dd>
486
+ * <dt>auth/user-disabled</dt>
487
+ * <dd>Thrown if the user corresponding to the given action code has been
488
+ * disabled.</dd>
489
+ * <dt>auth/user-not-found</dt>
490
+ * <dd>Thrown if there is no user corresponding to the action code. This may
491
+ * have happened if the user was deleted between when the action code was
492
+ * issued and when this method was called.</dd>
493
+ * </dl>
494
+ *
495
+ * @param {string} code A verification code sent to the user.
496
+ * @return {!firebase.Promise<void>}
497
+ */
498
+ firebase.auth.Auth.prototype.applyActionCode = function(code) {};
499
+
500
+ /**
501
+ * The Firebase Auth service interface.
502
+ *
503
+ * Do not call this constructor directly. Instead, use
504
+ * {@link firebase.auth `firebase.auth()`}.
505
+ *
506
+ * See
507
+ * {@link https://firebase.google.com/docs/auth/ Firebase Authentication}
508
+ * for a full guide on how to use the Firebase Auth service.
509
+ *
510
+ * @interface
511
+ */
512
+ firebase.auth.Auth = function() {};
513
+
514
+ /**
515
+ * The {@link firebase.app.App app} associated with the `Auth` service
516
+ * instance.
517
+ *
518
+ * @example
519
+ * var app = auth.app;
520
+ *
521
+ * @type {!firebase.app.App}
522
+ */
523
+ firebase.auth.Auth.prototype.app;
524
+
525
+ /**
526
+ * The currently signed-in user (or null).
527
+ *
528
+ * @type {firebase.User|null}
529
+ */
530
+ firebase.auth.Auth.prototype.currentUser;
531
+
532
+ /**
533
+ * Creates a new user account associated with the specified email address and
534
+ * password.
535
+ *
536
+ * On successful creation of the user account, this user will also be
537
+ * signed in to your application.
538
+ *
539
+ * User account creation can fail if the account already exists or the password
540
+ * is invalid.
541
+ *
542
+ * Note: The email address acts as a unique identifier for the user and
543
+ * enables an email-based password reset. This function will create
544
+ * a new user account and set the initial user password.
545
+ *
546
+ * <h4>Error Codes</h4>
547
+ * <dl>
548
+ * <dt>auth/email-already-in-use</dt>
549
+ * <dd>Thrown if there already exists an account with the given email
550
+ * address.</dd>
551
+ * <dt>auth/invalid-email</dt>
552
+ * <dd>Thrown if the email address is not valid.</dd>
553
+ * <dt>auth/operation-not-allowed</dt>
554
+ * <dd>Thrown if email/password accounts are not enabled. Enable email/password
555
+ * accounts in the Firebase Console, under the Auth tab.</dd>
556
+ * <dt>auth/weak-password</dt>
557
+ * <dd>Thrown if the password is not strong enough.</dd>
558
+ * </dl>
559
+ *
560
+ * @example
561
+ * firebase.auth().createUserWithEmailAndPassword(email, password)
562
+ * .catch(function(error) {
563
+ * // Handle Errors here.
564
+ * var errorCode = error.code;
565
+ * var errorMessage = error.message;
566
+ * if (errorCode == 'auth/weak-password') {
567
+ * alert('The password is too weak.');
568
+ * } else {
569
+ * alert(errorMessage);
570
+ * }
571
+ * console.log(error);
572
+ * });
573
+ *
574
+ * @param {string} email The user's email address.
575
+ * @param {string} password The user's chosen password.
576
+ * @return {!firebase.Promise<!firebase.User>}
577
+ */
578
+ firebase.auth.Auth.prototype.createUserWithEmailAndPassword =
579
+ function(email, password) {};
580
+
581
+
582
+ /**
583
+ * Gets the list of provider IDs that can be used to sign in for the given email
584
+ * address. Useful for an "identifier-first" sign-in flow.
585
+ *
586
+ * <h4>Error Codes</h4>
587
+ * <dl>
588
+ * <dt>auth/invalid-email</dt>
589
+ * <dd>Thrown if the email address is not valid.</dd>
590
+ * </dl>
591
+ *
592
+ * @param {string} email An email address.
593
+ * @return {!firebase.Promise<!Array<string>>}
594
+ */
595
+ firebase.auth.Auth.prototype.fetchProvidersForEmail = function(email) {};
596
+
597
+
598
+ /**
599
+ * Adds an observer for auth state changes.
600
+ *
601
+ * @example
602
+ * firebase.auth().onAuthStateChanged(function(user) {
603
+ * if (user) {
604
+ * // User is signed in.
605
+ * }
606
+ * });
607
+ *
608
+ * @param {!Object|function(?firebase.User)}
609
+ * nextOrObserver An observer object or a function triggered on change.
610
+ * @param {function(!firebase.auth.Error)=} error Optional A function
611
+ * triggered on auth error.
612
+ * @param {function()=} completed Optional A function triggered when the
613
+ * observer is removed.
614
+ * @return {!function()} The unsubscribe function for the observer.
615
+ */
616
+ firebase.auth.Auth.prototype.onAuthStateChanged = function(
617
+ nextOrObserver, error, completed) {};
618
+
619
+
620
+ /**
621
+ * Sends a password reset email to the given email address.
622
+ *
623
+ * To complete the password reset, call
624
+ * {@link firebase.auth.Auth#confirmPasswordReset} with the code supplied in the
625
+ * email sent to the user, along with the new password specified by the user.
626
+ *
627
+ * <h4>Error Codes</h4>
628
+ * <dl>
629
+ * <dt>auth/invalid-email</dt>
630
+ * <dd>Thrown if the email address is not valid.</dd>
631
+ * <dt>auth/user-not-found</dt>
632
+ * <dd>Thrown if there is no user corresponding to the email address.</dd>
633
+ * </dl>
634
+ *
635
+ * @param {string} email The email address with the password to be reset.
636
+ * @return {!firebase.Promise<void>}
637
+ */
638
+ firebase.auth.Auth.prototype.sendPasswordResetEmail = function(email) {};
639
+
640
+
641
+ /**
642
+ * Completes the password reset process, given a confirmation code and new
643
+ * password.
644
+ *
645
+ * <h4>Error Codes</h4>
646
+ * <dl>
647
+ * <dt>auth/expired-action-code</dt>
648
+ * <dd>Thrown if the password reset code has expired.</dd>
649
+ * <dt>auth/invalid-action-code</dt>
650
+ * <dd>Thrown if the password reset code is invalid. This can happen if the
651
+ * code is malformed or has already been used.</dd>
652
+ * <dt>auth/user-disabled</dt>
653
+ * <dd>Thrown if the user corresponding to the given password reset code has
654
+ * been disabled.</dd>
655
+ * <dt>auth/user-not-found</dt>
656
+ * <dd>Thrown if there is no user corresponding to the password reset code. This
657
+ * may have happened if the user was deleted between when the code was
658
+ * issued and when this method was called.</dd>
659
+ * <dt>auth/weak-password</dt>
660
+ * <dd>Thrown if the new password is not strong enough.</dd>
661
+ * </dl>
662
+ *
663
+ * @param {string} code The confirmation code send via email to the user.
664
+ * @param {string} newPassword The new password.
665
+ * @return {!firebase.Promise<void>}
666
+ */
667
+ firebase.auth.Auth.prototype.confirmPasswordReset =
668
+ function(code, newPassword) {};
669
+
670
+ /**
671
+ * Asynchronously signs in with the given credentials.
672
+ *
673
+ * <h4>Error Codes</h4>
674
+ * <dl>
675
+ * <dt>auth/account-exists-with-different-credential</dt>
676
+ * <dd>Thrown if there already exists an account with the email address
677
+ * asserted by the credential. Resolve this by calling
678
+ * {@link firebase.auth.Auth#fetchProvidersForEmail} and then asking the
679
+ * user to sign in using one of the returned providers. Once the user is
680
+ * signed in, the original credential can be linked to the user with
681
+ * {@link firebase.User#link}.</dd>
682
+ * <dt>auth/invalid-credential</dt>
683
+ * <dd>Thrown if the credential is malformed or has expired.</dd>
684
+ * <dt>auth/operation-not-allowed</dt>
685
+ * <dd>Thrown if the type of account corresponding to the credential
686
+ * is not enabled. Enable the account type in the Firebase Console, under
687
+ * the Auth tab.</dd>
688
+ * <dt>auth/user-disabled</dt>
689
+ * <dd>Thrown if the user corresponding to the given credential has been
690
+ * disabled.</dd>
691
+ * <dt>auth/user-not-found</dt>
692
+ * <dd>Thrown if signing in with a credential from
693
+ * {@link firebase.auth.EmailAuthProvider#credential} and there is no user
694
+ * corresponding to the given email. </dd>
695
+ * <dt>auth/wrong-password</dt>
696
+ * <dd>Thrown if signing in with a credential from
697
+ * {@link firebase.auth.EmailAuthProvider#credential} and the password is
698
+ * invalid for the given email, or if the account corresponding to the email
699
+ * does not have a password set.</dd>
700
+ * </dl>
701
+ *
702
+ * @example
703
+ * firebase.auth().signInWithCredential(credential).catch(function(error) {
704
+ * // Handle Errors here.
705
+ * var errorCode = error.code;
706
+ * var errorMessage = error.message;
707
+ * // The email of the user's account used.
708
+ * var email = error.email;
709
+ * // The firebase.auth.AuthCredential type that was used.
710
+ * var credential = error.credential;
711
+ * if (errorCode === 'auth/account-exists-with-different-credential') {
712
+ * alert('Email already associated with another account.');
713
+ * // Handle account linking here, if using.
714
+ * } else {
715
+ * console.error(error);
716
+ * }
717
+ * });
718
+ *
719
+ * @param {!firebase.auth.AuthCredential} credential The auth credential.
720
+ * @return {!firebase.Promise<!firebase.User>}
721
+ */
722
+ firebase.auth.Auth.prototype.signInWithCredential = function(credential) {};
723
+
724
+
725
+ /**
726
+ * Asynchronously signs in using a custom token.
727
+ *
728
+ * Custom tokens are used to integrate Firebase Auth with existing auth systems,
729
+ * and must be generated by the auth backend.
730
+ *
731
+ * Fails with an error if the token is invalid, expired, or not accepted by the
732
+ * Firebase Auth service.
733
+ *
734
+ * <h4>Error Codes</h4>
735
+ * <dl>
736
+ * <dt>auth/custom-token-mismatch</dt>
737
+ * <dd>Thrown if the custom token is for a different Firebase App.</dd>
738
+ * <dt>auth/invalid-custom-token</dt>
739
+ * <dd>Thrown if the custom token format is incorrect.</dd>
740
+ * </dl>
741
+ *
742
+ * @example
743
+ * firebase.auth().signInWithCustomToken(token).catch(function(error) {
744
+ * // Handle Errors here.
745
+ * var errorCode = error.code;
746
+ * var errorMessage = error.message;
747
+ * if (errorCode === 'auth/invalid-custom-token') {
748
+ * alert('The token you provided is not valid.');
749
+ * } else {
750
+ * console.error(error);
751
+ * }
752
+ * });
753
+ *
754
+ * @param {string} token The custom token to sign in with.
755
+ * @return {!firebase.Promise<!firebase.User>}
756
+ */
757
+ firebase.auth.Auth.prototype.signInWithCustomToken = function(token) {};
758
+
759
+
760
+ /**
761
+ * Asynchronously signs in using an email and password.
762
+ *
763
+ * Fails with an error if the email address and password do not match.
764
+ *
765
+ * Note: The user's password is NOT the password used to access the user's email
766
+ * account. The email address serves as a unique identifier for the user, and
767
+ * the password is used to access the user's account in your Firebase project.
768
+ *
769
+ * See also: {@link firebase.auth.Auth#createUserWithEmailAndPassword}.
770
+ *
771
+ * <h4>Error Codes</h4>
772
+ * <dl>
773
+ * <dt>auth/invalid-email</dt>
774
+ * <dd>Thrown if the email address is not valid.</dd>
775
+ * <dt>auth/user-disabled</dt>
776
+ * <dd>Thrown if the user corresponding to the given email has been
777
+ * disabled.</dd>
778
+ * <dt>auth/user-not-found</dt>
779
+ * <dd>Thrown if there is no user corresponding to the given email.</dd>
780
+ * <dt>auth/wrong-password</dt>
781
+ * <dd>Thrown if the password is invalid for the given email, or the account
782
+ * corresponding to the email does not have a password set.</dd>
783
+ * </dl>
784
+ *
785
+ * @example
786
+ * firebase.auth().signInWithEmailAndPassword(email, password)
787
+ * .catch(function(error) {
788
+ * // Handle Errors here.
789
+ * var errorCode = error.code;
790
+ * var errorMessage = error.message;
791
+ * if (errorCode === 'auth/wrong-password') {
792
+ * alert('Wrong password.');
793
+ * } else {
794
+ * alert(errorMessage);
795
+ * }
796
+ * console.log(error);
797
+ * });
798
+ *
799
+ * @param {string} email The users email address.
800
+ * @param {string} password The users password.
801
+ * @return {!firebase.Promise<!firebase.User>}
802
+ */
803
+ firebase.auth.Auth.prototype.signInWithEmailAndPassword =
804
+ function(email, password) {};
805
+
806
+
807
+ /**
808
+ * Asynchronously signs in as an anonymous user.
809
+ *
810
+ * If there is already an anonymous user signed in, that user will be returned;
811
+ * otherwise, a new anonymous user identity will be created and returned.
812
+ *
813
+ * <h4>Error Codes</h4>
814
+ * <dl>
815
+ * <dt>auth/operation-not-allowed</dt>
816
+ * <dd>Thrown if anonymous accounts are not enabled. Enable anonymous accounts
817
+ * in the Firebase Console, under the Auth tab.</dd>
818
+ * </dl>
819
+ *
820
+ * @example
821
+ * firebase.auth().signInAnonymously().catch(function(error) {
822
+ * // Handle Errors here.
823
+ * var errorCode = error.code;
824
+ * var errorMessage = error.message;
825
+ *
826
+ * if (errorCode === 'auth/operation-not-allowed') {
827
+ * alert('You must enable Anonymous auth in the Firebase Console.');
828
+ * } else {
829
+ * console.error(error);
830
+ * }
831
+ * });
832
+ *
833
+ * @return {!firebase.Promise<!firebase.User>}
834
+ */
835
+ firebase.auth.Auth.prototype.signInAnonymously = function() {};
836
+
837
+
838
+ /**
839
+ * A structure containing a User and an AuthCredential.
840
+ *
841
+ * @typedef {{
842
+ * user: ?firebase.User,
843
+ * credential: ?firebase.auth.AuthCredential
844
+ * }}
845
+ */
846
+ firebase.auth.UserCredential;
847
+
848
+ /**
849
+ * Signs out the current user.
850
+ *
851
+ * @return {!firebase.Promise<void>}
852
+ */
853
+ firebase.auth.Auth.prototype.signOut = function() {};
854
+
855
+
856
+ /**
857
+ * An authentication error.
858
+ * For method-specific error codes, refer to the specific methods in the
859
+ * documentation. For common error codes, check the reference below. Use {@link
860
+ * firebase.auth.Error#code} to get the specific error code. For a detailed
861
+ * message, use {@link firebase.auth.Error#message}.
862
+ * Errors with the code <strong>auth/account-exists-with-different-credential
863
+ * </strong> will have the additional fields <strong>email</strong> and <strong>
864
+ * credential</strong> which are needed to provide a way to resolve these
865
+ * specific errors. Refer to {@link firebase.auth.Auth#signInWithPopup} for more
866
+ * information.
867
+ *
868
+ * <h4>Common Error Codes</h4>
869
+ * <dl>
870
+ * <dt>auth/app-deleted</dt>
871
+ * <dd>Thrown if the instance of FirebaseApp has been deleted.</dd>
872
+ * <dt>auth/app-not-authorized</dt>
873
+ * <dd>Thrown if the app identified by the domain where it's hosted, is not
874
+ * authorized to use Firebase Authentication with the provided API key.
875
+ * Review your key configuration in the Google API console.</dd>
876
+ * <dt>auth/argument-error</dt>
877
+ * <dd>Thrown if a method is called with incorrect arguments.</dd>
878
+ * <dt>auth/invalid-api-key</dt>
879
+ * <dd>Thrown if the provided API key is invalid. Please check that you have
880
+ * copied it correctly from the Firebase Console.</dd>
881
+ * <dt>auth/invalid-user-token</dt>
882
+ * <dd>Thrown if the user's credential is no longer valid. The user must sign in
883
+ * again.</dd>
884
+ * <dt>auth/network-request-failed</dt>
885
+ * <dd>Thrown if a network error (such as timeout, interrupted connection or
886
+ * unreachable host) has occurred.</dd>
887
+ * <dt>auth/operation-not-allowed</dt>
888
+ * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go
889
+ * to the Firebase Console for your project, in the Auth section and the
890
+ * <strong>Sign in Method</strong> tab and configure the provider.</dd>
891
+ * <dt>auth/requires-recent-login</dt>
892
+ * <dd>Thrown if the user's last sign-in time does not meet the security
893
+ * threshold. Use {@link firebase.User#reauthenticate} to resolve. This does
894
+ * not apply if the user is anonymous.</dd>
895
+ * <dt>auth/too-many-requests</dt>
896
+ * <dd>Thrown if requests are blocked from a device due to unusual activity.
897
+ * Trying again after some delay would unblock.</dd>
898
+ * <dt>auth/unauthorized-domain</dt>
899
+ * <dd>Thrown if the app domain is not authorized for OAuth operations for your
900
+ * Firebase project. Edit the list of authorized domains from the Firebase
901
+ * console.</dd>
902
+ * <dt>auth/user-disabled</dt>
903
+ * <dd>Thrown if the user account has been disabled by an administrator.
904
+ * Accounts can be enabled or disabled in the Firebase Console, the Auth
905
+ * section and Users subsection.</dd>
906
+ * <dt>auth/user-token-expired</dt>
907
+ * <dd>Thrown if the user's credential has expired. This could also be thrown if
908
+ * a user has been deleted. Prompting the user to sign in again should
909
+ * resolve this for either case.</dd>
910
+ * <dt>auth/web-storage-unsupported</dt>
911
+ * <dd>Thrown if the browser does not support web storage or if the user
912
+ * disables them.</dd>
913
+ * </dl>
914
+ *
915
+ * @interface
916
+ */
917
+ firebase.auth.Error = function() {};
918
+
919
+ /**
920
+ * Unique error code.
921
+ *
922
+ * @type {string}
923
+ */
924
+ firebase.auth.Error.prototype.code;
925
+
926
+ /**
927
+ * Complete error message.
928
+ *
929
+ * @type {string}
930
+ */
931
+ firebase.auth.Error.prototype.message;
932
+
933
+
934
+ //
935
+ // List of Auth Providers.
936
+ //
937
+
938
+
939
+ /**
940
+ * Interface that represents an auth provider.
941
+ *
942
+ * @interface
943
+ */
944
+ firebase.auth.AuthProvider = function() {};
945
+
946
+ /** @type {string} */
947
+ firebase.auth.AuthProvider.prototype.providerId;
948
+
949
+ /**
950
+ * Facebook auth provider.
951
+ *
952
+ * @example
953
+ * // Sign in using a redirect.
954
+ * firebase.auth().getRedirectResult().then(function(result) {
955
+ * if (result.credential) {
956
+ * // This gives you a Google Access Token.
957
+ * var token = result.credential.accessToken;
958
+ * }
959
+ * var user = result.user;
960
+ * })
961
+ * // Start a sign in process for an unauthenticated user.
962
+ * var provider = new firebase.auth.FacebookAuthProvider();
963
+ * provider.addScope('user_birthday');
964
+ * firebase.auth().signInWithRedirect(provider);
965
+ *
966
+ * @example
967
+ * // Sign in using a popup.
968
+ * var provider = new firebase.auth.FacebookAuthProvider();
969
+ * provider.addScope('user_birthday');
970
+ * firebase.auth().signInWithPopup(provider).then(function(result) {
971
+ * // This gives you a Facebook Access Token.
972
+ * var token = result.credential.accessToken;
973
+ * // The signed-in user info.
974
+ * var user = result.user;
975
+ * });
976
+ *
977
+ * @see {@link firebase.auth.Auth#onAuthStateChanged} to receive sign in state
978
+ * changes.
979
+ * @constructor
980
+ * @implements {firebase.auth.AuthProvider}
981
+ */
982
+ firebase.auth.FacebookAuthProvider = function() {};
983
+
984
+ /** @type {string} */
985
+ firebase.auth.FacebookAuthProvider.PROVIDER_ID;
986
+
987
+ /**
988
+ * @example
989
+ * var cred = firebase.auth.FacebookAuthProvider.credential(
990
+ * // `event` from the Facebook auth.authResponseChange callback.
991
+ * event.authResponse.accessToken
992
+ * );
993
+ *
994
+ * @param {string} token Facebook access token.
995
+ * @return {!firebase.auth.AuthCredential} The auth provider credential.
996
+ */
997
+ firebase.auth.FacebookAuthProvider.credential = function(token) {};
998
+
999
+ /** @type {string} */
1000
+ firebase.auth.FacebookAuthProvider.prototype.providerId;
1001
+
1002
+ /**
1003
+ * @param {string} scope Facebook OAuth scope.
1004
+ */
1005
+ firebase.auth.FacebookAuthProvider.prototype.addScope = function(scope) {};
1006
+
1007
+ /**
1008
+ * Sets the OAuth custom parameters to pass in a Facebook OAuth request for
1009
+ * popup and redirect sign-in operations.
1010
+ * Valid parameters include 'auth_type', 'display' and 'locale'.
1011
+ * For a detailed list, check the
1012
+ * {@link https://goo.gl/pve4fo Facebook}
1013
+ * documentation.
1014
+ * Reserved required OAuth 2.0 parameters such as 'client_id', 'redirect_uri',
1015
+ * 'scope', 'response_type' and 'state' are not allowed and will be ignored.
1016
+ * @param {!Object} customOAuthParameters The custom OAuth parameters to pass
1017
+ * in the OAuth request.
1018
+ */
1019
+ firebase.auth.FacebookAuthProvider.prototype.setCustomParameters =
1020
+ function(customOAuthParameters) {};
1021
+
1022
+
1023
+ /**
1024
+ * Github auth provider.
1025
+ *
1026
+ * GitHub requires an OAuth 2.0 redirect, so you can either handle the redirect
1027
+ * directly, or use the signInWithPopup handler:
1028
+ *
1029
+ * @example
1030
+ * // Using a redirect.
1031
+ * firebase.auth().getRedirectResult().then(function(result) {
1032
+ * if (result.credential) {
1033
+ * // This gives you a GitHub Access Token.
1034
+ * var token = result.credential.accessToken;
1035
+ * }
1036
+ * var user = result.user;
1037
+ * }).catch(function(error) {
1038
+ * // Handle Errors here.
1039
+ * var errorCode = error.code;
1040
+ * var errorMessage = error.message;
1041
+ * // The email of the user's account used.
1042
+ * var email = error.email;
1043
+ * // The firebase.auth.AuthCredential type that was used.
1044
+ * var credential = error.credential;
1045
+ * if (errorCode === 'auth/account-exists-with-different-credential') {
1046
+ * alert('You have signed up with a different provider for that email.');
1047
+ * // Handle linking here if your app allows it.
1048
+ * } else {
1049
+ * console.error(error);
1050
+ * }
1051
+ * });
1052
+ *
1053
+ * // Start a sign in process for an unauthenticated user.
1054
+ * var provider = new firebase.auth.GithubAuthProvider();
1055
+ * provider.addScope('repo');
1056
+ * firebase.auth().signInWithRedirect(provider);
1057
+ *
1058
+ * @example
1059
+ * // With popup.
1060
+ * var provider = new firebase.auth.GithubAuthProvider();
1061
+ * provider.addScope('repo');
1062
+ * firebase.auth().signInWithPopup(provider).then(function(result) {
1063
+ * // This gives you a GitHub Access Token.
1064
+ * var token = result.credential.accessToken;
1065
+ * // The signed-in user info.
1066
+ * var user = result.user;
1067
+ * }).catch(function(error) {
1068
+ * // Handle Errors here.
1069
+ * var errorCode = error.code;
1070
+ * var errorMessage = error.message;
1071
+ * // The email of the user's account used.
1072
+ * var email = error.email;
1073
+ * // The firebase.auth.AuthCredential type that was used.
1074
+ * var credential = error.credential;
1075
+ * if (errorCode === 'auth/account-exists-with-different-credential') {
1076
+ * alert('You have signed up with a different provider for that email.');
1077
+ * // Handle linking here if your app allows it.
1078
+ * } else {
1079
+ * console.error(error);
1080
+ * }
1081
+ * });
1082
+ *
1083
+ * @see {@link firebase.auth.Auth#onAuthStateChanged} to receive sign in state
1084
+ * changes.
1085
+ * @constructor
1086
+ * @implements {firebase.auth.AuthProvider}
1087
+ */
1088
+ firebase.auth.GithubAuthProvider = function() {};
1089
+
1090
+ /** @type {string} */
1091
+ firebase.auth.GithubAuthProvider.PROVIDER_ID;
1092
+
1093
+ /**
1094
+ * @example
1095
+ * var cred = firebase.auth.FacebookAuthProvider.credential(
1096
+ * // `event` from the Facebook auth.authResponseChange callback.
1097
+ * event.authResponse.accessToken
1098
+ * );
1099
+ *
1100
+ * @param {string} token Github access token.
1101
+ * @return {!firebase.auth.AuthCredential} The auth provider credential.
1102
+ */
1103
+ firebase.auth.GithubAuthProvider.credential = function(token) {};
1104
+
1105
+ /** @type {string} */
1106
+ firebase.auth.GithubAuthProvider.prototype.providerId;
1107
+
1108
+ /**
1109
+ * @param {string} scope Github OAuth scope.
1110
+ */
1111
+ firebase.auth.GithubAuthProvider.prototype.addScope = function(scope) {};
1112
+
1113
+ /**
1114
+ * Sets the OAuth custom parameters to pass in a GitHub OAuth request for popup
1115
+ * and redirect sign-in operations.
1116
+ * Valid parameters include 'allow_signup'.
1117
+ * For a detailed list, check the
1118
+ * {@link https://developer.github.com/v3/oauth/ GitHub} documentation.
1119
+ * Reserved required OAuth 2.0 parameters such as 'client_id', 'redirect_uri',
1120
+ * 'scope', 'response_type' and 'state' are not allowed and will be ignored.
1121
+ * @param {!Object} customOAuthParameters The custom OAuth parameters to pass
1122
+ * in the OAuth request.
1123
+ */
1124
+ firebase.auth.GithubAuthProvider.prototype.setCustomParameters =
1125
+ function(customOAuthParameters) {};
1126
+
1127
+
1128
+ /**
1129
+ * Google auth provider.
1130
+ *
1131
+ * @example
1132
+ * // Using a redirect.
1133
+ * firebase.auth().getRedirectResult().then(function(result) {
1134
+ * if (result.credential) {
1135
+ * // This gives you a Google Access Token.
1136
+ * var token = result.credential.accessToken;
1137
+ * }
1138
+ * var user = result.user;
1139
+ * });
1140
+ *
1141
+ * // Start a sign in process for an unauthenticated user.
1142
+ * var provider = new firebase.auth.GoogleAuthProvider();
1143
+ * provider.addScope('profile');
1144
+ * provider.addScope('email');
1145
+ * firebase.auth().signInWithRedirect(provider);
1146
+ *
1147
+ * @example
1148
+ * // Using a popup.
1149
+ * var provider = new firebase.auth.GoogleAuthProvider();
1150
+ * provider.addScope('profile');
1151
+ * provider.addScope('email');
1152
+ * firebase.auth().signInWithPopup(provider).then(function(result) {
1153
+ * // This gives you a Google Access Token.
1154
+ * var token = result.credential.accessToken;
1155
+ * // The signed-in user info.
1156
+ * var user = result.user;
1157
+ * });
1158
+ *
1159
+ * @see {@link firebase.auth.Auth#onAuthStateChanged} to receive sign in state
1160
+ * changes.
1161
+ * @constructor
1162
+ * @implements {firebase.auth.AuthProvider}
1163
+ */
1164
+ firebase.auth.GoogleAuthProvider = function() {};
1165
+
1166
+ /** @type {string} */
1167
+ firebase.auth.GoogleAuthProvider.PROVIDER_ID;
1168
+
1169
+ /**
1170
+ * Creates a credential for Google. At least one of ID token and access token
1171
+ * is required.
1172
+ *
1173
+ * @example
1174
+ * // `googleUser` from the onsuccess Google Sign In callback.
1175
+ * var credential = firebase.auth.GoogleAuthProvider.credential(
1176
+ googleUser.getAuthResponse().id_token);
1177
+ * firebase.auth().signInWithCredential(credential)
1178
+ *
1179
+ * @param {?string=} idToken Google ID token.
1180
+ * @param {?string=} accessToken Google access token.
1181
+ * @return {!firebase.auth.AuthCredential} The auth provider credential.
1182
+ */
1183
+ firebase.auth.GoogleAuthProvider.credential = function(idToken, accessToken) {};
1184
+
1185
+ /** @type {string} */
1186
+ firebase.auth.GoogleAuthProvider.prototype.providerId;
1187
+
1188
+ /**
1189
+ * @param {string} scope Google OAuth scope.
1190
+ */
1191
+ firebase.auth.GoogleAuthProvider.prototype.addScope = function(scope) {};
1192
+
1193
+ /**
1194
+ * Sets the OAuth custom parameters to pass in a Google OAuth request for popup
1195
+ * and redirect sign-in operations.
1196
+ * Valid parameters include 'hd', 'hl', 'include_granted_scopes', 'login_hint'
1197
+ * and 'prompt'.
1198
+ * For a detailed list, check the
1199
+ * {@link https://goo.gl/Xo01Jm Google}
1200
+ * documentation.
1201
+ * Reserved required OAuth 2.0 parameters such as 'client_id', 'redirect_uri',
1202
+ * 'scope', 'response_type' and 'state' are not allowed and will be ignored.
1203
+ * @param {!Object} customOAuthParameters The custom OAuth parameters to pass
1204
+ * in the OAuth request.
1205
+ */
1206
+ firebase.auth.GoogleAuthProvider.prototype.setCustomParameters =
1207
+ function(customOAuthParameters) {};
1208
+
1209
+
1210
+ /**
1211
+ * Twitter auth provider.
1212
+ *
1213
+ * @example
1214
+ * // Using a redirect.
1215
+ * firebase.auth().getRedirectResult().then(function(result) {
1216
+ * if (result.credential) {
1217
+ * // For accessing the Twitter API.
1218
+ * var token = result.credential.accessToken;
1219
+ * var secret = result.credential.secret;
1220
+ * }
1221
+ * var user = result.user;
1222
+ * });
1223
+ *
1224
+ * // Start a sign in process for an unauthenticated user.
1225
+ * var provider = new firebase.auth.TwitterAuthProvider();
1226
+ * firebase.auth().signInWithRedirect(provider);
1227
+ *
1228
+ * @example
1229
+ * // Using a popup.
1230
+ * var provider = new firebase.auth.TwitterAuthProvider();
1231
+ * firebase.auth().signInWithPopup(provider).then(function(result) {
1232
+ * // For accessing the Twitter API.
1233
+ * var token = result.credential.accessToken;
1234
+ * var secret = result.credential.secret;
1235
+ * // The signed-in user info.
1236
+ * var user = result.user;
1237
+ * });
1238
+ *
1239
+ * @see {@link firebase.auth.Auth#onAuthStateChanged} to receive sign in state
1240
+ * changes.
1241
+ * @constructor
1242
+ * @implements {firebase.auth.AuthProvider}
1243
+ */
1244
+ firebase.auth.TwitterAuthProvider = function() {};
1245
+
1246
+ /** @type {string} */
1247
+ firebase.auth.TwitterAuthProvider.PROVIDER_ID;
1248
+
1249
+ /**
1250
+ * @param {string} token Twitter access token.
1251
+ * @param {string} secret Twitter secret.
1252
+ * @return {!firebase.auth.AuthCredential} The auth provider credential.
1253
+ */
1254
+ firebase.auth.TwitterAuthProvider.credential = function(token, secret) {};
1255
+
1256
+ /** @type {string} */
1257
+ firebase.auth.TwitterAuthProvider.prototype.providerId;
1258
+
1259
+ /**
1260
+ * Sets the OAuth custom parameters to pass in a Twitter OAuth request for popup
1261
+ * and redirect sign-in operations.
1262
+ * Valid parameters include 'lang'.
1263
+ * Reserved required OAuth 1.0 parameters such as 'oauth_consumer_key',
1264
+ * 'oauth_token', 'oauth_signature', etc are not allowed and will be ignored.
1265
+ * @param {!Object} customOAuthParameters The custom OAuth parameters to pass
1266
+ * in the OAuth request.
1267
+ */
1268
+ firebase.auth.TwitterAuthProvider.prototype.setCustomParameters =
1269
+ function(customOAuthParameters) {};
1270
+
1271
+
1272
+ /**
1273
+ * Email and password auth provider implementation.
1274
+ *
1275
+ * To authenticate: {@link firebase.auth.Auth#createUserWithEmailAndPassword}
1276
+ * and {@link firebase.auth.Auth#signInWithEmailAndPassword}.
1277
+ *
1278
+ * @constructor
1279
+ * @implements {firebase.auth.AuthProvider}
1280
+ */
1281
+ firebase.auth.EmailAuthProvider = function() {};
1282
+
1283
+ /** @type {string} */
1284
+ firebase.auth.EmailAuthProvider.PROVIDER_ID;
1285
+
1286
+ /**
1287
+ * @example
1288
+ * var cred = firebase.auth.EmailAuthProvider.credential(
1289
+ * email,
1290
+ * password
1291
+ * );
1292
+ *
1293
+ * @param {string} email Email address.
1294
+ * @param {string} password User account password.
1295
+ * @return {!firebase.auth.AuthCredential} The auth provider credential.
1296
+ */
1297
+ firebase.auth.EmailAuthProvider.credential = function(email, password) {};
1298
+
1299
+ /** @type {string} */
1300
+ firebase.auth.EmailAuthProvider.prototype.providerId;