1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188 |
- 'use strict';
- var tslib = require('tslib');
- var util = require('@firebase/util');
- var app = require('@firebase/app');
- var component = require('@firebase/component');
- var fetchImpl = require('node-fetch');
- var logger = require('@firebase/logger');
- function _interopNamespace(e) {
- if (e && e.__esModule) return e;
- var n = Object.create(null);
- if (e) {
- Object.keys(e).forEach(function (k) {
- if (k !== 'default') {
- var d = Object.getOwnPropertyDescriptor(e, k);
- Object.defineProperty(n, k, d.get ? d : {
- enumerable: true,
- get: function () { return e[k]; }
- });
- }
- });
- }
- n["default"] = e;
- return Object.freeze(n);
- }
- var fetchImpl__namespace = _interopNamespace(fetchImpl);
- var FactorId = {
-
- PHONE: 'phone',
- TOTP: 'totp'
- };
- var ProviderId = {
-
- FACEBOOK: 'facebook.com',
-
- GITHUB: 'github.com',
-
- GOOGLE: 'google.com',
-
- PASSWORD: 'password',
-
- PHONE: 'phone',
-
- TWITTER: 'twitter.com'
- };
- var SignInMethod = {
-
- EMAIL_LINK: 'emailLink',
-
- EMAIL_PASSWORD: 'password',
-
- FACEBOOK: 'facebook.com',
-
- GITHUB: 'github.com',
-
- GOOGLE: 'google.com',
-
- PHONE: 'phone',
-
- TWITTER: 'twitter.com'
- };
- var OperationType = {
-
- LINK: 'link',
-
- REAUTHENTICATE: 'reauthenticate',
-
- SIGN_IN: 'signIn'
- };
- var ActionCodeOperation = {
-
- EMAIL_SIGNIN: 'EMAIL_SIGNIN',
-
- PASSWORD_RESET: 'PASSWORD_RESET',
-
- RECOVER_EMAIL: 'RECOVER_EMAIL',
-
- REVERT_SECOND_FACTOR_ADDITION: 'REVERT_SECOND_FACTOR_ADDITION',
-
- VERIFY_AND_CHANGE_EMAIL: 'VERIFY_AND_CHANGE_EMAIL',
-
- VERIFY_EMAIL: 'VERIFY_EMAIL'
- };
- function _debugErrorMap() {
- var _a;
- return _a = {},
- _a["admin-restricted-operation" ] = 'This operation is restricted to administrators only.',
- _a["argument-error" ] = '',
- _a["app-not-authorized" ] = "This 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.',
- _a["app-not-installed" ] = 'The requested mobile application corresponding to the identifier (' +
- 'Android package name or iOS bundle ID) provided is not installed on ' +
- 'this device.',
- _a["captcha-check-failed" ] = 'The reCAPTCHA response token provided is either invalid, expired, ' +
- 'already used or the domain associated with it does not match the list ' +
- 'of whitelisted domains.',
- _a["code-expired" ] = 'The SMS code has expired. Please re-send the verification code to try ' +
- 'again.',
- _a["cordova-not-ready" ] = 'Cordova framework is not ready.',
- _a["cors-unsupported" ] = 'This browser is not supported.',
- _a["credential-already-in-use" ] = 'This credential is already associated with a different user account.',
- _a["custom-token-mismatch" ] = 'The custom token corresponds to a different audience.',
- _a["requires-recent-login" ] = 'This operation is sensitive and requires recent authentication. Log in ' +
- 'again before retrying this request.',
- _a["dependent-sdk-initialized-before-auth" ] = 'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +
- 'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +
- 'starting any other Firebase SDK.',
- _a["dynamic-link-not-activated" ] = 'Please activate Dynamic Links in the Firebase Console and agree to the terms and ' +
- 'conditions.',
- _a["email-change-needs-verification" ] = 'Multi-factor users must always have a verified email.',
- _a["email-already-in-use" ] = 'The email address is already in use by another account.',
- _a["emulator-config-failed" ] = 'Auth instance has already been used to make a network call. Auth can ' +
- 'no longer be configured to use the emulator. Try calling ' +
- '"connectAuthEmulator()" sooner.',
- _a["expired-action-code" ] = 'The action code has expired.',
- _a["cancelled-popup-request" ] = 'This operation has been cancelled due to another conflicting popup being opened.',
- _a["internal-error" ] = 'An internal AuthError has occurred.',
- _a["invalid-app-credential" ] = 'The phone verification request contains an invalid application verifier.' +
- ' The reCAPTCHA token response is either invalid or expired.',
- _a["invalid-app-id" ] = 'The mobile app identifier is not registed for the current project.',
- _a["invalid-user-token" ] = "This user's credential isn't valid for this project. This can happen " +
- "if the user's token has been tampered with, or if the user isn't for " +
- 'the project associated with this API key.',
- _a["invalid-auth-event" ] = 'An internal AuthError has occurred.',
- _a["invalid-verification-code" ] = 'The SMS verification code used to create the phone auth credential is ' +
- 'invalid. Please resend the verification code sms and be sure to use the ' +
- 'verification code provided by the user.',
- _a["invalid-continue-uri" ] = 'The continue URL provided in the request is invalid.',
- _a["invalid-cordova-configuration" ] = 'The following Cordova plugins must be installed to enable OAuth sign-in: ' +
- 'cordova-plugin-buildinfo, cordova-universal-links-plugin, ' +
- 'cordova-plugin-browsertab, cordova-plugin-inappbrowser and ' +
- 'cordova-plugin-customurlscheme.',
- _a["invalid-custom-token" ] = 'The custom token format is incorrect. Please check the documentation.',
- _a["invalid-dynamic-link-domain" ] = 'The provided dynamic link domain is not configured or authorized for the current project.',
- _a["invalid-email" ] = 'The email address is badly formatted.',
- _a["invalid-emulator-scheme" ] = 'Emulator URL must start with a valid scheme (http:// or https://).',
- _a["invalid-api-key" ] = 'Your API key is invalid, please check you have copied it correctly.',
- _a["invalid-cert-hash" ] = 'The SHA-1 certificate hash provided is invalid.',
- _a["invalid-credential" ] = 'The supplied auth credential is malformed or has expired.',
- _a["invalid-message-payload" ] = 'The email template corresponding to this action contains invalid characters in its message. ' +
- 'Please fix by going to the Auth email templates section in the Firebase Console.',
- _a["invalid-multi-factor-session" ] = 'The request does not contain a valid proof of first factor successful sign-in.',
- _a["invalid-oauth-provider" ] = 'EmailAuthProvider is not supported for this operation. This operation ' +
- 'only supports OAuth providers.',
- _a["invalid-oauth-client-id" ] = 'The OAuth client ID provided is either invalid or does not match the ' +
- 'specified API key.',
- _a["unauthorized-domain" ] = 'This domain is not authorized for OAuth operations for your Firebase ' +
- 'project. Edit the list of authorized domains from the Firebase console.',
- _a["invalid-action-code" ] = 'The action code is invalid. This can happen if the code is malformed, ' +
- 'expired, or has already been used.',
- _a["wrong-password" ] = 'The password is invalid or the user does not have a password.',
- _a["invalid-persistence-type" ] = 'The specified persistence type is invalid. It can only be local, session or none.',
- _a["invalid-phone-number" ] = 'The format of the phone number provided is incorrect. Please enter the ' +
- 'phone number in a format that can be parsed into E.164 format. E.164 ' +
- 'phone numbers are written in the format [+][country code][subscriber ' +
- 'number including area code].',
- _a["invalid-provider-id" ] = 'The specified provider ID is invalid.',
- _a["invalid-recipient-email" ] = 'The email corresponding to this action failed to send as the provided ' +
- 'recipient email address is invalid.',
- _a["invalid-sender" ] = 'The email template corresponding to this action contains an invalid sender email or name. ' +
- 'Please fix by going to the Auth email templates section in the Firebase Console.',
- _a["invalid-verification-id" ] = 'The verification ID used to create the phone auth credential is invalid.',
- _a["invalid-tenant-id" ] = "The Auth instance's tenant ID is invalid.",
- _a["login-blocked" ] = 'Login blocked by user-provided method: {$originalMessage}',
- _a["missing-android-pkg-name" ] = 'An Android Package Name must be provided if the Android App is required to be installed.',
- _a["auth-domain-config-required" ] = 'Be sure to include authDomain when calling firebase.initializeApp(), ' +
- 'by following the instructions in the Firebase console.',
- _a["missing-app-credential" ] = 'The phone verification request is missing an application verifier ' +
- 'assertion. A reCAPTCHA response token needs to be provided.',
- _a["missing-verification-code" ] = 'The phone auth credential was created with an empty SMS verification code.',
- _a["missing-continue-uri" ] = 'A continue URL must be provided in the request.',
- _a["missing-iframe-start" ] = 'An internal AuthError has occurred.',
- _a["missing-ios-bundle-id" ] = 'An iOS Bundle ID must be provided if an App Store ID is provided.',
- _a["missing-or-invalid-nonce" ] = 'The request does not contain a valid nonce. This can occur if the ' +
- 'SHA-256 hash of the provided raw nonce does not match the hashed nonce ' +
- 'in the ID token payload.',
- _a["missing-password" ] = 'A non-empty password must be provided',
- _a["missing-multi-factor-info" ] = 'No second factor identifier is provided.',
- _a["missing-multi-factor-session" ] = 'The request is missing proof of first factor successful sign-in.',
- _a["missing-phone-number" ] = 'To send verification codes, provide a phone number for the recipient.',
- _a["missing-verification-id" ] = 'The phone auth credential was created with an empty verification ID.',
- _a["app-deleted" ] = 'This instance of FirebaseApp has been deleted.',
- _a["multi-factor-info-not-found" ] = 'The user does not have a second factor matching the identifier provided.',
- _a["multi-factor-auth-required" ] = 'Proof of ownership of a second factor is required to complete sign-in.',
- _a["account-exists-with-different-credential" ] = 'An account already exists with the same email address but different ' +
- 'sign-in credentials. Sign in using a provider associated with this ' +
- 'email address.',
- _a["network-request-failed" ] = 'A network AuthError (such as timeout, interrupted connection or unreachable host) has occurred.',
- _a["no-auth-event" ] = 'An internal AuthError has occurred.',
- _a["no-such-provider" ] = 'User was not linked to an account with the given provider.',
- _a["null-user" ] = 'A null user object was provided as the argument for an operation which ' +
- 'requires a non-null user object.',
- _a["operation-not-allowed" ] = 'The given sign-in provider is disabled for this Firebase project. ' +
- 'Enable it in the Firebase console, under the sign-in method tab of the ' +
- 'Auth section.',
- _a["operation-not-supported-in-this-environment" ] = 'This operation is not supported in the environment this application is ' +
- 'running on. "location.protocol" must be http, https or chrome-extension' +
- ' and web storage must be enabled.',
- _a["popup-blocked" ] = 'Unable to establish a connection with the popup. It may have been blocked by the browser.',
- _a["popup-closed-by-user" ] = 'The popup has been closed by the user before finalizing the operation.',
- _a["provider-already-linked" ] = 'User can only be linked to one identity for the given provider.',
- _a["quota-exceeded" ] = "The project's quota for this operation has been exceeded.",
- _a["redirect-cancelled-by-user" ] = 'The redirect operation has been cancelled by the user before finalizing.',
- _a["redirect-operation-pending" ] = 'A redirect sign-in operation is already pending.',
- _a["rejected-credential" ] = 'The request contains malformed or mismatching credentials.',
- _a["second-factor-already-in-use" ] = 'The second factor is already enrolled on this account.',
- _a["maximum-second-factor-count-exceeded" ] = 'The maximum allowed number of second factors on a user has been exceeded.',
- _a["tenant-id-mismatch" ] = "The provided tenant ID does not match the Auth instance's tenant ID",
- _a["timeout" ] = 'The operation has timed out.',
- _a["user-token-expired" ] = "The user's credential is no longer valid. The user must sign in again.",
- _a["too-many-requests" ] = 'We have blocked all requests from this device due to unusual activity. ' +
- 'Try again later.',
- _a["unauthorized-continue-uri" ] = 'The domain of the continue URL is not whitelisted. Please whitelist ' +
- 'the domain in the Firebase console.',
- _a["unsupported-first-factor" ] = 'Enrolling a second factor or signing in with a multi-factor account requires sign-in with a supported first factor.',
- _a["unsupported-persistence-type" ] = 'The current environment does not support the specified persistence type.',
- _a["unsupported-tenant-operation" ] = 'This operation is not supported in a multi-tenant context.',
- _a["unverified-email" ] = 'The operation requires a verified email.',
- _a["user-cancelled" ] = 'The user did not grant your application the permissions it requested.',
- _a["user-not-found" ] = 'There is no user record corresponding to this identifier. The user may ' +
- 'have been deleted.',
- _a["user-disabled" ] = 'The user account has been disabled by an administrator.',
- _a["user-mismatch" ] = 'The supplied credentials do not correspond to the previously signed in user.',
- _a["user-signed-out" ] = '',
- _a["weak-password" ] = 'The password must be 6 characters long or more.',
- _a["web-storage-unsupported" ] = 'This browser is not supported or 3rd party cookies and data may be disabled.',
- _a["already-initialized" ] = 'initializeAuth() has already been called with ' +
- 'different options. To avoid this error, call initializeAuth() with the ' +
- 'same options as when it was originally called, or call getAuth() to return the' +
- ' already initialized instance.',
- _a["missing-recaptcha-token" ] = 'The reCAPTCHA token is missing when sending request to the backend.',
- _a["invalid-recaptcha-token" ] = 'The reCAPTCHA token is invalid when sending request to the backend.',
- _a["invalid-recaptcha-action" ] = 'The reCAPTCHA action is invalid when sending request to the backend.',
- _a["recaptcha-not-enabled" ] = 'reCAPTCHA Enterprise integration is not enabled for this project.',
- _a["missing-client-type" ] = 'The reCAPTCHA client type is missing when sending request to the backend.',
- _a["missing-recaptcha-version" ] = 'The reCAPTCHA version is missing when sending request to the backend.',
- _a["invalid-req-type" ] = 'Invalid request parameters.',
- _a["invalid-recaptcha-version" ] = 'The reCAPTCHA version is invalid when sending request to the backend.',
- _a;
- }
- function _prodErrorMap() {
- var _a;
-
-
-
- return _a = {},
- _a["dependent-sdk-initialized-before-auth" ] = 'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +
- 'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +
- 'starting any other Firebase SDK.',
- _a;
- }
- var debugErrorMap = _debugErrorMap;
- var prodErrorMap = _prodErrorMap;
- var _DEFAULT_AUTH_ERROR_FACTORY = new util.ErrorFactory('auth', 'Firebase', _prodErrorMap());
- var AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY = {
- ADMIN_ONLY_OPERATION: 'auth/admin-restricted-operation',
- ARGUMENT_ERROR: 'auth/argument-error',
- APP_NOT_AUTHORIZED: 'auth/app-not-authorized',
- APP_NOT_INSTALLED: 'auth/app-not-installed',
- CAPTCHA_CHECK_FAILED: 'auth/captcha-check-failed',
- CODE_EXPIRED: 'auth/code-expired',
- CORDOVA_NOT_READY: 'auth/cordova-not-ready',
- CORS_UNSUPPORTED: 'auth/cors-unsupported',
- CREDENTIAL_ALREADY_IN_USE: 'auth/credential-already-in-use',
- CREDENTIAL_MISMATCH: 'auth/custom-token-mismatch',
- CREDENTIAL_TOO_OLD_LOGIN_AGAIN: 'auth/requires-recent-login',
- DEPENDENT_SDK_INIT_BEFORE_AUTH: 'auth/dependent-sdk-initialized-before-auth',
- DYNAMIC_LINK_NOT_ACTIVATED: 'auth/dynamic-link-not-activated',
- EMAIL_CHANGE_NEEDS_VERIFICATION: 'auth/email-change-needs-verification',
- EMAIL_EXISTS: 'auth/email-already-in-use',
- EMULATOR_CONFIG_FAILED: 'auth/emulator-config-failed',
- EXPIRED_OOB_CODE: 'auth/expired-action-code',
- EXPIRED_POPUP_REQUEST: 'auth/cancelled-popup-request',
- INTERNAL_ERROR: 'auth/internal-error',
- INVALID_API_KEY: 'auth/invalid-api-key',
- INVALID_APP_CREDENTIAL: 'auth/invalid-app-credential',
- INVALID_APP_ID: 'auth/invalid-app-id',
- INVALID_AUTH: 'auth/invalid-user-token',
- INVALID_AUTH_EVENT: 'auth/invalid-auth-event',
- INVALID_CERT_HASH: 'auth/invalid-cert-hash',
- INVALID_CODE: 'auth/invalid-verification-code',
- INVALID_CONTINUE_URI: 'auth/invalid-continue-uri',
- INVALID_CORDOVA_CONFIGURATION: 'auth/invalid-cordova-configuration',
- INVALID_CUSTOM_TOKEN: 'auth/invalid-custom-token',
- INVALID_DYNAMIC_LINK_DOMAIN: 'auth/invalid-dynamic-link-domain',
- INVALID_EMAIL: 'auth/invalid-email',
- INVALID_EMULATOR_SCHEME: 'auth/invalid-emulator-scheme',
- INVALID_IDP_RESPONSE: 'auth/invalid-credential',
- INVALID_MESSAGE_PAYLOAD: 'auth/invalid-message-payload',
- INVALID_MFA_SESSION: 'auth/invalid-multi-factor-session',
- INVALID_OAUTH_CLIENT_ID: 'auth/invalid-oauth-client-id',
- INVALID_OAUTH_PROVIDER: 'auth/invalid-oauth-provider',
- INVALID_OOB_CODE: 'auth/invalid-action-code',
- INVALID_ORIGIN: 'auth/unauthorized-domain',
- INVALID_PASSWORD: 'auth/wrong-password',
- INVALID_PERSISTENCE: 'auth/invalid-persistence-type',
- INVALID_PHONE_NUMBER: 'auth/invalid-phone-number',
- INVALID_PROVIDER_ID: 'auth/invalid-provider-id',
- INVALID_RECIPIENT_EMAIL: 'auth/invalid-recipient-email',
- INVALID_SENDER: 'auth/invalid-sender',
- INVALID_SESSION_INFO: 'auth/invalid-verification-id',
- INVALID_TENANT_ID: 'auth/invalid-tenant-id',
- MFA_INFO_NOT_FOUND: 'auth/multi-factor-info-not-found',
- MFA_REQUIRED: 'auth/multi-factor-auth-required',
- MISSING_ANDROID_PACKAGE_NAME: 'auth/missing-android-pkg-name',
- MISSING_APP_CREDENTIAL: 'auth/missing-app-credential',
- MISSING_AUTH_DOMAIN: 'auth/auth-domain-config-required',
- MISSING_CODE: 'auth/missing-verification-code',
- MISSING_CONTINUE_URI: 'auth/missing-continue-uri',
- MISSING_IFRAME_START: 'auth/missing-iframe-start',
- MISSING_IOS_BUNDLE_ID: 'auth/missing-ios-bundle-id',
- MISSING_OR_INVALID_NONCE: 'auth/missing-or-invalid-nonce',
- MISSING_MFA_INFO: 'auth/missing-multi-factor-info',
- MISSING_MFA_SESSION: 'auth/missing-multi-factor-session',
- MISSING_PHONE_NUMBER: 'auth/missing-phone-number',
- MISSING_SESSION_INFO: 'auth/missing-verification-id',
- MODULE_DESTROYED: 'auth/app-deleted',
- NEED_CONFIRMATION: 'auth/account-exists-with-different-credential',
- NETWORK_REQUEST_FAILED: 'auth/network-request-failed',
- NULL_USER: 'auth/null-user',
- NO_AUTH_EVENT: 'auth/no-auth-event',
- NO_SUCH_PROVIDER: 'auth/no-such-provider',
- OPERATION_NOT_ALLOWED: 'auth/operation-not-allowed',
- OPERATION_NOT_SUPPORTED: 'auth/operation-not-supported-in-this-environment',
- POPUP_BLOCKED: 'auth/popup-blocked',
- POPUP_CLOSED_BY_USER: 'auth/popup-closed-by-user',
- PROVIDER_ALREADY_LINKED: 'auth/provider-already-linked',
- QUOTA_EXCEEDED: 'auth/quota-exceeded',
- REDIRECT_CANCELLED_BY_USER: 'auth/redirect-cancelled-by-user',
- REDIRECT_OPERATION_PENDING: 'auth/redirect-operation-pending',
- REJECTED_CREDENTIAL: 'auth/rejected-credential',
- SECOND_FACTOR_ALREADY_ENROLLED: 'auth/second-factor-already-in-use',
- SECOND_FACTOR_LIMIT_EXCEEDED: 'auth/maximum-second-factor-count-exceeded',
- TENANT_ID_MISMATCH: 'auth/tenant-id-mismatch',
- TIMEOUT: 'auth/timeout',
- TOKEN_EXPIRED: 'auth/user-token-expired',
- TOO_MANY_ATTEMPTS_TRY_LATER: 'auth/too-many-requests',
- UNAUTHORIZED_DOMAIN: 'auth/unauthorized-continue-uri',
- UNSUPPORTED_FIRST_FACTOR: 'auth/unsupported-first-factor',
- UNSUPPORTED_PERSISTENCE: 'auth/unsupported-persistence-type',
- UNSUPPORTED_TENANT_OPERATION: 'auth/unsupported-tenant-operation',
- UNVERIFIED_EMAIL: 'auth/unverified-email',
- USER_CANCELLED: 'auth/user-cancelled',
- USER_DELETED: 'auth/user-not-found',
- USER_DISABLED: 'auth/user-disabled',
- USER_MISMATCH: 'auth/user-mismatch',
- USER_SIGNED_OUT: 'auth/user-signed-out',
- WEAK_PASSWORD: 'auth/weak-password',
- WEB_STORAGE_UNSUPPORTED: 'auth/web-storage-unsupported',
- ALREADY_INITIALIZED: 'auth/already-initialized',
- RECAPTCHA_NOT_ENABLED: 'auth/recaptcha-not-enabled',
- MISSING_RECAPTCHA_TOKEN: 'auth/missing-recaptcha-token',
- INVALID_RECAPTCHA_TOKEN: 'auth/invalid-recaptcha-token',
- INVALID_RECAPTCHA_ACTION: 'auth/invalid-recaptcha-action',
- MISSING_CLIENT_TYPE: 'auth/missing-client-type',
- MISSING_RECAPTCHA_VERSION: 'auth/missing-recaptcha-version',
- INVALID_RECAPTCHA_VERSION: 'auth/invalid-recaptcha-version',
- INVALID_REQ_TYPE: 'auth/invalid-req-type'
- };
- var logClient = new logger.Logger('@firebase/auth');
- function _logWarn(msg) {
- var args = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- args[_i - 1] = arguments[_i];
- }
- if (logClient.logLevel <= logger.LogLevel.WARN) {
- logClient.warn.apply(logClient, tslib.__spreadArray(["Auth (".concat(app.SDK_VERSION, "): ").concat(msg)], args, false));
- }
- }
- function _logError(msg) {
- var args = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- args[_i - 1] = arguments[_i];
- }
- if (logClient.logLevel <= logger.LogLevel.ERROR) {
- logClient.error.apply(logClient, tslib.__spreadArray(["Auth (".concat(app.SDK_VERSION, "): ").concat(msg)], args, false));
- }
- }
- function _fail(authOrCode) {
- var rest = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- rest[_i - 1] = arguments[_i];
- }
- throw createErrorInternal.apply(void 0, tslib.__spreadArray([authOrCode], rest, false));
- }
- function _createError(authOrCode) {
- var rest = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- rest[_i - 1] = arguments[_i];
- }
- return createErrorInternal.apply(void 0, tslib.__spreadArray([authOrCode], rest, false));
- }
- function _errorWithCustomMessage(auth, code, message) {
- var _a;
- var errorMap = tslib.__assign(tslib.__assign({}, prodErrorMap()), (_a = {}, _a[code] = message, _a));
- var factory = new util.ErrorFactory('auth', 'Firebase', errorMap);
- return factory.create(code, {
- appName: auth.name
- });
- }
- function createErrorInternal(authOrCode) {
- var _a;
- var rest = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- rest[_i - 1] = arguments[_i];
- }
- if (typeof authOrCode !== 'string') {
- var code = rest[0];
- var fullParams = tslib.__spreadArray([], rest.slice(1), true);
- if (fullParams[0]) {
- fullParams[0].appName = authOrCode.name;
- }
- return (_a = authOrCode._errorFactory).create.apply(_a, tslib.__spreadArray([code], fullParams, false));
- }
- return _DEFAULT_AUTH_ERROR_FACTORY.create.apply(_DEFAULT_AUTH_ERROR_FACTORY, tslib.__spreadArray([authOrCode], rest, false));
- }
- function _assert(assertion, authOrCode) {
- var rest = [];
- for (var _i = 2; _i < arguments.length; _i++) {
- rest[_i - 2] = arguments[_i];
- }
- if (!assertion) {
- throw createErrorInternal.apply(void 0, tslib.__spreadArray([authOrCode], rest, false));
- }
- }
- function debugFail(failure) {
-
-
- var message = "INTERNAL ASSERTION FAILED: " + failure;
- _logError(message);
-
-
-
- throw new Error(message);
- }
- function debugAssert(assertion, message) {
- if (!assertion) {
- debugFail(message);
- }
- }
- function _getCurrentUrl() {
- var _a;
- return (typeof self !== 'undefined' && ((_a = self.location) === null || _a === void 0 ? void 0 : _a.href)) || '';
- }
- function _isHttpOrHttps() {
- return _getCurrentScheme() === 'http:' || _getCurrentScheme() === 'https:';
- }
- function _getCurrentScheme() {
- var _a;
- return (typeof self !== 'undefined' && ((_a = self.location) === null || _a === void 0 ? void 0 : _a.protocol)) || null;
- }
- function _isOnline() {
- if (typeof navigator !== 'undefined' &&
- navigator &&
- 'onLine' in navigator &&
- typeof navigator.onLine === 'boolean' &&
-
-
-
-
-
- (_isHttpOrHttps() || util.isBrowserExtension() || 'connection' in navigator)) {
- return navigator.onLine;
- }
-
- return true;
- }
- function _getUserLanguage() {
- if (typeof navigator === 'undefined') {
- return null;
- }
- var navigatorLanguage = navigator;
- return (
-
- (navigatorLanguage.languages && navigatorLanguage.languages[0]) ||
-
-
- navigatorLanguage.language ||
-
- null);
- }
- var Delay = (function () {
- function Delay(shortDelay, longDelay) {
- this.shortDelay = shortDelay;
- this.longDelay = longDelay;
-
- debugAssert(longDelay > shortDelay, 'Short delay should be less than long delay!');
- this.isMobile = util.isMobileCordova() || util.isReactNative();
- }
- Delay.prototype.get = function () {
- if (!_isOnline()) {
-
- return Math.min(5000 , this.shortDelay);
- }
-
-
-
-
- return this.isMobile ? this.longDelay : this.shortDelay;
- };
- return Delay;
- }());
- function _emulatorUrl(config, path) {
- debugAssert(config.emulator, 'Emulator should always be set here');
- var url = config.emulator.url;
- if (!path) {
- return url;
- }
- return "".concat(url).concat(path.startsWith('/') ? path.slice(1) : path);
- }
- var FetchProvider = (function () {
- function FetchProvider() {
- }
- FetchProvider.initialize = function (fetchImpl, headersImpl, responseImpl) {
- this.fetchImpl = fetchImpl;
- if (headersImpl) {
- this.headersImpl = headersImpl;
- }
- if (responseImpl) {
- this.responseImpl = responseImpl;
- }
- };
- FetchProvider.fetch = function () {
- if (this.fetchImpl) {
- return this.fetchImpl;
- }
- if (typeof self !== 'undefined' && 'fetch' in self) {
- return self.fetch;
- }
- debugFail('Could not find fetch implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');
- };
- FetchProvider.headers = function () {
- if (this.headersImpl) {
- return this.headersImpl;
- }
- if (typeof self !== 'undefined' && 'Headers' in self) {
- return self.Headers;
- }
- debugFail('Could not find Headers implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');
- };
- FetchProvider.response = function () {
- if (this.responseImpl) {
- return this.responseImpl;
- }
- if (typeof self !== 'undefined' && 'Response' in self) {
- return self.Response;
- }
- debugFail('Could not find Response implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');
- };
- return FetchProvider;
- }());
- var _a$1;
- var SERVER_ERROR_MAP = (_a$1 = {},
-
- _a$1["CREDENTIAL_MISMATCH" ] = "custom-token-mismatch" ,
-
- _a$1["MISSING_CUSTOM_TOKEN" ] = "internal-error" ,
-
- _a$1["INVALID_IDENTIFIER" ] = "invalid-email" ,
-
- _a$1["MISSING_CONTINUE_URI" ] = "internal-error" ,
-
- _a$1["INVALID_PASSWORD" ] = "wrong-password" ,
-
- _a$1["MISSING_PASSWORD" ] = "missing-password" ,
-
- _a$1["EMAIL_EXISTS" ] = "email-already-in-use" ,
- _a$1["PASSWORD_LOGIN_DISABLED" ] = "operation-not-allowed" ,
-
- _a$1["INVALID_IDP_RESPONSE" ] = "invalid-credential" ,
- _a$1["INVALID_PENDING_TOKEN" ] = "invalid-credential" ,
- _a$1["FEDERATED_USER_ID_ALREADY_LINKED" ] = "credential-already-in-use" ,
-
- _a$1["MISSING_REQ_TYPE" ] = "internal-error" ,
-
- _a$1["EMAIL_NOT_FOUND" ] = "user-not-found" ,
- _a$1["RESET_PASSWORD_EXCEED_LIMIT" ] = "too-many-requests" ,
- _a$1["EXPIRED_OOB_CODE" ] = "expired-action-code" ,
- _a$1["INVALID_OOB_CODE" ] = "invalid-action-code" ,
-
- _a$1["MISSING_OOB_CODE" ] = "internal-error" ,
-
- _a$1["CREDENTIAL_TOO_OLD_LOGIN_AGAIN" ] = "requires-recent-login" ,
- _a$1["INVALID_ID_TOKEN" ] = "invalid-user-token" ,
- _a$1["TOKEN_EXPIRED" ] = "user-token-expired" ,
- _a$1["USER_NOT_FOUND" ] = "user-token-expired" ,
-
- _a$1["TOO_MANY_ATTEMPTS_TRY_LATER" ] = "too-many-requests" ,
-
- _a$1["INVALID_CODE" ] = "invalid-verification-code" ,
- _a$1["INVALID_SESSION_INFO" ] = "invalid-verification-id" ,
- _a$1["INVALID_TEMPORARY_PROOF" ] = "invalid-credential" ,
- _a$1["MISSING_SESSION_INFO" ] = "missing-verification-id" ,
- _a$1["SESSION_EXPIRED" ] = "code-expired" ,
-
-
-
- _a$1["MISSING_ANDROID_PACKAGE_NAME" ] = "missing-android-pkg-name" ,
- _a$1["UNAUTHORIZED_DOMAIN" ] = "unauthorized-continue-uri" ,
-
- _a$1["INVALID_OAUTH_CLIENT_ID" ] = "invalid-oauth-client-id" ,
-
- _a$1["ADMIN_ONLY_OPERATION" ] = "admin-restricted-operation" ,
-
- _a$1["INVALID_MFA_PENDING_CREDENTIAL" ] = "invalid-multi-factor-session" ,
- _a$1["MFA_ENROLLMENT_NOT_FOUND" ] = "multi-factor-info-not-found" ,
- _a$1["MISSING_MFA_ENROLLMENT_ID" ] = "missing-multi-factor-info" ,
- _a$1["MISSING_MFA_PENDING_CREDENTIAL" ] = "missing-multi-factor-session" ,
- _a$1["SECOND_FACTOR_EXISTS" ] = "second-factor-already-in-use" ,
- _a$1["SECOND_FACTOR_LIMIT_EXCEEDED" ] = "maximum-second-factor-count-exceeded" ,
-
- _a$1["BLOCKING_FUNCTION_ERROR_RESPONSE" ] = "internal-error" ,
-
- _a$1["RECAPTCHA_NOT_ENABLED" ] = "recaptcha-not-enabled" ,
- _a$1["MISSING_RECAPTCHA_TOKEN" ] = "missing-recaptcha-token" ,
- _a$1["INVALID_RECAPTCHA_TOKEN" ] = "invalid-recaptcha-token" ,
- _a$1["INVALID_RECAPTCHA_ACTION" ] = "invalid-recaptcha-action" ,
- _a$1["MISSING_CLIENT_TYPE" ] = "missing-client-type" ,
- _a$1["MISSING_RECAPTCHA_VERSION" ] = "missing-recaptcha-version" ,
- _a$1["INVALID_RECAPTCHA_VERSION" ] = "invalid-recaptcha-version" ,
- _a$1["INVALID_REQ_TYPE" ] = "invalid-req-type" ,
- _a$1);
- var DEFAULT_API_TIMEOUT_MS = new Delay(30000, 60000);
- function _addTidIfNecessary(auth, request) {
- if (auth.tenantId && !request.tenantId) {
- return tslib.__assign(tslib.__assign({}, request), { tenantId: auth.tenantId });
- }
- return request;
- }
- function _performApiRequest(auth, method, path, request, customErrorMap) {
- if (customErrorMap === void 0) { customErrorMap = {}; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- var _this = this;
- return tslib.__generator(this, function (_a) {
- return [2 , _performFetchWithErrorHandling(auth, customErrorMap, function () { return tslib.__awaiter(_this, void 0, void 0, function () {
- var body, params, query, headers;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- body = {};
- params = {};
- if (request) {
- if (method === "GET" ) {
- params = request;
- }
- else {
- body = {
- body: JSON.stringify(request)
- };
- }
- }
- query = util.querystring(tslib.__assign({ key: auth.config.apiKey }, params)).slice(1);
- return [4 , auth._getAdditionalHeaders()];
- case 1:
- headers = _a.sent();
- headers["Content-Type" ] = 'application/json';
- if (auth.languageCode) {
- headers["X-Firebase-Locale" ] = auth.languageCode;
- }
- return [2 , FetchProvider.fetch()(_getFinalTarget(auth, auth.config.apiHost, path, query), tslib.__assign({ method: method, headers: headers, referrerPolicy: 'no-referrer' }, body))];
- }
- });
- }); })];
- });
- });
- }
- function _performFetchWithErrorHandling(auth, customErrorMap, fetchFn) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var errorMap, networkTimeout, response, json, errorMessage, _a, serverErrorCode, serverErrorMessage, authError, e_1;
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- auth._canInitEmulator = false;
- errorMap = tslib.__assign(tslib.__assign({}, SERVER_ERROR_MAP), customErrorMap);
- _b.label = 1;
- case 1:
- _b.trys.push([1, 4, , 5]);
- networkTimeout = new NetworkTimeout(auth);
- return [4 , Promise.race([
- fetchFn(),
- networkTimeout.promise
- ])];
- case 2:
- response = _b.sent();
-
-
- networkTimeout.clearNetworkTimeout();
- return [4 , response.json()];
- case 3:
- json = _b.sent();
- if ('needConfirmation' in json) {
- throw _makeTaggedError(auth, "account-exists-with-different-credential" , json);
- }
- if (response.ok && !('errorMessage' in json)) {
- return [2 , json];
- }
- else {
- errorMessage = response.ok ? json.errorMessage : json.error.message;
- _a = errorMessage.split(' : '), serverErrorCode = _a[0], serverErrorMessage = _a[1];
- if (serverErrorCode === "FEDERATED_USER_ID_ALREADY_LINKED" ) {
- throw _makeTaggedError(auth, "credential-already-in-use" , json);
- }
- else if (serverErrorCode === "EMAIL_EXISTS" ) {
- throw _makeTaggedError(auth, "email-already-in-use" , json);
- }
- else if (serverErrorCode === "USER_DISABLED" ) {
- throw _makeTaggedError(auth, "user-disabled" , json);
- }
- authError = errorMap[serverErrorCode] ||
- serverErrorCode
- .toLowerCase()
- .replace(/[_\s]+/g, '-');
- if (serverErrorMessage) {
- throw _errorWithCustomMessage(auth, authError, serverErrorMessage);
- }
- else {
- _fail(auth, authError);
- }
- }
- return [3 , 5];
- case 4:
- e_1 = _b.sent();
- if (e_1 instanceof util.FirebaseError) {
- throw e_1;
- }
-
-
-
- _fail(auth, "network-request-failed" , { 'message': String(e_1) });
- return [3 , 5];
- case 5: return [2 ];
- }
- });
- });
- }
- function _performSignInRequest(auth, method, path, request, customErrorMap) {
- if (customErrorMap === void 0) { customErrorMap = {}; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- var serverResponse;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , _performApiRequest(auth, method, path, request, customErrorMap)];
- case 1:
- serverResponse = (_a.sent());
- if ('mfaPendingCredential' in serverResponse) {
- _fail(auth, "multi-factor-auth-required" , {
- _serverResponse: serverResponse
- });
- }
- return [2 , serverResponse];
- }
- });
- });
- }
- function _getFinalTarget(auth, host, path, query) {
- var base = "".concat(host).concat(path, "?").concat(query);
- if (!auth.config.emulator) {
- return "".concat(auth.config.apiScheme, "://").concat(base);
- }
- return _emulatorUrl(auth.config, base);
- }
- var NetworkTimeout = (function () {
- function NetworkTimeout(auth) {
- var _this = this;
- this.auth = auth;
-
-
-
- this.timer = null;
- this.promise = new Promise(function (_, reject) {
- _this.timer = setTimeout(function () {
- return reject(_createError(_this.auth, "network-request-failed" ));
- }, DEFAULT_API_TIMEOUT_MS.get());
- });
- }
- NetworkTimeout.prototype.clearNetworkTimeout = function () {
- clearTimeout(this.timer);
- };
- return NetworkTimeout;
- }());
- function _makeTaggedError(auth, code, response) {
- var errorParams = {
- appName: auth.name
- };
- if (response.email) {
- errorParams.email = response.email;
- }
- if (response.phoneNumber) {
- errorParams.phoneNumber = response.phoneNumber;
- }
- var error = _createError(auth, code, errorParams);
-
- error.customData._tokenResponse = response;
- return error;
- }
- function deleteAccount(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performApiRequest(auth, "POST" , "/v1/accounts:delete" , request)];
- });
- });
- }
- function deleteLinkedAccounts(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performApiRequest(auth, "POST" , "/v1/accounts:update" , request)];
- });
- });
- }
- function getAccountInfo(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performApiRequest(auth, "POST" , "/v1/accounts:lookup" , request)];
- });
- });
- }
- function utcTimestampToDateString(utcTimestamp) {
- if (!utcTimestamp) {
- return undefined;
- }
- try {
-
- var date = new Date(Number(utcTimestamp));
-
- if (!isNaN(date.getTime())) {
-
- return date.toUTCString();
- }
- }
- catch (e) {
-
- }
- return undefined;
- }
- function getIdToken(user, forceRefresh) {
- if (forceRefresh === void 0) { forceRefresh = false; }
- return util.getModularInstance(user).getIdToken(forceRefresh);
- }
- function getIdTokenResult(user, forceRefresh) {
- if (forceRefresh === void 0) { forceRefresh = false; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- var userInternal, token, claims, firebase, signInProvider;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- userInternal = util.getModularInstance(user);
- return [4 , userInternal.getIdToken(forceRefresh)];
- case 1:
- token = _a.sent();
- claims = _parseToken(token);
- _assert(claims && claims.exp && claims.auth_time && claims.iat, userInternal.auth, "internal-error" );
- firebase = typeof claims.firebase === 'object' ? claims.firebase : undefined;
- signInProvider = firebase === null || firebase === void 0 ? void 0 : firebase['sign_in_provider'];
- return [2 , {
- claims: claims,
- token: token,
- authTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.auth_time)),
- issuedAtTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.iat)),
- expirationTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.exp)),
- signInProvider: signInProvider || null,
- signInSecondFactor: (firebase === null || firebase === void 0 ? void 0 : firebase['sign_in_second_factor']) || null
- }];
- }
- });
- });
- }
- function secondsStringToMilliseconds(seconds) {
- return Number(seconds) * 1000;
- }
- function _parseToken(token) {
- var _a = token.split('.'), algorithm = _a[0], payload = _a[1], signature = _a[2];
- if (algorithm === undefined ||
- payload === undefined ||
- signature === undefined) {
- _logError('JWT malformed, contained fewer than 3 sections');
- return null;
- }
- try {
- var decoded = util.base64Decode(payload);
- if (!decoded) {
- _logError('Failed to decode base64 JWT payload');
- return null;
- }
- return JSON.parse(decoded);
- }
- catch (e) {
- _logError('Caught error parsing JWT payload as JSON', e === null || e === void 0 ? void 0 : e.toString());
- return null;
- }
- }
- function _tokenExpiresIn(token) {
- var parsedToken = _parseToken(token);
- _assert(parsedToken, "internal-error" );
- _assert(typeof parsedToken.exp !== 'undefined', "internal-error" );
- _assert(typeof parsedToken.iat !== 'undefined', "internal-error" );
- return Number(parsedToken.exp) - Number(parsedToken.iat);
- }
- function _logoutIfInvalidated(user, promise, bypassAuthState) {
- if (bypassAuthState === void 0) { bypassAuthState = false; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- var e_1;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (bypassAuthState) {
- return [2 , promise];
- }
- _a.label = 1;
- case 1:
- _a.trys.push([1, 3, , 6]);
- return [4 , promise];
- case 2: return [2 , _a.sent()];
- case 3:
- e_1 = _a.sent();
- if (!(e_1 instanceof util.FirebaseError && isUserInvalidated(e_1))) return [3 , 5];
- if (!(user.auth.currentUser === user)) return [3 , 5];
- return [4 , user.auth.signOut()];
- case 4:
- _a.sent();
- _a.label = 5;
- case 5: throw e_1;
- case 6: return [2 ];
- }
- });
- });
- }
- function isUserInvalidated(_a) {
- var code = _a.code;
- return (code === "auth/".concat("user-disabled" ) ||
- code === "auth/".concat("user-token-expired" ));
- }
- var ProactiveRefresh = (function () {
- function ProactiveRefresh(user) {
- this.user = user;
- this.isRunning = false;
-
-
-
-
- this.timerId = null;
- this.errorBackoff = 30000 ;
- }
- ProactiveRefresh.prototype._start = function () {
- if (this.isRunning) {
- return;
- }
- this.isRunning = true;
- this.schedule();
- };
- ProactiveRefresh.prototype._stop = function () {
- if (!this.isRunning) {
- return;
- }
- this.isRunning = false;
- if (this.timerId !== null) {
- clearTimeout(this.timerId);
- }
- };
- ProactiveRefresh.prototype.getInterval = function (wasError) {
- var _a;
- if (wasError) {
- var interval = this.errorBackoff;
- this.errorBackoff = Math.min(this.errorBackoff * 2, 960000 );
- return interval;
- }
- else {
-
- this.errorBackoff = 30000 ;
- var expTime = (_a = this.user.stsTokenManager.expirationTime) !== null && _a !== void 0 ? _a : 0;
- var interval = expTime - Date.now() - 300000 ;
- return Math.max(0, interval);
- }
- };
- ProactiveRefresh.prototype.schedule = function (wasError) {
- var _this = this;
- if (wasError === void 0) { wasError = false; }
- if (!this.isRunning) {
-
- return;
- }
- var interval = this.getInterval(wasError);
- this.timerId = setTimeout(function () { return tslib.__awaiter(_this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , this.iteration()];
- case 1:
- _a.sent();
- return [2 ];
- }
- });
- }); }, interval);
- };
- ProactiveRefresh.prototype.iteration = function () {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var e_1;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- _a.trys.push([0, 2, , 3]);
- return [4 , this.user.getIdToken(true)];
- case 1:
- _a.sent();
- return [3 , 3];
- case 2:
- e_1 = _a.sent();
-
- if ((e_1 === null || e_1 === void 0 ? void 0 : e_1.code) ===
- "auth/".concat("network-request-failed" )) {
- this.schedule( true);
- }
- return [2 ];
- case 3:
- this.schedule();
- return [2 ];
- }
- });
- });
- };
- return ProactiveRefresh;
- }());
- var UserMetadata = (function () {
- function UserMetadata(createdAt, lastLoginAt) {
- this.createdAt = createdAt;
- this.lastLoginAt = lastLoginAt;
- this._initializeTime();
- }
- UserMetadata.prototype._initializeTime = function () {
- this.lastSignInTime = utcTimestampToDateString(this.lastLoginAt);
- this.creationTime = utcTimestampToDateString(this.createdAt);
- };
- UserMetadata.prototype._copy = function (metadata) {
- this.createdAt = metadata.createdAt;
- this.lastLoginAt = metadata.lastLoginAt;
- this._initializeTime();
- };
- UserMetadata.prototype.toJSON = function () {
- return {
- createdAt: this.createdAt,
- lastLoginAt: this.lastLoginAt
- };
- };
- return UserMetadata;
- }());
- function _reloadWithoutSaving(user) {
- var _a;
- return tslib.__awaiter(this, void 0, void 0, function () {
- var auth, idToken, response, coreAccount, newProviderData, providerData, oldIsAnonymous, newIsAnonymous, isAnonymous, updates;
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- auth = user.auth;
- return [4 , user.getIdToken()];
- case 1:
- idToken = _b.sent();
- return [4 , _logoutIfInvalidated(user, getAccountInfo(auth, { idToken: idToken }))];
- case 2:
- response = _b.sent();
- _assert(response === null || response === void 0 ? void 0 : response.users.length, auth, "internal-error" );
- coreAccount = response.users[0];
- user._notifyReloadListener(coreAccount);
- newProviderData = ((_a = coreAccount.providerUserInfo) === null || _a === void 0 ? void 0 : _a.length)
- ? extractProviderData(coreAccount.providerUserInfo)
- : [];
- providerData = mergeProviderData(user.providerData, newProviderData);
- oldIsAnonymous = user.isAnonymous;
- newIsAnonymous = !(user.email && coreAccount.passwordHash) && !(providerData === null || providerData === void 0 ? void 0 : providerData.length);
- isAnonymous = !oldIsAnonymous ? false : newIsAnonymous;
- updates = {
- uid: coreAccount.localId,
- displayName: coreAccount.displayName || null,
- photoURL: coreAccount.photoUrl || null,
- email: coreAccount.email || null,
- emailVerified: coreAccount.emailVerified || false,
- phoneNumber: coreAccount.phoneNumber || null,
- tenantId: coreAccount.tenantId || null,
- providerData: providerData,
- metadata: new UserMetadata(coreAccount.createdAt, coreAccount.lastLoginAt),
- isAnonymous: isAnonymous
- };
- Object.assign(user, updates);
- return [2 ];
- }
- });
- });
- }
- function reload(user) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var userInternal;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- userInternal = util.getModularInstance(user);
- return [4 , _reloadWithoutSaving(userInternal)];
- case 1:
- _a.sent();
-
-
-
- return [4 , userInternal.auth._persistUserIfCurrent(userInternal)];
- case 2:
-
-
-
- _a.sent();
- userInternal.auth._notifyListenersIfCurrent(userInternal);
- return [2 ];
- }
- });
- });
- }
- function mergeProviderData(original, newData) {
- var deduped = original.filter(function (o) { return !newData.some(function (n) { return n.providerId === o.providerId; }); });
- return tslib.__spreadArray(tslib.__spreadArray([], deduped, true), newData, true);
- }
- function extractProviderData(providers) {
- return providers.map(function (_a) {
- var providerId = _a.providerId, provider = tslib.__rest(_a, ["providerId"]);
- return {
- providerId: providerId,
- uid: provider.rawId || '',
- displayName: provider.displayName || null,
- email: provider.email || null,
- phoneNumber: provider.phoneNumber || null,
- photoURL: provider.photoUrl || null
- };
- });
- }
- function requestStsToken(auth, refreshToken) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var response;
- var _this = this;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , _performFetchWithErrorHandling(auth, {}, function () { return tslib.__awaiter(_this, void 0, void 0, function () {
- var body, _a, tokenApiHost, apiKey, url, headers;
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- body = util.querystring({
- 'grant_type': 'refresh_token',
- 'refresh_token': refreshToken
- }).slice(1);
- _a = auth.config, tokenApiHost = _a.tokenApiHost, apiKey = _a.apiKey;
- url = _getFinalTarget(auth, tokenApiHost, "/v1/token" , "key=".concat(apiKey));
- return [4 , auth._getAdditionalHeaders()];
- case 1:
- headers = _b.sent();
- headers["Content-Type" ] = 'application/x-www-form-urlencoded';
- return [2 , FetchProvider.fetch()(url, {
- method: "POST" ,
- headers: headers,
- body: body
- })];
- }
- });
- }); })];
- case 1:
- response = _a.sent();
-
- return [2 , {
- accessToken: response.access_token,
- expiresIn: response.expires_in,
- refreshToken: response.refresh_token
- }];
- }
- });
- });
- }
- var StsTokenManager = (function () {
- function StsTokenManager() {
- this.refreshToken = null;
- this.accessToken = null;
- this.expirationTime = null;
- }
- Object.defineProperty(StsTokenManager.prototype, "isExpired", {
- get: function () {
- return (!this.expirationTime ||
- Date.now() > this.expirationTime - 30000 );
- },
- enumerable: false,
- configurable: true
- });
- StsTokenManager.prototype.updateFromServerResponse = function (response) {
- _assert(response.idToken, "internal-error" );
- _assert(typeof response.idToken !== 'undefined', "internal-error" );
- _assert(typeof response.refreshToken !== 'undefined', "internal-error" );
- var expiresIn = 'expiresIn' in response && typeof response.expiresIn !== 'undefined'
- ? Number(response.expiresIn)
- : _tokenExpiresIn(response.idToken);
- this.updateTokensAndExpiration(response.idToken, response.refreshToken, expiresIn);
- };
- StsTokenManager.prototype.getToken = function (auth, forceRefresh) {
- if (forceRefresh === void 0) { forceRefresh = false; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- _assert(!this.accessToken || this.refreshToken, auth, "user-token-expired" );
- if (!forceRefresh && this.accessToken && !this.isExpired) {
- return [2 , this.accessToken];
- }
- if (!this.refreshToken) return [3 , 2];
- return [4 , this.refresh(auth, this.refreshToken)];
- case 1:
- _a.sent();
- return [2 , this.accessToken];
- case 2: return [2 , null];
- }
- });
- });
- };
- StsTokenManager.prototype.clearRefreshToken = function () {
- this.refreshToken = null;
- };
- StsTokenManager.prototype.refresh = function (auth, oldToken) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var _a, accessToken, refreshToken, expiresIn;
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0: return [4 , requestStsToken(auth, oldToken)];
- case 1:
- _a = _b.sent(), accessToken = _a.accessToken, refreshToken = _a.refreshToken, expiresIn = _a.expiresIn;
- this.updateTokensAndExpiration(accessToken, refreshToken, Number(expiresIn));
- return [2 ];
- }
- });
- });
- };
- StsTokenManager.prototype.updateTokensAndExpiration = function (accessToken, refreshToken, expiresInSec) {
- this.refreshToken = refreshToken || null;
- this.accessToken = accessToken || null;
- this.expirationTime = Date.now() + expiresInSec * 1000;
- };
- StsTokenManager.fromJSON = function (appName, object) {
- var refreshToken = object.refreshToken, accessToken = object.accessToken, expirationTime = object.expirationTime;
- var manager = new StsTokenManager();
- if (refreshToken) {
- _assert(typeof refreshToken === 'string', "internal-error" , {
- appName: appName
- });
- manager.refreshToken = refreshToken;
- }
- if (accessToken) {
- _assert(typeof accessToken === 'string', "internal-error" , {
- appName: appName
- });
- manager.accessToken = accessToken;
- }
- if (expirationTime) {
- _assert(typeof expirationTime === 'number', "internal-error" , {
- appName: appName
- });
- manager.expirationTime = expirationTime;
- }
- return manager;
- };
- StsTokenManager.prototype.toJSON = function () {
- return {
- refreshToken: this.refreshToken,
- accessToken: this.accessToken,
- expirationTime: this.expirationTime
- };
- };
- StsTokenManager.prototype._assign = function (stsTokenManager) {
- this.accessToken = stsTokenManager.accessToken;
- this.refreshToken = stsTokenManager.refreshToken;
- this.expirationTime = stsTokenManager.expirationTime;
- };
- StsTokenManager.prototype._clone = function () {
- return Object.assign(new StsTokenManager(), this.toJSON());
- };
- StsTokenManager.prototype._performRefresh = function () {
- return debugFail('not implemented');
- };
- return StsTokenManager;
- }());
- function assertStringOrUndefined(assertion, appName) {
- _assert(typeof assertion === 'string' || typeof assertion === 'undefined', "internal-error" , { appName: appName });
- }
- var UserImpl = (function () {
- function UserImpl(_a) {
- var uid = _a.uid, auth = _a.auth, stsTokenManager = _a.stsTokenManager, opt = tslib.__rest(_a, ["uid", "auth", "stsTokenManager"]);
-
- this.providerId = "firebase" ;
- this.proactiveRefresh = new ProactiveRefresh(this);
- this.reloadUserInfo = null;
- this.reloadListener = null;
- this.uid = uid;
- this.auth = auth;
- this.stsTokenManager = stsTokenManager;
- this.accessToken = stsTokenManager.accessToken;
- this.displayName = opt.displayName || null;
- this.email = opt.email || null;
- this.emailVerified = opt.emailVerified || false;
- this.phoneNumber = opt.phoneNumber || null;
- this.photoURL = opt.photoURL || null;
- this.isAnonymous = opt.isAnonymous || false;
- this.tenantId = opt.tenantId || null;
- this.providerData = opt.providerData ? tslib.__spreadArray([], opt.providerData, true) : [];
- this.metadata = new UserMetadata(opt.createdAt || undefined, opt.lastLoginAt || undefined);
- }
- UserImpl.prototype.getIdToken = function (forceRefresh) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var accessToken;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , _logoutIfInvalidated(this, this.stsTokenManager.getToken(this.auth, forceRefresh))];
- case 1:
- accessToken = _a.sent();
- _assert(accessToken, this.auth, "internal-error" );
- if (!(this.accessToken !== accessToken)) return [3 , 3];
- this.accessToken = accessToken;
- return [4 , this.auth._persistUserIfCurrent(this)];
- case 2:
- _a.sent();
- this.auth._notifyListenersIfCurrent(this);
- _a.label = 3;
- case 3: return [2 , accessToken];
- }
- });
- });
- };
- UserImpl.prototype.getIdTokenResult = function (forceRefresh) {
- return getIdTokenResult(this, forceRefresh);
- };
- UserImpl.prototype.reload = function () {
- return reload(this);
- };
- UserImpl.prototype._assign = function (user) {
- if (this === user) {
- return;
- }
- _assert(this.uid === user.uid, this.auth, "internal-error" );
- this.displayName = user.displayName;
- this.photoURL = user.photoURL;
- this.email = user.email;
- this.emailVerified = user.emailVerified;
- this.phoneNumber = user.phoneNumber;
- this.isAnonymous = user.isAnonymous;
- this.tenantId = user.tenantId;
- this.providerData = user.providerData.map(function (userInfo) { return (tslib.__assign({}, userInfo)); });
- this.metadata._copy(user.metadata);
- this.stsTokenManager._assign(user.stsTokenManager);
- };
- UserImpl.prototype._clone = function (auth) {
- var newUser = new UserImpl(tslib.__assign(tslib.__assign({}, this), { auth: auth, stsTokenManager: this.stsTokenManager._clone() }));
- newUser.metadata._copy(this.metadata);
- return newUser;
- };
- UserImpl.prototype._onReload = function (callback) {
-
- _assert(!this.reloadListener, this.auth, "internal-error" );
- this.reloadListener = callback;
- if (this.reloadUserInfo) {
- this._notifyReloadListener(this.reloadUserInfo);
- this.reloadUserInfo = null;
- }
- };
- UserImpl.prototype._notifyReloadListener = function (userInfo) {
- if (this.reloadListener) {
- this.reloadListener(userInfo);
- }
- else {
-
- this.reloadUserInfo = userInfo;
- }
- };
- UserImpl.prototype._startProactiveRefresh = function () {
- this.proactiveRefresh._start();
- };
- UserImpl.prototype._stopProactiveRefresh = function () {
- this.proactiveRefresh._stop();
- };
- UserImpl.prototype._updateTokensIfNecessary = function (response, reload) {
- if (reload === void 0) { reload = false; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- var tokensRefreshed;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- tokensRefreshed = false;
- if (response.idToken &&
- response.idToken !== this.stsTokenManager.accessToken) {
- this.stsTokenManager.updateFromServerResponse(response);
- tokensRefreshed = true;
- }
- if (!reload) return [3 , 2];
- return [4 , _reloadWithoutSaving(this)];
- case 1:
- _a.sent();
- _a.label = 2;
- case 2: return [4 , this.auth._persistUserIfCurrent(this)];
- case 3:
- _a.sent();
- if (tokensRefreshed) {
- this.auth._notifyListenersIfCurrent(this);
- }
- return [2 ];
- }
- });
- });
- };
- UserImpl.prototype.delete = function () {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var idToken;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , this.getIdToken()];
- case 1:
- idToken = _a.sent();
- return [4 , _logoutIfInvalidated(this, deleteAccount(this.auth, { idToken: idToken }))];
- case 2:
- _a.sent();
- this.stsTokenManager.clearRefreshToken();
-
-
- return [2 , this.auth.signOut()];
- }
- });
- });
- };
- UserImpl.prototype.toJSON = function () {
- return tslib.__assign(tslib.__assign({ uid: this.uid, email: this.email || undefined, emailVerified: this.emailVerified, displayName: this.displayName || undefined, isAnonymous: this.isAnonymous, photoURL: this.photoURL || undefined, phoneNumber: this.phoneNumber || undefined, tenantId: this.tenantId || undefined, providerData: this.providerData.map(function (userInfo) { return (tslib.__assign({}, userInfo)); }), stsTokenManager: this.stsTokenManager.toJSON(),
-
-
- _redirectEventId: this._redirectEventId }, this.metadata.toJSON()), {
-
- apiKey: this.auth.config.apiKey, appName: this.auth.name });
- };
- Object.defineProperty(UserImpl.prototype, "refreshToken", {
- get: function () {
- return this.stsTokenManager.refreshToken || '';
- },
- enumerable: false,
- configurable: true
- });
- UserImpl._fromJSON = function (auth, object) {
- var _a, _b, _c, _d, _e, _f, _g, _h;
- var displayName = (_a = object.displayName) !== null && _a !== void 0 ? _a : undefined;
- var email = (_b = object.email) !== null && _b !== void 0 ? _b : undefined;
- var phoneNumber = (_c = object.phoneNumber) !== null && _c !== void 0 ? _c : undefined;
- var photoURL = (_d = object.photoURL) !== null && _d !== void 0 ? _d : undefined;
- var tenantId = (_e = object.tenantId) !== null && _e !== void 0 ? _e : undefined;
- var _redirectEventId = (_f = object._redirectEventId) !== null && _f !== void 0 ? _f : undefined;
- var createdAt = (_g = object.createdAt) !== null && _g !== void 0 ? _g : undefined;
- var lastLoginAt = (_h = object.lastLoginAt) !== null && _h !== void 0 ? _h : undefined;
- var uid = object.uid, emailVerified = object.emailVerified, isAnonymous = object.isAnonymous, providerData = object.providerData, plainObjectTokenManager = object.stsTokenManager;
- _assert(uid && plainObjectTokenManager, auth, "internal-error" );
- var stsTokenManager = StsTokenManager.fromJSON(this.name, plainObjectTokenManager);
- _assert(typeof uid === 'string', auth, "internal-error" );
- assertStringOrUndefined(displayName, auth.name);
- assertStringOrUndefined(email, auth.name);
- _assert(typeof emailVerified === 'boolean', auth, "internal-error" );
- _assert(typeof isAnonymous === 'boolean', auth, "internal-error" );
- assertStringOrUndefined(phoneNumber, auth.name);
- assertStringOrUndefined(photoURL, auth.name);
- assertStringOrUndefined(tenantId, auth.name);
- assertStringOrUndefined(_redirectEventId, auth.name);
- assertStringOrUndefined(createdAt, auth.name);
- assertStringOrUndefined(lastLoginAt, auth.name);
- var user = new UserImpl({
- uid: uid,
- auth: auth,
- email: email,
- emailVerified: emailVerified,
- displayName: displayName,
- isAnonymous: isAnonymous,
- photoURL: photoURL,
- phoneNumber: phoneNumber,
- tenantId: tenantId,
- stsTokenManager: stsTokenManager,
- createdAt: createdAt,
- lastLoginAt: lastLoginAt
- });
- if (providerData && Array.isArray(providerData)) {
- user.providerData = providerData.map(function (userInfo) { return (tslib.__assign({}, userInfo)); });
- }
- if (_redirectEventId) {
- user._redirectEventId = _redirectEventId;
- }
- return user;
- };
-
- UserImpl._fromIdTokenResponse = function (auth, idTokenResponse, isAnonymous) {
- if (isAnonymous === void 0) { isAnonymous = false; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- var stsTokenManager, user;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- stsTokenManager = new StsTokenManager();
- stsTokenManager.updateFromServerResponse(idTokenResponse);
- user = new UserImpl({
- uid: idTokenResponse.localId,
- auth: auth,
- stsTokenManager: stsTokenManager,
- isAnonymous: isAnonymous
- });
-
- return [4 , _reloadWithoutSaving(user)];
- case 1:
-
- _a.sent();
- return [2 , user];
- }
- });
- });
- };
- return UserImpl;
- }());
- var instanceCache = new Map();
- function _getInstance(cls) {
- debugAssert(cls instanceof Function, 'Expected a class definition');
- var instance = instanceCache.get(cls);
- if (instance) {
- debugAssert(instance instanceof cls, 'Instance stored in cache mismatched with class');
- return instance;
- }
- instance = new cls();
- instanceCache.set(cls, instance);
- return instance;
- }
- var InMemoryPersistence = (function () {
- function InMemoryPersistence() {
- this.type = "NONE" ;
- this.storage = {};
- }
- InMemoryPersistence.prototype._isAvailable = function () {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , true];
- });
- });
- };
- InMemoryPersistence.prototype._set = function (key, value) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- this.storage[key] = value;
- return [2 ];
- });
- });
- };
- InMemoryPersistence.prototype._get = function (key) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var value;
- return tslib.__generator(this, function (_a) {
- value = this.storage[key];
- return [2 , value === undefined ? null : value];
- });
- });
- };
- InMemoryPersistence.prototype._remove = function (key) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- delete this.storage[key];
- return [2 ];
- });
- });
- };
- InMemoryPersistence.prototype._addListener = function (_key, _listener) {
-
- return;
- };
- InMemoryPersistence.prototype._removeListener = function (_key, _listener) {
-
- return;
- };
- InMemoryPersistence.type = 'NONE';
- return InMemoryPersistence;
- }());
- var inMemoryPersistence = InMemoryPersistence;
- function _persistenceKeyName(key, apiKey, appName) {
- return "".concat("firebase" , ":").concat(key, ":").concat(apiKey, ":").concat(appName);
- }
- var PersistenceUserManager = (function () {
- function PersistenceUserManager(persistence, auth, userKey) {
- this.persistence = persistence;
- this.auth = auth;
- this.userKey = userKey;
- var _a = this.auth, config = _a.config, name = _a.name;
- this.fullUserKey = _persistenceKeyName(this.userKey, config.apiKey, name);
- this.fullPersistenceKey = _persistenceKeyName("persistence" , config.apiKey, name);
- this.boundEventHandler = auth._onStorageEvent.bind(auth);
- this.persistence._addListener(this.fullUserKey, this.boundEventHandler);
- }
- PersistenceUserManager.prototype.setCurrentUser = function (user) {
- return this.persistence._set(this.fullUserKey, user.toJSON());
- };
- PersistenceUserManager.prototype.getCurrentUser = function () {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var blob;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , this.persistence._get(this.fullUserKey)];
- case 1:
- blob = _a.sent();
- return [2 , blob ? UserImpl._fromJSON(this.auth, blob) : null];
- }
- });
- });
- };
- PersistenceUserManager.prototype.removeCurrentUser = function () {
- return this.persistence._remove(this.fullUserKey);
- };
- PersistenceUserManager.prototype.savePersistenceForRedirect = function () {
- return this.persistence._set(this.fullPersistenceKey, this.persistence.type);
- };
- PersistenceUserManager.prototype.setPersistence = function (newPersistence) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var currentUser;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (this.persistence === newPersistence) {
- return [2 ];
- }
- return [4 , this.getCurrentUser()];
- case 1:
- currentUser = _a.sent();
- return [4 , this.removeCurrentUser()];
- case 2:
- _a.sent();
- this.persistence = newPersistence;
- if (currentUser) {
- return [2 , this.setCurrentUser(currentUser)];
- }
- return [2 ];
- }
- });
- });
- };
- PersistenceUserManager.prototype.delete = function () {
- this.persistence._removeListener(this.fullUserKey, this.boundEventHandler);
- };
- PersistenceUserManager.create = function (auth, persistenceHierarchy, userKey) {
- if (userKey === void 0) { userKey = "authUser" ; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- var availablePersistences, selectedPersistence, key, userToMigrate, _i, persistenceHierarchy_1, persistence, blob, user, migrationHierarchy;
- var _this = this;
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- if (!persistenceHierarchy.length) {
- return [2 , new PersistenceUserManager(_getInstance(inMemoryPersistence), auth, userKey)];
- }
- return [4 , Promise.all(persistenceHierarchy.map(function (persistence) { return tslib.__awaiter(_this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , persistence._isAvailable()];
- case 1:
- if (_a.sent()) {
- return [2 , persistence];
- }
- return [2 , undefined];
- }
- });
- }); }))];
- case 1:
- availablePersistences = (_b.sent()).filter(function (persistence) { return persistence; });
- selectedPersistence = availablePersistences[0] ||
- _getInstance(inMemoryPersistence);
- key = _persistenceKeyName(userKey, auth.config.apiKey, auth.name);
- userToMigrate = null;
- _i = 0, persistenceHierarchy_1 = persistenceHierarchy;
- _b.label = 2;
- case 2:
- if (!(_i < persistenceHierarchy_1.length)) return [3 , 7];
- persistence = persistenceHierarchy_1[_i];
- _b.label = 3;
- case 3:
- _b.trys.push([3, 5, , 6]);
- return [4 , persistence._get(key)];
- case 4:
- blob = _b.sent();
- if (blob) {
- user = UserImpl._fromJSON(auth, blob);
- if (persistence !== selectedPersistence) {
- userToMigrate = user;
- }
- selectedPersistence = persistence;
- return [3 , 7];
- }
- return [3 , 6];
- case 5:
- _b.sent();
- return [3 , 6];
- case 6:
- _i++;
- return [3 , 2];
- case 7:
- migrationHierarchy = availablePersistences.filter(function (p) { return p._shouldAllowMigration; });
-
- if (!selectedPersistence._shouldAllowMigration ||
- !migrationHierarchy.length) {
- return [2 , new PersistenceUserManager(selectedPersistence, auth, userKey)];
- }
- selectedPersistence = migrationHierarchy[0];
- if (!userToMigrate) return [3 , 9];
-
-
- return [4 , selectedPersistence._set(key, userToMigrate.toJSON())];
- case 8:
-
-
- _b.sent();
- _b.label = 9;
- case 9:
-
-
- return [4 , Promise.all(persistenceHierarchy.map(function (persistence) { return tslib.__awaiter(_this, void 0, void 0, function () {
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- if (!(persistence !== selectedPersistence)) return [3 , 4];
- _b.label = 1;
- case 1:
- _b.trys.push([1, 3, , 4]);
- return [4 , persistence._remove(key)];
- case 2:
- _b.sent();
- return [3 , 4];
- case 3:
- _b.sent();
- return [3 , 4];
- case 4: return [2 ];
- }
- });
- }); }))];
- case 10:
-
-
- _b.sent();
- return [2 , new PersistenceUserManager(selectedPersistence, auth, userKey)];
- }
- });
- });
- };
- return PersistenceUserManager;
- }());
- function _getBrowserName(userAgent) {
- var ua = userAgent.toLowerCase();
- if (ua.includes('opera/') || ua.includes('opr/') || ua.includes('opios/')) {
- return "Opera" ;
- }
- else if (_isIEMobile(ua)) {
-
- return "IEMobile" ;
- }
- else if (ua.includes('msie') || ua.includes('trident/')) {
- return "IE" ;
- }
- else if (ua.includes('edge/')) {
- return "Edge" ;
- }
- else if (_isFirefox(ua)) {
- return "Firefox" ;
- }
- else if (ua.includes('silk/')) {
- return "Silk" ;
- }
- else if (_isBlackBerry(ua)) {
-
- return "Blackberry" ;
- }
- else if (_isWebOS(ua)) {
-
- return "Webos" ;
- }
- else if (_isSafari(ua)) {
- return "Safari" ;
- }
- else if ((ua.includes('chrome/') || _isChromeIOS(ua)) &&
- !ua.includes('edge/')) {
- return "Chrome" ;
- }
- else if (_isAndroid(ua)) {
-
- return "Android" ;
- }
- else {
-
- var re = /([a-zA-Z\d\.]+)\/[a-zA-Z\d\.]*$/;
- var matches = userAgent.match(re);
- if ((matches === null || matches === void 0 ? void 0 : matches.length) === 2) {
- return matches[1];
- }
- }
- return "Other" ;
- }
- function _isFirefox(ua) {
- if (ua === void 0) { ua = util.getUA(); }
- return /firefox\//i.test(ua);
- }
- function _isSafari(userAgent) {
- if (userAgent === void 0) { userAgent = util.getUA(); }
- var ua = userAgent.toLowerCase();
- return (ua.includes('safari/') &&
- !ua.includes('chrome/') &&
- !ua.includes('crios/') &&
- !ua.includes('android'));
- }
- function _isChromeIOS(ua) {
- if (ua === void 0) { ua = util.getUA(); }
- return /crios\//i.test(ua);
- }
- function _isIEMobile(ua) {
- if (ua === void 0) { ua = util.getUA(); }
- return /iemobile/i.test(ua);
- }
- function _isAndroid(ua) {
- if (ua === void 0) { ua = util.getUA(); }
- return /android/i.test(ua);
- }
- function _isBlackBerry(ua) {
- if (ua === void 0) { ua = util.getUA(); }
- return /blackberry/i.test(ua);
- }
- function _isWebOS(ua) {
- if (ua === void 0) { ua = util.getUA(); }
- return /webos/i.test(ua);
- }
- function _isIOS(ua) {
- if (ua === void 0) { ua = util.getUA(); }
- return (/iphone|ipad|ipod/i.test(ua) ||
- (/macintosh/i.test(ua) && /mobile/i.test(ua)));
- }
- function _isIOS7Or8(ua) {
- if (ua === void 0) { ua = util.getUA(); }
- return (/(iPad|iPhone|iPod).*OS 7_\d/i.test(ua) ||
- /(iPad|iPhone|iPod).*OS 8_\d/i.test(ua));
- }
- function _isIE10() {
- return util.isIE() && document.documentMode === 10;
- }
- function _isMobileBrowser(ua) {
- if (ua === void 0) { ua = util.getUA(); }
-
- return (_isIOS(ua) ||
- _isAndroid(ua) ||
- _isWebOS(ua) ||
- _isBlackBerry(ua) ||
- /windows phone/i.test(ua) ||
- _isIEMobile(ua));
- }
- function _isIframe() {
- try {
-
-
- return !!(window && window !== window.top);
- }
- catch (e) {
- return false;
- }
- }
- function _getClientVersion(clientPlatform, frameworks) {
- if (frameworks === void 0) { frameworks = []; }
- var reportedPlatform;
- switch (clientPlatform) {
- case "Browser" :
-
- reportedPlatform = _getBrowserName(util.getUA());
- break;
- case "Worker" :
-
-
-
- reportedPlatform = "".concat(_getBrowserName(util.getUA()), "-").concat(clientPlatform);
- break;
- default:
- reportedPlatform = clientPlatform;
- }
- var reportedFrameworks = frameworks.length
- ? frameworks.join(',')
- : 'FirebaseCore-web';
- return "".concat(reportedPlatform, "/").concat("JsCore" , "/").concat(app.SDK_VERSION, "/").concat(reportedFrameworks);
- }
- function getRecaptchaConfig(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performApiRequest(auth, "GET" , "/v2/recaptchaConfig" , _addTidIfNecessary(auth, request))];
- });
- });
- }
- function isEnterprise(grecaptcha) {
- return (grecaptcha !== undefined &&
- grecaptcha.enterprise !== undefined);
- }
- var RecaptchaConfig = (function () {
- function RecaptchaConfig(response) {
-
- this.siteKey = '';
-
- this.emailPasswordEnabled = false;
- if (response.recaptchaKey === undefined) {
- throw new Error('recaptchaKey undefined');
- }
-
- this.siteKey = response.recaptchaKey.split('/')[3];
- this.emailPasswordEnabled = response.recaptchaEnforcementState.some(function (enforcementState) {
- return enforcementState.provider === 'EMAIL_PASSWORD_PROVIDER' &&
- enforcementState.enforcementState !== 'OFF';
- });
- }
- return RecaptchaConfig;
- }());
- function getScriptParentElement() {
- var _a, _b;
- return (_b = (_a = document.getElementsByTagName('head')) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : document;
- }
- function _loadJS(url) {
-
- return new Promise(function (resolve, reject) {
- var el = document.createElement('script');
- el.setAttribute('src', url);
- el.onload = resolve;
- el.onerror = function (e) {
- var error = _createError("internal-error" );
- error.customData = e;
- reject(error);
- };
- el.type = 'text/javascript';
- el.charset = 'UTF-8';
- getScriptParentElement().appendChild(el);
- });
- }
- var RECAPTCHA_ENTERPRISE_URL = 'https://www.google.com/recaptcha/enterprise.js?render=';
- var RECAPTCHA_ENTERPRISE_VERIFIER_TYPE = 'recaptcha-enterprise';
- var FAKE_TOKEN = 'NO_RECAPTCHA';
- var RecaptchaEnterpriseVerifier = (function () {
-
- function RecaptchaEnterpriseVerifier(authExtern) {
-
- this.type = RECAPTCHA_ENTERPRISE_VERIFIER_TYPE;
- this.auth = _castAuth(authExtern);
- }
-
- RecaptchaEnterpriseVerifier.prototype.verify = function (action, forceRefresh) {
- if (action === void 0) { action = 'verify'; }
- if (forceRefresh === void 0) { forceRefresh = false; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- function retrieveSiteKey(auth) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var _this = this;
- return tslib.__generator(this, function (_a) {
- if (!forceRefresh) {
- if (auth.tenantId == null && auth._agentRecaptchaConfig != null) {
- return [2 , auth._agentRecaptchaConfig.siteKey];
- }
- if (auth.tenantId != null &&
- auth._tenantRecaptchaConfigs[auth.tenantId] !== undefined) {
- return [2 , auth._tenantRecaptchaConfigs[auth.tenantId].siteKey];
- }
- }
- return [2 , new Promise(function (resolve, reject) { return tslib.__awaiter(_this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- getRecaptchaConfig(auth, {
- clientType: "CLIENT_TYPE_WEB" ,
- version: "RECAPTCHA_ENTERPRISE"
- })
- .then(function (response) {
- if (response.recaptchaKey === undefined) {
- reject(new Error('recaptcha Enterprise site key undefined'));
- }
- else {
- var config = new RecaptchaConfig(response);
- if (auth.tenantId == null) {
- auth._agentRecaptchaConfig = config;
- }
- else {
- auth._tenantRecaptchaConfigs[auth.tenantId] = config;
- }
- return resolve(config.siteKey);
- }
- })
- .catch(function (error) {
- reject(error);
- });
- return [2 ];
- });
- }); })];
- });
- });
- }
- function retrieveRecaptchaToken(siteKey, resolve, reject) {
- var grecaptcha = window.grecaptcha;
- if (isEnterprise(grecaptcha)) {
- grecaptcha.enterprise.ready(function () {
- grecaptcha.enterprise
- .execute(siteKey, { action: action })
- .then(function (token) {
- resolve(token);
- })
- .catch(function () {
- resolve(FAKE_TOKEN);
- });
- });
- }
- else {
- reject(Error('No reCAPTCHA enterprise script loaded.'));
- }
- }
- var _this = this;
- return tslib.__generator(this, function (_a) {
- return [2 , new Promise(function (resolve, reject) {
- retrieveSiteKey(_this.auth)
- .then(function (siteKey) {
- if (!forceRefresh && isEnterprise(window.grecaptcha)) {
- retrieveRecaptchaToken(siteKey, resolve, reject);
- }
- else {
- if (typeof window === 'undefined') {
- reject(new Error('RecaptchaVerifier is only supported in browser'));
- return;
- }
- _loadJS(RECAPTCHA_ENTERPRISE_URL + siteKey)
- .then(function () {
- retrieveRecaptchaToken(siteKey, resolve, reject);
- })
- .catch(function (error) {
- reject(error);
- });
- }
- })
- .catch(function (error) {
- reject(error);
- });
- })];
- });
- });
- };
- return RecaptchaEnterpriseVerifier;
- }());
- function injectRecaptchaFields(auth, request, action, captchaResp) {
- if (captchaResp === void 0) { captchaResp = false; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- var verifier, captchaResponse, newRequest;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- verifier = new RecaptchaEnterpriseVerifier(auth);
- _a.label = 1;
- case 1:
- _a.trys.push([1, 3, , 5]);
- return [4 , verifier.verify(action)];
- case 2:
- captchaResponse = _a.sent();
- return [3 , 5];
- case 3:
- _a.sent();
- return [4 , verifier.verify(action, true)];
- case 4:
- captchaResponse = _a.sent();
- return [3 , 5];
- case 5:
- newRequest = tslib.__assign({}, request);
- if (!captchaResp) {
- Object.assign(newRequest, { captchaResponse: captchaResponse });
- }
- else {
- Object.assign(newRequest, { 'captchaResp': captchaResponse });
- }
- Object.assign(newRequest, { 'clientType': "CLIENT_TYPE_WEB" });
- Object.assign(newRequest, {
- 'recaptchaVersion': "RECAPTCHA_ENTERPRISE"
- });
- return [2 , newRequest];
- }
- });
- });
- }
- var AuthMiddlewareQueue = (function () {
- function AuthMiddlewareQueue(auth) {
- this.auth = auth;
- this.queue = [];
- }
- AuthMiddlewareQueue.prototype.pushCallback = function (callback, onAbort) {
- var _this = this;
-
-
- var wrappedCallback = function (user) {
- return new Promise(function (resolve, reject) {
- try {
- var result = callback(user);
-
-
- resolve(result);
- }
- catch (e) {
-
- reject(e);
- }
- });
- };
-
- wrappedCallback.onAbort = onAbort;
- this.queue.push(wrappedCallback);
- var index = this.queue.length - 1;
- return function () {
-
-
- _this.queue[index] = function () { return Promise.resolve(); };
- };
- };
- AuthMiddlewareQueue.prototype.runMiddleware = function (nextUser) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var onAbortStack, _i, _a, beforeStateCallback, e_1, _b, onAbortStack_1, onAbort;
- return tslib.__generator(this, function (_c) {
- switch (_c.label) {
- case 0:
- if (this.auth.currentUser === nextUser) {
- return [2 ];
- }
- onAbortStack = [];
- _c.label = 1;
- case 1:
- _c.trys.push([1, 6, , 7]);
- _i = 0, _a = this.queue;
- _c.label = 2;
- case 2:
- if (!(_i < _a.length)) return [3 , 5];
- beforeStateCallback = _a[_i];
- return [4 , beforeStateCallback(nextUser)];
- case 3:
- _c.sent();
-
- if (beforeStateCallback.onAbort) {
- onAbortStack.push(beforeStateCallback.onAbort);
- }
- _c.label = 4;
- case 4:
- _i++;
- return [3 , 2];
- case 5: return [3 , 7];
- case 6:
- e_1 = _c.sent();
-
-
- onAbortStack.reverse();
- for (_b = 0, onAbortStack_1 = onAbortStack; _b < onAbortStack_1.length; _b++) {
- onAbort = onAbortStack_1[_b];
- try {
- onAbort();
- }
- catch (_) {
-
- }
- }
- throw this.auth._errorFactory.create("login-blocked" , {
- originalMessage: e_1 === null || e_1 === void 0 ? void 0 : e_1.message
- });
- case 7: return [2 ];
- }
- });
- });
- };
- return AuthMiddlewareQueue;
- }());
- var AuthImpl = (function () {
- function AuthImpl(app, heartbeatServiceProvider, appCheckServiceProvider, config) {
- this.app = app;
- this.heartbeatServiceProvider = heartbeatServiceProvider;
- this.appCheckServiceProvider = appCheckServiceProvider;
- this.config = config;
- this.currentUser = null;
- this.emulatorConfig = null;
- this.operations = Promise.resolve();
- this.authStateSubscription = new Subscription(this);
- this.idTokenSubscription = new Subscription(this);
- this.beforeStateQueue = new AuthMiddlewareQueue(this);
- this.redirectUser = null;
- this.isProactiveRefreshEnabled = false;
-
-
- this._canInitEmulator = true;
- this._isInitialized = false;
- this._deleted = false;
- this._initializationPromise = null;
- this._popupRedirectResolver = null;
- this._errorFactory = _DEFAULT_AUTH_ERROR_FACTORY;
- this._agentRecaptchaConfig = null;
- this._tenantRecaptchaConfigs = {};
-
-
-
- this.lastNotifiedUid = undefined;
- this.languageCode = null;
- this.tenantId = null;
- this.settings = { appVerificationDisabledForTesting: false };
- this.frameworks = [];
- this.name = app.name;
- this.clientVersion = config.sdkClientVersion;
- }
- AuthImpl.prototype._initializeWithPersistence = function (persistenceHierarchy, popupRedirectResolver) {
- var _this = this;
- if (popupRedirectResolver) {
- this._popupRedirectResolver = _getInstance(popupRedirectResolver);
- }
-
-
- this._initializationPromise = this.queue(function () { return tslib.__awaiter(_this, void 0, void 0, function () {
- var _a;
- var _b, _c;
- return tslib.__generator(this, function (_d) {
- switch (_d.label) {
- case 0:
- if (this._deleted) {
- return [2 ];
- }
- _a = this;
- return [4 , PersistenceUserManager.create(this, persistenceHierarchy)];
- case 1:
- _a.persistenceManager = _d.sent();
- if (this._deleted) {
- return [2 ];
- }
- if (!((_b = this._popupRedirectResolver) === null || _b === void 0 ? void 0 : _b._shouldInitProactively)) return [3 , 5];
- _d.label = 2;
- case 2:
- _d.trys.push([2, 4, , 5]);
- return [4 , this._popupRedirectResolver._initialize(this)];
- case 3:
- _d.sent();
- return [3 , 5];
- case 4:
- _d.sent();
- return [3 , 5];
- case 5: return [4 , this.initializeCurrentUser(popupRedirectResolver)];
- case 6:
- _d.sent();
- this.lastNotifiedUid = ((_c = this.currentUser) === null || _c === void 0 ? void 0 : _c.uid) || null;
- if (this._deleted) {
- return [2 ];
- }
- this._isInitialized = true;
- return [2 ];
- }
- });
- }); });
- return this._initializationPromise;
- };
-
- AuthImpl.prototype._onStorageEvent = function () {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var user;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (this._deleted) {
- return [2 ];
- }
- return [4 , this.assertedPersistence.getCurrentUser()];
- case 1:
- user = _a.sent();
- if (!this.currentUser && !user) {
-
- return [2 ];
- }
- if (!(this.currentUser && user && this.currentUser.uid === user.uid)) return [3 , 3];
-
- this._currentUser._assign(user);
-
-
- return [4 , this.currentUser.getIdToken()];
- case 2:
-
-
- _a.sent();
- return [2 ];
- case 3:
-
-
- return [4 , this._updateCurrentUser(user, true)];
- case 4:
-
-
- _a.sent();
- return [2 ];
- }
- });
- });
- };
- AuthImpl.prototype.initializeCurrentUser = function (popupRedirectResolver) {
- var _a;
- return tslib.__awaiter(this, void 0, void 0, function () {
- var previouslyStoredUser, futureCurrentUser, needsTocheckMiddleware, redirectUserEventId, storedUserEventId, result, e_2;
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0: return [4 , this.assertedPersistence.getCurrentUser()];
- case 1:
- previouslyStoredUser = (_b.sent());
- futureCurrentUser = previouslyStoredUser;
- needsTocheckMiddleware = false;
- if (!(popupRedirectResolver && this.config.authDomain)) return [3 , 4];
- return [4 , this.getOrInitRedirectPersistenceManager()];
- case 2:
- _b.sent();
- redirectUserEventId = (_a = this.redirectUser) === null || _a === void 0 ? void 0 : _a._redirectEventId;
- storedUserEventId = futureCurrentUser === null || futureCurrentUser === void 0 ? void 0 : futureCurrentUser._redirectEventId;
- return [4 , this.tryRedirectSignIn(popupRedirectResolver)];
- case 3:
- result = _b.sent();
-
-
-
-
- if ((!redirectUserEventId || redirectUserEventId === storedUserEventId) &&
- (result === null || result === void 0 ? void 0 : result.user)) {
- futureCurrentUser = result.user;
- needsTocheckMiddleware = true;
- }
- _b.label = 4;
- case 4:
-
- if (!futureCurrentUser) {
- return [2 , this.directlySetCurrentUser(null)];
- }
- if (!!futureCurrentUser._redirectEventId) return [3 , 9];
- if (!needsTocheckMiddleware) return [3 , 8];
- _b.label = 5;
- case 5:
- _b.trys.push([5, 7, , 8]);
- return [4 , this.beforeStateQueue.runMiddleware(futureCurrentUser)];
- case 6:
- _b.sent();
- return [3 , 8];
- case 7:
- e_2 = _b.sent();
- futureCurrentUser = previouslyStoredUser;
-
-
- this._popupRedirectResolver._overrideRedirectResult(this, function () {
- return Promise.reject(e_2);
- });
- return [3 , 8];
- case 8:
- if (futureCurrentUser) {
- return [2 , this.reloadAndSetCurrentUserOrClear(futureCurrentUser)];
- }
- else {
- return [2 , this.directlySetCurrentUser(null)];
- }
- case 9:
- _assert(this._popupRedirectResolver, this, "argument-error" );
- return [4 , this.getOrInitRedirectPersistenceManager()];
- case 10:
- _b.sent();
-
-
-
- if (this.redirectUser &&
- this.redirectUser._redirectEventId === futureCurrentUser._redirectEventId) {
- return [2 , this.directlySetCurrentUser(futureCurrentUser)];
- }
- return [2 , this.reloadAndSetCurrentUserOrClear(futureCurrentUser)];
- }
- });
- });
- };
- AuthImpl.prototype.tryRedirectSignIn = function (redirectResolver) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var result;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- result = null;
- _a.label = 1;
- case 1:
- _a.trys.push([1, 3, , 5]);
- return [4 , this._popupRedirectResolver._completeRedirectFn(this, redirectResolver, true)];
- case 2:
-
-
- result = _a.sent();
- return [3 , 5];
- case 3:
- _a.sent();
-
-
- return [4 , this._setRedirectUser(null)];
- case 4:
-
-
- _a.sent();
- return [3 , 5];
- case 5: return [2 , result];
- }
- });
- });
- };
- AuthImpl.prototype.reloadAndSetCurrentUserOrClear = function (user) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var e_4;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- _a.trys.push([0, 2, , 3]);
- return [4 , _reloadWithoutSaving(user)];
- case 1:
- _a.sent();
- return [3 , 3];
- case 2:
- e_4 = _a.sent();
- if ((e_4 === null || e_4 === void 0 ? void 0 : e_4.code) !==
- "auth/".concat("network-request-failed" )) {
-
-
- return [2 , this.directlySetCurrentUser(null)];
- }
- return [3 , 3];
- case 3: return [2 , this.directlySetCurrentUser(user)];
- }
- });
- });
- };
- AuthImpl.prototype.useDeviceLanguage = function () {
- this.languageCode = _getUserLanguage();
- };
- AuthImpl.prototype._delete = function () {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- this._deleted = true;
- return [2 ];
- });
- });
- };
- AuthImpl.prototype.updateCurrentUser = function (userExtern) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var user;
- return tslib.__generator(this, function (_a) {
- user = userExtern
- ? util.getModularInstance(userExtern)
- : null;
- if (user) {
- _assert(user.auth.config.apiKey === this.config.apiKey, this, "invalid-user-token" );
- }
- return [2 , this._updateCurrentUser(user && user._clone(this))];
- });
- });
- };
- AuthImpl.prototype._updateCurrentUser = function (user, skipBeforeStateCallbacks) {
- if (skipBeforeStateCallbacks === void 0) { skipBeforeStateCallbacks = false; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- var _this = this;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (this._deleted) {
- return [2 ];
- }
- if (user) {
- _assert(this.tenantId === user.tenantId, this, "tenant-id-mismatch" );
- }
- if (!!skipBeforeStateCallbacks) return [3 , 2];
- return [4 , this.beforeStateQueue.runMiddleware(user)];
- case 1:
- _a.sent();
- _a.label = 2;
- case 2: return [2 , this.queue(function () { return tslib.__awaiter(_this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , this.directlySetCurrentUser(user)];
- case 1:
- _a.sent();
- this.notifyAuthListeners();
- return [2 ];
- }
- });
- }); })];
- }
- });
- });
- };
- AuthImpl.prototype.signOut = function () {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
-
- return [4 , this.beforeStateQueue.runMiddleware(null)];
- case 1:
-
- _a.sent();
- if (!(this.redirectPersistenceManager || this._popupRedirectResolver)) return [3 , 3];
- return [4 , this._setRedirectUser(null)];
- case 2:
- _a.sent();
- _a.label = 3;
- case 3:
-
-
- return [2 , this._updateCurrentUser(null, true)];
- }
- });
- });
- };
- AuthImpl.prototype.setPersistence = function (persistence) {
- var _this = this;
- return this.queue(function () { return tslib.__awaiter(_this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , this.assertedPersistence.setPersistence(_getInstance(persistence))];
- case 1:
- _a.sent();
- return [2 ];
- }
- });
- }); });
- };
- AuthImpl.prototype.initializeRecaptchaConfig = function () {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var response, config, verifier;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , getRecaptchaConfig(this, {
- clientType: "CLIENT_TYPE_WEB" ,
- version: "RECAPTCHA_ENTERPRISE"
- })];
- case 1:
- response = _a.sent();
- config = new RecaptchaConfig(response);
- if (this.tenantId == null) {
- this._agentRecaptchaConfig = config;
- }
- else {
- this._tenantRecaptchaConfigs[this.tenantId] = config;
- }
- if (config.emailPasswordEnabled) {
- verifier = new RecaptchaEnterpriseVerifier(this);
- void verifier.verify();
- }
- return [2 ];
- }
- });
- });
- };
- AuthImpl.prototype._getRecaptchaConfig = function () {
- if (this.tenantId == null) {
- return this._agentRecaptchaConfig;
- }
- else {
- return this._tenantRecaptchaConfigs[this.tenantId];
- }
- };
- AuthImpl.prototype._getPersistence = function () {
- return this.assertedPersistence.persistence.type;
- };
- AuthImpl.prototype._updateErrorMap = function (errorMap) {
- this._errorFactory = new util.ErrorFactory('auth', 'Firebase', errorMap());
- };
- AuthImpl.prototype.onAuthStateChanged = function (nextOrObserver, error, completed) {
- return this.registerStateListener(this.authStateSubscription, nextOrObserver, error, completed);
- };
- AuthImpl.prototype.beforeAuthStateChanged = function (callback, onAbort) {
- return this.beforeStateQueue.pushCallback(callback, onAbort);
- };
- AuthImpl.prototype.onIdTokenChanged = function (nextOrObserver, error, completed) {
- return this.registerStateListener(this.idTokenSubscription, nextOrObserver, error, completed);
- };
- AuthImpl.prototype.toJSON = function () {
- var _a;
- return {
- apiKey: this.config.apiKey,
- authDomain: this.config.authDomain,
- appName: this.name,
- currentUser: (_a = this._currentUser) === null || _a === void 0 ? void 0 : _a.toJSON()
- };
- };
- AuthImpl.prototype._setRedirectUser = function (user, popupRedirectResolver) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var redirectManager;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , this.getOrInitRedirectPersistenceManager(popupRedirectResolver)];
- case 1:
- redirectManager = _a.sent();
- return [2 , user === null
- ? redirectManager.removeCurrentUser()
- : redirectManager.setCurrentUser(user)];
- }
- });
- });
- };
- AuthImpl.prototype.getOrInitRedirectPersistenceManager = function (popupRedirectResolver) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var resolver, _a, _b;
- return tslib.__generator(this, function (_c) {
- switch (_c.label) {
- case 0:
- if (!!this.redirectPersistenceManager) return [3 , 3];
- resolver = (popupRedirectResolver && _getInstance(popupRedirectResolver)) ||
- this._popupRedirectResolver;
- _assert(resolver, this, "argument-error" );
- _a = this;
- return [4 , PersistenceUserManager.create(this, [_getInstance(resolver._redirectPersistence)], "redirectUser" )];
- case 1:
- _a.redirectPersistenceManager = _c.sent();
- _b = this;
- return [4 , this.redirectPersistenceManager.getCurrentUser()];
- case 2:
- _b.redirectUser =
- _c.sent();
- _c.label = 3;
- case 3: return [2 , this.redirectPersistenceManager];
- }
- });
- });
- };
- AuthImpl.prototype._redirectUserForId = function (id) {
- var _a, _b;
- return tslib.__awaiter(this, void 0, void 0, function () {
- var _this = this;
- return tslib.__generator(this, function (_c) {
- switch (_c.label) {
- case 0:
- if (!this._isInitialized) return [3 , 2];
- return [4 , this.queue(function () { return tslib.__awaiter(_this, void 0, void 0, function () { return tslib.__generator(this, function (_a) {
- return [2 ];
- }); }); })];
- case 1:
- _c.sent();
- _c.label = 2;
- case 2:
- if (((_a = this._currentUser) === null || _a === void 0 ? void 0 : _a._redirectEventId) === id) {
- return [2 , this._currentUser];
- }
- if (((_b = this.redirectUser) === null || _b === void 0 ? void 0 : _b._redirectEventId) === id) {
- return [2 , this.redirectUser];
- }
- return [2 , null];
- }
- });
- });
- };
- AuthImpl.prototype._persistUserIfCurrent = function (user) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var _this = this;
- return tslib.__generator(this, function (_a) {
- if (user === this.currentUser) {
- return [2 , this.queue(function () { return tslib.__awaiter(_this, void 0, void 0, function () { return tslib.__generator(this, function (_a) {
- return [2 , this.directlySetCurrentUser(user)];
- }); }); })];
- }
- return [2 ];
- });
- });
- };
-
- AuthImpl.prototype._notifyListenersIfCurrent = function (user) {
- if (user === this.currentUser) {
- this.notifyAuthListeners();
- }
- };
- AuthImpl.prototype._key = function () {
- return "".concat(this.config.authDomain, ":").concat(this.config.apiKey, ":").concat(this.name);
- };
- AuthImpl.prototype._startProactiveRefresh = function () {
- this.isProactiveRefreshEnabled = true;
- if (this.currentUser) {
- this._currentUser._startProactiveRefresh();
- }
- };
- AuthImpl.prototype._stopProactiveRefresh = function () {
- this.isProactiveRefreshEnabled = false;
- if (this.currentUser) {
- this._currentUser._stopProactiveRefresh();
- }
- };
- Object.defineProperty(AuthImpl.prototype, "_currentUser", {
-
- get: function () {
- return this.currentUser;
- },
- enumerable: false,
- configurable: true
- });
- AuthImpl.prototype.notifyAuthListeners = function () {
- var _a, _b;
- if (!this._isInitialized) {
- return;
- }
- this.idTokenSubscription.next(this.currentUser);
- var currentUid = (_b = (_a = this.currentUser) === null || _a === void 0 ? void 0 : _a.uid) !== null && _b !== void 0 ? _b : null;
- if (this.lastNotifiedUid !== currentUid) {
- this.lastNotifiedUid = currentUid;
- this.authStateSubscription.next(this.currentUser);
- }
- };
- AuthImpl.prototype.registerStateListener = function (subscription, nextOrObserver, error, completed) {
- var _this = this;
- if (this._deleted) {
- return function () { };
- }
- var cb = typeof nextOrObserver === 'function'
- ? nextOrObserver
- : nextOrObserver.next.bind(nextOrObserver);
- var promise = this._isInitialized
- ? Promise.resolve()
- : this._initializationPromise;
- _assert(promise, this, "internal-error" );
-
-
- promise.then(function () { return cb(_this.currentUser); });
- if (typeof nextOrObserver === 'function') {
- return subscription.addObserver(nextOrObserver, error, completed);
- }
- else {
- return subscription.addObserver(nextOrObserver);
- }
- };
-
- AuthImpl.prototype.directlySetCurrentUser = function (user) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (this.currentUser && this.currentUser !== user) {
- this._currentUser._stopProactiveRefresh();
- }
- if (user && this.isProactiveRefreshEnabled) {
- user._startProactiveRefresh();
- }
- this.currentUser = user;
- if (!user) return [3 , 2];
- return [4 , this.assertedPersistence.setCurrentUser(user)];
- case 1:
- _a.sent();
- return [3 , 4];
- case 2: return [4 , this.assertedPersistence.removeCurrentUser()];
- case 3:
- _a.sent();
- _a.label = 4;
- case 4: return [2 ];
- }
- });
- });
- };
- AuthImpl.prototype.queue = function (action) {
-
-
- this.operations = this.operations.then(action, action);
- return this.operations;
- };
- Object.defineProperty(AuthImpl.prototype, "assertedPersistence", {
- get: function () {
- _assert(this.persistenceManager, this, "internal-error" );
- return this.persistenceManager;
- },
- enumerable: false,
- configurable: true
- });
- AuthImpl.prototype._logFramework = function (framework) {
- if (!framework || this.frameworks.includes(framework)) {
- return;
- }
- this.frameworks.push(framework);
-
-
- this.frameworks.sort();
- this.clientVersion = _getClientVersion(this.config.clientPlatform, this._getFrameworks());
- };
- AuthImpl.prototype._getFrameworks = function () {
- return this.frameworks;
- };
- AuthImpl.prototype._getAdditionalHeaders = function () {
- var _a;
- return tslib.__awaiter(this, void 0, void 0, function () {
- var headers, heartbeatsHeader, appCheckToken;
- var _b;
- return tslib.__generator(this, function (_c) {
- switch (_c.label) {
- case 0:
- headers = (_b = {},
- _b["X-Client-Version" ] = this.clientVersion,
- _b);
- if (this.app.options.appId) {
- headers["X-Firebase-gmpid" ] = this.app.options.appId;
- }
- return [4 , ((_a = this.heartbeatServiceProvider
- .getImmediate({
- optional: true
- })) === null || _a === void 0 ? void 0 : _a.getHeartbeatsHeader())];
- case 1:
- heartbeatsHeader = _c.sent();
- if (heartbeatsHeader) {
- headers["X-Firebase-Client" ] = heartbeatsHeader;
- }
- return [4 , this._getAppCheckToken()];
- case 2:
- appCheckToken = _c.sent();
- if (appCheckToken) {
- headers["X-Firebase-AppCheck" ] = appCheckToken;
- }
- return [2 , headers];
- }
- });
- });
- };
- AuthImpl.prototype._getAppCheckToken = function () {
- var _a;
- return tslib.__awaiter(this, void 0, void 0, function () {
- var appCheckTokenResult;
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0: return [4 , ((_a = this.appCheckServiceProvider
- .getImmediate({ optional: true })) === null || _a === void 0 ? void 0 : _a.getToken())];
- case 1:
- appCheckTokenResult = _b.sent();
- if (appCheckTokenResult === null || appCheckTokenResult === void 0 ? void 0 : appCheckTokenResult.error) {
-
-
-
-
- _logWarn("Error while retrieving App Check token: ".concat(appCheckTokenResult.error));
- }
- return [2 , appCheckTokenResult === null || appCheckTokenResult === void 0 ? void 0 : appCheckTokenResult.token];
- }
- });
- });
- };
- return AuthImpl;
- }());
- function _castAuth(auth) {
- return util.getModularInstance(auth);
- }
- var Subscription = (function () {
- function Subscription(auth) {
- var _this = this;
- this.auth = auth;
- this.observer = null;
- this.addObserver = util.createSubscribe(function (observer) { return (_this.observer = observer); });
- }
- Object.defineProperty(Subscription.prototype, "next", {
- get: function () {
- _assert(this.observer, this.auth, "internal-error" );
- return this.observer.next.bind(this.observer);
- },
- enumerable: false,
- configurable: true
- });
- return Subscription;
- }());
- function initializeAuth(app$1, deps) {
- var provider = app._getProvider(app$1, 'auth');
- if (provider.isInitialized()) {
- var auth_1 = provider.getImmediate();
- var initialOptions = provider.getOptions();
- if (util.deepEqual(initialOptions, deps !== null && deps !== void 0 ? deps : {})) {
- return auth_1;
- }
- else {
- _fail(auth_1, "already-initialized" );
- }
- }
- var auth = provider.initialize({ options: deps });
- return auth;
- }
- function _initializeAuthInstance(auth, deps) {
- var persistence = (deps === null || deps === void 0 ? void 0 : deps.persistence) || [];
- var hierarchy = (Array.isArray(persistence) ? persistence : [persistence]).map(_getInstance);
- if (deps === null || deps === void 0 ? void 0 : deps.errorMap) {
- auth._updateErrorMap(deps.errorMap);
- }
-
-
-
- auth._initializeWithPersistence(hierarchy, deps === null || deps === void 0 ? void 0 : deps.popupRedirectResolver);
- }
- function connectAuthEmulator(auth, url, options) {
- var authInternal = _castAuth(auth);
- _assert(authInternal._canInitEmulator, authInternal, "emulator-config-failed" );
- _assert(/^https?:\/\//.test(url), authInternal, "invalid-emulator-scheme" );
- var disableWarnings = !!(options === null || options === void 0 ? void 0 : options.disableWarnings);
- var protocol = extractProtocol(url);
- var _a = extractHostAndPort(url), host = _a.host, port = _a.port;
- var portStr = port === null ? '' : ":".concat(port);
-
- authInternal.config.emulator = { url: "".concat(protocol, "//").concat(host).concat(portStr, "/") };
- authInternal.settings.appVerificationDisabledForTesting = true;
- authInternal.emulatorConfig = Object.freeze({
- host: host,
- port: port,
- protocol: protocol.replace(':', ''),
- options: Object.freeze({ disableWarnings: disableWarnings })
- });
- if (!disableWarnings) {
- emitEmulatorWarning();
- }
- }
- function extractProtocol(url) {
- var protocolEnd = url.indexOf(':');
- return protocolEnd < 0 ? '' : url.substr(0, protocolEnd + 1);
- }
- function extractHostAndPort(url) {
- var protocol = extractProtocol(url);
- var authority = /(\/\/)?([^?#/]+)/.exec(url.substr(protocol.length));
- if (!authority) {
- return { host: '', port: null };
- }
- var hostAndPort = authority[2].split('@').pop() || '';
- var bracketedIPv6 = /^(\[[^\]]+\])(:|$)/.exec(hostAndPort);
- if (bracketedIPv6) {
- var host = bracketedIPv6[1];
- return { host: host, port: parsePort(hostAndPort.substr(host.length + 1)) };
- }
- else {
- var _a = hostAndPort.split(':'), host = _a[0], port = _a[1];
- return { host: host, port: parsePort(port) };
- }
- }
- function parsePort(portStr) {
- if (!portStr) {
- return null;
- }
- var port = Number(portStr);
- if (isNaN(port)) {
- return null;
- }
- return port;
- }
- function emitEmulatorWarning() {
- function attachBanner() {
- var el = document.createElement('p');
- var sty = el.style;
- el.innerText =
- 'Running in emulator mode. Do not use with production credentials.';
- sty.position = 'fixed';
- sty.width = '100%';
- sty.backgroundColor = '#ffffff';
- sty.border = '.1em solid #000000';
- sty.color = '#b50000';
- sty.bottom = '0px';
- sty.left = '0px';
- sty.margin = '0px';
- sty.zIndex = '10000';
- sty.textAlign = 'center';
- el.classList.add('firebase-emulator-warning');
- document.body.appendChild(el);
- }
- if (typeof console !== 'undefined' && typeof console.info === 'function') {
- console.info('WARNING: You are using the Auth Emulator,' +
- ' which is intended for local testing only. Do not use with' +
- ' production credentials.');
- }
- if (typeof window !== 'undefined' && typeof document !== 'undefined') {
- if (document.readyState === 'loading') {
- window.addEventListener('DOMContentLoaded', attachBanner);
- }
- else {
- attachBanner();
- }
- }
- }
- var AuthCredential = (function () {
-
- function AuthCredential(
-
- providerId,
-
- signInMethod) {
- this.providerId = providerId;
- this.signInMethod = signInMethod;
- }
-
- AuthCredential.prototype.toJSON = function () {
- return debugFail('not implemented');
- };
-
- AuthCredential.prototype._getIdTokenResponse = function (_auth) {
- return debugFail('not implemented');
- };
-
- AuthCredential.prototype._linkToIdToken = function (_auth, _idToken) {
- return debugFail('not implemented');
- };
-
- AuthCredential.prototype._getReauthenticationResolver = function (_auth) {
- return debugFail('not implemented');
- };
- return AuthCredential;
- }());
- function resetPassword(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performApiRequest(auth, "POST" , "/v1/accounts:resetPassword" , _addTidIfNecessary(auth, request))];
- });
- });
- }
- function updateEmailPassword(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performApiRequest(auth, "POST" , "/v1/accounts:update" , request)];
- });
- });
- }
- function applyActionCode$1(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performApiRequest(auth, "POST" , "/v1/accounts:update" , _addTidIfNecessary(auth, request))];
- });
- });
- }
- function signInWithPassword(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performSignInRequest(auth, "POST" , "/v1/accounts:signInWithPassword" , _addTidIfNecessary(auth, request))];
- });
- });
- }
- function sendOobCode(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performApiRequest(auth, "POST" , "/v1/accounts:sendOobCode" , _addTidIfNecessary(auth, request))];
- });
- });
- }
- function sendEmailVerification$1(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , sendOobCode(auth, request)];
- });
- });
- }
- function sendPasswordResetEmail$1(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , sendOobCode(auth, request)];
- });
- });
- }
- function sendSignInLinkToEmail$1(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , sendOobCode(auth, request)];
- });
- });
- }
- function verifyAndChangeEmail(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , sendOobCode(auth, request)];
- });
- });
- }
- function signInWithEmailLink$1(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performSignInRequest(auth, "POST" , "/v1/accounts:signInWithEmailLink" , _addTidIfNecessary(auth, request))];
- });
- });
- }
- function signInWithEmailLinkForLinking(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performSignInRequest(auth, "POST" , "/v1/accounts:signInWithEmailLink" , _addTidIfNecessary(auth, request))];
- });
- });
- }
- var EmailAuthCredential = (function (_super) {
- tslib.__extends(EmailAuthCredential, _super);
-
- function EmailAuthCredential(
-
- _email,
-
- _password, signInMethod,
-
- _tenantId) {
- if (_tenantId === void 0) { _tenantId = null; }
- var _this = _super.call(this, "password" , signInMethod) || this;
- _this._email = _email;
- _this._password = _password;
- _this._tenantId = _tenantId;
- return _this;
- }
-
- EmailAuthCredential._fromEmailAndPassword = function (email, password) {
- return new EmailAuthCredential(email, password, "password" );
- };
-
- EmailAuthCredential._fromEmailAndCode = function (email, oobCode, tenantId) {
- if (tenantId === void 0) { tenantId = null; }
- return new EmailAuthCredential(email, oobCode, "emailLink" , tenantId);
- };
-
- EmailAuthCredential.prototype.toJSON = function () {
- return {
- email: this._email,
- password: this._password,
- signInMethod: this.signInMethod,
- tenantId: this._tenantId
- };
- };
-
- EmailAuthCredential.fromJSON = function (json) {
- var obj = typeof json === 'string' ? JSON.parse(json) : json;
- if ((obj === null || obj === void 0 ? void 0 : obj.email) && (obj === null || obj === void 0 ? void 0 : obj.password)) {
- if (obj.signInMethod === "password" ) {
- return this._fromEmailAndPassword(obj.email, obj.password);
- }
- else if (obj.signInMethod === "emailLink" ) {
- return this._fromEmailAndCode(obj.email, obj.password, obj.tenantId);
- }
- }
- return null;
- };
-
- EmailAuthCredential.prototype._getIdTokenResponse = function (auth) {
- var _a;
- return tslib.__awaiter(this, void 0, void 0, function () {
- var _b, request_1, requestWithRecaptcha;
- var _this = this;
- return tslib.__generator(this, function (_c) {
- switch (_c.label) {
- case 0:
- _b = this.signInMethod;
- switch (_b) {
- case "password" : return [3 , 1];
- case "emailLink" : return [3 , 4];
- }
- return [3 , 5];
- case 1:
- request_1 = {
- returnSecureToken: true,
- email: this._email,
- password: this._password,
- clientType: "CLIENT_TYPE_WEB"
- };
- if (!((_a = auth._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.emailPasswordEnabled)) return [3 , 3];
- return [4 , injectRecaptchaFields(auth, request_1, "signInWithPassword" )];
- case 2:
- requestWithRecaptcha = _c.sent();
- return [2 , signInWithPassword(auth, requestWithRecaptcha)];
- case 3: return [2 , signInWithPassword(auth, request_1).catch(function (error) { return tslib.__awaiter(_this, void 0, void 0, function () {
- var requestWithRecaptcha;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (!(error.code === "auth/".concat("missing-recaptcha-token" ))) return [3 , 2];
- console.log('Sign-in with email address and password is protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the sign-in flow.');
- return [4 , injectRecaptchaFields(auth, request_1, "signInWithPassword" )];
- case 1:
- requestWithRecaptcha = _a.sent();
- return [2 , signInWithPassword(auth, requestWithRecaptcha)];
- case 2: return [2 , Promise.reject(error)];
- }
- });
- }); })];
- case 4: return [2 , signInWithEmailLink$1(auth, {
- email: this._email,
- oobCode: this._password
- })];
- case 5:
- _fail(auth, "internal-error" );
- _c.label = 6;
- case 6: return [2 ];
- }
- });
- });
- };
-
- EmailAuthCredential.prototype._linkToIdToken = function (auth, idToken) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- switch (this.signInMethod) {
- case "password" :
- return [2 , updateEmailPassword(auth, {
- idToken: idToken,
- returnSecureToken: true,
- email: this._email,
- password: this._password
- })];
- case "emailLink" :
- return [2 , signInWithEmailLinkForLinking(auth, {
- idToken: idToken,
- email: this._email,
- oobCode: this._password
- })];
- default:
- _fail(auth, "internal-error" );
- }
- return [2 ];
- });
- });
- };
-
- EmailAuthCredential.prototype._getReauthenticationResolver = function (auth) {
- return this._getIdTokenResponse(auth);
- };
- return EmailAuthCredential;
- }(AuthCredential));
- function signInWithIdp(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performSignInRequest(auth, "POST" , "/v1/accounts:signInWithIdp" , _addTidIfNecessary(auth, request))];
- });
- });
- }
- var IDP_REQUEST_URI$1 = 'http://localhost';
- var OAuthCredential = (function (_super) {
- tslib.__extends(OAuthCredential, _super);
- function OAuthCredential() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.pendingToken = null;
- return _this;
- }
-
- OAuthCredential._fromParams = function (params) {
- var cred = new OAuthCredential(params.providerId, params.signInMethod);
- if (params.idToken || params.accessToken) {
-
- if (params.idToken) {
- cred.idToken = params.idToken;
- }
- if (params.accessToken) {
- cred.accessToken = params.accessToken;
- }
-
- if (params.nonce && !params.pendingToken) {
- cred.nonce = params.nonce;
- }
- if (params.pendingToken) {
- cred.pendingToken = params.pendingToken;
- }
- }
- else if (params.oauthToken && params.oauthTokenSecret) {
-
- cred.accessToken = params.oauthToken;
- cred.secret = params.oauthTokenSecret;
- }
- else {
- _fail("argument-error" );
- }
- return cred;
- };
-
- OAuthCredential.prototype.toJSON = function () {
- return {
- idToken: this.idToken,
- accessToken: this.accessToken,
- secret: this.secret,
- nonce: this.nonce,
- pendingToken: this.pendingToken,
- providerId: this.providerId,
- signInMethod: this.signInMethod
- };
- };
-
- OAuthCredential.fromJSON = function (json) {
- var obj = typeof json === 'string' ? JSON.parse(json) : json;
- var providerId = obj.providerId, signInMethod = obj.signInMethod, rest = tslib.__rest(obj, ["providerId", "signInMethod"]);
- if (!providerId || !signInMethod) {
- return null;
- }
- var cred = new OAuthCredential(providerId, signInMethod);
- cred.idToken = rest.idToken || undefined;
- cred.accessToken = rest.accessToken || undefined;
- cred.secret = rest.secret;
- cred.nonce = rest.nonce;
- cred.pendingToken = rest.pendingToken || null;
- return cred;
- };
-
- OAuthCredential.prototype._getIdTokenResponse = function (auth) {
- var request = this.buildRequest();
- return signInWithIdp(auth, request);
- };
-
- OAuthCredential.prototype._linkToIdToken = function (auth, idToken) {
- var request = this.buildRequest();
- request.idToken = idToken;
- return signInWithIdp(auth, request);
- };
-
- OAuthCredential.prototype._getReauthenticationResolver = function (auth) {
- var request = this.buildRequest();
- request.autoCreate = false;
- return signInWithIdp(auth, request);
- };
- OAuthCredential.prototype.buildRequest = function () {
- var request = {
- requestUri: IDP_REQUEST_URI$1,
- returnSecureToken: true
- };
- if (this.pendingToken) {
- request.pendingToken = this.pendingToken;
- }
- else {
- var postBody = {};
- if (this.idToken) {
- postBody['id_token'] = this.idToken;
- }
- if (this.accessToken) {
- postBody['access_token'] = this.accessToken;
- }
- if (this.secret) {
- postBody['oauth_token_secret'] = this.secret;
- }
- postBody['providerId'] = this.providerId;
- if (this.nonce && !this.pendingToken) {
- postBody['nonce'] = this.nonce;
- }
- request.postBody = util.querystring(postBody);
- }
- return request;
- };
- return OAuthCredential;
- }(AuthCredential));
- var _a;
- function signInWithPhoneNumber$1(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performSignInRequest(auth, "POST" , "/v1/accounts:signInWithPhoneNumber" , _addTidIfNecessary(auth, request))];
- });
- });
- }
- function linkWithPhoneNumber$1(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var response;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , _performSignInRequest(auth, "POST" , "/v1/accounts:signInWithPhoneNumber" , _addTidIfNecessary(auth, request))];
- case 1:
- response = _a.sent();
- if (response.temporaryProof) {
- throw _makeTaggedError(auth, "account-exists-with-different-credential" , response);
- }
- return [2 , response];
- }
- });
- });
- }
- var VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_ = (_a = {},
- _a["USER_NOT_FOUND" ] = "user-not-found" ,
- _a);
- function verifyPhoneNumberForExisting(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var apiRequest;
- return tslib.__generator(this, function (_a) {
- apiRequest = tslib.__assign(tslib.__assign({}, request), { operation: 'REAUTH' });
- return [2 , _performSignInRequest(auth, "POST" , "/v1/accounts:signInWithPhoneNumber" , _addTidIfNecessary(auth, apiRequest), VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_)];
- });
- });
- }
- var PhoneAuthCredential = (function (_super) {
- tslib.__extends(PhoneAuthCredential, _super);
- function PhoneAuthCredential(params) {
- var _this = _super.call(this, "phone" , "phone" ) || this;
- _this.params = params;
- return _this;
- }
-
- PhoneAuthCredential._fromVerification = function (verificationId, verificationCode) {
- return new PhoneAuthCredential({ verificationId: verificationId, verificationCode: verificationCode });
- };
-
- PhoneAuthCredential._fromTokenResponse = function (phoneNumber, temporaryProof) {
- return new PhoneAuthCredential({ phoneNumber: phoneNumber, temporaryProof: temporaryProof });
- };
-
- PhoneAuthCredential.prototype._getIdTokenResponse = function (auth) {
- return signInWithPhoneNumber$1(auth, this._makeVerificationRequest());
- };
-
- PhoneAuthCredential.prototype._linkToIdToken = function (auth, idToken) {
- return linkWithPhoneNumber$1(auth, tslib.__assign({ idToken: idToken }, this._makeVerificationRequest()));
- };
-
- PhoneAuthCredential.prototype._getReauthenticationResolver = function (auth) {
- return verifyPhoneNumberForExisting(auth, this._makeVerificationRequest());
- };
-
- PhoneAuthCredential.prototype._makeVerificationRequest = function () {
- var _a = this.params, temporaryProof = _a.temporaryProof, phoneNumber = _a.phoneNumber, verificationId = _a.verificationId, verificationCode = _a.verificationCode;
- if (temporaryProof && phoneNumber) {
- return { temporaryProof: temporaryProof, phoneNumber: phoneNumber };
- }
- return {
- sessionInfo: verificationId,
- code: verificationCode
- };
- };
-
- PhoneAuthCredential.prototype.toJSON = function () {
- var obj = {
- providerId: this.providerId
- };
- if (this.params.phoneNumber) {
- obj.phoneNumber = this.params.phoneNumber;
- }
- if (this.params.temporaryProof) {
- obj.temporaryProof = this.params.temporaryProof;
- }
- if (this.params.verificationCode) {
- obj.verificationCode = this.params.verificationCode;
- }
- if (this.params.verificationId) {
- obj.verificationId = this.params.verificationId;
- }
- return obj;
- };
-
- PhoneAuthCredential.fromJSON = function (json) {
- if (typeof json === 'string') {
- json = JSON.parse(json);
- }
- var _a = json, verificationId = _a.verificationId, verificationCode = _a.verificationCode, phoneNumber = _a.phoneNumber, temporaryProof = _a.temporaryProof;
- if (!verificationCode &&
- !verificationId &&
- !phoneNumber &&
- !temporaryProof) {
- return null;
- }
- return new PhoneAuthCredential({
- verificationId: verificationId,
- verificationCode: verificationCode,
- phoneNumber: phoneNumber,
- temporaryProof: temporaryProof
- });
- };
- return PhoneAuthCredential;
- }(AuthCredential));
- function parseMode(mode) {
- switch (mode) {
- case 'recoverEmail':
- return "RECOVER_EMAIL" ;
- case 'resetPassword':
- return "PASSWORD_RESET" ;
- case 'signIn':
- return "EMAIL_SIGNIN" ;
- case 'verifyEmail':
- return "VERIFY_EMAIL" ;
- case 'verifyAndChangeEmail':
- return "VERIFY_AND_CHANGE_EMAIL" ;
- case 'revertSecondFactorAddition':
- return "REVERT_SECOND_FACTOR_ADDITION" ;
- default:
- return null;
- }
- }
- function parseDeepLink(url) {
- var link = util.querystringDecode(util.extractQuerystring(url))['link'];
-
- var doubleDeepLink = link
- ? util.querystringDecode(util.extractQuerystring(link))['deep_link_id']
- : null;
-
- var iOSDeepLink = util.querystringDecode(util.extractQuerystring(url))['deep_link_id'];
- var iOSDoubleDeepLink = iOSDeepLink
- ? util.querystringDecode(util.extractQuerystring(iOSDeepLink))['link']
- : null;
- return iOSDoubleDeepLink || iOSDeepLink || doubleDeepLink || link || url;
- }
- var ActionCodeURL = (function () {
-
- function ActionCodeURL(actionLink) {
- var _a, _b, _c, _d, _e, _f;
- var searchParams = util.querystringDecode(util.extractQuerystring(actionLink));
- var apiKey = (_a = searchParams["apiKey" ]) !== null && _a !== void 0 ? _a : null;
- var code = (_b = searchParams["oobCode" ]) !== null && _b !== void 0 ? _b : null;
- var operation = parseMode((_c = searchParams["mode" ]) !== null && _c !== void 0 ? _c : null);
-
- _assert(apiKey && code && operation, "argument-error" );
- this.apiKey = apiKey;
- this.operation = operation;
- this.code = code;
- this.continueUrl = (_d = searchParams["continueUrl" ]) !== null && _d !== void 0 ? _d : null;
- this.languageCode = (_e = searchParams["languageCode" ]) !== null && _e !== void 0 ? _e : null;
- this.tenantId = (_f = searchParams["tenantId" ]) !== null && _f !== void 0 ? _f : null;
- }
-
- ActionCodeURL.parseLink = function (link) {
- var actionLink = parseDeepLink(link);
- try {
- return new ActionCodeURL(actionLink);
- }
- catch (_a) {
- return null;
- }
- };
- return ActionCodeURL;
- }());
- function parseActionCodeURL(link) {
- return ActionCodeURL.parseLink(link);
- }
- var EmailAuthProvider = (function () {
- function EmailAuthProvider() {
-
- this.providerId = EmailAuthProvider.PROVIDER_ID;
- }
-
- EmailAuthProvider.credential = function (email, password) {
- return EmailAuthCredential._fromEmailAndPassword(email, password);
- };
-
- EmailAuthProvider.credentialWithLink = function (email, emailLink) {
- var actionCodeUrl = ActionCodeURL.parseLink(emailLink);
- _assert(actionCodeUrl, "argument-error" );
- return EmailAuthCredential._fromEmailAndCode(email, actionCodeUrl.code, actionCodeUrl.tenantId);
- };
-
- EmailAuthProvider.PROVIDER_ID = "password" ;
-
- EmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD = "password" ;
-
- EmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD = "emailLink" ;
- return EmailAuthProvider;
- }());
- var FederatedAuthProvider = (function () {
-
- function FederatedAuthProvider(providerId) {
- this.providerId = providerId;
-
- this.defaultLanguageCode = null;
-
- this.customParameters = {};
- }
-
- FederatedAuthProvider.prototype.setDefaultLanguage = function (languageCode) {
- this.defaultLanguageCode = languageCode;
- };
-
- FederatedAuthProvider.prototype.setCustomParameters = function (customOAuthParameters) {
- this.customParameters = customOAuthParameters;
- return this;
- };
-
- FederatedAuthProvider.prototype.getCustomParameters = function () {
- return this.customParameters;
- };
- return FederatedAuthProvider;
- }());
- var BaseOAuthProvider = (function (_super) {
- tslib.__extends(BaseOAuthProvider, _super);
- function BaseOAuthProvider() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
-
- _this.scopes = [];
- return _this;
- }
-
- BaseOAuthProvider.prototype.addScope = function (scope) {
-
- if (!this.scopes.includes(scope)) {
- this.scopes.push(scope);
- }
- return this;
- };
-
- BaseOAuthProvider.prototype.getScopes = function () {
- return tslib.__spreadArray([], this.scopes, true);
- };
- return BaseOAuthProvider;
- }(FederatedAuthProvider));
- var OAuthProvider = (function (_super) {
- tslib.__extends(OAuthProvider, _super);
- function OAuthProvider() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
-
- OAuthProvider.credentialFromJSON = function (json) {
- var obj = typeof json === 'string' ? JSON.parse(json) : json;
- _assert('providerId' in obj && 'signInMethod' in obj, "argument-error" );
- return OAuthCredential._fromParams(obj);
- };
-
- OAuthProvider.prototype.credential = function (params) {
- return this._credential(tslib.__assign(tslib.__assign({}, params), { nonce: params.rawNonce }));
- };
-
- OAuthProvider.prototype._credential = function (params) {
- _assert(params.idToken || params.accessToken, "argument-error" );
-
- return OAuthCredential._fromParams(tslib.__assign(tslib.__assign({}, params), { providerId: this.providerId, signInMethod: this.providerId }));
- };
-
- OAuthProvider.credentialFromResult = function (userCredential) {
- return OAuthProvider.oauthCredentialFromTaggedObject(userCredential);
- };
-
- OAuthProvider.credentialFromError = function (error) {
- return OAuthProvider.oauthCredentialFromTaggedObject((error.customData || {}));
- };
- OAuthProvider.oauthCredentialFromTaggedObject = function (_a) {
- var tokenResponse = _a._tokenResponse;
- if (!tokenResponse) {
- return null;
- }
- var _b = tokenResponse, oauthIdToken = _b.oauthIdToken, oauthAccessToken = _b.oauthAccessToken, oauthTokenSecret = _b.oauthTokenSecret, pendingToken = _b.pendingToken, nonce = _b.nonce, providerId = _b.providerId;
- if (!oauthAccessToken &&
- !oauthTokenSecret &&
- !oauthIdToken &&
- !pendingToken) {
- return null;
- }
- if (!providerId) {
- return null;
- }
- try {
- return new OAuthProvider(providerId)._credential({
- idToken: oauthIdToken,
- accessToken: oauthAccessToken,
- nonce: nonce,
- pendingToken: pendingToken
- });
- }
- catch (e) {
- return null;
- }
- };
- return OAuthProvider;
- }(BaseOAuthProvider));
- var FacebookAuthProvider = (function (_super) {
- tslib.__extends(FacebookAuthProvider, _super);
- function FacebookAuthProvider() {
- return _super.call(this, "facebook.com" ) || this;
- }
-
- FacebookAuthProvider.credential = function (accessToken) {
- return OAuthCredential._fromParams({
- providerId: FacebookAuthProvider.PROVIDER_ID,
- signInMethod: FacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD,
- accessToken: accessToken
- });
- };
-
- FacebookAuthProvider.credentialFromResult = function (userCredential) {
- return FacebookAuthProvider.credentialFromTaggedObject(userCredential);
- };
-
- FacebookAuthProvider.credentialFromError = function (error) {
- return FacebookAuthProvider.credentialFromTaggedObject((error.customData || {}));
- };
- FacebookAuthProvider.credentialFromTaggedObject = function (_a) {
- var tokenResponse = _a._tokenResponse;
- if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {
- return null;
- }
- if (!tokenResponse.oauthAccessToken) {
- return null;
- }
- try {
- return FacebookAuthProvider.credential(tokenResponse.oauthAccessToken);
- }
- catch (_b) {
- return null;
- }
- };
-
- FacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD = "facebook.com" ;
-
- FacebookAuthProvider.PROVIDER_ID = "facebook.com" ;
- return FacebookAuthProvider;
- }(BaseOAuthProvider));
- var GoogleAuthProvider = (function (_super) {
- tslib.__extends(GoogleAuthProvider, _super);
- function GoogleAuthProvider() {
- var _this = _super.call(this, "google.com" ) || this;
- _this.addScope('profile');
- return _this;
- }
-
- GoogleAuthProvider.credential = function (idToken, accessToken) {
- return OAuthCredential._fromParams({
- providerId: GoogleAuthProvider.PROVIDER_ID,
- signInMethod: GoogleAuthProvider.GOOGLE_SIGN_IN_METHOD,
- idToken: idToken,
- accessToken: accessToken
- });
- };
-
- GoogleAuthProvider.credentialFromResult = function (userCredential) {
- return GoogleAuthProvider.credentialFromTaggedObject(userCredential);
- };
-
- GoogleAuthProvider.credentialFromError = function (error) {
- return GoogleAuthProvider.credentialFromTaggedObject((error.customData || {}));
- };
- GoogleAuthProvider.credentialFromTaggedObject = function (_a) {
- var tokenResponse = _a._tokenResponse;
- if (!tokenResponse) {
- return null;
- }
- var _b = tokenResponse, oauthIdToken = _b.oauthIdToken, oauthAccessToken = _b.oauthAccessToken;
- if (!oauthIdToken && !oauthAccessToken) {
-
- return null;
- }
- try {
- return GoogleAuthProvider.credential(oauthIdToken, oauthAccessToken);
- }
- catch (_c) {
- return null;
- }
- };
-
- GoogleAuthProvider.GOOGLE_SIGN_IN_METHOD = "google.com" ;
-
- GoogleAuthProvider.PROVIDER_ID = "google.com" ;
- return GoogleAuthProvider;
- }(BaseOAuthProvider));
- var GithubAuthProvider = (function (_super) {
- tslib.__extends(GithubAuthProvider, _super);
- function GithubAuthProvider() {
- return _super.call(this, "github.com" ) || this;
- }
-
- GithubAuthProvider.credential = function (accessToken) {
- return OAuthCredential._fromParams({
- providerId: GithubAuthProvider.PROVIDER_ID,
- signInMethod: GithubAuthProvider.GITHUB_SIGN_IN_METHOD,
- accessToken: accessToken
- });
- };
-
- GithubAuthProvider.credentialFromResult = function (userCredential) {
- return GithubAuthProvider.credentialFromTaggedObject(userCredential);
- };
-
- GithubAuthProvider.credentialFromError = function (error) {
- return GithubAuthProvider.credentialFromTaggedObject((error.customData || {}));
- };
- GithubAuthProvider.credentialFromTaggedObject = function (_a) {
- var tokenResponse = _a._tokenResponse;
- if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {
- return null;
- }
- if (!tokenResponse.oauthAccessToken) {
- return null;
- }
- try {
- return GithubAuthProvider.credential(tokenResponse.oauthAccessToken);
- }
- catch (_b) {
- return null;
- }
- };
-
- GithubAuthProvider.GITHUB_SIGN_IN_METHOD = "github.com" ;
-
- GithubAuthProvider.PROVIDER_ID = "github.com" ;
- return GithubAuthProvider;
- }(BaseOAuthProvider));
- var IDP_REQUEST_URI = 'http://localhost';
- var SAMLAuthCredential = (function (_super) {
- tslib.__extends(SAMLAuthCredential, _super);
-
- function SAMLAuthCredential(providerId, pendingToken) {
- var _this = _super.call(this, providerId, providerId) || this;
- _this.pendingToken = pendingToken;
- return _this;
- }
-
- SAMLAuthCredential.prototype._getIdTokenResponse = function (auth) {
- var request = this.buildRequest();
- return signInWithIdp(auth, request);
- };
-
- SAMLAuthCredential.prototype._linkToIdToken = function (auth, idToken) {
- var request = this.buildRequest();
- request.idToken = idToken;
- return signInWithIdp(auth, request);
- };
-
- SAMLAuthCredential.prototype._getReauthenticationResolver = function (auth) {
- var request = this.buildRequest();
- request.autoCreate = false;
- return signInWithIdp(auth, request);
- };
-
- SAMLAuthCredential.prototype.toJSON = function () {
- return {
- signInMethod: this.signInMethod,
- providerId: this.providerId,
- pendingToken: this.pendingToken
- };
- };
-
- SAMLAuthCredential.fromJSON = function (json) {
- var obj = typeof json === 'string' ? JSON.parse(json) : json;
- var providerId = obj.providerId, signInMethod = obj.signInMethod, pendingToken = obj.pendingToken;
- if (!providerId ||
- !signInMethod ||
- !pendingToken ||
- providerId !== signInMethod) {
- return null;
- }
- return new SAMLAuthCredential(providerId, pendingToken);
- };
-
- SAMLAuthCredential._create = function (providerId, pendingToken) {
- return new SAMLAuthCredential(providerId, pendingToken);
- };
- SAMLAuthCredential.prototype.buildRequest = function () {
- return {
- requestUri: IDP_REQUEST_URI,
- returnSecureToken: true,
- pendingToken: this.pendingToken
- };
- };
- return SAMLAuthCredential;
- }(AuthCredential));
- var SAML_PROVIDER_PREFIX = 'saml.';
- var SAMLAuthProvider = (function (_super) {
- tslib.__extends(SAMLAuthProvider, _super);
-
- function SAMLAuthProvider(providerId) {
- _assert(providerId.startsWith(SAML_PROVIDER_PREFIX), "argument-error" );
- return _super.call(this, providerId) || this;
- }
-
- SAMLAuthProvider.credentialFromResult = function (userCredential) {
- return SAMLAuthProvider.samlCredentialFromTaggedObject(userCredential);
- };
-
- SAMLAuthProvider.credentialFromError = function (error) {
- return SAMLAuthProvider.samlCredentialFromTaggedObject((error.customData || {}));
- };
-
- SAMLAuthProvider.credentialFromJSON = function (json) {
- var credential = SAMLAuthCredential.fromJSON(json);
- _assert(credential, "argument-error" );
- return credential;
- };
- SAMLAuthProvider.samlCredentialFromTaggedObject = function (_a) {
- var tokenResponse = _a._tokenResponse;
- if (!tokenResponse) {
- return null;
- }
- var _b = tokenResponse, pendingToken = _b.pendingToken, providerId = _b.providerId;
- if (!pendingToken || !providerId) {
- return null;
- }
- try {
- return SAMLAuthCredential._create(providerId, pendingToken);
- }
- catch (e) {
- return null;
- }
- };
- return SAMLAuthProvider;
- }(FederatedAuthProvider));
- var TwitterAuthProvider = (function (_super) {
- tslib.__extends(TwitterAuthProvider, _super);
- function TwitterAuthProvider() {
- return _super.call(this, "twitter.com" ) || this;
- }
-
- TwitterAuthProvider.credential = function (token, secret) {
- return OAuthCredential._fromParams({
- providerId: TwitterAuthProvider.PROVIDER_ID,
- signInMethod: TwitterAuthProvider.TWITTER_SIGN_IN_METHOD,
- oauthToken: token,
- oauthTokenSecret: secret
- });
- };
-
- TwitterAuthProvider.credentialFromResult = function (userCredential) {
- return TwitterAuthProvider.credentialFromTaggedObject(userCredential);
- };
-
- TwitterAuthProvider.credentialFromError = function (error) {
- return TwitterAuthProvider.credentialFromTaggedObject((error.customData || {}));
- };
- TwitterAuthProvider.credentialFromTaggedObject = function (_a) {
- var tokenResponse = _a._tokenResponse;
- if (!tokenResponse) {
- return null;
- }
- var _b = tokenResponse, oauthAccessToken = _b.oauthAccessToken, oauthTokenSecret = _b.oauthTokenSecret;
- if (!oauthAccessToken || !oauthTokenSecret) {
- return null;
- }
- try {
- return TwitterAuthProvider.credential(oauthAccessToken, oauthTokenSecret);
- }
- catch (_c) {
- return null;
- }
- };
-
- TwitterAuthProvider.TWITTER_SIGN_IN_METHOD = "twitter.com" ;
-
- TwitterAuthProvider.PROVIDER_ID = "twitter.com" ;
- return TwitterAuthProvider;
- }(BaseOAuthProvider));
- function signUp(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performSignInRequest(auth, "POST" , "/v1/accounts:signUp" , _addTidIfNecessary(auth, request))];
- });
- });
- }
- var UserCredentialImpl = (function () {
- function UserCredentialImpl(params) {
- this.user = params.user;
- this.providerId = params.providerId;
- this._tokenResponse = params._tokenResponse;
- this.operationType = params.operationType;
- }
- UserCredentialImpl._fromIdTokenResponse = function (auth, operationType, idTokenResponse, isAnonymous) {
- if (isAnonymous === void 0) { isAnonymous = false; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- var user, providerId, userCred;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , UserImpl._fromIdTokenResponse(auth, idTokenResponse, isAnonymous)];
- case 1:
- user = _a.sent();
- providerId = providerIdForResponse(idTokenResponse);
- userCred = new UserCredentialImpl({
- user: user,
- providerId: providerId,
- _tokenResponse: idTokenResponse,
- operationType: operationType
- });
- return [2 , userCred];
- }
- });
- });
- };
- UserCredentialImpl._forOperation = function (user, operationType, response) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var providerId;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , user._updateTokensIfNecessary(response, true)];
- case 1:
- _a.sent();
- providerId = providerIdForResponse(response);
- return [2 , new UserCredentialImpl({
- user: user,
- providerId: providerId,
- _tokenResponse: response,
- operationType: operationType
- })];
- }
- });
- });
- };
- return UserCredentialImpl;
- }());
- function providerIdForResponse(response) {
- if (response.providerId) {
- return response.providerId;
- }
- if ('phoneNumber' in response) {
- return "phone" ;
- }
- return null;
- }
- function signInAnonymously(auth) {
- var _a;
- return tslib.__awaiter(this, void 0, void 0, function () {
- var authInternal, response, userCredential;
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- authInternal = _castAuth(auth);
- return [4 , authInternal._initializationPromise];
- case 1:
- _b.sent();
- if ((_a = authInternal.currentUser) === null || _a === void 0 ? void 0 : _a.isAnonymous) {
-
- return [2 , new UserCredentialImpl({
- user: authInternal.currentUser,
- providerId: null,
- operationType: "signIn"
- })];
- }
- return [4 , signUp(authInternal, {
- returnSecureToken: true
- })];
- case 2:
- response = _b.sent();
- return [4 , UserCredentialImpl._fromIdTokenResponse(authInternal, "signIn" , response, true)];
- case 3:
- userCredential = _b.sent();
- return [4 , authInternal._updateCurrentUser(userCredential.user)];
- case 4:
- _b.sent();
- return [2 , userCredential];
- }
- });
- });
- }
- var MultiFactorError = (function (_super) {
- tslib.__extends(MultiFactorError, _super);
- function MultiFactorError(auth, error, operationType, user) {
- var _this = this;
- var _a;
- _this = _super.call(this, error.code, error.message) || this;
- _this.operationType = operationType;
- _this.user = user;
-
- Object.setPrototypeOf(_this, MultiFactorError.prototype);
- _this.customData = {
- appName: auth.name,
- tenantId: (_a = auth.tenantId) !== null && _a !== void 0 ? _a : undefined,
- _serverResponse: error.customData._serverResponse,
- operationType: operationType
- };
- return _this;
- }
- MultiFactorError._fromErrorAndOperation = function (auth, error, operationType, user) {
- return new MultiFactorError(auth, error, operationType, user);
- };
- return MultiFactorError;
- }(util.FirebaseError));
- function _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential, user) {
- var idTokenProvider = operationType === "reauthenticate"
- ? credential._getReauthenticationResolver(auth)
- : credential._getIdTokenResponse(auth);
- return idTokenProvider.catch(function (error) {
- if (error.code === "auth/".concat("multi-factor-auth-required" )) {
- throw MultiFactorError._fromErrorAndOperation(auth, error, operationType, user);
- }
- throw error;
- });
- }
- function providerDataAsNames(providerData) {
- return new Set(providerData
- .map(function (_a) {
- var providerId = _a.providerId;
- return providerId;
- })
- .filter(function (pid) { return !!pid; }));
- }
- function unlink(user, providerId) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var userInternal, providerUserInfo, _a, _b, providersLeft;
- var _c;
- return tslib.__generator(this, function (_d) {
- switch (_d.label) {
- case 0:
- userInternal = util.getModularInstance(user);
- return [4 , _assertLinkedStatus(true, userInternal, providerId)];
- case 1:
- _d.sent();
- _a = deleteLinkedAccounts;
- _b = [userInternal.auth];
- _c = {};
- return [4 , userInternal.getIdToken()];
- case 2: return [4 , _a.apply(void 0, _b.concat([(_c.idToken = _d.sent(),
- _c.deleteProvider = [providerId],
- _c)]))];
- case 3:
- providerUserInfo = (_d.sent()).providerUserInfo;
- providersLeft = providerDataAsNames(providerUserInfo || []);
- userInternal.providerData = userInternal.providerData.filter(function (pd) {
- return providersLeft.has(pd.providerId);
- });
- if (!providersLeft.has("phone" )) {
- userInternal.phoneNumber = null;
- }
- return [4 , userInternal.auth._persistUserIfCurrent(userInternal)];
- case 4:
- _d.sent();
- return [2 , userInternal];
- }
- });
- });
- }
- function _link(user, credential, bypassAuthState) {
- if (bypassAuthState === void 0) { bypassAuthState = false; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- var response, _a, _b, _c, _d, _e;
- return tslib.__generator(this, function (_f) {
- switch (_f.label) {
- case 0:
- _a = _logoutIfInvalidated;
- _b = [user];
- _d = (_c = credential)._linkToIdToken;
- _e = [user.auth];
- return [4 , user.getIdToken()];
- case 1: return [4 , _a.apply(void 0, _b.concat([_d.apply(_c, _e.concat([_f.sent()])),
- bypassAuthState]))];
- case 2:
- response = _f.sent();
- return [2 , UserCredentialImpl._forOperation(user, "link" , response)];
- }
- });
- });
- }
- function _assertLinkedStatus(expected, user, provider) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var providerIds, code;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , _reloadWithoutSaving(user)];
- case 1:
- _a.sent();
- providerIds = providerDataAsNames(user.providerData);
- code = expected === false
- ? "provider-already-linked"
- : "no-such-provider" ;
- _assert(providerIds.has(provider) === expected, user.auth, code);
- return [2 ];
- }
- });
- });
- }
- function _reauthenticate(user, credential, bypassAuthState) {
- if (bypassAuthState === void 0) { bypassAuthState = false; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- var auth, operationType, response, parsed, localId, e_1;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- auth = user.auth;
- operationType = "reauthenticate" ;
- _a.label = 1;
- case 1:
- _a.trys.push([1, 3, , 4]);
- return [4 , _logoutIfInvalidated(user, _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential, user), bypassAuthState)];
- case 2:
- response = _a.sent();
- _assert(response.idToken, auth, "internal-error" );
- parsed = _parseToken(response.idToken);
- _assert(parsed, auth, "internal-error" );
- localId = parsed.sub;
- _assert(user.uid === localId, auth, "user-mismatch" );
- return [2 , UserCredentialImpl._forOperation(user, operationType, response)];
- case 3:
- e_1 = _a.sent();
-
- if ((e_1 === null || e_1 === void 0 ? void 0 : e_1.code) === "auth/".concat("user-not-found" )) {
- _fail(auth, "user-mismatch" );
- }
- throw e_1;
- case 4: return [2 ];
- }
- });
- });
- }
- function _signInWithCredential(auth, credential, bypassAuthState) {
- if (bypassAuthState === void 0) { bypassAuthState = false; }
- return tslib.__awaiter(this, void 0, void 0, function () {
- var operationType, response, userCredential;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- operationType = "signIn" ;
- return [4 , _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential)];
- case 1:
- response = _a.sent();
- return [4 , UserCredentialImpl._fromIdTokenResponse(auth, operationType, response)];
- case 2:
- userCredential = _a.sent();
- if (!!bypassAuthState) return [3 , 4];
- return [4 , auth._updateCurrentUser(userCredential.user)];
- case 3:
- _a.sent();
- _a.label = 4;
- case 4: return [2 , userCredential];
- }
- });
- });
- }
- function signInWithCredential(auth, credential) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _signInWithCredential(_castAuth(auth), credential)];
- });
- });
- }
- function linkWithCredential(user, credential) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var userInternal;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- userInternal = util.getModularInstance(user);
- return [4 , _assertLinkedStatus(false, userInternal, credential.providerId)];
- case 1:
- _a.sent();
- return [2 , _link(userInternal, credential)];
- }
- });
- });
- }
- function reauthenticateWithCredential(user, credential) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _reauthenticate(util.getModularInstance(user), credential)];
- });
- });
- }
- function signInWithCustomToken$1(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performSignInRequest(auth, "POST" , "/v1/accounts:signInWithCustomToken" , _addTidIfNecessary(auth, request))];
- });
- });
- }
- function signInWithCustomToken(auth, customToken) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var authInternal, response, cred;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- authInternal = _castAuth(auth);
- return [4 , signInWithCustomToken$1(authInternal, {
- token: customToken,
- returnSecureToken: true
- })];
- case 1:
- response = _a.sent();
- return [4 , UserCredentialImpl._fromIdTokenResponse(authInternal, "signIn" , response)];
- case 2:
- cred = _a.sent();
- return [4 , authInternal._updateCurrentUser(cred.user)];
- case 3:
- _a.sent();
- return [2 , cred];
- }
- });
- });
- }
- var MultiFactorInfoImpl = (function () {
- function MultiFactorInfoImpl(factorId, response) {
- this.factorId = factorId;
- this.uid = response.mfaEnrollmentId;
- this.enrollmentTime = new Date(response.enrolledAt).toUTCString();
- this.displayName = response.displayName;
- }
- MultiFactorInfoImpl._fromServerResponse = function (auth, enrollment) {
- if ('phoneInfo' in enrollment) {
- return PhoneMultiFactorInfoImpl._fromServerResponse(auth, enrollment);
- }
- else if ('totpInfo' in enrollment) {
- return TotpMultiFactorInfoImpl._fromServerResponse(auth, enrollment);
- }
- return _fail(auth, "internal-error" );
- };
- return MultiFactorInfoImpl;
- }());
- var PhoneMultiFactorInfoImpl = (function (_super) {
- tslib.__extends(PhoneMultiFactorInfoImpl, _super);
- function PhoneMultiFactorInfoImpl(response) {
- var _this = _super.call(this, "phone" , response) || this;
- _this.phoneNumber = response.phoneInfo;
- return _this;
- }
- PhoneMultiFactorInfoImpl._fromServerResponse = function (_auth, enrollment) {
- return new PhoneMultiFactorInfoImpl(enrollment);
- };
- return PhoneMultiFactorInfoImpl;
- }(MultiFactorInfoImpl));
- var TotpMultiFactorInfoImpl = (function (_super) {
- tslib.__extends(TotpMultiFactorInfoImpl, _super);
- function TotpMultiFactorInfoImpl(response) {
- return _super.call(this, "totp" , response) || this;
- }
- TotpMultiFactorInfoImpl._fromServerResponse = function (_auth, enrollment) {
- return new TotpMultiFactorInfoImpl(enrollment);
- };
- return TotpMultiFactorInfoImpl;
- }(MultiFactorInfoImpl));
- function _setActionCodeSettingsOnRequest(auth, request, actionCodeSettings) {
- var _a;
- _assert(((_a = actionCodeSettings.url) === null || _a === void 0 ? void 0 : _a.length) > 0, auth, "invalid-continue-uri" );
- _assert(typeof actionCodeSettings.dynamicLinkDomain === 'undefined' ||
- actionCodeSettings.dynamicLinkDomain.length > 0, auth, "invalid-dynamic-link-domain" );
- request.continueUrl = actionCodeSettings.url;
- request.dynamicLinkDomain = actionCodeSettings.dynamicLinkDomain;
- request.canHandleCodeInApp = actionCodeSettings.handleCodeInApp;
- if (actionCodeSettings.iOS) {
- _assert(actionCodeSettings.iOS.bundleId.length > 0, auth, "missing-ios-bundle-id" );
- request.iOSBundleId = actionCodeSettings.iOS.bundleId;
- }
- if (actionCodeSettings.android) {
- _assert(actionCodeSettings.android.packageName.length > 0, auth, "missing-android-pkg-name" );
- request.androidInstallApp = actionCodeSettings.android.installApp;
- request.androidMinimumVersionCode =
- actionCodeSettings.android.minimumVersion;
- request.androidPackageName = actionCodeSettings.android.packageName;
- }
- }
- function sendPasswordResetEmail(auth, email, actionCodeSettings) {
- var _a;
- return tslib.__awaiter(this, void 0, void 0, function () {
- var authInternal, request, requestWithRecaptcha;
- var _this = this;
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- authInternal = _castAuth(auth);
- request = {
- requestType: "PASSWORD_RESET" ,
- email: email,
- clientType: "CLIENT_TYPE_WEB"
- };
- if (!((_a = authInternal._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.emailPasswordEnabled)) return [3 , 3];
- return [4 , injectRecaptchaFields(authInternal, request, "getOobCode" , true)];
- case 1:
- requestWithRecaptcha = _b.sent();
- if (actionCodeSettings) {
- _setActionCodeSettingsOnRequest(authInternal, requestWithRecaptcha, actionCodeSettings);
- }
- return [4 , sendPasswordResetEmail$1(authInternal, requestWithRecaptcha)];
- case 2:
- _b.sent();
- return [3 , 5];
- case 3:
- if (actionCodeSettings) {
- _setActionCodeSettingsOnRequest(authInternal, request, actionCodeSettings);
- }
- return [4 , sendPasswordResetEmail$1(authInternal, request)
- .catch(function (error) { return tslib.__awaiter(_this, void 0, void 0, function () {
- var requestWithRecaptcha;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (!(error.code === "auth/".concat("missing-recaptcha-token" ))) return [3 , 3];
- console.log('Password resets are protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the password reset flow.');
- return [4 , injectRecaptchaFields(authInternal, request, "getOobCode" , true)];
- case 1:
- requestWithRecaptcha = _a.sent();
- if (actionCodeSettings) {
- _setActionCodeSettingsOnRequest(authInternal, requestWithRecaptcha, actionCodeSettings);
- }
- return [4 , sendPasswordResetEmail$1(authInternal, requestWithRecaptcha)];
- case 2:
- _a.sent();
- return [3 , 4];
- case 3: return [2 , Promise.reject(error)];
- case 4: return [2 ];
- }
- });
- }); })];
- case 4:
- _b.sent();
- _b.label = 5;
- case 5: return [2 ];
- }
- });
- });
- }
- function confirmPasswordReset(auth, oobCode, newPassword) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , resetPassword(util.getModularInstance(auth), {
- oobCode: oobCode,
- newPassword: newPassword
- })];
- case 1:
- _a.sent();
- return [2 ];
- }
- });
- });
- }
- function applyActionCode(auth, oobCode) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , applyActionCode$1(util.getModularInstance(auth), { oobCode: oobCode })];
- case 1:
- _a.sent();
- return [2 ];
- }
- });
- });
- }
- function checkActionCode(auth, oobCode) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var authModular, response, operation, multiFactorInfo;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- authModular = util.getModularInstance(auth);
- return [4 , resetPassword(authModular, { oobCode: oobCode })];
- case 1:
- response = _a.sent();
- operation = response.requestType;
- _assert(operation, authModular, "internal-error" );
- switch (operation) {
- case "EMAIL_SIGNIN" :
- break;
- case "VERIFY_AND_CHANGE_EMAIL" :
- _assert(response.newEmail, authModular, "internal-error" );
- break;
- case "REVERT_SECOND_FACTOR_ADDITION" :
- _assert(response.mfaInfo, authModular, "internal-error" );
-
- default:
- _assert(response.email, authModular, "internal-error" );
- }
- multiFactorInfo = null;
- if (response.mfaInfo) {
- multiFactorInfo = MultiFactorInfoImpl._fromServerResponse(_castAuth(authModular), response.mfaInfo);
- }
- return [2 , {
- data: {
- email: (response.requestType === "VERIFY_AND_CHANGE_EMAIL"
- ? response.newEmail
- : response.email) || null,
- previousEmail: (response.requestType === "VERIFY_AND_CHANGE_EMAIL"
- ? response.email
- : response.newEmail) || null,
- multiFactorInfo: multiFactorInfo
- },
- operation: operation
- }];
- }
- });
- });
- }
- function verifyPasswordResetCode(auth, code) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var data;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 , checkActionCode(util.getModularInstance(auth), code)];
- case 1:
- data = (_a.sent()).data;
-
- return [2 , data.email];
- }
- });
- });
- }
- function createUserWithEmailAndPassword(auth, email, password) {
- var _a;
- return tslib.__awaiter(this, void 0, void 0, function () {
- var authInternal, request, signUpResponse, requestWithRecaptcha, response, userCredential;
- var _this = this;
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- authInternal = _castAuth(auth);
- request = {
- returnSecureToken: true,
- email: email,
- password: password,
- clientType: "CLIENT_TYPE_WEB"
- };
- if (!((_a = authInternal._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.emailPasswordEnabled)) return [3 , 2];
- return [4 , injectRecaptchaFields(authInternal, request, "signUpPassword" )];
- case 1:
- requestWithRecaptcha = _b.sent();
- signUpResponse = signUp(authInternal, requestWithRecaptcha);
- return [3 , 3];
- case 2:
- signUpResponse = signUp(authInternal, request).catch(function (error) { return tslib.__awaiter(_this, void 0, void 0, function () {
- var requestWithRecaptcha;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (!(error.code === "auth/".concat("missing-recaptcha-token" ))) return [3 , 2];
- console.log('Sign-up is protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the sign-up flow.');
- return [4 , injectRecaptchaFields(authInternal, request, "signUpPassword" )];
- case 1:
- requestWithRecaptcha = _a.sent();
- return [2 , signUp(authInternal, requestWithRecaptcha)];
- case 2: return [2 , Promise.reject(error)];
- }
- });
- }); });
- _b.label = 3;
- case 3: return [4 , signUpResponse.catch(function (error) {
- return Promise.reject(error);
- })];
- case 4:
- response = _b.sent();
- return [4 , UserCredentialImpl._fromIdTokenResponse(authInternal, "signIn" , response)];
- case 5:
- userCredential = _b.sent();
- return [4 , authInternal._updateCurrentUser(userCredential.user)];
- case 6:
- _b.sent();
- return [2 , userCredential];
- }
- });
- });
- }
- function signInWithEmailAndPassword(auth, email, password) {
- return signInWithCredential(util.getModularInstance(auth), EmailAuthProvider.credential(email, password));
- }
- function sendSignInLinkToEmail(auth, email, actionCodeSettings) {
- var _a;
- return tslib.__awaiter(this, void 0, void 0, function () {
- function setActionCodeSettings(request, actionCodeSettings) {
- _assert(actionCodeSettings.handleCodeInApp, authInternal, "argument-error" );
- if (actionCodeSettings) {
- _setActionCodeSettingsOnRequest(authInternal, request, actionCodeSettings);
- }
- }
- var authInternal, request, requestWithRecaptcha;
- var _this = this;
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- authInternal = _castAuth(auth);
- request = {
- requestType: "EMAIL_SIGNIN" ,
- email: email,
- clientType: "CLIENT_TYPE_WEB"
- };
- if (!((_a = authInternal._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.emailPasswordEnabled)) return [3 , 3];
- return [4 , injectRecaptchaFields(authInternal, request, "getOobCode" , true)];
- case 1:
- requestWithRecaptcha = _b.sent();
- setActionCodeSettings(requestWithRecaptcha, actionCodeSettings);
- return [4 , sendSignInLinkToEmail$1(authInternal, requestWithRecaptcha)];
- case 2:
- _b.sent();
- return [3 , 5];
- case 3:
- setActionCodeSettings(request, actionCodeSettings);
- return [4 , sendSignInLinkToEmail$1(authInternal, request)
- .catch(function (error) { return tslib.__awaiter(_this, void 0, void 0, function () {
- var requestWithRecaptcha;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (!(error.code === "auth/".concat("missing-recaptcha-token" ))) return [3 , 3];
- console.log('Email link sign-in is protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the sign-in flow.');
- return [4 , injectRecaptchaFields(authInternal, request, "getOobCode" , true)];
- case 1:
- requestWithRecaptcha = _a.sent();
- setActionCodeSettings(requestWithRecaptcha, actionCodeSettings);
- return [4 , sendSignInLinkToEmail$1(authInternal, requestWithRecaptcha)];
- case 2:
- _a.sent();
- return [3 , 4];
- case 3: return [2 , Promise.reject(error)];
- case 4: return [2 ];
- }
- });
- }); })];
- case 4:
- _b.sent();
- _b.label = 5;
- case 5: return [2 ];
- }
- });
- });
- }
- function isSignInWithEmailLink(auth, emailLink) {
- var actionCodeUrl = ActionCodeURL.parseLink(emailLink);
- return (actionCodeUrl === null || actionCodeUrl === void 0 ? void 0 : actionCodeUrl.operation) === "EMAIL_SIGNIN" ;
- }
- function signInWithEmailLink(auth, email, emailLink) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var authModular, credential;
- return tslib.__generator(this, function (_a) {
- authModular = util.getModularInstance(auth);
- credential = EmailAuthProvider.credentialWithLink(email, emailLink || _getCurrentUrl());
-
-
- _assert(credential._tenantId === (authModular.tenantId || null), authModular, "tenant-id-mismatch" );
- return [2 , signInWithCredential(authModular, credential)];
- });
- });
- }
- function createAuthUri(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performApiRequest(auth, "POST" , "/v1/accounts:createAuthUri" , _addTidIfNecessary(auth, request))];
- });
- });
- }
- function fetchSignInMethodsForEmail(auth, email) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var continueUri, request, signinMethods;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- continueUri = _isHttpOrHttps() ? _getCurrentUrl() : 'http://localhost';
- request = {
- identifier: email,
- continueUri: continueUri
- };
- return [4 , createAuthUri(util.getModularInstance(auth), request)];
- case 1:
- signinMethods = (_a.sent()).signinMethods;
- return [2 , signinMethods || []];
- }
- });
- });
- }
- function sendEmailVerification(user, actionCodeSettings) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var userInternal, idToken, request, email;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- userInternal = util.getModularInstance(user);
- return [4 , user.getIdToken()];
- case 1:
- idToken = _a.sent();
- request = {
- requestType: "VERIFY_EMAIL" ,
- idToken: idToken
- };
- if (actionCodeSettings) {
- _setActionCodeSettingsOnRequest(userInternal.auth, request, actionCodeSettings);
- }
- return [4 , sendEmailVerification$1(userInternal.auth, request)];
- case 2:
- email = (_a.sent()).email;
- if (!(email !== user.email)) return [3 , 4];
- return [4 , user.reload()];
- case 3:
- _a.sent();
- _a.label = 4;
- case 4: return [2 ];
- }
- });
- });
- }
- function verifyBeforeUpdateEmail(user, newEmail, actionCodeSettings) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var userInternal, idToken, request, email;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- userInternal = util.getModularInstance(user);
- return [4 , user.getIdToken()];
- case 1:
- idToken = _a.sent();
- request = {
- requestType: "VERIFY_AND_CHANGE_EMAIL" ,
- idToken: idToken,
- newEmail: newEmail
- };
- if (actionCodeSettings) {
- _setActionCodeSettingsOnRequest(userInternal.auth, request, actionCodeSettings);
- }
- return [4 , verifyAndChangeEmail(userInternal.auth, request)];
- case 2:
- email = (_a.sent()).email;
- if (!(email !== user.email)) return [3 , 4];
-
-
- return [4 , user.reload()];
- case 3:
-
-
- _a.sent();
- _a.label = 4;
- case 4: return [2 ];
- }
- });
- });
- }
- function updateProfile$1(auth, request) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , _performApiRequest(auth, "POST" , "/v1/accounts:update" , request)];
- });
- });
- }
- function updateProfile(user, _a) {
- var displayName = _a.displayName, photoUrl = _a.photoURL;
- return tslib.__awaiter(this, void 0, void 0, function () {
- var userInternal, idToken, profileRequest, response, passwordProvider;
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- if (displayName === undefined && photoUrl === undefined) {
- return [2 ];
- }
- userInternal = util.getModularInstance(user);
- return [4 , userInternal.getIdToken()];
- case 1:
- idToken = _b.sent();
- profileRequest = {
- idToken: idToken,
- displayName: displayName,
- photoUrl: photoUrl,
- returnSecureToken: true
- };
- return [4 , _logoutIfInvalidated(userInternal, updateProfile$1(userInternal.auth, profileRequest))];
- case 2:
- response = _b.sent();
- userInternal.displayName = response.displayName || null;
- userInternal.photoURL = response.photoUrl || null;
- passwordProvider = userInternal.providerData.find(function (_a) {
- var providerId = _a.providerId;
- return providerId === "password" ;
- });
- if (passwordProvider) {
- passwordProvider.displayName = userInternal.displayName;
- passwordProvider.photoURL = userInternal.photoURL;
- }
- return [4 , userInternal._updateTokensIfNecessary(response)];
- case 3:
- _b.sent();
- return [2 ];
- }
- });
- });
- }
- function updateEmail(user, newEmail) {
- return updateEmailOrPassword(util.getModularInstance(user), newEmail, null);
- }
- function updatePassword(user, newPassword) {
- return updateEmailOrPassword(util.getModularInstance(user), null, newPassword);
- }
- function updateEmailOrPassword(user, email, password) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var auth, idToken, request, response;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- auth = user.auth;
- return [4 , user.getIdToken()];
- case 1:
- idToken = _a.sent();
- request = {
- idToken: idToken,
- returnSecureToken: true
- };
- if (email) {
- request.email = email;
- }
- if (password) {
- request.password = password;
- }
- return [4 , _logoutIfInvalidated(user, updateEmailPassword(auth, request))];
- case 2:
- response = _a.sent();
- return [4 , user._updateTokensIfNecessary(response, true)];
- case 3:
- _a.sent();
- return [2 ];
- }
- });
- });
- }
- function _fromIdTokenResponse(idTokenResponse) {
- var _a, _b;
- if (!idTokenResponse) {
- return null;
- }
- var providerId = idTokenResponse.providerId;
- var profile = idTokenResponse.rawUserInfo
- ? JSON.parse(idTokenResponse.rawUserInfo)
- : {};
- var isNewUser = idTokenResponse.isNewUser ||
- idTokenResponse.kind === "identitytoolkit#SignupNewUserResponse" ;
- if (!providerId && (idTokenResponse === null || idTokenResponse === void 0 ? void 0 : idTokenResponse.idToken)) {
- var signInProvider = (_b = (_a = _parseToken(idTokenResponse.idToken)) === null || _a === void 0 ? void 0 : _a.firebase) === null || _b === void 0 ? void 0 : _b['sign_in_provider'];
- if (signInProvider) {
- var filteredProviderId = signInProvider !== "anonymous" &&
- signInProvider !== "custom"
- ? signInProvider
- : null;
-
- return new GenericAdditionalUserInfo(isNewUser, filteredProviderId);
- }
- }
- if (!providerId) {
- return null;
- }
- switch (providerId) {
- case "facebook.com" :
- return new FacebookAdditionalUserInfo(isNewUser, profile);
- case "github.com" :
- return new GithubAdditionalUserInfo(isNewUser, profile);
- case "google.com" :
- return new GoogleAdditionalUserInfo(isNewUser, profile);
- case "twitter.com" :
- return new TwitterAdditionalUserInfo(isNewUser, profile, idTokenResponse.screenName || null);
- case "custom" :
- case "anonymous" :
- return new GenericAdditionalUserInfo(isNewUser, null);
- default:
- return new GenericAdditionalUserInfo(isNewUser, providerId, profile);
- }
- }
- var GenericAdditionalUserInfo = (function () {
- function GenericAdditionalUserInfo(isNewUser, providerId, profile) {
- if (profile === void 0) { profile = {}; }
- this.isNewUser = isNewUser;
- this.providerId = providerId;
- this.profile = profile;
- }
- return GenericAdditionalUserInfo;
- }());
- var FederatedAdditionalUserInfoWithUsername = (function (_super) {
- tslib.__extends(FederatedAdditionalUserInfoWithUsername, _super);
- function FederatedAdditionalUserInfoWithUsername(isNewUser, providerId, profile, username) {
- var _this = _super.call(this, isNewUser, providerId, profile) || this;
- _this.username = username;
- return _this;
- }
- return FederatedAdditionalUserInfoWithUsername;
- }(GenericAdditionalUserInfo));
- var FacebookAdditionalUserInfo = (function (_super) {
- tslib.__extends(FacebookAdditionalUserInfo, _super);
- function FacebookAdditionalUserInfo(isNewUser, profile) {
- return _super.call(this, isNewUser, "facebook.com" , profile) || this;
- }
- return FacebookAdditionalUserInfo;
- }(GenericAdditionalUserInfo));
- var GithubAdditionalUserInfo = (function (_super) {
- tslib.__extends(GithubAdditionalUserInfo, _super);
- function GithubAdditionalUserInfo(isNewUser, profile) {
- return _super.call(this, isNewUser, "github.com" , profile, typeof (profile === null || profile === void 0 ? void 0 : profile.login) === 'string' ? profile === null || profile === void 0 ? void 0 : profile.login : null) || this;
- }
- return GithubAdditionalUserInfo;
- }(FederatedAdditionalUserInfoWithUsername));
- var GoogleAdditionalUserInfo = (function (_super) {
- tslib.__extends(GoogleAdditionalUserInfo, _super);
- function GoogleAdditionalUserInfo(isNewUser, profile) {
- return _super.call(this, isNewUser, "google.com" , profile) || this;
- }
- return GoogleAdditionalUserInfo;
- }(GenericAdditionalUserInfo));
- var TwitterAdditionalUserInfo = (function (_super) {
- tslib.__extends(TwitterAdditionalUserInfo, _super);
- function TwitterAdditionalUserInfo(isNewUser, profile, screenName) {
- return _super.call(this, isNewUser, "twitter.com" , profile, screenName) || this;
- }
- return TwitterAdditionalUserInfo;
- }(FederatedAdditionalUserInfoWithUsername));
- function getAdditionalUserInfo(userCredential) {
- var _a = userCredential, user = _a.user, _tokenResponse = _a._tokenResponse;
- if (user.isAnonymous && !_tokenResponse) {
-
-
- return {
- providerId: null,
- isNewUser: false,
- profile: null
- };
- }
- return _fromIdTokenResponse(_tokenResponse);
- }
- function setPersistence(auth, persistence) {
- return util.getModularInstance(auth).setPersistence(persistence);
- }
- function initializeRecaptchaConfig(auth) {
- var authInternal = _castAuth(auth);
- return authInternal.initializeRecaptchaConfig();
- }
- function onIdTokenChanged(auth, nextOrObserver, error, completed) {
- return util.getModularInstance(auth).onIdTokenChanged(nextOrObserver, error, completed);
- }
- function beforeAuthStateChanged(auth, callback, onAbort) {
- return util.getModularInstance(auth).beforeAuthStateChanged(callback, onAbort);
- }
- function onAuthStateChanged(auth, nextOrObserver, error, completed) {
- return util.getModularInstance(auth).onAuthStateChanged(nextOrObserver, error, completed);
- }
- function useDeviceLanguage(auth) {
- util.getModularInstance(auth).useDeviceLanguage();
- }
- function updateCurrentUser(auth, user) {
- return util.getModularInstance(auth).updateCurrentUser(user);
- }
- function signOut(auth) {
- return util.getModularInstance(auth).signOut();
- }
- function deleteUser(user) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- return [2 , util.getModularInstance(user).delete()];
- });
- });
- }
- var MultiFactorSessionImpl = (function () {
- function MultiFactorSessionImpl(type, credential, auth) {
- this.type = type;
- this.credential = credential;
- this.auth = auth;
- }
- MultiFactorSessionImpl._fromIdtoken = function (idToken, auth) {
- return new MultiFactorSessionImpl("enroll" , idToken, auth);
- };
- MultiFactorSessionImpl._fromMfaPendingCredential = function (mfaPendingCredential) {
- return new MultiFactorSessionImpl("signin" , mfaPendingCredential);
- };
- MultiFactorSessionImpl.prototype.toJSON = function () {
- var _a;
- var key = this.type === "enroll"
- ? 'idToken'
- : 'pendingCredential';
- return {
- multiFactorSession: (_a = {},
- _a[key] = this.credential,
- _a)
- };
- };
- MultiFactorSessionImpl.fromJSON = function (obj) {
- var _a, _b;
- if (obj === null || obj === void 0 ? void 0 : obj.multiFactorSession) {
- if ((_a = obj.multiFactorSession) === null || _a === void 0 ? void 0 : _a.pendingCredential) {
- return MultiFactorSessionImpl._fromMfaPendingCredential(obj.multiFactorSession.pendingCredential);
- }
- else if ((_b = obj.multiFactorSession) === null || _b === void 0 ? void 0 : _b.idToken) {
- return MultiFactorSessionImpl._fromIdtoken(obj.multiFactorSession.idToken);
- }
- }
- return null;
- };
- return MultiFactorSessionImpl;
- }());
- var MultiFactorResolverImpl = (function () {
- function MultiFactorResolverImpl(session, hints, signInResolver) {
- this.session = session;
- this.hints = hints;
- this.signInResolver = signInResolver;
- }
-
- MultiFactorResolverImpl._fromError = function (authExtern, error) {
- var _this = this;
- var auth = _castAuth(authExtern);
- var serverResponse = error.customData._serverResponse;
- var hints = (serverResponse.mfaInfo || []).map(function (enrollment) {
- return MultiFactorInfoImpl._fromServerResponse(auth, enrollment);
- });
- _assert(serverResponse.mfaPendingCredential, auth, "internal-error" );
- var session = MultiFactorSessionImpl._fromMfaPendingCredential(serverResponse.mfaPendingCredential);
- return new MultiFactorResolverImpl(session, hints, function (assertion) { return tslib.__awaiter(_this, void 0, void 0, function () {
- var mfaResponse, idTokenResponse, _a, userCredential;
- return tslib.__generator(this, function (_b) {
- switch (_b.label) {
- case 0: return [4 , assertion._process(auth, session)];
- case 1:
- mfaResponse = _b.sent();
-
- delete serverResponse.mfaInfo;
- delete serverResponse.mfaPendingCredential;
- idTokenResponse = tslib.__assign(tslib.__assign({}, serverResponse), { idToken: mfaResponse.idToken, refreshToken: mfaResponse.refreshToken });
- _a = error.operationType;
- switch (_a) {
- case "signIn" : return [3 , 2];
- case "reauthenticate" : return [3 , 5];
- }
- return [3 , 6];
- case 2: return [4 , UserCredentialImpl._fromIdTokenResponse(auth, error.operationType, idTokenResponse)];
- case 3:
- userCredential = _b.sent();
- return [4 , auth._updateCurrentUser(userCredential.user)];
- case 4:
- _b.sent();
- return [2 , userCredential];
- case 5:
- _assert(error.user, auth, "internal-error" );
- return [2 , UserCredentialImpl._forOperation(error.user, error.operationType, idTokenResponse)];
- case 6:
- _fail(auth, "internal-error" );
- _b.label = 7;
- case 7: return [2 ];
- }
- });
- }); });
- };
- MultiFactorResolverImpl.prototype.resolveSignIn = function (assertionExtern) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var assertion;
- return tslib.__generator(this, function (_a) {
- assertion = assertionExtern;
- return [2 , this.signInResolver(assertion)];
- });
- });
- };
- return MultiFactorResolverImpl;
- }());
- function getMultiFactorResolver(auth, error) {
- var _a;
- var authModular = util.getModularInstance(auth);
- var errorInternal = error;
- _assert(error.customData.operationType, authModular, "argument-error" );
- _assert((_a = errorInternal.customData._serverResponse) === null || _a === void 0 ? void 0 : _a.mfaPendingCredential, authModular, "argument-error" );
- return MultiFactorResolverImpl._fromError(authModular, errorInternal);
- }
- function startEnrollTotpMfa(auth, request) {
- return _performApiRequest(auth, "POST" , "/v2/accounts/mfaEnrollment:start" , _addTidIfNecessary(auth, request));
- }
- function finalizeEnrollTotpMfa(auth, request) {
- return _performApiRequest(auth, "POST" , "/v2/accounts/mfaEnrollment:finalize" , _addTidIfNecessary(auth, request));
- }
- function withdrawMfa(auth, request) {
- return _performApiRequest(auth, "POST" , "/v2/accounts/mfaEnrollment:withdraw" , _addTidIfNecessary(auth, request));
- }
- var MultiFactorUserImpl = (function () {
- function MultiFactorUserImpl(user) {
- var _this = this;
- this.user = user;
- this.enrolledFactors = [];
- user._onReload(function (userInfo) {
- if (userInfo.mfaInfo) {
- _this.enrolledFactors = userInfo.mfaInfo.map(function (enrollment) {
- return MultiFactorInfoImpl._fromServerResponse(user.auth, enrollment);
- });
- }
- });
- }
- MultiFactorUserImpl._fromUser = function (user) {
- return new MultiFactorUserImpl(user);
- };
- MultiFactorUserImpl.prototype.getSession = function () {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var _a, _b;
- return tslib.__generator(this, function (_c) {
- switch (_c.label) {
- case 0:
- _b = (_a = MultiFactorSessionImpl)._fromIdtoken;
- return [4 , this.user.getIdToken()];
- case 1: return [2 , _b.apply(_a, [_c.sent(), this.user.auth])];
- }
- });
- });
- };
- MultiFactorUserImpl.prototype.enroll = function (assertionExtern, displayName) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var assertion, session, finalizeMfaResponse;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- assertion = assertionExtern;
- return [4 , this.getSession()];
- case 1:
- session = (_a.sent());
- return [4 , _logoutIfInvalidated(this.user, assertion._process(this.user.auth, session, displayName))];
- case 2:
- finalizeMfaResponse = _a.sent();
-
-
- return [4 , this.user._updateTokensIfNecessary(finalizeMfaResponse)];
- case 3:
-
-
- _a.sent();
-
-
-
- return [2 , this.user.reload()];
- }
- });
- });
- };
- MultiFactorUserImpl.prototype.unenroll = function (infoOrUid) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var mfaEnrollmentId, idToken, idTokenResponse, e_1;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- mfaEnrollmentId = typeof infoOrUid === 'string' ? infoOrUid : infoOrUid.uid;
- return [4 , this.user.getIdToken()];
- case 1:
- idToken = _a.sent();
- _a.label = 2;
- case 2:
- _a.trys.push([2, 6, , 7]);
- return [4 , _logoutIfInvalidated(this.user, withdrawMfa(this.user.auth, {
- idToken: idToken,
- mfaEnrollmentId: mfaEnrollmentId
- }))];
- case 3:
- idTokenResponse = _a.sent();
-
- this.enrolledFactors = this.enrolledFactors.filter(function (_a) {
- var uid = _a.uid;
- return uid !== mfaEnrollmentId;
- });
-
-
-
-
- return [4 , this.user._updateTokensIfNecessary(idTokenResponse)];
- case 4:
-
-
-
-
- _a.sent();
- return [4 , this.user.reload()];
- case 5:
- _a.sent();
- return [3 , 7];
- case 6:
- e_1 = _a.sent();
- throw e_1;
- case 7: return [2 ];
- }
- });
- });
- };
- return MultiFactorUserImpl;
- }());
- var multiFactorUserCache = new WeakMap();
- function multiFactor(user) {
- var userModular = util.getModularInstance(user);
- if (!multiFactorUserCache.has(userModular)) {
- multiFactorUserCache.set(userModular, MultiFactorUserImpl._fromUser(userModular));
- }
- return multiFactorUserCache.get(userModular);
- }
- var name = "@firebase/auth";
- var version = "0.23.2";
- var AuthInterop = (function () {
- function AuthInterop(auth) {
- this.auth = auth;
- this.internalListeners = new Map();
- }
- AuthInterop.prototype.getUid = function () {
- var _a;
- this.assertAuthConfigured();
- return ((_a = this.auth.currentUser) === null || _a === void 0 ? void 0 : _a.uid) || null;
- };
- AuthInterop.prototype.getToken = function (forceRefresh) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var accessToken;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- this.assertAuthConfigured();
- return [4 , this.auth._initializationPromise];
- case 1:
- _a.sent();
- if (!this.auth.currentUser) {
- return [2 , null];
- }
- return [4 , this.auth.currentUser.getIdToken(forceRefresh)];
- case 2:
- accessToken = _a.sent();
- return [2 , { accessToken: accessToken }];
- }
- });
- });
- };
- AuthInterop.prototype.addAuthTokenListener = function (listener) {
- this.assertAuthConfigured();
- if (this.internalListeners.has(listener)) {
- return;
- }
- var unsubscribe = this.auth.onIdTokenChanged(function (user) {
- listener((user === null || user === void 0 ? void 0 : user.stsTokenManager.accessToken) || null);
- });
- this.internalListeners.set(listener, unsubscribe);
- this.updateProactiveRefresh();
- };
- AuthInterop.prototype.removeAuthTokenListener = function (listener) {
- this.assertAuthConfigured();
- var unsubscribe = this.internalListeners.get(listener);
- if (!unsubscribe) {
- return;
- }
- this.internalListeners.delete(listener);
- unsubscribe();
- this.updateProactiveRefresh();
- };
- AuthInterop.prototype.assertAuthConfigured = function () {
- _assert(this.auth._initializationPromise, "dependent-sdk-initialized-before-auth" );
- };
- AuthInterop.prototype.updateProactiveRefresh = function () {
- if (this.internalListeners.size > 0) {
- this.auth._startProactiveRefresh();
- }
- else {
- this.auth._stopProactiveRefresh();
- }
- };
- return AuthInterop;
- }());
- function getVersionForPlatform(clientPlatform) {
- switch (clientPlatform) {
- case "Node" :
- return 'node';
- case "ReactNative" :
- return 'rn';
- case "Worker" :
- return 'webworker';
- case "Cordova" :
- return 'cordova';
- default:
- return undefined;
- }
- }
- function registerAuth(clientPlatform) {
- app._registerComponent(new component.Component("auth" , function (container, _a) {
- var deps = _a.options;
- var app = container.getProvider('app').getImmediate();
- var heartbeatServiceProvider = container.getProvider('heartbeat');
- var appCheckServiceProvider = container.getProvider('app-check-internal');
- var _b = app.options, apiKey = _b.apiKey, authDomain = _b.authDomain;
- _assert(apiKey && !apiKey.includes(':'), "invalid-api-key" , { appName: app.name });
- var config = {
- apiKey: apiKey,
- authDomain: authDomain,
- clientPlatform: clientPlatform,
- apiHost: "identitytoolkit.googleapis.com" ,
- tokenApiHost: "securetoken.googleapis.com" ,
- apiScheme: "https" ,
- sdkClientVersion: _getClientVersion(clientPlatform)
- };
- var authInstance = new AuthImpl(app, heartbeatServiceProvider, appCheckServiceProvider, config);
- _initializeAuthInstance(authInstance, deps);
- return authInstance;
- }, "PUBLIC" )
-
- .setInstantiationMode("EXPLICIT" )
-
- .setInstanceCreatedCallback(function (container, _instanceIdentifier, _instance) {
- var authInternalProvider = container.getProvider("auth-internal" );
- authInternalProvider.initialize();
- }));
- app._registerComponent(new component.Component("auth-internal" , function (container) {
- var auth = _castAuth(container.getProvider("auth" ).getImmediate());
- return (function (auth) { return new AuthInterop(auth); })(auth);
- }, "PRIVATE" ).setInstantiationMode("EXPLICIT" ));
- app.registerVersion(name, version, getVersionForPlatform(clientPlatform));
-
- app.registerVersion(name, version, 'cjs5');
- }
- FetchProvider.initialize(fetchImpl__namespace.default, fetchImpl__namespace.Headers, fetchImpl__namespace.Response);
- function getAuth(app$1) {
- if (app$1 === void 0) { app$1 = app.getApp(); }
- var provider = app._getProvider(app$1, 'auth');
- if (provider.isInitialized()) {
- return provider.getImmediate();
- }
- var auth = initializeAuth(app$1);
- var authEmulatorHost = util.getDefaultEmulatorHost('auth');
- if (authEmulatorHost) {
- connectAuthEmulator(auth, "http://".concat(authEmulatorHost));
- }
- return auth;
- }
- registerAuth("Node" );
- var NOT_AVAILABLE_ERROR = _createError("operation-not-supported-in-this-environment" );
- function fail() {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- throw NOT_AVAILABLE_ERROR;
- });
- });
- }
- var FailClass = (function () {
- function FailClass() {
- throw NOT_AVAILABLE_ERROR;
- }
- return FailClass;
- }());
- var browserLocalPersistence = inMemoryPersistence;
- var browserSessionPersistence = inMemoryPersistence;
- var indexedDBLocalPersistence = inMemoryPersistence;
- var browserPopupRedirectResolver = NOT_AVAILABLE_ERROR;
- var PhoneAuthProvider = FailClass;
- var signInWithPhoneNumber = fail;
- var linkWithPhoneNumber = fail;
- var reauthenticateWithPhoneNumber = fail;
- var updatePhoneNumber = fail;
- var signInWithPopup = fail;
- var linkWithPopup = fail;
- var reauthenticateWithPopup = fail;
- var signInWithRedirect = fail;
- var linkWithRedirect = fail;
- var reauthenticateWithRedirect = fail;
- var getRedirectResult = fail;
- var RecaptchaVerifier = FailClass;
- var PhoneMultiFactorGenerator = (function () {
- function PhoneMultiFactorGenerator() {
- }
- PhoneMultiFactorGenerator.assertion = function () {
- throw NOT_AVAILABLE_ERROR;
- };
- return PhoneMultiFactorGenerator;
- }());
- AuthImpl.prototype.setPersistence = function () { return tslib.__awaiter(void 0, void 0, void 0, function () { return tslib.__generator(this, function (_a) {
- return [2 ];
- }); }); };
- function finalizeSignInTotpMfa(auth, request) {
- return _performApiRequest(auth, "POST" , "/v2/accounts/mfaSignIn:finalize" , _addTidIfNecessary(auth, request));
- }
- var MultiFactorAssertionImpl = (function () {
- function MultiFactorAssertionImpl(factorId) {
- this.factorId = factorId;
- }
- MultiFactorAssertionImpl.prototype._process = function (auth, session, displayName) {
- switch (session.type) {
- case "enroll" :
- return this._finalizeEnroll(auth, session.credential, displayName);
- case "signin" :
- return this._finalizeSignIn(auth, session.credential);
- default:
- return debugFail('unexpected MultiFactorSessionType');
- }
- };
- return MultiFactorAssertionImpl;
- }());
- var TotpMultiFactorGenerator = (function () {
- function TotpMultiFactorGenerator() {
- }
-
- TotpMultiFactorGenerator.assertionForEnrollment = function (secret, oneTimePassword) {
- return TotpMultiFactorAssertionImpl._fromSecret(secret, oneTimePassword);
- };
-
- TotpMultiFactorGenerator.assertionForSignIn = function (enrollmentId, oneTimePassword) {
- return TotpMultiFactorAssertionImpl._fromEnrollmentId(enrollmentId, oneTimePassword);
- };
-
- TotpMultiFactorGenerator.generateSecret = function (session) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var mfaSession, response;
- return tslib.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- mfaSession = session;
- _assert(typeof mfaSession.auth !== 'undefined', "internal-error" );
- return [4 , startEnrollTotpMfa(mfaSession.auth, {
- idToken: mfaSession.credential,
- totpEnrollmentInfo: {}
- })];
- case 1:
- response = _a.sent();
- return [2 , TotpSecret._fromStartTotpMfaEnrollmentResponse(response, mfaSession.auth)];
- }
- });
- });
- };
-
- TotpMultiFactorGenerator.FACTOR_ID = "totp" ;
- return TotpMultiFactorGenerator;
- }());
- var TotpMultiFactorAssertionImpl = (function (_super) {
- tslib.__extends(TotpMultiFactorAssertionImpl, _super);
- function TotpMultiFactorAssertionImpl(otp, enrollmentId, secret) {
- var _this = _super.call(this, "totp" ) || this;
- _this.otp = otp;
- _this.enrollmentId = enrollmentId;
- _this.secret = secret;
- return _this;
- }
-
- TotpMultiFactorAssertionImpl._fromSecret = function (secret, otp) {
- return new TotpMultiFactorAssertionImpl(otp, undefined, secret);
- };
-
- TotpMultiFactorAssertionImpl._fromEnrollmentId = function (enrollmentId, otp) {
- return new TotpMultiFactorAssertionImpl(otp, enrollmentId);
- };
-
- TotpMultiFactorAssertionImpl.prototype._finalizeEnroll = function (auth, idToken, displayName) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- return tslib.__generator(this, function (_a) {
- _assert(typeof this.secret !== 'undefined', auth, "argument-error" );
- return [2 , finalizeEnrollTotpMfa(auth, {
- idToken: idToken,
- displayName: displayName,
- totpVerificationInfo: this.secret._makeTotpVerificationInfo(this.otp)
- })];
- });
- });
- };
-
- TotpMultiFactorAssertionImpl.prototype._finalizeSignIn = function (auth, mfaPendingCredential) {
- return tslib.__awaiter(this, void 0, void 0, function () {
- var totpVerificationInfo;
- return tslib.__generator(this, function (_a) {
- _assert(this.enrollmentId !== undefined && this.otp !== undefined, auth, "argument-error" );
- totpVerificationInfo = { verificationCode: this.otp };
- return [2 , finalizeSignInTotpMfa(auth, {
- mfaPendingCredential: mfaPendingCredential,
- mfaEnrollmentId: this.enrollmentId,
- totpVerificationInfo: totpVerificationInfo
- })];
- });
- });
- };
- return TotpMultiFactorAssertionImpl;
- }(MultiFactorAssertionImpl));
- var TotpSecret = (function () {
-
- function TotpSecret(secretKey, hashingAlgorithm, codeLength, codeIntervalSeconds, enrollmentCompletionDeadline, sessionInfo, auth) {
- this.sessionInfo = sessionInfo;
- this.auth = auth;
- this.secretKey = secretKey;
- this.hashingAlgorithm = hashingAlgorithm;
- this.codeLength = codeLength;
- this.codeIntervalSeconds = codeIntervalSeconds;
- this.enrollmentCompletionDeadline = enrollmentCompletionDeadline;
- }
-
- TotpSecret._fromStartTotpMfaEnrollmentResponse = function (response, auth) {
- return new TotpSecret(response.totpSessionInfo.sharedSecretKey, response.totpSessionInfo.hashingAlgorithm, response.totpSessionInfo.verificationCodeLength, response.totpSessionInfo.periodSec, new Date(response.totpSessionInfo.finalizeEnrollmentTime).toUTCString(), response.totpSessionInfo.sessionInfo, auth);
- };
-
- TotpSecret.prototype._makeTotpVerificationInfo = function (otp) {
- return { sessionInfo: this.sessionInfo, verificationCode: otp };
- };
-
- TotpSecret.prototype.generateQrCodeUrl = function (accountName, issuer) {
- var _a;
- var useDefaults = false;
- if (_isEmptyString(accountName) || _isEmptyString(issuer)) {
- useDefaults = true;
- }
- if (useDefaults) {
- if (_isEmptyString(accountName)) {
- accountName = ((_a = this.auth.currentUser) === null || _a === void 0 ? void 0 : _a.email) || 'unknownuser';
- }
- if (_isEmptyString(issuer)) {
- issuer = this.auth.name;
- }
- }
- return "otpauth://totp/".concat(issuer, ":").concat(accountName, "?secret=").concat(this.secretKey, "&issuer=").concat(issuer, "&algorithm=").concat(this.hashingAlgorithm, "&digits=").concat(this.codeLength);
- };
- return TotpSecret;
- }());
- function _isEmptyString(input) {
- return typeof input === 'undefined' || (input === null || input === void 0 ? void 0 : input.length) === 0;
- }
- exports.AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY = AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY;
- exports.ActionCodeOperation = ActionCodeOperation;
- exports.ActionCodeURL = ActionCodeURL;
- exports.AuthCredential = AuthCredential;
- exports.AuthImpl = AuthImpl;
- exports.BaseOAuthProvider = BaseOAuthProvider;
- exports.EmailAuthCredential = EmailAuthCredential;
- exports.EmailAuthProvider = EmailAuthProvider;
- exports.FacebookAuthProvider = FacebookAuthProvider;
- exports.FactorId = FactorId;
- exports.FederatedAuthProvider = FederatedAuthProvider;
- exports.FetchProvider = FetchProvider;
- exports.GithubAuthProvider = GithubAuthProvider;
- exports.GoogleAuthProvider = GoogleAuthProvider;
- exports.OAuthCredential = OAuthCredential;
- exports.OAuthProvider = OAuthProvider;
- exports.OperationType = OperationType;
- exports.PhoneAuthCredential = PhoneAuthCredential;
- exports.PhoneAuthProvider = PhoneAuthProvider;
- exports.PhoneMultiFactorGenerator = PhoneMultiFactorGenerator;
- exports.ProviderId = ProviderId;
- exports.RecaptchaVerifier = RecaptchaVerifier;
- exports.SAMLAuthCredential = SAMLAuthCredential;
- exports.SAMLAuthProvider = SAMLAuthProvider;
- exports.SignInMethod = SignInMethod;
- exports.TotpMultiFactorGenerator = TotpMultiFactorGenerator;
- exports.TotpSecret = TotpSecret;
- exports.TwitterAuthProvider = TwitterAuthProvider;
- exports.UserImpl = UserImpl;
- exports._assert = _assert;
- exports._castAuth = _castAuth;
- exports._createError = _createError;
- exports._emulatorUrl = _emulatorUrl;
- exports._fail = _fail;
- exports._getClientVersion = _getClientVersion;
- exports._getInstance = _getInstance;
- exports._isAndroid = _isAndroid;
- exports._isIE10 = _isIE10;
- exports._isIOS = _isIOS;
- exports._isIOS7Or8 = _isIOS7Or8;
- exports._isIframe = _isIframe;
- exports._isMobileBrowser = _isMobileBrowser;
- exports._isSafari = _isSafari;
- exports._link = _link;
- exports._performApiRequest = _performApiRequest;
- exports._persistenceKeyName = _persistenceKeyName;
- exports._reauthenticate = _reauthenticate;
- exports._signInWithCredential = _signInWithCredential;
- exports.applyActionCode = applyActionCode;
- exports.beforeAuthStateChanged = beforeAuthStateChanged;
- exports.browserLocalPersistence = browserLocalPersistence;
- exports.browserPopupRedirectResolver = browserPopupRedirectResolver;
- exports.browserSessionPersistence = browserSessionPersistence;
- exports.checkActionCode = checkActionCode;
- exports.confirmPasswordReset = confirmPasswordReset;
- exports.connectAuthEmulator = connectAuthEmulator;
- exports.createUserWithEmailAndPassword = createUserWithEmailAndPassword;
- exports.debugAssert = debugAssert;
- exports.debugErrorMap = debugErrorMap;
- exports.deleteUser = deleteUser;
- exports.fetchSignInMethodsForEmail = fetchSignInMethodsForEmail;
- exports.getAdditionalUserInfo = getAdditionalUserInfo;
- exports.getAuth = getAuth;
- exports.getIdToken = getIdToken;
- exports.getIdTokenResult = getIdTokenResult;
- exports.getMultiFactorResolver = getMultiFactorResolver;
- exports.getRedirectResult = getRedirectResult;
- exports.inMemoryPersistence = inMemoryPersistence;
- exports.indexedDBLocalPersistence = indexedDBLocalPersistence;
- exports.initializeAuth = initializeAuth;
- exports.initializeRecaptchaConfig = initializeRecaptchaConfig;
- exports.isSignInWithEmailLink = isSignInWithEmailLink;
- exports.linkWithCredential = linkWithCredential;
- exports.linkWithPhoneNumber = linkWithPhoneNumber;
- exports.linkWithPopup = linkWithPopup;
- exports.linkWithRedirect = linkWithRedirect;
- exports.multiFactor = multiFactor;
- exports.onAuthStateChanged = onAuthStateChanged;
- exports.onIdTokenChanged = onIdTokenChanged;
- exports.parseActionCodeURL = parseActionCodeURL;
- exports.prodErrorMap = prodErrorMap;
- exports.reauthenticateWithCredential = reauthenticateWithCredential;
- exports.reauthenticateWithPhoneNumber = reauthenticateWithPhoneNumber;
- exports.reauthenticateWithPopup = reauthenticateWithPopup;
- exports.reauthenticateWithRedirect = reauthenticateWithRedirect;
- exports.reload = reload;
- exports.sendEmailVerification = sendEmailVerification;
- exports.sendPasswordResetEmail = sendPasswordResetEmail;
- exports.sendSignInLinkToEmail = sendSignInLinkToEmail;
- exports.setPersistence = setPersistence;
- exports.signInAnonymously = signInAnonymously;
- exports.signInWithCredential = signInWithCredential;
- exports.signInWithCustomToken = signInWithCustomToken;
- exports.signInWithEmailAndPassword = signInWithEmailAndPassword;
- exports.signInWithEmailLink = signInWithEmailLink;
- exports.signInWithIdp = signInWithIdp;
- exports.signInWithPhoneNumber = signInWithPhoneNumber;
- exports.signInWithPopup = signInWithPopup;
- exports.signInWithRedirect = signInWithRedirect;
- exports.signOut = signOut;
- exports.unlink = unlink;
- exports.updateCurrentUser = updateCurrentUser;
- exports.updateEmail = updateEmail;
- exports.updatePassword = updatePassword;
- exports.updatePhoneNumber = updatePhoneNumber;
- exports.updateProfile = updateProfile;
- exports.useDeviceLanguage = useDeviceLanguage;
- exports.verifyBeforeUpdateEmail = verifyBeforeUpdateEmail;
- exports.verifyPasswordResetCode = verifyPasswordResetCode;
|