binnacle 0.4.8

Sign up to get free protection for your applications and to get access to all the features.
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;