123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308 |
- /**
- * @license
- * Copyright 2021 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- /**
- * <code>firebase</code> is a global namespace from which all Firebase
- * services are accessed.
- */
- declare namespace firebase {
- /**
- * @hidden
- */
- type NextFn<T> = (value: T) => void;
- /**
- * @hidden
- */
- type ErrorFn<E = Error> = (error: E) => void;
- /**
- * @hidden
- */
- type CompleteFn = () => void;
- /**
- * `FirebaseError` is a subclass of the standard JavaScript `Error` object. In
- * addition to a message string and stack trace, it contains a string code.
- */
- interface FirebaseError {
- /**
- * Error codes are strings using the following format: `"service/string-code"`.
- * Some examples include `"app/no-app"` and `"auth/user-not-found"`.
- *
- * While the message for a given error can change, the code will remain the same
- * between backward-compatible versions of the Firebase SDK.
- */
- code: string;
- /**
- * An explanatory message for the error that just occurred.
- *
- * This message is designed to be helpful to you, the developer. Because
- * it generally does not convey meaningful information to end users,
- * this message should not be displayed in your application.
- */
- message: string;
- /**
- * The name of the class of errors, which is `"FirebaseError"`.
- */
- name: 'FirebaseError';
- /**
- * A string value containing the execution backtrace when the error originally
- * occurred. This may not always be available.
- *
- * When it is available, this information can be sent to
- * {@link https://firebase.google.com/support/ Firebase Support} to help
- * explain the cause of an error.
- */
- stack?: string;
- }
- /**
- * @hidden
- */
- interface Observer<T, E = Error> {
- next: NextFn<T>;
- error: ErrorFn<E>;
- complete: CompleteFn;
- }
- /**
- * The JS SDK supports 5 log levels and also allows a user the ability to
- * silence the logs altogether.
- *
- * The order is as follows:
- * silent < debug < verbose < info < warn < error
- */
- type LogLevel = 'debug' | 'verbose' | 'info' | 'warn' | 'error' | 'silent';
- /**
- * The current SDK version.
- */
- var SDK_VERSION: string;
- /**
- * Registers a library's name and version for platform logging purposes.
- * @param library Name of 1p or 3p library (e.g. firestore, angularfire)
- * @param version Current version of that library.
- * @param variant Bundle variant, e.g., node, rn, etc.
- */
- function registerVersion(
- library: string,
- version: string,
- variant?: string
- ): void;
- /**
- * Sets log level for all Firebase packages.
- *
- * All of the log types above the current log level are captured (i.e. if
- * you set the log level to `info`, errors are logged, but `debug` and
- * `verbose` logs are not).
- */
- function setLogLevel(logLevel: LogLevel): void;
- /**
- * Sets log handler for all Firebase packages.
- * @param logCallback An optional custom log handler that executes user code whenever
- * the Firebase SDK makes a logging call.
- */
- function onLog(
- logCallback: (callbackParams: {
- /**
- * Level of event logged.
- */
- level: LogLevel;
- /**
- * Any text from logged arguments joined into one string.
- */
- message: string;
- /**
- * The raw arguments passed to the log call.
- */
- args: any[];
- /**
- * A string indicating the name of the package that made the log call,
- * such as `@firebase/firestore`.
- */
- type: string;
- }) => void,
- options?: {
- /**
- * Threshhold log level. Only logs at or above this level trigger the `logCallback`
- * passed to `onLog`.
- */
- level: LogLevel;
- }
- ): void;
- /**
- * @hidden
- */
- type Unsubscribe = () => void;
- /**
- * A user account.
- */
- interface User extends firebase.UserInfo {
- /**
- * Deletes and signs out the user.
- *
- * <b>Important:</b> this is a security-sensitive operation that requires the
- * user to have recently signed in. If this requirement isn't met, ask the user
- * to authenticate again and then call
- * {@link firebase.User.reauthenticateWithCredential}.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/requires-recent-login</dt>
- * <dd>Thrown if the user's last sign-in time does not meet the security
- * threshold. Use {@link firebase.User.reauthenticateWithCredential} to
- * resolve. This does not apply if the user is anonymous.</dd>
- * </dl>
- */
- delete(): Promise<void>;
- emailVerified: boolean;
- getIdTokenResult(
- forceRefresh?: boolean
- ): Promise<firebase.auth.IdTokenResult>;
- /**
- * Returns a JSON Web Token (JWT) used to identify the user to a Firebase
- * service.
- *
- * Returns the current token if it has not expired. Otherwise, this will
- * refresh the token and return a new one.
- *
- * @param forceRefresh Force refresh regardless of token
- * expiration.
- */
- getIdToken(forceRefresh?: boolean): Promise<string>;
- isAnonymous: boolean;
- /**
- * Links the user account with the given credentials and returns any available
- * additional user information, such as user name.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/provider-already-linked</dt>
- * <dd>Thrown if the provider has already been linked to the user. This error is
- * thrown even if this is not the same provider's account that is currently
- * linked to the user.</dd>
- * <dt>auth/invalid-credential</dt>
- * <dd>Thrown if the provider's credential is not valid. This can happen if it
- * has already expired when calling link, or if it used invalid token(s).
- * See the Firebase documentation for your provider, and make sure you pass
- * in the correct parameters to the credential method.</dd>
- * <dt>auth/credential-already-in-use</dt>
- * <dd>Thrown if the account corresponding to the credential already exists
- * among your users, or is already linked to a Firebase User.
- * For example, this error could be thrown if you are upgrading an anonymous
- * user to a Google user by linking a Google credential to it and the Google
- * credential used is already associated with an existing Firebase Google
- * user.
- * The fields <code>error.email</code>, <code>error.phoneNumber</code>, and
- * <code>error.credential</code> ({@link firebase.auth.AuthCredential})
- * may be provided, depending on the type of credential. You can recover
- * from this error by signing in with <code>error.credential</code> directly
- * via {@link firebase.auth.Auth.signInWithCredential}.</dd>
- * <dt>auth/email-already-in-use</dt>
- * <dd>Thrown if the email corresponding to the credential already exists
- * among your users. When thrown while linking a credential to an existing
- * user, an <code>error.email</code> and <code>error.credential</code>
- * ({@link firebase.auth.AuthCredential}) fields are also provided.
- * You have to link the credential to the existing user with that email if
- * you wish to continue signing in with that credential. To do so, call
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to
- * <code>error.email</code> via one of the providers returned and then
- * {@link firebase.User.linkWithCredential} the original credential to that
- * newly signed in user.</dd>
- * <dt>auth/operation-not-allowed</dt>
- * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go
- * to the Firebase Console for your project, in the Auth section and the
- * <strong>Sign in Method</strong> tab and configure the provider.</dd>
- * <dt>auth/invalid-email</dt>
- * <dd>Thrown if the email used in a
- * {@link firebase.auth.EmailAuthProvider.credential} is invalid.</dd>
- * <dt>auth/wrong-password</dt>
- * <dd>Thrown if the password used in a
- * {@link firebase.auth.EmailAuthProvider.credential} is not correct or
- * when the user associated with the email does not have a password.</dd>
- * <dt>auth/invalid-verification-code</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * code of the credential is not valid.</dd>
- * <dt>auth/invalid-verification-id</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * ID of the credential is not valid.</dd>
- * </dl>
- *
- * @deprecated This method is deprecated. Use
- * {@link firebase.User.linkWithCredential} instead.
- *
- * @param credential The auth credential.
- */
- linkAndRetrieveDataWithCredential(
- credential: firebase.auth.AuthCredential
- ): Promise<firebase.auth.UserCredential>;
- /**
- * Links the user account with the given credentials.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/provider-already-linked</dt>
- * <dd>Thrown if the provider has already been linked to the user. This error is
- * thrown even if this is not the same provider's account that is currently
- * linked to the user.</dd>
- * <dt>auth/invalid-credential</dt>
- * <dd>Thrown if the provider's credential is not valid. This can happen if it
- * has already expired when calling link, or if it used invalid token(s).
- * See the Firebase documentation for your provider, and make sure you pass
- * in the correct parameters to the credential method.</dd>
- * <dt>auth/credential-already-in-use</dt>
- * <dd>Thrown if the account corresponding to the credential already exists
- * among your users, or is already linked to a Firebase User.
- * For example, this error could be thrown if you are upgrading an anonymous
- * user to a Google user by linking a Google credential to it and the Google
- * credential used is already associated with an existing Firebase Google
- * user.
- * The fields <code>error.email</code>, <code>error.phoneNumber</code>, and
- * <code>error.credential</code> ({@link firebase.auth.AuthCredential})
- * may be provided, depending on the type of credential. You can recover
- * from this error by signing in with <code>error.credential</code> directly
- * via {@link firebase.auth.Auth.signInWithCredential}.</dd>
- * <dt>auth/email-already-in-use</dt>
- * <dd>Thrown if the email corresponding to the credential already exists
- * among your users. When thrown while linking a credential to an existing
- * user, an <code>error.email</code> and <code>error.credential</code>
- * ({@link firebase.auth.AuthCredential}) fields are also provided.
- * You have to link the credential to the existing user with that email if
- * you wish to continue signing in with that credential. To do so, call
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to
- * <code>error.email</code> via one of the providers returned and then
- * {@link firebase.User.linkWithCredential} the original credential to that
- * newly signed in user.</dd>
- * <dt>auth/operation-not-allowed</dt>
- * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go
- * to the Firebase Console for your project, in the Auth section and the
- * <strong>Sign in Method</strong> tab and configure the provider.</dd>
- * <dt>auth/invalid-email</dt>
- * <dd>Thrown if the email used in a
- * {@link firebase.auth.EmailAuthProvider.credential} is invalid.</dd>
- * <dt>auth/wrong-password</dt>
- * <dd>Thrown if the password used in a
- * {@link firebase.auth.EmailAuthProvider.credential} is not correct or
- * when the user associated with the email does not have a password.</dd>
- * <dt>auth/invalid-verification-code</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * code of the credential is not valid.</dd>
- * <dt>auth/invalid-verification-id</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * ID of the credential is not valid.</dd>
- * </dl>
- *
- * @param credential The auth credential.
- */
- linkWithCredential(
- credential: firebase.auth.AuthCredential
- ): Promise<firebase.auth.UserCredential>;
- /**
- * Links the user account with the given phone number.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/provider-already-linked</dt>
- * <dd>Thrown if the provider has already been linked to the user. This error is
- * thrown even if this is not the same provider's account that is currently
- * linked to the user.</dd>
- * <dt>auth/captcha-check-failed</dt>
- * <dd>Thrown if the reCAPTCHA response token was invalid, expired, or if
- * this method was called from a non-whitelisted domain.</dd>
- * <dt>auth/invalid-phone-number</dt>
- * <dd>Thrown if the phone number has an invalid format.</dd>
- * <dt>auth/missing-phone-number</dt>
- * <dd>Thrown if the phone number is missing.</dd>
- * <dt>auth/quota-exceeded</dt>
- * <dd>Thrown if the SMS quota for the Firebase project has been exceeded.</dd>
- * <dt>auth/user-disabled</dt>
- * <dd>Thrown if the user corresponding to the given phone number has been
- * disabled.</dd>
- * <dt>auth/credential-already-in-use</dt>
- * <dd>Thrown if the account corresponding to the phone number already exists
- * among your users, or is already linked to a Firebase User.
- * The fields <code>error.phoneNumber</code> and
- * <code>error.credential</code> ({@link firebase.auth.AuthCredential})
- * are provided in this case. You can recover from this error by signing in
- * with that credential directly via
- * {@link firebase.auth.Auth.signInWithCredential}.</dd>
- * <dt>auth/operation-not-allowed</dt>
- * <dd>Thrown if you have not enabled the phone authentication provider in the
- * Firebase Console. Go to the Firebase Console for your project, in the
- * Auth section and the <strong>Sign in Method</strong> tab and configure
- * the provider.</dd>
- * </dl>
- *
- * @param phoneNumber The user's phone number in E.164 format (e.g.
- * +16505550101).
- * @param applicationVerifier
- */
- linkWithPhoneNumber(
- phoneNumber: string,
- applicationVerifier: firebase.auth.ApplicationVerifier
- ): Promise<firebase.auth.ConfirmationResult>;
- /**
- * Links the authenticated provider to the user account using a pop-up based
- * OAuth flow.
- *
- * If the linking is successful, the returned result will contain the user
- * and the provider's credential.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/auth-domain-config-required</dt>
- * <dd>Thrown if authDomain configuration is not provided when calling
- * firebase.initializeApp(). Check Firebase Console for instructions on
- * determining and passing that field.</dd>
- * <dt>auth/cancelled-popup-request</dt>
- * <dd>Thrown if successive popup operations are triggered. Only one popup
- * request is allowed at one time on a user or an auth instance. All the
- * popups would fail with this error except for the last one.</dd>
- * <dt>auth/credential-already-in-use</dt>
- * <dd>Thrown if the account corresponding to the credential already exists
- * among your users, or is already linked to a Firebase User.
- * For example, this error could be thrown if you are upgrading an anonymous
- * user to a Google user by linking a Google credential to it and the Google
- * credential used is already associated with an existing Firebase Google
- * user.
- * An <code>error.email</code> and <code>error.credential</code>
- * ({@link firebase.auth.AuthCredential}) fields are also provided. You can
- * recover from this error by signing in with that credential directly via
- * {@link firebase.auth.Auth.signInWithCredential}.</dd>
- * <dt>auth/email-already-in-use</dt>
- * <dd>Thrown if the email corresponding to the credential already exists
- * among your users. When thrown while linking a credential to an existing
- * user, an <code>error.email</code> and <code>error.credential</code>
- * ({@link firebase.auth.AuthCredential}) fields are also provided.
- * You have to link the credential to the existing user with that email if
- * you wish to continue signing in with that credential. To do so, call
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to
- * <code>error.email</code> via one of the providers returned and then
- * {@link firebase.User.linkWithCredential} the original credential to that
- * newly signed in user.</dd>
- * <dt>auth/operation-not-allowed</dt>
- * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go
- * to the Firebase Console for your project, in the Auth section and the
- * <strong>Sign in Method</strong> tab and configure the provider.</dd>
- * <dt>auth/popup-blocked</dt>
- * <dt>auth/operation-not-supported-in-this-environment</dt>
- * <dd>Thrown if this operation is not supported in the environment your
- * application is running on. "location.protocol" must be http or https.
- * </dd>
- * <dd>Thrown if the popup was blocked by the browser, typically when this
- * operation is triggered outside of a click handler.</dd>
- * <dt>auth/popup-closed-by-user</dt>
- * <dd>Thrown if the popup window is closed by the user without completing the
- * sign in to the provider.</dd>
- * <dt>auth/provider-already-linked</dt>
- * <dd>Thrown if the provider has already been linked to the user. This error is
- * thrown even if this is not the same provider's account that is currently
- * linked to the user.</dd>
- * <dt>auth/unauthorized-domain</dt>
- * <dd>Thrown if the app domain is not authorized for OAuth operations for your
- * Firebase project. Edit the list of authorized domains from the Firebase
- * console.</dd>
- * </dl>
- *
- * This method does not work in a Node.js environment.
- *
- * @example
- * ```javascript
- * // Creates the provider object.
- * var provider = new firebase.auth.FacebookAuthProvider();
- * // You can add additional scopes to the provider:
- * provider.addScope('email');
- * provider.addScope('user_friends');
- * // Link with popup:
- * user.linkWithPopup(provider).then(function(result) {
- * // The firebase.User instance:
- * var user = result.user;
- * // The Facebook firebase.auth.AuthCredential containing the Facebook
- * // access token:
- * var credential = result.credential;
- * }, function(error) {
- * // An error happened.
- * });
- * ```
- *
- * @param provider The provider to authenticate.
- * The provider has to be an OAuth provider. Non-OAuth providers like {@link
- * firebase.auth.EmailAuthProvider} will throw an error.
- */
- linkWithPopup(
- provider: firebase.auth.AuthProvider
- ): Promise<firebase.auth.UserCredential>;
- /**
- * Links the authenticated provider to the user account using a full-page
- * redirect flow.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/auth-domain-config-required</dt>
- * <dd>Thrown if authDomain configuration is not provided when calling
- * firebase.initializeApp(). Check Firebase Console for instructions on
- * determining and passing that field.</dd>
- * <dt>auth/operation-not-supported-in-this-environment</dt>
- * <dd>Thrown if this operation is not supported in the environment your
- * application is running on. "location.protocol" must be http or https.
- * </dd>
- * <dt>auth/provider-already-linked</dt>
- * <dd>Thrown if the provider has already been linked to the user. This error is
- * thrown even if this is not the same provider's account that is currently
- * linked to the user.</dd>
- * <dt>auth/unauthorized-domain</dt>
- * <dd>Thrown if the app domain is not authorized for OAuth operations for your
- * Firebase project. Edit the list of authorized domains from the Firebase
- * console.</dd>
- * </dl>
- *
- * @param provider The provider to authenticate.
- * The provider has to be an OAuth provider. Non-OAuth providers like {@link
- * firebase.auth.EmailAuthProvider} will throw an error.
- */
- linkWithRedirect(provider: firebase.auth.AuthProvider): Promise<void>;
- metadata: firebase.auth.UserMetadata;
- /**
- * The {@link firebase.User.MultiFactorUser} object corresponding to the current user.
- * This is used to access all multi-factor properties and operations related to the
- * current user.
- */
- multiFactor: firebase.User.MultiFactorUser;
- /**
- * The phone number normalized based on the E.164 standard (e.g. +16505550101)
- * for the current user. This is null if the user has no phone credential linked
- * to the account.
- */
- phoneNumber: string | null;
- providerData: (firebase.UserInfo | null)[];
- /**
- * Re-authenticates a user using a fresh credential, and returns any available
- * additional user information, such as user name. Use before operations
- * such as {@link firebase.User.updatePassword} that require tokens from recent
- * sign-in attempts.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/user-mismatch</dt>
- * <dd>Thrown if the credential given does not correspond to the user.</dd>
- * <dt>auth/user-not-found</dt>
- * <dd>Thrown if the credential given does not correspond to any existing user.
- * </dd>
- * <dt>auth/invalid-credential</dt>
- * <dd>Thrown if the provider's credential is not valid. This can happen if it
- * has already expired when calling link, or if it used invalid token(s).
- * See the Firebase documentation for your provider, and make sure you pass
- * in the correct parameters to the credential method.</dd>
- * <dt>auth/invalid-email</dt>
- * <dd>Thrown if the email used in a
- * {@link firebase.auth.EmailAuthProvider.credential} is invalid.</dd>
- * <dt>auth/wrong-password</dt>
- * <dd>Thrown if the password used in a
- * {@link firebase.auth.EmailAuthProvider.credential} is not correct or when
- * the user associated with the email does not have a password.</dd>
- * <dt>auth/invalid-verification-code</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * code of the credential is not valid.</dd>
- * <dt>auth/invalid-verification-id</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * ID of the credential is not valid.</dd>
- * </dl>
- *
- * @deprecated
- * This method is deprecated. Use
- * {@link firebase.User.reauthenticateWithCredential} instead.
- *
- * @param credential
- */
- reauthenticateAndRetrieveDataWithCredential(
- credential: firebase.auth.AuthCredential
- ): Promise<firebase.auth.UserCredential>;
- /**
- * Re-authenticates a user using a fresh credential. Use before operations
- * such as {@link firebase.User.updatePassword} that require tokens from recent
- * sign-in attempts.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/user-mismatch</dt>
- * <dd>Thrown if the credential given does not correspond to the user.</dd>
- * <dt>auth/user-not-found</dt>
- * <dd>Thrown if the credential given does not correspond to any existing user.
- * </dd>
- * <dt>auth/invalid-credential</dt>
- * <dd>Thrown if the provider's credential is not valid. This can happen if it
- * has already expired when calling link, or if it used invalid token(s).
- * See the Firebase documentation for your provider, and make sure you pass
- * in the correct parameters to the credential method.</dd>
- * <dt>auth/invalid-email</dt>
- * <dd>Thrown if the email used in a
- * {@link firebase.auth.EmailAuthProvider.credential} is invalid.</dd>
- * <dt>auth/wrong-password</dt>
- * <dd>Thrown if the password used in a
- * {@link firebase.auth.EmailAuthProvider.credential} is not correct or when
- * the user associated with the email does not have a password.</dd>
- * <dt>auth/invalid-verification-code</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * code of the credential is not valid.</dd>
- * <dt>auth/invalid-verification-id</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * ID of the credential is not valid.</dd>
- * </dl>
- *
- * @param credential
- */
- reauthenticateWithCredential(
- credential: firebase.auth.AuthCredential
- ): Promise<firebase.auth.UserCredential>;
- /**
- * Re-authenticates a user using a fresh credential. Use before operations
- * such as {@link firebase.User.updatePassword} that require tokens from recent
- * sign-in attempts.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/user-mismatch</dt>
- * <dd>Thrown if the credential given does not correspond to the user.</dd>
- * <dt>auth/user-not-found</dt>
- * <dd>Thrown if the credential given does not correspond to any existing user.
- * </dd>
- * <dt>auth/captcha-check-failed</dt>
- * <dd>Thrown if the reCAPTCHA response token was invalid, expired, or if
- * this method was called from a non-whitelisted domain.</dd>
- * <dt>auth/invalid-phone-number</dt>
- * <dd>Thrown if the phone number has an invalid format.</dd>
- * <dt>auth/missing-phone-number</dt>
- * <dd>Thrown if the phone number is missing.</dd>
- * <dt>auth/quota-exceeded</dt>
- * <dd>Thrown if the SMS quota for the Firebase project has been exceeded.</dd>
- * </dl>
- *
- * @param phoneNumber The user's phone number in E.164 format (e.g.
- * +16505550101).
- * @param applicationVerifier
- */
- reauthenticateWithPhoneNumber(
- phoneNumber: string,
- applicationVerifier: firebase.auth.ApplicationVerifier
- ): Promise<firebase.auth.ConfirmationResult>;
- /**
- * Reauthenticates the current user with the specified provider using a pop-up
- * based OAuth flow.
- *
- * If the reauthentication is successful, the returned result will contain the
- * user and the provider's credential.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/auth-domain-config-required</dt>
- * <dd>Thrown if authDomain configuration is not provided when calling
- * firebase.initializeApp(). Check Firebase Console for instructions on
- * determining and passing that field.</dd>
- * <dt>auth/cancelled-popup-request</dt>
- * <dd>Thrown if successive popup operations are triggered. Only one popup
- * request is allowed at one time on a user or an auth instance. All the
- * popups would fail with this error except for the last one.</dd>
- * <dt>auth/user-mismatch</dt>
- * <dd>Thrown if the credential given does not correspond to the user.</dd>
- * <dt>auth/operation-not-allowed</dt>
- * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go
- * to the Firebase Console for your project, in the Auth section and the
- * <strong>Sign in Method</strong> tab and configure the provider.</dd>
- * <dt>auth/popup-blocked</dt>
- * <dd>Thrown if the popup was blocked by the browser, typically when this
- * operation is triggered outside of a click handler.</dd>
- * <dt>auth/operation-not-supported-in-this-environment</dt>
- * <dd>Thrown if this operation is not supported in the environment your
- * application is running on. "location.protocol" must be http or https.
- * </dd>
- * <dt>auth/popup-closed-by-user</dt>
- * <dd>Thrown if the popup window is closed by the user without completing the
- * sign in to the provider.</dd>
- * <dt>auth/unauthorized-domain</dt>
- * <dd>Thrown if the app domain is not authorized for OAuth operations for your
- * Firebase project. Edit the list of authorized domains from the Firebase
- * console.</dd>
- * </dl>
- *
- * This method does not work in a Node.js environment.
- *
- * @example
- * ```javascript
- * // Creates the provider object.
- * var provider = new firebase.auth.FacebookAuthProvider();
- * // You can add additional scopes to the provider:
- * provider.addScope('email');
- * provider.addScope('user_friends');
- * // Reauthenticate with popup:
- * user.reauthenticateWithPopup(provider).then(function(result) {
- * // The firebase.User instance:
- * var user = result.user;
- * // The Facebook firebase.auth.AuthCredential containing the Facebook
- * // access token:
- * var credential = result.credential;
- * }, function(error) {
- * // An error happened.
- * });
- * ```
- *
- * @param provider The provider to authenticate.
- * The provider has to be an OAuth provider. Non-OAuth providers like {@link
- * firebase.auth.EmailAuthProvider} will throw an error.
- */
- reauthenticateWithPopup(
- provider: firebase.auth.AuthProvider
- ): Promise<firebase.auth.UserCredential>;
- /**
- * Reauthenticates the current user with the specified OAuth provider using a
- * full-page redirect flow.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/auth-domain-config-required</dt>
- * <dd>Thrown if authDomain configuration is not provided when calling
- * firebase.initializeApp(). Check Firebase Console for instructions on
- * determining and passing that field.</dd>
- * <dt>auth/operation-not-supported-in-this-environment</dt>
- * <dd>Thrown if this operation is not supported in the environment your
- * application is running on. "location.protocol" must be http or https.
- * </dd>
- * <dt>auth/user-mismatch</dt>
- * <dd>Thrown if the credential given does not correspond to the user.</dd>
- * <dt>auth/unauthorized-domain</dt>
- * <dd>Thrown if the app domain is not authorized for OAuth operations for your
- * Firebase project. Edit the list of authorized domains from the Firebase
- * console.</dd>
- * </dl>
- *
- * This method does not work in a Node.js environment.
- *
- * @param provider The provider to authenticate.
- * The provider has to be an OAuth provider. Non-OAuth providers like {@link
- * firebase.auth.EmailAuthProvider} will throw an error.
- */
- reauthenticateWithRedirect(
- provider: firebase.auth.AuthProvider
- ): Promise<void>;
- refreshToken: string;
- /**
- * Refreshes the current user, if signed in.
- *
- */
- reload(): Promise<void>;
- /**
- * Sends a verification email to a user.
- *
- * The verification process is completed by calling
- * {@link firebase.auth.Auth.applyActionCode}
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/missing-android-pkg-name</dt>
- * <dd>An Android package name must be provided if the Android app is required
- * to be installed.</dd>
- * <dt>auth/missing-continue-uri</dt>
- * <dd>A continue URL must be provided in the request.</dd>
- * <dt>auth/missing-ios-bundle-id</dt>
- * <dd>An iOS bundle ID must be provided if an App Store ID is provided.</dd>
- * <dt>auth/invalid-continue-uri</dt>
- * <dd>The continue URL provided in the request is invalid.</dd>
- * <dt>auth/unauthorized-continue-uri</dt>
- * <dd>The domain of the continue URL is not whitelisted. Whitelist
- * the domain in the Firebase console.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * var actionCodeSettings = {
- * url: 'https://www.example.com/cart?email=user@example.com&cartId=123',
- * iOS: {
- * bundleId: 'com.example.ios'
- * },
- * android: {
- * packageName: 'com.example.android',
- * installApp: true,
- * minimumVersion: '12'
- * },
- * handleCodeInApp: true
- * };
- * firebase.auth().currentUser.sendEmailVerification(actionCodeSettings)
- * .then(function() {
- * // Verification email sent.
- * })
- * .catch(function(error) {
- * // Error occurred. Inspect error.code.
- * });
- * ```
- *
- * @param actionCodeSettings The action
- * code settings. If specified, the state/continue URL will be set as the
- * "continueUrl" parameter in the email verification link. The default email
- * verification landing page will use this to display a link to go back to
- * the app if it is installed.
- * If the actionCodeSettings is not specified, no URL is appended to the
- * action URL.
- * The state URL provided must belong to a domain that is whitelisted by the
- * developer in the console. Otherwise an error will be thrown.
- * Mobile app redirects will only be applicable if the developer configures
- * and accepts the Firebase Dynamic Links terms of condition.
- * The Android package name and iOS bundle ID will be respected only if they
- * are configured in the same Firebase Auth project used.
- */
- sendEmailVerification(
- actionCodeSettings?: firebase.auth.ActionCodeSettings | null
- ): Promise<void>;
- /**
- * The current user's tenant ID. This is a read-only property, which indicates
- * the tenant ID used to sign in the current user. This is null if the user is
- * signed in from the parent project.
- *
- * @example
- * ```javascript
- * // Set the tenant ID on Auth instance.
- * firebase.auth().tenantId = ‘TENANT_PROJECT_ID’;
- *
- * // All future sign-in request now include tenant ID.
- * firebase.auth().signInWithEmailAndPassword(email, password)
- * .then(function(result) {
- * // result.user.tenantId should be ‘TENANT_PROJECT_ID’.
- * }).catch(function(error) {
- * // Handle error.
- * });
- * ```
- */
- tenantId: string | null;
- /**
- * Returns a JSON-serializable representation of this object.
- *
- * @return A JSON-serializable representation of this object.
- */
- toJSON(): Object;
- /**
- * Unlinks a provider from a user account.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/no-such-provider</dt>
- * <dd>Thrown if the user does not have this provider linked or when the
- * provider ID given does not exist.</dd>
- * </dt>
- *
- * @param providerId
- */
- unlink(providerId: string): Promise<firebase.User>;
- /**
- * Updates the user's email address.
- *
- * An email will be sent to the original email address (if it was set) that
- * allows to revoke the email address change, in order to protect them from
- * account hijacking.
- *
- * <b>Important:</b> this is a security sensitive operation that requires the
- * user to have recently signed in. If this requirement isn't met, ask the user
- * to authenticate again and then call
- * {@link firebase.User.reauthenticateWithCredential}.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/invalid-email</dt>
- * <dd>Thrown if the email used is invalid.</dd>
- * <dt>auth/email-already-in-use</dt>
- * <dd>Thrown if the email is already used by another user.</dd>
- * <dt>auth/requires-recent-login</dt>
- * <dd>Thrown if the user's last sign-in time does not meet the security
- * threshold. Use {@link firebase.User.reauthenticateWithCredential} to
- * resolve. This does not apply if the user is anonymous.</dd>
- * </dl>
- *
- * @param newEmail The new email address.
- */
- updateEmail(newEmail: string): Promise<void>;
- /**
- * Updates the user's password.
- *
- * <b>Important:</b> this is a security sensitive operation that requires the
- * user to have recently signed in. If this requirement isn't met, ask the user
- * to authenticate again and then call
- * {@link firebase.User.reauthenticateWithCredential}.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/weak-password</dt>
- * <dd>Thrown if the password is not strong enough.</dd>
- * <dt>auth/requires-recent-login</dt>
- * <dd>Thrown if the user's last sign-in time does not meet the security
- * threshold. Use {@link firebase.User.reauthenticateWithCredential} to
- * resolve. This does not apply if the user is anonymous.</dd>
- * </dl>
- *
- * @param newPassword
- */
- updatePassword(newPassword: string): Promise<void>;
- /**
- * Updates the user's phone number.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/invalid-verification-code</dt>
- * <dd>Thrown if the verification code of the credential is not valid.</dd>
- * <dt>auth/invalid-verification-id</dt>
- * <dd>Thrown if the verification ID of the credential is not valid.</dd>
- * </dl>
- *
- * @param phoneCredential
- */
- updatePhoneNumber(
- phoneCredential: firebase.auth.AuthCredential
- ): Promise<void>;
- /**
- * Updates a user's profile data.
- *
- * @example
- * ```javascript
- * // Updates the user attributes:
- * user.updateProfile({
- * displayName: "Jane Q. User",
- * photoURL: "https://example.com/jane-q-user/profile.jpg"
- * }).then(function() {
- * // Profile updated successfully!
- * // "Jane Q. User"
- * var displayName = user.displayName;
- * // "https://example.com/jane-q-user/profile.jpg"
- * var photoURL = user.photoURL;
- * }, function(error) {
- * // An error happened.
- * });
- *
- * // Passing a null value will delete the current attribute's value, but not
- * // passing a property won't change the current attribute's value:
- * // Let's say we're using the same user than before, after the update.
- * user.updateProfile({photoURL: null}).then(function() {
- * // Profile updated successfully!
- * // "Jane Q. User", hasn't changed.
- * var displayName = user.displayName;
- * // Now, this is null.
- * var photoURL = user.photoURL;
- * }, function(error) {
- * // An error happened.
- * });
- * ```
- *
- * @param profile The profile's
- * displayName and photoURL to update.
- */
- updateProfile(profile: {
- displayName?: string | null;
- photoURL?: string | null;
- }): Promise<void>;
- /**
- * Sends a verification email to a new email address. The user's email will be
- * updated to the new one after being verified.
- *
- * If you have a custom email action handler, you can complete the verification
- * process by calling {@link firebase.auth.Auth.applyActionCode}.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/missing-android-pkg-name</dt>
- * <dd>An Android package name must be provided if the Android app is required
- * to be installed.</dd>
- * <dt>auth/missing-continue-uri</dt>
- * <dd>A continue URL must be provided in the request.</dd>
- * <dt>auth/missing-ios-bundle-id</dt>
- * <dd>An iOS bundle ID must be provided if an App Store ID is provided.</dd>
- * <dt>auth/invalid-continue-uri</dt>
- * <dd>The continue URL provided in the request is invalid.</dd>
- * <dt>auth/unauthorized-continue-uri</dt>
- * <dd>The domain of the continue URL is not whitelisted. Whitelist
- * the domain in the Firebase console.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * var actionCodeSettings = {
- * url: 'https://www.example.com/cart?email=user@example.com&cartId=123',
- * iOS: {
- * bundleId: 'com.example.ios'
- * },
- * android: {
- * packageName: 'com.example.android',
- * installApp: true,
- * minimumVersion: '12'
- * },
- * handleCodeInApp: true
- * };
- * firebase.auth().currentUser.verifyBeforeUpdateEmail(
- * 'user@example.com', actionCodeSettings)
- * .then(function() {
- * // Verification email sent.
- * })
- * .catch(function(error) {
- * // Error occurred. Inspect error.code.
- * });
- * ```
- *
- * @param newEmail The email address to be verified and updated to.
- * @param actionCodeSettings The action
- * code settings. If specified, the state/continue URL will be set as the
- * "continueUrl" parameter in the email verification link. The default email
- * verification landing page will use this to display a link to go back to
- * the app if it is installed.
- * If the actionCodeSettings is not specified, no URL is appended to the
- * action URL.
- * The state URL provided must belong to a domain that is whitelisted by the
- * developer in the console. Otherwise an error will be thrown.
- * Mobile app redirects will only be applicable if the developer configures
- * and accepts the Firebase Dynamic Links terms of condition.
- * The Android package name and iOS bundle ID will be respected only if they
- * are configured in the same Firebase Auth project used.
- */
- verifyBeforeUpdateEmail(
- newEmail: string,
- actionCodeSettings?: firebase.auth.ActionCodeSettings | null
- ): Promise<void>;
- }
- /**
- * User profile information, visible only to the Firebase project's
- * apps.
- *
- */
- interface UserInfo {
- displayName: string | null;
- email: string | null;
- phoneNumber: string | null;
- photoURL: string | null;
- providerId: string;
- /**
- * The user's unique ID.
- */
- uid: string;
- }
- type FirebaseSignInProvider =
- | 'custom'
- | 'email'
- | 'password'
- | 'phone'
- | 'anonymous'
- | 'google.com'
- | 'facebook.com'
- | 'github.com'
- | 'twitter.com'
- | 'microsoft.com'
- | 'apple.com';
- interface FirebaseIdToken {
- /** Always set to https://securetoken.google.com/PROJECT_ID */
- iss: string;
- /** Always set to PROJECT_ID */
- aud: string;
- /** The user's unique ID */
- sub: string;
- /** The token issue time, in seconds since epoch */
- iat: number;
- /** The token expiry time, normally 'iat' + 3600 */
- exp: number;
- /** The user's unique ID. Must be equal to 'sub' */
- user_id: string;
- /** The time the user authenticated, normally 'iat' */
- auth_time: number;
- /** The sign in provider, only set when the provider is 'anonymous' */
- provider_id?: 'anonymous';
- /** The user's primary email */
- email?: string;
- /** The user's email verification status */
- email_verified?: boolean;
- /** The user's primary phone number */
- phone_number?: string;
- /** The user's display name */
- name?: string;
- /** The user's profile photo URL */
- picture?: string;
- /** Information on all identities linked to this user */
- firebase: {
- /** The primary sign-in provider */
- sign_in_provider: FirebaseSignInProvider;
- /** A map of providers to the user's list of unique identifiers from each provider */
- identities?: { [provider in FirebaseSignInProvider]?: string[] };
- };
- /** Custom claims set by the developer */
- [claim: string]: unknown;
- // NO LONGER SUPPORTED. Use "sub" instead. (Not a jsdoc comment to avoid generating docs.)
- uid?: never;
- }
- export type EmulatorMockTokenOptions = (
- | { user_id: string }
- | { sub: string }
- ) &
- Partial<FirebaseIdToken>;
- /**
- * Retrieves a Firebase {@link firebase.app.App app} instance.
- *
- * When called with no arguments, the default app is returned. When an app name
- * is provided, the app corresponding to that name is returned.
- *
- * An exception is thrown if the app being retrieved has not yet been
- * initialized.
- *
- * @example
- * ```javascript
- * // Return the default app
- * var app = firebase.app();
- * ```
- *
- * @example
- * ```javascript
- * // Return a named app
- * var otherApp = firebase.app("otherApp");
- * ```
- *
- * @param name Optional name of the app to return. If no name is
- * provided, the default is `"[DEFAULT]"`.
- *
- * @return The app corresponding to the provided app name.
- * If no app name is provided, the default app is returned.
- */
- function app(name?: string): firebase.app.App;
- /**
- * A (read-only) array of all initialized apps.
- */
- var apps: firebase.app.App[];
- /**
- * Gets the {@link firebase.auth.Auth `Auth`} service for the default app or a
- * given app.
- *
- * `firebase.auth()` can be called with no arguments to access the default app's
- * {@link firebase.auth.Auth `Auth`} service or as `firebase.auth(app)` to
- * access the {@link firebase.auth.Auth `Auth`} service associated with a
- * specific app.
- *
- * @example
- * ```javascript
- *
- * // Get the Auth service for the default app
- * var defaultAuth = firebase.auth();
- * ```
- * @example
- * ```javascript
- *
- * // Get the Auth service for a given app
- * var otherAuth = firebase.auth(otherApp);
- * ```
- * @param app
- */
- function auth(app?: firebase.app.App): firebase.auth.Auth;
- /**
- * Gets the {@link firebase.database.Database `Database`} service for the
- * default app or a given app.
- *
- * `firebase.database()` can be called with no arguments to access the default
- * app's {@link firebase.database.Database `Database`} service or as
- * `firebase.database(app)` to access the
- * {@link firebase.database.Database `Database`} service associated with a
- * specific app.
- *
- * `firebase.database` is also a namespace that can be used to access global
- * constants and methods associated with the `Database` service.
- *
- * @example
- * ```javascript
- * // Get the Database service for the default app
- * var defaultDatabase = firebase.database();
- * ```
- *
- * @example
- * ```javascript
- * // Get the Database service for a specific app
- * var otherDatabase = firebase.database(app);
- * ```
- *
- * @namespace
- * @param app Optional app whose Database service to
- * return. If not provided, the default Database service will be returned.
- * @return The default Database service if no app
- * is provided or the Database service associated with the provided app.
- */
- function database(app?: firebase.app.App): firebase.database.Database;
- /**
- * Creates and initializes a Firebase {@link firebase.app.App app} instance.
- *
- * See
- * {@link
- * https://firebase.google.com/docs/web/setup#add_firebase_to_your_app
- * Add Firebase to your app} and
- * {@link
- * https://firebase.google.com/docs/web/learn-more#multiple-projects
- * Initialize multiple projects} for detailed documentation.
- *
- * @example
- * ```javascript
- *
- * // Initialize default app
- * // Retrieve your own options values by adding a web app on
- * // https://console.firebase.google.com
- * firebase.initializeApp({
- * apiKey: "AIza....", // Auth / General Use
- * appId: "1:27992087142:web:ce....", // General Use
- * projectId: "my-firebase-project", // General Use
- * authDomain: "YOUR_APP.firebaseapp.com", // Auth with popup/redirect
- * databaseURL: "https://YOUR_APP.firebaseio.com", // Realtime Database
- * storageBucket: "YOUR_APP.appspot.com", // Storage
- * messagingSenderId: "123456789", // Cloud Messaging
- * measurementId: "G-12345" // Analytics
- * });
- * ```
- *
- * @example
- * ```javascript
- *
- * // Initialize another app
- * var otherApp = firebase.initializeApp({
- * apiKey: "AIza....",
- * appId: "1:27992087142:web:ce....",
- * projectId: "my-firebase-project",
- * databaseURL: "https://<OTHER_DATABASE_NAME>.firebaseio.com",
- * storageBucket: "<OTHER_STORAGE_BUCKET>.appspot.com"
- * }, "nameOfOtherApp");
- * ```
- *
- * @param options Options to configure the app's services.
- * @param name Optional name of the app to initialize. If no name
- * is provided, the default is `"[DEFAULT]"`.
- *
- * @return {!firebase.app.App} The initialized app.
- */
- function initializeApp(options: Object, name?: string): firebase.app.App;
- /**
- * Gets the {@link firebase.messaging.Messaging `Messaging`} service for the
- * default app or a given app.
- *
- * `firebase.messaging()` can be called with no arguments to access the default
- * app's {@link firebase.messaging.Messaging `Messaging`} service or as
- * `firebase.messaging(app)` to access the
- * {@link firebase.messaging.Messaging `Messaging`} service associated with a
- * specific app.
- *
- * Calling `firebase.messaging()` in a service worker results in Firebase
- * generating notifications if the push message payload has a `notification`
- * parameter.
- *
- * The Messaging SDK does not work in a Node.js environment.
- *
- * @example
- * ```javascript
- * // Get the Messaging service for the default app
- * var defaultMessaging = firebase.messaging();
- * ```
- *
- * @example
- * ```javascript
- * // Get the Messaging service for a given app
- * var otherMessaging = firebase.messaging(otherApp);
- * ```
- *
- * @namespace
- * @param app The app to create a Messaging service for.
- * If not passed, uses the default app.
- */
- function messaging(app?: firebase.app.App): firebase.messaging.Messaging;
- /**
- * Gets the {@link firebase.storage.Storage `Storage`} service for the default
- * app or a given app.
- *
- * `firebase.storage()` can be called with no arguments to access the default
- * app's {@link firebase.storage.Storage `Storage`} service or as
- * `firebase.storage(app)` to access the
- * {@link firebase.storage.Storage `Storage`} service associated with a
- * specific app.
- *
- * @example
- * ```javascript
- * // Get the Storage service for the default app
- * var defaultStorage = firebase.storage();
- * ```
- *
- * @example
- * ```javascript
- * // Get the Storage service for a given app
- * var otherStorage = firebase.storage(otherApp);
- * ```
- *
- * @param app The app to create a storage service for.
- * If not passed, uses the default app.
- */
- function storage(app?: firebase.app.App): firebase.storage.Storage;
- function firestore(app?: firebase.app.App): firebase.firestore.Firestore;
- function functions(app?: firebase.app.App): firebase.functions.Functions;
- /**
- * Gets the {@link firebase.performance.Performance `Performance`} service.
- *
- * `firebase.performance()` can be called with no arguments to access the default
- * app's {@link firebase.performance.Performance `Performance`} service.
- * The {@link firebase.performance.Performance `Performance`} service does not work with
- * any other app.
- *
- * The Performance SDK does not work in a Node.js environment.
- *
- * @example
- * ```javascript
- * // Get the Performance service for the default app
- * const defaultPerformance = firebase.performance();
- * ```
- *
- * @param app The app to create a performance service for. Performance Monitoring only works with
- * the default app.
- * If not passed, uses the default app.
- */
- function performance(
- app?: firebase.app.App
- ): firebase.performance.Performance;
- /**
- * Gets the {@link firebase.remoteConfig.RemoteConfig `RemoteConfig`} instance.
- *
- * The Remote Config SDK does not work in a Node.js environment.
- *
- * @example
- * ```javascript
- * // Get the RemoteConfig instance for the default app
- * const defaultRemoteConfig = firebase.remoteConfig();
- * ```
- *
- * @param app The app to create a Remote Config service for. If not passed, uses the default app.
- */
- function remoteConfig(
- app?: firebase.app.App
- ): firebase.remoteConfig.RemoteConfig;
- /**
- * Gets the {@link firebase.analytics.Analytics `Analytics`} service.
- *
- * `firebase.analytics()` can be called with no arguments to access the default
- * app's {@link firebase.analytics.Analytics `Analytics`} service.
- *
- * The Analytics SDK does not work in a Node.js environment.
- *
- * @example
- * ```javascript
- * // Get the Analytics service for the default app
- * const defaultAnalytics = firebase.analytics();
- * ```
- *
- * @param app The app to create an analytics service for.
- * If not passed, uses the default app.
- */
- function analytics(app?: firebase.app.App): firebase.analytics.Analytics;
- function appCheck(app?: firebase.app.App): firebase.appCheck.AppCheck;
- }
- declare namespace firebase.app {
- /**
- * A Firebase App holds the initialization information for a collection of
- * services.
- *
- * Do not call this constructor directly. Instead, use
- * {@link firebase.initializeApp|`firebase.initializeApp()`} to create an app.
- *
- */
- interface App {
- /**
- * Gets the {@link firebase.auth.Auth `Auth`} service for the current app.
- *
- * @example
- * ```javascript
- * var auth = app.auth();
- * // The above is shorthand for:
- * // var auth = firebase.auth(app);
- * ```
- */
- auth(): firebase.auth.Auth;
- /**
- * Gets the {@link firebase.database.Database `Database`} service for the
- * current app.
- *
- * @example
- * ```javascript
- * var database = app.database();
- * // The above is shorthand for:
- * // var database = firebase.database(app);
- * ```
- */
- database(url?: string): firebase.database.Database;
- /**
- * Renders this app unusable and frees the resources of all associated
- * services.
- *
- * @example
- * ```javascript
- * app.delete()
- * .then(function() {
- * console.log("App deleted successfully");
- * })
- * .catch(function(error) {
- * console.log("Error deleting app:", error);
- * });
- * ```
- */
- delete(): Promise<any>;
- /**
- * Gets the {@link firebase.installations.Installations `Installations`} service for the
- * current app.
- *
- * The Installations SDK does not work in a Node.js environment.
- *
- * @example
- * ```javascript
- * const installations = app.installations();
- * // The above is shorthand for:
- * // const installations = firebase.installations(app);
- * ```
- */
- installations(): firebase.installations.Installations;
- /**
- * Gets the {@link firebase.messaging.Messaging `Messaging`} service for the
- * current app.
- *
- * The Messaging SDK does not work in a Node.js environment.
- *
- * @example
- * ```javascript
- * var messaging = app.messaging();
- * // The above is shorthand for:
- * // var messaging = firebase.messaging(app);
- * ```
- */
- messaging(): firebase.messaging.Messaging;
- /**
- * The (read-only) name for this app.
- *
- * The default app's name is `"[DEFAULT]"`.
- *
- * @example
- * ```javascript
- * // The default app's name is "[DEFAULT]"
- * firebase.initializeApp(defaultAppConfig);
- * console.log(firebase.app().name); // "[DEFAULT]"
- * ```
- *
- * @example
- * ```javascript
- * // A named app's name is what you provide to initializeApp()
- * var otherApp = firebase.initializeApp(otherAppConfig, "other");
- * console.log(otherApp.name); // "other"
- * ```
- */
- name: string;
- /**
- * The settable config flag for GDPR opt-in/opt-out
- */
- automaticDataCollectionEnabled: boolean;
- /**
- * The (read-only) configuration options for this app. These are the original
- * parameters given in
- * {@link firebase.initializeApp `firebase.initializeApp()`}.
- *
- * @example
- * ```javascript
- * var app = firebase.initializeApp(config);
- * console.log(app.options.databaseURL === config.databaseURL); // true
- * ```
- */
- options: Object;
- /**
- * Gets the {@link firebase.storage.Storage `Storage`} service for the current
- * app, optionally initialized with a custom storage bucket.
- *
- * @example
- * ```javascript
- * var storage = app.storage();
- * // The above is shorthand for:
- * // var storage = firebase.storage(app);
- * ```
- *
- * @example
- * ```javascript
- * var storage = app.storage("gs://your-app.appspot.com");
- * ```
- *
- * @param url The gs:// url to your Firebase Storage Bucket.
- * If not passed, uses the app's default Storage Bucket.
- */
- storage(url?: string): firebase.storage.Storage;
- firestore(): firebase.firestore.Firestore;
- functions(regionOrCustomDomain?: string): firebase.functions.Functions;
- /**
- * Gets the {@link firebase.performance.Performance `Performance`} service for the
- * current app. If the current app is not the default one, throws an error.
- *
- * The Performance SDK does not work in a Node.js environment.
- *
- * @example
- * ```javascript
- * const perf = app.performance();
- * // The above is shorthand for:
- * // const perf = firebase.performance(app);
- * ```
- */
- performance(): firebase.performance.Performance;
- /**
- * Gets the {@link firebase.remoteConfig.RemoteConfig `RemoteConfig`} instance.
- *
- * The Remote Config SDK does not work in a Node.js environment.
- *
- * @example
- * ```javascript
- * const rc = app.remoteConfig();
- * // The above is shorthand for:
- * // const rc = firebase.remoteConfig(app);
- * ```
- */
- remoteConfig(): firebase.remoteConfig.RemoteConfig;
- /**
- * Gets the {@link firebase.analytics.Analytics `Analytics`} service for the
- * current app. If the current app is not the default one, throws an error.
- *
- * The Analytics SDK does not work in a Node.js environment.
- *
- * @example
- * ```javascript
- * const analytics = app.analytics();
- * // The above is shorthand for:
- * // const analytics = firebase.analytics(app);
- * ```
- */
- analytics(): firebase.analytics.Analytics;
- appCheck(): firebase.appCheck.AppCheck;
- }
- }
- /**
- * Firebase App Check does not work in a Node.js environment using `ReCaptchaV3Provider` or
- * `ReCaptchaEnterpriseProvider`, but can be used in Node.js if you use
- * `CustomProvider` and write your own attestation method.
- */
- declare namespace firebase.appCheck {
- /**
- * Result returned by
- * {@link firebase.appCheck.AppCheck.getToken `firebase.appCheck().getToken()`}.
- */
- interface AppCheckTokenResult {
- token: string;
- }
- /*
- * reCAPTCHA v3 token provider.
- */
- class ReCaptchaV3Provider {
- /**
- * @param siteKey - reCAPTCHA v3 site key (public key).
- */
- constructor(siteKey: string);
- }
- /*
- * reCAPTCHA Enterprise token provider.
- */
- class ReCaptchaEnterpriseProvider {
- /**
- * @param keyId - reCAPTCHA Enterprise key ID.
- */
- constructor(keyId: string);
- }
- /*
- * Custom token provider.
- */
- class CustomProvider {
- /**
- * @param options - Options for creating the custom provider.
- */
- constructor(options: CustomProviderOptions);
- }
- /**
- * Options when creating a CustomProvider.
- */
- interface CustomProviderOptions {
- /**
- * Function to get an App Check token through a custom provider
- * service.
- */
- getToken: () => Promise<AppCheckToken>;
- }
- /**
- * The Firebase AppCheck service interface.
- *
- * Do not call this constructor directly. Instead, use
- * {@link firebase.appCheck `firebase.appCheck()`}.
- */
- export interface AppCheck {
- /**
- * Activate AppCheck
- * @param provider This can be a `ReCaptchaV3Provider` instance,
- * a `ReCaptchaEnterpriseProvider` instance, a `CustomProvider` instance,
- * an object with a custom `getToken()` method, or a reCAPTCHA site key.
- * @param isTokenAutoRefreshEnabled If true, the SDK automatically
- * refreshes App Check tokens as needed. If undefined, defaults to the
- * value of `app.automaticDataCollectionEnabled`, which defaults to
- * false and can be set in the app config.
- */
- activate(
- provider:
- | ReCaptchaV3Provider
- | ReCaptchaEnterpriseProvider
- | CustomProvider
- | AppCheckProvider
- | { getToken: () => AppCheckToken }
- | string,
- isTokenAutoRefreshEnabled?: boolean
- ): void;
- /**
- *
- * @param isTokenAutoRefreshEnabled If true, the SDK automatically
- * refreshes App Check tokens as needed. This overrides any value set
- * during `activate()`.
- */
- setTokenAutoRefreshEnabled(isTokenAutoRefreshEnabled: boolean): void;
- /**
- * Get the current App Check token. Attaches to the most recent
- * in-flight request if one is present. Returns null if no token
- * is present and no token requests are in-flight.
- *
- * @param forceRefresh - If true, will always try to fetch a fresh token.
- * If false, will use a cached token if found in storage.
- */
- getToken(
- forceRefresh?: boolean
- ): Promise<firebase.appCheck.AppCheckTokenResult>;
- /**
- * Registers a listener to changes in the token state. There can be more
- * than one listener registered at the same time for one or more
- * App Check instances. The listeners call back on the UI thread whenever
- * the current token associated with this App Check instance changes.
- *
- * @param observer An object with `next`, `error`, and `complete`
- * properties. `next` is called with an
- * {@link firebase.appCheck.AppCheckTokenResult `AppCheckTokenResult`}
- * whenever the token changes. `error` is optional and is called if an
- * error is thrown by the listener (the `next` function). `complete`
- * is unused, as the token stream is unending.
- *
- * @returns A function that unsubscribes this listener.
- */
- onTokenChanged(observer: {
- next: (tokenResult: firebase.appCheck.AppCheckTokenResult) => void;
- error?: (error: Error) => void;
- complete?: () => void;
- }): Unsubscribe;
- /**
- * Registers a listener to changes in the token state. There can be more
- * than one listener registered at the same time for one or more
- * App Check instances. The listeners call back on the UI thread whenever
- * the current token associated with this App Check instance changes.
- *
- * @param onNext When the token changes, this function is called with aa
- * {@link firebase.appCheck.AppCheckTokenResult `AppCheckTokenResult`}.
- * @param onError Optional. Called if there is an error thrown by the
- * listener (the `onNext` function).
- * @param onCompletion Currently unused, as the token stream is unending.
- * @returns A function that unsubscribes this listener.
- */
- onTokenChanged(
- onNext: (tokenResult: firebase.appCheck.AppCheckTokenResult) => void,
- onError?: (error: Error) => void,
- onCompletion?: () => void
- ): Unsubscribe;
- }
- /**
- * An App Check provider. This can be either the built-in reCAPTCHA
- * provider or a custom provider. For more on custom providers, see
- * https://firebase.google.com/docs/app-check/web-custom-provider
- */
- interface AppCheckProvider {
- /**
- * Returns an AppCheck token.
- */
- getToken(): Promise<AppCheckToken>;
- }
- /**
- * The token returned from an {@link firebase.appCheck.AppCheckProvider `AppCheckProvider`}.
- */
- interface AppCheckToken {
- /**
- * The token string in JWT format.
- */
- readonly token: string;
- /**
- * The local timestamp after which the token will expire.
- */
- readonly expireTimeMillis: number;
- }
- }
- /**
- * The Installations SDK does not work in a Node.js environment.
- */
- declare namespace firebase.installations {
- /**
- * The Firebase Installations service interface.
- *
- * Do not call this constructor directly. Instead, use
- * {@link firebase.installations `firebase.installations()`}.
- */
- export interface Installations {
- /**
- * The {@link firebase.app.App app} associated with the `Installations` service
- * instance.
- *
- * @example
- * ```javascript
- * var app = analytics.app;
- * ```
- */
- app: firebase.app.App;
- /**
- * Creates a Firebase Installation if there isn't one for the app and
- * returns the Installation ID.
- *
- * @return Firebase Installation ID
- */
- getId(): Promise<string>;
- /**
- * Returns an Authentication Token for the current Firebase Installation.
- *
- * @return Firebase Installation Authentication Token
- */
- getToken(forceRefresh?: boolean): Promise<string>;
- /**
- * Deletes the Firebase Installation and all associated data.
- */
- delete(): Promise<void>;
- /**
- * Sets a new callback that will get called when Installlation ID changes.
- * Returns an unsubscribe function that will remove the callback when called.
- */
- onIdChange(callback: (installationId: string) => void): () => void;
- }
- }
- /**
- * The Performance SDK does not work in a Node.js environment.
- */
- declare namespace firebase.performance {
- /**
- * The Firebase Performance Monitoring service interface.
- *
- * Do not call this constructor directly. Instead, use
- * {@link firebase.performance `firebase.performance()`}.
- */
- export interface Performance {
- /**
- * The {@link firebase.app.App app} associated with the `Performance` service
- * instance.
- *
- * @example
- * ```javascript
- * var app = analytics.app;
- * ```
- */
- app: firebase.app.App;
- /**
- * Creates an uninitialized instance of {@link firebase.performance.Trace `trace`} and returns
- * it.
- *
- * @param traceName The name of the trace instance.
- * @return The Trace instance.
- */
- trace(traceName: string): Trace;
- /**
- * Controls the logging of automatic traces and HTTP/S network monitoring.
- */
- instrumentationEnabled: boolean;
- /**
- * Controls the logging of custom traces.
- */
- dataCollectionEnabled: boolean;
- }
- export interface Trace {
- /**
- * Starts the timing for the {@link firebase.performance.Trace `trace`} instance.
- */
- start(): void;
- /**
- * Stops the timing of the {@link firebase.performance.Trace `trace`} instance and logs the
- * data of the instance.
- */
- stop(): void;
- /**
- * Records a {@link firebase.performance.Trace `trace`} from given parameters. This provides a
- * direct way to use {@link firebase.performance.Trace `trace`} without a need to start/stop.
- * This is useful for use cases in which the {@link firebase.performance.Trace `trace`} cannot
- * directly be used (e.g. if the duration was captured before the Performance SDK was loaded).
- *
- * @param startTime Trace start time since epoch in millisec.
- * @param duration The duraction of the trace in millisec.
- * @param options An object which can optionally hold maps of custom metrics and
- * custom attributes.
- */
- record(
- startTime: number,
- duration: number,
- options?: {
- metrics?: { [key: string]: number };
- attributes?: { [key: string]: string };
- }
- ): void;
- /**
- * Adds to the value of a custom metric. If a custom metric with the provided name does not
- * exist, it creates one with that name and the value equal to the given number.
- *
- * @param metricName The name of the custom metric.
- * @param num The number to be added to the value of the custom metric. If not provided, it
- * uses a default value of one.
- */
- incrementMetric(metricName: string, num?: number): void;
- /**
- * Sets the value of the specified custom metric to the given number regardless of whether
- * a metric with that name already exists on the {@link firebase.performance.Trace `trace`}
- * instance or not.
- *
- * @param metricName Name of the custom metric.
- * @param num Value to of the custom metric.
- */
- putMetric(metricName: string, num: number): void;
- /**
- * Returns the value of the custom metric by that name. If a custom metric with that name does
- * not exist returns zero.
- *
- * @param metricName Name of the custom metric.
- */
- getMetric(metricName: string): number;
- /**
- * Set a custom attribute of a {@link firebase.performance.Trace `trace`} to a certain value.
- *
- * @param attr Name of the custom attribute.
- * @param value Value of the custom attribute.
- */
- putAttribute(attr: string, value: string): void;
- /**
- * Retrieves the value that the custom attribute is set to.
- *
- * @param attr Name of the custom attribute.
- */
- getAttribute(attr: string): string | undefined;
- /**
- * Removes the specified custom attribute from a {@link firebase.performance.Trace `trace`}
- * instance.
- *
- * @param attr Name of the custom attribute.
- */
- removeAttribute(attr: string): void;
- /**
- * Returns a map of all custom attributes of a {@link firebase.performance.Trace `trace`}
- * instance.
- */
- getAttributes(): { [key: string]: string };
- }
- }
- /**
- * The Remote Config SDK does not work in a Node.js environment.
- */
- declare namespace firebase.remoteConfig {
- /**
- * The Firebase Remote Config service interface.
- *
- * Do not call this constructor directly. Instead, use
- * {@link firebase.remoteConfig `firebase.remoteConfig()`}.
- */
- export interface RemoteConfig {
- /**
- * The {@link firebase.app.App app} associated with the `Performance` service
- * instance.
- *
- * @example
- * ```javascript
- * var app = analytics.app;
- * ```
- */
- app: firebase.app.App;
- /**
- * Defines configuration for the Remote Config SDK.
- */
- settings: Settings;
- /**
- * Object containing default values for configs.
- */
- defaultConfig: { [key: string]: string | number | boolean };
- /**
- * The Unix timestamp in milliseconds of the last <i>successful</i> fetch, or negative one if
- * the {@link RemoteConfig} instance either hasn't fetched or initialization
- * is incomplete.
- */
- fetchTimeMillis: number;
- /**
- * The status of the last fetch <i>attempt</i>.
- */
- lastFetchStatus: FetchStatus;
- /**
- * Makes the last fetched config available to the getters.
- * Returns a promise which resolves to true if the current call activated the fetched configs.
- * If the fetched configs were already activated, the promise will resolve to false.
- */
- activate(): Promise<boolean>;
- /**
- * Ensures the last activated config are available to the getters.
- */
- ensureInitialized(): Promise<void>;
- /**
- * Fetches and caches configuration from the Remote Config service.
- */
- fetch(): Promise<void>;
- /**
- * Performs fetch and activate operations, as a convenience.
- * Returns a promise which resolves to true if the current call activated the fetched configs.
- * If the fetched configs were already activated, the promise will resolve to false.
- */
- fetchAndActivate(): Promise<boolean>;
- /**
- * Gets all config.
- */
- getAll(): { [key: string]: Value };
- /**
- * Gets the value for the given key as a boolean.
- *
- * Convenience method for calling <code>remoteConfig.getValue(key).asBoolean()</code>.
- */
- getBoolean(key: string): boolean;
- /**
- * Gets the value for the given key as a number.
- *
- * Convenience method for calling <code>remoteConfig.getValue(key).asNumber()</code>.
- */
- getNumber(key: string): number;
- /**
- * Gets the value for the given key as a String.
- *
- * Convenience method for calling <code>remoteConfig.getValue(key).asString()</code>.
- */
- getString(key: string): string;
- /**
- * Gets the {@link Value} for the given key.
- */
- getValue(key: string): Value;
- /**
- * Defines the log level to use.
- */
- setLogLevel(logLevel: LogLevel): void;
- }
- /**
- * Indicates the source of a value.
- *
- * <ul>
- * <li>"static" indicates the value was defined by a static constant.</li>
- * <li>"default" indicates the value was defined by default config.</li>
- * <li>"remote" indicates the value was defined by fetched config.</li>
- * </ul>
- */
- export type ValueSource = 'static' | 'default' | 'remote';
- /**
- * Wraps a value with metadata and type-safe getters.
- */
- export interface Value {
- /**
- * Gets the value as a boolean.
- *
- * The following values (case insensitive) are interpreted as true:
- * "1", "true", "t", "yes", "y", "on". Other values are interpreted as false.
- */
- asBoolean(): boolean;
- /**
- * Gets the value as a number. Comparable to calling <code>Number(value) || 0</code>.
- */
- asNumber(): number;
- /**
- * Gets the value as a string.
- */
- asString(): string;
- /**
- * Gets the {@link ValueSource} for the given key.
- */
- getSource(): ValueSource;
- }
- /**
- * Defines configuration options for the Remote Config SDK.
- */
- export interface Settings {
- /**
- * Defines the maximum age in milliseconds of an entry in the config cache before
- * it is considered stale. Defaults to 43200000 (Twelve hours).
- */
- minimumFetchIntervalMillis: number;
- /**
- * Defines the maximum amount of milliseconds to wait for a response when fetching
- * configuration from the Remote Config server. Defaults to 60000 (One minute).
- */
- fetchTimeoutMillis: number;
- }
- /**
- * Summarizes the outcome of the last attempt to fetch config from the Firebase Remote Config server.
- *
- * <ul>
- * <li>"no-fetch-yet" indicates the {@link RemoteConfig} instance has not yet attempted
- * to fetch config, or that SDK initialization is incomplete.</li>
- * <li>"success" indicates the last attempt succeeded.</li>
- * <li>"failure" indicates the last attempt failed.</li>
- * <li>"throttle" indicates the last attempt was rate-limited.</li>
- * </ul>
- */
- export type FetchStatus = 'no-fetch-yet' | 'success' | 'failure' | 'throttle';
- /**
- * Defines levels of Remote Config logging.
- */
- export type LogLevel = 'debug' | 'error' | 'silent';
- /**
- * This method provides two different checks:
- *
- * 1. Check if IndexedDB exists in the browser environment.
- * 2. Check if the current browser context allows IndexedDB `open()` calls.
- *
- * It returns a `Promise` which resolves to true if a {@link RemoteConfig} instance
- * can be initialized in this environment, or false if it cannot.
- */
- export function isSupported(): Promise<boolean>;
- }
- declare namespace firebase.functions {
- /**
- * An HttpsCallableResult wraps a single result from a function call.
- */
- export interface HttpsCallableResult {
- readonly data: any;
- }
- /**
- * An HttpsCallable is a reference to a "callable" http trigger in
- * Google Cloud Functions.
- */
- export interface HttpsCallable {
- (data?: any): Promise<HttpsCallableResult>;
- }
- export interface HttpsCallableOptions {
- timeout?: number;
- }
- /**
- * The Cloud Functions for Firebase service interface.
- *
- * Do not call this constructor directly. Instead, use
- * {@link firebase.functions `firebase.functions()`}.
- */
- export class Functions {
- private constructor();
- /**
- * Modify this instance to communicate with the Cloud Functions emulator.
- *
- * Note: this must be called before this instance has been used to do any operations.
- *
- * @param host The emulator host (ex: localhost)
- * @param port The emulator port (ex: 5001)
- */
- useEmulator(host: string, port: number): void;
- /**
- * Changes this instance to point to a Cloud Functions emulator running
- * locally. See https://firebase.google.com/docs/functions/local-emulator
- *
- * @deprecated Prefer the useEmulator(host, port) method.
- * @param origin The origin of the local emulator, such as
- * "http://localhost:5005".
- */
- useFunctionsEmulator(url: string): void;
- /**
- * Gets an `HttpsCallable` instance that refers to the function with the given
- * name.
- *
- * @param name The name of the https callable function.
- * @param options The options for this HttpsCallable instance.
- * @return The `HttpsCallable` instance.
- */
- httpsCallable(name: string, options?: HttpsCallableOptions): HttpsCallable;
- }
- /**
- * The set of Firebase Functions status codes. The codes are the same at the
- * ones exposed by gRPC here:
- * https://github.com/grpc/grpc/blob/master/doc/statuscodes.md
- *
- * Possible values:
- * - 'cancelled': The operation was cancelled (typically by the caller).
- * - 'unknown': Unknown error or an error from a different error domain.
- * - 'invalid-argument': Client specified an invalid argument. Note that this
- * differs from 'failed-precondition'. 'invalid-argument' indicates
- * arguments that are problematic regardless of the state of the system
- * (e.g. an invalid field name).
- * - 'deadline-exceeded': Deadline expired before operation could complete.
- * For operations that change the state of the system, this error may be
- * returned even if the operation has completed successfully. For example,
- * a successful response from a server could have been delayed long enough
- * for the deadline to expire.
- * - 'not-found': Some requested document was not found.
- * - 'already-exists': Some document that we attempted to create already
- * exists.
- * - 'permission-denied': The caller does not have permission to execute the
- * specified operation.
- * - 'resource-exhausted': Some resource has been exhausted, perhaps a
- * per-user quota, or perhaps the entire file system is out of space.
- * - 'failed-precondition': Operation was rejected because the system is not
- * in a state required for the operation's execution.
- * - 'aborted': The operation was aborted, typically due to a concurrency
- * issue like transaction aborts, etc.
- * - 'out-of-range': Operation was attempted past the valid range.
- * - 'unimplemented': Operation is not implemented or not supported/enabled.
- * - 'internal': Internal errors. Means some invariants expected by
- * underlying system has been broken. If you see one of these errors,
- * something is very broken.
- * - 'unavailable': The service is currently unavailable. This is most likely
- * a transient condition and may be corrected by retrying with a backoff.
- * - 'data-loss': Unrecoverable data loss or corruption.
- * - 'unauthenticated': The request does not have valid authentication
- * credentials for the operation.
- */
- export type FunctionsErrorCode =
- | 'ok'
- | 'cancelled'
- | 'unknown'
- | 'invalid-argument'
- | 'deadline-exceeded'
- | 'not-found'
- | 'already-exists'
- | 'permission-denied'
- | 'resource-exhausted'
- | 'failed-precondition'
- | 'aborted'
- | 'out-of-range'
- | 'unimplemented'
- | 'internal'
- | 'unavailable'
- | 'data-loss'
- | 'unauthenticated';
- export interface HttpsError extends Error {
- /**
- * A standard error code that will be returned to the client. This also
- * determines the HTTP status code of the response, as defined in code.proto.
- */
- readonly code: FunctionsErrorCode;
- /**
- * Extra data to be converted to JSON and included in the error response.
- */
- readonly details?: any;
- }
- }
- declare namespace firebase.auth {
- /**
- * A utility class to parse email action URLs.
- */
- class ActionCodeURL {
- private constructor();
- /**
- * The API key of the email action link.
- */
- apiKey: string;
- /**
- * The action code of the email action link.
- */
- code: string;
- /**
- * The continue URL of the email action link. Null if not provided.
- */
- continueUrl: string | null;
- /**
- * The language code of the email action link. Null if not provided.
- */
- languageCode: string | null;
- /**
- * The action performed by the email action link. It returns from one
- * of the types from {@link firebase.auth.ActionCodeInfo}.
- */
- operation: firebase.auth.ActionCodeInfo.Operation;
- /**
- * Parses the email action link string and returns an ActionCodeURL object
- * if the link is valid, otherwise returns null.
- *
- * @param link The email action link string.
- * @return The ActionCodeURL object, or null if the link is invalid.
- */
- static parseLink(link: string): firebase.auth.ActionCodeURL | null;
- /**
- * The tenant ID of the email action link. Null if the email action
- * is from the parent project.
- */
- tenantId: string | null;
- }
- /**
- * A response from {@link firebase.auth.Auth.checkActionCode}.
- */
- interface ActionCodeInfo {
- /**
- * The data associated with the action code.
- *
- * For the `PASSWORD_RESET`, `VERIFY_EMAIL`, and `RECOVER_EMAIL` actions, this object
- * contains an `email` field with the address the email was sent to.
- *
- * For the RECOVER_EMAIL action, which allows a user to undo an email address
- * change, this object also contains a `previousEmail` field with the user account's
- * current email address. After the action completes, the user's email address will
- * revert to the value in the `email` field from the value in `previousEmail` field.
- *
- * For the VERIFY_AND_CHANGE_EMAIL action, which allows a user to verify the email
- * before updating it, this object contains a `previousEmail` field with the user
- * account's email address before updating. After the action completes, the user's
- * email address will be updated to the value in the `email` field from the value
- * in `previousEmail` field.
- *
- * For the REVERT_SECOND_FACTOR_ADDITION action, which allows a user to unenroll
- * a newly added second factor, this object contains a `multiFactorInfo` field with
- * the information about the second factor. For phone second factor, the
- * `multiFactorInfo` is a {@link firebase.auth.PhoneMultiFactorInfo} object,
- * which contains the phone number.
- */
- data: {
- email?: string | null;
- /**
- * @deprecated
- * This field is deprecated in favor of previousEmail.
- */
- fromEmail?: string | null;
- multiFactorInfo?: firebase.auth.MultiFactorInfo | null;
- previousEmail?: string | null;
- };
- /**
- * The type of operation that generated the action code. This could be:
- * <ul>
- * <li>`EMAIL_SIGNIN`: email sign in code generated via
- * {@link firebase.auth.Auth.sendSignInLinkToEmail}.</li>
- * <li>`PASSWORD_RESET`: password reset code generated via
- * {@link firebase.auth.Auth.sendPasswordResetEmail}.</li>
- * <li>`RECOVER_EMAIL`: email change revocation code generated via
- * {@link firebase.User.updateEmail}.</li>
- * <li>`REVERT_SECOND_FACTOR_ADDITION`: revert second factor addition
- * code generated via
- * {@link firebase.User.MultiFactorUser.enroll}.</li>
- * <li>`VERIFY_AND_CHANGE_EMAIL`: verify and change email code generated
- * via {@link firebase.User.verifyBeforeUpdateEmail}.</li>
- * <li>`VERIFY_EMAIL`: email verification code generated via
- * {@link firebase.User.sendEmailVerification}.</li>
- * </ul>
- */
- operation: string;
- }
- /**
- * This is the interface that defines the required continue/state URL with
- * optional Android and iOS bundle identifiers.
- * The action code setting fields are:
- * <ul>
- * <li><p>url: Sets the link continue/state URL, which has different meanings
- * in different contexts:</p>
- * <ul>
- * <li>When the link is handled in the web action widgets, this is the deep
- * link in the continueUrl query parameter.</li>
- * <li>When the link is handled in the app directly, this is the continueUrl
- * query parameter in the deep link of the Dynamic Link.</li>
- * </ul>
- * </li>
- * <li>iOS: Sets the iOS bundle ID. This will try to open the link in an iOS app
- * if it is installed.</li>
- * <li>android: Sets the Android package name. This will try to open the link in
- * an android app if it is installed. If installApp is passed, it specifies
- * whether to install the Android app if the device supports it and the app
- * is not already installed. If this field is provided without a
- * packageName, an error is thrown explaining that the packageName must be
- * provided in conjunction with this field.
- * If minimumVersion is specified, and an older version of the app is
- * installed, the user is taken to the Play Store to upgrade the app.</li>
- * <li>handleCodeInApp: The default is false. When set to true, the action code
- * link will be be sent as a Universal Link or Android App Link and will be
- * opened by the app if installed. In the false case, the code will be sent
- * to the web widget first and then on continue will redirect to the app if
- * installed.</li>
- * </ul>
- */
- type ActionCodeSettings = {
- android?: {
- installApp?: boolean;
- minimumVersion?: string;
- packageName: string;
- };
- handleCodeInApp?: boolean;
- iOS?: { bundleId: string };
- url: string;
- dynamicLinkDomain?: string;
- };
- /**
- * A structure containing additional user information from a federated identity
- * provider.
- */
- type AdditionalUserInfo = {
- isNewUser: boolean;
- profile: Object | null;
- providerId: string;
- username?: string | null;
- };
- /**
- * A verifier for domain verification and abuse prevention. Currently, the
- * only implementation is {@link firebase.auth.RecaptchaVerifier}.
- */
- interface ApplicationVerifier {
- /**
- * Identifies the type of application verifier (e.g. "recaptcha").
- */
- type: string;
- /**
- * Executes the verification process.
- * @return A Promise for a token that can be used to
- * assert the validity of a request.
- */
- verify(): Promise<string>;
- }
- /**
- * Interface representing an Auth instance's settings, currently used for
- * enabling/disabling app verification for phone Auth testing.
- */
- interface AuthSettings {
- /**
- * When set, this property disables app verification for the purpose of testing
- * phone authentication. For this property to take effect, it needs to be set
- * before rendering a reCAPTCHA app verifier. When this is disabled, a
- * mock reCAPTCHA is rendered instead. This is useful for manual testing during
- * development or for automated integration tests.
- *
- * In order to use this feature, you will need to
- * {@link https://firebase.google.com/docs/auth/web/phone-auth#test-with-whitelisted-phone-numbers
- * whitelist your phone number} via the
- * Firebase Console.
- *
- * The default value is false (app verification is enabled).
- */
- appVerificationDisabledForTesting: boolean;
- }
- /**
- * Interface representing the Auth config.
- *
- * @public
- */
- export interface Config {
- /**
- * The API Key used to communicate with the Firebase Auth backend.
- */
- apiKey: string;
- /**
- * The host at which the Firebase Auth backend is running.
- */
- apiHost: string;
- /**
- * The scheme used to communicate with the Firebase Auth backend.
- */
- apiScheme: string;
- /**
- * The host at which the Secure Token API is running.
- */
- tokenApiHost: string;
- /**
- * The SDK Client Version.
- */
- sdkClientVersion: string;
- /**
- * The domain at which the web widgets are hosted (provided via Firebase Config).
- */
- authDomain?: string;
- }
- /**
- * Configuration of Firebase Authentication Emulator.
- */
- export interface EmulatorConfig {
- /**
- * The protocol used to communicate with the emulator ("http"/"https").
- */
- readonly protocol: string;
- /**
- * The hostname of the emulator, which may be a domain ("localhost"), IPv4 address ("127.0.0.1")
- * or quoted IPv6 address ("[::1]").
- */
- readonly host: string;
- /**
- * The port of the emulator, or null if port isn't specified (i.e. protocol default).
- */
- readonly port: number | null;
- /**
- * The emulator-specific options.
- */
- readonly options: {
- /**
- * Whether the warning banner attached to the DOM was disabled.
- */
- readonly disableWarnings: boolean;
- };
- }
- /**
- * The Firebase Auth service interface.
- *
- * Do not call this constructor directly. Instead, use
- * {@link firebase.auth `firebase.auth()`}.
- *
- * See
- * {@link https://firebase.google.com/docs/auth/ Firebase Authentication}
- * for a full guide on how to use the Firebase Auth service.
- *
- */
- interface Auth {
- /** The name of the app associated with the Auth service instance. */
- readonly name: string;
- /** The config used to initialize this instance. */
- readonly config: Config;
- /** The current emulator configuration (or null). */
- readonly emulatorConfig: EmulatorConfig | null;
- /**
- * The {@link firebase.app.App app} associated with the `Auth` service
- * instance.
- *
- * @example
- * ```javascript
- * var app = auth.app;
- * ```
- */
- app: firebase.app.App;
- /**
- * Applies a verification code sent to the user by email or other out-of-band
- * mechanism.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/expired-action-code</dt>
- * <dd>Thrown if the action code has expired.</dd>
- * <dt>auth/invalid-action-code</dt>
- * <dd>Thrown if the action code is invalid. This can happen if the code is
- * malformed or has already been used.</dd>
- * <dt>auth/user-disabled</dt>
- * <dd>Thrown if the user corresponding to the given action code has been
- * disabled.</dd>
- * <dt>auth/user-not-found</dt>
- * <dd>Thrown if there is no user corresponding to the action code. This may
- * have happened if the user was deleted between when the action code was
- * issued and when this method was called.</dd>
- * </dl>
- *
- * @param code A verification code sent to the user.
- */
- applyActionCode(code: string): Promise<void>;
- /**
- * Checks a verification code sent to the user by email or other out-of-band
- * mechanism.
- *
- * Returns metadata about the code.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/expired-action-code</dt>
- * <dd>Thrown if the action code has expired.</dd>
- * <dt>auth/invalid-action-code</dt>
- * <dd>Thrown if the action code is invalid. This can happen if the code is
- * malformed or has already been used.</dd>
- * <dt>auth/user-disabled</dt>
- * <dd>Thrown if the user corresponding to the given action code has been
- * disabled.</dd>
- * <dt>auth/user-not-found</dt>
- * <dd>Thrown if there is no user corresponding to the action code. This may
- * have happened if the user was deleted between when the action code was
- * issued and when this method was called.</dd>
- * </dl>
- *
- * @param code A verification code sent to the user.
- */
- checkActionCode(code: string): Promise<firebase.auth.ActionCodeInfo>;
- /**
- * Completes the password reset process, given a confirmation code and new
- * password.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/expired-action-code</dt>
- * <dd>Thrown if the password reset code has expired.</dd>
- * <dt>auth/invalid-action-code</dt>
- * <dd>Thrown if the password reset code is invalid. This can happen if the
- * code is malformed or has already been used.</dd>
- * <dt>auth/user-disabled</dt>
- * <dd>Thrown if the user corresponding to the given password reset code has
- * been disabled.</dd>
- * <dt>auth/user-not-found</dt>
- * <dd>Thrown if there is no user corresponding to the password reset code. This
- * may have happened if the user was deleted between when the code was
- * issued and when this method was called.</dd>
- * <dt>auth/weak-password</dt>
- * <dd>Thrown if the new password is not strong enough.</dd>
- * </dl>
- *
- * @param code The confirmation code send via email to the user.
- * @param newPassword The new password.
- */
- confirmPasswordReset(code: string, newPassword: string): Promise<void>;
- /**
- * Creates a new user account associated with the specified email address and
- * password.
- *
- * On successful creation of the user account, this user will also be
- * signed in to your application.
- *
- * User account creation can fail if the account already exists or the password
- * is invalid.
- *
- * Note: The email address acts as a unique identifier for the user and
- * enables an email-based password reset. This function will create
- * a new user account and set the initial user password.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/email-already-in-use</dt>
- * <dd>Thrown if there already exists an account with the given email
- * address.</dd>
- * <dt>auth/invalid-email</dt>
- * <dd>Thrown if the email address is not valid.</dd>
- * <dt>auth/operation-not-allowed</dt>
- * <dd>Thrown if email/password accounts are not enabled. Enable email/password
- * accounts in the Firebase Console, under the Auth tab.</dd>
- * <dt>auth/weak-password</dt>
- * <dd>Thrown if the password is not strong enough.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * firebase.auth().createUserWithEmailAndPassword(email, password)
- * .catch(function(error) {
- * // Handle Errors here.
- * var errorCode = error.code;
- * var errorMessage = error.message;
- * if (errorCode == 'auth/weak-password') {
- * alert('The password is too weak.');
- * } else {
- * alert(errorMessage);
- * }
- * console.log(error);
- * });
- * ```
- * @param email The user's email address.
- * @param password The user's chosen password.
- */
- createUserWithEmailAndPassword(
- email: string,
- password: string
- ): Promise<firebase.auth.UserCredential>;
- /**
- * The currently signed-in user (or null).
- */
- currentUser: firebase.User | null;
- /**
- * Gets the list of possible sign in methods for the given email address. This
- * is useful to differentiate methods of sign-in for the same provider,
- * eg. `EmailAuthProvider` which has 2 methods of sign-in, email/password and
- * email/link.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/invalid-email</dt>
- * <dd>Thrown if the email address is not valid.</dd>
- * </dl>
- */
- fetchSignInMethodsForEmail(email: string): Promise<Array<string>>;
- /**
- * Checks if an incoming link is a sign-in with email link.
- */
- isSignInWithEmailLink(emailLink: string): boolean;
- /**
- * Returns a UserCredential from the redirect-based sign-in flow.
- *
- * If sign-in succeeded, returns the signed in user. If sign-in was
- * unsuccessful, fails with an error. If no redirect operation was called, returns `null`.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/account-exists-with-different-credential</dt>
- * <dd>Thrown if there already exists an account with the email address
- * asserted by the credential. Resolve this by calling
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} with the error.email
- * and then asking the user to sign in using one of the returned providers.
- * Once the user is signed in, the original credential retrieved from the
- * error.credential can be linked to the user with
- * {@link firebase.User.linkWithCredential} to prevent the user from signing
- * in again to the original provider via popup or redirect. If you are using
- * redirects for sign in, save the credential in session storage and then
- * retrieve on redirect and repopulate the credential using for example
- * {@link firebase.auth.GoogleAuthProvider.credential} depending on the
- * credential provider id and complete the link.</dd>
- * <dt>auth/auth-domain-config-required</dt>
- * <dd>Thrown if authDomain configuration is not provided when calling
- * firebase.initializeApp(). Check Firebase Console for instructions on
- * determining and passing that field.</dd>
- * <dt>auth/credential-already-in-use</dt>
- * <dd>Thrown if the account corresponding to the credential already exists
- * among your users, or is already linked to a Firebase User.
- * For example, this error could be thrown if you are upgrading an anonymous
- * user to a Google user by linking a Google credential to it and the Google
- * credential used is already associated with an existing Firebase Google
- * user.
- * An <code>error.email</code> and <code>error.credential</code>
- * ({@link firebase.auth.AuthCredential}) fields are also provided. You can
- * recover from this error by signing in with that credential directly via
- * {@link firebase.auth.Auth.signInWithCredential}.</dd>
- * <dt>auth/email-already-in-use</dt>
- * <dd>Thrown if the email corresponding to the credential already exists
- * among your users. When thrown while linking a credential to an existing
- * user, an <code>error.email</code> and <code>error.credential</code>
- * ({@link firebase.auth.AuthCredential}) fields are also provided.
- * You have to link the credential to the existing user with that email if
- * you wish to continue signing in with that credential. To do so, call
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to
- * <code>error.email</code> via one of the providers returned and then
- * {@link firebase.User.linkWithCredential} the original credential to that
- * newly signed in user.</dd>
- * <dt>auth/operation-not-allowed</dt>
- * <dd>Thrown if the type of account corresponding to the credential
- * is not enabled. Enable the account type in the Firebase Console, under
- * the Auth tab.</dd>
- * <dt>auth/operation-not-supported-in-this-environment</dt>
- * <dd>Thrown if this operation is not supported in the environment your
- * application is running on. "location.protocol" must be http or https.
- * </dd>
- * <dt>auth/timeout</dt>
- * <dd>Thrown typically if the app domain is not authorized for OAuth operations
- * for your Firebase project. Edit the list of authorized domains from the
- * Firebase console.</dd>
- * </dl>
- *
- * This method does not work in a Node.js environment.
- *
- * @example
- * ```javascript
- * // First, we perform the signInWithRedirect.
- * // Creates the provider object.
- * var provider = new firebase.auth.FacebookAuthProvider();
- * // You can add additional scopes to the provider:
- * provider.addScope('email');
- * provider.addScope('user_friends');
- * // Sign in with redirect:
- * auth.signInWithRedirect(provider)
- * ////////////////////////////////////////////////////////////
- * // The user is redirected to the provider's sign in flow...
- * ////////////////////////////////////////////////////////////
- * // Then redirected back to the app, where we check the redirect result:
- * auth.getRedirectResult().then(function(result) {
- * // The firebase.User instance:
- * var user = result.user;
- * // The Facebook firebase.auth.AuthCredential containing the Facebook
- * // access token:
- * var credential = result.credential;
- * // As this API can be used for sign-in, linking and reauthentication,
- * // check the operationType to determine what triggered this redirect
- * // operation.
- * var operationType = result.operationType;
- * }, function(error) {
- * // The provider's account email, can be used in case of
- * // auth/account-exists-with-different-credential to fetch the providers
- * // linked to the email:
- * var email = error.email;
- * // The provider's credential:
- * var credential = error.credential;
- * // In case of auth/account-exists-with-different-credential error,
- * // you can fetch the providers using this:
- * if (error.code === 'auth/account-exists-with-different-credential') {
- * auth.fetchSignInMethodsForEmail(email).then(function(providers) {
- * // The returned 'providers' is a list of the available providers
- * // linked to the email address. Please refer to the guide for a more
- * // complete explanation on how to recover from this error.
- * });
- * }
- * });
- * ```
- */
- getRedirectResult(): Promise<firebase.auth.UserCredential>;
- /**
- * The current Auth instance's language code. This is a readable/writable
- * property. When set to null, the default Firebase Console language setting
- * is applied. The language code will propagate to email action templates
- * (password reset, email verification and email change revocation), SMS
- * templates for phone authentication, reCAPTCHA verifier and OAuth
- * popup/redirect operations provided the specified providers support
- * localization with the language code specified.
- */
- languageCode: string | null;
- /**
- * The current Auth instance's settings. This is used to edit/read configuration
- * related options like app verification mode for phone authentication.
- */
- settings: firebase.auth.AuthSettings;
- /**
- * Adds an observer for changes to the user's sign-in state.
- *
- * Prior to 4.0.0, this triggered the observer when users were signed in,
- * signed out, or when the user's ID token changed in situations such as token
- * expiry or password change. After 4.0.0, the observer is only triggered
- * on sign-in or sign-out.
- *
- * To keep the old behavior, see {@link firebase.auth.Auth.onIdTokenChanged}.
- *
- * @example
- * ```javascript
- * firebase.auth().onAuthStateChanged(function(user) {
- * if (user) {
- * // User is signed in.
- * }
- * });
- * ```
- */
- onAuthStateChanged(
- nextOrObserver:
- | firebase.Observer<any>
- | ((a: firebase.User | null) => any),
- error?: (a: firebase.auth.Error) => any,
- completed?: firebase.Unsubscribe
- ): firebase.Unsubscribe;
- /**
- * Adds an observer for changes to the signed-in user's ID token, which includes
- * sign-in, sign-out, and token refresh events. This method has the same
- * behavior as {@link firebase.auth.Auth.onAuthStateChanged} had prior to 4.0.0.
- *
- * @example
- * ```javascript
- * firebase.auth().onIdTokenChanged(function(user) {
- * if (user) {
- * // User is signed in or token was refreshed.
- * }
- * });
- * ```
- * @param
- * nextOrObserver An observer object or a function triggered on change.
- * @param error Optional A function
- * triggered on auth error.
- * @param completed Optional A function triggered when the
- * observer is removed.
- */
- onIdTokenChanged(
- nextOrObserver:
- | firebase.Observer<any>
- | ((a: firebase.User | null) => any),
- error?: (a: firebase.auth.Error) => any,
- completed?: firebase.Unsubscribe
- ): firebase.Unsubscribe;
- /**
- * Sends a sign-in email link to the user with the specified email.
- *
- * The sign-in operation has to always be completed in the app unlike other out
- * of band email actions (password reset and email verifications). This is
- * because, at the end of the flow, the user is expected to be signed in and
- * their Auth state persisted within the app.
- *
- * To complete sign in with the email link, call
- * {@link firebase.auth.Auth.signInWithEmailLink} with the email address and
- * the email link supplied in the email sent to the user.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/argument-error</dt>
- * <dd>Thrown if handleCodeInApp is false.</dd>
- * <dt>auth/invalid-email</dt>
- * <dd>Thrown if the email address is not valid.</dd>
- * <dt>auth/missing-android-pkg-name</dt>
- * <dd>An Android package name must be provided if the Android app is required
- * to be installed.</dd>
- * <dt>auth/missing-continue-uri</dt>
- * <dd>A continue URL must be provided in the request.</dd>
- * <dt>auth/missing-ios-bundle-id</dt>
- * <dd>An iOS Bundle ID must be provided if an App Store ID is provided.</dd>
- * <dt>auth/invalid-continue-uri</dt>
- * <dd>The continue URL provided in the request is invalid.</dd>
- * <dt>auth/unauthorized-continue-uri</dt>
- * <dd>The domain of the continue URL is not whitelisted. Whitelist
- * the domain in the Firebase console.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * var actionCodeSettings = {
- * // The URL to redirect to for sign-in completion. This is also the deep
- * // link for mobile redirects. The domain (www.example.com) for this URL
- * // must be whitelisted in the Firebase Console.
- * url: 'https://www.example.com/finishSignUp?cartId=1234',
- * iOS: {
- * bundleId: 'com.example.ios'
- * },
- * android: {
- * packageName: 'com.example.android',
- * installApp: true,
- * minimumVersion: '12'
- * },
- * // This must be true.
- * handleCodeInApp: true
- * };
- * firebase.auth().sendSignInLinkToEmail('user@example.com', actionCodeSettings)
- * .then(function() {
- * // The link was successfully sent. Inform the user. Save the email
- * // locally so you don't need to ask the user for it again if they open
- * // the link on the same device.
- * })
- * .catch(function(error) {
- * // Some error occurred, you can inspect the code: error.code
- * });
- * ```
- * @param email The email account to sign in with.
- * @param actionCodeSettings The action
- * code settings. The action code settings which provides Firebase with
- * instructions on how to construct the email link. This includes the
- * sign in completion URL or the deep link for mobile redirects, the mobile
- * apps to use when the sign-in link is opened on an Android or iOS device.
- * Mobile app redirects will only be applicable if the developer configures
- * and accepts the Firebase Dynamic Links terms of condition.
- * The Android package name and iOS bundle ID will be respected only if they
- * are configured in the same Firebase Auth project used.
- */
- sendSignInLinkToEmail(
- email: string,
- actionCodeSettings: firebase.auth.ActionCodeSettings
- ): Promise<void>;
- /**
- * Sends a password reset email to the given email address.
- *
- * To complete the password reset, call
- * {@link firebase.auth.Auth.confirmPasswordReset} with the code supplied in the
- * email sent to the user, along with the new password specified by the user.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/invalid-email</dt>
- * <dd>Thrown if the email address is not valid.</dd>
- * <dt>auth/missing-android-pkg-name</dt>
- * <dd>An Android package name must be provided if the Android app is required
- * to be installed.</dd>
- * <dt>auth/missing-continue-uri</dt>
- * <dd>A continue URL must be provided in the request.</dd>
- * <dt>auth/missing-ios-bundle-id</dt>
- * <dd>An iOS Bundle ID must be provided if an App Store ID is provided.</dd>
- * <dt>auth/invalid-continue-uri</dt>
- * <dd>The continue URL provided in the request is invalid.</dd>
- * <dt>auth/unauthorized-continue-uri</dt>
- * <dd>The domain of the continue URL is not whitelisted. Whitelist
- * the domain in the Firebase console.</dd>
- * <dt>auth/user-not-found</dt>
- * <dd>Thrown if there is no user corresponding to the email address.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * var actionCodeSettings = {
- * url: 'https://www.example.com/?email=user@example.com',
- * iOS: {
- * bundleId: 'com.example.ios'
- * },
- * android: {
- * packageName: 'com.example.android',
- * installApp: true,
- * minimumVersion: '12'
- * },
- * handleCodeInApp: true
- * };
- * firebase.auth().sendPasswordResetEmail(
- * 'user@example.com', actionCodeSettings)
- * .then(function() {
- * // Password reset email sent.
- * })
- * .catch(function(error) {
- * // Error occurred. Inspect error.code.
- * });
- * ```
- *
- * @param email The email address with the password to be reset.
- * @param actionCodeSettings The action
- * code settings. If specified, the state/continue URL will be set as the
- * "continueUrl" parameter in the password reset link. The default password
- * reset landing page will use this to display a link to go back to the app
- * if it is installed.
- * If the actionCodeSettings is not specified, no URL is appended to the
- * action URL.
- * The state URL provided must belong to a domain that is whitelisted by the
- * developer in the console. Otherwise an error will be thrown.
- * Mobile app redirects will only be applicable if the developer configures
- * and accepts the Firebase Dynamic Links terms of condition.
- * The Android package name and iOS bundle ID will be respected only if they
- * are configured in the same Firebase Auth project used.
- */
- sendPasswordResetEmail(
- email: string,
- actionCodeSettings?: firebase.auth.ActionCodeSettings | null
- ): Promise<void>;
- /**
- * Changes the current type of persistence on the current Auth instance for the
- * currently saved Auth session and applies this type of persistence for
- * future sign-in requests, including sign-in with redirect requests. This will
- * return a promise that will resolve once the state finishes copying from one
- * type of storage to the other.
- * Calling a sign-in method after changing persistence will wait for that
- * persistence change to complete before applying it on the new Auth state.
- *
- * This makes it easy for a user signing in to specify whether their session
- * should be remembered or not. It also makes it easier to never persist the
- * Auth state for applications that are shared by other users or have sensitive
- * data.
- *
- * The default for web browser apps and React Native apps is 'local' (provided
- * the browser supports this mechanism) whereas it is 'none' for Node.js backend
- * apps.
- *
- * <h4>Error Codes (thrown synchronously)</h4>
- * <dl>
- * <dt>auth/invalid-persistence-type</dt>
- * <dd>Thrown if the specified persistence type is invalid.</dd>
- * <dt>auth/unsupported-persistence-type</dt>
- * <dd>Thrown if the current environment does not support the specified
- * persistence type.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION)
- * .then(function() {
- * // Existing and future Auth states are now persisted in the current
- * // session only. Closing the window would clear any existing state even if
- * // a user forgets to sign out.
- * });
- * ```
- */
- setPersistence(persistence: firebase.auth.Auth.Persistence): Promise<void>;
- /**
- * Asynchronously signs in with the given credentials, and returns any available
- * additional user information, such as user name.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/account-exists-with-different-credential</dt>
- * <dd>Thrown if there already exists an account with the email address
- * asserted by the credential. Resolve this by calling
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} and then asking the
- * user to sign in using one of the returned providers. Once the user is
- * signed in, the original credential can be linked to the user with
- * {@link firebase.User.linkWithCredential}.</dd>
- * <dt>auth/invalid-credential</dt>
- * <dd>Thrown if the credential is malformed or has expired.</dd>
- * <dt>auth/operation-not-allowed</dt>
- * <dd>Thrown if the type of account corresponding to the credential
- * is not enabled. Enable the account type in the Firebase Console, under
- * the Auth tab.</dd>
- * <dt>auth/user-disabled</dt>
- * <dd>Thrown if the user corresponding to the given credential has been
- * disabled.</dd>
- * <dt>auth/user-not-found</dt>
- * <dd>Thrown if signing in with a credential from
- * {@link firebase.auth.EmailAuthProvider.credential} and there is no user
- * corresponding to the given email. </dd>
- * <dt>auth/wrong-password</dt>
- * <dd>Thrown if signing in with a credential from
- * {@link firebase.auth.EmailAuthProvider.credential} and the password is
- * invalid for the given email, or if the account corresponding to the email
- * does not have a password set.</dd>
- * <dt>auth/invalid-verification-code</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * code of the credential is not valid.</dd>
- * <dt>auth/invalid-verification-id</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * ID of the credential is not valid.</dd>
- * </dl>
- *
- * @deprecated
- * This method is deprecated. Use
- * {@link firebase.auth.Auth.signInWithCredential} instead.
- *
- * @example
- * ```javascript
- * firebase.auth().signInAndRetrieveDataWithCredential(credential)
- * .then(function(userCredential) {
- * console.log(userCredential.additionalUserInfo.username);
- * });
- * ```
- * @param credential The auth credential.
- */
- signInAndRetrieveDataWithCredential(
- credential: firebase.auth.AuthCredential
- ): Promise<firebase.auth.UserCredential>;
- /**
- * Asynchronously signs in as an anonymous user.
- *
- *
- * If there is already an anonymous user signed in, that user will be returned;
- * otherwise, a new anonymous user identity will be created and returned.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/operation-not-allowed</dt>
- * <dd>Thrown if anonymous accounts are not enabled. Enable anonymous accounts
- * in the Firebase Console, under the Auth tab.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * firebase.auth().signInAnonymously().catch(function(error) {
- * // Handle Errors here.
- * var errorCode = error.code;
- * var errorMessage = error.message;
- *
- * if (errorCode === 'auth/operation-not-allowed') {
- * alert('You must enable Anonymous auth in the Firebase Console.');
- * } else {
- * console.error(error);
- * }
- * });
- * ```
- */
- signInAnonymously(): Promise<firebase.auth.UserCredential>;
- /**
- * Asynchronously signs in with the given credentials.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/account-exists-with-different-credential</dt>
- * <dd>Thrown if there already exists an account with the email address
- * asserted by the credential. Resolve this by calling
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} and then asking the
- * user to sign in using one of the returned providers. Once the user is
- * signed in, the original credential can be linked to the user with
- * {@link firebase.User.linkWithCredential}.</dd>
- * <dt>auth/invalid-credential</dt>
- * <dd>Thrown if the credential is malformed or has expired.</dd>
- * <dt>auth/operation-not-allowed</dt>
- * <dd>Thrown if the type of account corresponding to the credential
- * is not enabled. Enable the account type in the Firebase Console, under
- * the Auth tab.</dd>
- * <dt>auth/user-disabled</dt>
- * <dd>Thrown if the user corresponding to the given credential has been
- * disabled.</dd>
- * <dt>auth/user-not-found</dt>
- * <dd>Thrown if signing in with a credential from
- * {@link firebase.auth.EmailAuthProvider.credential} and there is no user
- * corresponding to the given email. </dd>
- * <dt>auth/wrong-password</dt>
- * <dd>Thrown if signing in with a credential from
- * {@link firebase.auth.EmailAuthProvider.credential} and the password is
- * invalid for the given email, or if the account corresponding to the email
- * does not have a password set.</dd>
- * <dt>auth/invalid-verification-code</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * code of the credential is not valid.</dd>
- * <dt>auth/invalid-verification-id</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * ID of the credential is not valid.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * firebase.auth().signInWithCredential(credential).catch(function(error) {
- * // Handle Errors here.
- * var errorCode = error.code;
- * var errorMessage = error.message;
- * // The email of the user's account used.
- * var email = error.email;
- * // The firebase.auth.AuthCredential type that was used.
- * var credential = error.credential;
- * if (errorCode === 'auth/account-exists-with-different-credential') {
- * alert('Email already associated with another account.');
- * // Handle account linking here, if using.
- * } else {
- * console.error(error);
- * }
- * });
- * ```
- *
- * @param credential The auth credential.
- */
- signInWithCredential(
- credential: firebase.auth.AuthCredential
- ): Promise<firebase.auth.UserCredential>;
- /**
- * Asynchronously signs in using a custom token.
- *
- * Custom tokens are used to integrate Firebase Auth with existing auth systems,
- * and must be generated by the auth backend.
- *
- * Fails with an error if the token is invalid, expired, or not accepted by the
- * Firebase Auth service.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/custom-token-mismatch</dt>
- * <dd>Thrown if the custom token is for a different Firebase App.</dd>
- * <dt>auth/invalid-custom-token</dt>
- * <dd>Thrown if the custom token format is incorrect.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * firebase.auth().signInWithCustomToken(token).catch(function(error) {
- * // Handle Errors here.
- * var errorCode = error.code;
- * var errorMessage = error.message;
- * if (errorCode === 'auth/invalid-custom-token') {
- * alert('The token you provided is not valid.');
- * } else {
- * console.error(error);
- * }
- * });
- * ```
- *
- * @param token The custom token to sign in with.
- */
- signInWithCustomToken(token: string): Promise<firebase.auth.UserCredential>;
- /**
- * Asynchronously signs in using an email and password.
- *
- * Fails with an error if the email address and password do not match.
- *
- * Note: The user's password is NOT the password used to access the user's email
- * account. The email address serves as a unique identifier for the user, and
- * the password is used to access the user's account in your Firebase project.
- *
- * See also: {@link firebase.auth.Auth.createUserWithEmailAndPassword}.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/invalid-email</dt>
- * <dd>Thrown if the email address is not valid.</dd>
- * <dt>auth/user-disabled</dt>
- * <dd>Thrown if the user corresponding to the given email has been
- * disabled.</dd>
- * <dt>auth/user-not-found</dt>
- * <dd>Thrown if there is no user corresponding to the given email.</dd>
- * <dt>auth/wrong-password</dt>
- * <dd>Thrown if the password is invalid for the given email, or the account
- * corresponding to the email does not have a password set.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * firebase.auth().signInWithEmailAndPassword(email, password)
- * .catch(function(error) {
- * // Handle Errors here.
- * var errorCode = error.code;
- * var errorMessage = error.message;
- * if (errorCode === 'auth/wrong-password') {
- * alert('Wrong password.');
- * } else {
- * alert(errorMessage);
- * }
- * console.log(error);
- * });
- * ```
- *
- * @param email The users email address.
- * @param password The users password.
- */
- signInWithEmailAndPassword(
- email: string,
- password: string
- ): Promise<firebase.auth.UserCredential>;
- /**
- * Asynchronously signs in using a phone number. This method sends a code via
- * SMS to the given phone number, and returns a
- * {@link firebase.auth.ConfirmationResult}. After the user provides the code
- * sent to their phone, call {@link firebase.auth.ConfirmationResult.confirm}
- * with the code to sign the user in.
- *
- * For abuse prevention, this method also requires a
- * {@link firebase.auth.ApplicationVerifier}. The Firebase Auth SDK includes
- * a reCAPTCHA-based implementation, {@link firebase.auth.RecaptchaVerifier}.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/captcha-check-failed</dt>
- * <dd>Thrown if the reCAPTCHA response token was invalid, expired, or if
- * this method was called from a non-whitelisted domain.</dd>
- * <dt>auth/invalid-phone-number</dt>
- * <dd>Thrown if the phone number has an invalid format.</dd>
- * <dt>auth/missing-phone-number</dt>
- * <dd>Thrown if the phone number is missing.</dd>
- * <dt>auth/quota-exceeded</dt>
- * <dd>Thrown if the SMS quota for the Firebase project has been exceeded.</dd>
- * <dt>auth/user-disabled</dt>
- * <dd>Thrown if the user corresponding to the given phone number has been
- * disabled.</dd>
- * <dt>auth/operation-not-allowed</dt>
- * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go
- * to the Firebase Console for your project, in the Auth section and the
- * <strong>Sign in Method</strong> tab and configure the provider.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * // 'recaptcha-container' is the ID of an element in the DOM.
- * var applicationVerifier = new firebase.auth.RecaptchaVerifier(
- * 'recaptcha-container');
- * firebase.auth().signInWithPhoneNumber(phoneNumber, applicationVerifier)
- * .then(function(confirmationResult) {
- * var verificationCode = window.prompt('Please enter the verification ' +
- * 'code that was sent to your mobile device.');
- * return confirmationResult.confirm(verificationCode);
- * })
- * .catch(function(error) {
- * // Handle Errors here.
- * });
- * ```
- *
- * @param phoneNumber The user's phone number in E.164 format (e.g.
- * +16505550101).
- * @param applicationVerifier
- */
- signInWithPhoneNumber(
- phoneNumber: string,
- applicationVerifier: firebase.auth.ApplicationVerifier
- ): Promise<firebase.auth.ConfirmationResult>;
- /**
- * Asynchronously signs in using an email and sign-in email link. If no link
- * is passed, the link is inferred from the current URL.
- *
- * Fails with an error if the email address is invalid or OTP in email link
- * expires.
- *
- * Note: Confirm the link is a sign-in email link before calling this method
- * {@link firebase.auth.Auth.isSignInWithEmailLink}.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/expired-action-code</dt>
- * <dd>Thrown if OTP in email link expires.</dd>
- * <dt>auth/invalid-email</dt>
- * <dd>Thrown if the email address is not valid.</dd>
- * <dt>auth/user-disabled</dt>
- * <dd>Thrown if the user corresponding to the given email has been
- * disabled.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * firebase.auth().signInWithEmailLink(email, emailLink)
- * .catch(function(error) {
- * // Some error occurred, you can inspect the code: error.code
- * // Common errors could be invalid email and invalid or expired OTPs.
- * });
- * ```
- *
- * @param email The email account to sign in with.
- * @param emailLink The optional link which contains the OTP needed
- * to complete the sign in with email link. If not specified, the current
- * URL is used instead.
- */
- signInWithEmailLink(
- email: string,
- emailLink?: string
- ): Promise<firebase.auth.UserCredential>;
- /**
- * Authenticates a Firebase client using a popup-based OAuth authentication
- * flow.
- *
- * If succeeds, returns the signed in user along with the provider's credential.
- * If sign in was unsuccessful, returns an error object containing additional
- * information about the error.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/account-exists-with-different-credential</dt>
- * <dd>Thrown if there already exists an account with the email address
- * asserted by the credential. Resolve this by calling
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} with the error.email
- * and then asking the user to sign in using one of the returned providers.
- * Once the user is signed in, the original credential retrieved from the
- * error.credential can be linked to the user with
- * {@link firebase.User.linkWithCredential} to prevent the user from signing
- * in again to the original provider via popup or redirect. If you are using
- * redirects for sign in, save the credential in session storage and then
- * retrieve on redirect and repopulate the credential using for example
- * {@link firebase.auth.GoogleAuthProvider.credential} depending on the
- * credential provider id and complete the link.</dd>
- * <dt>auth/auth-domain-config-required</dt>
- * <dd>Thrown if authDomain configuration is not provided when calling
- * firebase.initializeApp(). Check Firebase Console for instructions on
- * determining and passing that field.</dd>
- * <dt>auth/cancelled-popup-request</dt>
- * <dd>Thrown if successive popup operations are triggered. Only one popup
- * request is allowed at one time. All the popups would fail with this error
- * except for the last one.</dd>
- * <dt>auth/operation-not-allowed</dt>
- * <dd>Thrown if the type of account corresponding to the credential
- * is not enabled. Enable the account type in the Firebase Console, under
- * the Auth tab.</dd>
- * <dt>auth/operation-not-supported-in-this-environment</dt>
- * <dd>Thrown if this operation is not supported in the environment your
- * application is running on. "location.protocol" must be http or https.
- * </dd>
- * <dt>auth/popup-blocked</dt>
- * <dd>Thrown if the popup was blocked by the browser, typically when this
- * operation is triggered outside of a click handler.</dd>
- * <dt>auth/popup-closed-by-user</dt>
- * <dd>Thrown if the popup window is closed by the user without completing the
- * sign in to the provider.</dd>
- * <dt>auth/unauthorized-domain</dt>
- * <dd>Thrown if the app domain is not authorized for OAuth operations for your
- * Firebase project. Edit the list of authorized domains from the Firebase
- * console.</dd>
- * </dl>
- *
- * This method does not work in a Node.js environment.
- *
- * @example
- * ```javascript
- * // Creates the provider object.
- * var provider = new firebase.auth.FacebookAuthProvider();
- * // You can add additional scopes to the provider:
- * provider.addScope('email');
- * provider.addScope('user_friends');
- * // Sign in with popup:
- * auth.signInWithPopup(provider).then(function(result) {
- * // The firebase.User instance:
- * var user = result.user;
- * // The Facebook firebase.auth.AuthCredential containing the Facebook
- * // access token:
- * var credential = result.credential;
- * }, function(error) {
- * // The provider's account email, can be used in case of
- * // auth/account-exists-with-different-credential to fetch the providers
- * // linked to the email:
- * var email = error.email;
- * // The provider's credential:
- * var credential = error.credential;
- * // In case of auth/account-exists-with-different-credential error,
- * // you can fetch the providers using this:
- * if (error.code === 'auth/account-exists-with-different-credential') {
- * auth.fetchSignInMethodsForEmail(email).then(function(providers) {
- * // The returned 'providers' is a list of the available providers
- * // linked to the email address. Please refer to the guide for a more
- * // complete explanation on how to recover from this error.
- * });
- * }
- * });
- * ```
- *
- * @param provider The provider to authenticate.
- * The provider has to be an OAuth provider. Non-OAuth providers like {@link
- * firebase.auth.EmailAuthProvider} will throw an error.
- */
- signInWithPopup(
- provider: firebase.auth.AuthProvider
- ): Promise<firebase.auth.UserCredential>;
- /**
- * Authenticates a Firebase client using a full-page redirect flow. To handle
- * the results and errors for this operation, refer to {@link
- * firebase.auth.Auth.getRedirectResult}.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/auth-domain-config-required</dt>
- * <dd>Thrown if authDomain configuration is not provided when calling
- * firebase.initializeApp(). Check Firebase Console for instructions on
- * determining and passing that field.</dd>
- * <dt>auth/operation-not-supported-in-this-environment</dt>
- * <dd>Thrown if this operation is not supported in the environment your
- * application is running on. "location.protocol" must be http or https.
- * </dd>
- * <dt>auth/unauthorized-domain</dt>
- * <dd>Thrown if the app domain is not authorized for OAuth operations for your
- * Firebase project. Edit the list of authorized domains from the Firebase
- * console.</dd>
- * </dl>
- *
- * This method does not work in a Node.js environment.
- *
- * @param provider The provider to authenticate.
- * The provider has to be an OAuth provider. Non-OAuth providers like {@link
- * firebase.auth.EmailAuthProvider} will throw an error.
- */
- signInWithRedirect(provider: firebase.auth.AuthProvider): Promise<void>;
- /**
- * Signs out the current user.
- */
- signOut(): Promise<void>;
- /**
- * The current Auth instance's tenant ID. This is a readable/writable
- * property. When you set the tenant ID of an Auth instance, all future
- * sign-in/sign-up operations will pass this tenant ID and sign in or
- * sign up users to the specified tenant project.
- * When set to null, users are signed in to the parent project. By default,
- * this is set to null.
- *
- * @example
- * ```javascript
- * // Set the tenant ID on Auth instance.
- * firebase.auth().tenantId = ‘TENANT_PROJECT_ID’;
- *
- * // All future sign-in request now include tenant ID.
- * firebase.auth().signInWithEmailAndPassword(email, password)
- * .then(function(result) {
- * // result.user.tenantId should be ‘TENANT_PROJECT_ID’.
- * }).catch(function(error) {
- * // Handle error.
- * });
- * ```
- */
- tenantId: string | null;
- /**
- * Asynchronously sets the provided user as `currentUser` on the current Auth
- * instance. A new instance copy of the user provided will be made and set as
- * `currentUser`.
- *
- * This will trigger {@link firebase.auth.Auth.onAuthStateChanged} and
- * {@link firebase.auth.Auth.onIdTokenChanged} listeners like other sign in
- * methods.
- *
- * The operation fails with an error if the user to be updated belongs to a
- * different Firebase project.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/invalid-user-token</dt>
- * <dd>Thrown if the user to be updated belongs to a diffent Firebase
- * project.</dd>
- * <dt>auth/user-token-expired</dt>
- * <dd>Thrown if the token of the user to be updated is expired.</dd>
- * <dt>auth/null-user</dt>
- * <dd>Thrown if the user to be updated is null.</dd>
- * <dt>auth/tenant-id-mismatch</dt>
- * <dd>Thrown if the provided user's tenant ID does not match the
- * underlying Auth instance's configured tenant ID</dd>
- * </dl>
- */
- updateCurrentUser(user: firebase.User | null): Promise<void>;
- /**
- * Sets the current language to the default device/browser preference.
- */
- useDeviceLanguage(): void;
- /**
- * Modify this Auth instance to communicate with the Firebase Auth emulator. This must be
- * called synchronously immediately following the first call to `firebase.auth()`. Do not use
- * with production credentials as emulator traffic is not encrypted.
- *
- * @param url The URL at which the emulator is running (eg, 'http://localhost:9099')
- */
- useEmulator(url: string): void;
- /**
- * Checks a password reset code sent to the user by email or other out-of-band
- * mechanism.
- *
- * Returns the user's email address if valid.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/expired-action-code</dt>
- * <dd>Thrown if the password reset code has expired.</dd>
- * <dt>auth/invalid-action-code</dt>
- * <dd>Thrown if the password reset code is invalid. This can happen if the code
- * is malformed or has already been used.</dd>
- * <dt>auth/user-disabled</dt>
- * <dd>Thrown if the user corresponding to the given password reset code has
- * been disabled.</dd>
- * <dt>auth/user-not-found</dt>
- * <dd>Thrown if there is no user corresponding to the password reset code. This
- * may have happened if the user was deleted between when the code was
- * issued and when this method was called.</dd>
- * </dl>
- *
- * @param code A verification code sent to the user.
- */
- verifyPasswordResetCode(code: string): Promise<string>;
- }
- /**
- * Interface that represents the credentials returned by an auth provider.
- * Implementations specify the details about each auth provider's credential
- * requirements.
- *
- */
- abstract class AuthCredential {
- /**
- * The authentication provider ID for the credential.
- * For example, 'facebook.com', or 'google.com'.
- */
- providerId: string;
- /**
- * The authentication sign in method for the credential.
- * For example, 'password', or 'emailLink. This corresponds to the sign-in
- * method identifier as returned in
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}.
- */
- signInMethod: string;
- /**
- * Returns a JSON-serializable representation of this object.
- */
- toJSON(): Object;
- /**
- * Static method to deserialize a JSON representation of an object into an
- * {@link firebase.auth.AuthCredential}. Input can be either Object or the
- * stringified representation of the object. When string is provided,
- * JSON.parse would be called first. If the JSON input does not represent
- * an`AuthCredential`, null is returned.
- * @param json The plain object representation of an
- * AuthCredential.
- */
- static fromJSON(json: Object | string): AuthCredential | null;
- }
- /**
- * Interface that represents the OAuth credentials returned by an OAuth
- * provider. Implementations specify the details about each auth provider's
- * credential requirements.
- *
- */
- class OAuthCredential extends AuthCredential {
- private constructor();
- /**
- * The OAuth ID token associated with the credential if it belongs to an
- * OIDC provider, such as `google.com`.
- */
- idToken?: string;
- /**
- * The OAuth access token associated with the credential if it belongs to
- * an OAuth provider, such as `facebook.com`, `twitter.com`, etc.
- */
- accessToken?: string;
- /**
- * The OAuth access token secret associated with the credential if it
- * belongs to an OAuth 1.0 provider, such as `twitter.com`.
- */
- secret?: string;
- }
- /**
- * Interface that represents an auth provider.
- */
- interface AuthProvider {
- providerId: string;
- }
- /**
- * A result from a phone number sign-in, link, or reauthenticate call.
- */
- interface ConfirmationResult {
- /**
- * Finishes a phone number sign-in, link, or reauthentication, given the code
- * that was sent to the user's mobile device.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/invalid-verification-code</dt>
- * <dd>Thrown if the verification code is not valid.</dd>
- * <dt>auth/missing-verification-code</dt>
- * <dd>Thrown if the verification code is missing.</dd>
- * </dl>
- */
- confirm(verificationCode: string): Promise<firebase.auth.UserCredential>;
- /**
- * The phone number authentication operation's verification ID. This can be used
- * along with the verification code to initialize a phone auth credential.
- */
- verificationId: string;
- }
- /**
- * Email and password auth provider implementation.
- *
- * To authenticate: {@link firebase.auth.Auth.createUserWithEmailAndPassword}
- * and {@link firebase.auth.Auth.signInWithEmailAndPassword}.
- */
- class EmailAuthProvider extends EmailAuthProvider_Instance {
- static PROVIDER_ID: string;
- /**
- * This corresponds to the sign-in method identifier as returned in
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}.
- */
- static EMAIL_PASSWORD_SIGN_IN_METHOD: string;
- /**
- * This corresponds to the sign-in method identifier as returned in
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}.
- */
- static EMAIL_LINK_SIGN_IN_METHOD: string;
- /**
- * @example
- * ```javascript
- * var cred = firebase.auth.EmailAuthProvider.credential(
- * email,
- * password
- * );
- * ```
- *
- * @param email Email address.
- * @param password User account password.
- * @return The auth provider credential.
- */
- static credential(
- email: string,
- password: string
- ): firebase.auth.AuthCredential;
- /**
- * Initialize an `EmailAuthProvider` credential using an email and an email link
- * after a sign in with email link operation.
- *
- * @example
- * ```javascript
- * var cred = firebase.auth.EmailAuthProvider.credentialWithLink(
- * email,
- * emailLink
- * );
- * ```
- *
- * @param email Email address.
- * @param emailLink Sign-in email link.
- * @return The auth provider credential.
- */
- static credentialWithLink(
- email: string,
- emailLink: string
- ): firebase.auth.AuthCredential;
- }
- /**
- * @hidden
- */
- class EmailAuthProvider_Instance implements firebase.auth.AuthProvider {
- providerId: string;
- }
- /**
- * An authentication error.
- * For method-specific error codes, refer to the specific methods in the
- * documentation. For common error codes, check the reference below. Use{@link
- * firebase.auth.Error.code} to get the specific error code. For a detailed
- * message, use {@link firebase.auth.Error.message}.
- * Errors with the code <strong>auth/account-exists-with-different-credential
- * </strong> will have the additional fields <strong>email</strong> and <strong>
- * credential</strong> which are needed to provide a way to resolve these
- * specific errors. Refer to {@link firebase.auth.Auth.signInWithPopup} for more
- * information.
- *
- * <h4>Common Error Codes</h4>
- * <dl>
- * <dt>auth/app-deleted</dt>
- * <dd>Thrown if the instance of FirebaseApp has been deleted.</dd>
- * <dt>auth/app-not-authorized</dt>
- * <dd>Thrown if the app identified by the domain where it's hosted, is not
- * authorized to use Firebase Authentication with the provided API key.
- * Review your key configuration in the Google API console.</dd>
- * <dt>auth/argument-error</dt>
- * <dd>Thrown if a method is called with incorrect arguments.</dd>
- * <dt>auth/invalid-api-key</dt>
- * <dd>Thrown if the provided API key is invalid. Please check that you have
- * copied it correctly from the Firebase Console.</dd>
- * <dt>auth/invalid-user-token</dt>
- * <dd>Thrown if the user's credential is no longer valid. The user must sign in
- * again.</dd>
- * <dt>auth/invalid-tenant-id</dt>
- * <dd>Thrown if the tenant ID provided is invalid.</dd>
- * <dt>auth/network-request-failed</dt>
- * <dd>Thrown if a network error (such as timeout, interrupted connection or
- * unreachable host) has occurred.</dd>
- * <dt>auth/operation-not-allowed</dt>
- * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go
- * to the Firebase Console for your project, in the Auth section and the
- * <strong>Sign in Method</strong> tab and configure the provider.</dd>
- * <dt>auth/requires-recent-login</dt>
- * <dd>Thrown if the user's last sign-in time does not meet the security
- * threshold. Use {@link firebase.User.reauthenticateWithCredential} to
- * resolve. This does not apply if the user is anonymous.</dd>
- * <dt>auth/too-many-requests</dt>
- * <dd>Thrown if requests are blocked from a device due to unusual activity.
- * Trying again after some delay would unblock.</dd>
- * <dt>auth/unauthorized-domain</dt>
- * <dd>Thrown if the app domain is not authorized for OAuth operations for your
- * Firebase project. Edit the list of authorized domains from the Firebase
- * console.</dd>
- * <dt>auth/user-disabled</dt>
- * <dd>Thrown if the user account has been disabled by an administrator.
- * Accounts can be enabled or disabled in the Firebase Console, the Auth
- * section and Users subsection.</dd>
- * <dt>auth/user-token-expired</dt>
- * <dd>Thrown if the user's credential has expired. This could also be thrown if
- * a user has been deleted. Prompting the user to sign in again should
- * resolve this for either case.</dd>
- * <dt>auth/web-storage-unsupported</dt>
- * <dd>Thrown if the browser does not support web storage or if the user
- * disables them.</dd>
- * </dl>
- */
- interface Error {
- name: string;
- /**
- * Unique error code.
- */
- code: string;
- /**
- * Complete error message.
- */
- message: string;
- }
- /**
- * The account conflict error.
- * Refer to {@link firebase.auth.Auth.signInWithPopup} for more information.
- *
- * <h4>Common Error Codes</h4>
- * <dl>
- * <dt>auth/account-exists-with-different-credential</dt>
- * <dd>Thrown if there already exists an account with the email address
- * asserted by the credential. Resolve this by calling
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} with the error.email
- * and then asking the user to sign in using one of the returned providers.
- * Once the user is signed in, the original credential retrieved from the
- * error.credential can be linked to the user with
- * {@link firebase.User.linkWithCredential} to prevent the user from signing
- * in again to the original provider via popup or redirect. If you are using
- * redirects for sign in, save the credential in session storage and then
- * retrieve on redirect and repopulate the credential using for example
- * {@link firebase.auth.GoogleAuthProvider.credential} depending on the
- * credential provider id and complete the link.</dd>
- * <dt>auth/credential-already-in-use</dt>
- * <dd>Thrown if the account corresponding to the credential already exists
- * among your users, or is already linked to a Firebase User.
- * For example, this error could be thrown if you are upgrading an anonymous
- * user to a Google user by linking a Google credential to it and the Google
- * credential used is already associated with an existing Firebase Google
- * user.
- * The fields <code>error.email</code>, <code>error.phoneNumber</code>, and
- * <code>error.credential</code> ({@link firebase.auth.AuthCredential})
- * may be provided, depending on the type of credential. You can recover
- * from this error by signing in with <code>error.credential</code> directly
- * via {@link firebase.auth.Auth.signInWithCredential}.</dd>
- * <dt>auth/email-already-in-use</dt>
- * <dd>Thrown if the email corresponding to the credential already exists
- * among your users. When thrown while linking a credential to an existing
- * user, an <code>error.email</code> and <code>error.credential</code>
- * ({@link firebase.auth.AuthCredential}) fields are also provided.
- * You have to link the credential to the existing user with that email if
- * you wish to continue signing in with that credential. To do so, call
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to
- * <code>error.email</code> via one of the providers returned and then
- * {@link firebase.User.linkWithCredential} the original credential to that
- * newly signed in user.</dd>
- * </dl>
- */
- interface AuthError extends firebase.auth.Error {
- /**
- * The {@link firebase.auth.AuthCredential} that can be used to resolve the
- * error.
- */
- credential?: firebase.auth.AuthCredential;
- /**
- * The email of the user's account used for sign-in/linking.
- */
- email?: string;
- /**
- * The phone number of the user's account used for sign-in/linking.
- */
- phoneNumber?: string;
- /**
- * The tenant ID being used for sign-in/linking. If you use
- * {@link firebase.auth.Auth.signInWithRedirect} to sign in, you have to
- * set the tenant ID on Auth instanace again as the tenant ID is not
- * persisted after redirection.
- */
- tenantId?: string;
- }
- /**
- * The error thrown when the user needs to provide a second factor to sign in
- * successfully.
- * The error code for this error is <code>auth/multi-factor-auth-required</code>.
- * This error provides a {@link firebase.auth.MultiFactorResolver} object,
- * which you can use to get the second sign-in factor from the user.
- *
- * @example
- * ```javascript
- * firebase.auth().signInWithEmailAndPassword()
- * .then(function(result) {
- * // User signed in. No 2nd factor challenge is needed.
- * })
- * .catch(function(error) {
- * if (error.code == 'auth/multi-factor-auth-required') {
- * var resolver = error.resolver;
- * var multiFactorHints = resolver.hints;
- * } else {
- * // Handle other errors.
- * }
- * });
- *
- * resolver.resolveSignIn(multiFactorAssertion)
- * .then(function(userCredential) {
- * // User signed in.
- * });
- * ```
- */
- interface MultiFactorError extends firebase.auth.AuthError {
- /**
- * The multi-factor resolver to complete second factor sign-in.
- */
- resolver: firebase.auth.MultiFactorResolver;
- }
- /**
- * Facebook auth provider.
- *
- * @example
- * ```javascript
- * // Sign in using a redirect.
- * firebase.auth().getRedirectResult().then(function(result) {
- * if (result.credential) {
- * // This gives you a Google Access Token.
- * var token = result.credential.accessToken;
- * }
- * var user = result.user;
- * })
- * // Start a sign in process for an unauthenticated user.
- * var provider = new firebase.auth.FacebookAuthProvider();
- * provider.addScope('user_birthday');
- * firebase.auth().signInWithRedirect(provider);
- * ```
- *
- * @example
- * ```javascript
- * // Sign in using a popup.
- * var provider = new firebase.auth.FacebookAuthProvider();
- * provider.addScope('user_birthday');
- * firebase.auth().signInWithPopup(provider).then(function(result) {
- * // This gives you a Facebook Access Token.
- * var token = result.credential.accessToken;
- * // The signed-in user info.
- * var user = result.user;
- * });
- * ```
- *
- * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state
- * changes.
- */
- class FacebookAuthProvider extends FacebookAuthProvider_Instance {
- static PROVIDER_ID: string;
- /**
- * This corresponds to the sign-in method identifier as returned in
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}.
- */
- static FACEBOOK_SIGN_IN_METHOD: string;
- /**
- * @example
- * ```javascript
- * var cred = firebase.auth.FacebookAuthProvider.credential(
- * // `event` from the Facebook auth.authResponseChange callback.
- * event.authResponse.accessToken
- * );
- * ```
- *
- * @param token Facebook access token.
- */
- static credential(token: string): firebase.auth.OAuthCredential;
- }
- /**
- * @hidden
- */
- class FacebookAuthProvider_Instance implements firebase.auth.AuthProvider {
- /**
- * @param scope Facebook OAuth scope.
- * @return The provider instance itself.
- */
- addScope(scope: string): firebase.auth.AuthProvider;
- providerId: string;
- /**
- * Sets the OAuth custom parameters to pass in a Facebook OAuth request for
- * popup and redirect sign-in operations.
- * Valid parameters include 'auth_type', 'display' and 'locale'.
- * For a detailed list, check the
- * {@link https://goo.gl/pve4fo Facebook}
- * documentation.
- * Reserved required OAuth 2.0 parameters such as 'client_id', 'redirect_uri',
- * 'scope', 'response_type' and 'state' are not allowed and will be ignored.
- * @param customOAuthParameters The custom OAuth parameters to pass
- * in the OAuth request.
- * @return The provider instance itself.
- */
- setCustomParameters(
- customOAuthParameters: Object
- ): firebase.auth.AuthProvider;
- }
- /**
- * GitHub auth provider.
- *
- * GitHub requires an OAuth 2.0 redirect, so you can either handle the redirect
- * directly, or use the signInWithPopup handler:
- *
- * @example
- * ```javascript
- * // Using a redirect.
- * firebase.auth().getRedirectResult().then(function(result) {
- * if (result.credential) {
- * // This gives you a GitHub Access Token.
- * var token = result.credential.accessToken;
- * }
- * var user = result.user;
- * }).catch(function(error) {
- * // Handle Errors here.
- * var errorCode = error.code;
- * var errorMessage = error.message;
- * // The email of the user's account used.
- * var email = error.email;
- * // The firebase.auth.AuthCredential type that was used.
- * var credential = error.credential;
- * if (errorCode === 'auth/account-exists-with-different-credential') {
- * alert('You have signed up with a different provider for that email.');
- * // Handle linking here if your app allows it.
- * } else {
- * console.error(error);
- * }
- * });
- *
- * // Start a sign in process for an unauthenticated user.
- * var provider = new firebase.auth.GithubAuthProvider();
- * provider.addScope('repo');
- * firebase.auth().signInWithRedirect(provider);
- * ```
- *
- * @example
- * ```javascript
- * // With popup.
- * var provider = new firebase.auth.GithubAuthProvider();
- * provider.addScope('repo');
- * firebase.auth().signInWithPopup(provider).then(function(result) {
- * // This gives you a GitHub Access Token.
- * var token = result.credential.accessToken;
- * // The signed-in user info.
- * var user = result.user;
- * }).catch(function(error) {
- * // Handle Errors here.
- * var errorCode = error.code;
- * var errorMessage = error.message;
- * // The email of the user's account used.
- * var email = error.email;
- * // The firebase.auth.AuthCredential type that was used.
- * var credential = error.credential;
- * if (errorCode === 'auth/account-exists-with-different-credential') {
- * alert('You have signed up with a different provider for that email.');
- * // Handle linking here if your app allows it.
- * } else {
- * console.error(error);
- * }
- * });
- * ```
- *
- * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state
- * changes.
- */
- class GithubAuthProvider extends GithubAuthProvider_Instance {
- static PROVIDER_ID: string;
- /**
- * This corresponds to the sign-in method identifier as returned in
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}.
- */
- static GITHUB_SIGN_IN_METHOD: string;
- /**
- * @example
- * ```javascript
- * var cred = firebase.auth.GithubAuthProvider.credential(
- * // `event` from the Github auth.authResponseChange callback.
- * event.authResponse.accessToken
- * );
- * ```
- *
- * @param token Github access token.
- * @return {!firebase.auth.OAuthCredential} The auth provider credential.
- */
- static credential(token: string): firebase.auth.OAuthCredential;
- }
- /**
- * @hidden
- */
- class GithubAuthProvider_Instance implements firebase.auth.AuthProvider {
- /**
- * @param scope Github OAuth scope.
- * @return The provider instance itself.
- */
- addScope(scope: string): firebase.auth.AuthProvider;
- providerId: string;
- /**
- * Sets the OAuth custom parameters to pass in a GitHub OAuth request for popup
- * and redirect sign-in operations.
- * Valid parameters include 'allow_signup'.
- * For a detailed list, check the
- * {@link https://developer.github.com/v3/oauth/ GitHub} documentation.
- * Reserved required OAuth 2.0 parameters such as 'client_id', 'redirect_uri',
- * 'scope', 'response_type' and 'state' are not allowed and will be ignored.
- * @param customOAuthParameters The custom OAuth parameters to pass
- * in the OAuth request.
- * @return The provider instance itself.
- */
- setCustomParameters(
- customOAuthParameters: Object
- ): firebase.auth.AuthProvider;
- }
- /**
- * Google auth provider.
- *
- * @example
- * ```javascript
- * // Using a redirect.
- * firebase.auth().getRedirectResult().then(function(result) {
- * if (result.credential) {
- * // This gives you a Google Access Token.
- * var token = result.credential.accessToken;
- * }
- * var user = result.user;
- * });
- *
- * // Start a sign in process for an unauthenticated user.
- * var provider = new firebase.auth.GoogleAuthProvider();
- * provider.addScope('profile');
- * provider.addScope('email');
- * firebase.auth().signInWithRedirect(provider);
- * ```
- *
- * @example
- * ```javascript
- * // Using a popup.
- * var provider = new firebase.auth.GoogleAuthProvider();
- * provider.addScope('profile');
- * provider.addScope('email');
- * firebase.auth().signInWithPopup(provider).then(function(result) {
- * // This gives you a Google Access Token.
- * var token = result.credential.accessToken;
- * // The signed-in user info.
- * var user = result.user;
- * });
- * ```
- *
- * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state
- * changes.
- */
- class GoogleAuthProvider extends GoogleAuthProvider_Instance {
- static PROVIDER_ID: string;
- /**
- * This corresponds to the sign-in method identifier as returned in
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}.
- */
- static GOOGLE_SIGN_IN_METHOD: string;
- /**
- * Creates a credential for Google. At least one of ID token and access token
- * is required.
- *
- * @example
- * ```javascript
- * // \`googleUser\` from the onsuccess Google Sign In callback.
- * var credential = firebase.auth.GoogleAuthProvider.credential(
- googleUser.getAuthResponse().id_token);
- * firebase.auth().signInWithCredential(credential)
- * ```
- * @param idToken Google ID token.
- * @param accessToken Google access token.
- * @return The auth provider credential.
- */
- static credential(
- idToken?: string | null,
- accessToken?: string | null
- ): firebase.auth.OAuthCredential;
- }
- /**
- * @hidden
- */
- class GoogleAuthProvider_Instance implements firebase.auth.AuthProvider {
- /**
- * @param scope Google OAuth scope.
- * @return The provider instance itself.
- */
- addScope(scope: string): firebase.auth.AuthProvider;
- providerId: string;
- /**
- * Sets the OAuth custom parameters to pass in a Google OAuth request for popup
- * and redirect sign-in operations.
- * Valid parameters include 'hd', 'hl', 'include_granted_scopes', 'login_hint'
- * and 'prompt'.
- * For a detailed list, check the
- * {@link https://goo.gl/Xo01Jm Google}
- * documentation.
- * Reserved required OAuth 2.0 parameters such as 'client_id', 'redirect_uri',
- * 'scope', 'response_type' and 'state' are not allowed and will be ignored.
- * @param customOAuthParameters The custom OAuth parameters to pass
- * in the OAuth request.
- * @return The provider instance itself.
- */
- setCustomParameters(
- customOAuthParameters: Object
- ): firebase.auth.AuthProvider;
- }
- /**
- * Generic OAuth provider.
- *
- * @example
- * ```javascript
- * // Using a redirect.
- * firebase.auth().getRedirectResult().then(function(result) {
- * if (result.credential) {
- * // This gives you the OAuth Access Token for that provider.
- * var token = result.credential.accessToken;
- * }
- * var user = result.user;
- * });
- *
- * // Start a sign in process for an unauthenticated user.
- * var provider = new firebase.auth.OAuthProvider('google.com');
- * provider.addScope('profile');
- * provider.addScope('email');
- * firebase.auth().signInWithRedirect(provider);
- * ```
- * @example
- * ```javascript
- * // Using a popup.
- * var provider = new firebase.auth.OAuthProvider('google.com');
- * provider.addScope('profile');
- * provider.addScope('email');
- * firebase.auth().signInWithPopup(provider).then(function(result) {
- * // This gives you the OAuth Access Token for that provider.
- * var token = result.credential.accessToken;
- * // The signed-in user info.
- * var user = result.user;
- * });
- * ```
- *
- * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state
- * changes.
- * @param providerId The associated provider ID, such as `github.com`.
- */
- class OAuthProvider implements firebase.auth.AuthProvider {
- constructor(providerId: string);
- providerId: string;
- /**
- * @param scope Provider OAuth scope to add.
- */
- addScope(scope: string): firebase.auth.AuthProvider;
- /**
- * Creates a Firebase credential from a generic OAuth provider's access token or
- * ID token. The raw nonce is required when an ID token with a nonce field is
- * provided. The SHA-256 hash of the raw nonce must match the nonce field in
- * the ID token.
- *
- * @example
- * ```javascript
- * // `googleUser` from the onsuccess Google Sign In callback.
- * // Initialize a generate OAuth provider with a `google.com` providerId.
- * var provider = new firebase.auth.OAuthProvider('google.com');
- * var credential = provider.credential({
- * idToken: googleUser.getAuthResponse().id_token,
- * });
- * firebase.auth().signInWithCredential(credential)
- * ```
- *
- * @param optionsOrIdToken Either the options object containing
- * the ID token, access token and raw nonce or the ID token string.
- * @param accessToken The OAuth access token.
- */
- credential(
- optionsOrIdToken: firebase.auth.OAuthCredentialOptions | string | null,
- accessToken?: string
- ): firebase.auth.OAuthCredential;
- /**
- * Sets the OAuth custom parameters to pass in an OAuth request for popup
- * and redirect sign-in operations.
- * For a detailed list, check the
- * reserved required OAuth 2.0 parameters such as `client_id`, `redirect_uri`,
- * `scope`, `response_type` and `state` are not allowed and will be ignored.
- * @param customOAuthParameters The custom OAuth parameters to pass
- * in the OAuth request.
- */
- setCustomParameters(
- customOAuthParameters: Object
- ): firebase.auth.AuthProvider;
- }
- class SAMLAuthProvider implements firebase.auth.AuthProvider {
- constructor(providerId: string);
- providerId: string;
- }
- /**
- * Interface representing ID token result obtained from
- * {@link firebase.User.getIdTokenResult}. It contains the ID token JWT string
- * and other helper properties for getting different data associated with the
- * token as well as all the decoded payload claims.
- *
- * Note that these claims are not to be trusted as they are parsed client side.
- * Only server side verification can guarantee the integrity of the token
- * claims.
- */
- interface IdTokenResult {
- /**
- * The Firebase Auth ID token JWT string.
- */
- token: string;
- /**
- * The ID token expiration time formatted as a UTC string.
- */
- expirationTime: string;
- /**
- * The authentication time formatted as a UTC string. This is the time the
- * user authenticated (signed in) and not the time the token was refreshed.
- */
- authTime: string;
- /**
- * The ID token issued at time formatted as a UTC string.
- */
- issuedAtTime: string;
- /**
- * The sign-in provider through which the ID token was obtained (anonymous,
- * custom, phone, password, etc). Note, this does not map to provider IDs.
- */
- signInProvider: string | null;
- /**
- * The type of second factor associated with this session, provided the user
- * was multi-factor authenticated (eg. phone, etc).
- */
- signInSecondFactor: string | null;
- /**
- * The entire payload claims of the ID token including the standard reserved
- * claims as well as the custom claims.
- */
- claims: {
- [key: string]: any;
- };
- }
- /**
- * Defines the options for initializing an
- * {@link firebase.auth.OAuthCredential}. For ID tokens with nonce claim,
- * the raw nonce has to also be provided.
- */
- interface OAuthCredentialOptions {
- /**
- * The OAuth ID token used to initialize the OAuthCredential.
- */
- idToken?: string;
- /**
- * The OAuth access token used to initialize the OAuthCredential.
- */
- accessToken?: string;
- /**
- * The raw nonce associated with the ID token. It is required when an ID token
- * with a nonce field is provided. The SHA-256 hash of the raw nonce must match
- * the nonce field in the ID token.
- */
- rawNonce?: string;
- }
- /**
- * The base class for asserting ownership of a second factor. This is used to
- * facilitate enrollment of a second factor on an existing user
- * or sign-in of a user who already verified the first factor.
- *
- */
- abstract class MultiFactorAssertion {
- /**
- * The identifier of the second factor.
- */
- factorId: string;
- }
- /**
- * The class for asserting ownership of a phone second factor.
- */
- class PhoneMultiFactorAssertion extends firebase.auth.MultiFactorAssertion {
- private constructor();
- }
- /**
- * The class used to initialize {@link firebase.auth.PhoneMultiFactorAssertion}.
- */
- class PhoneMultiFactorGenerator {
- private constructor();
- /**
- * The identifier of the phone second factor: `phone`.
- */
- static FACTOR_ID: string;
- /**
- * Initializes the {@link firebase.auth.PhoneMultiFactorAssertion} to confirm ownership
- * of the phone second factor.
- */
- static assertion(
- phoneAuthCredential: firebase.auth.PhoneAuthCredential
- ): firebase.auth.PhoneMultiFactorAssertion;
- }
- /**
- * A structure containing the information of a second factor entity.
- */
- interface MultiFactorInfo {
- /**
- * The multi-factor enrollment ID.
- */
- uid: string;
- /**
- * The user friendly name of the current second factor.
- */
- displayName?: string | null;
- /**
- * The enrollment date of the second factor formatted as a UTC string.
- */
- enrollmentTime: string;
- /**
- * The identifier of the second factor.
- */
- factorId: string;
- }
- /**
- * The subclass of the MultiFactorInfo interface for phone number second factors.
- * The factorId of this second factor is
- * {@link firebase.auth.PhoneMultiFactorGenerator.FACTOR_ID}.
- */
- interface PhoneMultiFactorInfo extends firebase.auth.MultiFactorInfo {
- /**
- * The phone number associated with the current second factor.
- */
- phoneNumber: string;
- }
- /**
- * The information required to verify the ownership of a phone number. The
- * information that's required depends on whether you are doing single-factor
- * sign-in, multi-factor enrollment or multi-factor sign-in.
- */
- type PhoneInfoOptions =
- | firebase.auth.PhoneSingleFactorInfoOptions
- | firebase.auth.PhoneMultiFactorEnrollInfoOptions
- | firebase.auth.PhoneMultiFactorSignInInfoOptions;
- /**
- * The phone info options for single-factor sign-in. Only phone number is
- * required.
- */
- interface PhoneSingleFactorInfoOptions {
- phoneNumber: string;
- }
- /**
- * The phone info options for multi-factor enrollment. Phone number and
- * multi-factor session are required.
- */
- interface PhoneMultiFactorEnrollInfoOptions {
- phoneNumber: string;
- session: firebase.auth.MultiFactorSession;
- }
- /**
- * The phone info options for multi-factor sign-in. Either multi-factor hint or
- * multi-factor UID and multi-factor session are required.
- */
- interface PhoneMultiFactorSignInInfoOptions {
- multiFactorHint?: firebase.auth.MultiFactorInfo;
- multiFactorUid?: string;
- session: firebase.auth.MultiFactorSession;
- }
- /**
- * The class used to facilitate recovery from
- * {@link firebase.auth.MultiFactorError} when a user needs to provide a second
- * factor to sign in.
- *
- * @example
- * ```javascript
- * firebase.auth().signInWithEmailAndPassword()
- * .then(function(result) {
- * // User signed in. No 2nd factor challenge is needed.
- * })
- * .catch(function(error) {
- * if (error.code == 'auth/multi-factor-auth-required') {
- * var resolver = error.resolver;
- * // Show UI to let user select second factor.
- * var multiFactorHints = resolver.hints;
- * } else {
- * // Handle other errors.
- * }
- * });
- *
- * // The enrolled second factors that can be used to complete
- * // sign-in are returned in the `MultiFactorResolver.hints` list.
- * // UI needs to be presented to allow the user to select a second factor
- * // from that list.
- *
- * var selectedHint = // ; selected from multiFactorHints
- * var phoneAuthProvider = new firebase.auth.PhoneAuthProvider();
- * var phoneInfoOptions = {
- * multiFactorHint: selectedHint,
- * session: resolver.session
- * };
- * phoneAuthProvider.verifyPhoneNumber(
- * phoneInfoOptions,
- * appVerifier
- * ).then(function(verificationId) {
- * // store verificationID and show UI to let user enter verification code.
- * });
- *
- * // UI to enter verification code and continue.
- * // Continue button click handler
- * var phoneAuthCredential =
- * firebase.auth.PhoneAuthProvider.credential(verificationId, verificationCode);
- * var multiFactorAssertion =
- * firebase.auth.PhoneMultiFactorGenerator.assertion(phoneAuthCredential);
- * resolver.resolveSignIn(multiFactorAssertion)
- * .then(function(userCredential) {
- * // User signed in.
- * });
- * ```
- */
- class MultiFactorResolver {
- private constructor();
- /**
- * The Auth instance used to sign in with the first factor.
- */
- auth: firebase.auth.Auth;
- /**
- * The session identifier for the current sign-in flow, which can be used
- * to complete the second factor sign-in.
- */
- session: firebase.auth.MultiFactorSession;
- /**
- * The list of hints for the second factors needed to complete the sign-in
- * for the current session.
- */
- hints: firebase.auth.MultiFactorInfo[];
- /**
- * A helper function to help users complete sign in with a second factor
- * using an {@link firebase.auth.MultiFactorAssertion} confirming the user
- * successfully completed the second factor challenge.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/invalid-verification-code</dt>
- * <dd>Thrown if the verification code is not valid.</dd>
- * <dt>auth/missing-verification-code</dt>
- * <dd>Thrown if the verification code is missing.</dd>
- * <dt>auth/invalid-verification-id</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * ID of the credential is not valid.</dd>
- * <dt>auth/missing-verification-id</dt>
- * <dd>Thrown if the verification ID is missing.</dd>
- * <dt>auth/code-expired</dt>
- * <dd>Thrown if the verification code has expired.</dd>
- * <dt>auth/invalid-multi-factor-session</dt>
- * <dd>Thrown if the request does not contain a valid proof of first factor
- * successful sign-in.</dd>
- * <dt>auth/missing-multi-factor-session</dt>
- * <dd>Thrown if The request is missing proof of first factor successful
- * sign-in.</dd>
- * </dl>
- *
- * @param assertion The multi-factor assertion to resolve sign-in with.
- * @return The promise that resolves with the user credential object.
- */
- resolveSignIn(
- assertion: firebase.auth.MultiFactorAssertion
- ): Promise<firebase.auth.UserCredential>;
- }
- /**
- * The multi-factor session object used for enrolling a second factor on a
- * user or helping sign in an enrolled user with a second factor.
- */
- class MultiFactorSession {
- private constructor();
- }
- /**
- * Classes that represents the Phone Auth credentials returned by a
- * {@link firebase.auth.PhoneAuthProvider}.
- *
- */
- class PhoneAuthCredential extends AuthCredential {
- private constructor();
- }
- /**
- * Phone number auth provider.
- *
- * @example
- * ```javascript
- * // 'recaptcha-container' is the ID of an element in the DOM.
- * var applicationVerifier = new firebase.auth.RecaptchaVerifier(
- * 'recaptcha-container');
- * var provider = new firebase.auth.PhoneAuthProvider();
- * provider.verifyPhoneNumber('+16505550101', applicationVerifier)
- * .then(function(verificationId) {
- * var verificationCode = window.prompt('Please enter the verification ' +
- * 'code that was sent to your mobile device.');
- * return firebase.auth.PhoneAuthProvider.credential(verificationId,
- * verificationCode);
- * })
- * .then(function(phoneCredential) {
- * return firebase.auth().signInWithCredential(phoneCredential);
- * });
- * ```
- * @param auth The Firebase Auth instance in which
- * sign-ins should occur. Uses the default Auth instance if unspecified.
- */
- class PhoneAuthProvider extends PhoneAuthProvider_Instance {
- static PROVIDER_ID: string;
- /**
- * This corresponds to the sign-in method identifier as returned in
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}.
- */
- static PHONE_SIGN_IN_METHOD: string;
- /**
- * Creates a phone auth credential, given the verification ID from
- * {@link firebase.auth.PhoneAuthProvider.verifyPhoneNumber} and the code
- * that was sent to the user's mobile device.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/missing-verification-code</dt>
- * <dd>Thrown if the verification code is missing.</dd>
- * <dt>auth/missing-verification-id</dt>
- * <dd>Thrown if the verification ID is missing.</dd>
- * </dl>
- *
- * @param verificationId The verification ID returned from
- * {@link firebase.auth.PhoneAuthProvider.verifyPhoneNumber}.
- * @param verificationCode The verification code sent to the user's
- * mobile device.
- * @return The auth provider credential.
- */
- static credential(
- verificationId: string,
- verificationCode: string
- ): firebase.auth.AuthCredential;
- }
- /**
- * @hidden
- */
- class PhoneAuthProvider_Instance implements firebase.auth.AuthProvider {
- constructor(auth?: firebase.auth.Auth | null);
- providerId: string;
- /**
- * Starts a phone number authentication flow by sending a verification code to
- * the given phone number. Returns an ID that can be passed to
- * {@link firebase.auth.PhoneAuthProvider.credential} to identify this flow.
- *
- * For abuse prevention, this method also requires a
- * {@link firebase.auth.ApplicationVerifier}. The Firebase Auth SDK includes
- * a reCAPTCHA-based implementation, {@link firebase.auth.RecaptchaVerifier}.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/captcha-check-failed</dt>
- * <dd>Thrown if the reCAPTCHA response token was invalid, expired, or if
- * this method was called from a non-whitelisted domain.</dd>
- * <dt>auth/invalid-phone-number</dt>
- * <dd>Thrown if the phone number has an invalid format.</dd>
- * <dt>auth/missing-phone-number</dt>
- * <dd>Thrown if the phone number is missing.</dd>
- * <dt>auth/quota-exceeded</dt>
- * <dd>Thrown if the SMS quota for the Firebase project has been exceeded.</dd>
- * <dt>auth/user-disabled</dt>
- * <dd>Thrown if the user corresponding to the given phone number has been
- * disabled.</dd>
- * <dt>auth/maximum-second-factor-count-exceeded</dt>
- * <dd>Thrown if The maximum allowed number of second factors on a user
- * has been exceeded.</dd>
- * <dt>auth/second-factor-already-in-use</dt>
- * <dd>Thrown if the second factor is already enrolled on this account.</dd>
- * <dt>auth/unsupported-first-factor</dt>
- * <dd>Thrown if the first factor being used to sign in is not supported.</dd>
- * <dt>auth/unverified-email</dt>
- * <dd>Thrown if the email of the account is not verified.</dd>
- * </dl>
- *
- * @param phoneInfoOptions The user's {@link firebase.auth.PhoneInfoOptions}.
- * The phone number should be in E.164 format (e.g. +16505550101).
- * @param applicationVerifier
- * @return A Promise for the verification ID.
- */
- verifyPhoneNumber(
- phoneInfoOptions: firebase.auth.PhoneInfoOptions | string,
- applicationVerifier: firebase.auth.ApplicationVerifier
- ): Promise<string>;
- }
- /**
- * An {@link https://www.google.com/recaptcha/ reCAPTCHA}-based application
- * verifier.
- *
- * This class does not work in a Node.js environment.
- *
- * @param container The reCAPTCHA container parameter. This
- * has different meaning depending on whether the reCAPTCHA is hidden or
- * visible. For a visible reCAPTCHA the container must be empty. If a string
- * is used, it has to correspond to an element ID. The corresponding element
- * must also must be in the DOM at the time of initialization.
- * @param parameters The optional reCAPTCHA parameters. Check the
- * reCAPTCHA docs for a comprehensive list. All parameters are accepted
- * except for the sitekey. Firebase Auth backend provisions a reCAPTCHA for
- * each project and will configure this upon rendering. For an invisible
- * reCAPTCHA, a size key must have the value 'invisible'.
- * @param app The corresponding Firebase app. If none is
- * provided, the default Firebase App instance is used. A Firebase App
- * instance must be initialized with an API key, otherwise an error will be
- * thrown.
- */
- class RecaptchaVerifier extends RecaptchaVerifier_Instance {}
- /**
- * @hidden
- */
- class RecaptchaVerifier_Instance
- implements firebase.auth.ApplicationVerifier
- {
- constructor(
- container: any | string,
- parameters?: Object | null,
- app?: firebase.app.App | null
- );
- /**
- * Clears the reCAPTCHA widget from the page and destroys the current instance.
- */
- clear(): void;
- /**
- * Renders the reCAPTCHA widget on the page.
- * @return A Promise that resolves with the
- * reCAPTCHA widget ID.
- */
- render(): Promise<number>;
- /**
- * The application verifier type. For a reCAPTCHA verifier, this is 'recaptcha'.
- */
- type: string;
- /**
- * Waits for the user to solve the reCAPTCHA and resolves with the reCAPTCHA
- * token.
- * @return A Promise for the reCAPTCHA token.
- */
- verify(): Promise<string>;
- }
- /**
- * Twitter auth provider.
- *
- * @example
- * ```javascript
- * // Using a redirect.
- * firebase.auth().getRedirectResult().then(function(result) {
- * if (result.credential) {
- * // For accessing the Twitter API.
- * var token = result.credential.accessToken;
- * var secret = result.credential.secret;
- * }
- * var user = result.user;
- * });
- *
- * // Start a sign in process for an unauthenticated user.
- * var provider = new firebase.auth.TwitterAuthProvider();
- * firebase.auth().signInWithRedirect(provider);
- * ```
- * @example
- * ```javascript
- * // Using a popup.
- * var provider = new firebase.auth.TwitterAuthProvider();
- * firebase.auth().signInWithPopup(provider).then(function(result) {
- * // For accessing the Twitter API.
- * var token = result.credential.accessToken;
- * var secret = result.credential.secret;
- * // The signed-in user info.
- * var user = result.user;
- * });
- * ```
- *
- * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state
- * changes.
- */
- class TwitterAuthProvider extends TwitterAuthProvider_Instance {
- static PROVIDER_ID: string;
- /**
- * This corresponds to the sign-in method identifier as returned in
- * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}.
- *
- */
- static TWITTER_SIGN_IN_METHOD: string;
- /**
- * @param token Twitter access token.
- * @param secret Twitter secret.
- * @return The auth provider credential.
- */
- static credential(
- token: string,
- secret: string
- ): firebase.auth.OAuthCredential;
- }
- /**
- * @hidden
- */
- class TwitterAuthProvider_Instance implements firebase.auth.AuthProvider {
- providerId: string;
- /**
- * Sets the OAuth custom parameters to pass in a Twitter OAuth request for popup
- * and redirect sign-in operations.
- * Valid parameters include 'lang'.
- * Reserved required OAuth 1.0 parameters such as 'oauth_consumer_key',
- * 'oauth_token', 'oauth_signature', etc are not allowed and will be ignored.
- * @param customOAuthParameters The custom OAuth parameters to pass
- * in the OAuth request.
- * @return The provider instance itself.
- */
- setCustomParameters(
- customOAuthParameters: Object
- ): firebase.auth.AuthProvider;
- }
- /**
- * A structure containing a User, an AuthCredential, the operationType, and
- * any additional user information that was returned from the identity provider.
- * operationType could be 'signIn' for a sign-in operation, 'link' for a linking
- * operation and 'reauthenticate' for a reauthentication operation.
- */
- type UserCredential = {
- additionalUserInfo?: firebase.auth.AdditionalUserInfo | null;
- credential: firebase.auth.AuthCredential | null;
- operationType?: string | null;
- user: firebase.User | null;
- };
- /**
- * Interface representing a user's metadata.
- */
- interface UserMetadata {
- creationTime?: string;
- lastSignInTime?: string;
- }
- }
- /**
- * The Analytics SDK does not work in a Node.js environment.
- */
- declare namespace firebase.analytics {
- /**
- * The Firebase Analytics service interface.
- *
- * Do not call this constructor directly. Instead, use
- * {@link firebase.analytics `firebase.analytics()`}.
- */
- export interface Analytics {
- /**
- * The {@link firebase.app.App app} associated with the `Analytics` service
- * instance.
- *
- * @example
- * ```javascript
- * var app = analytics.app;
- * ```
- */
- app: firebase.app.App;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'add_payment_info',
- eventParams?: {
- coupon?: EventParams['coupon'];
- currency?: EventParams['currency'];
- items?: EventParams['items'];
- payment_type?: EventParams['payment_type'];
- value?: EventParams['value'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'add_shipping_info',
- eventParams?: {
- coupon?: EventParams['coupon'];
- currency?: EventParams['currency'];
- items?: EventParams['items'];
- shipping_tier?: EventParams['shipping_tier'];
- value?: EventParams['value'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'add_to_cart' | 'add_to_wishlist' | 'remove_from_cart',
- eventParams?: {
- currency?: EventParams['currency'];
- value?: EventParams['value'];
- items?: EventParams['items'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'begin_checkout',
- eventParams?: {
- currency?: EventParams['currency'];
- coupon?: EventParams['coupon'];
- value?: EventParams['value'];
- items?: EventParams['items'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'checkout_progress',
- eventParams?: {
- currency?: EventParams['currency'];
- coupon?: EventParams['coupon'];
- value?: EventParams['value'];
- items?: EventParams['items'];
- checkout_step?: EventParams['checkout_step'];
- checkout_option?: EventParams['checkout_option'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * See
- * {@link https://developers.google.com/analytics/devguides/collection/ga4/exceptions
- * | Measure exceptions}.
- */
- logEvent(
- eventName: 'exception',
- eventParams?: {
- description?: EventParams['description'];
- fatal?: EventParams['fatal'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'generate_lead',
- eventParams?: {
- value?: EventParams['value'];
- currency?: EventParams['currency'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'login',
- eventParams?: {
- method?: EventParams['method'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * See
- * {@link https://developers.google.com/analytics/devguides/collection/ga4/page-view
- * | Page views}.
- */
- logEvent(
- eventName: 'page_view',
- eventParams?: {
- page_title?: string;
- page_location?: string;
- page_path?: string;
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'purchase' | 'refund',
- eventParams?: {
- value?: EventParams['value'];
- currency?: EventParams['currency'];
- transaction_id: EventParams['transaction_id'];
- tax?: EventParams['tax'];
- shipping?: EventParams['shipping'];
- items?: EventParams['items'];
- coupon?: EventParams['coupon'];
- affiliation?: EventParams['affiliation'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * See {@link https://firebase.google.com/docs/analytics/screenviews
- * | Track Screenviews}.
- */
- logEvent(
- eventName: 'screen_view',
- eventParams?: {
- firebase_screen: EventParams['firebase_screen'];
- firebase_screen_class: EventParams['firebase_screen_class'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'search' | 'view_search_results',
- eventParams?: {
- search_term?: EventParams['search_term'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'select_content',
- eventParams?: {
- content_type?: EventParams['content_type'];
- item_id?: EventParams['item_id'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'select_item',
- eventParams?: {
- items?: EventParams['items'];
- item_list_name?: EventParams['item_list_name'];
- item_list_id?: EventParams['item_list_id'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'select_promotion' | 'view_promotion',
- eventParams?: {
- items?: EventParams['items'];
- promotion_id?: EventParams['promotion_id'];
- promotion_name?: EventParams['promotion_name'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'set_checkout_option',
- eventParams?: {
- checkout_step?: EventParams['checkout_step'];
- checkout_option?: EventParams['checkout_option'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'share',
- eventParams?: {
- method?: EventParams['method'];
- content_type?: EventParams['content_type'];
- item_id?: EventParams['item_id'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'sign_up',
- eventParams?: {
- method?: EventParams['method'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'timing_complete',
- eventParams?: {
- name: string;
- value: number;
- event_category?: string;
- event_label?: string;
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'view_cart' | 'view_item',
- eventParams?: {
- currency?: EventParams['currency'];
- items?: EventParams['items'];
- value?: EventParams['value'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent(
- eventName: 'view_item_list',
- eventParams?: {
- items?: EventParams['items'];
- item_list_name?: EventParams['item_list_name'];
- item_list_id?: EventParams['item_list_id'];
- [key: string]: any;
- },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sends analytics event with given `eventParams`. This method
- * automatically associates this logged event with this Firebase web
- * app instance on this device.
- * List of recommended event parameters can be found in
- * {@link https://developers.google.com/gtagjs/reference/ga4-events
- * | the GA4 reference documentation}.
- */
- logEvent<T extends string>(
- eventName: CustomEventName<T>,
- eventParams?: { [key: string]: any },
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Use gtag 'config' command to set 'screen_name'.
- *
- * @deprecated Use {@link logEvent} with `eventName` as 'screen_view' and add relevant `eventParams`.
- * See {@link https://firebase.google.com/docs/analytics/screenviews | Track Screenviews}.
- */
- setCurrentScreen(
- screenName: string,
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Use gtag 'config' command to set 'user_id'.
- */
- setUserId(
- id: string,
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Use gtag 'config' command to set all params specified.
- */
- setUserProperties(
- properties: firebase.analytics.CustomParams,
- options?: firebase.analytics.AnalyticsCallOptions
- ): void;
- /**
- * Sets whether analytics collection is enabled for this app on this device.
- * window['ga-disable-analyticsId'] = true;
- */
- setAnalyticsCollectionEnabled(enabled: boolean): void;
- }
- export type CustomEventName<T> = T extends EventNameString ? never : T;
- /**
- * Additional options that can be passed to Firebase Analytics method
- * calls such as `logEvent`, `setCurrentScreen`, etc.
- */
- export interface AnalyticsCallOptions {
- /**
- * If true, this config or event call applies globally to all
- * analytics properties on the page.
- */
- global: boolean;
- }
- /**
- * Specifies custom options for your Firebase Analytics instance.
- * You must set these before initializing `firebase.analytics()`.
- */
- export interface SettingsOptions {
- /** Sets custom name for `gtag` function. */
- gtagName?: string;
- /** Sets custom name for `dataLayer` array used by gtag. */
- dataLayerName?: string;
- }
- /**
- * Configures Firebase Analytics to use custom `gtag` or `dataLayer` names.
- * Intended to be used if `gtag.js` script has been installed on
- * this page independently of Firebase Analytics, and is using non-default
- * names for either the `gtag` function or for `dataLayer`.
- * Must be called before calling `firebase.analytics()` or it won't
- * have any effect.
- */
- export function settings(settings: firebase.analytics.SettingsOptions): void;
- /**
- * Standard gtag.js control parameters.
- * For more information, see
- * {@link https://developers.google.com/gtagjs/reference/parameter
- * the gtag.js documentation on parameters}.
- */
- export interface ControlParams {
- groups?: string | string[];
- send_to?: string | string[];
- event_callback?: () => void;
- event_timeout?: number;
- }
- /**
- * Standard gtag.js event parameters.
- * For more information, see
- * {@link https://developers.google.com/gtagjs/reference/parameter
- * the gtag.js documentation on parameters}.
- */
- export interface EventParams {
- checkout_option?: string;
- checkout_step?: number;
- item_id?: string;
- content_type?: string;
- coupon?: string;
- currency?: string;
- description?: string;
- fatal?: boolean;
- items?: Item[];
- method?: string;
- number?: string;
- promotions?: Promotion[];
- screen_name?: string;
- /**
- * Firebase-specific. Use to log a `screen_name` to Firebase Analytics.
- */
- firebase_screen?: string;
- /**
- * Firebase-specific. Use to log a `screen_class` to Firebase Analytics.
- */
- firebase_screen_class?: string;
- search_term?: string;
- shipping?: Currency;
- tax?: Currency;
- transaction_id?: string;
- value?: number;
- event_label?: string;
- event_category: string;
- shipping_tier?: string;
- item_list_id?: string;
- item_list_name?: string;
- promotion_id?: string;
- promotion_name?: string;
- payment_type?: string;
- affiliation?: string;
- }
- /**
- * Any custom params the user may pass to gtag.js.
- */
- export interface CustomParams {
- [key: string]: any;
- }
- /**
- * Type for standard gtag.js event names. `logEvent` also accepts any
- * custom string and interprets it as a custom event name.
- */
- export type EventNameString =
- | 'add_payment_info'
- | 'add_shipping_info'
- | 'add_to_cart'
- | 'add_to_wishlist'
- | 'begin_checkout'
- | 'checkout_progress'
- | 'exception'
- | 'generate_lead'
- | 'login'
- | 'page_view'
- | 'purchase'
- | 'refund'
- | 'remove_from_cart'
- | 'screen_view'
- | 'search'
- | 'select_content'
- | 'select_item'
- | 'select_promotion'
- | 'set_checkout_option'
- | 'share'
- | 'sign_up'
- | 'timing_complete'
- | 'view_cart'
- | 'view_item'
- | 'view_item_list'
- | 'view_promotion'
- | 'view_search_results';
- /**
- * Enum of standard gtag.js event names provided for convenient
- * developer usage. `logEvent` will also accept any custom string
- * and interpret it as a custom event name.
- */
- export enum EventName {
- ADD_PAYMENT_INFO = 'add_payment_info',
- ADD_SHIPPING_INFO = 'add_shipping_info',
- ADD_TO_CART = 'add_to_cart',
- ADD_TO_WISHLIST = 'add_to_wishlist',
- BEGIN_CHECKOUT = 'begin_checkout',
- /** @deprecated */
- CHECKOUT_PROGRESS = 'checkout_progress',
- EXCEPTION = 'exception',
- GENERATE_LEAD = 'generate_lead',
- LOGIN = 'login',
- PAGE_VIEW = 'page_view',
- PURCHASE = 'purchase',
- REFUND = 'refund',
- REMOVE_FROM_CART = 'remove_from_cart',
- SCREEN_VIEW = 'screen_view',
- SEARCH = 'search',
- SELECT_CONTENT = 'select_content',
- SELECT_ITEM = 'select_item',
- SELECT_PROMOTION = 'select_promotion',
- /** @deprecated */
- SET_CHECKOUT_OPTION = 'set_checkout_option',
- SHARE = 'share',
- SIGN_UP = 'sign_up',
- TIMING_COMPLETE = 'timing_complete',
- VIEW_CART = 'view_cart',
- VIEW_ITEM = 'view_item',
- VIEW_ITEM_LIST = 'view_item_list',
- VIEW_PROMOTION = 'view_promotion',
- VIEW_SEARCH_RESULTS = 'view_search_results'
- }
- export type Currency = string | number;
- export interface Item {
- item_id?: string;
- item_name?: string;
- item_brand?: string;
- item_category?: string;
- item_category2?: string;
- item_category3?: string;
- item_category4?: string;
- item_category5?: string;
- item_variant?: string;
- price?: Currency;
- quantity?: number;
- index?: number;
- coupon?: string;
- item_list_name?: string;
- item_list_id?: string;
- discount?: Currency;
- affiliation?: string;
- creative_name?: string;
- creative_slot?: string;
- promotion_id?: string;
- promotion_name?: string;
- location_id?: string;
- /** @deprecated Use item_brand instead. */
- brand?: string;
- /** @deprecated Use item_category instead. */
- category?: string;
- /** @deprecated Use item_id instead. */
- id?: string;
- /** @deprecated Use item_name instead. */
- name?: string;
- }
- /** @deprecated Use Item instead. */
- export interface Promotion {
- creative_name?: string;
- creative_slot?: string;
- id?: string;
- name?: string;
- }
- /**
- * An async function that returns true if current browser context supports initialization of analytics module
- * (`firebase.analytics()`).
- *
- * Returns false otherwise.
- *
- *
- */
- function isSupported(): Promise<boolean>;
- }
- declare namespace firebase.auth.Auth {
- type Persistence = string;
- /**
- * An enumeration of the possible persistence mechanism types.
- */
- var Persistence: {
- /**
- * Indicates that the state will be persisted even when the browser window is
- * closed or the activity is destroyed in react-native.
- */
- LOCAL: Persistence;
- /**
- * Indicates that the state will only be stored in memory and will be cleared
- * when the window or activity is refreshed.
- */
- NONE: Persistence;
- /**
- * Indicates that the state will only persist in current session/tab, relevant
- * to web only, and will be cleared when the tab is closed.
- */
- SESSION: Persistence;
- };
- }
- declare namespace firebase.User {
- /**
- * This is the interface that defines the multi-factor related properties and
- * operations pertaining to a {@link firebase.User}.
- */
- interface MultiFactorUser {
- /**
- * Returns a list of the user's enrolled second factors.
- */
- enrolledFactors: firebase.auth.MultiFactorInfo[];
- /**
- * Enrolls a second factor as identified by the
- * {@link firebase.auth.MultiFactorAssertion} for the current user.
- * On resolution, the user tokens are updated to reflect the change in the
- * JWT payload.
- * Accepts an additional display name parameter used to identify the second
- * factor to the end user.
- * Recent re-authentication is required for this operation to succeed.
- * On successful enrollment, existing Firebase sessions (refresh tokens) are
- * revoked. When a new factor is enrolled, an email notification is sent
- * to the user’s email.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/invalid-verification-code</dt>
- * <dd>Thrown if the verification code is not valid.</dd>
- * <dt>auth/missing-verification-code</dt>
- * <dd>Thrown if the verification code is missing.</dd>
- * <dt>auth/invalid-verification-id</dt>
- * <dd>Thrown if the credential is a
- * {@link firebase.auth.PhoneAuthProvider.credential} and the verification
- * ID of the credential is not valid.</dd>
- * <dt>auth/missing-verification-id</dt>
- * <dd>Thrown if the verification ID is missing.</dd>
- * <dt>auth/code-expired</dt>
- * <dd>Thrown if the verification code has expired.</dd>
- * <dt>auth/maximum-second-factor-count-exceeded</dt>
- * <dd>Thrown if The maximum allowed number of second factors on a user
- * has been exceeded.</dd>
- * <dt>auth/second-factor-already-in-use</dt>
- * <dd>Thrown if the second factor is already enrolled on this account.</dd>
- * <dt>auth/unsupported-first-factor</dt>
- * <dd>Thrown if the first factor being used to sign in is not supported.</dd>
- * <dt>auth/unverified-email</dt>
- * <dd>Thrown if the email of the account is not verified.</dd>
- * <dt>auth/requires-recent-login</dt>
- * <dd>Thrown if the user's last sign-in time does not meet the security
- * threshold. Use {@link firebase.User.reauthenticateWithCredential} to
- * resolve.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * firebase.auth().currentUser.multiFactor.getSession()
- * .then(function(multiFactorSession) {
- * // Send verification code
- * var phoneAuthProvider = new firebase.auth.PhoneAuthProvider();
- * var phoneInfoOptions = {
- * phoneNumber: phoneNumber,
- * session: multiFactorSession
- * };
- * return phoneAuthProvider.verifyPhoneNumber(
- * phoneInfoOptions, appVerifier);
- * }).then(function(verificationId) {
- * // Store verificationID and show UI to let user enter verification code.
- * });
- *
- * var phoneAuthCredential =
- * firebase.auth.PhoneAuthProvider.credential(verificationId, verificationCode);
- * var multiFactorAssertion =
- * firebase.auth.PhoneMultiFactorGenerator.assertion(phoneAuthCredential);
- * firebase.auth().currentUser.multiFactor.enroll(multiFactorAssertion)
- * .then(function() {
- * // Second factor enrolled.
- * });
- * ```
- *
- * @param assertion The multi-factor assertion to enroll with.
- * @param displayName The display name of the second factor.
- */
- enroll(
- assertion: firebase.auth.MultiFactorAssertion,
- displayName?: string | null
- ): Promise<void>;
- /**
- * Returns the session identifier for a second factor enrollment operation.
- * This is used to identify the current user trying to enroll a second factor.
- * @return The promise that resolves with the
- * {@link firebase.auth.MultiFactorSession}.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/user-token-expired</dt>
- * <dd>Thrown if the token of the user is expired.</dd>
- * </dl>
- */
- getSession(): Promise<firebase.auth.MultiFactorSession>;
- /**
- * Unenrolls the specified second factor. To specify the factor to remove, pass
- * a {@link firebase.auth.MultiFactorInfo} object
- * (retrieved from <code>enrolledFactors()</code>)
- * or the factor's UID string.
- * Sessions are not revoked when the account is downgraded. An email
- * notification is likely to be sent to the user notifying them of the change.
- * Recent re-authentication is required for this operation to succeed.
- * When an existing factor is unenrolled, an email notification is sent to the
- * user’s email.
- *
- * <h4>Error Codes</h4>
- * <dl>
- * <dt>auth/multi-factor-info-not-found</dt>
- * <dd>Thrown if the user does not have a second factor matching the
- * identifier provided.</dd>
- * <dt>auth/requires-recent-login</dt>
- * <dd>Thrown if the user's last sign-in time does not meet the security
- * threshold. Use {@link firebase.User.reauthenticateWithCredential} to
- * resolve.</dd>
- * </dl>
- *
- * @example
- * ```javascript
- * var options = firebase.auth().currentUser.multiFactor.enrolledFactors;
- * // Present user the option to unenroll.
- * return firebase.auth().currentUser.multiFactor.unenroll(options[i])
- * .then(function() {
- * // User successfully unenrolled selected factor.
- * }).catch(function(error) {
- * // Handler error.
- * });
- * ```
- *
- * @param option The multi-factor option to unenroll.
- */
- unenroll(option: firebase.auth.MultiFactorInfo | string): Promise<void>;
- }
- }
- declare namespace firebase.auth.ActionCodeInfo {
- type Operation = string;
- /**
- * An enumeration of the possible email action types.
- */
- var Operation: {
- /**
- * The email link sign-in action.
- */
- EMAIL_SIGNIN: Operation;
- /**
- * The password reset action.
- */
- PASSWORD_RESET: Operation;
- /**
- * The email revocation action.
- */
- RECOVER_EMAIL: Operation;
- /**
- * The revert second factor addition email action.
- */
- REVERT_SECOND_FACTOR_ADDITION: Operation;
- /**
- * The verify and update email action.
- */
- VERIFY_AND_CHANGE_EMAIL: Operation;
- /**
- * The email verification action.
- */
- VERIFY_EMAIL: Operation;
- };
- }
- declare namespace firebase.database {
- /**
- * A `DataSnapshot` contains data from a Database location.
- *
- * Any time you read data from the Database, you receive the data as a
- * `DataSnapshot`. A `DataSnapshot` is passed to the event callbacks you attach
- * with `on()` or `once()`. You can extract the contents of the snapshot as a
- * JavaScript object by calling the `val()` method. Alternatively, you can
- * traverse into the snapshot by calling `child()` to return child snapshots
- * (which you could then call `val()` on).
- *
- * A `DataSnapshot` is an efficiently generated, immutable copy of the data at
- * a Database location. It cannot be modified and will never change (to modify
- * data, you always call the `set()` method on a `Reference` directly).
- *
- */
- interface DataSnapshot {
- /**
- * Gets another `DataSnapshot` for the location at the specified relative path.
- *
- * Passing a relative path to the `child()` method of a DataSnapshot returns
- * another `DataSnapshot` for the location at the specified relative path. The
- * relative path can either be a simple child name (for example, "ada") or a
- * deeper, slash-separated path (for example, "ada/name/first"). If the child
- * location has no data, an empty `DataSnapshot` (that is, a `DataSnapshot`
- * whose value is `null`) is returned.
- *
- * @example
- * ```javascript
- * // Assume we have the following data in the Database:
- * {
- * "name": {
- * "first": "Ada",
- * "last": "Lovelace"
- * }
- * }
- *
- * // Test for the existence of certain keys within a DataSnapshot
- * var ref = firebase.database().ref("users/ada");
- * ref.once("value")
- * .then(function(snapshot) {
- * var name = snapshot.child("name").val(); // {first:"Ada",last:"Lovelace"}
- * var firstName = snapshot.child("name/first").val(); // "Ada"
- * var lastName = snapshot.child("name").child("last").val(); // "Lovelace"
- * var age = snapshot.child("age").val(); // null
- * });
- * ```
- *
- * @param path A relative path to the location of child data.
- */
- child(path: string): firebase.database.DataSnapshot;
- /**
- * Returns true if this `DataSnapshot` contains any data. It is slightly more
- * efficient than using `snapshot.val() !== null`.
- *
- * @example
- * ```javascript
- * // Assume we have the following data in the Database:
- * {
- * "name": {
- * "first": "Ada",
- * "last": "Lovelace"
- * }
- * }
- *
- * // Test for the existence of certain keys within a DataSnapshot
- * var ref = firebase.database().ref("users/ada");
- * ref.once("value")
- * .then(function(snapshot) {
- * var a = snapshot.exists(); // true
- * var b = snapshot.child("name").exists(); // true
- * var c = snapshot.child("name/first").exists(); // true
- * var d = snapshot.child("name/middle").exists(); // false
- * });
- * ```
- */
- exists(): boolean;
- /**
- * Exports the entire contents of the DataSnapshot as a JavaScript object.
- *
- * The `exportVal()` method is similar to `val()`, except priority information
- * is included (if available), making it suitable for backing up your data.
- *
- * @return The DataSnapshot's contents as a JavaScript value (Object,
- * Array, string, number, boolean, or `null`).
- */
- exportVal(): any;
- /**
- * Enumerates the top-level children in the `DataSnapshot`.
- *
- * Because of the way JavaScript objects work, the ordering of data in the
- * JavaScript object returned by `val()` is not guaranteed to match the ordering
- * on the server nor the ordering of `child_added` events. That is where
- * `forEach()` comes in handy. It guarantees the children of a `DataSnapshot`
- * will be iterated in their query order.
- *
- * If no explicit `orderBy*()` method is used, results are returned
- * ordered by key (unless priorities are used, in which case, results are
- * returned by priority).
- *
- * @example
- * ```javascript
- * // Assume we have the following data in the Database:
- * {
- * "users": {
- * "ada": {
- * "first": "Ada",
- * "last": "Lovelace"
- * },
- * "alan": {
- * "first": "Alan",
- * "last": "Turing"
- * }
- * }
- * }
- *
- * // Loop through users in order with the forEach() method. The callback
- * // provided to forEach() will be called synchronously with a DataSnapshot
- * // for each child:
- * var query = firebase.database().ref("users").orderByKey();
- * query.once("value")
- * .then(function(snapshot) {
- * snapshot.forEach(function(childSnapshot) {
- * // key will be "ada" the first time and "alan" the second time
- * var key = childSnapshot.key;
- * // childData will be the actual contents of the child
- * var childData = childSnapshot.val();
- * });
- * });
- * ```
- *
- * @example
- * ```javascript
- * // You can cancel the enumeration at any point by having your callback
- * // function return true. For example, the following code sample will only
- * // fire the callback function one time:
- * var query = firebase.database().ref("users").orderByKey();
- * query.once("value")
- * .then(function(snapshot) {
- * snapshot.forEach(function(childSnapshot) {
- * var key = childSnapshot.key; // "ada"
- *
- * // Cancel enumeration
- * return true;
- * });
- * });
- * ```
- *
- * @param action A function
- * that will be called for each child DataSnapshot. The callback can return
- * true to cancel further enumeration.
- * @return true if enumeration was canceled due to your callback
- * returning true.
- */
- forEach(
- action: (a: firebase.database.DataSnapshot) => boolean | void
- ): boolean;
- /**
- * Gets the priority value of the data in this `DataSnapshot`.
- *
- * Applications need not use priority but can order collections by
- * ordinary properties (see
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data
- * Sorting and filtering data}).
- */
- getPriority(): string | number | null;
- /**
- * Returns true if the specified child path has (non-null) data.
- *
- * @example
- * ```javascript
- * // Assume we have the following data in the Database:
- * {
- * "name": {
- * "first": "Ada",
- * "last": "Lovelace"
- * }
- * }
- *
- * // Determine which child keys in DataSnapshot have data.
- * var ref = firebase.database().ref("users/ada");
- * ref.once("value")
- * .then(function(snapshot) {
- * var hasName = snapshot.hasChild("name"); // true
- * var hasAge = snapshot.hasChild("age"); // false
- * });
- * ```
- *
- * @param path A relative path to the location of a potential child.
- * @return `true` if data exists at the specified child path; else
- * `false`.
- */
- hasChild(path: string): boolean;
- /**
- * Returns whether or not the `DataSnapshot` has any non-`null` child
- * properties.
- *
- * You can use `hasChildren()` to determine if a `DataSnapshot` has any
- * children. If it does, you can enumerate them using `forEach()`. If it
- * doesn't, then either this snapshot contains a primitive value (which can be
- * retrieved with `val()`) or it is empty (in which case, `val()` will return
- * `null`).
- *
- * @example
- * ```javascript
- * // Assume we have the following data in the Database:
- * {
- * "name": {
- * "first": "Ada",
- * "last": "Lovelace"
- * }
- * }
- *
- * var ref = firebase.database().ref("users/ada");
- * ref.once("value")
- * .then(function(snapshot) {
- * var a = snapshot.hasChildren(); // true
- * var b = snapshot.child("name").hasChildren(); // true
- * var c = snapshot.child("name/first").hasChildren(); // false
- * });
- * ```
- *
- * @return true if this snapshot has any children; else false.
- */
- hasChildren(): boolean;
- /**
- * The key (last part of the path) of the location of this `DataSnapshot`.
- *
- * The last token in a Database location is considered its key. For example,
- * "ada" is the key for the /users/ada/ node. Accessing the key on any
- * `DataSnapshot` will return the key for the location that generated it.
- * However, accessing the key on the root URL of a Database will return `null`.
- *
- * @example
- * ```javascript
- * // Assume we have the following data in the Database:
- * {
- * "name": {
- * "first": "Ada",
- * "last": "Lovelace"
- * }
- * }
- *
- * var ref = firebase.database().ref("users/ada");
- * ref.once("value")
- * .then(function(snapshot) {
- * var key = snapshot.key; // "ada"
- * var childKey = snapshot.child("name/last").key; // "last"
- * });
- * ```
- *
- * @example
- * ```javascript
- * var rootRef = firebase.database().ref();
- * rootRef.once("value")
- * .then(function(snapshot) {
- * var key = snapshot.key; // null
- * var childKey = snapshot.child("users/ada").key; // "ada"
- * });
- * ```
- */
- key: string | null;
- /**
- * Returns the number of child properties of this `DataSnapshot`.
- *
- * @example
- * ```javascript
- * // Assume we have the following data in the Database:
- * {
- * "name": {
- * "first": "Ada",
- * "last": "Lovelace"
- * }
- * }
- *
- * var ref = firebase.database().ref("users/ada");
- * ref.once("value")
- * .then(function(snapshot) {
- * var a = snapshot.numChildren(); // 1 ("name")
- * var b = snapshot.child("name").numChildren(); // 2 ("first", "last")
- * var c = snapshot.child("name/first").numChildren(); // 0
- * });
- * ```
- */
- numChildren(): number;
- /**
- * Extracts a JavaScript value from a `DataSnapshot`.
- *
- * Depending on the data in a `DataSnapshot`, the `val()` method may return a
- * scalar type (string, number, or boolean), an array, or an object. It may also
- * return null, indicating that the `DataSnapshot` is empty (contains no data).
- *
- * @example
- * ```javascript
- * // Write and then read back a string from the Database.
- * ref.set("hello")
- * .then(function() {
- * return ref.once("value");
- * })
- * .then(function(snapshot) {
- * var data = snapshot.val(); // data === "hello"
- * });
- * ```
- *
- * @example
- * ```javascript
- * // Write and then read back a JavaScript object from the Database.
- * ref.set({ name: "Ada", age: 36 })
- * .then(function() {
- * return ref.once("value");
- * })
- * .then(function(snapshot) {
- * var data = snapshot.val();
- * // data is { "name": "Ada", "age": 36 }
- * // data.name === "Ada"
- * // data.age === 36
- * });
- * ```
- *
- * @return The DataSnapshot's contents as a JavaScript value (Object,
- * Array, string, number, boolean, or `null`).
- */
- val(): any;
- /**
- * The `Reference` for the location that generated this `DataSnapshot`.
- */
- ref: firebase.database.Reference;
- /**
- * Returns a JSON-serializable representation of this object.
- */
- toJSON(): Object | null;
- }
- /**
- * The Firebase Database service interface.
- *
- * Do not call this constructor directly. Instead, use
- * {@link firebase.database `firebase.database()`}.
- *
- * See
- * {@link
- * https://firebase.google.com/docs/database/web/start/
- * Installation & Setup in JavaScript}
- * for a full guide on how to use the Firebase Database service.
- */
- interface Database {
- /**
- * The {@link firebase.app.App app} associated with the `Database` service
- * instance.
- *
- * @example
- * ```javascript
- * var app = database.app;
- * ```
- */
- app: firebase.app.App;
- /**
- * Additional methods for debugging and special cases.
- *
- */
- INTERNAL: {
- /**
- * Force the use of WebSockets instead of long polling.
- */
- forceWebSockets: () => void;
- /**
- * Force the use of long polling instead of WebSockets. This will be ignored if the WebSocket protocol is used in `databaseURL`.
- */
- forceLongPolling: () => void;
- };
- /**
- * Modify this instance to communicate with the Realtime Database emulator.
- *
- * <p>Note: This method must be called before performing any other operation.
- *
- * @param host the emulator host (ex: localhost)
- * @param port the emulator port (ex: 8080)
- * @param options.mockUserToken the mock auth token to use for unit testing Security Rules
- */
- useEmulator(
- host: string,
- port: number,
- options?: {
- mockUserToken?: EmulatorMockTokenOptions | string;
- }
- ): void;
- /**
- * Disconnects from the server (all Database operations will be completed
- * offline).
- *
- * The client automatically maintains a persistent connection to the Database
- * server, which will remain active indefinitely and reconnect when
- * disconnected. However, the `goOffline()` and `goOnline()` methods may be used
- * to control the client connection in cases where a persistent connection is
- * undesirable.
- *
- * While offline, the client will no longer receive data updates from the
- * Database. However, all Database operations performed locally will continue to
- * immediately fire events, allowing your application to continue behaving
- * normally. Additionally, each operation performed locally will automatically
- * be queued and retried upon reconnection to the Database server.
- *
- * To reconnect to the Database and begin receiving remote events, see
- * `goOnline()`.
- *
- * @example
- * ```javascript
- * firebase.database().goOffline();
- * ```
- */
- goOffline(): any;
- /**
- * Reconnects to the server and synchronizes the offline Database state
- * with the server state.
- *
- * This method should be used after disabling the active connection with
- * `goOffline()`. Once reconnected, the client will transmit the proper data
- * and fire the appropriate events so that your client "catches up"
- * automatically.
- *
- * @example
- * ```javascript
- * firebase.database().goOnline();
- * ```
- */
- goOnline(): any;
- /**
- * Returns a `Reference` representing the location in the Database
- * corresponding to the provided path. If no path is provided, the `Reference`
- * will point to the root of the Database.
- *
- * @example
- * ```javascript
- * // Get a reference to the root of the Database
- * var rootRef = firebase.database().ref();
- * ```
- *
- * @example
- * ```javascript
- * // Get a reference to the /users/ada node
- * var adaRef = firebase.database().ref("users/ada");
- * // The above is shorthand for the following operations:
- * //var rootRef = firebase.database().ref();
- * //var adaRef = rootRef.child("users/ada");
- * ```
- *
- * @param path Optional path representing the location the returned
- * `Reference` will point. If not provided, the returned `Reference` will
- * point to the root of the Database.
- * @return If a path is provided, a `Reference`
- * pointing to the provided path. Otherwise, a `Reference` pointing to the
- * root of the Database.
- */
- ref(path?: string): firebase.database.Reference;
- /**
- * Returns a `Reference` representing the location in the Database
- * corresponding to the provided Firebase URL.
- *
- * An exception is thrown if the URL is not a valid Firebase Database URL or it
- * has a different domain than the current `Database` instance.
- *
- * Note that all query parameters (`orderBy`, `limitToLast`, etc.) are ignored
- * and are not applied to the returned `Reference`.
- *
- * @example
- * ```javascript
- * // Get a reference to the root of the Database
- * var rootRef = firebase.database().ref("https://<DATABASE_NAME>.firebaseio.com");
- * ```
- *
- * @example
- * ```javascript
- * // Get a reference to the /users/ada node
- * var adaRef = firebase.database().ref("https://<DATABASE_NAME>.firebaseio.com/users/ada");
- * ```
- *
- * @param url The Firebase URL at which the returned `Reference` will
- * point.
- * @return A `Reference` pointing to the provided
- * Firebase URL.
- */
- refFromURL(url: string): firebase.database.Reference;
- }
- /**
- * The `onDisconnect` class allows you to write or clear data when your client
- * disconnects from the Database server. These updates occur whether your
- * client disconnects cleanly or not, so you can rely on them to clean up data
- * even if a connection is dropped or a client crashes.
- *
- * The `onDisconnect` class is most commonly used to manage presence in
- * applications where it is useful to detect how many clients are connected and
- * when other clients disconnect. See
- * {@link
- * https://firebase.google.com/docs/database/web/offline-capabilities
- * Enabling Offline Capabilities in JavaScript} for more information.
- *
- * To avoid problems when a connection is dropped before the requests can be
- * transferred to the Database server, these functions should be called before
- * writing any data.
- *
- * Note that `onDisconnect` operations are only triggered once. If you want an
- * operation to occur each time a disconnect occurs, you'll need to re-establish
- * the `onDisconnect` operations each time you reconnect.
- */
- interface OnDisconnect {
- /**
- * Cancels all previously queued `onDisconnect()` set or update events for this
- * location and all children.
- *
- * If a write has been queued for this location via a `set()` or `update()` at a
- * parent location, the write at this location will be canceled, though writes
- * to sibling locations will still occur.
- *
- * @example
- * ```javascript
- * var ref = firebase.database().ref("onlineState");
- * ref.onDisconnect().set(false);
- * // ... sometime later
- * ref.onDisconnect().cancel();
- * ```
- *
- * @param onComplete An optional callback function that will
- * be called when synchronization to the server has completed. The callback
- * will be passed a single parameter: null for success, or an Error object
- * indicating a failure.
- * @return Resolves when synchronization to the server
- * is complete.
- */
- cancel(onComplete?: (a: Error | null) => any): Promise<any>;
- /**
- * Ensures the data at this location is deleted when the client is disconnected
- * (due to closing the browser, navigating to a new page, or network issues).
- *
- * @param onComplete An optional callback function that will
- * be called when synchronization to the server has completed. The callback
- * will be passed a single parameter: null for success, or an Error object
- * indicating a failure.
- * @return Resolves when synchronization to the server
- * is complete.
- */
- remove(onComplete?: (a: Error | null) => any): Promise<any>;
- /**
- * Ensures the data at this location is set to the specified value when the
- * client is disconnected (due to closing the browser, navigating to a new page,
- * or network issues).
- *
- * `set()` is especially useful for implementing "presence" systems, where a
- * value should be changed or cleared when a user disconnects so that they
- * appear "offline" to other users. See
- * {@link
- * https://firebase.google.com/docs/database/web/offline-capabilities
- * Enabling Offline Capabilities in JavaScript} for more information.
- *
- * Note that `onDisconnect` operations are only triggered once. If you want an
- * operation to occur each time a disconnect occurs, you'll need to re-establish
- * the `onDisconnect` operations each time.
- *
- * @example
- * ```javascript
- * var ref = firebase.database().ref("users/ada/status");
- * ref.onDisconnect().set("I disconnected!");
- * ```
- *
- * @param value The value to be written to this location on
- * disconnect (can be an object, array, string, number, boolean, or null).
- * @param onComplete An optional callback function that
- * will be called when synchronization to the Database server has completed.
- * The callback will be passed a single parameter: null for success, or an
- * `Error` object indicating a failure.
- * @return Resolves when synchronization to the
- * Database is complete.
- */
- set(value: any, onComplete?: (a: Error | null) => any): Promise<any>;
- /**
- * Ensures the data at this location is set to the specified value and priority
- * when the client is disconnected (due to closing the browser, navigating to a
- * new page, or network issues).
- */
- setWithPriority(
- value: any,
- priority: number | string | null,
- onComplete?: (a: Error | null) => any
- ): Promise<any>;
- /**
- * Writes multiple values at this location when the client is disconnected (due
- * to closing the browser, navigating to a new page, or network issues).
- *
- * The `values` argument contains multiple property-value pairs that will be
- * written to the Database together. Each child property can either be a simple
- * property (for example, "name") or a relative path (for example, "name/first")
- * from the current location to the data to update.
- *
- * As opposed to the `set()` method, `update()` can be use to selectively update
- * only the referenced properties at the current location (instead of replacing
- * all the child properties at the current location).
- *
- * See more examples using the connected version of
- * {@link firebase.database.Reference.update `update()`}.
- *
- * @example
- * ```javascript
- * var ref = firebase.database().ref("users/ada");
- * ref.update({
- * onlineState: true,
- * status: "I'm online."
- * });
- * ref.onDisconnect().update({
- * onlineState: false,
- * status: "I'm offline."
- * });
- * ```
- *
- * @param values Object containing multiple values.
- * @param onComplete An optional callback function that will
- * be called when synchronization to the server has completed. The
- * callback will be passed a single parameter: null for success, or an Error
- * object indicating a failure.
- * @return Resolves when synchronization to the
- * Database is complete.
- */
- update(values: Object, onComplete?: (a: Error | null) => any): Promise<any>;
- }
- type EventType =
- | 'value'
- | 'child_added'
- | 'child_changed'
- | 'child_moved'
- | 'child_removed';
- /**
- * A `Query` sorts and filters the data at a Database location so only a subset
- * of the child data is included. This can be used to order a collection of
- * data by some attribute (for example, height of dinosaurs) as well as to
- * restrict a large list of items (for example, chat messages) down to a number
- * suitable for synchronizing to the client. Queries are created by chaining
- * together one or more of the filter methods defined here.
- *
- * Just as with a `Reference`, you can receive data from a `Query` by using the
- * `on()` method. You will only receive events and `DataSnapshot`s for the
- * subset of the data that matches your query.
- *
- * Read our documentation on
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data
- * Sorting and filtering data} for more information.
- */
- interface Query {
- /**
- * Creates a `Query` with the specified ending point.
- *
- * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`
- * allows you to choose arbitrary starting and ending points for your queries.
- *
- * The ending point is inclusive, so children with exactly the specified value
- * will be included in the query. The optional key argument can be used to
- * further limit the range of the query. If it is specified, then children that
- * have exactly the specified value must also have a key name less than or equal
- * to the specified key.
- *
- * You can read more about `endAt()` in
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data
- * Filtering data}.
- *
- * @example
- * ```javascript
- * // Find all dinosaurs whose names come before Pterodactyl lexicographically.
- * // Include Pterodactyl in the result.
- * var ref = firebase.database().ref("dinosaurs");
- * ref.orderByKey().endAt("pterodactyl").on("child_added", function(snapshot) {
- * console.log(snapshot.key);
- * });
- * ```
- *
- * @param value The value to end at. The argument
- * type depends on which `orderBy*()` function was used in this query.
- * Specify a value that matches the `orderBy*()` type. When used in
- * combination with `orderByKey()`, the value must be a string.
- * @param key The child key to end at, among the children with the
- * previously specified priority. This argument is only allowed if ordering by
- * child, value, or priority.
- */
- endAt(
- value: number | string | boolean | null,
- key?: string
- ): firebase.database.Query;
- /**
- * Creates a `Query` with the specified ending point (exclusive).
- *
- * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`
- * allows you to choose arbitrary starting and ending points for your queries.
- *
- * The ending point is exclusive. If only a value is provided, children
- * with a value less than the specified value will be included in the query.
- * If a key is specified, then children must have a value lesss than or equal
- * to the specified value and a a key name less than the specified key.
- *
- * @example
- * ```javascript
- * // Find all dinosaurs whose names come before Pterodactyl lexicographically.
- * // Do not include Pterodactyl in the result.
- * var ref = firebase.database().ref("dinosaurs");
- * ref.orderByKey().endBefore("pterodactyl").on("child_added", function(snapshot) {
- * console.log(snapshot.key);
- * });
- *
- * @param value The value to end before. The argument
- * type depends on which `orderBy*()` function was used in this query.
- * Specify a value that matches the `orderBy*()` type. When used in
- * combination with `orderByKey()`, the value must be a string.
- * @param key The child key to end before, among the children with the
- * previously specified priority. This argument is only allowed if ordering by
- * child, value, or priority.
- */
- endBefore(
- value: number | string | boolean | null,
- key?: string
- ): firebase.database.Query;
- /**
- * Creates a `Query` that includes children that match the specified value.
- *
- * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`
- * allows you to choose arbitrary starting and ending points for your queries.
- *
- * The optional key argument can be used to further limit the range of the
- * query. If it is specified, then children that have exactly the specified
- * value must also have exactly the specified key as their key name. This can be
- * used to filter result sets with many matches for the same value.
- *
- * You can read more about `equalTo()` in
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data
- * Filtering data}.
- *
- * @example
- * ```javascript
- * // Find all dinosaurs whose height is exactly 25 meters.
- * var ref = firebase.database().ref("dinosaurs");
- * ref.orderByChild("height").equalTo(25).on("child_added", function(snapshot) {
- * console.log(snapshot.key);
- * });
- * ```
- *
- * @param value The value to match for. The
- * argument type depends on which `orderBy*()` function was used in this
- * query. Specify a value that matches the `orderBy*()` type. When used in
- * combination with `orderByKey()`, the value must be a string.
- * @param key The child key to start at, among the children with the
- * previously specified priority. This argument is only allowed if ordering by
- * child, value, or priority.
- */
- equalTo(
- value: number | string | boolean | null,
- key?: string
- ): firebase.database.Query;
- /**
- * Returns whether or not the current and provided queries represent the same
- * location, have the same query parameters, and are from the same instance of
- * `firebase.app.App`.
- *
- * Two `Reference` objects are equivalent if they represent the same location
- * and are from the same instance of `firebase.app.App`.
- *
- * Two `Query` objects are equivalent if they represent the same location, have
- * the same query parameters, and are from the same instance of
- * `firebase.app.App`. Equivalent queries share the same sort order, limits, and
- * starting and ending points.
- *
- * @example
- * ```javascript
- * var rootRef = firebase.database.ref();
- * var usersRef = rootRef.child("users");
- *
- * usersRef.isEqual(rootRef); // false
- * usersRef.isEqual(rootRef.child("users")); // true
- * usersRef.parent.isEqual(rootRef); // true
- * ```
- *
- * @example
- * ```javascript
- * var rootRef = firebase.database.ref();
- * var usersRef = rootRef.child("users");
- * var usersQuery = usersRef.limitToLast(10);
- *
- * usersQuery.isEqual(usersRef); // false
- * usersQuery.isEqual(usersRef.limitToLast(10)); // true
- * usersQuery.isEqual(rootRef.limitToLast(10)); // false
- * usersQuery.isEqual(usersRef.orderByKey().limitToLast(10)); // false
- * ```
- *
- * @param other The query to compare against.
- * @return Whether or not the current and provided queries are
- * equivalent.
- */
- isEqual(other: firebase.database.Query | null): boolean;
- /**
- * Generates a new `Query` limited to the first specific number of children.
- *
- * The `limitToFirst()` method is used to set a maximum number of children to be
- * synced for a given callback. If we set a limit of 100, we will initially only
- * receive up to 100 `child_added` events. If we have fewer than 100 messages
- * stored in our Database, a `child_added` event will fire for each message.
- * However, if we have over 100 messages, we will only receive a `child_added`
- * event for the first 100 ordered messages. As items change, we will receive
- * `child_removed` events for each item that drops out of the active list so
- * that the total number stays at 100.
- *
- * You can read more about `limitToFirst()` in
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data
- * Filtering data}.
- *
- * @example
- * ```javascript
- * // Find the two shortest dinosaurs.
- * var ref = firebase.database().ref("dinosaurs");
- * ref.orderByChild("height").limitToFirst(2).on("child_added", function(snapshot) {
- * // This will be called exactly two times (unless there are less than two
- * // dinosaurs in the Database).
- *
- * // It will also get fired again if one of the first two dinosaurs is
- * // removed from the data set, as a new dinosaur will now be the second
- * // shortest.
- * console.log(snapshot.key);
- * });
- * ```
- *
- * @param limit The maximum number of nodes to include in this query.
- */
- limitToFirst(limit: number): firebase.database.Query;
- /**
- * Generates a new `Query` object limited to the last specific number of
- * children.
- *
- * The `limitToLast()` method is used to set a maximum number of children to be
- * synced for a given callback. If we set a limit of 100, we will initially only
- * receive up to 100 `child_added` events. If we have fewer than 100 messages
- * stored in our Database, a `child_added` event will fire for each message.
- * However, if we have over 100 messages, we will only receive a `child_added`
- * event for the last 100 ordered messages. As items change, we will receive
- * `child_removed` events for each item that drops out of the active list so
- * that the total number stays at 100.
- *
- * You can read more about `limitToLast()` in
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data
- * Filtering data}.
- *
- * @example
- * ```javascript
- * // Find the two heaviest dinosaurs.
- * var ref = firebase.database().ref("dinosaurs");
- * ref.orderByChild("weight").limitToLast(2).on("child_added", function(snapshot) {
- * // This callback will be triggered exactly two times, unless there are
- * // fewer than two dinosaurs stored in the Database. It will also get fired
- * // for every new, heavier dinosaur that gets added to the data set.
- * console.log(snapshot.key);
- * });
- * ```
- *
- * @param limit The maximum number of nodes to include in this query.
- */
- limitToLast(limit: number): firebase.database.Query;
- /**
- * Detaches a callback previously attached with `on()`.
- *
- * Detach a callback previously attached with `on()`. Note that if `on()` was
- * called multiple times with the same eventType and callback, the callback
- * will be called multiple times for each event, and `off()` must be called
- * multiple times to remove the callback. Calling `off()` on a parent listener
- * will not automatically remove listeners registered on child nodes, `off()`
- * must also be called on any child listeners to remove the callback.
- *
- * If a callback is not specified, all callbacks for the specified eventType
- * will be removed. Similarly, if no eventType is specified, all callbacks
- * for the `Reference` will be removed.
- *
- * @example
- * ```javascript
- * var onValueChange = function(dataSnapshot) { ... };
- * ref.on('value', onValueChange);
- * ref.child('meta-data').on('child_added', onChildAdded);
- * // Sometime later...
- * ref.off('value', onValueChange);
- *
- * // You must also call off() for any child listeners on ref
- * // to cancel those callbacks
- * ref.child('meta-data').off('child_added', onValueAdded);
- * ```
- *
- * @example
- * ```javascript
- * // Or you can save a line of code by using an inline function
- * // and on()'s return value.
- * var onValueChange = ref.on('value', function(dataSnapshot) { ... });
- * // Sometime later...
- * ref.off('value', onValueChange);
- * ```
- *
- * @param eventType One of the following strings: "value",
- * "child_added", "child_changed", "child_removed", or "child_moved." If
- * omitted, all callbacks for the `Reference` will be removed.
- * @param callback The callback function that was passed to `on()` or
- * `undefined` to remove all callbacks.
- * @param context The context that was passed to `on()`.
- */
- off(
- eventType?: EventType,
- callback?: (a: firebase.database.DataSnapshot, b?: string | null) => any,
- context?: Object | null
- ): void;
- /**
- * Gets the most up-to-date result for this query.
- *
- * @return A promise which resolves to the resulting DataSnapshot if
- * a value is available, or rejects if the client is unable to return
- * a value (e.g., if the server is unreachable and there is nothing
- * cached).
- */
- get(): Promise<DataSnapshot>;
- /**
- * Listens for data changes at a particular location.
- *
- * This is the primary way to read data from a Database. Your callback
- * will be triggered for the initial data and again whenever the data changes.
- * Use `off( )` to stop receiving updates. See
- * {@link https://firebase.google.com/docs/database/web/retrieve-data
- * Retrieve Data on the Web}
- * for more details.
- *
- * <h4>value event</h4>
- *
- * This event will trigger once with the initial data stored at this location,
- * and then trigger again each time the data changes. The `DataSnapshot` passed
- * to the callback will be for the location at which `on()` was called. It
- * won't trigger until the entire contents has been synchronized. If the
- * location has no data, it will be triggered with an empty `DataSnapshot`
- * (`val()` will return `null`).
- *
- * <h4>child_added event</h4>
- *
- * This event will be triggered once for each initial child at this location,
- * and it will be triggered again every time a new child is added. The
- * `DataSnapshot` passed into the callback will reflect the data for the
- * relevant child. For ordering purposes, it is passed a second argument which
- * is a string containing the key of the previous sibling child by sort order,
- * or `null` if it is the first child.
- *
- * <h4>child_removed event</h4>
- *
- * This event will be triggered once every time a child is removed. The
- * `DataSnapshot` passed into the callback will be the old data for the child
- * that was removed. A child will get removed when either:
- *
- * - a client explicitly calls `remove()` on that child or one of its ancestors
- * - a client calls `set(null)` on that child or one of its ancestors
- * - that child has all of its children removed
- * - there is a query in effect which now filters out the child (because it's
- * sort order changed or the max limit was hit)
- *
- * <h4>child_changed event</h4>
- *
- * This event will be triggered when the data stored in a child (or any of its
- * descendants) changes. Note that a single `child_changed` event may represent
- * multiple changes to the child. The `DataSnapshot` passed to the callback will
- * contain the new child contents. For ordering purposes, the callback is also
- * passed a second argument which is a string containing the key of the previous
- * sibling child by sort order, or `null` if it is the first child.
- *
- * <h4>child_moved event</h4>
- *
- * This event will be triggered when a child's sort order changes such that its
- * position relative to its siblings changes. The `DataSnapshot` passed to the
- * callback will be for the data of the child that has moved. It is also passed
- * a second argument which is a string containing the key of the previous
- * sibling child by sort order, or `null` if it is the first child.
- *
- * @example **Handle a new value:**
- * ```javascript
- * ref.on('value', function(dataSnapshot) {
- * ...
- * });
- * ```
- *
- * @example **Handle a new child:**
- * ```javascript
- * ref.on('child_added', function(childSnapshot, prevChildKey) {
- * ...
- * });
- * ```
- *
- * @example **Handle child removal:**
- * ```javascript
- * ref.on('child_removed', function(oldChildSnapshot) {
- * ...
- * });
- * ```
- *
- * @example **Handle child data changes:**
- * ```javascript
- * ref.on('child_changed', function(childSnapshot, prevChildKey) {
- * ...
- * });
- * ```
- *
- * @example **Handle child ordering changes:**
- * ```javascript
- * ref.on('child_moved', function(childSnapshot, prevChildKey) {
- * ...
- * });
- * ```
- *
- * @param eventType One of the following strings: "value",
- * "child_added", "child_changed", "child_removed", or "child_moved."
- * @param callback A
- * callback that fires when the specified event occurs. The callback will be
- * passed a DataSnapshot. For ordering purposes, "child_added",
- * "child_changed", and "child_moved" will also be passed a string containing
- * the key of the previous child, by sort order, or `null` if it is the
- * first child.
- * @param cancelCallbackOrContext An optional
- * callback that will be notified if your event subscription is ever canceled
- * because your client does not have permission to read this data (or it had
- * permission but has now lost it). This callback will be passed an `Error`
- * object indicating why the failure occurred.
- * @param context If provided, this object will be used as `this`
- * when calling your callback(s).
- * @return The provided
- * callback function is returned unmodified. This is just for convenience if
- * you want to pass an inline function to `on()` but store the callback
- * function for later passing to `off()`.
- */
- on(
- eventType: EventType,
- callback: (a: firebase.database.DataSnapshot, b?: string | null) => any,
- cancelCallbackOrContext?: ((a: Error) => any) | Object | null,
- context?: Object | null
- ): (a: firebase.database.DataSnapshot | null, b?: string | null) => any;
- /**
- * Listens for exactly one event of the specified event type, and then stops
- * listening.
- *
- * This is equivalent to calling {@link firebase.database.Query.on `on()`}, and
- * then calling {@link firebase.database.Query.off `off()`} inside the callback
- * function. See {@link firebase.database.Query.on `on()`} for details on the
- * event types.
- *
- * @example
- * ```javascript
- * // Basic usage of .once() to read the data located at ref.
- * ref.once('value')
- * .then(function(dataSnapshot) {
- * // handle read data.
- * });
- * ```
- *
- * @param eventType One of the following strings: "value",
- * "child_added", "child_changed", "child_removed", or "child_moved."
- * @param successCallback A
- * callback that fires when the specified event occurs. The callback will be
- * passed a DataSnapshot. For ordering purposes, "child_added",
- * "child_changed", and "child_moved" will also be passed a string containing
- * the key of the previous child by sort order, or `null` if it is the
- * first child.
- * @param failureCallbackOrContext An optional
- * callback that will be notified if your client does not have permission to
- * read the data. This callback will be passed an `Error` object indicating
- * why the failure occurred.
- * @param context If provided, this object will be used as `this`
- * when calling your callback(s).
- */
- once(
- eventType: EventType,
- successCallback?: (
- a: firebase.database.DataSnapshot,
- b?: string | null
- ) => any,
- failureCallbackOrContext?: ((a: Error) => void) | Object | null,
- context?: Object | null
- ): Promise<firebase.database.DataSnapshot>;
- /**
- * Generates a new `Query` object ordered by the specified child key.
- *
- * Queries can only order by one key at a time. Calling `orderByChild()`
- * multiple times on the same query is an error.
- *
- * Firebase queries allow you to order your data by any child key on the fly.
- * However, if you know in advance what your indexes will be, you can define
- * them via the .indexOn rule in your Security Rules for better performance. See
- * the {@link https://firebase.google.com/docs/database/security/indexing-data
- * .indexOn} rule for more information.
- *
- * You can read more about `orderByChild()` in
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#sort_data
- * Sort data}.
- *
- * @example
- * ```javascript
- * var ref = firebase.database().ref("dinosaurs");
- * ref.orderByChild("height").on("child_added", function(snapshot) {
- * console.log(snapshot.key + " was " + snapshot.val().height + " m tall");
- * });
- * ```
- */
- orderByChild(path: string): firebase.database.Query;
- /**
- * Generates a new `Query` object ordered by key.
- *
- * Sorts the results of a query by their (ascending) key values.
- *
- * You can read more about `orderByKey()` in
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#sort_data
- * Sort data}.
- *
- * @example
- * ```javascript
- * var ref = firebase.database().ref("dinosaurs");
- * ref.orderByKey().on("child_added", function(snapshot) {
- * console.log(snapshot.key);
- * });
- * ```
- */
- orderByKey(): firebase.database.Query;
- /**
- * Generates a new `Query` object ordered by priority.
- *
- * Applications need not use priority but can order collections by
- * ordinary properties (see
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#sort_data
- * Sort data} for alternatives to priority.
- */
- orderByPriority(): firebase.database.Query;
- /**
- * Generates a new `Query` object ordered by value.
- *
- * If the children of a query are all scalar values (string, number, or
- * boolean), you can order the results by their (ascending) values.
- *
- * You can read more about `orderByValue()` in
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#sort_data
- * Sort data}.
- *
- * @example
- * ```javascript
- * var scoresRef = firebase.database().ref("scores");
- * scoresRef.orderByValue().limitToLast(3).on("value", function(snapshot) {
- * snapshot.forEach(function(data) {
- * console.log("The " + data.key + " score is " + data.val());
- * });
- * });
- * ```
- */
- orderByValue(): firebase.database.Query;
- /**
- * Returns a `Reference` to the `Query`'s location.
- */
- ref: firebase.database.Reference;
- /**
- * Creates a `Query` with the specified starting point.
- *
- * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`
- * allows you to choose arbitrary starting and ending points for your queries.
- *
- * The starting point is inclusive, so children with exactly the specified value
- * will be included in the query. The optional key argument can be used to
- * further limit the range of the query. If it is specified, then children that
- * have exactly the specified value must also have a key name greater than or
- * equal to the specified key.
- *
- * You can read more about `startAt()` in
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data
- * Filtering data}.
- *
- * @example
- * ```javascript
- * // Find all dinosaurs that are at least three meters tall.
- * var ref = firebase.database().ref("dinosaurs");
- * ref.orderByChild("height").startAt(3).on("child_added", function(snapshot) {
- * console.log(snapshot.key)
- * });
- * ```
- *
- * @param value The value to start at. The argument
- * type depends on which `orderBy*()` function was used in this query.
- * Specify a value that matches the `orderBy*()` type. When used in
- * combination with `orderByKey()`, the value must be a string.
- * @param key The child key to start at. This argument is only allowed
- * if ordering by child, value, or priority.
- */
- startAt(
- value: number | string | boolean | null,
- key?: string
- ): firebase.database.Query;
- /**
- * Creates a `Query` with the specified starting point (exclusive).
- *
- * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`
- * allows you to choose arbitrary starting and ending points for your queries.
- *
- * The starting point is exclusive. If only a value is provided, children
- * with a value greater than the specified value will be included in the query.
- * If a key is specified, then children must have a value greater than or equal
- * to the specified value and a a key name greater than the specified key.
- *
- * @example
- * ```javascript
- * // Find all dinosaurs that are more than three meters tall.
- * var ref = firebase.database().ref("dinosaurs");
- * ref.orderByChild("height").startAfter(3).on("child_added", function(snapshot) {
- * console.log(snapshot.key)
- * });
- * ```
- *
- * @param value The value to start after. The argument
- * type depends on which `orderBy*()` function was used in this query.
- * Specify a value that matches the `orderBy*()` type. When used in
- * combination with `orderByKey()`, the value must be a string.
- * @param key The child key to start after. This argument is only allowed
- * if ordering by child, value, or priority.
- */
- startAfter(
- value: number | string | boolean | null,
- key?: string
- ): firebase.database.Query;
- /**
- * Returns a JSON-serializable representation of this object.
- *
- * @return A JSON-serializable representation of this object.
- */
- toJSON(): Object;
- /**
- * Gets the absolute URL for this location.
- *
- * The `toString()` method returns a URL that is ready to be put into a browser,
- * curl command, or a `firebase.database().refFromURL()` call. Since all of
- * those expect the URL to be url-encoded, `toString()` returns an encoded URL.
- *
- * Append '.json' to the returned URL when typed into a browser to download
- * JSON-formatted data. If the location is secured (that is, not publicly
- * readable), you will get a permission-denied error.
- *
- * @example
- * ```javascript
- * // Calling toString() on a root Firebase reference returns the URL where its
- * // data is stored within the Database:
- * var rootRef = firebase.database().ref();
- * var rootUrl = rootRef.toString();
- * // rootUrl === "https://sample-app.firebaseio.com/".
- *
- * // Calling toString() at a deeper Firebase reference returns the URL of that
- * // deep path within the Database:
- * var adaRef = rootRef.child('users/ada');
- * var adaURL = adaRef.toString();
- * // adaURL === "https://sample-app.firebaseio.com/users/ada".
- * ```
- *
- * @return The absolute URL for this location.
- */
- toString(): string;
- }
- /**
- * A `Reference` represents a specific location in your Database and can be used
- * for reading or writing data to that Database location.
- *
- * You can reference the root or child location in your Database by calling
- * `firebase.database().ref()` or `firebase.database().ref("child/path")`.
- *
- * Writing is done with the `set()` method and reading can be done with the
- * `on()` method. See
- * {@link
- * https://firebase.google.com/docs/database/web/read-and-write
- * Read and Write Data on the Web}
- */
- interface Reference extends firebase.database.Query {
- /**
- * Gets a `Reference` for the location at the specified relative path.
- *
- * The relative path can either be a simple child name (for example, "ada") or
- * a deeper slash-separated path (for example, "ada/name/first").
- *
- * @example
- * ```javascript
- * var usersRef = firebase.database().ref('users');
- * var adaRef = usersRef.child('ada');
- * var adaFirstNameRef = adaRef.child('name/first');
- * var path = adaFirstNameRef.toString();
- * // path is now 'https://sample-app.firebaseio.com/users/ada/name/first'
- * ```
- *
- * @param path A relative path from this location to the desired child
- * location.
- * @return The specified child location.
- */
- child(path: string): firebase.database.Reference;
- /**
- * The last part of the `Reference`'s path.
- *
- * For example, `"ada"` is the key for
- * `https://<DATABASE_NAME>.firebaseio.com/users/ada`.
- *
- * The key of a root `Reference` is `null`.
- *
- * @example
- * ```javascript
- * // The key of a root reference is null
- * var rootRef = firebase.database().ref();
- * var key = rootRef.key; // key === null
- * ```
- *
- * @example
- * ```javascript
- * // The key of any non-root reference is the last token in the path
- * var adaRef = firebase.database().ref("users/ada");
- * var key = adaRef.key; // key === "ada"
- * key = adaRef.child("name/last").key; // key === "last"
- * ```
- */
- key: string | null;
- /**
- * Returns an `OnDisconnect` object - see
- * {@link
- * https://firebase.google.com/docs/database/web/offline-capabilities
- * Enabling Offline Capabilities in JavaScript} for more information on how
- * to use it.
- */
- onDisconnect(): firebase.database.OnDisconnect;
- /**
- * The parent location of a `Reference`.
- *
- * The parent of a root `Reference` is `null`.
- *
- * @example
- * ```javascript
- * // The parent of a root reference is null
- * var rootRef = firebase.database().ref();
- * parent = rootRef.parent; // parent === null
- * ```
- *
- * @example
- * ```javascript
- * // The parent of any non-root reference is the parent location
- * var usersRef = firebase.database().ref("users");
- * var adaRef = firebase.database().ref("users/ada");
- * // usersRef and adaRef.parent represent the same location
- * ```
- */
- parent: firebase.database.Reference | null;
- /**
- * Generates a new child location using a unique key and returns its
- * `Reference`.
- *
- * This is the most common pattern for adding data to a collection of items.
- *
- * If you provide a value to `push()`, the value is written to the
- * generated location. If you don't pass a value, nothing is written to the
- * database and the child remains empty (but you can use the `Reference`
- * elsewhere).
- *
- * The unique keys generated by `push()` are ordered by the current time, so the
- * resulting list of items is chronologically sorted. The keys are also
- * designed to be unguessable (they contain 72 random bits of entropy).
- *
- *
- * See
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#append_to_a_list_of_data
- * Append to a list of data}
- * </br>See
- * {@link
- * https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html
- * The 2^120 Ways to Ensure Unique Identifiers}
- *
- * @example
- * ```javascript
- * var messageListRef = firebase.database().ref('message_list');
- * var newMessageRef = messageListRef.push();
- * newMessageRef.set({
- * 'user_id': 'ada',
- * 'text': 'The Analytical Engine weaves algebraical patterns just as the Jacquard loom weaves flowers and leaves.'
- * });
- * // We've appended a new message to the message_list location.
- * var path = newMessageRef.toString();
- * // path will be something like
- * // 'https://sample-app.firebaseio.com/message_list/-IKo28nwJLH0Nc5XeFmj'
- * ```
- *
- * @param value Optional value to be written at the generated location.
- * @param onComplete Callback called when write to server is
- * complete.
- * @return Combined `Promise` and `Reference`; resolves when write is complete, but can be
- * used immediately as the `Reference` to the child location.
- */
- push(
- value?: any,
- onComplete?: (a: Error | null) => any
- ): firebase.database.ThenableReference;
- /**
- * Removes the data at this Database location.
- *
- * Any data at child locations will also be deleted.
- *
- * The effect of the remove will be visible immediately and the corresponding
- * event 'value' will be triggered. Synchronization of the remove to the
- * Firebase servers will also be started, and the returned Promise will resolve
- * when complete. If provided, the onComplete callback will be called
- * asynchronously after synchronization has finished.
- *
- * @example
- * ```javascript
- * var adaRef = firebase.database().ref('users/ada');
- * adaRef.remove()
- * .then(function() {
- * console.log("Remove succeeded.")
- * })
- * .catch(function(error) {
- * console.log("Remove failed: " + error.message)
- * });
- * ```
- *
- * @param onComplete Callback called when write to server is
- * complete.
- * @return Resolves when remove on server is complete.
- */
- remove(onComplete?: (a: Error | null) => void): Promise<void>;
- /**
- * The root `Reference` of the Database.
- *
- * @example
- * ```javascript
- * // The root of a root reference is itself
- * var rootRef = firebase.database().ref();
- * // rootRef and rootRef.root represent the same location
- * ```
- *
- * @example
- * ```javascript
- * // The root of any non-root reference is the root location
- * var adaRef = firebase.database().ref("users/ada");
- * // rootRef and adaRef.root represent the same location
- * ```
- */
- root: firebase.database.Reference;
- /**
- * Writes data to this Database location.
- *
- * This will overwrite any data at this location and all child locations.
- *
- * The effect of the write will be visible immediately, and the corresponding
- * events ("value", "child_added", etc.) will be triggered. Synchronization of
- * the data to the Firebase servers will also be started, and the returned
- * Promise will resolve when complete. If provided, the `onComplete` callback
- * will be called asynchronously after synchronization has finished.
- *
- * Passing `null` for the new value is equivalent to calling `remove()`; namely,
- * all data at this location and all child locations will be deleted.
- *
- * `set()` will remove any priority stored at this location, so if priority is
- * meant to be preserved, you need to use `setWithPriority()` instead.
- *
- * Note that modifying data with `set()` will cancel any pending transactions
- * at that location, so extreme care should be taken if mixing `set()` and
- * `transaction()` to modify the same data.
- *
- * A single `set()` will generate a single "value" event at the location where
- * the `set()` was performed.
- *
- * @example
- * ```javascript
- * var adaNameRef = firebase.database().ref('users/ada/name');
- * adaNameRef.child('first').set('Ada');
- * adaNameRef.child('last').set('Lovelace');
- * // We've written 'Ada' to the Database location storing Ada's first name,
- * // and 'Lovelace' to the location storing her last name.
- * ```
- *
- * @example
- * ```javascript
- * adaNameRef.set({ first: 'Ada', last: 'Lovelace' });
- * // Exact same effect as the previous example, except we've written
- * // Ada's first and last name simultaneously.
- * ```
- *
- * @example
- * ```javascript
- * adaNameRef.set({ first: 'Ada', last: 'Lovelace' })
- * .then(function() {
- * console.log('Synchronization succeeded');
- * })
- * .catch(function(error) {
- * console.log('Synchronization failed');
- * });
- * // Same as the previous example, except we will also log a message
- * // when the data has finished synchronizing.
- * ```
- *
- * @param value The value to be written (string, number, boolean, object,
- * array, or null).
- * @param onComplete Callback called when write to server is
- * complete.
- * @return Resolves when write to server is complete.
- */
- set(value: any, onComplete?: (a: Error | null) => void): Promise<void>;
- /**
- * Sets a priority for the data at this Database location.
- *
- * Applications need not use priority but can order collections by
- * ordinary properties (see
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data
- * Sorting and filtering data}).
- */
- setPriority(
- priority: string | number | null,
- onComplete: (a: Error | null) => void
- ): Promise<void>;
- /**
- * Writes data the Database location. Like `set()` but also specifies the
- * priority for that data.
- *
- * Applications need not use priority but can order collections by
- * ordinary properties (see
- * {@link
- * https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data
- * Sorting and filtering data}).
- */
- setWithPriority(
- newVal: any,
- newPriority: string | number | null,
- onComplete?: (a: Error | null) => void
- ): Promise<void>;
- /**
- * Atomically modifies the data at this location.
- *
- * Atomically modify the data at this location. Unlike a normal `set()`, which
- * just overwrites the data regardless of its previous value, `transaction()` is
- * used to modify the existing value to a new value, ensuring there are no
- * conflicts with other clients writing to the same location at the same time.
- *
- * To accomplish this, you pass `transaction()` an update function which is used
- * to transform the current value into a new value. If another client writes to
- * the location before your new value is successfully written, your update
- * function will be called again with the new current value, and the write will
- * be retried. This will happen repeatedly until your write succeeds without
- * conflict or you abort the transaction by not returning a value from your
- * update function.
- *
- * Note: Modifying data with `set()` will cancel any pending transactions at
- * that location, so extreme care should be taken if mixing `set()` and
- * `transaction()` to update the same data.
- *
- * Note: When using transactions with Security and Firebase Rules in place, be
- * aware that a client needs `.read` access in addition to `.write` access in
- * order to perform a transaction. This is because the client-side nature of
- * transactions requires the client to read the data in order to transactionally
- * update it.
- *
- * @example
- * ```javascript
- * // Increment Ada's rank by 1.
- * var adaRankRef = firebase.database().ref('users/ada/rank');
- * adaRankRef.transaction(function(currentRank) {
- * // If users/ada/rank has never been set, currentRank will be `null`.
- * return currentRank + 1;
- * });
- * ```
- *
- * @example
- * ```javascript
- * // Try to create a user for ada, but only if the user id 'ada' isn't
- * // already taken
- * var adaRef = firebase.database().ref('users/ada');
- * adaRef.transaction(function(currentData) {
- * if (currentData === null) {
- * return { name: { first: 'Ada', last: 'Lovelace' } };
- * } else {
- * console.log('User ada already exists.');
- * return; // Abort the transaction.
- * }
- * }, function(error, committed, snapshot) {
- * if (error) {
- * console.log('Transaction failed abnormally!', error);
- * } else if (!committed) {
- * console.log('We aborted the transaction (because ada already exists).');
- * } else {
- * console.log('User ada added!');
- * }
- * console.log("Ada's data: ", snapshot.val());
- * });
- * ```
- *
- * @param transactionUpdate A developer-supplied function which
- * will be passed the current data stored at this location (as a JavaScript
- * object). The function should return the new value it would like written (as
- * a JavaScript object). If `undefined` is returned (i.e. you return with no
- * arguments) the transaction will be aborted and the data at this location
- * will not be modified.
- * @param onComplete A callback
- * function that will be called when the transaction completes. The callback
- * is passed three arguments: a possibly-null `Error`, a `boolean` indicating
- * whether the transaction was committed, and a `DataSnapshot` indicating the
- * final result. If the transaction failed abnormally, the first argument will
- * be an `Error` object indicating the failure cause. If the transaction
- * finished normally, but no data was committed because no data was returned
- * from `transactionUpdate`, then second argument will be false. If the
- * transaction completed and committed data to Firebase, the second argument
- * will be true. Regardless, the third argument will be a `DataSnapshot`
- * containing the resulting data in this location.
- * @param applyLocally By default, events are raised each time the
- * transaction update function runs. So if it is run multiple times, you may
- * see intermediate states. You can set this to false to suppress these
- * intermediate states and instead wait until the transaction has completed
- * before events are raised.
- * @return Returns a Promise that can optionally be used instead of the onComplete
- * callback to handle success and failure.
- */
- transaction(
- transactionUpdate: (a: any) => any,
- onComplete?: (
- a: Error | null,
- b: boolean,
- c: firebase.database.DataSnapshot | null
- ) => void,
- applyLocally?: boolean
- ): Promise<TransactionResult>;
- /**
- * Writes multiple values to the Database at once.
- *
- * The `values` argument contains multiple property-value pairs that will be
- * written to the Database together. Each child property can either be a simple
- * property (for example, "name") or a relative path (for example,
- * "name/first") from the current location to the data to update.
- *
- * As opposed to the `set()` method, `update()` can be use to selectively update
- * only the referenced properties at the current location (instead of replacing
- * all the child properties at the current location).
- *
- * The effect of the write will be visible immediately, and the corresponding
- * events ('value', 'child_added', etc.) will be triggered. Synchronization of
- * the data to the Firebase servers will also be started, and the returned
- * Promise will resolve when complete. If provided, the `onComplete` callback
- * will be called asynchronously after synchronization has finished.
- *
- * A single `update()` will generate a single "value" event at the location
- * where the `update()` was performed, regardless of how many children were
- * modified.
- *
- * Note that modifying data with `update()` will cancel any pending
- * transactions at that location, so extreme care should be taken if mixing
- * `update()` and `transaction()` to modify the same data.
- *
- * Passing `null` to `update()` will remove the data at this location.
- *
- * See
- * {@link
- * https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html
- * Introducing multi-location updates and more}.
- *
- * @example
- * ```javascript
- * var adaNameRef = firebase.database().ref('users/ada/name');
- * // Modify the 'first' and 'last' properties, but leave other data at
- * // adaNameRef unchanged.
- * adaNameRef.update({ first: 'Ada', last: 'Lovelace' });
- * ```
- *
- * @param values Object containing multiple values.
- * @param onComplete Callback called when write to server is
- * complete.
- * @return Resolves when update on server is complete.
- */
- update(
- values: Object,
- onComplete?: (a: Error | null) => void
- ): Promise<void>;
- }
- interface TransactionResult {
- /**
- * Whether the transaction was successfully committed.
- */
- committed: boolean;
- /**
- * The resulting data snapshot.
- */
- snapshot: DataSnapshot;
- }
- interface ThenableReference
- extends firebase.database.Reference,
- Pick<Promise<Reference>, 'then' | 'catch'> {}
- /**
- * Logs debugging information to the console.
- *
- * @example
- * ```javascript
- * // Enable logging
- * firebase.database.enableLogging(true);
- * ```
- *
- * @example
- * ```javascript
- * // Disable logging
- * firebase.database.enableLogging(false);
- * ```
- *
- * @example
- * ```javascript
- * // Enable logging across page refreshes
- * firebase.database.enableLogging(true, true);
- * ```
- *
- * @example
- * ```javascript
- * // Provide custom logger which prefixes log statements with "[FIREBASE]"
- * firebase.database.enableLogging(function(message) {
- * console.log("[FIREBASE]", message);
- * });
- * ```
- *
- * @param logger Enables logging if `true`;
- * disables logging if `false`. You can also provide a custom logger function
- * to control how things get logged.
- * @param persistent Remembers the logging state between page
- * refreshes if `true`.
- */
- function enableLogging(
- logger?: boolean | ((a: string) => any),
- persistent?: boolean
- ): any;
- export type EmulatorMockTokenOptions = firebase.EmulatorMockTokenOptions;
- }
- declare namespace firebase.database.ServerValue {
- /**
- * A placeholder value for auto-populating the current timestamp (time
- * since the Unix epoch, in milliseconds) as determined by the Firebase
- * servers.
- *
- * @example
- * ```javascript
- * var sessionsRef = firebase.database().ref("sessions");
- * sessionsRef.push({
- * startedAt: firebase.database.ServerValue.TIMESTAMP
- * });
- * ```
- */
- var TIMESTAMP: Object;
- /**
- * Returns a placeholder value that can be used to atomically increment the
- * current database value by the provided delta.
- *
- * @param delta the amount to modify the current value atomically.
- * @return a placeholder value for modifying data atomically server-side.
- */
- function increment(delta: number): Object;
- }
- /**
- * The Messaging SDK does not work in a Node.js environment.
- */
- declare namespace firebase.messaging {
- /**
- * The Firebase Messaging service interface.
- *
- * Do not call this constructor directly. Instead, use
- * {@link firebase.messaging `firebase.messaging()`}.
- *
- * See {@link https://firebase.google.com/docs/cloud-messaging/js/client
- * Set Up a JavaScript Firebase Cloud Messaging Client App} for a full guide on how to use the
- * Firebase Messaging service.
- *
- */
- interface Messaging {
- /**
- * Deletes the registration token associated with this messaging instance and unsubscribes the
- * messaging instance from the push subscription.
- *
- * @return The promise resolves when the token has been successfully deleted.
- */
- deleteToken(): Promise<boolean>;
- /**
- * Subscribes the messaging instance to push notifications. Returns an FCM registration token
- * that can be used to send push messages to that messaging instance.
- *
- * If a notification permission isn't already granted, this method asks the user for permission.
- * The returned promise rejects if the user does not allow the app to show notifications.
- *
- * @param options.vapidKey The public server key provided to push services. It is used to
- * authenticate the push subscribers to receive push messages only from sending servers that
- * hold the corresponding private key. If it is not provided, a default VAPID key is used. Note
- * that some push services (Chrome Push Service) require a non-default VAPID key. Therefore, it
- * is recommended to generate and import a VAPID key for your project with
- * {@link https://firebase.google.com/docs/cloud-messaging/js/client#configure_web_credentials_with_fcm Configure Web Credentials with FCM}.
- * See
- * {@link https://developers.google.com/web/fundamentals/push-notifications/web-push-protocol The Web Push Protocol}
- * for details on web push services.}
- *
- * @param options.serviceWorkerRegistration The service worker registration for receiving push
- * messaging. If the registration is not provided explicitly, you need to have a
- * `firebase-messaging-sw.js` at your root location. See
- * {@link https://firebase.google.com/docs/cloud-messaging/js/client#retrieve-the-current-registration-token Retrieve the current registration token}
- * for more details.
- *
- * @return The promise resolves with an FCM registration token.
- *
- */
- getToken(options?: {
- vapidKey?: string;
- serviceWorkerRegistration?: ServiceWorkerRegistration;
- }): Promise<string>;
- /**
- * When a push message is received and the user is currently on a page for your origin, the
- * message is passed to the page and an `onMessage()` event is dispatched with the payload of
- * the push message.
- *
- * @param
- * nextOrObserver This function, or observer object with `next` defined,
- * is called when a message is received and the user is currently viewing your page.
- * @return To stop listening for messages execute this returned function.
- */
- onMessage(
- nextOrObserver: firebase.NextFn<any> | firebase.Observer<any>
- ): firebase.Unsubscribe;
- /**
- * Called when a message is received while the app is in the background. An app is considered to
- * be in the background if no active window is displayed.
- *
- * @param
- * nextOrObserver This function, or observer object with `next` defined,
- * is called when a message is received and the app is currently in the background.
- *
- * @return To stop listening for messages execute this returned function
- */
- onBackgroundMessage(
- nextOrObserver:
- | firebase.NextFn<MessagePayload>
- | firebase.Observer<MessagePayload>
- ): firebase.Unsubscribe;
- }
- /**
- * Message payload that contains the notification payload that is represented with
- * {@link firebase.messaging.NotificationPayload} and the data payload that contains an arbitrary
- * number of key-value pairs sent by developers through the
- * {@link https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#notification Send API}
- */
- export interface MessagePayload {
- /**
- * See {@link firebase.messaging.NotificationPayload}.
- */
- notification?: NotificationPayload;
- /**
- * Arbitrary key/value pairs.
- */
- data?: { [key: string]: string };
- /**
- * See {@link firebase.messaging.FcmOptions}.
- */
- fcmOptions?: FcmOptions;
- /**
- * The sender of this message.
- */
- from: string;
- /**
- * The collapse key of this message. See
- * {@link https://firebase.google.com/docs/cloud-messaging/concept-options#collapsible_and_non-collapsible_messages
- * Collapsible and non-collapsible messages}.
- */
- collapseKey: string;
- }
- /**
- * Options for features provided by the FCM SDK for Web. See
- * {@link https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#webpushfcmoptions
- * WebpushFcmOptions}.
- */
- export interface FcmOptions {
- /**
- * The link to open when the user clicks on the notification. For all URL values, HTTPS is
- * required. For example, by setting this value to your app's URL, a notification click event
- * will put your app in focus for the user.
- */
- link?: string;
- /**
- * Label associated with the message's analytics data. See
- * {@link https://firebase.google.com/docs/cloud-messaging/understand-delivery#adding-analytics-labels-to-messages
- * Adding analytics labels}.
- */
- analyticsLabel?: string;
- }
- /**
- * Parameters that define how a push notification is displayed to users.
- */
- export interface NotificationPayload {
- /**
- * The title of a notification.
- */
- title?: string;
- /**
- * The body of a notification.
- */
- body?: string;
- /**
- * The URL of the image that is shown with the notification. See
- * {@link https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#notification
- * `notification.image`} for supported image format.
- */
- image?: string;
- }
- function isSupported(): boolean;
- }
- declare namespace firebase.storage {
- /**
- * The full set of object metadata, including read-only properties.
- */
- interface FullMetadata extends firebase.storage.UploadMetadata {
- /**
- * The bucket this object is contained in.
- */
- bucket: string;
- /**
- * The full path of this object.
- */
- fullPath: string;
- /**
- * The object's generation.
- * @see {@link https://cloud.google.com/storage/docs/generations-preconditions}
- */
- generation: string;
- /**
- * The object's metageneration.
- * @see {@link https://cloud.google.com/storage/docs/generations-preconditions}
- */
- metageneration: string;
- /**
- * The short name of this object, which is the last component of the full path.
- * For example, if fullPath is 'full/path/image.png', name is 'image.png'.
- */
- name: string;
- /**
- * The size of this object, in bytes.
- */
- size: number;
- /**
- * A date string representing when this object was created.
- */
- timeCreated: string;
- /**
- * A date string representing when this object was last updated.
- */
- updated: string;
- }
- /**
- * Represents a reference to a Google Cloud Storage object. Developers can
- * upload, download, and delete objects, as well as get/set object metadata.
- */
- interface Reference {
- /**
- * The name of the bucket containing this reference's object.
- */
- bucket: string;
- /**
- * Returns a reference to a relative path from this reference.
- * @param path The relative path from this reference.
- * Leading, trailing, and consecutive slashes are removed.
- * @return The reference to the given path.
- */
- child(path: string): firebase.storage.Reference;
- /**
- * Deletes the object at this reference's location.
- * @return A Promise that resolves if the deletion
- * succeeded and rejects if it failed, including if the object didn't exist.
- */
- delete(): Promise<void>;
- /**
- * The full path of this object.
- */
- fullPath: string;
- /**
- * Fetches a long lived download URL for this object.
- * @return A Promise that resolves with the download
- * URL or rejects if the fetch failed, including if the object did not
- * exist.
- */
- getDownloadURL(): Promise<string>;
- /**
- * Fetches metadata for the object at this location, if one exists.
- * @return A Promise that
- * resolves with the metadata, or rejects if the fetch failed, including if
- * the object did not exist.
- */
- getMetadata(): Promise<FullMetadata>;
- /**
- * The short name of this object, which is the last component of the full path.
- * For example, if fullPath is 'full/path/image.png', name is 'image.png'.
- */
- name: string;
- /**
- * A reference pointing to the parent location of this reference, or null if
- * this reference is the root.
- */
- parent: firebase.storage.Reference | null;
- /**
- * Uploads data to this reference's location.
- * @param data The data to upload.
- * @param metadata Metadata for the newly
- * uploaded object.
- * @return An object that can be used to monitor
- * and manage the upload.
- */
- put(
- data: Blob | Uint8Array | ArrayBuffer,
- metadata?: firebase.storage.UploadMetadata
- ): firebase.storage.UploadTask;
- /**
- * Uploads string data to this reference's location.
- * @param data The string to upload.
- * @param format The format of the string to
- * upload.
- * @param metadata Metadata for the newly
- * uploaded object.
- * @throws If the format is not an allowed format, or if the given string
- * doesn't conform to the specified format.
- */
- putString(
- data: string,
- format?: firebase.storage.StringFormat,
- metadata?: firebase.storage.UploadMetadata
- ): firebase.storage.UploadTask;
- /**
- * A reference to the root of this reference's bucket.
- */
- root: firebase.storage.Reference;
- /**
- * The storage service associated with this reference.
- */
- storage: firebase.storage.Storage;
- /**
- * Returns a gs:// URL for this object in the form
- * `gs://<bucket>/<path>/<to>/<object>`
- * @return The gs:// URL.
- */
- toString(): string;
- /**
- * Updates the metadata for the object at this location, if one exists.
- * @param metadata The new metadata.
- * Setting a property to 'null' removes it on the server, while leaving
- * a property as 'undefined' has no effect.
- * @return A Promise that
- * resolves with the full updated metadata or rejects if the updated failed,
- * including if the object did not exist.
- */
- updateMetadata(
- metadata: firebase.storage.SettableMetadata
- ): Promise<FullMetadata>;
- /**
- * List all items (files) and prefixes (folders) under this storage reference.
- *
- * This is a helper method for calling `list()` repeatedly until there are
- * no more results. The default pagination size is 1000.
- *
- * Note: The results may not be consistent if objects are changed while this
- * operation is running.
- *
- * Warning: `listAll` may potentially consume too many resources if there are
- * too many results.
- *
- * @return A Promise that resolves with all the items and prefixes under
- * the current storage reference. `prefixes` contains references to
- * sub-directories and `items` contains references to objects in this
- * folder. `nextPageToken` is never returned.
- */
- listAll(): Promise<ListResult>;
- /**
- * List items (files) and prefixes (folders) under this storage reference.
- *
- * List API is only available for Firebase Rules Version 2.
- *
- * GCS is a key-blob store. Firebase Storage imposes the semantic of '/'
- * delimited folder structure.
- * Refer to GCS's List API if you want to learn more.
- *
- * To adhere to Firebase Rules's Semantics, Firebase Storage does not
- * support objects whose paths end with "/" or contain two consecutive
- * "/"s. Firebase Storage List API will filter these unsupported objects.
- * `list()` may fail if there are too many unsupported objects in the bucket.
- *
- * @param options See `ListOptions` for details.
- * @return A Promise that resolves with the items and prefixes.
- * `prefixes` contains references to sub-folders and `items`
- * contains references to objects in this folder. `nextPageToken`
- * can be used to get the rest of the results.
- */
- list(options?: ListOptions): Promise<ListResult>;
- }
- /**
- * Result returned by list().
- */
- interface ListResult {
- /**
- * References to prefixes (sub-folders). You can call list() on them to
- * get its contents.
- *
- * Folders are implicit based on '/' in the object paths.
- * For example, if a bucket has two objects '/a/b/1' and '/a/b/2', list('/a')
- * will return '/a/b' as a prefix.
- */
- prefixes: Reference[];
- /**
- * Objects in this directory.
- * You can call getMetadata() and getDownloadUrl() on them.
- */
- items: Reference[];
- /**
- * If set, there might be more results for this list. Use this token to resume the list.
- */
- nextPageToken: string | null;
- }
- /**
- * The options `list()` accepts.
- */
- interface ListOptions {
- /**
- * If set, limits the total number of `prefixes` and `items` to return.
- * The default and maximum maxResults is 1000.
- */
- maxResults?: number | null;
- /**
- * The `nextPageToken` from a previous call to `list()`. If provided,
- * listing is resumed from the previous position.
- */
- pageToken?: string | null;
- }
- /**
- * Object metadata that can be set at any time.
- */
- interface SettableMetadata {
- /**
- * Served as the 'Cache-Control' header on object download.
- */
- cacheControl?: string | null;
- contentDisposition?: string | null;
- /**
- * Served as the 'Content-Encoding' header on object download.
- */
- contentEncoding?: string | null;
- /**
- * Served as the 'Content-Language' header on object download.
- */
- contentLanguage?: string | null;
- /**
- * Served as the 'Content-Type' header on object download.
- */
- contentType?: string | null;
- /**
- * Additional user-defined custom metadata.
- */
- customMetadata?: {
- [/* warning: coerced from ? */ key: string]: string;
- } | null;
- }
- /**
- * The Firebase Storage service interface.
- *
- * Do not call this constructor directly. Instead, use
- * {@link firebase.storage `firebase.storage()`}.
- *
- * See
- * {@link
- * https://firebase.google.com/docs/storage/web/start/
- * Get Started on Web}
- * for a full guide on how to use the Firebase Storage service.
- */
- interface Storage {
- /**
- * The {@link firebase.app.App app} associated with the `Storage` service
- * instance.
- *
- * @example
- * ```javascript
- * var app = storage.app;
- * ```
- */
- app: firebase.app.App;
- /**
- * The maximum time to retry operations other than uploads or downloads in
- * milliseconds.
- */
- maxOperationRetryTime: number;
- /**
- * The maximum time to retry uploads in milliseconds.
- */
- maxUploadRetryTime: number;
- /**
- * Returns a reference for the given path in the default bucket.
- * @param path A relative path to initialize the reference with,
- * for example `path/to/image.jpg`. If not passed, the returned reference
- * points to the bucket root.
- * @return A reference for the given path.
- */
- ref(path?: string): firebase.storage.Reference;
- /**
- * Returns a reference for the given absolute URL.
- * @param url A URL in the form: <br />
- * 1) a gs:// URL, for example `gs://bucket/files/image.png` <br />
- * 2) a download URL taken from object metadata. <br />
- * @return A reference for the given URL.
- */
- refFromURL(url: string): firebase.storage.Reference;
- /**
- * @param time The new maximum operation retry time in milliseconds.
- * @see {@link firebase.storage.Storage.maxOperationRetryTime}
- */
- setMaxOperationRetryTime(time: number): any;
- /**
- * @param time The new maximum upload retry time in milliseconds.
- * @see {@link firebase.storage.Storage.maxUploadRetryTime}
- */
- setMaxUploadRetryTime(time: number): any;
- /**
- * Modify this `Storage` instance to communicate with the Cloud Storage emulator.
- *
- * @param host - The emulator host (ex: localhost)
- * @param port - The emulator port (ex: 5001)
- * @param options.mockUserToken the mock auth token to use for unit testing Security Rules
- */
- useEmulator(
- host: string,
- port: number,
- options?: {
- mockUserToken?: EmulatorMockTokenOptions | string;
- }
- ): void;
- }
- /**
- * @enum {string}
- * An enumeration of the possible string formats for upload.
- */
- type StringFormat = string;
- var StringFormat: {
- /**
- * Indicates the string should be interpreted as base64-encoded data.
- * Padding characters (trailing '='s) are optional.
- * Example: The string 'rWmO++E6t7/rlw==' becomes the byte sequence
- * ad 69 8e fb e1 3a b7 bf eb 97
- */
- BASE64: StringFormat;
- /**
- * Indicates the string should be interpreted as base64url-encoded data.
- * Padding characters (trailing '='s) are optional.
- * Example: The string 'rWmO--E6t7_rlw==' becomes the byte sequence
- * ad 69 8e fb e1 3a b7 bf eb 97
- */
- BASE64URL: StringFormat;
- /**
- * Indicates the string is a data URL, such as one obtained from
- * canvas.toDataURL().
- * Example: the string 'data:application/octet-stream;base64,aaaa'
- * becomes the byte sequence
- * 69 a6 9a
- * (the content-type "application/octet-stream" is also applied, but can
- * be overridden in the metadata object).
- */
- DATA_URL: StringFormat;
- /**
- * Indicates the string should be interpreted "raw", that is, as normal text.
- * The string will be interpreted as UTF-16, then uploaded as a UTF-8 byte
- * sequence.
- * Example: The string 'Hello! \ud83d\ude0a' becomes the byte sequence
- * 48 65 6c 6c 6f 21 20 f0 9f 98 8a
- */
- RAW: StringFormat;
- };
- /**
- * An event that is triggered on a task.
- * @enum {string}
- * @see {@link firebase.storage.UploadTask.on}
- */
- type TaskEvent = string;
- var TaskEvent: {
- /**
- * For this event,
- * <ul>
- * <li>The `next` function is triggered on progress updates and when the
- * task is paused/resumed with a
- * {@link firebase.storage.UploadTaskSnapshot} as the first
- * argument.</li>
- * <li>The `error` function is triggered if the upload is canceled or fails
- * for another reason.</li>
- * <li>The `complete` function is triggered if the upload completes
- * successfully.</li>
- * </ul>
- */
- STATE_CHANGED: TaskEvent;
- };
- /**
- * Represents the current state of a running upload.
- * @enum {string}
- */
- type TaskState = string;
- var TaskState: {
- CANCELED: TaskState;
- ERROR: TaskState;
- PAUSED: TaskState;
- RUNNING: TaskState;
- SUCCESS: TaskState;
- };
- /**
- * Object metadata that can be set at upload.
- */
- interface UploadMetadata extends firebase.storage.SettableMetadata {
- /**
- * A Base64-encoded MD5 hash of the object being uploaded.
- */
- md5Hash?: string | null;
- }
- /**
- * Error codes that can be attached to `StorageError` objects.
- */
- export enum StorageErrorCode {
- UNKNOWN = 'unknown',
- OBJECT_NOT_FOUND = 'object-not-found',
- BUCKET_NOT_FOUND = 'bucket-not-found',
- PROJECT_NOT_FOUND = 'project-not-found',
- QUOTA_EXCEEDED = 'quota-exceeded',
- UNAUTHENTICATED = 'unauthenticated',
- UNAUTHORIZED = 'unauthorized',
- UNAUTHORIZED_APP = 'unauthorized-app',
- RETRY_LIMIT_EXCEEDED = 'retry-limit-exceeded',
- INVALID_CHECKSUM = 'invalid-checksum',
- CANCELED = 'canceled',
- INVALID_EVENT_NAME = 'invalid-event-name',
- INVALID_URL = 'invalid-url',
- INVALID_DEFAULT_BUCKET = 'invalid-default-bucket',
- NO_DEFAULT_BUCKET = 'no-default-bucket',
- CANNOT_SLICE_BLOB = 'cannot-slice-blob',
- SERVER_FILE_WRONG_SIZE = 'server-file-wrong-size',
- NO_DOWNLOAD_URL = 'no-download-url',
- INVALID_ARGUMENT = 'invalid-argument',
- INVALID_ARGUMENT_COUNT = 'invalid-argument-count',
- APP_DELETED = 'app-deleted',
- INVALID_ROOT_OPERATION = 'invalid-root-operation',
- INVALID_FORMAT = 'invalid-format',
- INTERNAL_ERROR = 'internal-error',
- UNSUPPORTED_ENVIRONMENT = 'unsupported-environment'
- }
- interface StorageObserver<T> {
- next?: NextFn<T> | null;
- error?: (error: FirebaseStorageError) => void | null;
- complete?: CompleteFn | null;
- }
- /**
- * Represents the process of uploading an object. Allows you to monitor and
- * manage the upload.
- */
- interface UploadTask {
- /**
- * Cancels a running task. Has no effect on a complete or failed task.
- * @return True if the cancel had an effect.
- */
- cancel(): boolean;
- /**
- * Equivalent to calling `then(null, onRejected)`.
- */
- catch(onRejected: (error: FirebaseStorageError) => any): Promise<any>;
- /**
- * Listens for events on this task.
- *
- * Events have three callback functions (referred to as `next`, `error`, and
- * `complete`).
- *
- * If only the event is passed, a function that can be used to register the
- * callbacks is returned. Otherwise, the callbacks are passed after the event.
- *
- * Callbacks can be passed either as three separate arguments <em>or</em> as the
- * `next`, `error`, and `complete` properties of an object. Any of the three
- * callbacks is optional, as long as at least one is specified. In addition,
- * when you add your callbacks, you get a function back. You can call this
- * function to unregister the associated callbacks.
- *
- * @example **Pass callbacks separately or in an object.**
- * ```javascript
- * var next = function(snapshot) {};
- * var error = function(error) {};
- * var complete = function() {};
- *
- * // The first example.
- * uploadTask.on(
- * firebase.storage.TaskEvent.STATE_CHANGED,
- * next,
- * error,
- * complete);
- *
- * // This is equivalent to the first example.
- * uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, {
- * 'next': next,
- * 'error': error,
- * 'complete': complete
- * });
- *
- * // This is equivalent to the first example.
- * var subscribe = uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED);
- * subscribe(next, error, complete);
- *
- * // This is equivalent to the first example.
- * var subscribe = uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED);
- * subscribe({
- * 'next': next,
- * 'error': error,
- * 'complete': complete
- * });
- * ```
- *
- * @example **Any callback is optional.**
- * ```javascript
- * // Just listening for completion, this is legal.
- * uploadTask.on(
- * firebase.storage.TaskEvent.STATE_CHANGED,
- * null,
- * null,
- * function() {
- * console.log('upload complete!');
- * });
- *
- * // Just listening for progress/state changes, this is legal.
- * uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, function(snapshot) {
- * var percent = snapshot.bytesTransferred / snapshot.totalBytes * 100;
- * console.log(percent + "% done");
- * });
- *
- * // This is also legal.
- * uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, {
- * 'complete': function() {
- * console.log('upload complete!');
- * }
- * });
- * ```
- *
- * @example **Use the returned function to remove callbacks.**
- * ```javascript
- * var unsubscribe = uploadTask.on(
- * firebase.storage.TaskEvent.STATE_CHANGED,
- * function(snapshot) {
- * var percent = snapshot.bytesTransferred / snapshot.totalBytes * 100;
- * console.log(percent + "% done");
- * // Stop after receiving one update.
- * unsubscribe();
- * });
- *
- * // This code is equivalent to the above.
- * var handle = uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED);
- * unsubscribe = handle(function(snapshot) {
- * var percent = snapshot.bytesTransferred / snapshot.totalBytes * 100;
- * console.log(percent + "% done");
- * // Stop after receiving one update.
- * unsubscribe();
- * });
- * ```
- *
- * @param event The event to listen for.
- * @param nextOrObserver
- * The `next` function, which gets called for each item in
- * the event stream, or an observer object with some or all of these three
- * properties (`next`, `error`, `complete`).
- * @param error A function that gets called with a `FirebaseStorageError`
- * if the event stream ends due to an error.
- * @param complete A function that gets called if the
- * event stream ends normally.
- * @return
- * If only the event argument is passed, returns a function you can use to
- * add callbacks (see the examples above). If more than just the event
- * argument is passed, returns a function you can call to unregister the
- * callbacks.
- */
- on(
- event: firebase.storage.TaskEvent,
- nextOrObserver?:
- | StorageObserver<UploadTaskSnapshot>
- | null
- | ((snapshot: UploadTaskSnapshot) => any),
- error?: ((error: FirebaseStorageError) => any) | null,
- complete?: firebase.Unsubscribe | null
- ): Function;
- /**
- * Pauses a running task. Has no effect on a paused or failed task.
- * @return True if the pause had an effect.
- */
- pause(): boolean;
- /**
- * Resumes a paused task. Has no effect on a running or failed task.
- * @return True if the resume had an effect.
- */
- resume(): boolean;
- /**
- * A snapshot of the current task state.
- */
- snapshot: firebase.storage.UploadTaskSnapshot;
- /**
- * This object behaves like a Promise, and resolves with its snapshot data when
- * the upload completes.
- * @param onFulfilled
- * The fulfillment callback. Promise chaining works as normal.
- * @param onRejected The rejection callback.
- */
- then(
- onFulfilled?:
- | ((snapshot: firebase.storage.UploadTaskSnapshot) => any)
- | null,
- onRejected?: ((error: FirebaseStorageError) => any) | null
- ): Promise<any>;
- }
- /**
- * Holds data about the current state of the upload task.
- */
- interface UploadTaskSnapshot {
- /**
- * The number of bytes that have been successfully uploaded so far.
- */
- bytesTransferred: number;
- /**
- * Before the upload completes, contains the metadata sent to the server.
- * After the upload completes, contains the metadata sent back from the server.
- */
- metadata: firebase.storage.FullMetadata;
- /**
- * The reference that spawned this snapshot's upload task.
- */
- ref: firebase.storage.Reference;
- /**
- * The current state of the task.
- */
- state: firebase.storage.TaskState;
- /**
- * The task of which this is a snapshot.
- */
- task: firebase.storage.UploadTask;
- /**
- * The total number of bytes to be uploaded.
- */
- totalBytes: number;
- }
- /**
- * An error returned by the Firebase Storage SDK.
- */
- export interface FirebaseStorageError extends FirebaseError {
- /**
- * Stores custom error data unique to the `StorageError`.
- */
- customData: {
- serverResponse: string | null;
- };
- get status(): number;
- set status(status: number);
- /**
- * Compares a `StorageErrorCode` against this error's code, filtering out the prefix.
- */
- _codeEquals(code: StorageErrorCode): boolean;
- /**
- * Optional response message that was added by the server.
- */
- get serverResponse(): null | string;
- set serverResponse(serverResponse: string | null);
- }
- }
- declare namespace firebase.firestore {
- /**
- * Document data (for use with `DocumentReference.set()`) consists of fields
- * mapped to values.
- */
- export type DocumentData = { [field: string]: any };
- /**
- * Update data (for use with `DocumentReference.update()`) consists of field
- * paths (e.g. 'foo' or 'foo.baz') mapped to values. Fields that contain dots
- * reference nested fields within the document.
- */
- export type UpdateData = { [fieldPath: string]: any };
- /**
- * Constant used to indicate the LRU garbage collection should be disabled.
- * Set this value as the `cacheSizeBytes` on the settings passed to the
- * `Firestore` instance.
- */
- export const CACHE_SIZE_UNLIMITED: number;
- /**
- * Specifies custom configurations for your Cloud Firestore instance.
- * You must set these before invoking any other methods.
- */
- export interface Settings {
- /** The hostname to connect to. */
- host?: string;
- /** Whether to use SSL when connecting. */
- ssl?: boolean;
- /**
- * An approximate cache size threshold for the on-disk data. If the cache grows beyond this
- * size, Firestore will start removing data that hasn't been recently used. The size is not a
- * guarantee that the cache will stay below that size, only that if the cache exceeds the given
- * size, cleanup will be attempted.
- *
- * The default value is 40 MB. The threshold must be set to at least 1 MB, and can be set to
- * CACHE_SIZE_UNLIMITED to disable garbage collection.
- */
- cacheSizeBytes?: number;
- /**
- * Forces the SDK’s underlying network transport (WebChannel) to use
- * long-polling. Each response from the backend will be closed immediately
- * after the backend sends data (by default responses are kept open in
- * case the backend has more data to send). This avoids incompatibility
- * issues with certain proxies, antivirus software, etc. that incorrectly
- * buffer traffic indefinitely. Use of this option will cause some
- * performance degradation though.
- *
- * This setting cannot be used with `experimentalAutoDetectLongPolling` and
- * may be removed in a future release. If you find yourself using it to
- * work around a specific network reliability issue, please tell us about
- * it in https://github.com/firebase/firebase-js-sdk/issues/1674.
- *
- * This setting does not work in a Node.js environment.
- */
- experimentalForceLongPolling?: boolean;
- /**
- * Configures the SDK's underlying transport (WebChannel) to automatically detect if
- * long-polling should be used. This is very similar to `experimentalForceLongPolling`,
- * but only uses long-polling if required.
- *
- * This setting will likely be enabled by default in future releases and cannot be
- * combined with `experimentalForceLongPolling`.
- *
- * This setting does not work in a Node.js environment.
- */
- experimentalAutoDetectLongPolling?: boolean;
- /**
- * Whether to skip nested properties that are set to `undefined` during
- * object serialization. If set to `true`, these properties are skipped
- * and not written to Firestore. If set to `false` or omitted, the SDK
- * throws an exception when it encounters properties of type `undefined`.
- */
- ignoreUndefinedProperties?: boolean;
- /**
- * Whether to merge the provided settings with the existing settings. If
- * set to `true`, the settings are merged with existing settings. If
- * set to `false` or left unset, the settings replace the existing
- * settings.
- */
- merge?: boolean;
- }
- /**
- * Settings that can be passed to Firestore.enablePersistence() to configure
- * Firestore persistence.
- */
- export interface PersistenceSettings {
- /**
- * Whether to synchronize the in-memory state of multiple tabs. Setting this
- * to `true` in all open tabs enables shared access to local persistence,
- * shared execution of queries and latency-compensated local document updates
- * across all connected instances.
- *
- * To enable this mode, `synchronizeTabs:true` needs to be set globally in all
- * active tabs. If omitted or set to 'false', `enablePersistence()` will fail
- * in all but the first tab.
- */
- synchronizeTabs?: boolean;
- /**
- * Whether to force enable persistence for the client. This cannot be used
- * with `synchronizeTabs:true` and is primarily intended for use with Web
- * Workers. Setting this to `true` will enable persistence, but cause other
- * tabs using persistence to fail.
- *
- * This setting may be removed in a future release. If you find yourself
- * using it for a specific use case or run into any issues, please tell us
- * about it in
- * https://github.com/firebase/firebase-js-sdk/issues/983.
- */
- experimentalForceOwningTab?: boolean;
- }
- export type LogLevel = 'debug' | 'error' | 'silent';
- /**
- * Sets the verbosity of Cloud Firestore logs (debug, error, or silent).
- *
- * @param logLevel
- * The verbosity you set for activity and error logging. Can be any of
- * the following values:
- *
- * <ul>
- * <li><code>debug</code> for the most verbose logging level, primarily for
- * debugging.</li>
- * <li><code>error</code> to log errors only.</li>
- * <li><code>silent</code> to turn off logging.</li>
- * </ul>
- */
- export function setLogLevel(logLevel: LogLevel): void;
- /**
- * Converter used by `withConverter()` to transform user objects of type T
- * into Firestore data.
- *
- * Using the converter allows you to specify generic type arguments when
- * storing and retrieving objects from Firestore.
- *
- * @example
- * ```typescript
- * class Post {
- * constructor(readonly title: string, readonly author: string) {}
- *
- * toString(): string {
- * return this.title + ', by ' + this.author;
- * }
- * }
- *
- * const postConverter = {
- * toFirestore(post: Post): firebase.firestore.DocumentData {
- * return {title: post.title, author: post.author};
- * },
- * fromFirestore(
- * snapshot: firebase.firestore.QueryDocumentSnapshot,
- * options: firebase.firestore.SnapshotOptions
- * ): Post {
- * const data = snapshot.data(options)!;
- * return new Post(data.title, data.author);
- * }
- * };
- *
- * const postSnap = await firebase.firestore()
- * .collection('posts')
- * .withConverter(postConverter)
- * .doc().get();
- * const post = postSnap.data();
- * if (post !== undefined) {
- * post.title; // string
- * post.toString(); // Should be defined
- * post.someNonExistentProperty; // TS error
- * }
- * ```
- */
- export interface FirestoreDataConverter<T> {
- /**
- * Called by the Firestore SDK to convert a custom model object of type T
- * into a plain Javascript object (suitable for writing directly to the
- * Firestore database). To use `set()` with `merge` and `mergeFields`,
- * `toFirestore()` must be defined with `Partial<T>`.
- */
- toFirestore(modelObject: T): DocumentData;
- toFirestore(modelObject: Partial<T>, options: SetOptions): DocumentData;
- /**
- * Called by the Firestore SDK to convert Firestore data into an object of
- * type T. You can access your data by calling: `snapshot.data(options)`.
- *
- * @param snapshot A QueryDocumentSnapshot containing your data and metadata.
- * @param options The SnapshotOptions from the initial call to `data()`.
- */
- fromFirestore(snapshot: QueryDocumentSnapshot, options: SnapshotOptions): T;
- }
- /**
- * The Cloud Firestore service interface.
- *
- * Do not call this constructor directly. Instead, use
- * {@link firebase.firestore `firebase.firestore()`}.
- */
- export class Firestore {
- private constructor();
- /**
- * Specifies custom settings to be used to configure the `Firestore`
- * instance. Must be set before invoking any other methods.
- *
- * @param settings The settings to use.
- */
- settings(settings: Settings): void;
- /**
- * Modify this instance to communicate with the Cloud Firestore emulator.
- *
- * <p>Note: this must be called before this instance has been used to do any operations.
- *
- * @param host the emulator host (ex: localhost).
- * @param port the emulator port (ex: 9000).
- * @param options.mockUserToken - the mock auth token to use for unit
- * testing Security Rules.
- */
- useEmulator(
- host: string,
- port: number,
- options?: {
- mockUserToken?: EmulatorMockTokenOptions | string;
- }
- ): void;
- /**
- * Attempts to enable persistent storage, if possible.
- *
- * Must be called before any other methods (other than settings() and
- * clearPersistence()).
- *
- * If this fails, enablePersistence() will reject the promise it returns.
- * Note that even after this failure, the firestore instance will remain
- * usable, however offline persistence will be disabled.
- *
- * There are several reasons why this can fail, which can be identified by
- * the `code` on the error.
- *
- * * failed-precondition: The app is already open in another browser tab.
- * * unimplemented: The browser is incompatible with the offline
- * persistence implementation.
- *
- * @param settings Optional settings object to configure persistence.
- * @return A promise that represents successfully enabling persistent
- * storage.
- */
- enablePersistence(settings?: PersistenceSettings): Promise<void>;
- /**
- * Gets a `CollectionReference` instance that refers to the collection at
- * the specified path.
- *
- * @param collectionPath A slash-separated path to a collection.
- * @return The `CollectionReference` instance.
- */
- collection(collectionPath: string): CollectionReference<DocumentData>;
- /**
- * Gets a `DocumentReference` instance that refers to the document at the
- * specified path.
- *
- * @param documentPath A slash-separated path to a document.
- * @return The `DocumentReference` instance.
- */
- doc(documentPath: string): DocumentReference<DocumentData>;
- /**
- * Creates and returns a new Query that includes all documents in the
- * database that are contained in a collection or subcollection with the
- * given collectionId.
- *
- * @param collectionId Identifies the collections to query over. Every
- * collection or subcollection with this ID as the last segment of its path
- * will be included. Cannot contain a slash.
- * @return The created Query.
- */
- collectionGroup(collectionId: string): Query<DocumentData>;
- /**
- * Executes the given `updateFunction` and then attempts to commit the changes
- * applied within the transaction. If any document read within the transaction
- * has changed, Cloud Firestore retries the `updateFunction`. If it fails to
- * commit after 5 attempts, the transaction fails.
- *
- * The maximum number of writes allowed in a single transaction is 500, but
- * note that each usage of `FieldValue.serverTimestamp()`,
- * `FieldValue.arrayUnion()`, `FieldValue.arrayRemove()`, or
- * `FieldValue.increment()` inside a transaction counts as an additional write.
- *
- * @param updateFunction
- * The function to execute within the transaction context.
- *
- * @return
- * If the transaction completed successfully or was explicitly aborted
- * (the `updateFunction` returned a failed promise),
- * the promise returned by the updateFunction is returned here. Else, if the
- * transaction failed, a rejected promise with the corresponding failure
- * error will be returned.
- */
- runTransaction<T>(
- updateFunction: (transaction: Transaction) => Promise<T>
- ): Promise<T>;
- /**
- * Creates a write batch, used for performing multiple writes as a single
- * atomic operation. The maximum number of writes allowed in a single WriteBatch
- * is 500, but note that each usage of `FieldValue.serverTimestamp()`,
- * `FieldValue.arrayUnion()`, `FieldValue.arrayRemove()`, or
- * `FieldValue.increment()` inside a WriteBatch counts as an additional write.
- *
- * @return
- * A `WriteBatch` that can be used to atomically execute multiple writes.
- */
- batch(): WriteBatch;
- /**
- * The {@link firebase.app.App app} associated with this `Firestore` service
- * instance.
- */
- app: firebase.app.App;
- /**
- * Clears the persistent storage. This includes pending writes and cached
- * documents.
- *
- * Must be called while the firestore instance is not started (after the app
- * is shutdown or when the app is first initialized). On startup, this
- * method must be called before other methods (other than settings()). If
- * the firestore instance is still running, the promise will be rejected
- * with the error code of `failed-precondition`.
- *
- * Note: clearPersistence() is primarily intended to help write reliable
- * tests that use Cloud Firestore. It uses an efficient mechanism for
- * dropping existing data but does not attempt to securely overwrite or
- * otherwise make cached data unrecoverable. For applications that are
- * sensitive to the disclosure of cached data in between user sessions, we
- * strongly recommend not enabling persistence at all.
- *
- * @return A promise that is resolved when the persistent storage is
- * cleared. Otherwise, the promise is rejected with an error.
- */
- clearPersistence(): Promise<void>;
- /**
- * Re-enables use of the network for this Firestore instance after a prior
- * call to {@link firebase.firestore.Firestore.disableNetwork
- * `disableNetwork()`}.
- *
- * @return A promise that is resolved once the network has been
- * enabled.
- */
- enableNetwork(): Promise<void>;
- /**
- * Disables network usage for this instance. It can be re-enabled via
- * {@link firebase.firestore.Firestore.enableNetwork `enableNetwork()`}. While
- * the network is disabled, any snapshot listeners or get() calls will return
- * results from cache, and any write operations will be queued until the network
- * is restored.
- *
- * @return A promise that is resolved once the network has been
- * disabled.
- */
- disableNetwork(): Promise<void>;
- /**
- * Waits until all currently pending writes for the active user have been acknowledged by the
- * backend.
- *
- * The returned Promise resolves immediately if there are no outstanding writes. Otherwise, the
- * Promise waits for all previously issued writes (including those written in a previous app
- * session), but it does not wait for writes that were added after the method is called. If you
- * want to wait for additional writes, call `waitForPendingWrites()` again.
- *
- * Any outstanding `waitForPendingWrites()` Promises are rejected during user changes.
- *
- * @return A Promise which resolves when all currently pending writes have been
- * acknowledged by the backend.
- */
- waitForPendingWrites(): Promise<void>;
- /**
- * Attaches a listener for a snapshots-in-sync event. The snapshots-in-sync
- * event indicates that all listeners affected by a given change have fired,
- * even if a single server-generated change affects multiple listeners.
- *
- * NOTE: The snapshots-in-sync event only indicates that listeners are in sync
- * with each other, but does not relate to whether those snapshots are in sync
- * with the server. Use SnapshotMetadata in the individual listeners to
- * determine if a snapshot is from the cache or the server.
- *
- * @param observer A single object containing `next` and `error` callbacks.
- * @return An unsubscribe function that can be called to cancel the snapshot
- * listener.
- */
- onSnapshotsInSync(observer: {
- next?: (value: void) => void;
- error?: (error: FirestoreError) => void;
- complete?: () => void;
- }): () => void;
- /**
- * Attaches a listener for a snapshots-in-sync event. The snapshots-in-sync
- * event indicates that all listeners affected by a given change have fired,
- * even if a single server-generated change affects multiple listeners.
- *
- * NOTE: The snapshots-in-sync event only indicates that listeners are in sync
- * with each other, but does not relate to whether those snapshots are in sync
- * with the server. Use SnapshotMetadata in the individual listeners to
- * determine if a snapshot is from the cache or the server.
- *
- * @param onSync A callback to be called every time all snapshot listeners are
- * in sync with each other.
- * @return An unsubscribe function that can be called to cancel the snapshot
- * listener.
- */
- onSnapshotsInSync(onSync: () => void): () => void;
- /**
- * Terminates this Firestore instance.
- *
- * After calling `terminate()` only the `clearPersistence()` method may be used. Any other method
- * will throw a `FirestoreError`.
- *
- * To restart after termination, create a new instance of FirebaseFirestore with
- * `firebase.firestore()`.
- *
- * Termination does not cancel any pending writes, and any promises that are awaiting a response
- * from the server will not be resolved. If you have persistence enabled, the next time you
- * start this instance, it will resume sending these writes to the server.
- *
- * Note: Under normal circumstances, calling `terminate()` is not required. This
- * method is useful only when you want to force this instance to release all of its resources or
- * in combination with `clearPersistence()` to ensure that all local state is destroyed
- * between test runs.
- *
- * @return A promise that is resolved when the instance has been successfully terminated.
- */
- terminate(): Promise<void>;
- /**
- * Loads a Firestore bundle into the local cache.
- *
- * @param bundleData
- * An object representing the bundle to be loaded. Valid objects are `ArrayBuffer`,
- * `ReadableStream<Uint8Array>` or `string`.
- *
- * @return
- * A `LoadBundleTask` object, which notifies callers with progress updates, and completion
- * or error events. It can be used as a `Promise<LoadBundleTaskProgress>`.
- */
- loadBundle(
- bundleData: ArrayBuffer | ReadableStream<Uint8Array> | string
- ): LoadBundleTask;
- /**
- * Reads a Firestore `Query` from local cache, identified by the given name.
- *
- * The named queries are packaged into bundles on the server side (along
- * with resulting documents), and loaded to local cache using `loadBundle`. Once in local
- * cache, use this method to extract a `Query` by name.
- */
- namedQuery(name: string): Promise<Query<DocumentData> | null>;
- /**
- * @hidden
- */
- INTERNAL: { delete: () => Promise<void> };
- }
- /**
- * Represents the task of loading a Firestore bundle. It provides progress of bundle
- * loading, as well as task completion and error events.
- *
- * The API is compatible with `Promise<LoadBundleTaskProgress>`.
- */
- export interface LoadBundleTask extends PromiseLike<LoadBundleTaskProgress> {
- /**
- * Registers functions to listen to bundle loading progress events.
- * @param next
- * Called when there is a progress update from bundle loading. Typically `next` calls occur
- * each time a Firestore document is loaded from the bundle.
- * @param error
- * Called when an error occurs during bundle loading. The task aborts after reporting the
- * error, and there should be no more updates after this.
- * @param complete
- * Called when the loading task is complete.
- */
- onProgress(
- next?: (progress: LoadBundleTaskProgress) => any,
- error?: (error: Error) => any,
- complete?: () => void
- ): void;
- /**
- * Implements the `Promise<LoadBundleTaskProgress>.then` interface.
- *
- * @param onFulfilled
- * Called on the completion of the loading task with a final `LoadBundleTaskProgress` update.
- * The update will always have its `taskState` set to `"Success"`.
- * @param onRejected
- * Called when an error occurs during bundle loading.
- */
- then<T, R>(
- onFulfilled?: (a: LoadBundleTaskProgress) => T | PromiseLike<T>,
- onRejected?: (a: Error) => R | PromiseLike<R>
- ): Promise<T | R>;
- /**
- * Implements the `Promise<LoadBundleTaskProgress>.catch` interface.
- *
- * @param onRejected
- * Called when an error occurs during bundle loading.
- */
- catch<R>(
- onRejected: (a: Error) => R | PromiseLike<R>
- ): Promise<R | LoadBundleTaskProgress>;
- }
- /**
- * Represents a progress update or a final state from loading bundles.
- */
- export interface LoadBundleTaskProgress {
- /** How many documents have been loaded. */
- documentsLoaded: number;
- /** How many documents are in the bundle being loaded. */
- totalDocuments: number;
- /** How many bytes have been loaded. */
- bytesLoaded: number;
- /** How many bytes are in the bundle being loaded. */
- totalBytes: number;
- /** Current task state. */
- taskState: TaskState;
- }
- /**
- * Represents the state of bundle loading tasks.
- *
- * Both 'Error' and 'Success' are sinking state: task will abort or complete and there will
- * be no more updates after they are reported.
- */
- export type TaskState = 'Error' | 'Running' | 'Success';
- /**
- * An immutable object representing a geo point in Firestore. The geo point
- * is represented as latitude/longitude pair.
- *
- * Latitude values are in the range of [-90, 90].
- * Longitude values are in the range of [-180, 180].
- */
- export class GeoPoint {
- /**
- * Creates a new immutable GeoPoint object with the provided latitude and
- * longitude values.
- * @param latitude The latitude as number between -90 and 90.
- * @param longitude The longitude as number between -180 and 180.
- */
- constructor(latitude: number, longitude: number);
- /**
- * The latitude of this GeoPoint instance.
- */
- readonly latitude: number;
- /**
- * The longitude of this GeoPoint instance.
- */
- readonly longitude: number;
- /**
- * Returns true if this `GeoPoint` is equal to the provided one.
- *
- * @param other The `GeoPoint` to compare against.
- * @return true if this `GeoPoint` is equal to the provided one.
- */
- isEqual(other: GeoPoint): boolean;
- }
- /**
- * A Timestamp represents a point in time independent of any time zone or
- * calendar, represented as seconds and fractions of seconds at nanosecond
- * resolution in UTC Epoch time.
- *
- * It is encoded using the Proleptic Gregorian
- * Calendar which extends the Gregorian calendar backwards to year one. It is
- * encoded assuming all minutes are 60 seconds long, i.e. leap seconds are
- * "smeared" so that no leap second table is needed for interpretation. Range is
- * from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z.
- *
- * @see https://github.com/google/protobuf/blob/master/src/google/protobuf/timestamp.proto
- */
- export class Timestamp {
- /**
- * Creates a new timestamp.
- *
- * @param seconds The number of seconds of UTC time since Unix epoch
- * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
- * 9999-12-31T23:59:59Z inclusive.
- * @param nanoseconds The non-negative fractions of a second at nanosecond
- * resolution. Negative second values with fractions must still have
- * non-negative nanoseconds values that count forward in time. Must be
- * from 0 to 999,999,999 inclusive.
- */
- constructor(seconds: number, nanoseconds: number);
- /**
- * Creates a new timestamp with the current date, with millisecond precision.
- *
- * @return a new timestamp representing the current date.
- */
- static now(): Timestamp;
- /**
- * Creates a new timestamp from the given date.
- *
- * @param date The date to initialize the `Timestamp` from.
- * @return A new `Timestamp` representing the same point in time as the given
- * date.
- */
- static fromDate(date: Date): Timestamp;
- /**
- * Creates a new timestamp from the given number of milliseconds.
- *
- * @param milliseconds Number of milliseconds since Unix epoch
- * 1970-01-01T00:00:00Z.
- * @return A new `Timestamp` representing the same point in time as the given
- * number of milliseconds.
- */
- static fromMillis(milliseconds: number): Timestamp;
- readonly seconds: number;
- readonly nanoseconds: number;
- /**
- * Convert a Timestamp to a JavaScript `Date` object. This conversion causes
- * a loss of precision since `Date` objects only support millisecond precision.
- *
- * @return JavaScript `Date` object representing the same point in time as
- * this `Timestamp`, with millisecond precision.
- */
- toDate(): Date;
- /**
- * Convert a timestamp to a numeric timestamp (in milliseconds since epoch).
- * This operation causes a loss of precision.
- *
- * @return The point in time corresponding to this timestamp, represented as
- * the number of milliseconds since Unix epoch 1970-01-01T00:00:00Z.
- */
- toMillis(): number;
- /**
- * Returns true if this `Timestamp` is equal to the provided one.
- *
- * @param other The `Timestamp` to compare against.
- * @return true if this `Timestamp` is equal to the provided one.
- */
- isEqual(other: Timestamp): boolean;
- /**
- * Converts this object to a primitive string, which allows Timestamp objects to be compared
- * using the `>`, `<=`, `>=` and `>` operators.
- */
- valueOf(): string;
- }
- /**
- * An immutable object representing an array of bytes.
- */
- export class Blob {
- private constructor();
- /**
- * Creates a new Blob from the given Base64 string, converting it to
- * bytes.
- *
- * @param base64
- * The Base64 string used to create the Blob object.
- */
- static fromBase64String(base64: string): Blob;
- /**
- * Creates a new Blob from the given Uint8Array.
- *
- * @param array
- * The Uint8Array used to create the Blob object.
- */
- static fromUint8Array(array: Uint8Array): Blob;
- /**
- * Returns the bytes of a Blob as a Base64-encoded string.
- *
- * @return
- * The Base64-encoded string created from the Blob object.
- */
- public toBase64(): string;
- /**
- * Returns the bytes of a Blob in a new Uint8Array.
- *
- * @return
- * The Uint8Array created from the Blob object.
- */
- public toUint8Array(): Uint8Array;
- /**
- * Returns true if this `Blob` is equal to the provided one.
- *
- * @param other The `Blob` to compare against.
- * @return true if this `Blob` is equal to the provided one.
- */
- isEqual(other: Blob): boolean;
- }
- /**
- * A reference to a transaction.
- * The `Transaction` object passed to a transaction's updateFunction provides
- * the methods to read and write data within the transaction context. See
- * `Firestore.runTransaction()`.
- */
- export class Transaction {
- private constructor();
- /**
- * Reads the document referenced by the provided `DocumentReference.`
- *
- * @param documentRef A reference to the document to be read.
- * @return A DocumentSnapshot for the read data.
- */
- get<T>(documentRef: DocumentReference<T>): Promise<DocumentSnapshot<T>>;
- /**
- * Writes to the document referred to by the provided `DocumentReference`.
- * If the document does not exist yet, it will be created. If you pass
- * `SetOptions`, the provided data can be merged into the existing document.
- *
- * @param documentRef A reference to the document to be set.
- * @param data An object of the fields and values for the document.
- * @param options An object to configure the set behavior.
- * @return This `Transaction` instance. Used for chaining method calls.
- */
- set<T>(
- documentRef: DocumentReference<T>,
- data: Partial<T>,
- options: SetOptions
- ): Transaction;
- /**
- * Writes to the document referred to by the provided `DocumentReference`.
- * If the document does not exist yet, it will be created. If you pass
- * `SetOptions`, the provided data can be merged into the existing document.
- *
- * @param documentRef A reference to the document to be set.
- * @param data An object of the fields and values for the document.
- * @return This `Transaction` instance. Used for chaining method calls.
- */
- set<T>(documentRef: DocumentReference<T>, data: T): Transaction;
- /**
- * Updates fields in the document referred to by the provided
- * `DocumentReference`. The update will fail if applied to a document that
- * does not exist.
- *
- * @param documentRef A reference to the document to be updated.
- * @param data An object containing the fields and values with which to
- * update the document. Fields can contain dots to reference nested fields
- * within the document.
- * @return This `Transaction` instance. Used for chaining method calls.
- */
- update(documentRef: DocumentReference<any>, data: UpdateData): Transaction;
- /**
- * Updates fields in the document referred to by the provided
- * `DocumentReference`. The update will fail if applied to a document that
- * does not exist.
- *
- * Nested fields can be updated by providing dot-separated field path
- * strings or by providing FieldPath objects.
- *
- * @param documentRef A reference to the document to be updated.
- * @param field The first field to update.
- * @param value The first value.
- * @param moreFieldsAndValues Additional key/value pairs.
- * @return A Promise resolved once the data has been successfully written
- * to the backend (Note that it won't resolve while you're offline).
- */
- update(
- documentRef: DocumentReference<any>,
- field: string | FieldPath,
- value: any,
- ...moreFieldsAndValues: any[]
- ): Transaction;
- /**
- * Deletes the document referred to by the provided `DocumentReference`.
- *
- * @param documentRef A reference to the document to be deleted.
- * @return This `Transaction` instance. Used for chaining method calls.
- */
- delete(documentRef: DocumentReference<any>): Transaction;
- }
- /**
- * A write batch, used to perform multiple writes as a single atomic unit.
- *
- * A `WriteBatch` object can be acquired by calling `Firestore.batch()`. It
- * provides methods for adding writes to the write batch. None of the
- * writes will be committed (or visible locally) until `WriteBatch.commit()`
- * is called.
- *
- * Unlike transactions, write batches are persisted offline and therefore are
- * preferable when you don't need to condition your writes on read data.
- */
- export class WriteBatch {
- private constructor();
- /**
- * Writes to the document referred to by the provided `DocumentReference`.
- * If the document does not exist yet, it will be created. If you pass
- * `SetOptions`, the provided data can be merged into the existing document.
- *
- * @param documentRef A reference to the document to be set.
- * @param data An object of the fields and values for the document.
- * @param options An object to configure the set behavior.
- * @return This `WriteBatch` instance. Used for chaining method calls.
- */
- set<T>(
- documentRef: DocumentReference<T>,
- data: Partial<T>,
- options: SetOptions
- ): WriteBatch;
- /**
- * Writes to the document referred to by the provided `DocumentReference`.
- * If the document does not exist yet, it will be created. If you pass
- * `SetOptions`, the provided data can be merged into the existing document.
- *
- * @param documentRef A reference to the document to be set.
- * @param data An object of the fields and values for the document.
- * @return This `WriteBatch` instance. Used for chaining method calls.
- */
- set<T>(documentRef: DocumentReference<T>, data: T): WriteBatch;
- /**
- * Updates fields in the document referred to by the provided
- * `DocumentReference`. The update will fail if applied to a document that
- * does not exist.
- *
- * @param documentRef A reference to the document to be updated.
- * @param data An object containing the fields and values with which to
- * update the document. Fields can contain dots to reference nested fields
- * within the document.
- * @return This `WriteBatch` instance. Used for chaining method calls.
- */
- update(documentRef: DocumentReference<any>, data: UpdateData): WriteBatch;
- /**
- * Updates fields in the document referred to by this `DocumentReference`.
- * The update will fail if applied to a document that does not exist.
- *
- * Nested fields can be update by providing dot-separated field path strings
- * or by providing FieldPath objects.
- *
- * @param documentRef A reference to the document to be updated.
- * @param field The first field to update.
- * @param value The first value.
- * @param moreFieldsAndValues Additional key value pairs.
- * @return A Promise resolved once the data has been successfully written
- * to the backend (Note that it won't resolve while you're offline).
- */
- update(
- documentRef: DocumentReference<any>,
- field: string | FieldPath,
- value: any,
- ...moreFieldsAndValues: any[]
- ): WriteBatch;
- /**
- * Deletes the document referred to by the provided `DocumentReference`.
- *
- * @param documentRef A reference to the document to be deleted.
- * @return This `WriteBatch` instance. Used for chaining method calls.
- */
- delete(documentRef: DocumentReference<any>): WriteBatch;
- /**
- * Commits all of the writes in this write batch as a single atomic unit.
- *
- * @return A Promise resolved once all of the writes in the batch have been
- * successfully written to the backend as an atomic unit. Note that it won't
- * resolve while you're offline.
- */
- commit(): Promise<void>;
- }
- /**
- * An options object that can be passed to `DocumentReference.onSnapshot()`,
- * `Query.onSnapshot()` and `QuerySnapshot.docChanges()` to control which
- * types of changes to include in the result set.
- */
- export interface SnapshotListenOptions {
- /**
- * Include a change even if only the metadata of the query or of a document
- * changed. Default is false.
- */
- readonly includeMetadataChanges?: boolean;
- }
- /**
- * An options object that configures the behavior of `set()` calls in
- * {@link firebase.firestore.DocumentReference.set DocumentReference}, {@link
- * firebase.firestore.WriteBatch.set WriteBatch} and {@link
- * firebase.firestore.Transaction.set Transaction}. These calls can be
- * configured to perform granular merges instead of overwriting the target
- * documents in their entirety by providing a `SetOptions` with `merge: true`.
- */
- export interface SetOptions {
- /**
- * Changes the behavior of a set() call to only replace the values specified
- * in its data argument. Fields omitted from the set() call remain
- * untouched.
- */
- readonly merge?: boolean;
- /**
- * Changes the behavior of set() calls to only replace the specified field
- * paths. Any field path that is not specified is ignored and remains
- * untouched.
- */
- readonly mergeFields?: (string | FieldPath)[];
- }
- /**
- * An options object that configures the behavior of `get()` calls on
- * `DocumentReference` and `Query`. By providing a `GetOptions` object, these
- * methods can be configured to fetch results only from the server, only from
- * the local cache or attempt to fetch results from the server and fall back to
- * the cache (which is the default).
- */
- export interface GetOptions {
- /**
- * Describes whether we should get from server or cache.
- *
- * Setting to `default` (or not setting at all), causes Firestore to try to
- * retrieve an up-to-date (server-retrieved) snapshot, but fall back to
- * returning cached data if the server can't be reached.
- *
- * Setting to `server` causes Firestore to avoid the cache, generating an
- * error if the server cannot be reached. Note that the cache will still be
- * updated if the server request succeeds. Also note that latency-compensation
- * still takes effect, so any pending write operations will be visible in the
- * returned data (merged into the server-provided data).
- *
- * Setting to `cache` causes Firestore to immediately return a value from the
- * cache, ignoring the server completely (implying that the returned value
- * may be stale with respect to the value on the server.) If there is no data
- * in the cache to satisfy the `get()` call, `DocumentReference.get()` will
- * return an error and `QuerySnapshot.get()` will return an empty
- * `QuerySnapshot` with no documents.
- */
- readonly source?: 'default' | 'server' | 'cache';
- }
- /**
- * A `DocumentReference` refers to a document location in a Firestore database
- * and can be used to write, read, or listen to the location. The document at
- * the referenced location may or may not exist. A `DocumentReference` can
- * also be used to create a `CollectionReference` to a subcollection.
- */
- export class DocumentReference<T = DocumentData> {
- private constructor();
- /**
- * The document's identifier within its collection.
- */
- readonly id: string;
- /**
- * The {@link firebase.firestore.Firestore} the document is in.
- * This is useful for performing transactions, for example.
- */
- readonly firestore: Firestore;
- /**
- * The Collection this `DocumentReference` belongs to.
- */
- readonly parent: CollectionReference<T>;
- /**
- * A string representing the path of the referenced document (relative
- * to the root of the database).
- */
- readonly path: string;
- /**
- * Gets a `CollectionReference` instance that refers to the collection at
- * the specified path.
- *
- * @param collectionPath A slash-separated path to a collection.
- * @return The `CollectionReference` instance.
- */
- collection(collectionPath: string): CollectionReference<DocumentData>;
- /**
- * Returns true if this `DocumentReference` is equal to the provided one.
- *
- * @param other The `DocumentReference` to compare against.
- * @return true if this `DocumentReference` is equal to the provided one.
- */
- isEqual(other: DocumentReference<T>): boolean;
- /**
- * Writes to the document referred to by this `DocumentReference`. If the
- * document does not yet exist, it will be created. If you pass
- * `SetOptions`, the provided data can be merged into an existing document.
- *
- * @param data A map of the fields and values for the document.
- * @param options An object to configure the set behavior.
- * @return A Promise resolved once the data has been successfully written
- * to the backend (Note that it won't resolve while you're offline).
- */
- set(data: Partial<T>, options: SetOptions): Promise<void>;
- /**
- * Writes to the document referred to by this `DocumentReference`. If the
- * document does not yet exist, it will be created. If you pass
- * `SetOptions`, the provided data can be merged into an existing document.
- *
- * @param data A map of the fields and values for the document.
- * @return A Promise resolved once the data has been successfully written
- * to the backend (Note that it won't resolve while you're offline).
- */
- set(data: T): Promise<void>;
- /**
- * Updates fields in the document referred to by this `DocumentReference`.
- * The update will fail if applied to a document that does not exist.
- *
- * @param data An object containing the fields and values with which to
- * update the document. Fields can contain dots to reference nested fields
- * within the document.
- * @return A Promise resolved once the data has been successfully written
- * to the backend (Note that it won't resolve while you're offline).
- */
- update(data: UpdateData): Promise<void>;
- /**
- * Updates fields in the document referred to by this `DocumentReference`.
- * The update will fail if applied to a document that does not exist.
- *
- * Nested fields can be updated by providing dot-separated field path
- * strings or by providing FieldPath objects.
- *
- * @param field The first field to update.
- * @param value The first value.
- * @param moreFieldsAndValues Additional key value pairs.
- * @return A Promise resolved once the data has been successfully written
- * to the backend (Note that it won't resolve while you're offline).
- */
- update(
- field: string | FieldPath,
- value: any,
- ...moreFieldsAndValues: any[]
- ): Promise<void>;
- /**
- * Deletes the document referred to by this `DocumentReference`.
- *
- * @return A Promise resolved once the document has been successfully
- * deleted from the backend (Note that it won't resolve while you're
- * offline).
- */
- delete(): Promise<void>;
- /**
- * Reads the document referred to by this `DocumentReference`.
- *
- * Note: By default, get() attempts to provide up-to-date data when possible
- * by waiting for data from the server, but it may return cached data or fail
- * if you are offline and the server cannot be reached. This behavior can be
- * altered via the `GetOptions` parameter.
- *
- * @param options An object to configure the get behavior.
- * @return A Promise resolved with a DocumentSnapshot containing the
- * current document contents.
- */
- get(options?: GetOptions): Promise<DocumentSnapshot<T>>;
- /**
- * Attaches a listener for DocumentSnapshot events. You may either pass
- * individual `onNext` and `onError` callbacks or pass a single observer
- * object with `next` and `error` callbacks.
- *
- * NOTE: Although an `onCompletion` callback can be provided, it will
- * never be called because the snapshot stream is never-ending.
- *
- * @param observer A single object containing `next` and `error` callbacks.
- * @return An unsubscribe function that can be called to cancel
- * the snapshot listener.
- */
- onSnapshot(observer: {
- next?: (snapshot: DocumentSnapshot<T>) => void;
- error?: (error: FirestoreError) => void;
- complete?: () => void;
- }): () => void;
- /**
- * Attaches a listener for DocumentSnapshot events. You may either pass
- * individual `onNext` and `onError` callbacks or pass a single observer
- * object with `next` and `error` callbacks.
- *
- * NOTE: Although an `onCompletion` callback can be provided, it will
- * never be called because the snapshot stream is never-ending.
- *
- * @param options Options controlling the listen behavior.
- * @param observer A single object containing `next` and `error` callbacks.
- * @return An unsubscribe function that can be called to cancel
- * the snapshot listener.
- */
- onSnapshot(
- options: SnapshotListenOptions,
- observer: {
- next?: (snapshot: DocumentSnapshot<T>) => void;
- error?: (error: FirestoreError) => void;
- complete?: () => void;
- }
- ): () => void;
- /**
- * Attaches a listener for DocumentSnapshot events. You may either pass
- * individual `onNext` and `onError` callbacks or pass a single observer
- * object with `next` and `error` callbacks.
- *
- * NOTE: Although an `onCompletion` callback can be provided, it will
- * never be called because the snapshot stream is never-ending.
- *
- * @param onNext A callback to be called every time a new `DocumentSnapshot`
- * is available.
- * @param onError A callback to be called if the listen fails or is
- * cancelled. No further callbacks will occur.
- * @return An unsubscribe function that can be called to cancel
- * the snapshot listener.
- */
- onSnapshot(
- onNext: (snapshot: DocumentSnapshot<T>) => void,
- onError?: (error: FirestoreError) => void,
- onCompletion?: () => void
- ): () => void;
- /**
- * Attaches a listener for DocumentSnapshot events. You may either pass
- * individual `onNext` and `onError` callbacks or pass a single observer
- * object with `next` and `error` callbacks.
- *
- * NOTE: Although an `onCompletion` callback can be provided, it will
- * never be called because the snapshot stream is never-ending.
- *
- * @param options Options controlling the listen behavior.
- * @param onNext A callback to be called every time a new `DocumentSnapshot`
- * is available.
- * @param onError A callback to be called if the listen fails or is
- * cancelled. No further callbacks will occur.
- * @return An unsubscribe function that can be called to cancel
- * the snapshot listener.
- */
- onSnapshot(
- options: SnapshotListenOptions,
- onNext: (snapshot: DocumentSnapshot<T>) => void,
- onError?: (error: FirestoreError) => void,
- onCompletion?: () => void
- ): () => void;
- /**
- * Applies a custom data converter to this DocumentReference, allowing you
- * to use your own custom model objects with Firestore. When you call
- * set(), get(), etc. on the returned DocumentReference instance, the
- * provided converter will convert between Firestore data and your custom
- * type U.
- *
- * Passing in `null` as the converter parameter removes the current
- * converter.
- *
- * @param converter Converts objects to and from Firestore. Passing in
- * `null` removes the current converter.
- * @return A DocumentReference<U> that uses the provided converter.
- */
- withConverter(converter: null): DocumentReference<DocumentData>;
- /**
- * Applies a custom data converter to this DocumentReference, allowing you
- * to use your own custom model objects with Firestore. When you call
- * set(), get(), etc. on the returned DocumentReference instance, the
- * provided converter will convert between Firestore data and your custom
- * type U.
- *
- * Passing in `null` as the converter parameter removes the current
- * converter.
- *
- * @param converter Converts objects to and from Firestore. Passing in
- * `null` removes the current converter.
- * @return A DocumentReference<U> that uses the provided converter.
- */
- withConverter<U>(
- converter: FirestoreDataConverter<U>
- ): DocumentReference<U>;
- }
- /**
- * Options that configure how data is retrieved from a `DocumentSnapshot`
- * (e.g. the desired behavior for server timestamps that have not yet been set
- * to their final value).
- */
- export interface SnapshotOptions {
- /**
- * If set, controls the return value for server timestamps that have not yet
- * been set to their final value.
- *
- * By specifying 'estimate', pending server timestamps return an estimate
- * based on the local clock. This estimate will differ from the final value
- * and cause these values to change once the server result becomes available.
- *
- * By specifying 'previous', pending timestamps will be ignored and return
- * their previous value instead.
- *
- * If omitted or set to 'none', `null` will be returned by default until the
- * server value becomes available.
- */
- readonly serverTimestamps?: 'estimate' | 'previous' | 'none';
- }
- /**
- * Metadata about a snapshot, describing the state of the snapshot.
- */
- export interface SnapshotMetadata {
- /**
- * True if the snapshot contains the result of local writes (e.g. set() or
- * update() calls) that have not yet been committed to the backend.
- * If your listener has opted into metadata updates (via
- * `SnapshotListenOptions`) you will receive another
- * snapshot with `hasPendingWrites` equal to false once the writes have been
- * committed to the backend.
- */
- readonly hasPendingWrites: boolean;
- /**
- * True if the snapshot was created from cached data rather than guaranteed
- * up-to-date server data. If your listener has opted into metadata updates
- * (via `SnapshotListenOptions`)
- * you will receive another snapshot with `fromCache` set to false once
- * the client has received up-to-date data from the backend.
- */
- readonly fromCache: boolean;
- /**
- * Returns true if this `SnapshotMetadata` is equal to the provided one.
- *
- * @param other The `SnapshotMetadata` to compare against.
- * @return true if this `SnapshotMetadata` is equal to the provided one.
- */
- isEqual(other: SnapshotMetadata): boolean;
- }
- /**
- * A `DocumentSnapshot` contains data read from a document in your Firestore
- * database. The data can be extracted with `.data()` or `.get(<field>)` to
- * get a specific field.
- *
- * For a `DocumentSnapshot` that points to a non-existing document, any data
- * access will return 'undefined'. You can use the `exists` property to
- * explicitly verify a document's existence.
- */
- export class DocumentSnapshot<T = DocumentData> {
- protected constructor();
- /**
- * Property of the `DocumentSnapshot` that signals whether or not the data
- * exists. True if the document exists.
- */
- readonly exists: boolean;
- /**
- * The `DocumentReference` for the document included in the `DocumentSnapshot`.
- */
- readonly ref: DocumentReference<T>;
- /**
- * Property of the `DocumentSnapshot` that provides the document's ID.
- */
- readonly id: string;
- /**
- * Metadata about the `DocumentSnapshot`, including information about its
- * source and local modifications.
- */
- readonly metadata: SnapshotMetadata;
- /**
- * Retrieves all fields in the document as an Object. Returns 'undefined' if
- * the document doesn't exist.
- *
- * By default, `FieldValue.serverTimestamp()` values that have not yet been
- * set to their final value will be returned as `null`. You can override
- * this by passing an options object.
- *
- * @param options An options object to configure how data is retrieved from
- * the snapshot (e.g. the desired behavior for server timestamps that have
- * not yet been set to their final value).
- * @return An Object containing all fields in the document or 'undefined' if
- * the document doesn't exist.
- */
- data(options?: SnapshotOptions): T | undefined;
- /**
- * Retrieves the field specified by `fieldPath`. Returns `undefined` if the
- * document or field doesn't exist.
- *
- * By default, a `FieldValue.serverTimestamp()` that has not yet been set to
- * its final value will be returned as `null`. You can override this by
- * passing an options object.
- *
- * @param fieldPath The path (e.g. 'foo' or 'foo.bar') to a specific field.
- * @param options An options object to configure how the field is retrieved
- * from the snapshot (e.g. the desired behavior for server timestamps that have
- * not yet been set to their final value).
- * @return The data at the specified field location or undefined if no such
- * field exists in the document.
- */
- get(fieldPath: string | FieldPath, options?: SnapshotOptions): any;
- /**
- * Returns true if this `DocumentSnapshot` is equal to the provided one.
- *
- * @param other The `DocumentSnapshot` to compare against.
- * @return true if this `DocumentSnapshot` is equal to the provided one.
- */
- isEqual(other: DocumentSnapshot<T>): boolean;
- }
- /**
- * A `QueryDocumentSnapshot` contains data read from a document in your
- * Firestore database as part of a query. The document is guaranteed to exist
- * and its data can be extracted with `.data()` or `.get(<field>)` to get a
- * specific field.
- *
- * A `QueryDocumentSnapshot` offers the same API surface as a
- * `DocumentSnapshot`. Since query results contain only existing documents, the
- * `exists` property will always be true and `data()` will never return
- * 'undefined'.
- */
- export class QueryDocumentSnapshot<
- T = DocumentData
- > extends DocumentSnapshot<T> {
- private constructor();
- /**
- * Retrieves all fields in the document as an Object.
- *
- * By default, `FieldValue.serverTimestamp()` values that have not yet been
- * set to their final value will be returned as `null`. You can override
- * this by passing an options object.
- *
- * @override
- * @param options An options object to configure how data is retrieved from
- * the snapshot (e.g. the desired behavior for server timestamps that have
- * not yet been set to their final value).
- * @return An Object containing all fields in the document.
- */
- data(options?: SnapshotOptions): T;
- }
- /**
- * The direction of a `Query.orderBy()` clause is specified as 'desc' or 'asc'
- * (descending or ascending).
- */
- export type OrderByDirection = 'desc' | 'asc';
- /**
- * Filter conditions in a `Query.where()` clause are specified using the
- * strings '<', '<=', '==', '!=', '>=', '>', 'array-contains', 'in',
- * 'array-contains-any', and 'not-in'.
- */
- export type WhereFilterOp =
- | '<'
- | '<='
- | '=='
- | '!='
- | '>='
- | '>'
- | 'array-contains'
- | 'in'
- | 'array-contains-any'
- | 'not-in';
- /**
- * A `Query` refers to a Query which you can read or listen to. You can also
- * construct refined `Query` objects by adding filters and ordering.
- */
- export class Query<T = DocumentData> {
- protected constructor();
- /**
- * The `Firestore` for the Firestore database (useful for performing
- * transactions, etc.).
- */
- readonly firestore: Firestore;
- /**
- * Creates and returns a new Query with the additional filter that documents
- * must contain the specified field and the value should satisfy the
- * relation constraint provided.
- *
- * @param fieldPath The path to compare
- * @param opStr The operation string (e.g "<", "<=", "==", ">", ">=").
- * @param value The value for comparison
- * @return The created Query.
- */
- where(
- fieldPath: string | FieldPath,
- opStr: WhereFilterOp,
- value: any
- ): Query<T>;
- /**
- * Creates and returns a new Query that's additionally sorted by the
- * specified field, optionally in descending order instead of ascending.
- *
- * @param fieldPath The field to sort by.
- * @param directionStr Optional direction to sort by (`asc` or `desc`). If
- * not specified, order will be ascending.
- * @return The created Query.
- */
- orderBy(
- fieldPath: string | FieldPath,
- directionStr?: OrderByDirection
- ): Query<T>;
- /**
- * Creates and returns a new Query that only returns the first matching
- * documents.
- *
- * @param limit The maximum number of items to return.
- * @return The created Query.
- */
- limit(limit: number): Query<T>;
- /**
- * Creates and returns a new Query that only returns the last matching
- * documents.
- *
- * You must specify at least one `orderBy` clause for `limitToLast` queries,
- * otherwise an exception will be thrown during execution.
- *
- * @param limit The maximum number of items to return.
- * @return The created Query.
- */
- limitToLast(limit: number): Query<T>;
- /**
- * Creates and returns a new Query that starts at the provided document
- * (inclusive). The starting position is relative to the order of the query.
- * The document must contain all of the fields provided in the `orderBy` of
- * this query.
- *
- * @param snapshot The snapshot of the document to start at.
- * @return The created Query.
- */
- startAt(snapshot: DocumentSnapshot<any>): Query<T>;
- /**
- * Creates and returns a new Query that starts at the provided fields
- * relative to the order of the query. The order of the field values
- * must match the order of the order by clauses of the query.
- *
- * @param fieldValues The field values to start this query at, in order
- * of the query's order by.
- * @return The created Query.
- */
- startAt(...fieldValues: any[]): Query<T>;
- /**
- * Creates and returns a new Query that starts after the provided document
- * (exclusive). The starting position is relative to the order of the query.
- * The document must contain all of the fields provided in the orderBy of
- * this query.
- *
- * @param snapshot The snapshot of the document to start after.
- * @return The created Query.
- */
- startAfter(snapshot: DocumentSnapshot<any>): Query<T>;
- /**
- * Creates and returns a new Query that starts after the provided fields
- * relative to the order of the query. The order of the field values
- * must match the order of the order by clauses of the query.
- *
- * @param fieldValues The field values to start this query after, in order
- * of the query's order by.
- * @return The created Query.
- */
- startAfter(...fieldValues: any[]): Query<T>;
- /**
- * Creates and returns a new Query that ends before the provided document
- * (exclusive). The end position is relative to the order of the query. The
- * document must contain all of the fields provided in the orderBy of this
- * query.
- *
- * @param snapshot The snapshot of the document to end before.
- * @return The created Query.
- */
- endBefore(snapshot: DocumentSnapshot<any>): Query<T>;
- /**
- * Creates and returns a new Query that ends before the provided fields
- * relative to the order of the query. The order of the field values
- * must match the order of the order by clauses of the query.
- *
- * @param fieldValues The field values to end this query before, in order
- * of the query's order by.
- * @return The created Query.
- */
- endBefore(...fieldValues: any[]): Query<T>;
- /**
- * Creates and returns a new Query that ends at the provided document
- * (inclusive). The end position is relative to the order of the query. The
- * document must contain all of the fields provided in the orderBy of this
- * query.
- *
- * @param snapshot The snapshot of the document to end at.
- * @return The created Query.
- */
- endAt(snapshot: DocumentSnapshot<any>): Query<T>;
- /**
- * Creates and returns a new Query that ends at the provided fields
- * relative to the order of the query. The order of the field values
- * must match the order of the order by clauses of the query.
- *
- * @param fieldValues The field values to end this query at, in order
- * of the query's order by.
- * @return The created Query.
- */
- endAt(...fieldValues: any[]): Query<T>;
- /**
- * Returns true if this `Query` is equal to the provided one.
- *
- * @param other The `Query` to compare against.
- * @return true if this `Query` is equal to the provided one.
- */
- isEqual(other: Query<T>): boolean;
- /**
- * Executes the query and returns the results as a `QuerySnapshot`.
- *
- * Note: By default, get() attempts to provide up-to-date data when possible
- * by waiting for data from the server, but it may return cached data or fail
- * if you are offline and the server cannot be reached. This behavior can be
- * altered via the `GetOptions` parameter.
- *
- * @param options An object to configure the get behavior.
- * @return A Promise that will be resolved with the results of the Query.
- */
- get(options?: GetOptions): Promise<QuerySnapshot<T>>;
- /**
- * Attaches a listener for QuerySnapshot events. You may either pass
- * individual `onNext` and `onError` callbacks or pass a single observer
- * object with `next` and `error` callbacks. The listener can be cancelled by
- * calling the function that is returned when `onSnapshot` is called.
- *
- * NOTE: Although an `onCompletion` callback can be provided, it will
- * never be called because the snapshot stream is never-ending.
- *
- * @param observer A single object containing `next` and `error` callbacks.
- * @return An unsubscribe function that can be called to cancel
- * the snapshot listener.
- */
- onSnapshot(observer: {
- next?: (snapshot: QuerySnapshot<T>) => void;
- error?: (error: FirestoreError) => void;
- complete?: () => void;
- }): () => void;
- /**
- * Attaches a listener for QuerySnapshot events. You may either pass
- * individual `onNext` and `onError` callbacks or pass a single observer
- * object with `next` and `error` callbacks. The listener can be cancelled by
- * calling the function that is returned when `onSnapshot` is called.
- *
- * NOTE: Although an `onCompletion` callback can be provided, it will
- * never be called because the snapshot stream is never-ending.
- *
- * @param options Options controlling the listen behavior.
- * @param observer A single object containing `next` and `error` callbacks.
- * @return An unsubscribe function that can be called to cancel
- * the snapshot listener.
- */
- onSnapshot(
- options: SnapshotListenOptions,
- observer: {
- next?: (snapshot: QuerySnapshot<T>) => void;
- error?: (error: FirestoreError) => void;
- complete?: () => void;
- }
- ): () => void;
- /**
- * Attaches a listener for QuerySnapshot events. You may either pass
- * individual `onNext` and `onError` callbacks or pass a single observer
- * object with `next` and `error` callbacks. The listener can be cancelled by
- * calling the function that is returned when `onSnapshot` is called.
- *
- * NOTE: Although an `onCompletion` callback can be provided, it will
- * never be called because the snapshot stream is never-ending.
- *
- * @param onNext A callback to be called every time a new `QuerySnapshot`
- * is available.
- * @param onError A callback to be called if the listen fails or is
- * cancelled. No further callbacks will occur.
- * @return An unsubscribe function that can be called to cancel
- * the snapshot listener.
- */
- onSnapshot(
- onNext: (snapshot: QuerySnapshot<T>) => void,
- onError?: (error: FirestoreError) => void,
- onCompletion?: () => void
- ): () => void;
- /**
- * Attaches a listener for QuerySnapshot events. You may either pass
- * individual `onNext` and `onError` callbacks or pass a single observer
- * object with `next` and `error` callbacks. The listener can be cancelled by
- * calling the function that is returned when `onSnapshot` is called.
- *
- * NOTE: Although an `onCompletion` callback can be provided, it will
- * never be called because the snapshot stream is never-ending.
- *
- * @param options Options controlling the listen behavior.
- * @param onNext A callback to be called every time a new `QuerySnapshot`
- * is available.
- * @param onError A callback to be called if the listen fails or is
- * cancelled. No further callbacks will occur.
- * @return An unsubscribe function that can be called to cancel
- * the snapshot listener.
- */
- onSnapshot(
- options: SnapshotListenOptions,
- onNext: (snapshot: QuerySnapshot<T>) => void,
- onError?: (error: FirestoreError) => void,
- onCompletion?: () => void
- ): () => void;
- /**
- * Applies a custom data converter to this Query, allowing you to use your
- * own custom model objects with Firestore. When you call get() on the
- * returned Query, the provided converter will convert between Firestore
- * data and your custom type U.
- *
- * Passing in `null` as the converter parameter removes the current
- * converter.
- *
- * @param converter Converts objects to and from Firestore. Passing in
- * `null` removes the current converter.
- * @return A Query<U> that uses the provided converter.
- */
- withConverter(converter: null): Query<DocumentData>;
- /**
- * Applies a custom data converter to this Query, allowing you to use your
- * own custom model objects with Firestore. When you call get() on the
- * returned Query, the provided converter will convert between Firestore
- * data and your custom type U.
- *
- * Passing in `null` as the converter parameter removes the current
- * converter.
- *
- * @param converter Converts objects to and from Firestore. Passing in
- * `null` removes the current converter.
- * @return A Query<U> that uses the provided converter.
- */
- withConverter<U>(converter: FirestoreDataConverter<U>): Query<U>;
- }
- /**
- * A `QuerySnapshot` contains zero or more `DocumentSnapshot` objects
- * representing the results of a query. The documents can be accessed as an
- * array via the `docs` property or enumerated using the `forEach` method. The
- * number of documents can be determined via the `empty` and `size`
- * properties.
- */
- export class QuerySnapshot<T = DocumentData> {
- private constructor();
- /**
- * The query on which you called `get` or `onSnapshot` in order to get this
- * `QuerySnapshot`.
- */
- readonly query: Query<T>;
- /**
- * Metadata about this snapshot, concerning its source and if it has local
- * modifications.
- */
- readonly metadata: SnapshotMetadata;
- /** An array of all the documents in the `QuerySnapshot`. */
- readonly docs: Array<QueryDocumentSnapshot<T>>;
- /** The number of documents in the `QuerySnapshot`. */
- readonly size: number;
- /** True if there are no documents in the `QuerySnapshot`. */
- readonly empty: boolean;
- /**
- * Returns an array of the documents changes since the last snapshot. If this
- * is the first snapshot, all documents will be in the list as added changes.
- *
- * @param options `SnapshotListenOptions` that control whether metadata-only
- * changes (i.e. only `DocumentSnapshot.metadata` changed) should trigger
- * snapshot events.
- */
- docChanges(options?: SnapshotListenOptions): Array<DocumentChange<T>>;
- /**
- * Enumerates all of the documents in the `QuerySnapshot`.
- *
- * @param callback A callback to be called with a `QueryDocumentSnapshot` for
- * each document in the snapshot.
- * @param thisArg The `this` binding for the callback.
- */
- forEach(
- callback: (result: QueryDocumentSnapshot<T>) => void,
- thisArg?: any
- ): void;
- /**
- * Returns true if this `QuerySnapshot` is equal to the provided one.
- *
- * @param other The `QuerySnapshot` to compare against.
- * @return true if this `QuerySnapshot` is equal to the provided one.
- */
- isEqual(other: QuerySnapshot<T>): boolean;
- }
- /**
- * The type of a `DocumentChange` may be 'added', 'removed', or 'modified'.
- */
- export type DocumentChangeType = 'added' | 'removed' | 'modified';
- /**
- * A `DocumentChange` represents a change to the documents matching a query.
- * It contains the document affected and the type of change that occurred.
- */
- export interface DocumentChange<T = DocumentData> {
- /** The type of change ('added', 'modified', or 'removed'). */
- readonly type: DocumentChangeType;
- /** The document affected by this change. */
- readonly doc: QueryDocumentSnapshot<T>;
- /**
- * The index of the changed document in the result set immediately prior to
- * this `DocumentChange` (i.e. supposing that all prior `DocumentChange` objects
- * have been applied). Is -1 for 'added' events.
- */
- readonly oldIndex: number;
- /**
- * The index of the changed document in the result set immediately after
- * this `DocumentChange` (i.e. supposing that all prior `DocumentChange`
- * objects and the current `DocumentChange` object have been applied).
- * Is -1 for 'removed' events.
- */
- readonly newIndex: number;
- }
- /**
- * A `CollectionReference` object can be used for adding documents, getting
- * document references, and querying for documents (using the methods
- * inherited from `Query`).
- */
- export class CollectionReference<T = DocumentData> extends Query<T> {
- private constructor();
- /** The collection's identifier. */
- readonly id: string;
- /**
- * A reference to the containing `DocumentReference` if this is a subcollection.
- * If this isn't a subcollection, the reference is null.
- */
- readonly parent: DocumentReference<DocumentData> | null;
- /**
- * A string representing the path of the referenced collection (relative
- * to the root of the database).
- */
- readonly path: string;
- /**
- * Get a `DocumentReference` for the document within the collection at the
- * specified path. If no path is specified, an automatically-generated
- * unique ID will be used for the returned DocumentReference.
- *
- * @param documentPath A slash-separated path to a document.
- * @return The `DocumentReference` instance.
- */
- doc(documentPath?: string): DocumentReference<T>;
- /**
- * Add a new document to this collection with the specified data, assigning
- * it a document ID automatically.
- *
- * @param data An Object containing the data for the new document.
- * @return A Promise resolved with a `DocumentReference` pointing to the
- * newly created document after it has been written to the backend.
- */
- add(data: T): Promise<DocumentReference<T>>;
- /**
- * Returns true if this `CollectionReference` is equal to the provided one.
- *
- * @param other The `CollectionReference` to compare against.
- * @return true if this `CollectionReference` is equal to the provided one.
- */
- isEqual(other: CollectionReference<T>): boolean;
- /**
- * Applies a custom data converter to this CollectionReference, allowing you
- * to use your own custom model objects with Firestore. When you call add()
- * on the returned CollectionReference instance, the provided converter will
- * convert between Firestore data and your custom type U.
- *
- * Passing in `null` as the converter parameter removes the current
- * converter.
- *
- * @param converter Converts objects to and from Firestore. Passing in
- * `null` removes the current converter.
- * @return A CollectionReference<U> that uses the provided converter.
- */
- withConverter(converter: null): CollectionReference<DocumentData>;
- /**
- * Applies a custom data converter to this CollectionReference, allowing you
- * to use your own custom model objects with Firestore. When you call add()
- * on the returned CollectionReference instance, the provided converter will
- * convert between Firestore data and your custom type U.
- *
- * Passing in `null` as the converter parameter removes the current
- * converter.
- *
- * @param converter Converts objects to and from Firestore. Passing in
- * `null` removes the current converter.
- * @return A CollectionReference<U> that uses the provided converter.
- */
- withConverter<U>(
- converter: FirestoreDataConverter<U>
- ): CollectionReference<U>;
- }
- /**
- * Sentinel values that can be used when writing document fields with `set()`
- * or `update()`.
- */
- export class FieldValue {
- private constructor();
- /**
- * Returns a sentinel used with `set()` or `update()` to include a
- * server-generated timestamp in the written data.
- */
- static serverTimestamp(): FieldValue;
- /**
- * Returns a sentinel for use with `update()` to mark a field for deletion.
- */
- static delete(): FieldValue;
- /**
- * Returns a special value that can be used with `set()` or `update()` that tells
- * the server to union the given elements with any array value that already
- * exists on the server. Each specified element that doesn't already exist in
- * the array will be added to the end. If the field being modified is not
- * already an array it will be overwritten with an array containing exactly
- * the specified elements.
- *
- * @param elements The elements to union into the array.
- * @return The FieldValue sentinel for use in a call to `set()` or `update()`.
- */
- static arrayUnion(...elements: any[]): FieldValue;
- /**
- * Returns a special value that can be used with `set()` or `update()` that tells
- * the server to remove the given elements from any array value that already
- * exists on the server. All instances of each element specified will be
- * removed from the array. If the field being modified is not already an
- * array it will be overwritten with an empty array.
- *
- * @param elements The elements to remove from the array.
- * @return The FieldValue sentinel for use in a call to `set()` or `update()`.
- */
- static arrayRemove(...elements: any[]): FieldValue;
- /**
- * Returns a special value that can be used with `set()` or `update()` that tells
- * the server to increment the field's current value by the given value.
- *
- * If either the operand or the current field value uses floating point precision,
- * all arithmetic follows IEEE 754 semantics. If both values are integers,
- * values outside of JavaScript's safe number range (`Number.MIN_SAFE_INTEGER` to
- * `Number.MAX_SAFE_INTEGER`) are also subject to precision loss. Furthermore,
- * once processed by the Firestore backend, all integer operations are capped
- * between -2^63 and 2^63-1.
- *
- * If the current field value is not of type `number`, or if the field does not
- * yet exist, the transformation sets the field to the given value.
- *
- * @param n The value to increment by.
- * @return The FieldValue sentinel for use in a call to `set()` or `update()`.
- */
- static increment(n: number): FieldValue;
- /**
- * Returns true if this `FieldValue` is equal to the provided one.
- *
- * @param other The `FieldValue` to compare against.
- * @return true if this `FieldValue` is equal to the provided one.
- */
- isEqual(other: FieldValue): boolean;
- }
- /**
- * A FieldPath refers to a field in a document. The path may consist of a
- * single field name (referring to a top-level field in the document), or a
- * list of field names (referring to a nested field in the document).
- *
- * Create a FieldPath by providing field names. If more than one field
- * name is provided, the path will point to a nested field in a document.
- *
- */
- export class FieldPath {
- /**
- * Creates a FieldPath from the provided field names. If more than one field
- * name is provided, the path will point to a nested field in a document.
- *
- * @param fieldNames A list of field names.
- */
- constructor(...fieldNames: string[]);
- /**
- * Returns a special sentinel `FieldPath` to refer to the ID of a document.
- * It can be used in queries to sort or filter by the document ID.
- */
- static documentId(): FieldPath;
- /**
- * Returns true if this `FieldPath` is equal to the provided one.
- *
- * @param other The `FieldPath` to compare against.
- * @return true if this `FieldPath` is equal to the provided one.
- */
- isEqual(other: FieldPath): boolean;
- }
- /**
- * The set of Firestore status codes. The codes are the same at the ones
- * exposed by gRPC here:
- * https://github.com/grpc/grpc/blob/master/doc/statuscodes.md
- *
- * Possible values:
- * - 'cancelled': The operation was cancelled (typically by the caller).
- * - 'unknown': Unknown error or an error from a different error domain.
- * - 'invalid-argument': Client specified an invalid argument. Note that this
- * differs from 'failed-precondition'. 'invalid-argument' indicates
- * arguments that are problematic regardless of the state of the system
- * (e.g. an invalid field name).
- * - 'deadline-exceeded': Deadline expired before operation could complete.
- * For operations that change the state of the system, this error may be
- * returned even if the operation has completed successfully. For example,
- * a successful response from a server could have been delayed long enough
- * for the deadline to expire.
- * - 'not-found': Some requested document was not found.
- * - 'already-exists': Some document that we attempted to create already
- * exists.
- * - 'permission-denied': The caller does not have permission to execute the
- * specified operation.
- * - 'resource-exhausted': Some resource has been exhausted, perhaps a
- * per-user quota, or perhaps the entire file system is out of space.
- * - 'failed-precondition': Operation was rejected because the system is not
- * in a state required for the operation's execution.
- * - 'aborted': The operation was aborted, typically due to a concurrency
- * issue like transaction aborts, etc.
- * - 'out-of-range': Operation was attempted past the valid range.
- * - 'unimplemented': Operation is not implemented or not supported/enabled.
- * - 'internal': Internal errors. Means some invariants expected by
- * underlying system has been broken. If you see one of these errors,
- * something is very broken.
- * - 'unavailable': The service is currently unavailable. This is most likely
- * a transient condition and may be corrected by retrying with a backoff.
- * - 'data-loss': Unrecoverable data loss or corruption.
- * - 'unauthenticated': The request does not have valid authentication
- * credentials for the operation.
- */
- export type FirestoreErrorCode =
- | 'cancelled'
- | 'unknown'
- | 'invalid-argument'
- | 'deadline-exceeded'
- | 'not-found'
- | 'already-exists'
- | 'permission-denied'
- | 'resource-exhausted'
- | 'failed-precondition'
- | 'aborted'
- | 'out-of-range'
- | 'unimplemented'
- | 'internal'
- | 'unavailable'
- | 'data-loss'
- | 'unauthenticated';
- /** An error returned by a Firestore operation. */
- // TODO(b/63008957): FirestoreError should extend firebase.FirebaseError
- export interface FirestoreError {
- code: FirestoreErrorCode;
- message: string;
- name: string;
- stack?: string;
- }
- export type EmulatorMockTokenOptions = firebase.EmulatorMockTokenOptions;
- }
- export default firebase;
- export as namespace firebase;
|