{"version":3,"file":"app/main.f41b38d53bc6a993aee8.js","mappings":"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GCA9B,SAAYjJ,GACV,qBACA,+BACA,mBACA,2BAJF,CAAY,EAAAA,aAAA,EAAAA,WAAU,M,gGCAtB,SAAY6xC,GACV,YACA,oBACA,oBACA,kBACA,YACA,iCANF,CAAY,EAAAA,aAAA,EAAAA,WAAU,M,+FCAtB,SAAYC,GACV,yBACA,iBACA,yCACA,2CACA,uCACA,qCACA,uCACA,mCACA,mCACA,qCACA,wCACA,oCACA,kCACA,8BACA,wCACA,sCACA,kBACA,sCACA,wCACA,4CACA,0CArBF,CAAY,EAAAA,aAAA,EAAAA,WAAU,M,+GCAtB,SAAYC,GACV,yBACA,2BACA,6BACA,6CACA,2CALF,CAAY,EAAAA,4BAAA,EAAAA,0BAAyB,M,yGCArC,SAAYC,GACV,mBACA,2BAFF,CAAY,EAAAA,sBAAA,EAAAA,oBAAmB,M,oGCA/B,SAAYC,GACV,qCACA,2DACA,2DACA,uDACA,mDACA,6EACA,yEAPF,CAAY,EAAAA,iBAAA,EAAAA,eAAc,M,+FCA1B,SAAY9xC,GACV,uCACA,sDACA,4CACA,8CACA,gDACA,8CACA,oDACA,8DACA,8DACA,0EAEA,0CACA,0CACA,0CACA,8DACA,8DACA,wCACA,gEACA,oDACA,oFACA,0FACA,oFACA,oEACA,0EACA,oEACA,4DACA,kDACA,4CACA,wFAEA,kDACA,kDACA,kDAEA,wCACA,wCACA,wCAEA,8DACA,kEACA,8DACA,8DACA,0EACA,sEACA,wFACA,4FACA,oFACA,wEACA,0EAEA,sDACA,8DAEA,kEACA,4DACA,8DACA,8EACA,gFAEA,0CAEA,sDACA,0DACA,sDACA,sDAEA,sEACA,kEACA,sEACA,kFAtEF,CAAY,EAAAA,YAAA,EAAAA,UAAS,M,+FCArB,SAAYP,GACV,mBACA,uBACA,yBACA,uBAJF,CAAY,EAAAA,YAAA,EAAAA,UAAS,M,oGCArB,SAAYsyC,GACV,uBACA,qBAFF,CAAY,EAAAA,iBAAA,EAAAA,eAAc,M,iGCA1B,SAAY5rB,GACV,iDACA,+CAFF,CAAY,EAAAA,cAAA,EAAAA,YAAW,M,yGCAvB,SAAY6rB,GACV,gBACA,kBAC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AQ,WACa,IAAhCY,EAAMwP,KAAKpQ,QAAQ,a,qGCrGZ,EAAA8jE,gBAAkB,CAC7B,SACA,UACA,YACA,QACA,UACA,UACA,SACA,OACA,WACA,WACA,WACA,UACA,UACA,SACA,WACA,UACA,WACA,WACA,WACA,WACA,UACA,UACA,WACA,SACA,SACA,UACA,YACA,YACA,UACA,WACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,WACA,UACA,OACA,UACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,WACA,WACA,UACA,OACA,UACA,YACA,WACA,WACA,UACA,YACA,OACA,SACA,WACA,YACA,YACA,YACA,YACA,SACA,QACA,YACA,WACA,SACA,UACA,SACA,SACA,WACA,QACA,SACA,YACA,YACA,YACA,YACA,YACA,OACA,UACA,SACA,SACA,QACA,YACA,SACA,QACA,UACA,QACA,WACA,UACA,YACA,QACA,YACA,YACA,SACA,WACA,YACA,UACA,QACA,OACA,OACA,OACA,MACA,OACA,YACA,QACA,YACA,QACA,UACA,UACA,YACA,QACA,QACA,YACA,WACA,SACA,QACA,QACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,QACA,QACA,YACA,QACA,WACA,UACA,WACA,WACA,OACA,WACA,SACA,SACA,WACA,QACA,YACA,QACA,WACA,YACA,YACA,WACA,YACA,YACA,SACA,YACA,YACA,SACA,UACA,UACA,WACA,OACA,QACA,QACA,QACA,UACA,WACA,UACA,WACA,QACA,SACA,WACA,QACA,YACA,UACA,QACA,QACA,SACA,WACA,SACA,YACA,SACA,UACA,WACA,YACA,UACA,YACA,UACA,SACA,UACA,UACA,UACA,SACA,SACA,WACA,OACA,YACA,UACA,QACA,SACA,SACA,SACA,UACA,UACA,YACA,YACA,UACA,SACA,UACA,YACA,YACA,WACA,QACA,YACA,QACA,QACA,WACA,YACA,WACA,WACA,UACA,WACA,UACA,YACA,UACA,YACA,WACA,WACA,WACA,SACA,UACA,YACA,WACA,SACA,WACA,WACA,YACA,WACA,YACA,WACA,YACA,YACA,YACA,YACA,SACA,UACA,QACA,QACA,UACA,SACA,UACA,SACA,WACA,WACA,UACA,SACA,WACA,QACA,SACA,UACA,YACA,SACA,UACA,YACA,YACA,WACA,WACA,YACA,UACA,WACA,QACA,YACA,YACA,UACA,QACA,YACA,YACA,YACA,YACA,WACA,WACA,UACA,UACA,QACA,QACA,WACA,QACA,OACA,WACA,YACA,YACA,WACA,OACA,QACA,WACA,WACA,QACA,QACA,YACA,UACA,WACA,QACA,SACA,UACA,SACA,UACA,UACA,UACA,SACA,UACA,OACA,QACA,QACA,SACA,UACA,UACA,QACA,SACA,UACA,SACA,YACA,WACA,QACA,MACA,SACA,YACA,SACA,YACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,YACA,SACA,WACA,SACA,UACA,WACA,UACA,UACA,YACA,YACA,YACA,SACA,WACA,QACA,OACA,WACA,OACA,SACA,YACA,UACA,SACA,SACA,UACA,YACA,WACA,YACA,YACA,SACA,QACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,WACA,UACA,UACA,WACA,QACA,WACA,YACA,SACA,YACA,SACA,SACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,SACA,SACA,WACA,SACA,UACA,WACA,QACA,WACA,UACA,OACA,QACA,QACA,SACA,QACA,QACA,SACA,UACA,SACA,QACA,OACA,OACA,SACA,WACA,SACA,SACA,WACA,YACA,YACA,WACA,SACA,SACA,YACA,WACA,WACA,UACA,YACA,WACA,WACA,YACA,UACA,UACA,WACA,YACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,YACA,SACA,WACA,WACA,YACA,WACA,QACA,WACA,YACA,SACA,QACA,UACA,QACA,UACA,SACA,WACA,QACA,SACA,UACA,SACA,SACA,YACA,UACA,QACA,UACA,WACA,QACA,SACA,WACA,SACA,UACA,YACA,UACA,QACA,WACA,SACA,SACA,SACA,WACA,QACA,WACA,WACA,SACA,SACA,UACA,WACA,WACA,SACA,YACA,UACA,SACA,WACA,SACA,UACA,SACA,UACA,QACA,WACA,UACA,WACA,SACA,UACA,SACA,OACA,YACA,UACA,YACA,SACA,WACA,YACA,UACA,WACA,YACA,WACA,OACA,YACA,SACA,QACA,QACA,QACA,SACA,SACA,QACA,OACA,QACA,OACA,YACA,WACA,YACA,UACA,UACA,SACA,SACA,UACA,UACA,UACA,QACA,OACA,QACA,UACA,YACA,YACA,QACA,YACA,YACA,QACA,WACA,YACA,SACA,UACA,SACA,QACA,QACA,UACA,QACA,QACA,WACA,QACA,QACA,UACA,UACA,WACA,SACA,OACA,WACA,QACA,WACA,UACA,WACA,OACA,OACA,WACA,WACA,UACA,OACA,SACA,UACA,QACA,SACA,YACA,QACA,QACA,UACA,SACA,QACA,QACA,WACA,UACA,WACA,WACA,OACA,SACA,UACA,SACA,SACA,UACA,UACA,YACA,OACA,SACA,SACA,QACA,OACA,MACA,UACA,OACA,UACA,SACA,UACA,WACA,QACA,WACA,WACA,WACA,QACA,UACA,SACA,SACA,QACA,OACA,YACA,YACA,OACA,YACA,SACA,QACA,SACA,UACA,WACA,UACA,QACA,QACA,QACA,SACA,UACA,WACA,YACA,OACA,YACA,WACA,SACA,QACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,YACA,YACA,SACA,SACA,QACA,SACA,UACA,OACA,SACA,SACA,WACA,YACA,UACA,WACA,SACA,SACA,WACA,UACA,UACA,QACA,QACA,QACA,QACA,UACA,UACA,SACA,YACA,OACA,QACA,QACA,UACA,UACA,YACA,UACA,UACA,YACA,YACA,UACA,UACA,YACA,YACA,YACA,UACA,WACA,SACA,SACA,YACA,SACA,SACA,WACA,QACA,QACA,UACA,WACA,YACA,SACA,WACA,WACA,SACA,WACA,QACA,QACA,WACA,QACA,YACA,SACA,WACA,SACA,YACA,SACA,SACA,SACA,WACA,WACA,YACA,YACA,WACA,WACA,UACA,QACA,SACA,UACA,SACA,SACA,UACA,UACA,QACA,OACA,QACA,YACA,SACA,OACA,UACA,YACA,YACA,WACA,WACA,UACA,UACA,UACA,WACA,WACA,WACA,QACA,QACA,SACA,SACA,SACA,UACA,YACA,WACA,QACA,OACA,SACA,OACA,SACA,UACA,OACA,WACA,OACA,SACA,UACA,SACA,YACA,QACA,UACA,QACA,SACA,QACA,SACA,SACA,QACA,QACA,WACA,UACA,OACA,UACA,OACA,WACA,WACA,UACA,YACA,WACA,UACA,YACA,OACA,UACA,UACA,UACA,YACA,QACA,SACA,WACA,SACA,WACA,UACA,WACA,SACA,QACA,SACA,SACA,UACA,SACA,QACA,OACA,SACA,WACA,WACA,SACA,UACA,SACA,SACA,SACA,QACA,YACA,SACA,UACA,SACA,UACA,UACA,WACA,OACA,YACA,UACA,UACA,SACA,YACA,UACA,UACA,UACA,YACA,UACA,YACA,UACA,UACA,QACA,UACA,SACA,YACA,SACA,UACA,WACA,WACA,YACA,YACA,YACA,WACA,SACA,YACA,QACA,SACA,UACA,UACA,WACA,UACA,YACA,WACA,YACA,QACA,YACA,YACA,UACA,UACA,UACA,SACA,YACA,QACA,SACA,WACA,SACA,UACA,YACA,YACA,QACA,UACA,UACA,UACA,OACA,OACA,SACA,SACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,WACA,SACA,UACA,WACA,WACA,UACA,YACA,WACA,UACA,SACA,SACA,SACA,UACA,YACA,SACA,QACA,UACA,YACA,SACA,SACA,YACA,QACA,UACA,YACA,UACA,WACA,WACA,UACA,SACA,SACA,QACA,SACA,YACA,WACA,WACA,SACA,SACA,SACA,WACA,WACA,YACA,YACA,YACA,UACA,WACA,WACA,QACA,WACA,QACA,QACA,UACA,YACA,UACA,YACA,WACA,SACA,SACA,UACA,QACA,QACA,YACA,WACA,UACA,QACA,UACA,YACA,YACA,WACA,UACA,WACA,UACA,UACA,QACA,UACA,UACA,WACA,QACA,UACA,SACA,WACA,WACA,WACA,UACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,SACA,OACA,YACA,UACA,QACA,YACA,SACA,QACA,QACA,UACA,QACA,WACA,SACA,UACA,QACA,QACA,YACA,YACA,YACA,WACA,YACA,YACA,QACA,QACA,QACA,OACA,WACA,SACA,WACA,WACA,QACA,WACA,WACA,SACA,YACA,UACA,QACA,UACA,WACA,SACA,OACA,SACA,UACA,WACA,SACA,SACA,QACA,OACA,SACA,QACA,QACA,QACA,QACA,QACA,WACA,QACA,SACA,WACA,SACA,WACA,WACA,YACA,SACA,UACA,UACA,WACA,UACA,SACA,SACA,OACA,QACA,QACA,OACA,QACA,WACA,SACA,SACA,QACA,YACA,QACA,WACA,UACA,UACA,WACA,UACA,WACA,UACA,QACA,QACA,QACA,UACA,SACA,WACA,OACA,OACA,QACA,QACA,QACA,UACA,QACA,SACA,YACA,WACA,QACA,SACA,UACA,SACA,UACA,WACA,QACA,SACA,WACA,OACA,SACA,QACA,UACA,QACA,QACA,UACA,WACA,UACA,UACA,WACA,QACA,SACA,UACA,WACA,YACA,QACA,WACA,SACA,SACA,YACA,SACA,UACA,QACA,YACA,UACA,UACA,WACA,YACA,YACA,OACA,WACA,SACA,UACA,SACA,QACA,UACA,MACA,WACA,SACA,UACA,SACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,OACA,OACA,OACA,OACA,WACA,WACA,UACA,WACA,SACA,YACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,SACA,WACA,OACA,OACA,OACA,UACA,QACA,QACA,SACA,QACA,WACA,UACA,UACA,WACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,SACA,UACA,SACA,YACA,WACA,WACA,YACA,UACA,YACA,WACA,WACA,YACA,WACA,YACA,UACA,UACA,UACA,WACA,UACA,YACA,UACA,QACA,YACA,UACA,WACA,WACA,SACA,WACA,YACA,YACA,UACA,YACA,YACA,UACA,OACA,UACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,YACA,UACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,WACA,WACA,UACA,YACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,UACA,YACA,YACA,WACA,UACA,UACA,UACA,UACA,WACA,UACA,YACA,UACA,UACA,YACA,OACA,SACA,SACA,UACA,SACA,UACA,SACA,OACA,QACA,OACA,WACA,YACA,UACA,SACA,SACA,SACA,YACA,YACA,WACA,WACA,YACA,QACA,WACA,UACA,WACA,YACA,SACA,UACA,WACA,UACA,YACA,YACA,UACA,SACA,SACA,WACA,YACA,SACA,SACA,YACA,OACA,UACA,SACA,QACA,QACA,QACA,YACA,YACA,WACA,YACA,UACA,SACA,UACA,WACA,QACA,UACA,WACA,UACA,SACA,WACA,OACA,WACA,YACA,WACA,WACA,SACA,WACA,UACA,WACA,YACA,YACA,SACA,QACA,YACA,QACA,UACA,UACA,QACA,QACA,QACA,UACA,WACA,WACA,WACA,WACA,SACA,SACA,UACA,YACA,QACA,UACA,UACA,YACA,SACA,WACA,YACA,SACA,WACA,WACA,WACA,WACA,WACA,SACA,QACA,QACA,SACA,QACA,QACA,WACA,UACA,WACA,YACA,UACA,WACA,UACA,WACA,OACA,UACA,QACA,QACA,QACA,UACA,SACA,WACA,UACA,UACA,UACA,WACA,UACA,YACA,SACA,WACA,UACA,QACA,QACA,QACA,QACA,OACA,QACA,SACA,UACA,UACA,QACA,QACA,UACA,UACA,YACA,UACA,YACA,UACA,QACA,YACA,SACA,UACA,WACA,WACA,YACA,UACA,WACA,YACA,UACA,UACA,WACA,QACA,OACA,SACA,UACA,UACA,YACA,OACA,UACA,UACA,WACA,SACA,SACA,WACA,WACA,YACA,WACA,UACA,YACA,WACA,UACA,YACA,UACA,QACA,SACA,UACA,UACA,UACA,SACA,OACA,SACA,SACA,SACA,SACA,YACA,UACA,QACA,QACA,QACA,UACA,SACA,UACA,SACA,SACA,YACA,QACA,QACA,QACA,OACA,SACA,UACA,YACA,UACA,YACA,WACA,YACA,UACA,MACA,QACA,SACA,UACA,UACA,WACA,SACA,YACA,YACA,MACA,MACA,WACA,SACA,QACA,WACA,SACA,QACA,QACA,WACA,QACA,UACA,YACA,SACA,WACA,QACA,SACA,SACA,WACA,YACA,QACA,WACA,WACA,YACA,UACA,WACA,WACA,UACA,OACA,OACA,YACA,OACA,YACA,OACA,WACA,SACA,WACA,WACA,UACA,OACA,SACA,WACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,WACA,SACA,YACA,WACA,SACA,UACA,YACA,QACA,OACA,YACA,SACA,WACA,QACA,UACA,WACA,SACA,QACA,SACA,SACA,QACA,QACA,YACA,QACA,WACA,SACA,WACA,YACA,WACA,UACA,SACA,YACA,YACA,UACA,YACA,UACA,YACA,WACA,OACA,WACA,UACA,SACA,YACA,YACA,YACA,QACA,WACA,SACA,WACA,YACA,SACA,SACA,OACA,OACA,SACA,SACA,WACA,SACA,WACA,SACA,UACA,SACA,YACA,YACA,YACA,WACA,UACA,YACA,WACA,WACA,WACA,UACA,SACA,WACA,SACA,WACA,UACA,YACA,WACA,YACA,YACA,QACA,WACA,UACA,UACA,SACA,SACA,OACA,WACA,YACA,WACA,SACA,YACA,QACA,WACA,QACA,WACA,YACA,SACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,UACA,QACA,SACA,WACA,SACA,YACA,YACA,WACA,SACA,YACA,WACA,SACA,WACA,YACA,YACA,WACA,SACA,QACA,SACA,QACA,UACA,SACA,UACA,UACA,OACA,YACA,YACA,WACA,YACA,SACA,UACA,YACA,WACA,SACA,SACA,SACA,WACA,YACA,YACA,UACA,UACA,QACA,WACA,SACA,SACA,WACA,QACA,UACA,YACA,UACA,YACA,YACA,WACA,WACA,YACA,YACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,YACA,WACA,WACA,SACA,YACA,YACA,WACA,YACA,YACA,SACA,WACA,YACA,WACA,UACA,QACA,UACA,WACA,UACA,UACA,YACA,WACA,SACA,UACA,YACA,UACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,YACA,YACA,UACA,OACA,WACA,SACA,YACA,QACA,OACA,SACA,UACA,YACA,WACA,YACA,WACA,WACA,YACA,YACA,MACA,WACA,YACA,WACA,OACA,SACA,OACA,WACA,QACA,SACA,SACA,UACA,SACA,QACA,UACA,SACA,YACA,QACA,QACA,SACA,SACA,UACA,UACA,UACA,SACA,SACA,UACA,WACA,YACA,YACA,WACA,YACA,WACA,YACA,WACA,WACA,WACA,SACA,WACA,WACA,UACA,YACA,WACA,UACA,UACA,YACA,WACA,WACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,WACA,OACA,YACA,UACA,OACA,UACA,YACA,YACA,WACA,WACA,YACA,SACA,UACA,WACA,UACA,WACA,SACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,YACA,WACA,UACA,WACA,UACA,YACA,UACA,WACA,WACA,UACA,WACA,UACA,WACA,UACA,WACA,WACA,WACA,WACA,QACA,QACA,QACA,YACA,UACA,WACA,WACA,WACA,WACA,SACA,WACA,YACA,YACA,WACA,WACA,WACA,YACA,QACA,SACA,SACA,OACA,WACA,WACA,QACA,QACA,QACA,QACA,OACA,SACA,YACA,SACA,QACA,UACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,UACA,QACA,QACA,SACA,WACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,WACA,UACA,QACA,OACA,YACA,SACA,SACA,OACA,SACA,WACA,SACA,OACA,OACA,QACA,OACA,OACA,WACA,YACA,YACA,WACA,YACA,WACA,UACA,UACA,YACA,WACA,YACA,QACA,UACA,UACA,OACA,UACA,WACA,YACA,YACA,WACA,YACA,YACA,YACA,SACA,SACA,WACA,SACA,SACA,QACA,OACA,UACA,QACA,QACA,QACA,UACA,WACA,YACA,WACA,WACA,SACA,WACA,SACA,SACA,WACA,UACA,UACA,UACA,QACA,QACA,QACA,YACA,UACA,WACA,UACA,UACA,UACA,QACA,QACA,WACA,SACA,OACA,MACA,SACA,YACA,UACA,WACA,UACA,WACA,WACA,QACA,OACA,OACA,SACA,SACA,MACA,OACA,SACA,WACA,OACA,UACA,WACA,WACA,MACA,OACA,SACA,YACA,YACA,UACA,UACA,WACA,SACA,SACA,OACA,OACA,UACA,OACA,QACA,QACA,QACA,UACA,UACA,WACA,UACA,YACA,UACA,WACA,UACA,WACA,WACA,OACA,QACA,UACA,UACA,UACA,SACA,UACA,QACA,UACA,UACA,WACA,WACA,WACA,UACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,SACA,UACA,QACA,UACA,SACA,WACA,SACA,YACA,YACA,SACA,WACA,UACA,QACA,SACA,SACA,OACA,OACA,QACA,QACA,QACA,YACA,OACA,SACA,UACA,YACA,UACA,WACA,YACA,UACA,YACA,YACA,OACA,WACA,SACA,OACA,UACA,SACA,WACA,YACA,WACA,MACA,YACA,UACA,YACA,SACA,YACA,SACA,SACA,WACA,WACA,YACA,UACA,YACA,SACA,QACA,YACA,UACA,SACA,QACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,UACA,YACA,YACA,WACA,SACA,MACA,WACA,WACA,YACA,QACA,UACA,SACA,MACA,UACA,WACA,MACA,YACA,QACA,YACA,WACA,YACA,QACA,UACA,QACA,QACA,UACA,SACA,UACA,YACA,YACA,QACA,WACA,UACA,SACA,SACA,WACA,SACA,YACA,QACA,UACA,YACA,WACA,OACA,QACA,WACA,UACA,WACA,UACA,UACA,WACA,WACA,YACA,WACA,YACA,WACA,WACA,WACA,WACA,UACA,UACA,YACA,QACA,MACA,SACA,YACA,SACA,YACA,YACA,WACA,UACA,YACA,SACA,SACA,YACA,YACA,WACA,UACA,UACA,WACA,WACA,YACA,QACA,SACA,UACA,UACA,YACA,YACA,UACA,YACA,WACA,YACA,YACA,WACA,YACA,WACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,WACA,WACA,YACA,UACA,SACA,UACA,YACA,YACA,YACA,UACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,SACA,SACA,SACA,UACA,UACA,SACA,SACA,YACA,WACA,YACA,WACA,SACA,UACA,SACA,SACA,YACA,SACA,SACA,WACA,UACA,WACA,UACA,YACA,WACA,WACA,WACA,UACA,WACA,QACA,OACA,SACA,OACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,WACA,UACA,QACA,SACA,WACA,UACA,UACA,YACA,SACA,YACA,YACA,WACA,SACA,SACA,UACA,YACA,SACA,SACA,UACA,QACA,QACA,WACA,YACA,YACA,WACA,WACA,WACA,SACA,YACA,YACA,WACA,UACA,QACA,UACA,YACA,YACA,SACA,WACA,WACA,YACA,YACA,WACA,UACA,UACA,WACA,UACA,QACA,YACA,SACA,YACA,WACA,UACA,QACA,WACA,YACA,YACA,UACA,UACA,OACA,YACA,YACA,YACA,WACA,WACA,QACA,WACA,UACA,OACA,QACA,YACA,SACA,QACA,UACA,UACA,WACA,YACA,YACA,YACA,SACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,SACA,YACA,YACA,YACA,YACA,QACA,OACA,YACA,SACA,UACA,SACA,QACA,WACA,OACA,SACA,YACA,WACA,WACA,SACA,UACA,YACA,YACA,YACA,YACA,YACA,QACA,SACA,WACA,YACA,SACA,SACA,WACA,UACA,YACA,WACA,UACA,UACA,UACA,YACA,WACA,WACA,YACA,SACA,WACA,UACA,YACA,YACA,WACA,YACA,SACA,YACA,WACA,WACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,WACA,YACA,UACA,SACA,WACA,SACA,YACA,UACA,UACA,SACA,YACA,UACA,UACA,OACA,SACA,UACA,SACA,OACA,QACA,UACA,OACA,WACA,SACA,SACA,WACA,UACA,UACA,YACA,QACA,UACA,OACA,UACA,YACA,YACA,UACA,UACA,WACA,SACA,UACA,WACA,SACA,YACA,YACA,UACA,WACA,WACA,MACA,QACA,UACA,SACA,SACA,OACA,OACA,SACA,SACA,WACA,WACA,WACA,WACA,WACA,QACA,QACA,UACA,SACA,UACA,WACA,YACA,WACA,SACA,SACA,QACA,SACA,SACA,WACA,UACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,WACA,WACA,YACA,UACA,UACA,QACA,WACA,QACA,UACA,SACA,WACA,SACA,SACA,SACA,UACA,OACA,SACA,QACA,WACA,SACA,WACA,WACA,UACA,UACA,YACA,QACA,WACA,QACA,UACA,WACA,WACA,YACA,SACA,UACA,UACA,WACA,MACA,OACA,UACA,UACA,WACA,WACA,YACA,YACA,QACA,UACA,QACA,QACA,YACA,UACA,WACA,WACA,OACA,UACA,YACA,YACA,YACA,WACA,WACA,SACA,QACA,UACA,WACA,SACA,WACA,UACA,YACA,YACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,OACA,UACA,SACA,QACA,QACA,SACA,SACA,QACA,QACA,OACA,QACA,QACA,QACA,WACA,OACA,SACA,UACA,QACA,WACA,UACA,UACA,QACA,SACA,UACA,WACA,OACA,MACA,MACA,OACA,QACA,OACA,WACA,SACA,WACA,SACA,WACA,SACA,OACA,OACA,OACA,UACA,WACA,WACA,YACA,SACA,WACA,WACA,WACA,UACA,WACA,UACA,WACA,UACA,WACA,YACA,WACA,UACA,WACA,WACA,WACA,SACA,SACA,UACA,WACA,WACA,MACA,QACA,WACA,WACA,UACA,YACA,WACA,YACA,WACA,QACA,QACA,UACA,UACA,YACA,SACA,UACA,QACA,WACA,WACA,WACA,UACA,UACA,UACA,WACA,WACA,UACA,WACA,SACA,YACA,WACA,YACA,WACA,UACA,WACA,YACA,WACA,UACA,SACA,WACA,SACA,YACA,WACA,QACA,UACA,UACA,WACA,SACA,SACA,QACA,SACA,WACA,YACA,YACA,WACA,QACA,SACA,UACA,QACA,UACA,YACA,SACA,OACA,QACA,YACA,UACA,WACA,WACA,YACA,SACA,QACA,QACA,SACA,WACA,YACA,WACA,QACA,YACA,SACA,MACA,QACA,MACA,YACA,UACA,QACA,OACA,YACA,WACA,UACA,SACA,SACA,UACA,YACA,SACA,YACA,WACA,OACA,SACA,QACA,SACA,SACA,WACA,UACA,MACA,SACA,UACA,SACA,SACA,UACA,SACA,UACA,SACA,UACA,SACA,MACA,WACA,YACA,SACA,UACA,WACA,QACA,OACA,OACA,SACA,OACA,QACA,OACA,SACA,MACA,SACA,UACA,WACA,WACA,QACA,UACA,YACA,SACA,QACA,YACA,WACA,YACA,UACA,YACA,WACA,WACA,SACA,YACA,YACA,YACA,WACA,YACA,UACA,YACA,UACA,UACA,UACA,QACA,QACA,YACA,SACA,UACA,YACA,QACA,OACA,WACA,YACA,WACA,SACA,WACA,SACA,SACA,SACA,QACA,UACA,SACA,WACA,QACA,QACA,SACA,QACA,UACA,UACA,UACA,QACA,YACA,SACA,YACA,UACA,SACA,WACA,YACA,QACA,UACA,QACA,WACA,UACA,WACA,UACA,SACA,UACA,UACA,UACA,UACA,SACA,UACA,SACA,UACA,WACA,WACA,SACA,YACA,YACA,UACA,WACA,QACA,QACA,QACA,UACA,WACA,UACA,OACA,SACA,YACA,UACA,SACA,OACA,OACA,WACA,OACA,UACA,QACA,WACA,WACA,YACA,OACA,UACA,QACA,UACA,OACA,OACA,OACA,QACA,WACA,YACA,QACA,SACA,OACA,SACA,OACA,SACA,WACA,OACA,UACA,SACA,SACA,SACA,OACA,OACA,OACA,WACA,YACA,WACA,YACA,SACA,SACA,WACA,UACA,YACA,WACA,WACA,UACA,WACA,QACA,WACA,WACA,UACA,UACA,UACA,WACA,UACA,SACA,UACA,QACA,WACA,QACA,QACA,UACA,YACA,QACA,QACA,YACA,UACA,UACA,YACA,WACA,SACA,YACA,SACA,YACA,YACA,UACA,QACA,OACA,UACA,WACA,WACA,YACA,SACA,QACA,UACA,WACA,OACA,YACA,OACA,QACA,YACA,WACA,WACA,QACA,UACA,YACA,QACA,YACA,QACA,SACA,WACA,OACA,UACA,OACA,WACA,SACA,QACA,QACA,SACA,WACA,SACA,QACA,SACA,UACA,QACA,QACA,SACA,UACA,QACA,OACA,SACA,WACA,WACA,UACA,UACA,YACA,UACA,WACA,SACA,QACA,YACA,WACA,WACA,QACA,UACA,YACA,QACA,OACA,WACA,QACA,OACA,UACA,UACA,YACA,UACA,QACA,SACA,WACA,OACA,OACA,QACA,QACA,UACA,OACA,SACA,MACA,UACA,WACA,YACA,WACA,UACA,WACA,SACA,SACA,UACA,UACA,MACA,UACA,QACA,OACA,UACA,OACA,SACA,SACA,YACA,SACA,UACA,SACA,UACA,YACA,UACA,WACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,SACA,UACA,WACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,SACA,YACA,SACA,QACA,YACA,YACA,UACA,WACA,UACA,YACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,WACA,YACA,UACA,WACA,YACA,SACA,WACA,WACA,WACA,YACA,WACA,QACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,UACA,QACA,UACA,OACA,SACA,QACA,UACA,YACA,QACA,SACA,YACA,WACA,UACA,WACA,YACA,OACA,UACA,SACA,QACA,QACA,SACA,WACA,SACA,WACA,SACA,OACA,WACA,WACA,YACA,YACA,YACA,SACA,SACA,YACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,UACA,WACA,YACA,YACA,UACA,WACA,OACA,OACA,QACA,UACA,YACA,UACA,QACA,UACA,YACA,QACA,SACA,SACA,SACA,UACA,UACA,WACA,WACA,UACA,YACA,QACA,WACA,QACA,SACA,SACA,YACA,QACA,WACA,SACA,UACA,UACA,UACA,UACA,QACA,YACA,WACA,WACA,UACA,WACA,SACA,SACA,WACA,OACA,MACA,OACA,OACA,OACA,QACA,SACA,WACA,SACA,QACA,YACA,WACA,UACA,SACA,YACA,WACA,YACA,WACA,WACA,SACA,SACA,YACA,YACA,SACA,WACA,SACA,OACA,SACA,UACA,WACA,WACA,SACA,SACA,SACA,UACA,SACA,YACA,UACA,QACA,OACA,UACA,OACA,SACA,YACA,MACA,SACA,UACA,WACA,YACA,WACA,YACA,YACA,YACA,SACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,MACA,UACA,QACA,OACA,OACA,MACA,WACA,WACA,WACA,UACA,YACA,YACA,WACA,WACA,WACA,SACA,QACA,OACA,QACA,WACA,SACA,SACA,YACA,WACA,WACA,QACA,YACA,WACA,UACA,WACA,UACA,YACA,WACA,UACA,YACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,SACA,SACA,YACA,UACA,WACA,YACA,YACA,WACA,SACA,UACA,YACA,YACA,WACA,UACA,YACA,YACA,QACA,WACA,YACA,WACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,UACA,WACA,YACA,WACA,UACA,YACA,YACA,YACA,UACA,YACA,SACA,WACA,SACA,SACA,MACA,OACA,SACA,OACA,QACA,MACA,OACA,YACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,WACA,YACA,YACA,UACA,QACA,UACA,YACA,UACA,OACA,YACA,SACA,QACA,MACA,MACA,SACA,SACA,YACA,UACA,WACA,YACA,SACA,YACA,WACA,MACA,UACA,UACA,SACA,UACA,UACA,WACA,QACA,OACA,QACA,UACA,UACA,OACA,UACA,YACA,OACA,OACA,YACA,UACA,QACA,SACA,SACA,MACA,QACA,SACA,QACA,SACA,WACA,OACA,UACA,UACA,MACA,SACA,YACA,SACA,UACA,OACA,UACA,WACA,WACA,YACA,QACA,OACA,MACA,SACA,WACA,YACA,SACA,UACA,WACA,YACA,WACA,QACA,YACA,WACA,YACA,OACA,SACA,WACA,UACA,QACA,YACA,QACA,UACA,UACA,OACA,SACA,QACA,OACA,WACA,WACA,OACA,SACA,UACA,SACA,UACA,WACA,SACA,QACA,OACA,UACA,YACA,UACA,SACA,WACA,WACA,QACA,WACA,UACA,SACA,QACA,QACA,SACA,WACA,OACA,MACA,OACA,SACA,OACA,WACA,WACA,SACA,OACA,OACA,WACA,WACA,YACA,WACA,OACA,SACA,SACA,WACA,SACA,WACA,UACA,UACA,UACA,OACA,UACA,UACA,YACA,WACA,SACA,UACA,UACA,OACA,SACA,QACA,OACA,UACA,WACA,OACA,QACA,WACA,QACA,QACA,QACA,SACA,UACA,QACA,OACA,UACA,UACA,WACA,YACA,WACA,SACA,SACA,QACA,UACA,WACA,SACA,UACA,SACA,OACA,OACA,QACA,SACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,YACA,WACA,YACA,WACA,YACA,QACA,UACA,SACA,QACA,SACA,UACA,SACA,OACA,QACA,OACA,OACA,QACA,OACA,QACA,OACA,SACA,WACA,UACA,SACA,WACA,SACA,UACA,UACA,SACA,WACA,SACA,WACA,SACA,WACA,OACA,WACA,OACA,SACA,QACA,SACA,SACA,WACA,UACA,UACA,YACA,OACA,UACA,SACA,YACA,UACA,QACA,OACA,SACA,OACA,OACA,UACA,SACA,UACA,YACA,WACA,SACA,UACA,QACA,WACA,SACA,WACA,YACA,YACA,SACA,UACA,YACA,UACA,UACA,WACA,MACA,OACA,SACA,UACA,UACA,WACA,SACA,WACA,WACA,SACA,QACA,QACA,OACA,OACA,UACA,YACA,QACA,QACA,UACA,WACA,OACA,QACA,WACA,WACA,SACA,SACA,WACA,UACA,OACA,OACA,MACA,UACA,UACA,SACA,OACA,OACA,WACA,YACA,SACA,SACA,SACA,UACA,QACA,SACA,QACA,YACA,UACA,SACA,SACA,YACA,YACA,QACA,UACA,YACA,WACA,YACA,YACA,SACA,WACA,UACA,SACA,YACA,WACA,YACA,UACA,UACA,SACA,QACA,WACA,WACA,YACA,YACA,OACA,QACA,OACA,YACA,OACA,SACA,WACA,SACA,YACA,UACA,YACA,WACA,QACA,YACA,SACA,QACA,YACA,WACA,WACA,SACA,WACA,WACA,QACA,OACA,UACA,YACA,WACA,UACA,SACA,UACA,WACA,QACA,YACA,WACA,YACA,YACA,YACA,UACA,YACA,WACA,WACA,SACA,WACA,UACA,YACA,WACA,WACA,QACA,YACA,SACA,YACA,OACA,OACA,SACA,UACA,YACA,UACA,WACA,UACA,WACA,UACA,YACA,WACA,SACA,SACA,QACA,QACA,YACA,UACA,UACA,UACA,YACA,WACA,YACA,SACA,UACA,UACA,YACA,QACA,UACA,SACA,UACA,QACA,WACA,SACA,SACA,SACA,OACA,MACA,WACA,YACA,UACA,UACA,WACA,QACA,QACA,YACA,YACA,SACA,WACA,SACA,SACA,UACA,WACA,SACA,YACA,SACA,UACA,SACA,QACA,YACA,SACA,YACA,YACA,UACA,SACA,YACA,SACA,UACA,WACA,SACA,UACA,UACA,UACA,YACA,WACA,UACA,WACA,YACA,WACA,WACA,YACA,OACA,SACA,YACA,YACA,SACA,SACA,SACA,SACA,WACA,WACA,WACA,QACA,WACA,WACA,UACA,QACA,SACA,YACA,SACA,UACA,SACA,WACA,WACA,UACA,QACA,SACA,SACA,WACA,SACA,UACA,YACA,SACA,UACA,YACA,WACA,QACA,WACA,OACA,YACA,WACA,WACA,UACA,MACA,YACA,SACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,YACA,UACA,WACA,UACA,YACA,QACA,SACA,WACA,SACA,YACA,WACA,UACA,WACA,YACA,YACA,YACA,WACA,MACA,SACA,WACA,UACA,YACA,WACA,WACA,WACA,QACA,YACA,WACA,YACA,YACA,UACA,WACA,SACA,QACA,OACA,WACA,YACA,SACA,WACA,YACA,SACA,YACA,QACA,QACA,YACA,WACA,UACA,WACA,UACA,WACA,QACA,YACA,YACA,QACA,QACA,UACA,OACA,QACA,SACA,QACA,SACA,OACA,OACA,MACA,MACA,WACA,QACA,OACA,SACA,UACA,WACA,WACA,YACA,YACA,SACA,WACA,QACA,YACA,UACA,QACA,QACA,WACA,UACA,YACA,SACA,QACA,YACA,QACA,YACA,WACA,SACA,UACA,YACA,WACA,QACA,QACA,SACA,YACA,QACA,UACA,UACA,SACA,YACA,QACA,UACA,SACA,WACA,OACA,YACA,YACA,SACA,OACA,SACA,SACA,SACA,UACA,YACA,UACA,OACA,QACA,MACA,OACA,OACA,SACA,QACA,YACA,OACA,SACA,SACA,UACA,QACA,SACA,UACA,YACA,WACA,SACA,WACA,UACA,SACA,WACA,WACA,WACA,YACA,OACA,SACA,UACA,SACA,WACA,SACA,WACA,SACA,YACA,SACA,SACA,WACA,WACA,YACA,WACA,YACA,YACA,UACA,UACA,OACA,SACA,OACA,UACA,QACA,OACA,MACA,YACA,SACA,WACA,WACA,SACA,UACA,QACA,OACA,SACA,WACA,WACA,QACA,QACA,SACA,SACA,WACA,YACA,QACA,WACA,QACA,UACA,SACA,UACA,SACA,UACA,SACA,UACA,SACA,WACA,UACA,WACA,YACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,SACA,WACA,WACA,YACA,QACA,SACA,QACA,MACA,MACA,QACA,MACA,YACA,WACA,WACA,SACA,WACA,UACA,WACA,YACA,SACA,YACA,OACA,UACA,YACA,YACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,SACA,YACA,SACA,UACA,YACA,YACA,WACA,WACA,SACA,QACA,SACA,UACA,SACA,UACA,UACA,OACA,MACA,OACA,WACA,OACA,MACA,QACA,WACA,QACA,OACA,UACA,WACA,OACA,WACA,UACA,WACA,UACA,QACA,SACA,WACA,OACA,WACA,QACA,UACA,YACA,UACA,OACA,SACA,OACA,OACA,OACA,OACA,UACA,OACA,OACA,WACA,UACA,YACA,YACA,YACA,WACA,QACA,UACA,WACA,SACA,WACA,WACA,YACA,YACA,MACA,YACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,UACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,UACA,WACA,WACA,QACA,WACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,SACA,UACA,UACA,WACA,WACA,UACA,YACA,YACA,UACA,UACA,SACA,UACA,UACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,OACA,UACA,UACA,WACA,UACA,WACA,WACA,YACA,YACA,WACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,UACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,WACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,UACA,YACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,UACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,UACA,WACA,WACA,WACA,UACA,YACA,WACA,YACA,MACA,SACA,UACA,YACA,UACA,YACA,SACA,WACA,SACA,QACA,QACA,YACA,UACA,WACA,WACA,WACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,SACA,YACA,OACA,WACA,YACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,WACA,QACA,WACA,OACA,YACA,QACA,UACA,WACA,YACA,UACA,YACA,SACA,QACA,YACA,YACA,SACA,QACA,UACA,UACA,WACA,YACA,SACA,UACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,WACA,WACA,YACA,SACA,UACA,YACA,SACA,SACA,QACA,UACA,UACA,SACA,WACA,SACA,SACA,UACA,UACA,UACA,SACA,UACA,YACA,SACA,UACA,YACA,QACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,UACA,UACA,YACA,WACA,WACA,WACA,QACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,YACA,SACA,WACA,YACA,OACA,WACA,UACA,QACA,YACA,UACA,SACA,YACA,YACA,SACA,WACA,QACA,YACA,WACA,SACA,SACA,UACA,UACA,WACA,SACA,QACA,QACA,SACA,UACA,WACA,UACA,SACA,SACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,UACA,SACA,OACA,SACA,WACA,UACA,SACA,UACA,UACA,YACA,WACA,UACA,YACA,QACA,SACA,UACA,WACA,YACA,MACA,WACA,UACA,QACA,YACA,YACA,YACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,QACA,OACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,QACA,OACA,YACA,YACA,SACA,YACA,QACA,SACA,WACA,QACA,YACA,SACA,YACA,YACA,QACA,UACA,UACA,SACA,UACA,YACA,SACA,UACA,YACA,QACA,YACA,QACA,SACA,WACA,UACA,UACA,WACA,QACA,UACA,QACA,SACA,UACA,UACA,SACA,WACA,UACA,WACA,WACA,UACA,WACA,YACA,YACA,WACA,WACA,SACA,UACA,YACA,YACA,UACA,WACA,YACA,WACA,UACA,UACA,WACA,UACA,YACA,WACA,QACA,WACA,QACA,SACA,YACA,SACA,WACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,UACA,WACA,SACA,OACA,YACA,UACA,QACA,MACA,OACA,OACA,OACA,UACA,UACA,WACA,YACA,SACA,QACA,SACA,QACA,SACA,QACA,SACA,SACA,QACA,SACA,WACA,QACA,OACA,YACA,UACA,YACA,UACA,SACA,OACA,OACA,UACA,OACA,SACA,SACA,QACA,WACA,WACA,UACA,WACA,YACA,OACA,SACA,WACA,WACA,SACA,YACA,WACA,UACA,SACA,WACA,QACA,OACA,SACA,WACA,WACA,SACA,UACA,SACA,UACA,WACA,SACA,SACA,UACA,YACA,UACA,UACA,QACA,SACA,WACA,QACA,UACA,OACA,WACA,YACA,UACA,QACA,SACA,MACA,WACA,SACA,WACA,UACA,WACA,YACA,SACA,UACA,WACA,YACA,UACA,WACA,WACA,UACA,YACA,UACA,SACA,WACA,YACA,UACA,UACA,SACA,YACA,YACA,UACA,YACA,WACA,YACA,YACA,SACA,UACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,SACA,UACA,SACA,YACA,YACA,YACA,SACA,UACA,YACA,UACA,QACA,UACA,YACA,UACA,YACA,YACA,WACA,UACA,SACA,UACA,UACA,YACA,UACA,UACA,WACA,SACA,YACA,WACA,QACA,SACA,YACA,UACA,UACA,SACA,QACA,WACA,QACA,QACA,QACA,SACA,SACA,WACA,UACA,UACA,YACA,QACA,YACA,WACA,WACA,YACA,QACA,UACA,YACA,UACA,YACA,UACA,WACA,YACA,WACA,WACA,UACA,UACA,UACA,UACA,YACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,UACA,WACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,QACA,QACA,YACA,SACA,WACA,YACA,SACA,YACA,WACA,WACA,YACA,WACA,UACA,QACA,UACA,YACA,WACA,SACA,YACA,YACA,WACA,WACA,QACA,WACA,SACA,SACA,WACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,UACA,UACA,WACA,YACA,QACA,SACA,QACA,YACA,QACA,UACA,MACA,UACA,SACA,YACA,SACA,SACA,MACA,OACA,YACA,OACA,UACA,QACA,YACA,OACA,SACA,SACA,QACA,WACA,YACA,YACA,UACA,WACA,OACA,QACA,SACA,QACA,WACA,YACA,WACA,SACA,WACA,YACA,QACA,UACA,WACA,SACA,SACA,UACA,SACA,SACA,WACA,YACA,OACA,QACA,YACA,WACA,UACA,WACA,WACA,YACA,SACA,YACA,UACA,WACA,UACA,SACA,QACA,UACA,OACA,SACA,WACA,UACA,YACA,SACA,QACA,WACA,QACA,WACA,QACA,UACA,YACA,YACA,UACA,UACA,QACA,UACA,UACA,SACA,YACA,YACA,WACA,UACA,SACA,QACA,UACA,UACA,YACA,YACA,YACA,QACA,QACA,QACA,UACA,YACA,QACA,OACA,SACA,YACA,WACA,YACA,QACA,QACA,OACA,SACA,SACA,OACA,SACA,QACA,SACA,WACA,YACA,WACA,YACA,WACA,QACA,SACA,SACA,OACA,OACA,SACA,SACA,UACA,SACA,UACA,UACA,WACA,UACA,SACA,OACA,SACA,QACA,SACA,WACA,OACA,SACA,QACA,YACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,QACA,OACA,SACA,SACA,OACA,UACA,SACA,QACA,SACA,SACA,UACA,YACA,WACA,QACA,YACA,WACA,WACA,UACA,WACA,OACA,YACA,WACA,UACA,YACA,YACA,YACA,WACA,SACA,WACA,WACA,WACA,UACA,YACA,SACA,QACA,UACA,SACA,SACA,UACA,SACA,UACA,UACA,WACA,WACA,SACA,SACA,YACA,SACA,SACA,SACA,SACA,YACA,YACA,UACA,SACA,WACA,UACA,WACA,YACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,YACA,SACA,SACA,UACA,SACA,WACA,WACA,SACA,YACA,YACA,UACA,WACA,WACA,YACA,WACA,UACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,YACA,UACA,WACA,WACA,WACA,YACA,YACA,SACA,SACA,UACA,SACA,WACA,WACA,WACA,WACA,YACA,UACA,UACA,WACA,UACA,UACA,YACA,SACA,YACA,YACA,UACA,SACA,WACA,YACA,SACA,SACA,UACA,UACA,SACA,SACA,SACA,WACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,YACA,QACA,SACA,SACA,YACA,YACA,UACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,YACA,UACA,WACA,WACA,QACA,QACA,UACA,UACA,YACA,WACA,WACA,WACA,UACA,QACA,UACA,YACA,UACA,SACA,SACA,SACA,WACA,SACA,YACA,OACA,SACA,SACA,UACA,UACA,WACA,SACA,WACA,WACA,YACA,YACA,QACA,UACA,YACA,SACA,UACA,SACA,YACA,UACA,UACA,UACA,WACA,SACA,WACA,YACA,YACA,WACA,YACA,YACA,UACA,UACA,WACA,WACA,YACA,WACA,SACA,SACA,SACA,WACA,UACA,SACA,UACA,YACA,YACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,WACA,SACA,WACA,UACA,SACA,UACA,QACA,WACA,SACA,YACA,SACA,YACA,YACA,UACA,UACA,WACA,YACA,YACA,YACA,OACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,YACA,UACA,QACA,SACA,WACA,UACA,SACA,WACA,WACA,WACA,WACA,SACA,SACA,QACA,UACA,UACA,YACA,YACA,YACA,WACA,WACA,UACA,WACA,YACA,YACA,YACA,SACA,WACA,WACA,WACA,WACA,SACA,WACA,UACA,WACA,SACA,SACA,WACA,YACA,YACA,SACA,WACA,YACA,SACA,YACA,YACA,UACA,UACA,UACA,UACA,WACA,SACA,SACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,YACA,YACA,QACA,SACA,UACA,SACA,UACA,UACA,WACA,QACA,SACA,UACA,UACA,UACA,SACA,UACA,YACA,WACA,WACA,UACA,YACA,YACA,SACA,YACA,SACA,WACA,UACA,YACA,UACA,UACA,WACA,YACA,SACA,SACA,WACA,YACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,QACA,SACA,UACA,OACA,SACA,SACA,WACA,UACA,UACA,WACA,SACA,OACA,SACA,UACA,OACA,UACA,QACA,QACA,UACA,SACA,OACA,OACA,QACA,UACA,OACA,UACA,WACA,WACA,UACA,SACA,WACA,UACA,OACA,SACA,OACA,UACA,UACA,QACA,QACA,YACA,WACA,YACA,YACA,UACA,WACA,SACA,UACA,QACA,UACA,OACA,QACA,WACA,SACA,WACA,SACA,SACA,WACA,YACA,UACA,WACA,YACA,WACA,QACA,QACA,QACA,OACA,OACA,SACA,SACA,OACA,SACA,UACA,UACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,UACA,QACA,SACA,QACA,SACA,SACA,UACA,SACA,UACA,OACA,SACA,SACA,MACA,SACA,OACA,SACA,WACA,UACA,QACA,YACA,UACA,SACA,UACA,QACA,OACA,SACA,UACA,QACA,OACA,OACA,OACA,MACA,UACA,WACA,YACA,SACA,YACA,SACA,YACA,UACA,WACA,QACA,UACA,SACA,YACA,YACA,SACA,WACA,UACA,OACA,OACA,UACA,QACA,OACA,QACA,OACA,QACA,SACA,WACA,SACA,SACA,QACA,SACA,QACA,OACA,WACA,SACA,UACA,YACA,YACA,OACA,SACA,WACA,WACA,WACA,YACA,SACA,UACA,WACA,UACA,YACA,UACA,SACA,WACA,UACA,UACA,YACA,UACA,YACA,YACA,WACA,QACA,WACA,YACA,OACA,QACA,UACA,YACA,QACA,UACA,YACA,UACA,OACA,YACA,QACA,UACA,WACA,QACA,YACA,YACA,UACA,WACA,WACA,YACA,QACA,QACA,SACA,UACA,QACA,UACA,SACA,QACA,YACA,MACA,UACA,SACA,UACA,WACA,QACA,UACA,WACA,UACA,WACA,OACA,UACA,UACA,WACA,QACA,YACA,SACA,WACA,YACA,SACA,QACA,UACA,YACA,WACA,QACA,YACA,SACA,WACA,YACA,SACA,WACA,YACA,WACA,UACA,UACA,YACA,QACA,QACA,WACA,QACA,QACA,UACA,QACA,SACA,YACA,YACA,SACA,YACA,SACA,UACA,QACA,WACA,SACA,YACA,UACA,WACA,WACA,SACA,WACA,WACA,WACA,YACA,YACA,QACA,UACA,UACA,SACA,WACA,SACA,WACA,YACA,SACA,SACA,UACA,YACA,WACA,WACA,UACA,UACA,WACA,QACA,QACA,WACA,YACA,SACA,UACA,WACA,YACA,YACA,SACA,UACA,SACA,YACA,SACA,UACA,WACA,WACA,QACA,SACA,WACA,WACA,WACA,SACA,WACA,UACA,UACA,UACA,SACA,WACA,YACA,YACA,WACA,OACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,SACA,UACA,OACA,SACA,WACA,YACA,YACA,YACA,YACA,WACA,QACA,YACA,SACA,SACA,SACA,WACA,YACA,SACA,SACA,YACA,UACA,WACA,QACA,UACA,UACA,SACA,WACA,UACA,UACA,SACA,WACA,QACA,YACA,YACA,UACA,UACA,WACA,SACA,QACA,SACA,UACA,YACA,UACA,SACA,QACA,QACA,WACA,UACA,YACA,UACA,QACA,QACA,UACA,UACA,QACA,UACA,WACA,QACA,SACA,QACA,UACA,QACA,YACA,UACA,UACA,UACA,YACA,QACA,SACA,OACA,QACA,QACA,QACA,QACA,UACA,SACA,WACA,SACA,SACA,UACA,WACA,YACA,SACA,UACA,SACA,UACA,QACA,UACA,YACA,UACA,QACA,OACA,QACA,YACA,QACA,QACA,WACA,UACA,WACA,WACA,QACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,YACA,SACA,QACA,QACA,UACA,WACA,WACA,SACA,WACA,UACA,UACA,QACA,UACA,YACA,YACA,WACA,QACA,SACA,WACA,WACA,YACA,WACA,SACA,SACA,SACA,SACA,SACA,UACA,WACA,YACA,SACA,QACA,SACA,WACA,UACA,UACA,YACA,OACA,QACA,OACA,MACA,UACA,WACA,UACA,SACA,SACA,SACA,OACA,UACA,WACA,WACA,SACA,SACA,UACA,OACA,YACA,QACA,OACA,OACA,SACA,YACA,SACA,YACA,SACA,WACA,SACA,UACA,YACA,SACA,UACA,SACA,WACA,WACA,UACA,SACA,UACA,MACA,QACA,SACA,SACA,SACA,UACA,WACA,YACA,UACA,UACA,QACA,UACA,WACA,YACA,UACA,UACA,OACA,SACA,SACA,WACA,SACA,UACA,YACA,WACA,WACA,UACA,SACA,SACA,SACA,OACA,QACA,QACA,QACA,SACA,UACA,UACA,WACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,SACA,YACA,UACA,WACA,WACA,QACA,UACA,WACA,WACA,UACA,QACA,YACA,UACA,OACA,UACA,UACA,WACA,YACA,SACA,QACA,OACA,UACA,QACA,WACA,YACA,UACA,WACA,QACA,UACA,OACA,OACA,QACA,QACA,QACA,SACA,QACA,YACA,SACA,SACA,UACA,QACA,SACA,YACA,UACA,WACA,YACA,WACA,WACA,QACA,WACA,YACA,SACA,OACA,OACA,SACA,WACA,SACA,SACA,UACA,WACA,SACA,OACA,YACA,UACA,SACA,OACA,OACA,QACA,QACA,MACA,QACA,UACA,YACA,UACA,WACA,UACA,QACA,WACA,QACA,YACA,QACA,QACA,QACA,UACA,QACA,OACA,SACA,YACA,YACA,UACA,QACA,UACA,SACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,QACA,UACA,UACA,OACA,QACA,QACA,SACA,QACA,QACA,SACA,WACA,QACA,QACA,UACA,WACA,SACA,UACA,SACA,QACA,UACA,UACA,QACA,QACA,WACA,YACA,YACA,UACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,WACA,WACA,YACA,WACA,QACA,OACA,QACA,UACA,SACA,WACA,QACA,YACA,YACA,WACA,YACA,UACA,WACA,UACA,WACA,SACA,YACA,YACA,WACA,YACA,SACA,QACA,YACA,UACA,WACA,YACA,UACA,WACA,QACA,OACA,SACA,YACA,SACA,SACA,QACA,SACA,QACA,QACA,UACA,SACA,UACA,UACA,WACA,UACA,WACA,QACA,SACA,WACA,YACA,UACA,YACA,WACA,YACA,UACA,WACA,SACA,WACA,WACA,SACA,WACA,WACA,WACA,UACA,WACA,UACA,UACA,WACA,SACA,SACA,YACA,SACA,SACA,UACA,QACA,WACA,SACA,QACA,QACA,QACA,WACA,SACA,SACA,WACA,YACA,UACA,UACA,WACA,SACA,UACA,SACA,QACA,SACA,SACA,SACA,QACA,QACA,QACA,SACA,YACA,YACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,OACA,UACA,WACA,WACA,QACA,SACA,WACA,SACA,WACA,WACA,YACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,QACA,WACA,WACA,SACA,SACA,SACA,YACA,UACA,YACA,YACA,SACA,QACA,UACA,QACA,QACA,UACA,WACA,WACA,YACA,UACA,WACA,YACA,YACA,YACA,WACA,WACA,UACA,UACA,QACA,QACA,QACA,SACA,WACA,YACA,SACA,UACA,WACA,WACA,YACA,UACA,QACA,WACA,UACA,YACA,UACA,WACA,SACA,WACA,UACA,WACA,UACA,YACA,UACA,UACA,WACA,QACA,QACA,SACA,YACA,SACA,UACA,SACA,UACA,YACA,UACA,QACA,YACA,WACA,WACA,YACA,QACA,QACA,QACA,YACA,WACA,YACA,YACA,UACA,OACA,SACA,UACA,OACA,SACA,UACA,YACA,YACA,WACA,YACA,UACA,OACA,QACA,UACA,UACA,YACA,SACA,WACA,YACA,QACA,YACA,YACA,UACA,WACA,UACA,WACA,WACA,WACA,SACA,WACA,SACA,UACA,YACA,OACA,SACA,QACA,QACA,QACA,QACA,QACA,YACA,YACA,YACA,UACA,QACA,QACA,SACA,QACA,QACA,YACA,YACA,WACA,UACA,UACA,WACA,YACA,WACA,UACA,YACA,YACA,QACA,QACA,QACA,WACA,UACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,UACA,QACA,QACA,SACA,SACA,SACA,WACA,YACA,QACA,SACA,UACA,SACA,WACA,SACA,SACA,SACA,SACA,WACA,SACA,WACA,SACA,SACA,WACA,YACA,WACA,YACA,SACA,YACA,UACA,WACA,QACA,SACA,QACA,UACA,UACA,UACA,WACA,SACA,QACA,UACA,UACA,SACA,QACA,UACA,WACA,SACA,UACA,YACA,QACA,QACA,UACA,UACA,WACA,QACA,SACA,WACA,SACA,UACA,YACA,UACA,WACA,SACA,QACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,YACA,UACA,WACA,SACA,WACA,UACA,YACA,WACA,YACA,YACA,WACA,SACA,UACA,WACA,YACA,YACA,YACA,UACA,YACA,YACA,UACA,UACA,WACA,YACA,YACA,UACA,WACA,SACA,WACA,WACA,UACA,SACA,SACA,YACA,UACA,YACA,OACA,UACA,SACA,SACA,OACA,WACA,YACA,UACA,SACA,YACA,WACA,QACA,UACA,QACA,WACA,WACA,WACA,SACA,UACA,UACA,UACA,SACA,OACA,SACA,WACA,YACA,SACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,SACA,WACA,SACA,UACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,YACA,SACA,UACA,WACA,UACA,UACA,UACA,UACA,WACA,UACA,YACA,YACA,WACA,SACA,WACA,UACA,YACA,WACA,QACA,UACA,UACA,WACA,YACA,YACA,OACA,YACA,UACA,YACA,OACA,WACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,SACA,UACA,UACA,YACA,YACA,UACA,WACA,WACA,WACA,UACA,WACA,QACA,QACA,SACA,SACA,UACA,UACA,QACA,SACA,QACA,QACA,QACA,WACA,WACA,YACA,WACA,UACA,UACA,WACA,UACA,WACA,WACA,YACA,YACA,QACA,SACA,UACA,UACA,QACA,WACA,SACA,SACA,YACA,UACA,YACA,UACA,SACA,WACA,QACA,OACA,UACA,WACA,UACA,UACA,WACA,UACA,YACA,MACA,UACA,OACA,SACA,SACA,WACA,OACA,QACA,SACA,WACA,QACA,SACA,OACA,SACA,UACA,UACA,UACA,WACA,UACA,WACA,WACA,UACA,UACA,OACA,YACA,SACA,SACA,UACA,QACA,SACA,SACA,WACA,OACA,SACA,QACA,YACA,UACA,QACA,WACA,SACA,WACA,SACA,QACA,SACA,QACA,OACA,OACA,UACA,YACA,OACA,QACA,QACA,WACA,WACA,UACA,UACA,YACA,QACA,SACA,WACA,UACA,UACA,YACA,WACA,WACA,QACA,UACA,QACA,QACA,SACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,SACA,QACA,QACA,QACA,WACA,SACA,SACA,WACA,YACA,SACA,SACA,SACA,WACA,SACA,YACA,SACA,WACA,YACA,YACA,UACA,WACA,OACA,QACA,WACA,WACA,OACA,YACA,UACA,QACA,QACA,QACA,SACA,WACA,UACA,OACA,QACA,UACA,UACA,YACA,YACA,WACA,UACA,OACA,SACA,OACA,OACA,QACA,SACA,UACA,YACA,UACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,OACA,UACA,OACA,SACA,SACA,SACA,UACA,YACA,SACA,SACA,SACA,QACA,UACA,QACA,WACA,UACA,QACA,UACA,YACA,UACA,UACA,WACA,YACA,QACA,UACA,SACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,QACA,QACA,SACA,WACA,WACA,OACA,YACA,WACA,YACA,UACA,QACA,SACA,OACA,UACA,UACA,YACA,SACA,SACA,QACA,WACA,SACA,QACA,WACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,WACA,WACA,UACA,YACA,SACA,WACA,WACA,UACA,QACA,SACA,YACA,WACA,UACA,YACA,UACA,WACA,WACA,UACA,OACA,SACA,WACA,UACA,UACA,UACA,WACA,WACA,SACA,WACA,UACA,UACA,YACA,SACA,WACA,QACA,SACA,QACA,QACA,UACA,QACA,SACA,YACA,UACA,WACA,WACA,YACA,QACA,MACA,QACA,WACA,UACA,UACA,UACA,MACA,UACA,QACA,SACA,WACA,QACA,SACA,UACA,WACA,WACA,YACA,OACA,SACA,UACA,SACA,SACA,OACA,QACA,OACA,MACA,QACA,QACA,QACA,WACA,SACA,YACA,SACA,QACA,QACA,UACA,YACA,OACA,WACA,QACA,QACA,QACA,YACA,UACA,UACA,WACA,SACA,SACA,UACA,SACA,QACA,OACA,QACA,WACA,YACA,QACA,YACA,WACA,SACA,YACA,SACA,YACA,YACA,WACA,UACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,UACA,YACA,WACA,SACA,SACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,UACA,WACA,WACA,YACA,UACA,YACA,YACA,UACA,UACA,SACA,YACA,YACA,UACA,QACA,SACA,UACA,SACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,SACA,YACA,YACA,WACA,UACA,UACA,UACA,UACA,YACA,UACA,YACA,WACA,QACA,YACA,UACA,YACA,SACA,YACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,YACA,YACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,UACA,SACA,YACA,UACA,YACA,WACA,UACA,WACA,UACA,SACA,WACA,SACA,YACA,UACA,WACA,YACA,WACA,YACA,WACA,UACA,YACA,SACA,YACA,YACA,YACA,SACA,WACA,UACA,YACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,SACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,SACA,UACA,WACA,YACA,YACA,WACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,YACA,WACA,UACA,YACA,SACA,SACA,UACA,WACA,UACA,UACA,YACA,YACA,QACA,YACA,YACA,YACA,YACA,YACA,QACA,WACA,YACA,SACA,WACA,OACA,YACA,WACA,WACA,UACA,SACA,YACA,YACA,UACA,UACA,UACA,WACA,WACA,YACA,UACA,SACA,YACA,YACA,YACA,YACA,UACA,WACA,WACA,QACA,YACA,WACA,WACA,WACA,YACA,YACA,UACA,WACA,WACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,UACA,WACA,UACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,UACA,YACA,YACA,WACA,YACA,SACA,WACA,SACA,YACA,WACA,UACA,WACA,WACA,YACA,WACA,YACA,YACA,YACA,YACA,WACA,SACA,YACA,WACA,UACA,WACA,UACA,YACA,YACA,SACA,SACA,YACA,YACA,YACA,WACA,SACA,YACA,YACA,WACA,SACA,YACA,YACA,UACA,SACA,YACA,SACA,WACA,WACA,SACA,SACA,WACA,UACA,WACA,YACA,YACA,UACA,WACA,WACA,YACA,WACA,WACA,SACA,WACA,YACA,SACA,YACA,YACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,SACA,WACA,WACA,SACA,WACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,YACA,UACA,YACA,YACA,WACA,WACA,WACA,SACA,UACA,WACA,YACA,UACA,UACA,YACA,WACA,UACA,WACA,WACA,SACA,QACA,QACA,UACA,WACA,WACA,YACA,SACA,YACA,YACA,YACA,YACA,UACA,YACA,SACA,UACA,WACA,UACA,UACA,WACA,SACA,UACA,WACA,WACA,YACA,WACA,YACA,WACA,WACA,YACA,UACA,WACA,YACA,SACA,WACA,YACA,UACA,QACA,YACA,SACA,WACA,YACA,SACA,UACA,YACA,YACA,YACA,SACA,YACA,WACA,UACA,UACA,YACA,YACA,QACA,SACA,UACA,WACA,YACA,SACA,UACA,UACA,WACA,SACA,SACA,SACA,WACA,YACA,SACA,OACA,QACA,UACA,WACA,UACA,SACA,SACA,UACA,SACA,UACA,WACA,UACA,UACA,WACA,WACA,UACA,SACA,UACA,SACA,WACA,SACA,SACA,UACA,QACA,SACA,WACA,UACA,SACA,SACA,YACA,UACA,SACA,QACA,UACA,OACA,YACA,OACA,QACA,QACA,UACA,UACA,UACA,SACA,SACA,QACA,UACA,SACA,SACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,QACA,SACA,SACA,YACA,QACA,UACA,SACA,SACA,WACA,UACA,YACA,WACA,WACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,SACA,WACA,OACA,QACA,SACA,YACA,SACA,WACA,SACA,WACA,UACA,SACA,YACA,WACA,WACA,YACA,UACA,QACA,QACA,YACA,WACA,UACA,UACA,SACA,QACA,UACA,SACA,YACA,WACA,UACA,OACA,SACA,OACA,UACA,OACA,WACA,YACA,SACA,QACA,OACA,WACA,UACA,QACA,WACA,SACA,UACA,WACA,YACA,WACA,UACA,UACA,YACA,WACA,UACA,UACA,YACA,WACA,SACA,SACA,QACA,QACA,UACA,WACA,QACA,OACA,YACA,UACA,WACA,UACA,UACA,SACA,WACA,UACA,QACA,QACA,WACA,WACA,UACA,WACA,YACA,UACA,YACA,QACA,WACA,WACA,UACA,WACA,QACA,UACA,OACA,WACA,SACA,UACA,UACA,QACA,SACA,UACA,QACA,QACA,SACA,YACA,MACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,OACA,SACA,OACA,UACA,SACA,SACA,QACA,OACA,UACA,SACA,UACA,SACA,WACA,YACA,YACA,WACA,YACA,UACA,SACA,SACA,YACA,UACA,UACA,WACA,YACA,UACA,OACA,UACA,QACA,QACA,WACA,SACA,OACA,WACA,SACA,OACA,QACA,QACA,WACA,QACA,YACA,SACA,QACA,WACA,UACA,QACA,WACA,UACA,WACA,SACA,MACA,OACA,SACA,QACA,SACA,QACA,QACA,YACA,UACA,OACA,OACA,YACA,WACA,UACA,SACA,WACA,WACA,WACA,WACA,SACA,WACA,SACA,YACA,UACA,SACA,YACA,OACA,OACA,QACA,UACA,OACA,OACA,UACA,SACA,WACA,SACA,OACA,QACA,WACA,SACA,OACA,SACA,OACA,OACA,WACA,QACA,UACA,SACA,SACA,WACA,SACA,MACA,OACA,YACA,YACA,YACA,YACA,YACA,UACA,OACA,OACA,SACA,OACA,QACA,OACA,OACA,UACA,UACA,YACA,QACA,YACA,YACA,QACA,QACA,QACA,MACA,UACA,QACA,SACA,WACA,UACA,WACA,SACA,UACA,UACA,UACA,UACA,QACA,UACA,UACA,YACA,UACA,WACA,UACA,YACA,UACA,OACA,QACA,QACA,MACA,UACA,UACA,OACA,OACA,OACA,WACA,WACA,SACA,WACA,QACA,UACA,OACA,MACA,YACA,UACA,QACA,MACA,SACA,QACA,QACA,OACA,SACA,SACA,OACA,QACA,MACA,UACA,QACA,MACA,WACA,OACA,YACA,QACA,YACA,UACA,UACA,QACA,OACA,MACA,SACA,SACA,OACA,SACA,YACA,YACA,UACA,S,+FCjmPF,iBAEA,MAAaC,UAAgB,EAAAC,aAQ3BvmE,YAAY2S,EAAY,MACtB0W,MAAM1W,GACM,MAARA,IAGJ/R,KAAKi2C,eAAiBj2C,KAAK4lE,oBAAoB,kBAC/C5lE,KAAKykB,MAAQzkB,KAAK4lE,oBAAoB,SACtC5lE,KAAK4f,OAAS5f,KAAK4lE,oBAAoB,UACvC5lE,KAAKu2C,SAAWv2C,KAAK4lE,oBAAoB,YACzC5lE,KAAKy2C,QAAUz2C,KAAK4lE,oBAAoB,WACxC5lE,KAAK68B,KAAO78B,KAAK4lE,oBAAoB,UAlBzC,a,+FCAA,iBAEA,MAAaC,UAAiB,EAAAF,aAM5BvmE,YAAY2S,EAAY,MACtB0W,MAAM1W,GACM,MAARA,IAGJ/R,KAAKoB,KAAOpB,KAAK4lE,oBAAoB,QACrC5lE,KAAKE,KAAOF,KAAK4lE,oBAAoB,QACrC5lE,KAAKI,MAAQJ,KAAK4lE,oBAAoB,SACtC5lE,KAAKsB,SAAWtB,KAAK4lE,oBAAoB,cAd7C,c,mGCJA,iBAEA,MAAaE,UAAoB,EAAAH,aAoB/BvmE,YAAY2S,EAAY,MACtB0W,MAAM1W,GACM,MAARA,IAGJ/R,KAAKyH,MAAQzH,KAA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","sources":["webpack://@bitwarden/web-vault/webpack/runtime/chunk loaded","webpack://@bitwarden/web-vault/./jslib/angular/src/components/add-edit-custom-fields.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/add-edit.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/attachments.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/avatar.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/callout.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/callout.component.html","webpack://@bitwarden/web-vault/./jslib/angular/src/components/captchaProtected.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/change-password.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/ciphers.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/collections.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/export-scope-callout.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/export-scope-callout.component.html","webpack://@bitwarden/web-vault/./jslib/angular/src/components/export.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/folder-add-edit.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/generator.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/groupings.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/hint.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/icon.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/icon.component.html","webpack://@bitwarden/web-vault/./jslib/angular/src/components/lock.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/login.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/modal/dynamic-modal.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/modal/modal-injector.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/modal/modal.ref.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/password-generator-history.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/password-reprompt.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/register.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/remove-password.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/send/add-edit.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/send/efflux-dates.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/send/send.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/set-password.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/settings/vault-timeout-input.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/share.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/sso.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/toastr.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/two-factor-options.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/two-factor.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/update-password.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/update-temp-password.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/verify-master-password.component.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/components/verify-master-password.component.html","webpack://@bitwarden/web-vault/./jslib/angular/src/directives/a11y-title.directive.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/directives/api-action.directive.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/directives/autofocus.directive.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/directives/blur-click.directive.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/directives/fallback-src.directive.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/directives/input-verbatim.directive.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/directives/not-premium.directive.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/directives/select-copy.directive.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/directives/stop-click.directive.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/directives/stop-prop.directive.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/directives/true-false-value.directive.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/jslib.module.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/pipes/color-password.pipe.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/pipes/i18n.pipe.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/pipes/search.pipe.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/pipes/user-name.pipe.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/services/auth-guard.service.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/services/broadcaster.service.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/services/jslib-services.module.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/services/lock-guard.service.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/services/modal.service.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/services/passwordReprompt.service.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/services/unauth-guard.service.ts","webpack://@bitwarden/web-vault/./jslib/angular/src/services/validation.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/api.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/appId.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/audit.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/auth.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/broadcaster.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/cipher.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/collection.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/crypto.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/cryptoFunction.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/environment.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/event.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/export.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/fileUpload.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/folder.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/i18n.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/import.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/keyConnector.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/log.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/messaging.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/notifications.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/organization.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/passwordGeneration.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/passwordReprompt.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/platformUtils.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/policy.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/provider.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/search.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/send.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/settings.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/state.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/stateMigration.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/storage.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/sync.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/token.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/totp.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/twoFactor.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/userVerification.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/usernameGeneration.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/abstractions/vaultTimeout.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/authenticationType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/cipherRepromptType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/cipherType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/clientType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/deviceType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/emergencyAccessStatusType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/emergencyAccessType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/encryptionType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/eventType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/fieldType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/fileUploadType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/hashPurpose.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/htmlStorageLocation.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/importOptions.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/kdfType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/keySuffixOptions.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/linkedIdType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/logLevelType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/notificationType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/organizationUserStatusType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/organizationUserType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/paymentMethodType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/permissions.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/planSponsorshipType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/planType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/policyType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/productType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/providerUserStatusType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/providerUserType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/secureNoteType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/sendType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/ssoEnums.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/stateVersion.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/storageLocation.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/themeType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/transactionType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/twoFactorProviderType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/uriMatchType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/enums/verificationType.ts","webpack://@bitwarden/web-vault/./jslib/common/src/factories/accountFactory.ts","webpack://@bitwarden/web-vault/./jslib/common/src/factories/globalStateFactory.ts","webpack://@bitwarden/web-vault/./jslib/common/src/factories/stateFactory.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/ascendoCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/avastCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/avastJsonImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/aviraCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/baseImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/bitwardenCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/bitwardenJsonImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/bitwardenPasswordProtectedImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/blackBerryCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/blurCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/buttercupCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/chromeCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/clipperzHtmlImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/codebookCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/dashlaneImporters/dashlaneCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/dashlaneImporters/dashlaneJsonImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/encryptrCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/enpassCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/enpassJsonImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/firefoxCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/fsecureFskImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/gnomeJsonImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/importError.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/kasperskyTxtImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/keepass2XmlImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/keepassxCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/keeperImporters/keeperCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/lastpassCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/logMeOnceCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/meldiumCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/msecureCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/mykiCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/nordpassCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/onepasswordImporters/cipherImportContext.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/onepasswordImporters/onepassword1PifImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/onepasswordImporters/onepassword1PuxImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/onepasswordImporters/onepasswordCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/onepasswordImporters/onepasswordMacCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/onepasswordImporters/onepasswordWinCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/onepasswordImporters/types/onepassword1PuxImporterTypes.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/padlockCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/passkeepCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/passmanJsonImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/passpackCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/passwordAgentCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/passwordBossJsonImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/passwordDragonXmlImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/passwordSafeXmlImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/passwordWalletTxtImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/rememBearCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/roboformCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/safariCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/safeInCloudXmlImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/saferpassCsvImport.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/secureSafeCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/splashIdCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/stickyPasswordXmlImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/truekeyCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/upmCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/yotiCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/importers/zohoVaultCsvImporter.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/captcha_iframe.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/iframe_component.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/linkedFieldOption.decorator.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/logInStrategies/apiLogin.strategy.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/logInStrategies/logIn.strategy.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/logInStrategies/passwordLogin.strategy.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/logInStrategies/ssoLogin.strategy.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/sequentialize.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/serviceUtils.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/throttle.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/tldjs.noop.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/utils.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/webauthn_iframe.ts","webpack://@bitwarden/web-vault/./jslib/common/src/misc/wordlist.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/api/cardApi.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/api/fieldApi.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/api/identityApi.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/api/loginApi.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/api/loginUriApi.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/api/permissionsApi.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/api/secureNoteApi.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/api/sendFileApi.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/api/sendTextApi.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/api/ssoConfigApi.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/attachmentData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/cardData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/cipherData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/collectionData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/eventData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/fieldData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/folderData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/identityData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/loginData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/loginUriData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/organizationData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/passwordHistoryData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/policyData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/providerData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/secureNoteData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/sendData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/sendFileData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/data/sendTextData.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/account.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/attachment.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/authResult.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/card.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/cipher.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/collection.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/decryptParameters.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/domainBase.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/encArrayBuffer.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/encString.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/encryptedObject.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/environmentUrls.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/field.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/folder.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/generatedPasswordHistory.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/globalState.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/identity.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/importResult.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/logInCredentials.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/login.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/loginUri.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/masterPasswordPolicyOptions.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/organization.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/password.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/passwordGeneratorPolicyOptions.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/policy.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/provider.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/resetPasswordPolicyOptions.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/secureNote.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/send.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/sendAccess.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/sendFile.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/sendText.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/sortedCiphersCache.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/state.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/symmetricCryptoKey.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/treeNode.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/domain/windowState.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/export/card.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/export/cipher.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/export/cipherWithIds.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/export/collection.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/export/collectionWithId.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/export/event.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/export/field.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/export/folder.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/export/folderWithId.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/export/identity.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/export/login.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/export/loginUri.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/export/secureNote.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/account/setKeyConnectorKeyRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/account/verifyOTPRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/attachmentRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/bitPayInvoiceRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/cipherBulkDeleteRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/cipherBulkMoveRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/cipherBulkRestoreRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/cipherBulkShareRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/cipherCollectionsRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/cipherCreateRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/cipherRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/cipherShareRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/cipherWithIdRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/collectionRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/deleteRecoverRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/deviceRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/emailRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/emailTokenRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/emergencyAccessAcceptRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/emergencyAccessConfirmRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/emergencyAccessInviteRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/emergencyAccessPasswordRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/emergencyAccessUpdateRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/eventRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/folderRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/folderWithIdRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/groupRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/identityToken/apiTokenRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/identityToken/passwordTokenRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/identityToken/ssoTokenRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/identityToken/tokenRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/identityToken/tokenRequestTwoFactor.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/importCiphersRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/importOrganizationCiphersRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/kdfRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/keyConnectorUserKeyRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/keysRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/kvpRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organization/organizationSponsorshipRedeemRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationCreateRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationKeysRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationSubscriptionUpdateRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationTaxInfoUpdateRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationUpdateRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationUpgradeRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationUserAcceptRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationUserBulkConfirmRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationUserBulkRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationUserConfirmRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationUserInviteRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationUserResetPasswordEnrollmentRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationUserResetPasswordRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationUserUpdateGroupsRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/organizationUserUpdateRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/passwordHintRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/passwordRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/paymentRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/policyRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/preloginRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/provider/providerOrganizationCreateRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/referenceEventRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/registerRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/secretVerificationRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/selectionReadOnlyRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/sendAccessRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/sendRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/sendWithIdRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/setPasswordRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/storageRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/taxInfoUpdateRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/twoFactorEmailRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/twoFactorProviderRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/twoFactorRecoveryRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/updateDomainsRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/updateKeyRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/updateProfileRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/updateTempPasswordRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/updateTwoFactorAuthenticatorRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/updateTwoFactorDuoRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/updateTwoFactorEmailRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/updateTwoFactorWebAuthnDeleteRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/updateTwoFactorWebAuthnRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/updateTwoFactorYubioOtpRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/verifyBankRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/verifyDeleteRecoverRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/verifyEmailRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/apiKeyResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/attachmentResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/attachmentUploadDataResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/baseResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/billingResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/breachAccountResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/cipherResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/collectionResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/domainsResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/emergencyAccessResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/errorResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/eventResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/folderResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/globalDomainResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/groupResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/identityCaptchaResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/identityTokenResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/identityTwoFactorResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/keyConnectorUserKeyResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/keysResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/listResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/notificationResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/organization/organizationSsoResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/organizationAutoEnrollStatusResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/organizationKeysResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/organizationResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/organizationSubscriptionResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/organizationUserBulkPublicKeyResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/organizationUserBulkResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/organizationUserResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/passwordHistoryResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/paymentResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/planResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/policyResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/preloginResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/profileOrganizationResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/profileProviderOrganizationResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/profileProviderResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/profileResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/provider/providerOrganizationResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/provider/providerResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/provider/providerUserBulkPublicKeyResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/provider/providerUserBulkResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/provider/providerUserResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/selectionReadOnlyResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/sendAccessResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/sendFileDownloadDataResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/sendFileUploadDataResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/sendResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/subscriptionResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/syncResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/taxInfoResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/taxRateResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/twoFactorAuthenticatorResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/twoFactorDuoResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/twoFactorEmailResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/twoFactorProviderResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/twoFactorRescoverResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/twoFactorWebAuthnResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/twoFactorYubiKeyResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/response/userKeyResponse.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/attachmentView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/cardView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/cipherView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/collectionView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/eventView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/fieldView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/folderView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/identityView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/itemView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/loginUriView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/loginView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/passwordHistoryView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/secureNoteView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/sendAccessView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/sendFileView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/sendTextView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/sendView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/api.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/appId.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/audit.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/auth.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/azureFileUpload.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/bitwardenFileUpload.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/broadcaster.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/cipher.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/collection.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/consoleLog.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/container.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/crypto.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/environment.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/event.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/export.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/fileUpload.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/folder.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/i18n.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/import.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/keyConnector.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/notifications.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/organization.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/passwordGeneration.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/policy.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/provider.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/search.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/send.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/settings.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/state.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/stateMigration.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/sync.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/token.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/totp.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/twoFactor.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/userVerification.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/usernameGeneration.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/vaultTimeout.service.ts","webpack://@bitwarden/web-vault/./jslib/common/src/services/webCryptoFunction.service.ts","webpack://@bitwarden/web-vault/./jslib/components/src/badge/badge.component.ts","webpack://@bitwarden/web-vault/./jslib/components/src/badge/badge.module.ts","webpack://@bitwarden/web-vault/./jslib/components/src/badge/index.ts","webpack://@bitwarden/web-vault/./jslib/components/src/button/button.component.ts","webpack://@bitwarden/web-vault/./jslib/components/src/button/button.module.ts","webpack://@bitwarden/web-vault/./jslib/components/src/button/index.ts","webpack://@bitwarden/web-vault/./jslib/components/src/callout/callout.component.ts","webpack://@bitwarden/web-vault/./jslib/components/src/callout/callout.component.html","webpack://@bitwarden/web-vault/./jslib/components/src/callout/callout.module.ts","webpack://@bitwarden/web-vault/./jslib/components/src/callout/index.ts","webpack://@bitwarden/web-vault/./jslib/components/src/index.ts","webpack://@bitwarden/web-vault/./src/abstractions/state.service.ts","webpack://@bitwarden/web-vault/./src/app/accounts/accept-emergency.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/accept-emergency.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/accept-organization.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/accept-organization.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/hint.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/hint.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/lock.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/lock.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/login.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/login.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/recover-delete.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-delete.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/recover-two-factor.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-two-factor.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/register.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/register.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/remove-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/remove-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/set-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/set-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/sso.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/sso.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor-options.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor-options.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/update-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/update-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/update-temp-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/update-temp-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/verify-email-token.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/verify-email-token.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/verify-recover-delete.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/verify-recover-delete.component.html","webpack://@bitwarden/web-vault/./src/app/app.component.ts","webpack://@bitwarden/web-vault/./src/app/app.component.html","webpack://@bitwarden/web-vault/./src/app/app.module.ts","webpack://@bitwarden/web-vault/./src/app/common/base.accept.component.ts","webpack://@bitwarden/web-vault/./src/app/common/base.events.component.ts","webpack://@bitwarden/web-vault/./src/app/common/base.people.component.ts","webpack://@bitwarden/web-vault/./src/app/components/nested-checkbox.component.ts","webpack://@bitwarden/web-vault/./src/app/components/nested-checkbox.component.html","webpack://@bitwarden/web-vault/./src/app/components/password-reprompt.component.ts","webpack://@bitwarden/web-vault/./src/app/components/password-reprompt.component.html","webpack://@bitwarden/web-vault/./src/app/components/password-strength.component.ts","webpack://@bitwarden/web-vault/./src/app/components/password-strength.component.html","webpack://@bitwarden/web-vault/./src/app/components/premium-badge.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/footer.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/footer.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/frontend-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/frontend-layout.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/navbar.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/navbar.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/organization-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/organization-layout.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/user-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/user-layout.component.html","webpack://@bitwarden/web-vault/./src/app/main.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-remove.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-remove.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-status.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-status.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collection-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collection-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collections.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collections.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-events.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-events.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-users.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-users.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/events.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/events.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/group-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/group-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/groups.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/groups.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/manage.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/manage.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/people.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/people.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/policies.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/policies.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/policy-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/policy-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/reset-password.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/reset-password.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-groups.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-groups.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/base-policy.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/disable-send.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/disable-send.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/master-password.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/master-password.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/password-generator.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/password-generator.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/personal-ownership.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/personal-ownership.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/require-sso.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/require-sso.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/reset-password.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/reset-password.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/send-options.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/send-options.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/single-org.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/single-org.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/two-factor-authentication.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/two-factor-authentication.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/account.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/account.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/adjust-subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/adjust-subscription.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/change-plan.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/change-plan.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/delete-organization.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/delete-organization.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/download-license.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/download-license.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-billing.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/user-billing.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-subscription.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/settings.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/settings.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/two-factor-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-setup.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/families-for-enterprise-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/families-for-enterprise-setup.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/export.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/export.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/exposed-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/exposed-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/import.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/import.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/inactive-two-factor-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/inactive-two-factor-report.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/reused-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/reused-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/tools.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/tools/tools.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/unsecured-websites-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/unsecured-websites-report.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/weak-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/weak-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/attachments.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/ciphers.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/ciphers.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/collections.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/collections.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/groupings.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/groupings.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault.component.html","webpack://@bitwarden/web-vault/./src/app/oss-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/oss.module.ts","webpack://@bitwarden/web-vault/./src/app/providers/providers.component.ts","webpack://@bitwarden/web-vault/./src/app/providers/providers.component.html","webpack://@bitwarden/web-vault/./src/app/reports/breach-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/breach-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/cipher-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/exposed-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/inactive-two-factor-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/report-card.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/report-card.component.html","webpack://@bitwarden/web-vault/./src/app/reports/report-list.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/report-list.component.html","webpack://@bitwarden/web-vault/./src/app/reports/reports.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/reports.component.html","webpack://@bitwarden/web-vault/./src/app/reports/reports.module.ts","webpack://@bitwarden/web-vault/./src/app/reports/reused-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/unsecured-websites-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/weak-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/send/access.component.ts","webpack://@bitwarden/web-vault/./src/app/send/access.component.html","webpack://@bitwarden/web-vault/./src/app/send/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/send/add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/send/efflux-dates.component.ts","webpack://@bitwarden/web-vault/./src/app/send/efflux-dates.component.html","webpack://@bitwarden/web-vault/./src/app/send/send.component.ts","webpack://@bitwarden/web-vault/./src/app/send/send.component.html","webpack://@bitwarden/web-vault/./src/app/services/event.service.ts","webpack://@bitwarden/web-vault/./src/app/services/modal.service.ts","webpack://@bitwarden/web-vault/./src/app/services/organization-guard.service.ts","webpack://@bitwarden/web-vault/./src/app/services/organization-type-guard.service.ts","webpack://@bitwarden/web-vault/./src/app/services/policy-list.service.ts","webpack://@bitwarden/web-vault/./src/app/services/router.service.ts","webpack://@bitwarden/web-vault/./src/app/services/services.module.ts","webpack://@bitwarden/web-vault/./src/app/settings/account.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/account.component.html","webpack://@bitwarden/web-vault/./src/app/settings/add-credit.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/add-credit.component.html","webpack://@bitwarden/web-vault/./src/app/settings/adjust-payment.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/adjust-payment.component.html","webpack://@bitwarden/web-vault/./src/app/settings/adjust-storage.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/adjust-storage.component.html","webpack://@bitwarden/web-vault/./src/app/settings/api-key.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/api-key.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-email.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-email.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-password.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-password.component.html","webpack://@bitwarden/web-vault/./src/app/settings/create-organization.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/create-organization.component.html","webpack://@bitwarden/web-vault/./src/app/settings/deauthorize-sessions.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/deauthorize-sessions.component.html","webpack://@bitwarden/web-vault/./src/app/settings/delete-account.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/delete-account.component.html","webpack://@bitwarden/web-vault/./src/app/settings/domain-rules.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/domain-rules.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-takeover.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-takeover.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-view.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-view.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/link-sso.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/link-sso.component.html","webpack://@bitwarden/web-vault/./src/app/settings/options.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/options.component.html","webpack://@bitwarden/web-vault/./src/app/settings/organization-plans.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/organization-plans.component.html","webpack://@bitwarden/web-vault/./src/app/settings/organizations.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/organizations.component.html","webpack://@bitwarden/web-vault/./src/app/settings/payment.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/payment.component.html","webpack://@bitwarden/web-vault/./src/app/settings/premium.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/premium.component.html","webpack://@bitwarden/web-vault/./src/app/settings/profile.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/profile.component.html","webpack://@bitwarden/web-vault/./src/app/settings/purge-vault.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/purge-vault.component.html","webpack://@bitwarden/web-vault/./src/app/settings/settings.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/settings.component.html","webpack://@bitwarden/web-vault/./src/app/settings/sponsored-families.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/sponsored-families.component.html","webpack://@bitwarden/web-vault/./src/app/settings/sponsoring-org-row.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/sponsoring-org-row.component.html","webpack://@bitwarden/web-vault/./src/app/settings/tax-info.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/tax-info.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-authenticator.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-authenticator.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-base.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-duo.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-duo.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-email.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-email.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-recovery.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-recovery.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-verify.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-verify.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-webauthn.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-webauthn.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-yubikey.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-yubikey.component.html","webpack://@bitwarden/web-vault/./src/app/settings/update-key.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/update-key.component.html","webpack://@bitwarden/web-vault/./src/app/settings/update-license.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/update-license.component.html","webpack://@bitwarden/web-vault/./src/app/settings/user-billing.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/user-subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/user-subscription.component.html","webpack://@bitwarden/web-vault/./src/app/settings/vault-timeout-input.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/vault-timeout-input.component.html","webpack://@bitwarden/web-vault/./src/app/settings/verify-email.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/verify-email.component.html","webpack://@bitwarden/web-vault/./src/app/tools/export.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/generator.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/generator.component.html","webpack://@bitwarden/web-vault/./src/app/tools/import.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/password-generator-history.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/password-generator-history.component.html","webpack://@bitwarden/web-vault/./src/app/tools/tools.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/tools.component.html","webpack://@bitwarden/web-vault/./src/app/vault/add-edit-custom-fields.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/add-edit-custom-fields.component.html","webpack://@bitwarden/web-vault/./src/app/vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-actions.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-actions.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-delete.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-delete.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-move.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-move.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-restore.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-restore.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-share.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-share.component.html","webpack://@bitwarden/web-vault/./src/app/vault/ciphers.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/collections.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/folder-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/folder-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/vault/groupings.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/share.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/share.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault.component.html","webpack://@bitwarden/web-vault/./src/app/wildcard-routing.module.ts","webpack://@bitwarden/web-vault/./src/models/account.ts","webpack://@bitwarden/web-vault/./src/models/globalState.ts","webpack://@bitwarden/web-vault/./src/services/broadcasterMessaging.service.ts","webpack://@bitwarden/web-vault/./src/services/htmlStorage.service.ts","webpack://@bitwarden/web-vault/./src/services/i18n.service.ts","webpack://@bitwarden/web-vault/./src/services/memoryStorage.service.ts","webpack://@bitwarden/web-vault/./src/services/passwordReprompt.service.ts","webpack://@bitwarden/web-vault/./src/services/state.service.ts","webpack://@bitwarden/web-vault/./src/services/stateMigration.service.ts","webpack://@bitwarden/web-vault/./src/services/webPlatformUtils.service.ts","webpack://@bitwarden/web-vault/./src/scss/export.module.scss","webpack://@bitwarden/web-vault/webpack/bootstrap","webpack://@bitwarden/web-vault/webpack/runtime/compat get default export","webpack://@bitwarden/web-vault/webpack/runtime/define property getters","webpack://@bitwarden/web-vault/webpack/runtime/global","webpack://@bitwarden/web-vault/webpack/runtime/hasOwnProperty shorthand","webpack://@bitwarden/web-vault/webpack/runtime/make namespace object","webpack://@bitwarden/web-vault/webpack/runtime/node module decorator","webpack://@bitwarden/web-vault/webpack/runtime/jsonp chunk loading","webpack://@bitwarden/web-vault/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","import { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport { Directive, Input, OnChanges, SimpleChanges } from \"@angular/core\";\n\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { EventType } from \"jslib-common/enums/eventType\";\nimport { FieldType } from \"jslib-common/enums/fieldType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\nimport { FieldView } from \"jslib-common/models/view/fieldView\";\n\n@Directive()\nexport class AddEditCustomFieldsComponent implements OnChanges {\n @Input() cipher: CipherView;\n @Input() thisCipherType: CipherType;\n @Input() editMode: boolean;\n\n addFieldType: FieldType = FieldType.Text;\n addFieldTypeOptions: any[];\n addFieldLinkedTypeOption: any;\n linkedFieldOptions: any[] = [];\n\n cipherType = CipherType;\n fieldType = FieldType;\n eventType = EventType;\n\n constructor(private i18nService: I18nService, private eventService: EventService) {\n this.addFieldTypeOptions = [\n { name: i18nService.t(\"cfTypeText\"), value: FieldType.Text },\n { name: i18nService.t(\"cfTypeHidden\"), value: FieldType.Hidden },\n { name: i18nService.t(\"cfTypeBoolean\"), value: FieldType.Boolean },\n ];\n this.addFieldLinkedTypeOption = {\n name: this.i18nService.t(\"cfTypeLinked\"),\n value: FieldType.Linked,\n };\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.thisCipherType != null) {\n this.setLinkedFieldOptions();\n\n if (!changes.thisCipherType.firstChange) {\n this.resetCipherLinkedFields();\n }\n }\n }\n\n addField() {\n if (this.cipher.fields == null) {\n this.cipher.fields = [];\n }\n\n const f = new FieldView();\n f.type = this.addFieldType;\n f.newField = true;\n\n if (f.type === FieldType.Linked) {\n f.linkedId = this.linkedFieldOptions[0].value;\n }\n\n this.cipher.fields.push(f);\n }\n\n removeField(field: FieldView) {\n const i = this.cipher.fields.indexOf(field);\n if (i > -1) {\n this.cipher.fields.splice(i, 1);\n }\n }\n\n toggleFieldValue(field: FieldView) {\n const f = field as any;\n f.showValue = !f.showValue;\n if (this.editMode && f.showValue) {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipher.id);\n }\n }\n\n trackByFunction(index: number, item: any) {\n return index;\n }\n\n drop(event: CdkDragDrop) {\n moveItemInArray(this.cipher.fields, event.previousIndex, event.currentIndex);\n }\n\n private setLinkedFieldOptions() {\n if (this.cipher.linkedFieldOptions == null) {\n return;\n }\n\n const options: any = [];\n this.cipher.linkedFieldOptions.forEach((linkedFieldOption, id) =>\n options.push({ name: this.i18nService.t(linkedFieldOption.i18nKey), value: id })\n );\n this.linkedFieldOptions = options.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n\n private resetCipherLinkedFields() {\n if (this.cipher.fields == null || this.cipher.fields.length === 0) {\n return;\n }\n\n // Delete any Linked custom fields if the item type does not support them\n if (this.cipher.linkedFieldOptions == null) {\n this.cipher.fields = this.cipher.fields.filter((f) => f.type !== FieldType.Linked);\n return;\n }\n\n this.cipher.fields\n .filter((f) => f.type === FieldType.Linked)\n .forEach((f) => (f.linkedId = this.linkedFieldOptions[0].value));\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherRepromptType } from \"jslib-common/enums/cipherRepromptType\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { EventType } from \"jslib-common/enums/eventType\";\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { SecureNoteType } from \"jslib-common/enums/secureNoteType\";\nimport { UriMatchType } from \"jslib-common/enums/uriMatchType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { CardView } from \"jslib-common/models/view/cardView\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\nimport { FolderView } from \"jslib-common/models/view/folderView\";\nimport { IdentityView } from \"jslib-common/models/view/identityView\";\nimport { LoginUriView } from \"jslib-common/models/view/loginUriView\";\nimport { LoginView } from \"jslib-common/models/view/loginView\";\nimport { SecureNoteView } from \"jslib-common/models/view/secureNoteView\";\n\n@Directive()\nexport class AddEditComponent implements OnInit {\n @Input() cloneMode = false;\n @Input() folderId: string = null;\n @Input() cipherId: string;\n @Input() type: CipherType;\n @Input() collectionIds: string[];\n @Input() organizationId: string = null;\n @Output() onSavedCipher = new EventEmitter();\n @Output() onDeletedCipher = new EventEmitter();\n @Output() onRestoredCipher = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n @Output() onEditAttachments = new EventEmitter();\n @Output() onShareCipher = new EventEmitter();\n @Output() onEditCollections = new EventEmitter();\n @Output() onGeneratePassword = new EventEmitter();\n @Output() onGenerateUsername = new EventEmitter();\n\n editMode = false;\n cipher: CipherView;\n folders: FolderView[];\n collections: CollectionView[] = [];\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n restorePromise: Promise;\n checkPasswordPromise: Promise;\n showPassword = false;\n showCardNumber = false;\n showCardCode = false;\n cipherType = CipherType;\n typeOptions: any[];\n cardBrandOptions: any[];\n cardExpMonthOptions: any[];\n identityTitleOptions: any[];\n uriMatchOptions: any[];\n ownershipOptions: any[] = [];\n autofillOnPageLoadOptions: any[];\n currentDate = new Date();\n allowPersonal = true;\n reprompt = false;\n canUseReprompt = true;\n\n protected writeableCollections: CollectionView[];\n private previousCipherId: string;\n\n constructor(\n protected cipherService: CipherService,\n protected folderService: FolderService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected auditService: AuditService,\n protected stateService: StateService,\n protected collectionService: CollectionService,\n protected messagingService: MessagingService,\n protected eventService: EventService,\n protected policyService: PolicyService,\n private logService: LogService,\n protected passwordRepromptService: PasswordRepromptService,\n private organizationService: OrganizationService\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"typeLogin\"), value: CipherType.Login },\n { name: i18nService.t(\"typeCard\"), value: CipherType.Card },\n { name: i18nService.t(\"typeIdentity\"), value: CipherType.Identity },\n { name: i18nService.t(\"typeSecureNote\"), value: CipherType.SecureNote },\n ];\n this.cardBrandOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: \"Visa\", value: \"Visa\" },\n { name: \"Mastercard\", value: \"Mastercard\" },\n { name: \"American Express\", value: \"Amex\" },\n { name: \"Discover\", value: \"Discover\" },\n { name: \"Diners Club\", value: \"Diners Club\" },\n { name: \"JCB\", value: \"JCB\" },\n { name: \"Maestro\", value: \"Maestro\" },\n { name: \"UnionPay\", value: \"UnionPay\" },\n { name: i18nService.t(\"other\"), value: \"Other\" },\n ];\n this.cardExpMonthOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: \"01 - \" + i18nService.t(\"january\"), value: \"1\" },\n { name: \"02 - \" + i18nService.t(\"february\"), value: \"2\" },\n { name: \"03 - \" + i18nService.t(\"march\"), value: \"3\" },\n { name: \"04 - \" + i18nService.t(\"april\"), value: \"4\" },\n { name: \"05 - \" + i18nService.t(\"may\"), value: \"5\" },\n { name: \"06 - \" + i18nService.t(\"june\"), value: \"6\" },\n { name: \"07 - \" + i18nService.t(\"july\"), value: \"7\" },\n { name: \"08 - \" + i18nService.t(\"august\"), value: \"8\" },\n { name: \"09 - \" + i18nService.t(\"september\"), value: \"9\" },\n { name: \"10 - \" + i18nService.t(\"october\"), value: \"10\" },\n { name: \"11 - \" + i18nService.t(\"november\"), value: \"11\" },\n { name: \"12 - \" + i18nService.t(\"december\"), value: \"12\" },\n ];\n this.identityTitleOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: i18nService.t(\"mr\"), value: i18nService.t(\"mr\") },\n { name: i18nService.t(\"mrs\"), value: i18nService.t(\"mrs\") },\n { name: i18nService.t(\"ms\"), value: i18nService.t(\"ms\") },\n { name: i18nService.t(\"dr\"), value: i18nService.t(\"dr\") },\n ];\n this.uriMatchOptions = [\n { name: i18nService.t(\"defaultMatchDetection\"), value: null },\n { name: i18nService.t(\"baseDomain\"), value: UriMatchType.Domain },\n { name: i18nService.t(\"host\"), value: UriMatchType.Host },\n { name: i18nService.t(\"startsWith\"), value: UriMatchType.StartsWith },\n { name: i18nService.t(\"regEx\"), value: UriMatchType.RegularExpression },\n { name: i18nService.t(\"exact\"), value: UriMatchType.Exact },\n { name: i18nService.t(\"never\"), value: UriMatchType.Never },\n ];\n this.autofillOnPageLoadOptions = [\n { name: i18nService.t(\"autoFillOnPageLoadUseDefault\"), value: null },\n { name: i18nService.t(\"autoFillOnPageLoadYes\"), value: true },\n { name: i18nService.t(\"autoFillOnPageLoadNo\"), value: false },\n ];\n }\n\n async ngOnInit() {\n await this.init();\n }\n\n async init() {\n if (this.ownershipOptions.length) {\n this.ownershipOptions = [];\n }\n if (await this.policyService.policyAppliesToUser(PolicyType.PersonalOwnership)) {\n this.allowPersonal = false;\n } else {\n const myEmail = await this.stateService.getEmail();\n this.ownershipOptions.push({ name: myEmail, value: null });\n }\n\n const orgs = await this.organizationService.getAll();\n orgs.sort(Utils.getSortFunction(this.i18nService, \"name\")).forEach((o) => {\n if (o.enabled && o.status === OrganizationUserStatusType.Confirmed) {\n this.ownershipOptions.push({ name: o.name, value: o.id });\n }\n });\n if (!this.allowPersonal) {\n this.organizationId = this.ownershipOptions[0].value;\n }\n\n this.writeableCollections = await this.loadCollections();\n\n this.canUseReprompt = await this.passwordRepromptService.enabled();\n }\n\n async load() {\n this.editMode = this.cipherId != null;\n if (this.editMode) {\n this.editMode = true;\n if (this.cloneMode) {\n this.cloneMode = true;\n this.title = this.i18nService.t(\"addItem\");\n } else {\n this.title = this.i18nService.t(\"editItem\");\n }\n } else {\n this.title = this.i18nService.t(\"addItem\");\n }\n\n const addEditCipherInfo: any = await this.stateService.getAddEditCipherInfo();\n if (addEditCipherInfo != null) {\n this.cipher = addEditCipherInfo.cipher;\n this.collectionIds = addEditCipherInfo.collectionIds;\n }\n await this.stateService.setAddEditCipherInfo(null);\n\n if (this.cipher == null) {\n if (this.editMode) {\n const cipher = await this.loadCipher();\n this.cipher = await cipher.decrypt();\n\n // Adjust Cipher Name if Cloning\n if (this.cloneMode) {\n this.cipher.name += \" - \" + this.i18nService.t(\"clone\");\n // If not allowing personal ownership, update cipher's org Id to prompt downstream changes\n if (this.cipher.organizationId == null && !this.allowPersonal) {\n this.cipher.organizationId = this.organizationId;\n }\n }\n } else {\n this.cipher = new CipherView();\n this.cipher.organizationId = this.organizationId == null ? null : this.organizationId;\n this.cipher.folderId = this.folderId;\n this.cipher.type = this.type == null ? CipherType.Login : this.type;\n this.cipher.login = new LoginView();\n this.cipher.login.uris = [new LoginUriView()];\n this.cipher.card = new CardView();\n this.cipher.identity = new IdentityView();\n this.cipher.secureNote = new SecureNoteView();\n this.cipher.secureNote.type = SecureNoteType.Generic;\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n if (this.cipher != null && (!this.editMode || addEditCipherInfo != null || this.cloneMode)) {\n await this.organizationChanged();\n if (\n this.collectionIds != null &&\n this.collectionIds.length > 0 &&\n this.collections.length > 0\n ) {\n this.collections.forEach((c) => {\n if (this.collectionIds.indexOf(c.id) > -1) {\n (c as any).checked = true;\n }\n });\n }\n }\n\n this.folders = await this.folderService.getAllDecrypted();\n\n if (this.editMode && this.previousCipherId !== this.cipherId) {\n this.eventService.collect(EventType.Cipher_ClientViewed, this.cipherId);\n }\n this.previousCipherId = this.cipherId;\n this.reprompt = this.cipher.reprompt !== CipherRepromptType.None;\n }\n\n async submit(): Promise {\n if (this.cipher.isDeleted) {\n return this.restore();\n }\n\n if (this.cipher.name == null || this.cipher.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n if (\n (!this.editMode || this.cloneMode) &&\n !this.allowPersonal &&\n this.cipher.organizationId == null\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"personalOwnershipSubmitError\")\n );\n return false;\n }\n\n if (\n (!this.editMode || this.cloneMode) &&\n this.cipher.type === CipherType.Login &&\n this.cipher.login.uris != null &&\n this.cipher.login.uris.length === 1 &&\n (this.cipher.login.uris[0].uri == null || this.cipher.login.uris[0].uri === \"\")\n ) {\n this.cipher.login.uris = null;\n }\n\n // Allows saving of selected collections during \"Add\" and \"Clone\" flows\n if ((!this.editMode || this.cloneMode) && this.cipher.organizationId != null) {\n this.cipher.collectionIds =\n this.collections == null\n ? []\n : this.collections.filter((c) => (c as any).checked).map((c) => c.id);\n }\n\n // Clear current Cipher Id to trigger \"Add\" cipher flow\n if (this.cloneMode) {\n this.cipher.id = null;\n }\n\n const cipher = await this.encryptCipher();\n try {\n this.formPromise = this.saveCipher(cipher);\n await this.formPromise;\n this.cipher.id = cipher.id;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode && !this.cloneMode ? \"editedItem\" : \"addedItem\")\n );\n this.onSavedCipher.emit(this.cipher);\n this.messagingService.send(this.editMode && !this.cloneMode ? \"editedCipher\" : \"addedCipher\");\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n addUri() {\n if (this.cipher.type !== CipherType.Login) {\n return;\n }\n\n if (this.cipher.login.uris == null) {\n this.cipher.login.uris = [];\n }\n\n this.cipher.login.uris.push(new LoginUriView());\n }\n\n removeUri(uri: LoginUriView) {\n if (this.cipher.type !== CipherType.Login || this.cipher.login.uris == null) {\n return;\n }\n\n const i = this.cipher.login.uris.indexOf(uri);\n if (i > -1) {\n this.cipher.login.uris.splice(i, 1);\n }\n }\n\n trackByFunction(index: number, item: any) {\n return index;\n }\n\n cancel() {\n this.onCancelled.emit(this.cipher);\n }\n\n attachments() {\n this.onEditAttachments.emit(this.cipher);\n }\n\n share() {\n this.onShareCipher.emit(this.cipher);\n }\n\n editCollections() {\n this.onEditCollections.emit(this.cipher);\n }\n\n async delete(): Promise {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\n this.cipher.isDeleted ? \"permanentlyDeleteItemConfirmation\" : \"deleteItemConfirmation\"\n ),\n this.i18nService.t(\"deleteItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.deleteCipher();\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.cipher.isDeleted ? \"permanentlyDeletedItem\" : \"deletedItem\")\n );\n this.onDeletedCipher.emit(this.cipher);\n this.messagingService.send(\n this.cipher.isDeleted ? \"permanentlyDeletedCipher\" : \"deletedCipher\"\n );\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n async restore(): Promise {\n if (!this.cipher.isDeleted) {\n return false;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"restoreItemConfirmation\"),\n this.i18nService.t(\"restoreItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.restorePromise = this.restoreCipher();\n await this.restorePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItem\"));\n this.onRestoredCipher.emit(this.cipher);\n this.messagingService.send(\"restoredCipher\");\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n async generateUsername(): Promise {\n if (this.cipher.login?.username?.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"overwriteUsernameConfirmation\"),\n this.i18nService.t(\"overwriteUsername\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\")\n );\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGenerateUsername.emit();\n return true;\n }\n\n async generatePassword(): Promise {\n if (this.cipher.login?.password?.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"overwritePasswordConfirmation\"),\n this.i18nService.t(\"overwritePassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\")\n );\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGeneratePassword.emit();\n return true;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"loginPassword\").focus();\n if (this.editMode && this.showPassword) {\n this.eventService.collect(EventType.Cipher_ClientToggledPasswordVisible, this.cipherId);\n }\n }\n\n async toggleCardNumber() {\n this.showCardNumber = !this.showCardNumber;\n if (this.showCardNumber) {\n this.eventService.collect(EventType.Cipher_ClientToggledCardNumberVisible, this.cipherId);\n }\n }\n\n toggleCardCode() {\n this.showCardCode = !this.showCardCode;\n document.getElementById(\"cardCode\").focus();\n if (this.editMode && this.showCardCode) {\n this.eventService.collect(EventType.Cipher_ClientToggledCardCodeVisible, this.cipherId);\n }\n }\n\n toggleUriOptions(uri: LoginUriView) {\n const u = uri as any;\n u.showOptions = u.showOptions == null && uri.match != null ? false : !u.showOptions;\n }\n\n loginUriMatchChanged(uri: LoginUriView) {\n const u = uri as any;\n u.showOptions = u.showOptions == null ? true : u.showOptions;\n }\n\n async organizationChanged() {\n if (this.writeableCollections != null) {\n this.writeableCollections.forEach((c) => ((c as any).checked = false));\n }\n if (this.cipher.organizationId != null) {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.cipher.organizationId\n );\n const org = await this.organizationService.get(this.cipher.organizationId);\n if (org != null) {\n this.cipher.organizationUseTotp = org.useTotp;\n }\n } else {\n this.collections = [];\n }\n }\n\n async checkPassword() {\n if (this.checkPasswordPromise != null) {\n return;\n }\n\n if (\n this.cipher.login == null ||\n this.cipher.login.password == null ||\n this.cipher.login.password === \"\"\n ) {\n return;\n }\n\n this.checkPasswordPromise = this.auditService.passwordLeaked(this.cipher.login.password);\n const matches = await this.checkPasswordPromise;\n this.checkPasswordPromise = null;\n\n if (matches > 0) {\n this.platformUtilsService.showToast(\n \"warning\",\n null,\n this.i18nService.t(\"passwordExposed\", matches.toString())\n );\n } else {\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"passwordSafe\"));\n }\n }\n\n repromptChanged() {\n this.reprompt = !this.reprompt;\n if (this.reprompt) {\n this.cipher.reprompt = CipherRepromptType.Password;\n } else {\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter((c) => !c.readOnly);\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected encryptCipher() {\n return this.cipherService.encrypt(this.cipher);\n }\n\n protected saveCipher(cipher: Cipher) {\n return this.cipherService.saveWithServer(cipher);\n }\n\n protected deleteCipher() {\n return this.cipher.isDeleted\n ? this.cipherService.deleteWithServer(this.cipher.id)\n : this.cipherService.softDeleteWithServer(this.cipher.id);\n }\n\n protected restoreCipher() {\n return this.cipherService.restoreWithServer(this.cipher.id);\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { ErrorResponse } from \"jslib-common/models/response/errorResponse\";\nimport { AttachmentView } from \"jslib-common/models/view/attachmentView\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\n@Directive()\nexport class AttachmentsComponent implements OnInit {\n @Input() cipherId: string;\n @Output() onUploadedAttachment = new EventEmitter();\n @Output() onDeletedAttachment = new EventEmitter();\n @Output() onReuploadedAttachment = new EventEmitter();\n\n cipher: CipherView;\n cipherDomain: Cipher;\n hasUpdatedKey: boolean;\n canAccessAttachments: boolean;\n formPromise: Promise;\n deletePromises: { [id: string]: Promise } = {};\n reuploadPromises: { [id: string]: Promise } = {};\n emergencyAccessId?: string = null;\n\n constructor(\n protected cipherService: CipherService,\n protected i18nService: I18nService,\n protected cryptoService: CryptoService,\n protected platformUtilsService: PlatformUtilsService,\n protected apiService: ApiService,\n protected win: Window,\n protected logService: LogService,\n protected stateService: StateService\n ) {}\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit() {\n if (!this.hasUpdatedKey) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"updateKey\")\n );\n return;\n }\n\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n if (files[0].size > 524288000) {\n // 500 MB\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"maxFileSize\")\n );\n return;\n }\n\n try {\n this.formPromise = this.saveCipherAttachment(files[0]);\n this.cipherDomain = await this.formPromise;\n this.cipher = await this.cipherDomain.decrypt();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"attachmentSaved\"));\n this.onUploadedAttachment.emit();\n } catch (e) {\n this.logService.error(e);\n }\n\n // reset file input\n // ref: https://stackoverflow.com/a/20552042\n fileEl.type = \"\";\n fileEl.type = \"file\";\n fileEl.value = \"\";\n }\n\n async delete(attachment: AttachmentView) {\n if (this.deletePromises[attachment.id] != null) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteAttachmentConfirmation\"),\n this.i18nService.t(\"deleteAttachment\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n await this.deletePromises[attachment.id];\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedAttachment\"));\n const i = this.cipher.attachments.indexOf(attachment);\n if (i > -1) {\n this.cipher.attachments.splice(i, 1);\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n this.deletePromises[attachment.id] = null;\n this.onDeletedAttachment.emit();\n }\n\n async download(attachment: AttachmentView) {\n const a = attachment as any;\n if (a.downloading) {\n return;\n }\n\n if (!this.canAccessAttachments) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"premiumRequired\"),\n this.i18nService.t(\"premiumRequiredDesc\")\n );\n return;\n }\n\n let url: string;\n try {\n const attachmentDownloadResponse = await this.apiService.getAttachmentData(\n this.cipher.id,\n attachment.id,\n this.emergencyAccessId\n );\n url = attachmentDownloadResponse.url;\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n url = attachment.url;\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n\n a.downloading = true;\n const response = await fetch(new Request(url, { cache: \"no-store\" }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n a.downloading = false;\n return;\n }\n\n try {\n const buf = await response.arrayBuffer();\n const key =\n attachment.key != null\n ? attachment.key\n : await this.cryptoService.getOrgKey(this.cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(buf, key);\n this.platformUtilsService.saveFile(this.win, decBuf, null, attachment.fileName);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n\n a.downloading = false;\n }\n\n protected async init() {\n this.cipherDomain = await this.loadCipher();\n this.cipher = await this.cipherDomain.decrypt();\n\n this.hasUpdatedKey = await this.cryptoService.hasEncKey();\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n this.canAccessAttachments = canAccessPremium || this.cipher.organizationId != null;\n\n if (!this.canAccessAttachments) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"premiumRequiredDesc\"),\n this.i18nService.t(\"premiumRequired\"),\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"cancel\")\n );\n if (confirmed) {\n this.platformUtilsService.launchUri(\"https://vault.bitwarden.com/#/?premium=purchase\");\n }\n } else if (!this.hasUpdatedKey) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"updateKey\"),\n this.i18nService.t(\"featureUnavailable\"),\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n if (confirmed) {\n this.platformUtilsService.launchUri(\n \"https://bitwarden.com/help/account-encryption-key/#rotate-your-encryption-key\"\n );\n }\n }\n }\n\n protected async reuploadCipherAttachment(attachment: AttachmentView, admin: boolean) {\n const a = attachment as any;\n if (attachment.key != null || a.downloading || this.reuploadPromises[attachment.id] != null) {\n return;\n }\n\n try {\n this.reuploadPromises[attachment.id] = Promise.resolve().then(async () => {\n // 1. Download\n a.downloading = true;\n const response = await fetch(new Request(attachment.url, { cache: \"no-store\" }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n a.downloading = false;\n return;\n }\n\n try {\n // 2. Resave\n const buf = await response.arrayBuffer();\n const key =\n attachment.key != null\n ? attachment.key\n : await this.cryptoService.getOrgKey(this.cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(buf, key);\n this.cipherDomain = await this.cipherService.saveAttachmentRawWithServer(\n this.cipherDomain,\n attachment.fileName,\n decBuf,\n admin\n );\n this.cipher = await this.cipherDomain.decrypt();\n\n // 3. Delete old\n this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n await this.deletePromises[attachment.id];\n const foundAttachment = this.cipher.attachments.filter((a2) => a2.id === attachment.id);\n if (foundAttachment.length > 0) {\n const i = this.cipher.attachments.indexOf(foundAttachment[0]);\n if (i > -1) {\n this.cipher.attachments.splice(i, 1);\n }\n }\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"attachmentSaved\")\n );\n this.onReuploadedAttachment.emit();\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n\n a.downloading = false;\n });\n await this.reuploadPromises[attachment.id];\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected saveCipherAttachment(file: File) {\n return this.cipherService.saveAttachmentWithServer(this.cipherDomain, file);\n }\n\n protected deleteCipherAttachment(attachmentId: string) {\n return this.cipherService.deleteAttachmentWithServer(this.cipher.id, attachmentId);\n }\n}\n","import { Component, Input, OnChanges, OnInit } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\n\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Component({\n selector: \"app-avatar\",\n template:\n '\",\n})\nexport class AvatarComponent implements OnChanges, OnInit {\n @Input() data: string;\n @Input() email: string;\n @Input() size = 45;\n @Input() charCount = 2;\n @Input() textColor = \"#ffffff\";\n @Input() fontSize = 20;\n @Input() fontWeight = 300;\n @Input() dynamic = false;\n @Input() circle = false;\n\n src: string;\n\n constructor(\n public sanitizer: DomSanitizer,\n private cryptoFunctionService: CryptoFunctionService,\n private stateService: StateService\n ) {}\n\n ngOnInit() {\n if (!this.dynamic) {\n this.generate();\n }\n }\n\n ngOnChanges() {\n if (this.dynamic) {\n this.generate();\n }\n }\n\n private async generate() {\n const enableGravatars = await this.stateService.getEnableGravitars();\n if (enableGravatars && this.email != null) {\n const hashBytes = await this.cryptoFunctionService.hash(\n this.email.toLowerCase().trim(),\n \"md5\"\n );\n const hash = Utils.fromBufferToHex(hashBytes).toLowerCase();\n this.src = \"https://www.gravatar.com/avatar/\" + hash + \"?s=\" + this.size + \"&r=pg&d=retro\";\n } else {\n let chars: string = null;\n const upperData = this.data.toUpperCase();\n\n if (this.charCount > 1) {\n chars = this.getFirstLetters(upperData, this.charCount);\n }\n if (chars == null) {\n chars = this.unicodeSafeSubstring(upperData, this.charCount);\n }\n\n // If the chars contain an emoji, only show it.\n if (chars.match(Utils.regexpEmojiPresentation)) {\n chars = chars.match(Utils.regexpEmojiPresentation)[0];\n }\n\n const charObj = this.getCharText(chars);\n const color = this.stringToColor(upperData);\n const svg = this.getSvg(this.size, color);\n svg.appendChild(charObj);\n const html = window.document.createElement(\"div\").appendChild(svg).outerHTML;\n const svgHtml = window.btoa(unescape(encodeURIComponent(html)));\n this.src = \"data:image/svg+xml;base64,\" + svgHtml;\n }\n }\n\n private stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n let color = \"#\";\n for (let i = 0; i < 3; i++) {\n const value = (hash >> (i * 8)) & 0xff;\n color += (\"00\" + value.toString(16)).substr(-2);\n }\n return color;\n }\n\n private getFirstLetters(data: string, count: number): string {\n const parts = data.split(\" \");\n if (parts.length > 1) {\n let text = \"\";\n for (let i = 0; i < count; i++) {\n text += this.unicodeSafeSubstring(parts[i], 1);\n }\n return text;\n }\n return null;\n }\n\n private getSvg(size: number, color: string): HTMLElement {\n const svgTag = window.document.createElement(\"svg\");\n svgTag.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n svgTag.setAttribute(\"pointer-events\", \"none\");\n svgTag.setAttribute(\"width\", size.toString());\n svgTag.setAttribute(\"height\", size.toString());\n svgTag.style.backgroundColor = color;\n svgTag.style.width = size + \"px\";\n svgTag.style.height = size + \"px\";\n return svgTag;\n }\n\n private getCharText(character: string): HTMLElement {\n const textTag = window.document.createElement(\"text\");\n textTag.setAttribute(\"text-anchor\", \"middle\");\n textTag.setAttribute(\"y\", \"50%\");\n textTag.setAttribute(\"x\", \"50%\");\n textTag.setAttribute(\"dy\", \"0.35em\");\n textTag.setAttribute(\"pointer-events\", \"auto\");\n textTag.setAttribute(\"fill\", this.textColor);\n textTag.setAttribute(\n \"font-family\",\n '\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,' +\n 'sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\"'\n );\n textTag.textContent = character;\n textTag.style.fontWeight = this.fontWeight.toString();\n textTag.style.fontSize = this.fontSize + \"px\";\n return textTag;\n }\n\n private unicodeSafeSubstring(str: string, count: number) {\n const characters = str.match(/./gu);\n return characters != null ? characters.slice(0, count).join(\"\") : \"\";\n }\n}\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\n\n@Component({\n selector: \"app-callout\",\n templateUrl: \"callout.component.html\",\n})\nexport class CalloutComponent implements OnInit {\n @Input() type = \"info\";\n @Input() icon: string;\n @Input() title: string;\n @Input() clickable: boolean;\n @Input() enforcedPolicyOptions: MasterPasswordPolicyOptions;\n @Input() enforcedPolicyMessage: string;\n @Input() useAlertRole = false;\n\n calloutStyle: string;\n\n constructor(private i18nService: I18nService) {}\n\n ngOnInit() {\n this.calloutStyle = this.type;\n\n if (this.enforcedPolicyMessage === undefined) {\n this.enforcedPolicyMessage = this.i18nService.t(\"masterPasswordPolicyInEffect\");\n }\n\n if (this.type === \"warning\" || this.type === \"danger\") {\n if (this.type === \"danger\") {\n this.calloutStyle = \"danger\";\n }\n if (this.title === undefined) {\n this.title = this.i18nService.t(\"warning\");\n }\n if (this.icon === undefined) {\n this.icon = \"bwi-exclamation-triangle\";\n }\n } else if (this.type === \"error\") {\n this.calloutStyle = \"danger\";\n if (this.title === undefined) {\n this.title = this.i18nService.t(\"error\");\n }\n if (this.icon === undefined) {\n this.icon = \"bwi-error\";\n }\n } else if (this.type === \"tip\") {\n this.calloutStyle = \"success\";\n if (this.title === undefined) {\n this.title = this.i18nService.t(\"tip\");\n }\n if (this.icon === undefined) {\n this.icon = \"bwi-lightbulb\";\n }\n }\n }\n\n getPasswordScoreAlertDisplay() {\n if (this.enforcedPolicyOptions == null) {\n return \"\";\n }\n\n let str: string;\n switch (this.enforcedPolicyOptions.minComplexity) {\n case 4:\n str = this.i18nService.t(\"strong\");\n break;\n case 3:\n str = this.i18nService.t(\"good\");\n break;\n default:\n str = this.i18nService.t(\"weak\");\n break;\n }\n return str + \" (\" + this.enforcedPolicyOptions.minComplexity + \")\";\n }\n}\n","\n

\n \n {{ title }}\n

\n
\n {{ enforcedPolicyMessage }}\n
    \n
  • 0\">\n {{ \"policyInEffectMinComplexity\" | i18n: getPasswordScoreAlertDisplay() }}\n
  • \n
  • 0\">\n {{ \"policyInEffectMinLength\" | i18n: enforcedPolicyOptions?.minLength.toString() }}\n
  • \n
  • \n {{ \"policyInEffectUppercase\" | i18n }}\n
  • \n
  • \n {{ \"policyInEffectLowercase\" | i18n }}\n
  • \n
  • \n {{ \"policyInEffectNumbers\" | i18n }}\n
  • \n
  • \n {{ \"policyInEffectSpecial\" | i18n: \"!@#$%^&*\" }}\n
  • \n
\n
\n \n\n","import { Directive, Input } from \"@angular/core\";\n\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { CaptchaIFrame } from \"jslib-common/misc/captcha_iframe\";\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Directive()\nexport abstract class CaptchaProtectedComponent {\n @Input() captchaSiteKey: string = null;\n captchaToken: string = null;\n captcha: CaptchaIFrame;\n\n constructor(\n protected environmentService: EnvironmentService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService\n ) {}\n\n async setupCaptcha() {\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n\n this.captcha = new CaptchaIFrame(\n window,\n webVaultUrl,\n this.i18nService,\n (token: string) => {\n this.captchaToken = token;\n },\n (error: string) => {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), error);\n },\n (info: string) => {\n this.platformUtilsService.showToast(\"info\", this.i18nService.t(\"info\"), info);\n }\n );\n }\n\n showCaptcha() {\n return !Utils.isNullOrWhitespace(this.captchaSiteKey);\n }\n\n protected handleCaptchaRequired(response: { captchaSiteKey: string }): boolean {\n if (Utils.isNullOrWhitespace(response.captchaSiteKey)) {\n return false;\n }\n\n this.captchaSiteKey = response.captchaSiteKey;\n this.captcha.init(response.captchaSiteKey);\n return true;\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\n\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { KdfType } from \"jslib-common/enums/kdfType\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\n\n@Directive()\nexport class ChangePasswordComponent implements OnInit {\n masterPassword: string;\n masterPasswordRetype: string;\n formPromise: Promise;\n masterPasswordScore: number;\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n\n protected email: string;\n protected kdf: KdfType;\n protected kdfIterations: number;\n\n private masterPasswordStrengthTimeout: any;\n\n constructor(\n protected i18nService: I18nService,\n protected cryptoService: CryptoService,\n protected messagingService: MessagingService,\n protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService,\n protected policyService: PolicyService,\n protected stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.email = await this.stateService.getEmail();\n this.enforcedPolicyOptions ??= await this.policyService.getMasterPasswordPolicyOptions();\n }\n\n async submit() {\n if (!(await this.strongPassword())) {\n return;\n }\n\n if (!(await this.setupSubmitActions())) {\n return;\n }\n\n const email = await this.stateService.getEmail();\n if (this.kdf == null) {\n this.kdf = await this.stateService.getKdfType();\n }\n if (this.kdfIterations == null) {\n this.kdfIterations = await this.stateService.getKdfIterations();\n }\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n email.trim().toLowerCase(),\n this.kdf,\n this.kdfIterations\n );\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n let encKey: [SymmetricCryptoKey, EncString] = null;\n const existingEncKey = await this.cryptoService.getEncKey();\n if (existingEncKey == null) {\n encKey = await this.cryptoService.makeEncKey(key);\n } else {\n encKey = await this.cryptoService.remakeEncKey(key);\n }\n\n await this.performSubmitActions(masterPasswordHash, key, encKey);\n }\n\n async setupSubmitActions(): Promise {\n // Override in sub-class\n // Can be used for additional validation and/or other processes the should occur before changing passwords\n return true;\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n // Override in sub-class\n }\n\n async strongPassword(): Promise {\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return false;\n }\n if (this.masterPassword.length < 8) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassLength\")\n );\n return false;\n }\n if (this.masterPassword !== this.masterPasswordRetype) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassDoesntMatch\")\n );\n return false;\n }\n\n const strengthResult = this.passwordGenerationService.passwordStrength(\n this.masterPassword,\n this.getPasswordStrengthUserInput()\n );\n\n if (\n this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n strengthResult.score,\n this.masterPassword,\n this.enforcedPolicyOptions\n )\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordPolicyRequirementsNotMet\")\n );\n return false;\n }\n\n if (strengthResult != null && strengthResult.score < 3) {\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"weakMasterPasswordDesc\"),\n this.i18nService.t(\"weakMasterPassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n return false;\n }\n }\n\n return true;\n }\n\n updatePasswordStrength() {\n if (this.masterPasswordStrengthTimeout != null) {\n clearTimeout(this.masterPasswordStrengthTimeout);\n }\n this.masterPasswordStrengthTimeout = setTimeout(() => {\n const strengthResult = this.passwordGenerationService.passwordStrength(\n this.masterPassword,\n this.getPasswordStrengthUserInput()\n );\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n }, 300);\n }\n\n async logOut() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"logOutConfirmation\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"cancel\")\n );\n if (confirmed) {\n this.messagingService.send(\"logout\");\n }\n }\n\n private getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const atPosition = this.email.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput.concat(\n this.email\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n );\n }\n return userInput;\n }\n}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\n@Directive()\nexport class CiphersComponent {\n @Input() activeCipherId: string = null;\n @Output() onCipherClicked = new EventEmitter();\n @Output() onCipherRightClicked = new EventEmitter();\n @Output() onAddCipher = new EventEmitter();\n @Output() onAddCipherOptions = new EventEmitter();\n\n loaded = false;\n ciphers: CipherView[] = [];\n searchText: string;\n searchPlaceholder: string = null;\n filter: (cipher: CipherView) => boolean = null;\n deleted = false;\n\n protected searchPending = false;\n\n private searchTimeout: any = null;\n\n constructor(protected searchService: SearchService) {}\n\n async load(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n this.deleted = deleted || false;\n await this.applyFilter(filter);\n this.loaded = true;\n }\n\n async reload(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n this.loaded = false;\n this.ciphers = [];\n await this.load(filter, deleted);\n }\n\n async refresh() {\n await this.reload(this.filter, this.deleted);\n }\n\n async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n this.filter = filter;\n await this.search(null);\n }\n\n async search(timeout: number = null, indexedCiphers?: CipherView[]) {\n this.searchPending = false;\n if (this.searchTimeout != null) {\n clearTimeout(this.searchTimeout);\n }\n if (timeout == null) {\n await this.doSearch(indexedCiphers);\n return;\n }\n this.searchPending = true;\n this.searchTimeout = setTimeout(async () => {\n await this.doSearch(indexedCiphers);\n this.searchPending = false;\n }, timeout);\n }\n\n selectCipher(cipher: CipherView) {\n this.onCipherClicked.emit(cipher);\n }\n\n rightClickCipher(cipher: CipherView) {\n this.onCipherRightClicked.emit(cipher);\n }\n\n addCipher() {\n this.onAddCipher.emit();\n }\n\n addCipherOptions() {\n this.onAddCipherOptions.emit();\n }\n\n isSearching() {\n return !this.searchPending && this.searchService.isSearchable(this.searchText);\n }\n\n protected deletedFilter: (cipher: CipherView) => boolean = (c) => c.isDeleted === this.deleted;\n\n protected async doSearch(indexedCiphers?: CipherView[]) {\n this.ciphers = await this.searchService.searchCiphers(\n this.searchText,\n [this.filter, this.deletedFilter],\n indexedCiphers\n );\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Directive()\nexport class CollectionsComponent implements OnInit {\n @Input() cipherId: string;\n @Input() allowSelectNone = false;\n @Output() onSavedCollections = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collectionIds: string[];\n collections: CollectionView[] = [];\n\n protected cipherDomain: Cipher;\n\n constructor(\n protected collectionService: CollectionService,\n protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService,\n protected cipherService: CipherService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n this.cipherDomain = await this.loadCipher();\n this.collectionIds = this.loadCipherCollections();\n this.cipher = await this.cipherDomain.decrypt();\n this.collections = await this.loadCollections();\n\n this.collections.forEach((c) => ((c as any).checked = false));\n if (this.collectionIds != null) {\n this.collections.forEach((c) => {\n (c as any).checked = this.collectionIds != null && this.collectionIds.indexOf(c.id) > -1;\n });\n }\n }\n\n async submit() {\n const selectedCollectionIds = this.collections\n .filter((c) => !!(c as any).checked)\n .map((c) => c.id);\n if (!this.allowSelectNone && selectedCollectionIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectOneCollection\")\n );\n return;\n }\n this.cipherDomain.collectionIds = selectedCollectionIds;\n try {\n this.formPromise = this.saveCollections();\n await this.formPromise;\n this.onSavedCollections.emit();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"editedItem\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected loadCipherCollections() {\n return this.cipherDomain.collectionIds;\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter(\n (c) => !c.readOnly && c.organizationId === this.cipher.organizationId\n );\n }\n\n protected saveCollections() {\n return this.cipherService.saveCollectionsWithServer(this.cipherDomain);\n }\n}\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Component({\n selector: \"app-export-scope-callout\",\n templateUrl: \"export-scope-callout.component.html\",\n})\nexport class ExportScopeCalloutComponent implements OnInit {\n @Input() organizationId: string = null;\n\n show = false;\n scopeConfig: {\n title: string;\n description: string;\n scopeIdentifier: string;\n };\n\n constructor(\n protected organizationService: OrganizationService,\n protected stateService: StateService\n ) {}\n\n async ngOnInit(): Promise {\n if (!(await this.organizationService.hasOrganizations())) {\n return;\n }\n this.scopeConfig =\n this.organizationId != null\n ? {\n title: \"exportingOrganizationVaultTitle\",\n description: \"exportingOrganizationVaultDescription\",\n scopeIdentifier: (await this.organizationService.get(this.organizationId)).name,\n }\n : {\n title: \"exportingPersonalVaultTitle\",\n description: \"exportingPersonalVaultDescription\",\n scopeIdentifier: await this.stateService.getEmail(),\n };\n this.show = true;\n }\n}\n","\n \n {{ scopeConfig.description | i18n: scopeConfig.scopeIdentifier }}\n \n\n","import { Directive, EventEmitter, OnInit, Output } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { ExportService } from \"jslib-common/abstractions/export.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { EventType } from \"jslib-common/enums/eventType\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\n@Directive()\nexport class ExportComponent implements OnInit {\n @Output() onSaved = new EventEmitter();\n\n formPromise: Promise;\n disabledByPolicy = false;\n\n exportForm = this.formBuilder.group({\n format: [\"json\"],\n secret: [\"\"],\n });\n\n formatOptions = [\n { name: \".json\", value: \"json\" },\n { name: \".csv\", value: \"csv\" },\n { name: \".json (Encrypted)\", value: \"encrypted_json\" },\n ];\n\n constructor(\n protected cryptoService: CryptoService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected exportService: ExportService,\n protected eventService: EventService,\n private policyService: PolicyService,\n protected win: Window,\n private logService: LogService,\n private userVerificationService: UserVerificationService,\n private formBuilder: FormBuilder\n ) {}\n\n async ngOnInit() {\n await this.checkExportDisabled();\n }\n\n async checkExportDisabled() {\n this.disabledByPolicy = await this.policyService.policyAppliesToUser(\n PolicyType.DisablePersonalVaultExport\n );\n if (this.disabledByPolicy) {\n this.exportForm.disable();\n }\n }\n\n get encryptedFormat() {\n return this.format === \"encrypted_json\";\n }\n\n async submit() {\n if (this.disabledByPolicy) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"personalVaultExportPolicyInEffect\")\n );\n return;\n }\n\n const acceptedWarning = await this.warningDialog();\n if (!acceptedWarning) {\n return;\n }\n\n const secret = this.exportForm.get(\"secret\").value;\n try {\n await this.userVerificationService.verifyUser(secret);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), e.message);\n return;\n }\n\n try {\n this.formPromise = this.getExportData();\n const data = await this.formPromise;\n this.downloadFile(data);\n this.saved();\n await this.collectEvent();\n this.exportForm.get(\"secret\").setValue(\"\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async warningDialog() {\n if (this.encryptedFormat) {\n return await this.platformUtilsService.showDialog(\n \"

\" +\n this.i18nService.t(\"encExportKeyWarningDesc\") +\n \"

\" +\n this.i18nService.t(\"encExportAccountWarningDesc\"),\n this.i18nService.t(\"confirmVaultExport\"),\n this.i18nService.t(\"exportVault\"),\n this.i18nService.t(\"cancel\"),\n \"warning\",\n true\n );\n } else {\n return await this.platformUtilsService.showDialog(\n this.i18nService.t(\"exportWarningDesc\"),\n this.i18nService.t(\"confirmVaultExport\"),\n this.i18nService.t(\"exportVault\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n }\n }\n\n protected saved() {\n this.onSaved.emit();\n }\n\n protected getExportData() {\n return this.exportService.getExport(this.format);\n }\n\n protected getFileName(prefix?: string) {\n let extension = this.format;\n if (this.format === \"encrypted_json\") {\n if (prefix == null) {\n prefix = \"encrypted\";\n } else {\n prefix = \"encrypted_\" + prefix;\n }\n extension = \"json\";\n }\n return this.exportService.getFileName(prefix, extension);\n }\n\n protected async collectEvent(): Promise {\n await this.eventService.collect(EventType.User_ClientExportedVault);\n }\n\n get format() {\n return this.exportForm.get(\"format\").value;\n }\n\n private downloadFile(csv: string): void {\n const fileName = this.getFileName();\n this.platformUtilsService.saveFile(this.win, csv, { type: \"text/plain\" }, fileName);\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { FolderView } from \"jslib-common/models/view/folderView\";\n\n@Directive()\nexport class FolderAddEditComponent implements OnInit {\n @Input() folderId: string;\n @Output() onSavedFolder = new EventEmitter();\n @Output() onDeletedFolder = new EventEmitter();\n\n editMode = false;\n folder: FolderView = new FolderView();\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n\n constructor(\n protected folderService: FolderService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit(): Promise {\n if (this.folder.name == null || this.folder.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n try {\n const folder = await this.folderService.encrypt(this.folder);\n this.formPromise = this.folderService.saveWithServer(folder);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedFolder\" : \"addedFolder\")\n );\n this.onSavedFolder.emit(this.folder);\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n async delete(): Promise {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteFolderConfirmation\"),\n this.i18nService.t(\"deleteFolder\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.folderService.deleteWithServer(this.folder.id);\n await this.deletePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedFolder\"));\n this.onDeletedFolder.emit(this.folder);\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n protected async init() {\n this.editMode = this.folderId != null;\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editFolder\");\n const folder = await this.folderService.get(this.folderId);\n this.folder = await folder.decrypt();\n } else {\n this.title = this.i18nService.t(\"addFolder\");\n }\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UsernameGenerationService } from \"jslib-common/abstractions/usernameGeneration.service\";\nimport { PasswordGeneratorPolicyOptions } from \"jslib-common/models/domain/passwordGeneratorPolicyOptions\";\n\n@Directive()\nexport class GeneratorComponent implements OnInit {\n @Input() comingFromAddEdit = false;\n @Input() type: string;\n @Output() onSelected = new EventEmitter();\n\n typeOptions: any[];\n passTypeOptions: any[];\n usernameTypeOptions: any[];\n subaddressOptions: any[];\n catchallOptions: any[];\n forwardOptions: any[];\n usernameOptions: any = {};\n passwordOptions: any = {};\n username = \"-\";\n password = \"-\";\n showOptions = false;\n avoidAmbiguous = false;\n enforcedPasswordPolicyOptions: PasswordGeneratorPolicyOptions;\n usernameWebsite: string = null;\n\n constructor(\n protected passwordGenerationService: PasswordGenerationService,\n protected usernameGenerationService: UsernameGenerationService,\n protected platformUtilsService: PlatformUtilsService,\n protected stateService: StateService,\n protected i18nService: I18nService,\n protected route: ActivatedRoute,\n private win: Window\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"password\"), value: \"password\" },\n { name: i18nService.t(\"username\"), value: \"username\" },\n ];\n this.passTypeOptions = [\n { name: i18nService.t(\"password\"), value: \"password\" },\n { name: i18nService.t(\"passphrase\"), value: \"passphrase\" },\n ];\n this.usernameTypeOptions = [\n {\n name: i18nService.t(\"plusAddressedEmail\"),\n value: \"subaddress\",\n desc: i18nService.t(\"plusAddressedEmailDesc\"),\n },\n {\n name: i18nService.t(\"catchallEmail\"),\n value: \"catchall\",\n desc: i18nService.t(\"catchallEmailDesc\"),\n },\n { name: i18nService.t(\"randomWord\"), value: \"word\" },\n ];\n this.subaddressOptions = [{ name: i18nService.t(\"random\"), value: \"random\" }];\n this.catchallOptions = [{ name: i18nService.t(\"random\"), value: \"random\" }];\n this.forwardOptions = [\n { name: \"SimpleLogin\", value: \"simplelogin\" },\n { name: \"FastMail\", value: \"fastmail\" },\n ];\n }\n\n async ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n const passwordOptionsResponse = await this.passwordGenerationService.getOptions();\n this.passwordOptions = passwordOptionsResponse[0];\n this.enforcedPasswordPolicyOptions = passwordOptionsResponse[1];\n this.avoidAmbiguous = !this.passwordOptions.ambiguous;\n this.passwordOptions.type =\n this.passwordOptions.type === \"passphrase\" ? \"passphrase\" : \"password\";\n\n this.usernameOptions = await this.usernameGenerationService.getOptions();\n if (this.usernameOptions.type == null) {\n this.usernameOptions.type = \"word\";\n }\n if (\n this.usernameOptions.subaddressEmail == null ||\n this.usernameOptions.subaddressEmail === \"\"\n ) {\n this.usernameOptions.subaddressEmail = await this.stateService.getEmail();\n }\n if (this.usernameWebsite == null) {\n this.usernameOptions.subaddressType = this.usernameOptions.catchallType = \"random\";\n } else {\n this.usernameOptions.website = this.usernameWebsite;\n const websiteOption = { name: this.i18nService.t(\"websiteName\"), value: \"website-name\" };\n this.subaddressOptions.push(websiteOption);\n this.catchallOptions.push(websiteOption);\n }\n\n if (this.type !== \"username\" && this.type !== \"password\") {\n if (qParams.type === \"username\" || qParams.type === \"password\") {\n this.type = qParams.type;\n } else {\n const generatorOptions = await this.stateService.getGeneratorOptions();\n this.type = generatorOptions?.type ?? \"password\";\n }\n }\n await this.regenerate();\n });\n }\n\n async typeChanged() {\n await this.stateService.setGeneratorOptions({ type: this.type });\n await this.regenerate();\n }\n\n async regenerate() {\n if (this.type === \"password\") {\n await this.regeneratePassword();\n } else if (this.type === \"username\") {\n await this.regenerateUsername();\n }\n }\n\n async sliderChanged() {\n this.savePasswordOptions(false);\n await this.passwordGenerationService.addHistory(this.password);\n }\n\n async sliderInput() {\n this.normalizePasswordOptions();\n this.password = await this.passwordGenerationService.generatePassword(this.passwordOptions);\n }\n\n async savePasswordOptions(regenerate = true) {\n this.normalizePasswordOptions();\n await this.passwordGenerationService.saveOptions(this.passwordOptions);\n\n if (regenerate) {\n await this.regeneratePassword();\n }\n }\n\n async saveUsernameOptions(regenerate = true) {\n await this.usernameGenerationService.saveOptions(this.usernameOptions);\n if (regenerate) {\n await this.regenerateUsername();\n }\n }\n\n async regeneratePassword() {\n this.password = await this.passwordGenerationService.generatePassword(this.passwordOptions);\n await this.passwordGenerationService.addHistory(this.password);\n }\n\n regenerateUsername() {\n return this.generateUsername();\n }\n\n async generateUsername() {\n this.username = await this.usernameGenerationService.generateUsername(this.usernameOptions);\n if (this.username === \"\" || this.username === null) {\n this.username = \"-\";\n }\n }\n\n copy() {\n const password = this.type === \"password\";\n const copyOptions = this.win != null ? { window: this.win } : null;\n this.platformUtilsService.copyToClipboard(\n password ? this.password : this.username,\n copyOptions\n );\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(password ? \"password\" : \"username\"))\n );\n }\n\n select() {\n this.onSelected.emit(this.type === \"password\" ? this.password : this.username);\n }\n\n toggleOptions() {\n this.showOptions = !this.showOptions;\n }\n\n private normalizePasswordOptions() {\n // Application level normalize options depedent on class variables\n this.passwordOptions.ambiguous = !this.avoidAmbiguous;\n\n if (\n !this.passwordOptions.uppercase &&\n !this.passwordOptions.lowercase &&\n !this.passwordOptions.number &&\n !this.passwordOptions.special\n ) {\n this.passwordOptions.lowercase = true;\n if (this.win != null) {\n const lowercase = this.win.document.querySelector(\"#lowercase\") as HTMLInputElement;\n if (lowercase) {\n lowercase.checked = true;\n }\n }\n }\n\n this.passwordGenerationService.normalizeOptions(\n this.passwordOptions,\n this.enforcedPasswordPolicyOptions\n );\n }\n}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { TreeNode } from \"jslib-common/models/domain/treeNode\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\nimport { FolderView } from \"jslib-common/models/view/folderView\";\n\n@Directive()\nexport class GroupingsComponent {\n @Input() showFolders = true;\n @Input() showCollections = true;\n @Input() showFavorites = true;\n @Input() showTrash = true;\n\n @Output() onAllClicked = new EventEmitter();\n @Output() onFavoritesClicked = new EventEmitter();\n @Output() onTrashClicked = new EventEmitter();\n @Output() onCipherTypeClicked = new EventEmitter();\n @Output() onFolderClicked = new EventEmitter();\n @Output() onAddFolder = new EventEmitter();\n @Output() onEditFolder = new EventEmitter();\n @Output() onCollectionClicked = new EventEmitter();\n\n folders: FolderView[];\n nestedFolders: TreeNode[];\n collections: CollectionView[];\n nestedCollections: TreeNode[];\n loaded = false;\n cipherType = CipherType;\n selectedAll = false;\n selectedFavorites = false;\n selectedTrash = false;\n selectedType: CipherType = null;\n selectedFolder = false;\n selectedFolderId: string = null;\n selectedCollectionId: string = null;\n\n private collapsedGroupings: Set;\n\n constructor(\n protected collectionService: CollectionService,\n protected folderService: FolderService,\n protected stateService: StateService\n ) {}\n\n async load(setLoaded = true) {\n const collapsedGroupings = await this.stateService.getCollapsedGroupings();\n if (collapsedGroupings == null) {\n this.collapsedGroupings = new Set();\n } else {\n this.collapsedGroupings = new Set(collapsedGroupings);\n }\n\n await this.loadFolders();\n await this.loadCollections();\n\n if (setLoaded) {\n this.loaded = true;\n }\n }\n\n async loadCollections(organizationId?: string) {\n if (!this.showCollections) {\n return;\n }\n const collections = await this.collectionService.getAllDecrypted();\n if (organizationId != null) {\n this.collections = collections.filter((c) => c.organizationId === organizationId);\n } else {\n this.collections = collections;\n }\n this.nestedCollections = await this.collectionService.getAllNested(this.collections);\n }\n\n async loadFolders() {\n if (!this.showFolders) {\n return;\n }\n this.folders = await this.folderService.getAllDecrypted();\n this.nestedFolders = await this.folderService.getAllNested();\n }\n\n selectAll() {\n this.clearSelections();\n this.selectedAll = true;\n this.onAllClicked.emit();\n }\n\n selectFavorites() {\n this.clearSelections();\n this.selectedFavorites = true;\n this.onFavoritesClicked.emit();\n }\n\n selectTrash() {\n this.clearSelections();\n this.selectedTrash = true;\n this.onTrashClicked.emit();\n }\n\n selectType(type: CipherType) {\n this.clearSelections();\n this.selectedType = type;\n this.onCipherTypeClicked.emit(type);\n }\n\n selectFolder(folder: FolderView) {\n this.clearSelections();\n this.selectedFolder = true;\n this.selectedFolderId = folder.id;\n this.onFolderClicked.emit(folder);\n }\n\n addFolder() {\n this.onAddFolder.emit();\n }\n\n editFolder(folder: FolderView) {\n this.onEditFolder.emit(folder);\n }\n\n selectCollection(collection: CollectionView) {\n this.clearSelections();\n this.selectedCollectionId = collection.id;\n this.onCollectionClicked.emit(collection);\n }\n\n clearSelections() {\n this.selectedAll = false;\n this.selectedFavorites = false;\n this.selectedTrash = false;\n this.selectedType = null;\n this.selectedFolder = false;\n this.selectedFolderId = null;\n this.selectedCollectionId = null;\n }\n\n async collapse(grouping: FolderView | CollectionView, idPrefix = \"\") {\n if (grouping.id == null) {\n return;\n }\n const id = idPrefix + grouping.id;\n if (this.isCollapsed(grouping, idPrefix)) {\n this.collapsedGroupings.delete(id);\n } else {\n this.collapsedGroupings.add(id);\n }\n await this.stateService.setCollapsedGroupings(Array.from(this.collapsedGroupings));\n }\n\n isCollapsed(grouping: FolderView | CollectionView, idPrefix = \"\") {\n return this.collapsedGroupings.has(idPrefix + grouping.id);\n }\n}\n","import { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PasswordHintRequest } from \"jslib-common/models/request/passwordHintRequest\";\n\nexport class HintComponent {\n email = \"\";\n formPromise: Promise;\n\n protected successRoute = \"login\";\n protected onSuccessfulSubmit: () => void;\n\n constructor(\n protected router: Router,\n protected i18nService: I18nService,\n protected apiService: ApiService,\n protected platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async submit() {\n if (this.email == null || this.email === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"emailRequired\")\n );\n return;\n }\n if (this.email.indexOf(\"@\") === -1) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidEmail\")\n );\n return;\n }\n\n try {\n this.formPromise = this.apiService.postPasswordHint(new PasswordHintRequest(this.email));\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"masterPassSent\"));\n if (this.onSuccessfulSubmit != null) {\n this.onSuccessfulSubmit();\n } else if (this.router != null) {\n this.router.navigate([this.successRoute]);\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","import { Component, Input, OnChanges } from \"@angular/core\";\n\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\n/**\n * Provides a mapping from supported card brands to\n * the filenames of icon that should be present in images/cards folder of clients.\n */\nconst cardIcons: Record = {\n Visa: \"card-visa\",\n Mastercard: \"card-mastercard\",\n Amex: \"card-amex\",\n Discover: \"card-discover\",\n \"Diners Club\": \"card-diners-club\",\n JCB: \"card-jcb\",\n Maestro: \"card-maestro\",\n UnionPay: \"card-union-pay\",\n};\n\n@Component({\n selector: \"app-vault-icon\",\n templateUrl: \"icon.component.html\",\n})\nexport class IconComponent implements OnChanges {\n @Input() cipher: CipherView;\n icon: string;\n image: string;\n fallbackImage: string;\n imageEnabled: boolean;\n\n private iconsUrl: string;\n\n constructor(environmentService: EnvironmentService, private stateService: StateService) {\n this.iconsUrl = environmentService.getIconsUrl();\n }\n\n async ngOnChanges() {\n // Components may be re-used when using cdk-virtual-scroll. Which puts the component in a weird state,\n // to avoid this we reset all state variables.\n this.image = null;\n this.fallbackImage = null;\n this.imageEnabled = !(await this.stateService.getDisableFavicon());\n this.load();\n }\n\n protected load() {\n switch (this.cipher.type) {\n case CipherType.Login:\n this.icon = \"bwi-globe\";\n this.setLoginIcon();\n break;\n case CipherType.SecureNote:\n this.icon = \"bwi-sticky-note\";\n break;\n case CipherType.Card:\n this.icon = \"bwi-credit-card\";\n this.setCardIcon();\n break;\n case CipherType.Identity:\n this.icon = \"bwi-id-card\";\n break;\n default:\n break;\n }\n }\n\n private setLoginIcon() {\n if (this.cipher.login.uri) {\n let hostnameUri = this.cipher.login.uri;\n let isWebsite = false;\n\n if (hostnameUri.indexOf(\"androidapp://\") === 0) {\n this.icon = \"bwi-android\";\n this.image = null;\n } else if (hostnameUri.indexOf(\"iosapp://\") === 0) {\n this.icon = \"bwi-apple\";\n this.image = null;\n } else if (\n this.imageEnabled &&\n hostnameUri.indexOf(\"://\") === -1 &&\n hostnameUri.indexOf(\".\") > -1\n ) {\n hostnameUri = \"http://\" + hostnameUri;\n isWebsite = true;\n } else if (this.imageEnabled) {\n isWebsite = hostnameUri.indexOf(\"http\") === 0 && hostnameUri.indexOf(\".\") > -1;\n }\n\n if (this.imageEnabled && isWebsite) {\n try {\n this.image = this.iconsUrl + \"/\" + Utils.getHostname(hostnameUri) + \"/icon.png\";\n this.fallbackImage = \"images/bwi-globe.png\";\n } catch (e) {\n // Ignore error since the fallback icon will be shown if image is null.\n }\n }\n } else {\n this.image = null;\n }\n }\n\n private setCardIcon() {\n const brand = this.cipher.card.brand;\n if (this.imageEnabled && brand in cardIcons) {\n this.icon = \"credit-card-icon \" + cardIcons[brand];\n }\n }\n}\n","

\n \n \n
\n","import { Directive, NgZone, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { take } from \"rxjs/operators\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"jslib-common/abstractions/vaultTimeout.service\";\nimport { HashPurpose } from \"jslib-common/enums/hashPurpose\";\nimport { KeySuffixOptions } from \"jslib-common/enums/keySuffixOptions\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { SecretVerificationRequest } from \"jslib-common/models/request/secretVerificationRequest\";\n\n@Directive()\nexport class LockComponent implements OnInit {\n masterPassword = \"\";\n pin = \"\";\n showPassword = false;\n email: string;\n pinLock = false;\n webVaultHostname = \"\";\n formPromise: Promise;\n supportsBiometric: boolean;\n biometricLock: boolean;\n biometricText: string;\n hideInput: boolean;\n\n protected successRoute = \"vault\";\n protected onSuccessfulSubmit: () => Promise;\n\n private invalidPinAttempts = 0;\n private pinSet: [boolean, boolean];\n\n constructor(\n protected router: Router,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected cryptoService: CryptoService,\n protected vaultTimeoutService: VaultTimeoutService,\n protected environmentService: EnvironmentService,\n protected stateService: StateService,\n protected apiService: ApiService,\n protected logService: LogService,\n private keyConnectorService: KeyConnectorService,\n protected ngZone: NgZone\n ) {}\n\n async ngOnInit() {\n // Load the first and observe updates\n await this.load();\n this.stateService.activeAccount.subscribe(async () => {\n await this.load();\n });\n }\n\n async submit() {\n if (this.pinLock && (this.pin == null || this.pin === \"\")) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"pinRequired\")\n );\n return;\n }\n if (!this.pinLock && (this.masterPassword == null || this.masterPassword === \"\")) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return;\n }\n\n const kdf = await this.stateService.getKdfType();\n const kdfIterations = await this.stateService.getKdfIterations();\n\n if (this.pinLock) {\n let failed = true;\n try {\n if (this.pinSet[0]) {\n const key = await this.cryptoService.makeKeyFromPin(\n this.pin,\n this.email,\n kdf,\n kdfIterations,\n await this.stateService.getDecryptedPinProtected()\n );\n const encKey = await this.cryptoService.getEncKey(key);\n const protectedPin = await this.stateService.getProtectedPin();\n const decPin = await this.cryptoService.decryptToUtf8(\n new EncString(protectedPin),\n encKey\n );\n failed = decPin !== this.pin;\n if (!failed) {\n await this.setKeyAndContinue(key);\n }\n } else {\n const key = await this.cryptoService.makeKeyFromPin(\n this.pin,\n this.email,\n kdf,\n kdfIterations\n );\n failed = false;\n await this.setKeyAndContinue(key);\n }\n } catch {\n failed = true;\n }\n\n if (failed) {\n this.invalidPinAttempts++;\n if (this.invalidPinAttempts >= 5) {\n this.messagingService.send(\"logout\");\n return;\n }\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidPin\")\n );\n }\n } else {\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email,\n kdf,\n kdfIterations\n );\n const storedKeyHash = await this.cryptoService.getKeyHash();\n\n let passwordValid = false;\n\n if (storedKeyHash != null) {\n passwordValid = await this.cryptoService.compareAndUpdateKeyHash(this.masterPassword, key);\n } else {\n const request = new SecretVerificationRequest();\n const serverKeyHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n key,\n HashPurpose.ServerAuthorization\n );\n request.masterPasswordHash = serverKeyHash;\n try {\n this.formPromise = this.apiService.postAccountVerifyPassword(request);\n await this.formPromise;\n passwordValid = true;\n const localKeyHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n key,\n HashPurpose.LocalAuthorization\n );\n await this.cryptoService.setKeyHash(localKeyHash);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n if (passwordValid) {\n if (this.pinSet[0]) {\n const protectedPin = await this.stateService.getProtectedPin();\n const encKey = await this.cryptoService.getEncKey(key);\n const decPin = await this.cryptoService.decryptToUtf8(\n new EncString(protectedPin),\n encKey\n );\n const pinKey = await this.cryptoService.makePinKey(\n decPin,\n this.email,\n kdf,\n kdfIterations\n );\n await this.stateService.setDecryptedPinProtected(\n await this.cryptoService.encrypt(key.key, pinKey)\n );\n }\n await this.setKeyAndContinue(key);\n } else {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidMasterPassword\")\n );\n }\n }\n }\n\n async logOut() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"logOutConfirmation\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"cancel\")\n );\n if (confirmed) {\n this.messagingService.send(\"logout\");\n }\n }\n\n async unlockBiometric(): Promise {\n if (!this.biometricLock) {\n return;\n }\n\n const success = (await this.cryptoService.getKey(KeySuffixOptions.Biometric)) != null;\n\n if (success) {\n await this.doContinue();\n }\n\n return success;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n const input = document.getElementById(this.pinLock ? \"pin\" : \"masterPassword\");\n if (this.ngZone.isStable) {\n input.focus();\n } else {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => input.focus());\n }\n }\n\n private async setKeyAndContinue(key: SymmetricCryptoKey) {\n await this.cryptoService.setKey(key);\n await this.doContinue();\n }\n\n private async doContinue() {\n await this.stateService.setBiometricLocked(false);\n await this.stateService.setEverBeenUnlocked(true);\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n this.messagingService.send(\"unlocked\");\n if (this.onSuccessfulSubmit != null) {\n await this.onSuccessfulSubmit();\n } else if (this.router != null) {\n this.router.navigate([this.successRoute]);\n }\n }\n\n private async load() {\n this.pinSet = await this.vaultTimeoutService.isPinLockSet();\n this.pinLock =\n (this.pinSet[0] && (await this.stateService.getDecryptedPinProtected()) != null) ||\n this.pinSet[1];\n this.supportsBiometric = await this.platformUtilsService.supportsBiometric();\n this.biometricLock =\n (await this.vaultTimeoutService.isBiometricLockSet()) &&\n ((await this.cryptoService.hasKeyStored(KeySuffixOptions.Biometric)) ||\n !this.platformUtilsService.supportsSecureStorage());\n this.biometricText = await this.stateService.getBiometricText();\n this.email = await this.stateService.getEmail();\n const usesKeyConnector = await this.keyConnectorService.getUsesKeyConnector();\n this.hideInput = usesKeyConnector && !this.pinLock;\n\n // Users with key connector and without biometric or pin has no MP to unlock using\n if (usesKeyConnector && !(this.biometricLock || this.pinLock)) {\n await this.vaultTimeoutService.logOut();\n }\n\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n const vaultUrl =\n webVaultUrl === \"https://vault.bitwarden.com\" ? \"https://bitwarden.com\" : webVaultUrl;\n this.webVaultHostname = Utils.getHostname(vaultUrl);\n }\n}\n","import { Directive, Input, NgZone, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { take } from \"rxjs/operators\";\n\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { AuthResult } from \"jslib-common/models/domain/authResult\";\nimport { PasswordLogInCredentials } from \"jslib-common/models/domain/logInCredentials\";\n\nimport { CaptchaProtectedComponent } from \"./captchaProtected.component\";\n\n@Directive()\nexport class LoginComponent extends CaptchaProtectedComponent implements OnInit {\n @Input() email = \"\";\n @Input() rememberEmail = true;\n\n masterPassword = \"\";\n showPassword = false;\n formPromise: Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n onSuccessfulLoginForceResetNavigate: () => Promise;\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"vault\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n protected alwaysRememberEmail = false;\n\n constructor(\n protected authService: AuthService,\n protected router: Router,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n protected stateService: StateService,\n environmentService: EnvironmentService,\n protected passwordGenerationService: PasswordGenerationService,\n protected cryptoFunctionService: CryptoFunctionService,\n protected logService: LogService,\n protected ngZone: NgZone\n ) {\n super(environmentService, i18nService, platformUtilsService);\n }\n\n async ngOnInit() {\n if (this.email == null || this.email === \"\") {\n this.email = await this.stateService.getRememberedEmail();\n if (this.email == null) {\n this.email = \"\";\n }\n }\n if (!this.alwaysRememberEmail) {\n this.rememberEmail = (await this.stateService.getRememberedEmail()) != null;\n }\n if (Utils.isBrowser && !Utils.isNode) {\n this.focusInput();\n }\n }\n\n async submit() {\n await this.setupCaptcha();\n\n if (this.email == null || this.email === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"emailRequired\")\n );\n return;\n }\n if (this.email.indexOf(\"@\") === -1) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidEmail\")\n );\n return;\n }\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return;\n }\n\n try {\n const credentials = new PasswordLogInCredentials(\n this.email,\n this.masterPassword,\n this.captchaToken,\n null\n );\n this.formPromise = this.authService.logIn(credentials);\n const response = await this.formPromise;\n if (this.rememberEmail || this.alwaysRememberEmail) {\n await this.stateService.setRememberedEmail(this.email);\n } else {\n await this.stateService.setRememberedEmail(null);\n }\n if (this.handleCaptchaRequired(response)) {\n return;\n } else if (response.requiresTwoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute]);\n }\n } else if (response.forcePasswordReset) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n if (this.ngZone.isStable) {\n document.getElementById(\"masterPassword\").focus();\n } else {\n this.ngZone.onStable\n .pipe(take(1))\n .subscribe(() => document.getElementById(\"masterPassword\").focus());\n }\n }\n\n async launchSsoBrowser(clientId: string, ssoRedirectUri: string) {\n // Generate necessary sso params\n const passwordOptions: any = {\n type: \"password\",\n length: 64,\n uppercase: true,\n lowercase: true,\n numbers: true,\n special: false,\n };\n const state = await this.passwordGenerationService.generatePassword(passwordOptions);\n const ssoCodeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n const codeVerifierHash = await this.cryptoFunctionService.hash(ssoCodeVerifier, \"sha256\");\n const codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n\n // Save sso params\n await this.stateService.setSsoState(state);\n await this.stateService.setSsoCodeVerifier(ssoCodeVerifier);\n\n // Build URI\n const webUrl = this.environmentService.getWebVaultUrl();\n\n // Launch browser\n this.platformUtilsService.launchUri(\n webUrl +\n \"/#/sso?clientId=\" +\n clientId +\n \"&redirectUri=\" +\n encodeURIComponent(ssoRedirectUri) +\n \"&state=\" +\n state +\n \"&codeChallenge=\" +\n codeChallenge\n );\n }\n\n protected focusInput() {\n document\n .getElementById(this.email == null || this.email === \"\" ? \"email\" : \"masterPassword\")\n .focus();\n }\n}\n","import { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from \"@angular/cdk/a11y\";\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n ElementRef,\n OnDestroy,\n Type,\n ViewChild,\n ViewContainerRef,\n} from \"@angular/core\";\n\nimport { ModalService } from \"../../services/modal.service\";\n\nimport { ModalRef } from \"./modal.ref\";\n\n@Component({\n selector: \"app-modal\",\n template: \"\",\n})\nexport class DynamicModalComponent implements AfterViewInit, OnDestroy {\n componentRef: ComponentRef;\n\n @ViewChild(\"modalContent\", { read: ViewContainerRef, static: true })\n modalContentRef: ViewContainerRef;\n\n childComponentType: Type;\n setComponentParameters: (component: any) => void;\n\n private focusTrap: ConfigurableFocusTrap;\n\n constructor(\n private modalService: ModalService,\n private cd: ChangeDetectorRef,\n private el: ElementRef,\n private focusTrapFactory: ConfigurableFocusTrapFactory,\n public modalRef: ModalRef\n ) {}\n\n ngAfterViewInit() {\n this.loadChildComponent(this.childComponentType);\n if (this.setComponentParameters != null) {\n this.setComponentParameters(this.componentRef.instance);\n }\n this.cd.detectChanges();\n\n this.modalRef.created(this.el.nativeElement);\n this.focusTrap = this.focusTrapFactory.create(\n this.el.nativeElement.querySelector(\".modal-dialog\")\n );\n if (this.el.nativeElement.querySelector(\"[appAutoFocus]\") == null) {\n this.focusTrap.focusFirstTabbableElementWhenReady();\n }\n }\n\n loadChildComponent(componentType: Type) {\n const componentFactory = this.modalService.resolveComponentFactory(componentType);\n\n this.modalContentRef.clear();\n this.componentRef = this.modalContentRef.createComponent(componentFactory);\n }\n\n ngOnDestroy() {\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n this.focusTrap.destroy();\n }\n\n close() {\n this.modalRef.close();\n }\n\n getFocus() {\n const autoFocusEl = this.el.nativeElement.querySelector(\"[appAutoFocus]\") as HTMLElement;\n autoFocusEl?.focus();\n }\n}\n","import { InjectFlags, InjectionToken, Injector, Type } from \"@angular/core\";\n\nexport class ModalInjector implements Injector {\n constructor(private _parentInjector: Injector, private _additionalTokens: WeakMap) {}\n\n get(token: Type | InjectionToken, notFoundValue?: T, flags?: InjectFlags): T;\n get(token: any, notFoundValue?: any, flags?: any) {\n return this._additionalTokens.get(token) ?? this._parentInjector.get(token, notFoundValue);\n }\n}\n","import { Observable, Subject } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nexport class ModalRef {\n onCreated: Observable; // Modal added to the DOM.\n onClose: Observable; // Initiated close.\n onClosed: Observable; // Modal was closed (Remove element from DOM)\n onShow: Observable; // Start showing modal\n onShown: Observable; // Modal is fully visible\n\n private readonly _onCreated = new Subject();\n private readonly _onClose = new Subject();\n private readonly _onClosed = new Subject();\n private readonly _onShow = new Subject();\n private readonly _onShown = new Subject();\n private lastResult: any;\n\n constructor() {\n this.onCreated = this._onCreated.asObservable();\n this.onClose = this._onClose.asObservable();\n this.onClosed = this._onClosed.asObservable();\n this.onShow = this._onShow.asObservable();\n this.onShown = this._onShow.asObservable();\n }\n\n show() {\n this._onShow.next();\n }\n\n shown() {\n this._onShown.next();\n }\n\n close(result?: any) {\n this.lastResult = result;\n this._onClose.next(result);\n }\n\n closed() {\n this._onClosed.next(this.lastResult);\n }\n\n created(el: HTMLElement) {\n this._onCreated.next(el);\n }\n\n onClosedPromise(): Promise {\n return this.onClosed.pipe(first()).toPromise();\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { GeneratedPasswordHistory } from \"jslib-common/models/domain/generatedPasswordHistory\";\n\n@Directive()\nexport class PasswordGeneratorHistoryComponent implements OnInit {\n history: GeneratedPasswordHistory[] = [];\n\n constructor(\n protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService,\n private win: Window\n ) {}\n\n async ngOnInit() {\n this.history = await this.passwordGenerationService.getHistory();\n }\n\n clear() {\n this.history = [];\n this.passwordGenerationService.clear();\n }\n\n copy(password: string) {\n const copyOptions = this.win != null ? { window: this.win } : null;\n this.platformUtilsService.copyToClipboard(password, copyOptions);\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"password\"))\n );\n }\n}\n","import { Directive } from \"@angular/core\";\n\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\nimport { ModalRef } from \"./modal/modal.ref\";\n\n@Directive()\nexport class PasswordRepromptComponent {\n showPassword = false;\n masterPassword = \"\";\n\n constructor(\n private modalRef: ModalRef,\n private cryptoService: CryptoService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {}\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n }\n\n async submit() {\n if (!(await this.cryptoService.compareAndUpdateKeyHash(this.masterPassword, null))) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidMasterPassword\")\n );\n return;\n }\n\n this.modalRef.close(true);\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { DEFAULT_KDF_ITERATIONS, DEFAULT_KDF_TYPE } from \"jslib-common/enums/kdfType\";\nimport { KeysRequest } from \"jslib-common/models/request/keysRequest\";\nimport { ReferenceEventRequest } from \"jslib-common/models/request/referenceEventRequest\";\nimport { RegisterRequest } from \"jslib-common/models/request/registerRequest\";\n\nimport { CaptchaProtectedComponent } from \"./captchaProtected.component\";\n\n@Directive()\nexport class RegisterComponent extends CaptchaProtectedComponent implements OnInit {\n name = \"\";\n email = \"\";\n masterPassword = \"\";\n confirmMasterPassword = \"\";\n hint = \"\";\n showPassword = false;\n formPromise: Promise;\n masterPasswordScore: number;\n referenceData: ReferenceEventRequest;\n showTerms = false;\n acceptPolicies = false;\n\n protected successRoute = \"login\";\n private masterPasswordStrengthTimeout: any;\n\n constructor(\n protected authService: AuthService,\n protected router: Router,\n i18nService: I18nService,\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n protected stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n protected passwordGenerationService: PasswordGenerationService,\n environmentService: EnvironmentService,\n protected logService: LogService\n ) {\n super(environmentService, i18nService, platformUtilsService);\n this.showTerms = false;\n }\n\n async ngOnInit() {\n this.setupCaptcha();\n }\n\n get masterPasswordScoreWidth() {\n return this.masterPasswordScore == null ? 0 : (this.masterPasswordScore + 1) * 20;\n }\n\n get masterPasswordScoreColor() {\n switch (this.masterPasswordScore) {\n case 4:\n return \"success\";\n case 3:\n return \"primary\";\n case 2:\n return \"warning\";\n default:\n return \"danger\";\n }\n }\n\n get masterPasswordScoreText() {\n switch (this.masterPasswordScore) {\n case 4:\n return this.i18nService.t(\"strong\");\n case 3:\n return this.i18nService.t(\"good\");\n case 2:\n return this.i18nService.t(\"weak\");\n default:\n return this.masterPasswordScore != null ? this.i18nService.t(\"weak\") : null;\n }\n }\n\n async submit() {\n if (typeof crypto.subtle === 'undefined') {\n this.platformUtilsService.showToast(\n \"error\",\n \"This browser requires HTTPS to use the web vault\",\n \"Check the Vaultwarden wiki for details on how to enable it\"\n );\n return;\n }\n\n if (!this.acceptPolicies && this.showTerms) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"acceptPoliciesError\")\n );\n return;\n }\n\n if (this.email == null || this.email === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"emailRequired\")\n );\n return;\n }\n if (this.email.indexOf(\"@\") === -1) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidEmail\")\n );\n return;\n }\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return;\n }\n if (this.masterPassword.length < 8) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassLength\")\n );\n return;\n }\n if (this.masterPassword !== this.confirmMasterPassword) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassDoesntMatch\")\n );\n return;\n }\n\n const strengthResult = this.passwordGenerationService.passwordStrength(\n this.masterPassword,\n this.getPasswordStrengthUserInput()\n );\n if (strengthResult != null && strengthResult.score < 3) {\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"weakMasterPasswordDesc\"),\n this.i18nService.t(\"weakMasterPassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n return;\n }\n }\n\n if (this.hint === this.masterPassword) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"hintEqualsPassword\")\n );\n return;\n }\n\n this.name = this.name === \"\" ? null : this.name;\n this.email = this.email.trim().toLowerCase();\n const kdf = DEFAULT_KDF_TYPE;\n const kdfIterations = DEFAULT_KDF_ITERATIONS;\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email,\n kdf,\n kdfIterations\n );\n const encKey = await this.cryptoService.makeEncKey(key);\n const hashedPassword = await this.cryptoService.hashPassword(this.masterPassword, key);\n const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n const request = new RegisterRequest(\n this.email,\n this.name,\n hashedPassword,\n this.hint,\n encKey[1].encryptedString,\n kdf,\n kdfIterations,\n this.referenceData,\n this.captchaToken\n );\n request.keys = new KeysRequest(keys[0], keys[1].encryptedString);\n const orgInvite = await this.stateService.getOrganizationInvitation();\n if (orgInvite != null && orgInvite.token != null && orgInvite.organizationUserId != null) {\n request.token = orgInvite.token;\n request.organizationUserId = orgInvite.organizationUserId;\n }\n\n try {\n this.formPromise = this.apiService.postRegister(request);\n try {\n await this.formPromise;\n } catch (e) {\n if (this.handleCaptchaRequired(e)) {\n return;\n } else {\n throw e;\n }\n }\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"newAccountCreated\"));\n this.router.navigate([this.successRoute], { queryParams: { email: this.email } });\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n updatePasswordStrength() {\n if (this.masterPasswordStrengthTimeout != null) {\n clearTimeout(this.masterPasswordStrengthTimeout);\n }\n this.masterPasswordStrengthTimeout = setTimeout(() => {\n const strengthResult = this.passwordGenerationService.passwordStrength(\n this.masterPassword,\n this.getPasswordStrengthUserInput()\n );\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n }, 300);\n }\n\n private getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const atPosition = this.email.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput.concat(\n this.email\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n );\n }\n if (this.name != null && this.name !== \"\") {\n userInput = userInput.concat(this.name.trim().toLowerCase().split(\" \"));\n }\n return userInput;\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\n@Directive()\nexport class RemovePasswordComponent implements OnInit {\n actionPromise: Promise;\n continuing = false;\n leaving = false;\n\n loading = true;\n organization: Organization;\n email: string;\n\n constructor(\n private router: Router,\n private stateService: StateService,\n private apiService: ApiService,\n private syncService: SyncService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n async ngOnInit() {\n this.organization = await this.keyConnectorService.getManagingOrganization();\n this.email = await this.stateService.getEmail();\n await this.syncService.fullSync(false);\n this.loading = false;\n }\n\n async convert() {\n this.continuing = true;\n this.actionPromise = this.keyConnectorService.migrateUser();\n\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedMasterPassword\")\n );\n await this.keyConnectorService.removeConvertAccountRequired();\n this.router.navigate([\"\"]);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), e.message);\n }\n }\n\n async leave() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"leaveOrganizationConfirmation\"),\n this.organization.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.leaving = true;\n this.actionPromise = this.apiService.postLeaveOrganization(this.organization.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"leftOrganization\"));\n await this.keyConnectorService.removeConvertAccountRequired();\n this.router.navigate([\"\"]);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), e);\n }\n }\n}\n","import { DatePipe } from \"@angular/common\";\nimport { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SendService } from \"jslib-common/abstractions/send.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { SendType } from \"jslib-common/enums/sendType\";\nimport { EncArrayBuffer } from \"jslib-common/models/domain/encArrayBuffer\";\nimport { Send } from \"jslib-common/models/domain/send\";\nimport { SendFileView } from \"jslib-common/models/view/sendFileView\";\nimport { SendTextView } from \"jslib-common/models/view/sendTextView\";\nimport { SendView } from \"jslib-common/models/view/sendView\";\n\n@Directive()\nexport class AddEditComponent implements OnInit {\n @Input() sendId: string;\n @Input() type: SendType;\n\n @Output() onSavedSend = new EventEmitter();\n @Output() onDeletedSend = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n\n copyLink = false;\n disableSend = false;\n disableHideEmail = false;\n send: SendView;\n deletionDate: string;\n expirationDate: string;\n hasPassword: boolean;\n password: string;\n showPassword = false;\n formPromise: Promise;\n deletePromise: Promise;\n sendType = SendType;\n typeOptions: any[];\n canAccessPremium = true;\n emailVerified = true;\n alertShown = false;\n showOptions = false;\n\n private sendLinkBaseUrl: string;\n\n constructor(\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected environmentService: EnvironmentService,\n protected datePipe: DatePipe,\n protected sendService: SendService,\n protected messagingService: MessagingService,\n protected policyService: PolicyService,\n private logService: LogService,\n protected stateService: StateService\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"sendTypeFile\"), value: SendType.File },\n { name: i18nService.t(\"sendTypeText\"), value: SendType.Text },\n ];\n this.sendLinkBaseUrl = this.environmentService.getSendUrl();\n }\n\n get link(): string {\n if (this.send.id != null && this.send.accessId != null) {\n return this.sendLinkBaseUrl + this.send.accessId + \"/\" + this.send.urlB64Key;\n }\n return null;\n }\n\n get isSafari() {\n return this.platformUtilsService.isSafari();\n }\n\n get isDateTimeLocalSupported(): boolean {\n return !(this.platformUtilsService.isFirefox() || this.platformUtilsService.isSafari());\n }\n\n async ngOnInit() {\n await this.load();\n }\n\n get editMode(): boolean {\n return this.sendId != null;\n }\n\n get title(): string {\n return this.i18nService.t(this.editMode ? \"editSend\" : \"createSend\");\n }\n\n setDates(event: { deletionDate: string; expirationDate: string }) {\n this.deletionDate = event.deletionDate;\n this.expirationDate = event.expirationDate;\n }\n\n async load() {\n this.disableSend = await this.policyService.policyAppliesToUser(PolicyType.DisableSend);\n this.disableHideEmail = await this.policyService.policyAppliesToUser(\n PolicyType.SendOptions,\n (p) => p.data.disableHideEmail\n );\n\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n this.emailVerified = await this.stateService.getEmailVerified();\n if (!this.canAccessPremium || !this.emailVerified) {\n this.type = SendType.Text;\n }\n\n if (this.send == null) {\n if (this.editMode) {\n const send = await this.loadSend();\n this.send = await send.decrypt();\n } else {\n this.send = new SendView();\n this.send.type = this.type == null ? SendType.File : this.type;\n this.send.file = new SendFileView();\n this.send.text = new SendTextView();\n this.send.deletionDate = new Date();\n this.send.deletionDate.setDate(this.send.deletionDate.getDate() + 7);\n }\n }\n\n this.hasPassword = this.send.password != null && this.send.password.trim() !== \"\";\n }\n\n async submit(): Promise {\n if (this.disableSend) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"sendDisabledWarning\")\n );\n return false;\n }\n\n if (this.send.name == null || this.send.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n let file: File = null;\n if (this.send.type === SendType.File && !this.editMode) {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n file = files[0];\n if (files[0].size > 524288000) {\n // 500 MB\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"maxFileSize\")\n );\n return;\n }\n }\n\n if (this.password != null && this.password.trim() === \"\") {\n this.password = null;\n }\n\n this.formPromise = this.encryptSend(file).then(async (encSend) => {\n const uploadPromise = this.sendService.saveWithServer(encSend);\n await uploadPromise;\n if (this.send.id == null) {\n this.send.id = encSend[0].id;\n }\n if (this.send.accessId == null) {\n this.send.accessId = encSend[0].accessId;\n }\n this.onSavedSend.emit(this.send);\n if (this.copyLink && this.link != null) {\n const copySuccess = await this.copyLinkToClipboard(this.link);\n if (copySuccess ?? true) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedSend\" : \"createdSend\")\n );\n } else {\n await this.platformUtilsService.showDialog(\n this.i18nService.t(this.editMode ? \"editedSend\" : \"createdSend\"),\n null,\n this.i18nService.t(\"ok\"),\n null,\n \"success\",\n null\n );\n await this.copyLinkToClipboard(this.link);\n }\n }\n });\n try {\n await this.formPromise;\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n return false;\n }\n\n async copyLinkToClipboard(link: string): Promise {\n return Promise.resolve(this.platformUtilsService.copyToClipboard(link));\n }\n\n async delete(): Promise {\n if (this.deletePromise != null) {\n return false;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteSendConfirmation\"),\n this.i18nService.t(\"deleteSend\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.sendService.deleteWithServer(this.send.id);\n await this.deletePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedSend\"));\n await this.load();\n this.onDeletedSend.emit(this.send);\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n typeChanged() {\n if (this.send.type === SendType.File && !this.alertShown) {\n if (!this.canAccessPremium) {\n this.alertShown = true;\n this.messagingService.send(\"premiumRequired\");\n } else if (!this.emailVerified) {\n this.alertShown = true;\n this.messagingService.send(\"emailVerificationRequired\");\n }\n }\n }\n\n toggleOptions() {\n this.showOptions = !this.showOptions;\n }\n\n protected async loadSend(): Promise {\n return this.sendService.get(this.sendId);\n }\n\n protected async encryptSend(file: File): Promise<[Send, EncArrayBuffer]> {\n const sendData = await this.sendService.encrypt(this.send, file, this.password, null);\n\n // Parse dates\n try {\n sendData[0].deletionDate = this.deletionDate == null ? null : new Date(this.deletionDate);\n } catch {\n sendData[0].deletionDate = null;\n }\n try {\n sendData[0].expirationDate =\n this.expirationDate == null ? null : new Date(this.expirationDate);\n } catch {\n sendData[0].expirationDate = null;\n }\n\n return sendData;\n }\n\n protected togglePasswordVisible() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"password\").focus();\n }\n}\n","import { DatePipe } from \"@angular/common\";\nimport { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { FormControl, FormGroup } from \"@angular/forms\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n// Different BrowserPath = different controls.\nenum BrowserPath {\n // Native datetime-locale.\n // We are happy.\n Default = \"default\",\n\n // Native date and time inputs, but no datetime-locale.\n // We use individual date and time inputs and create a datetime programatically on submit.\n Firefox = \"firefox\",\n\n // No native date, time, or datetime-locale inputs.\n // We use a polyfill for dates and a dropdown for times.\n Safari = \"safari\",\n}\n\nenum DateField {\n DeletionDate = \"deletion\",\n ExpriationDate = \"expiration\",\n}\n\n// Value = hours\nenum DatePreset {\n OneHour = 1,\n OneDay = 24,\n TwoDays = 48,\n ThreeDays = 72,\n SevenDays = 168,\n ThirtyDays = 720,\n Custom = 0,\n Never = null,\n}\n\n// TimeOption is used for the dropdown implementation of custom times\n// twelveHour = displayed time; twentyFourHour = time used in logic\ninterface TimeOption {\n twelveHour: string;\n twentyFourHour: string;\n}\n\n@Directive()\nexport class EffluxDatesComponent implements OnInit {\n @Input() readonly initialDeletionDate: Date;\n @Input() readonly initialExpirationDate: Date;\n @Input() readonly editMode: boolean;\n @Input() readonly disabled: boolean;\n\n @Output() datesChanged = new EventEmitter<{ deletionDate: string; expirationDate: string }>();\n\n get browserPath(): BrowserPath {\n if (this.platformUtilsService.isFirefox()) {\n return BrowserPath.Firefox;\n } else if (this.platformUtilsService.isSafari()) {\n return BrowserPath.Safari;\n }\n return BrowserPath.Default;\n }\n\n datesForm = new FormGroup({\n selectedDeletionDatePreset: new FormControl(),\n selectedExpirationDatePreset: new FormControl(),\n defaultDeletionDateTime: new FormControl(),\n defaultExpirationDateTime: new FormControl(),\n fallbackDeletionDate: new FormControl(),\n fallbackDeletionTime: new FormControl(),\n fallbackExpirationDate: new FormControl(),\n fallbackExpirationTime: new FormControl(),\n });\n\n deletionDatePresets: any[] = [\n { name: this.i18nService.t(\"oneHour\"), value: DatePreset.OneHour },\n { name: this.i18nService.t(\"oneDay\"), value: DatePreset.OneDay },\n { name: this.i18nService.t(\"days\", \"2\"), value: DatePreset.TwoDays },\n { name: this.i18nService.t(\"days\", \"3\"), value: DatePreset.ThreeDays },\n { name: this.i18nService.t(\"days\", \"7\"), value: DatePreset.SevenDays },\n { name: this.i18nService.t(\"days\", \"30\"), value: DatePreset.ThirtyDays },\n { name: this.i18nService.t(\"custom\"), value: DatePreset.Custom },\n ];\n\n expirationDatePresets: any[] = [\n { name: this.i18nService.t(\"never\"), value: DatePreset.Never },\n ].concat([...this.deletionDatePresets]);\n\n get selectedDeletionDatePreset(): FormControl {\n return this.datesForm.get(\"selectedDeletionDatePreset\") as FormControl;\n }\n\n get selectedExpirationDatePreset(): FormControl {\n return this.datesForm.get(\"selectedExpirationDatePreset\") as FormControl;\n }\n\n get defaultDeletionDateTime(): FormControl {\n return this.datesForm.get(\"defaultDeletionDateTime\") as FormControl;\n }\n\n get defaultExpirationDateTime(): FormControl {\n return this.datesForm.get(\"defaultExpirationDateTime\") as FormControl;\n }\n\n get fallbackDeletionDate(): FormControl {\n return this.datesForm.get(\"fallbackDeletionDate\") as FormControl;\n }\n\n get fallbackDeletionTime(): FormControl {\n return this.datesForm.get(\"fallbackDeletionTime\") as FormControl;\n }\n\n get fallbackExpirationDate(): FormControl {\n return this.datesForm.get(\"fallbackExpirationDate\") as FormControl;\n }\n\n get fallbackExpirationTime(): FormControl {\n return this.datesForm.get(\"fallbackExpirationTime\") as FormControl;\n }\n\n // Should be able to call these at any time and compute a submitable value\n get formattedDeletionDate(): string {\n switch (this.selectedDeletionDatePreset.value as DatePreset) {\n case DatePreset.Never:\n this.selectedDeletionDatePreset.setValue(DatePreset.SevenDays);\n return this.formattedDeletionDate;\n case DatePreset.Custom:\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n return this.fallbackDeletionDate.value + \"T\" + this.fallbackDeletionTime.value;\n default:\n return this.defaultDeletionDateTime.value;\n }\n default: {\n const now = new Date();\n const miliseconds = now.setTime(\n now.getTime() + (this.selectedDeletionDatePreset.value as number) * 60 * 60 * 1000\n );\n return new Date(miliseconds).toString();\n }\n }\n }\n\n get formattedExpirationDate(): string {\n switch (this.selectedExpirationDatePreset.value as DatePreset) {\n case DatePreset.Never:\n return null;\n case DatePreset.Custom:\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n if (\n (!this.fallbackExpirationDate.value || !this.fallbackExpirationTime.value) &&\n this.editMode\n ) {\n return null;\n }\n return this.fallbackExpirationDate.value + \"T\" + this.fallbackExpirationTime.value;\n default:\n if (!this.defaultExpirationDateTime.value) {\n return null;\n }\n return this.defaultExpirationDateTime.value;\n }\n default: {\n const now = new Date();\n const miliseconds = now.setTime(\n now.getTime() + (this.selectedExpirationDatePreset.value as number) * 60 * 60 * 1000\n );\n return new Date(miliseconds).toString();\n }\n }\n }\n //\n\n get safariDeletionTimePresetOptions() {\n return this.safariTimePresetOptions(DateField.DeletionDate);\n }\n\n get safariExpirationTimePresetOptions() {\n return this.safariTimePresetOptions(DateField.ExpriationDate);\n }\n\n private get nextWeek(): Date {\n const nextWeek = new Date();\n nextWeek.setDate(nextWeek.getDate() + 7);\n return nextWeek;\n }\n\n constructor(\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected datePipe: DatePipe\n ) {}\n\n ngOnInit(): void {\n this.setInitialFormValues();\n this.emitDates();\n this.datesForm.valueChanges.subscribe(() => {\n this.emitDates();\n });\n }\n\n onDeletionDatePresetSelect(value: DatePreset) {\n this.selectedDeletionDatePreset.setValue(value);\n }\n\n clearExpiration() {\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n this.fallbackExpirationDate.setValue(null);\n this.fallbackExpirationTime.setValue(null);\n break;\n case BrowserPath.Default:\n this.defaultExpirationDateTime.setValue(null);\n break;\n }\n }\n\n protected emitDates() {\n this.datesChanged.emit({\n deletionDate: this.formattedDeletionDate,\n expirationDate: this.formattedExpirationDate,\n });\n }\n\n protected setInitialFormValues() {\n if (this.editMode) {\n this.selectedDeletionDatePreset.setValue(DatePreset.Custom);\n this.selectedExpirationDatePreset.setValue(DatePreset.Custom);\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n this.fallbackDeletionDate.setValue(this.initialDeletionDate.toISOString().slice(0, 10));\n this.fallbackDeletionTime.setValue(this.initialDeletionDate.toTimeString().slice(0, 5));\n if (this.initialExpirationDate != null) {\n this.fallbackExpirationDate.setValue(\n this.initialExpirationDate.toISOString().slice(0, 10)\n );\n this.fallbackExpirationTime.setValue(\n this.initialExpirationDate.toTimeString().slice(0, 5)\n );\n }\n break;\n case BrowserPath.Default:\n if (this.initialExpirationDate) {\n this.defaultExpirationDateTime.setValue(\n this.datePipe.transform(new Date(this.initialExpirationDate), \"yyyy-MM-ddTHH:mm\")\n );\n }\n this.defaultDeletionDateTime.setValue(\n this.datePipe.transform(new Date(this.initialDeletionDate), \"yyyy-MM-ddTHH:mm\")\n );\n break;\n }\n } else {\n this.selectedDeletionDatePreset.setValue(DatePreset.SevenDays);\n this.selectedExpirationDatePreset.setValue(DatePreset.Never);\n\n switch (this.browserPath) {\n case BrowserPath.Safari:\n this.fallbackDeletionDate.setValue(this.nextWeek.toISOString().slice(0, 10));\n this.fallbackDeletionTime.setValue(\n this.safariTimePresetOptions(DateField.DeletionDate)[1].twentyFourHour\n );\n break;\n default:\n break;\n }\n }\n }\n\n protected safariTimePresetOptions(field: DateField): TimeOption[] {\n // init individual arrays for major sort groups\n const noon: TimeOption[] = [];\n const midnight: TimeOption[] = [];\n const ams: TimeOption[] = [];\n const pms: TimeOption[] = [];\n\n // determine minute skip (5 min, 10 min, 15 min, etc.)\n const minuteIncrementer = 15;\n\n // loop through each hour on a 12 hour system\n for (let h = 1; h <= 12; h++) {\n // loop through each minute in the hour using the skip to incriment\n for (let m = 0; m < 60; m += minuteIncrementer) {\n // init the final strings that will be added to the lists\n let hour = h.toString();\n let minutes = m.toString();\n\n // add prepending 0s to single digit hours/minutes\n if (h < 10) {\n hour = \"0\" + hour;\n }\n if (m < 10) {\n minutes = \"0\" + minutes;\n }\n\n // build time strings and push to relevant sort groups\n if (h === 12) {\n const midnightOption: TimeOption = {\n twelveHour: `${hour}:${minutes} AM`,\n twentyFourHour: `00:${minutes}`,\n };\n midnight.push(midnightOption);\n\n const noonOption: TimeOption = {\n twelveHour: `${hour}:${minutes} PM`,\n twentyFourHour: `${hour}:${minutes}`,\n };\n noon.push(noonOption);\n } else {\n const amOption: TimeOption = {\n twelveHour: `${hour}:${minutes} AM`,\n twentyFourHour: `${hour}:${minutes}`,\n };\n ams.push(amOption);\n\n const pmOption: TimeOption = {\n twelveHour: `${hour}:${minutes} PM`,\n twentyFourHour: `${h + 12}:${minutes}`,\n };\n pms.push(pmOption);\n }\n }\n }\n\n // bring all the arrays together in the right order\n const validTimes = [...midnight, ...ams, ...noon, ...pms];\n\n // determine if an unsupported value already exists on the send & add that to the top of the option list\n // example: if the Send was created with a different client\n if (field === DateField.ExpriationDate && this.initialExpirationDate != null && this.editMode) {\n const previousValue: TimeOption = {\n twelveHour: this.datePipe.transform(this.initialExpirationDate, \"hh:mm a\"),\n twentyFourHour: this.datePipe.transform(this.initialExpirationDate, \"HH:mm\"),\n };\n return [previousValue, { twelveHour: null, twentyFourHour: null }, ...validTimes];\n } else if (\n field === DateField.DeletionDate &&\n this.initialDeletionDate != null &&\n this.editMode\n ) {\n const previousValue: TimeOption = {\n twelveHour: this.datePipe.transform(this.initialDeletionDate, \"hh:mm a\"),\n twentyFourHour: this.datePipe.transform(this.initialDeletionDate, \"HH:mm\"),\n };\n return [previousValue, ...validTimes];\n } else {\n return [{ twelveHour: null, twentyFourHour: null }, ...validTimes];\n }\n }\n}\n","import { Directive, NgZone, OnInit } from \"@angular/core\";\n\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { SendService } from \"jslib-common/abstractions/send.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { SendType } from \"jslib-common/enums/sendType\";\nimport { SendView } from \"jslib-common/models/view/sendView\";\n\n@Directive()\nexport class SendComponent implements OnInit {\n disableSend = false;\n sendType = SendType;\n loaded = false;\n loading = true;\n refreshing = false;\n expired = false;\n type: SendType = null;\n sends: SendView[] = [];\n filteredSends: SendView[] = [];\n searchText: string;\n selectedType: SendType;\n selectedAll: boolean;\n searchPlaceholder: string;\n filter: (cipher: SendView) => boolean;\n searchPending = false;\n hasSearched = false; // search() function called - returns true if text qualifies for search\n\n actionPromise: any;\n onSuccessfulRemovePassword: () => Promise;\n onSuccessfulDelete: () => Promise;\n onSuccessfulLoad: () => Promise;\n\n private searchTimeout: any;\n\n constructor(\n protected sendService: SendService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected environmentService: EnvironmentService,\n protected ngZone: NgZone,\n protected searchService: SearchService,\n protected policyService: PolicyService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.disableSend = await this.policyService.policyAppliesToUser(PolicyType.DisableSend);\n }\n\n async load(filter: (send: SendView) => boolean = null) {\n this.loading = true;\n const sends = await this.sendService.getAllDecrypted();\n this.sends = sends;\n if (this.onSuccessfulLoad != null) {\n await this.onSuccessfulLoad();\n } else {\n // Default action\n this.selectAll();\n }\n this.loading = false;\n this.loaded = true;\n }\n\n async reload(filter: (send: SendView) => boolean = null) {\n this.loaded = false;\n this.sends = [];\n await this.load(filter);\n }\n\n async refresh() {\n try {\n this.refreshing = true;\n await this.reload(this.filter);\n } finally {\n this.refreshing = false;\n }\n }\n\n async applyFilter(filter: (send: SendView) => boolean = null) {\n this.filter = filter;\n await this.search(null);\n }\n\n async search(timeout: number = null) {\n this.searchPending = false;\n if (this.searchTimeout != null) {\n clearTimeout(this.searchTimeout);\n }\n if (timeout == null) {\n this.hasSearched = this.searchService.isSearchable(this.searchText);\n this.filteredSends = this.sends.filter((s) => this.filter == null || this.filter(s));\n this.applyTextSearch();\n return;\n }\n this.searchPending = true;\n this.searchTimeout = setTimeout(async () => {\n this.hasSearched = this.searchService.isSearchable(this.searchText);\n this.filteredSends = this.sends.filter((s) => this.filter == null || this.filter(s));\n this.applyTextSearch();\n this.searchPending = false;\n }, timeout);\n }\n\n async removePassword(s: SendView): Promise {\n if (this.actionPromise != null || s.password == null) {\n return;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removePasswordConfirmation\"),\n this.i18nService.t(\"removePassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendService.removePasswordWithServer(s.id);\n await this.actionPromise;\n if (this.onSuccessfulRemovePassword != null) {\n this.onSuccessfulRemovePassword();\n } else {\n // Default actions\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"removedPassword\"));\n await this.load();\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n\n async delete(s: SendView): Promise {\n if (this.actionPromise != null) {\n return false;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteSendConfirmation\"),\n this.i18nService.t(\"deleteSend\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendService.deleteWithServer(s.id);\n await this.actionPromise;\n\n if (this.onSuccessfulDelete != null) {\n this.onSuccessfulDelete();\n } else {\n // Default actions\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedSend\"));\n await this.refresh();\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n return true;\n }\n\n copy(s: SendView) {\n const sendLinkBaseUrl = this.environmentService.getSendUrl();\n const link = sendLinkBaseUrl + s.accessId + \"/\" + s.urlB64Key;\n this.platformUtilsService.copyToClipboard(link);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"sendLink\"))\n );\n }\n\n searchTextChanged() {\n this.search(200);\n }\n\n selectAll() {\n this.clearSelections();\n this.selectedAll = true;\n this.applyFilter(null);\n }\n\n selectType(type: SendType) {\n this.clearSelections();\n this.selectedType = type;\n this.applyFilter((s) => s.type === type);\n }\n\n clearSelections() {\n this.selectedAll = false;\n this.selectedType = null;\n }\n\n private applyTextSearch() {\n if (this.searchText != null) {\n this.filteredSends = this.searchService.searchSends(this.filteredSends, this.searchText);\n }\n }\n}\n","import { Directive } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { HashPurpose } from \"jslib-common/enums/hashPurpose\";\nimport { DEFAULT_KDF_ITERATIONS, DEFAULT_KDF_TYPE } from \"jslib-common/enums/kdfType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { KeysRequest } from \"jslib-common/models/request/keysRequest\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest\";\nimport { SetPasswordRequest } from \"jslib-common/models/request/setPasswordRequest\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"./change-password.component\";\n\n@Directive()\nexport class SetPasswordComponent extends BaseChangePasswordComponent {\n syncLoading = true;\n showPassword = false;\n hint = \"\";\n identifier: string = null;\n orgId: string;\n resetPasswordAutoEnroll = false;\n\n onSuccessfulChangePassword: () => Promise;\n successRoute = \"vault\";\n\n constructor(\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n protected router: Router,\n private apiService: ApiService,\n private syncService: SyncService,\n private route: ActivatedRoute,\n stateService: StateService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n await this.syncService.fullSync(true);\n this.syncLoading = false;\n\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n }\n });\n\n // Automatic Enrollment Detection\n if (this.identifier != null) {\n try {\n const response = await this.apiService.getOrganizationAutoEnrollStatus(this.identifier);\n this.orgId = response.id;\n this.resetPasswordAutoEnroll = response.resetPasswordEnabled;\n this.enforcedPolicyOptions =\n await this.policyService.getMasterPasswordPoliciesForInvitedUsers(this.orgId);\n } catch {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n }\n\n super.ngOnInit();\n }\n\n async setupSubmitActions() {\n this.kdf = DEFAULT_KDF_TYPE;\n this.kdfIterations = DEFAULT_KDF_ITERATIONS;\n return true;\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n const request = new SetPasswordRequest(\n masterPasswordHash,\n encKey[1].encryptedString,\n this.hint,\n this.kdf,\n this.kdfIterations,\n this.identifier,\n new KeysRequest(keys[0], keys[1].encryptedString)\n );\n try {\n if (this.resetPasswordAutoEnroll) {\n this.formPromise = this.apiService\n .setPassword(request)\n .then(async () => {\n await this.onSetPasswordSuccess(key, encKey, keys);\n return this.apiService.getOrganizationKeys(this.orgId);\n })\n .then(async (response) => {\n if (response == null) {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n const userId = await this.stateService.getUserId();\n const publicKey = Utils.fromB64ToArray(response.publicKey);\n\n // RSA Encrypt user's encKey.key with organization public key\n const userEncKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(\n userEncKey.key,\n publicKey.buffer\n );\n\n const resetRequest = new OrganizationUserResetPasswordEnrollmentRequest();\n resetRequest.resetPasswordKey = encryptedKey.encryptedString;\n\n return this.apiService.putOrganizationUserResetPasswordEnrollment(\n this.orgId,\n userId,\n resetRequest\n );\n });\n } else {\n this.formPromise = this.apiService.setPassword(request).then(async () => {\n await this.onSetPasswordSuccess(key, encKey, keys);\n });\n }\n\n await this.formPromise;\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.router.navigate([this.successRoute]);\n }\n } catch {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n private async onSetPasswordSuccess(\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString],\n keys: [string, EncString]\n ) {\n await this.stateService.setKdfType(this.kdf);\n await this.stateService.setKdfIterations(this.kdfIterations);\n await this.cryptoService.setKey(key);\n await this.cryptoService.setEncKey(encKey[1].encryptedString);\n await this.cryptoService.setEncPrivateKey(keys[1].encryptedString);\n\n const localKeyHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n key,\n HashPurpose.LocalAuthorization\n );\n await this.cryptoService.setKeyHash(localKeyHash);\n }\n}\n","import { Directive, Input, OnInit } from \"@angular/core\";\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n ValidationErrors,\n Validator,\n} from \"@angular/forms\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { Policy } from \"jslib-common/models/domain/policy\";\n\n@Directive()\nexport class VaultTimeoutInputComponent implements ControlValueAccessor, Validator, OnInit {\n get showCustom() {\n return this.form.get(\"vaultTimeout\").value === VaultTimeoutInputComponent.CUSTOM_VALUE;\n }\n\n static CUSTOM_VALUE = -100;\n\n form = this.formBuilder.group({\n vaultTimeout: [null],\n custom: this.formBuilder.group({\n hours: [null],\n minutes: [null],\n }),\n });\n\n @Input() vaultTimeouts: { name: string; value: number }[];\n vaultTimeoutPolicy: Policy;\n vaultTimeoutPolicyHours: number;\n vaultTimeoutPolicyMinutes: number;\n\n private onChange: (vaultTimeout: number) => void;\n private validatorChange: () => void;\n\n constructor(\n private formBuilder: FormBuilder,\n private policyService: PolicyService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n if (await this.policyService.policyAppliesToUser(PolicyType.MaximumVaultTimeout)) {\n const vaultTimeoutPolicy = await this.policyService.getAll(PolicyType.MaximumVaultTimeout);\n\n this.vaultTimeoutPolicy = vaultTimeoutPolicy[0];\n this.vaultTimeoutPolicyHours = Math.floor(this.vaultTimeoutPolicy.data.minutes / 60);\n this.vaultTimeoutPolicyMinutes = this.vaultTimeoutPolicy.data.minutes % 60;\n\n this.vaultTimeouts = this.vaultTimeouts.filter(\n (t) =>\n t.value <= this.vaultTimeoutPolicy.data.minutes &&\n (t.value > 0 || t.value === VaultTimeoutInputComponent.CUSTOM_VALUE) &&\n t.value != null\n );\n this.validatorChange();\n }\n\n this.form.valueChanges.subscribe(async (value) => {\n this.onChange(this.getVaultTimeout(value));\n });\n\n // Assign the previous value to the custom fields\n this.form.get(\"vaultTimeout\").valueChanges.subscribe((value) => {\n if (value !== VaultTimeoutInputComponent.CUSTOM_VALUE) {\n return;\n }\n\n const current = Math.max(this.form.value.vaultTimeout, 0);\n this.form.patchValue({\n custom: {\n hours: Math.floor(current / 60),\n minutes: current % 60,\n },\n });\n });\n }\n\n ngOnChanges() {\n this.vaultTimeouts.push({\n name: this.i18nService.t(\"custom\"),\n value: VaultTimeoutInputComponent.CUSTOM_VALUE,\n });\n }\n\n getVaultTimeout(value: any) {\n if (value.vaultTimeout !== VaultTimeoutInputComponent.CUSTOM_VALUE) {\n return value.vaultTimeout;\n }\n\n return value.custom.hours * 60 + value.custom.minutes;\n }\n\n writeValue(value: number): void {\n if (value == null) {\n return;\n }\n\n if (this.vaultTimeouts.every((p) => p.value !== value)) {\n this.form.setValue({\n vaultTimeout: VaultTimeoutInputComponent.CUSTOM_VALUE,\n custom: {\n hours: Math.floor(value / 60),\n minutes: value % 60,\n },\n });\n return;\n }\n\n this.form.patchValue({\n vaultTimeout: value,\n });\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any): void {\n // Empty\n }\n\n setDisabledState?(isDisabled: boolean): void {\n // Empty\n }\n\n validate(control: AbstractControl): ValidationErrors {\n if (this.vaultTimeoutPolicy && this.vaultTimeoutPolicy?.data?.minutes < control.value) {\n return { policyError: true };\n }\n\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange = fn;\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Directive()\nexport class ShareComponent implements OnInit {\n @Input() cipherId: string;\n @Input() organizationId: string;\n @Output() onSharedCipher = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collections: CollectionView[] = [];\n organizations: Organization[] = [];\n\n protected writeableCollections: CollectionView[] = [];\n\n constructor(\n protected collectionService: CollectionService,\n protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService,\n protected cipherService: CipherService,\n private logService: LogService,\n protected organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n const allCollections = await this.collectionService.getAllDecrypted();\n this.writeableCollections = allCollections.map((c) => c).filter((c) => !c.readOnly);\n const orgs = await this.organizationService.getAll();\n this.organizations = orgs\n .sort(Utils.getSortFunction(this.i18nService, \"name\"))\n .filter((o) => o.enabled && o.status === OrganizationUserStatusType.Confirmed);\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n this.cipher = await cipherDomain.decrypt();\n if (this.organizationId == null && this.organizations.length > 0) {\n this.organizationId = this.organizations[0].id;\n }\n this.filterCollections();\n }\n\n filterCollections() {\n this.writeableCollections.forEach((c) => ((c as any).checked = false));\n if (this.organizationId == null || this.writeableCollections.length === 0) {\n this.collections = [];\n } else {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.organizationId\n );\n }\n }\n\n async submit(): Promise {\n const selectedCollectionIds = this.collections\n .filter((c) => !!(c as any).checked)\n .map((c) => c.id);\n if (selectedCollectionIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectOneCollection\")\n );\n return;\n }\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n const cipherView = await cipherDomain.decrypt();\n const orgName =\n this.organizations.find((o) => o.id === this.organizationId)?.name ??\n this.i18nService.t(\"organization\");\n\n try {\n this.formPromise = this.cipherService\n .shareWithServer(cipherView, this.organizationId, selectedCollectionIds)\n .then(async () => {\n this.onSharedCipher.emit();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"movedItemToOrg\", cipherView.name, orgName)\n );\n });\n await this.formPromise;\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n return false;\n }\n\n get canSave() {\n if (this.collections != null) {\n for (let i = 0; i < this.collections.length; i++) {\n if ((this.collections[i] as any).checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","import { Directive } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { AuthResult } from \"jslib-common/models/domain/authResult\";\nimport { SsoLogInCredentials } from \"jslib-common/models/domain/logInCredentials\";\n\n@Directive()\nexport class SsoComponent {\n identifier: string;\n loggingIn = false;\n\n formPromise: Promise;\n initiateSsoFormPromise: Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n onSuccessfulLoginChangePasswordNavigate: () => Promise;\n onSuccessfulLoginForceResetNavigate: () => Promise;\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"lock\";\n protected changePasswordRoute = \"set-password\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n protected clientId: string;\n protected redirectUri: string;\n protected state: string;\n protected codeChallenge: string;\n\n constructor(\n protected authService: AuthService,\n protected router: Router,\n protected i18nService: I18nService,\n protected route: ActivatedRoute,\n protected stateService: StateService,\n protected platformUtilsService: PlatformUtilsService,\n protected apiService: ApiService,\n protected cryptoFunctionService: CryptoFunctionService,\n protected environmentService: EnvironmentService,\n protected passwordGenerationService: PasswordGenerationService,\n protected logService: LogService\n ) {}\n\n async ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.code != null && qParams.state != null) {\n const codeVerifier = await this.stateService.getSsoCodeVerifier();\n const state = await this.stateService.getSsoState();\n await this.stateService.setSsoCodeVerifier(null);\n await this.stateService.setSsoState(null);\n if (\n qParams.code != null &&\n codeVerifier != null &&\n state != null &&\n this.checkState(state, qParams.state)\n ) {\n await this.logIn(\n qParams.code,\n codeVerifier,\n this.getOrgIdentifierFromState(qParams.state)\n );\n }\n } else if (\n qParams.clientId != null &&\n qParams.redirectUri != null &&\n qParams.state != null &&\n qParams.codeChallenge != null\n ) {\n this.redirectUri = qParams.redirectUri;\n this.state = qParams.state;\n this.codeChallenge = qParams.codeChallenge;\n this.clientId = qParams.clientId;\n }\n });\n }\n\n async submit(returnUri?: string, includeUserIdentifier?: boolean) {\n this.initiateSsoFormPromise = this.preValidate();\n if (await this.initiateSsoFormPromise) {\n const authorizeUrl = await this.buildAuthorizeUrl(returnUri, includeUserIdentifier);\n this.platformUtilsService.launchUri(authorizeUrl, { sameWindow: true });\n }\n }\n\n async preValidate(): Promise {\n if (this.identifier == null || this.identifier === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"ssoValidationFailed\"),\n this.i18nService.t(\"ssoIdentifierRequired\")\n );\n return false;\n }\n return await this.apiService.preValidateSso(this.identifier);\n }\n\n protected async buildAuthorizeUrl(\n returnUri?: string,\n includeUserIdentifier?: boolean\n ): Promise {\n let codeChallenge = this.codeChallenge;\n let state = this.state;\n\n const passwordOptions: any = {\n type: \"password\",\n length: 64,\n uppercase: true,\n lowercase: true,\n numbers: true,\n special: false,\n };\n\n if (codeChallenge == null) {\n const codeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n const codeVerifierHash = await this.cryptoFunctionService.hash(codeVerifier, \"sha256\");\n codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n await this.stateService.setSsoCodeVerifier(codeVerifier);\n }\n\n if (state == null) {\n state = await this.passwordGenerationService.generatePassword(passwordOptions);\n if (returnUri) {\n state += `_returnUri='${returnUri}'`;\n }\n }\n\n // Add Organization Identifier to state\n state += `_identifier=${this.identifier}`;\n\n // Save state (regardless of new or existing)\n await this.stateService.setSsoState(state);\n\n let authorizeUrl =\n this.environmentService.getIdentityUrl() +\n \"/connect/authorize?\" +\n \"client_id=\" +\n this.clientId +\n \"&redirect_uri=\" +\n encodeURIComponent(this.redirectUri) +\n \"&\" +\n \"response_type=code&scope=api offline_access&\" +\n \"state=\" +\n state +\n \"&code_challenge=\" +\n codeChallenge +\n \"&\" +\n \"code_challenge_method=S256&response_mode=query&\" +\n \"domain_hint=\" +\n encodeURIComponent(this.identifier);\n\n if (includeUserIdentifier) {\n const userIdentifier = await this.apiService.getSsoUserIdentifier();\n authorizeUrl += `&user_identifier=${encodeURIComponent(userIdentifier)}`;\n }\n\n return authorizeUrl;\n }\n\n private async logIn(code: string, codeVerifier: string, orgIdFromState: string) {\n this.loggingIn = true;\n try {\n const credentials = new SsoLogInCredentials(\n code,\n codeVerifier,\n this.redirectUri,\n orgIdFromState\n );\n this.formPromise = this.authService.logIn(credentials);\n const response = await this.formPromise;\n if (response.requiresTwoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute], {\n queryParams: {\n identifier: orgIdFromState,\n sso: \"true\",\n },\n });\n }\n } else if (response.resetMasterPassword) {\n if (this.onSuccessfulLoginChangePasswordNavigate != null) {\n this.onSuccessfulLoginChangePasswordNavigate();\n } else {\n this.router.navigate([this.changePasswordRoute], {\n queryParams: {\n identifier: orgIdFromState,\n },\n });\n }\n } else if (response.forcePasswordReset) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch (e) {\n this.logService.error(e);\n if (e.message === \"Unable to reach key connector\") {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"ssoKeyConnectorUnavailable\")\n );\n }\n }\n this.loggingIn = false;\n }\n\n private getOrgIdentifierFromState(state: string): string {\n if (state === null || state === undefined) {\n return null;\n }\n\n const stateSplit = state.split(\"_identifier=\");\n return stateSplit.length > 1 ? stateSplit[1] : null;\n }\n\n private checkState(state: string, checkState: string): boolean {\n if (state === null || state === undefined) {\n return false;\n }\n if (checkState === null || checkState === undefined) {\n return false;\n }\n\n const stateSplit = state.split(\"_identifier=\");\n const checkStateSplit = checkState.split(\"_identifier=\");\n return stateSplit[0] === checkStateSplit[0];\n }\n}\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { CommonModule } from \"@angular/common\";\nimport { Component, ModuleWithProviders, NgModule } from \"@angular/core\";\nimport {\n DefaultNoComponentGlobalConfig,\n GlobalConfig,\n Toast as BaseToast,\n ToastPackage,\n ToastrService,\n TOAST_CONFIG,\n} from \"ngx-toastr\";\n\n@Component({\n selector: \"[toast-component2]\",\n template: `\n \n ×\n \n
\n \n
\n
\n
\n {{ title }} [{{ duplicatesCount + 1 }}]\n
\n
\n \n {{ message }}\n \n \n
\n
\n
\n `,\n animations: [\n trigger(\"flyInOut\", [\n state(\"inactive\", style({ opacity: 0 })),\n state(\"active\", style({ opacity: 1 })),\n state(\"removed\", style({ opacity: 0 })),\n transition(\"inactive => active\", animate(\"{{ easeTime }}ms {{ easing }}\")),\n transition(\"active => removed\", animate(\"{{ easeTime }}ms {{ easing }}\")),\n ]),\n ],\n preserveWhitespaces: false,\n})\nexport class BitwardenToast extends BaseToast {\n constructor(protected toastrService: ToastrService, public toastPackage: ToastPackage) {\n super(toastrService, toastPackage);\n }\n}\n\nexport const BitwardenToastGlobalConfig: GlobalConfig = {\n ...DefaultNoComponentGlobalConfig,\n toastComponent: BitwardenToast,\n};\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitwardenToast],\n exports: [BitwardenToast],\n})\nexport class BitwardenToastModule {\n static forRoot(config: Partial = {}): ModuleWithProviders {\n return {\n ngModule: BitwardenToastModule,\n providers: [\n {\n provide: TOAST_CONFIG,\n useValue: {\n default: BitwardenToastGlobalConfig,\n config: config,\n },\n },\n ],\n };\n }\n}\n","import { Directive, EventEmitter, OnInit, Output } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { TwoFactorService } from \"jslib-common/abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\n\n@Directive()\nexport class TwoFactorOptionsComponent implements OnInit {\n @Output() onProviderSelected = new EventEmitter();\n @Output() onRecoverSelected = new EventEmitter();\n\n providers: any[] = [];\n\n constructor(\n protected twoFactorService: TwoFactorService,\n protected router: Router,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected win: Window\n ) {}\n\n ngOnInit() {\n this.providers = this.twoFactorService.getSupportedProviders(this.win);\n }\n\n choose(p: any) {\n this.onProviderSelected.emit(p.type);\n }\n\n recover() {\n this.platformUtilsService.launchUri(\"https://bitwarden.com/help/lost-two-step-device/\");\n this.onRecoverSelected.emit();\n }\n}\n","import { Directive, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport * as DuoWebSDK from \"duo_web_sdk\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TwoFactorService } from \"jslib-common/abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { WebAuthnIFrame } from \"jslib-common/misc/webauthn_iframe\";\nimport { AuthResult } from \"jslib-common/models/domain/authResult\";\nimport { TokenRequestTwoFactor } from \"jslib-common/models/request/identityToken/tokenRequestTwoFactor\";\nimport { TwoFactorEmailRequest } from \"jslib-common/models/request/twoFactorEmailRequest\";\nimport { TwoFactorProviders } from \"jslib-common/services/twoFactor.service\";\n\nimport { CaptchaProtectedComponent } from \"./captchaProtected.component\";\n\n@Directive()\nexport class TwoFactorComponent extends CaptchaProtectedComponent implements OnInit, OnDestroy {\n token = \"\";\n remember = false;\n webAuthnReady = false;\n webAuthnNewTab = false;\n providers = TwoFactorProviders;\n providerType = TwoFactorProviderType;\n selectedProviderType: TwoFactorProviderType = TwoFactorProviderType.Authenticator;\n webAuthnSupported = false;\n webAuthn: WebAuthnIFrame = null;\n title = \"\";\n twoFactorEmail: string = null;\n formPromise: Promise;\n emailPromise: Promise;\n identifier: string = null;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n\n get webAuthnAllow(): string {\n return `publickey-credentials-get ${this.environmentService.getWebVaultUrl()}`;\n }\n\n protected loginRoute = \"login\";\n protected successRoute = \"vault\";\n\n constructor(\n protected authService: AuthService,\n protected router: Router,\n protected i18nService: I18nService,\n protected apiService: ApiService,\n protected platformUtilsService: PlatformUtilsService,\n protected win: Window,\n protected environmentService: EnvironmentService,\n protected stateService: StateService,\n protected route: ActivatedRoute,\n protected logService: LogService,\n protected twoFactorService: TwoFactorService\n ) {\n super(environmentService, i18nService, platformUtilsService);\n this.webAuthnSupported = this.platformUtilsService.supportsWebAuthn(win);\n }\n\n async ngOnInit() {\n if (!this.authing || this.twoFactorService.getProviders() == null) {\n this.router.navigate([this.loginRoute]);\n return;\n }\n\n this.route.queryParams.pipe(first()).subscribe((qParams) => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n }\n });\n\n if (this.needsLock) {\n this.successRoute = \"lock\";\n }\n\n if (this.win != null && this.webAuthnSupported) {\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n this.webAuthn = new WebAuthnIFrame(\n this.win,\n webVaultUrl,\n this.webAuthnNewTab,\n this.platformUtilsService,\n this.i18nService,\n (token: string) => {\n this.token = token;\n this.submit();\n },\n (error: string) => {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), error);\n },\n (info: string) => {\n if (info === \"ready\") {\n this.webAuthnReady = true;\n }\n }\n );\n }\n\n this.selectedProviderType = this.twoFactorService.getDefaultProvider(this.webAuthnSupported);\n await this.init();\n }\n\n ngOnDestroy(): void {\n this.cleanupWebAuthn();\n this.webAuthn = null;\n }\n\n async init() {\n if (this.selectedProviderType == null) {\n this.title = this.i18nService.t(\"loginUnavailable\");\n return;\n }\n\n this.cleanupWebAuthn();\n this.title = (TwoFactorProviders as any)[this.selectedProviderType].name;\n const providerData = this.twoFactorService.getProviders().get(this.selectedProviderType);\n switch (this.selectedProviderType) {\n case TwoFactorProviderType.WebAuthn:\n if (!this.webAuthnNewTab) {\n setTimeout(() => {\n this.authWebAuthn();\n }, 500);\n }\n break;\n case TwoFactorProviderType.Duo:\n case TwoFactorProviderType.OrganizationDuo:\n setTimeout(() => {\n DuoWebSDK.init({\n iframe: undefined,\n host: providerData.Host,\n sig_request: providerData.Signature,\n submit_callback: async (f: HTMLFormElement) => {\n const sig = f.querySelector('input[name=\"sig_response\"]') as HTMLInputElement;\n if (sig != null) {\n this.token = sig.value;\n await this.submit();\n }\n },\n });\n }, 0);\n break;\n case TwoFactorProviderType.Email:\n this.twoFactorEmail = providerData.Email;\n if (this.twoFactorService.getProviders().size > 1) {\n await this.sendEmail(false);\n }\n break;\n default:\n break;\n }\n }\n\n async submit() {\n await this.setupCaptcha();\n\n if (this.token == null || this.token === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"verificationCodeRequired\")\n );\n return;\n }\n\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn) {\n if (this.webAuthn != null) {\n this.webAuthn.stop();\n } else {\n return;\n }\n } else if (\n this.selectedProviderType === TwoFactorProviderType.Email ||\n this.selectedProviderType === TwoFactorProviderType.Authenticator\n ) {\n this.token = this.token.replace(\" \", \"\").trim();\n }\n\n try {\n await this.doSubmit();\n } catch {\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn && this.webAuthn != null) {\n this.webAuthn.start();\n }\n }\n }\n\n async doSubmit() {\n this.formPromise = this.authService.logInTwoFactor(\n new TokenRequestTwoFactor(this.selectedProviderType, this.token, this.remember),\n this.captchaToken\n );\n const response: AuthResult = await this.formPromise;\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n if (this.handleCaptchaRequired(response)) {\n return;\n }\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (response.resetMasterPassword) {\n this.successRoute = \"set-password\";\n }\n if (response.forcePasswordReset) {\n this.successRoute = \"update-temp-password\";\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.identifier,\n },\n });\n }\n }\n\n async sendEmail(doToast: boolean) {\n if (this.selectedProviderType !== TwoFactorProviderType.Email) {\n return;\n }\n\n if (this.emailPromise != null) {\n return;\n }\n\n try {\n const request = new TwoFactorEmailRequest();\n request.email = this.authService.email;\n request.masterPasswordHash = this.authService.masterPasswordHash;\n this.emailPromise = this.apiService.postTwoFactorEmail(request);\n await this.emailPromise;\n if (doToast) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"verificationCodeEmailSent\", this.twoFactorEmail)\n );\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n this.emailPromise = null;\n }\n\n authWebAuthn() {\n const providerData = this.twoFactorService.getProviders().get(this.selectedProviderType);\n\n if (!this.webAuthnSupported || this.webAuthn == null) {\n return;\n }\n\n this.webAuthn.init(providerData);\n }\n\n private cleanupWebAuthn() {\n if (this.webAuthn != null) {\n this.webAuthn.stop();\n this.webAuthn.cleanup();\n }\n }\n\n get authing(): boolean {\n return (\n this.authService.authingWithPassword() ||\n this.authService.authingWithSso() ||\n this.authService.authingWithApiKey()\n );\n }\n\n get needsLock(): boolean {\n return this.authService.authingWithSso() || this.authService.authingWithApiKey();\n }\n}\n","import { Directive } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { VerificationType } from \"jslib-common/enums/verificationType\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { PasswordRequest } from \"jslib-common/models/request/passwordRequest\";\nimport { Verification } from \"jslib-common/types/verification\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"./change-password.component\";\n\n@Directive()\nexport class UpdatePasswordComponent extends BaseChangePasswordComponent {\n hint: string;\n key: string;\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n showPassword = false;\n currentMasterPassword: string;\n\n onSuccessfulChangePassword: () => Promise;\n\n constructor(\n protected router: Router,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n private apiService: ApiService,\n stateService: StateService,\n private userVerificationService: UserVerificationService,\n private logService: LogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n async cancel() {\n await this.stateService.setOrganizationInvitation(null);\n await this.stateService.setLoginRedirect(null);\n this.router.navigate([\"/vault\"]);\n }\n\n async setupSubmitActions(): Promise {\n if (this.currentMasterPassword == null || this.currentMasterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return false;\n }\n\n const secret: Verification = {\n type: VerificationType.MasterPassword,\n secret: this.currentMasterPassword,\n };\n try {\n await this.userVerificationService.verifyUser(secret);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), e.message);\n return false;\n }\n\n this.kdf = await this.stateService.getKdfType();\n this.kdfIterations = await this.stateService.getKdfIterations();\n return true;\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n try {\n // Create Request\n const request = new PasswordRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(\n this.currentMasterPassword,\n null\n );\n request.newMasterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n\n // Update user's password\n this.apiService.postPassword(request);\n\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"masterPasswordChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.messagingService.send(\"logout\");\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","import { Directive } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { UpdateTempPasswordRequest } from \"jslib-common/models/request/updateTempPasswordRequest\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"./change-password.component\";\n\n@Directive()\nexport class UpdateTempPasswordComponent extends BaseChangePasswordComponent {\n hint: string;\n key: string;\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n showPassword = false;\n\n onSuccessfulChangePassword: () => Promise;\n\n constructor(\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n private apiService: ApiService,\n stateService: StateService,\n private syncService: SyncService,\n private logService: LogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n await this.syncService.fullSync(true);\n super.ngOnInit();\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n async setupSubmitActions(): Promise {\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions();\n this.email = await this.stateService.getEmail();\n this.kdf = await this.stateService.getKdfType();\n this.kdfIterations = await this.stateService.getKdfIterations();\n return true;\n }\n\n async submit() {\n // Validation\n if (!(await this.strongPassword())) {\n return;\n }\n\n if (!(await this.setupSubmitActions())) {\n return;\n }\n\n try {\n // Create new key and hash new password\n const newKey = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email.trim().toLowerCase(),\n this.kdf,\n this.kdfIterations\n );\n const newPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey);\n\n // Grab user's current enc key\n const userEncKey = await this.cryptoService.getEncKey();\n\n // Create new encKey for the User\n const newEncKey = await this.cryptoService.remakeEncKey(newKey, userEncKey);\n\n await this.performSubmitActions(newPasswordHash, newKey, newEncKey);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n try {\n // Create request\n const request = new UpdateTempPasswordRequest();\n request.key = encKey[1].encryptedString;\n request.newMasterPasswordHash = masterPasswordHash;\n request.masterPasswordHint = this.hint;\n\n // Update user's password\n this.formPromise = this.apiService.putUpdateTempPassword(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"updatedMasterPassword\")\n );\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.messagingService.send(\"logout\");\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","import { animate, style, transition, trigger } from \"@angular/animations\";\nimport { Component, OnInit } from \"@angular/core\";\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { VerificationType } from \"jslib-common/enums/verificationType\";\nimport { Verification } from \"jslib-common/types/verification\";\n\n@Component({\n selector: \"app-verify-master-password\",\n templateUrl: \"verify-master-password.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: VerifyMasterPasswordComponent,\n },\n ],\n animations: [\n trigger(\"sent\", [\n transition(\":enter\", [style({ opacity: 0 }), animate(\"100ms\", style({ opacity: 1 }))]),\n ]),\n ],\n})\nexport class VerifyMasterPasswordComponent implements ControlValueAccessor, OnInit {\n usesKeyConnector = false;\n disableRequestOTP = false;\n sentCode = false;\n\n secret = new FormControl(\"\");\n\n private onChange: (value: Verification) => void;\n\n constructor(\n private keyConnectorService: KeyConnectorService,\n private userVerificationService: UserVerificationService\n ) {}\n\n async ngOnInit() {\n this.usesKeyConnector = await this.keyConnectorService.getUsesKeyConnector();\n this.processChanges(this.secret.value);\n\n this.secret.valueChanges.subscribe((secret) => this.processChanges(secret));\n }\n\n async requestOTP() {\n if (this.usesKeyConnector) {\n this.disableRequestOTP = true;\n try {\n await this.userVerificationService.requestOTP();\n this.sentCode = true;\n } finally {\n this.disableRequestOTP = false;\n }\n }\n }\n\n writeValue(obj: any): void {\n this.secret.setValue(obj);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n // Not implemented\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disableRequestOTP = isDisabled;\n if (isDisabled) {\n this.secret.disable();\n } else {\n this.secret.enable();\n }\n }\n\n private processChanges(secret: string) {\n if (this.onChange == null) {\n return;\n }\n\n this.onChange({\n type: this.usesKeyConnector ? VerificationType.OTP : VerificationType.MasterPassword,\n secret: secret,\n });\n }\n}\n","\n \n \n {{ \"confirmIdentity\" | i18n }}\n\n\n
\n \n \n {{ \"sendCode\" | i18n }}\n \n \n \n {{ \"codeSent\" | i18n }}\n \n
\n\n
\n \n \n {{ \"confirmIdentity\" | i18n }}\n
\n
\n","import { Directive, ElementRef, Input, Renderer2 } from \"@angular/core\";\n\n@Directive({\n selector: \"[appA11yTitle]\",\n})\nexport class A11yTitleDirective {\n @Input() set appA11yTitle(title: string) {\n this.title = title;\n }\n\n private title: string;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n ngOnInit() {\n if (!this.el.nativeElement.hasAttribute(\"title\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"title\", this.title);\n }\n if (!this.el.nativeElement.hasAttribute(\"aria-label\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"aria-label\", this.title);\n }\n }\n}\n","import { Directive, ElementRef, Input, OnChanges } from \"@angular/core\";\n\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { ErrorResponse } from \"jslib-common/models/response/errorResponse\";\n\nimport { ValidationService } from \"../services/validation.service\";\n\n@Directive({\n selector: \"[appApiAction]\",\n})\nexport class ApiActionDirective implements OnChanges {\n @Input() appApiAction: Promise;\n\n constructor(\n private el: ElementRef,\n private validationService: ValidationService,\n private logService: LogService\n ) {}\n\n ngOnChanges(changes: any) {\n if (this.appApiAction == null || this.appApiAction.then == null) {\n return;\n }\n\n this.el.nativeElement.loading = true;\n\n this.appApiAction.then(\n (response: any) => {\n this.el.nativeElement.loading = false;\n },\n (e: any) => {\n this.el.nativeElement.loading = false;\n\n if ((e as ErrorResponse).captchaRequired) {\n this.logService.error(\"Captcha required error response: \" + e.getSingleMessage());\n return;\n }\n this.logService?.error(`Received API exception: ${e}`);\n this.validationService.showError(e);\n }\n );\n }\n}\n","import { Directive, ElementRef, Input, NgZone } from \"@angular/core\";\nimport { take } from \"rxjs/operators\";\n\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Directive({\n selector: \"[appAutofocus]\",\n})\nexport class AutofocusDirective {\n @Input() set appAutofocus(condition: boolean | string) {\n this.autofocus = condition === \"\" || condition === true;\n }\n\n private autofocus: boolean;\n\n constructor(private el: ElementRef, private ngZone: NgZone) {}\n\n ngOnInit() {\n if (!Utils.isMobileBrowser && this.autofocus) {\n if (this.ngZone.isStable) {\n this.el.nativeElement.focus();\n } else {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => this.el.nativeElement.focus());\n }\n }\n }\n}\n","import { Directive, ElementRef, HostListener } from \"@angular/core\";\n\n@Directive({\n selector: \"[appBlurClick]\",\n})\nexport class BlurClickDirective {\n constructor(private el: ElementRef) {}\n\n @HostListener(\"click\") onClick() {\n this.el.nativeElement.blur();\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from \"@angular/core\";\n\n@Directive({\n selector: \"[appFallbackSrc]\",\n})\nexport class FallbackSrcDirective {\n @Input(\"appFallbackSrc\") appFallbackSrc: string;\n\n constructor(private el: ElementRef) {}\n\n @HostListener(\"error\") onError() {\n this.el.nativeElement.src = this.appFallbackSrc;\n }\n}\n","import { Directive, ElementRef, Input, Renderer2 } from \"@angular/core\";\n\n@Directive({\n selector: \"[appInputVerbatim]\",\n})\nexport class InputVerbatimDirective {\n @Input() set appInputVerbatim(condition: boolean | string) {\n this.disableComplete = condition === \"\" || condition === true;\n }\n\n private disableComplete: boolean;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n ngOnInit() {\n if (this.disableComplete && !this.el.nativeElement.hasAttribute(\"autocomplete\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"autocomplete\", \"off\");\n }\n if (!this.el.nativeElement.hasAttribute(\"autocapitalize\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"autocapitalize\", \"none\");\n }\n if (!this.el.nativeElement.hasAttribute(\"autocorrect\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"autocorrect\", \"none\");\n }\n if (!this.el.nativeElement.hasAttribute(\"spellcheck\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"spellcheck\", \"false\");\n }\n if (!this.el.nativeElement.hasAttribute(\"inputmode\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"inputmode\", \"verbatim\");\n }\n }\n}\n","import { Directive, OnInit, TemplateRef, ViewContainerRef } from \"@angular/core\";\n\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n/**\n * Hides the element if the user has premium.\n */\n@Directive({\n selector: \"[appNotPremium]\",\n})\nexport class NotPremiumDirective implements OnInit {\n constructor(\n private templateRef: TemplateRef,\n private viewContainer: ViewContainerRef,\n private stateService: StateService\n ) {}\n\n async ngOnInit(): Promise {\n const premium = await this.stateService.getCanAccessPremium();\n\n if (premium) {\n this.viewContainer.clear();\n } else {\n this.viewContainer.createEmbeddedView(this.templateRef);\n }\n }\n}\n","import { Directive, ElementRef, HostListener } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Directive({\n selector: \"[appSelectCopy]\",\n})\nexport class SelectCopyDirective {\n constructor(private el: ElementRef, private platformUtilsService: PlatformUtilsService) {}\n\n @HostListener(\"copy\") onCopy() {\n if (window == null) {\n return;\n }\n let copyText = \"\";\n const selection = window.getSelection();\n for (let i = 0; i < selection.rangeCount; i++) {\n const range = selection.getRangeAt(i);\n const text = range.toString();\n\n // The selection should only contain one line of text. In some cases however, the\n // selection contains newlines and space characters from the indentation of following\n // sibling nodes. To avoid copying passwords containing trailing newlines and spaces\n // that aren't part of the password, the selection has to be trimmed.\n let stringEndPos = text.length;\n const newLinePos = text.search(/(?:\\r\\n|\\r|\\n)/);\n if (newLinePos > -1) {\n const otherPart = text.substr(newLinePos).trim();\n if (otherPart === \"\") {\n stringEndPos = newLinePos;\n }\n }\n copyText += text.substring(0, stringEndPos);\n }\n this.platformUtilsService.copyToClipboard(copyText, { window: window });\n }\n}\n","import { Directive, HostListener } from \"@angular/core\";\n\n@Directive({\n selector: \"[appStopClick]\",\n})\nexport class StopClickDirective {\n @HostListener(\"click\", [\"$event\"]) onClick($event: MouseEvent) {\n $event.preventDefault();\n }\n}\n","import { Directive, HostListener } from \"@angular/core\";\n\n@Directive({\n selector: \"[appStopProp]\",\n})\nexport class StopPropDirective {\n @HostListener(\"click\", [\"$event\"]) onClick($event: MouseEvent) {\n $event.stopPropagation();\n }\n}\n","import { Directive, ElementRef, forwardRef, HostListener, Input, Renderer2 } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n// ref: https://juristr.com/blog/2018/02/ng-true-value-directive/\n@Directive({\n selector: \"input[type=checkbox][appTrueFalseValue]\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TrueFalseValueDirective),\n multi: true,\n },\n ],\n})\nexport class TrueFalseValueDirective implements ControlValueAccessor {\n @Input() trueValue = true;\n @Input() falseValue = false;\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {}\n\n @HostListener(\"change\", [\"$event\"])\n onHostChange(ev: any) {\n this.propagateChange(ev.target.checked ? this.trueValue : this.falseValue);\n }\n\n writeValue(obj: any): void {\n if (obj === this.trueValue) {\n this.renderer.setProperty(this.elementRef.nativeElement, \"checked\", true);\n } else {\n this.renderer.setProperty(this.elementRef.nativeElement, \"checked\", false);\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n /* nothing */\n }\n\n setDisabledState?(isDisabled: boolean): void {\n /* nothing */\n }\n\n private propagateChange = (_: any) => {\n /* nothing */\n };\n}\n","import { CommonModule, DatePipe } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\n\nimport { AvatarComponent } from \"./components/avatar.component\";\nimport { CalloutComponent } from \"./components/callout.component\";\nimport { ExportScopeCalloutComponent } from \"./components/export-scope-callout.component\";\nimport { IconComponent } from \"./components/icon.component\";\nimport { BitwardenToastModule } from \"./components/toastr.component\";\nimport { A11yInvalidDirective } from \"./directives/a11y-invalid.directive\";\nimport { A11yTitleDirective } from \"./directives/a11y-title.directive\";\nimport { ApiActionDirective } from \"./directives/api-action.directive\";\nimport { AutofocusDirective } from \"./directives/autofocus.directive\";\nimport { BlurClickDirective } from \"./directives/blur-click.directive\";\nimport { BoxRowDirective } from \"./directives/box-row.directive\";\nimport { FallbackSrcDirective } from \"./directives/fallback-src.directive\";\nimport { InputStripSpacesDirective } from \"./directives/input-strip-spaces.directive\";\nimport { InputVerbatimDirective } from \"./directives/input-verbatim.directive\";\nimport { NotPremiumDirective } from \"./directives/not-premium.directive\";\nimport { SelectCopyDirective } from \"./directives/select-copy.directive\";\nimport { StopClickDirective } from \"./directives/stop-click.directive\";\nimport { StopPropDirective } from \"./directives/stop-prop.directive\";\nimport { TrueFalseValueDirective } from \"./directives/true-false-value.directive\";\nimport { ColorPasswordCountPipe } from \"./pipes/color-password-count.pipe\";\nimport { ColorPasswordPipe } from \"./pipes/color-password.pipe\";\nimport { EllipsisPipe } from \"./pipes/ellipsis.pipe\";\nimport { I18nPipe } from \"./pipes/i18n.pipe\";\nimport { SearchCiphersPipe } from \"./pipes/search-ciphers.pipe\";\nimport { SearchPipe } from \"./pipes/search.pipe\";\nimport { UserNamePipe } from \"./pipes/user-name.pipe\";\n\n@NgModule({\n imports: [\n BitwardenToastModule.forRoot({\n maxOpened: 5,\n autoDismiss: true,\n closeButton: true,\n }),\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n ],\n declarations: [\n A11yInvalidDirective,\n A11yTitleDirective,\n ApiActionDirective,\n AvatarComponent,\n AutofocusDirective,\n BlurClickDirective,\n BoxRowDirective,\n ColorPasswordCountPipe,\n ColorPasswordPipe,\n EllipsisPipe,\n FallbackSrcDirective,\n I18nPipe,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n UserNamePipe,\n CalloutComponent,\n IconComponent,\n ExportScopeCalloutComponent,\n ],\n exports: [\n A11yInvalidDirective,\n A11yTitleDirective,\n ApiActionDirective,\n AvatarComponent,\n AutofocusDirective,\n BitwardenToastModule,\n BlurClickDirective,\n BoxRowDirective,\n ColorPasswordCountPipe,\n ColorPasswordPipe,\n EllipsisPipe,\n FallbackSrcDirective,\n I18nPipe,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n UserNamePipe,\n CalloutComponent,\n IconComponent,\n ExportScopeCalloutComponent,\n ],\n providers: [UserNamePipe, SearchPipe, I18nPipe, DatePipe],\n})\nexport class JslibModule {}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { Utils } from \"jslib-common/misc/utils\";\n\n/*\n An updated pipe that sanitizes HTML, highlights numbers and special characters (in different colors each)\n and handles Unicode / Emoji characters correctly.\n*/\n@Pipe({ name: \"colorPassword\" })\nexport class ColorPasswordPipe implements PipeTransform {\n transform(password: string) {\n const template = (character: string, type: string) =>\n `${character}`;\n const colorizedPassword = this.generateTemplate(password, template);\n return colorizedPassword;\n }\n\n protected generateTemplate(\n password: string,\n templateGenerator: (chararacter: string, type: string, index?: number) => string\n ) {\n // Convert to an array to handle cases that stings have special characters, ie: emoji.\n const passwordArray = Array.from(password);\n let colorizedPassword = \"\";\n for (let i = 0; i < passwordArray.length; i++) {\n let character = passwordArray[i];\n let isSpecial = false;\n // Sanitize HTML first.\n switch (character) {\n case \"&\":\n character = \"&\";\n isSpecial = true;\n break;\n case \"<\":\n character = \"<\";\n isSpecial = true;\n break;\n case \">\":\n character = \">\";\n isSpecial = true;\n break;\n case \" \":\n character = \" \";\n isSpecial = true;\n break;\n default:\n break;\n }\n let type = \"letter\";\n if (character.match(Utils.regexpEmojiPresentation)) {\n type = \"emoji\";\n } else if (isSpecial || character.match(/[^\\w ]/)) {\n type = \"special\";\n } else if (character.match(/\\d/)) {\n type = \"number\";\n }\n colorizedPassword += templateGenerator(character, type, i);\n }\n return colorizedPassword;\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\n\n@Pipe({\n name: \"i18n\",\n})\nexport class I18nPipe implements PipeTransform {\n constructor(private i18nService: I18nService) {}\n\n transform(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.i18nService.t(id, p1, p2, p3);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: \"search\",\n})\nexport class SearchPipe implements PipeTransform {\n transform(\n items: any[],\n searchText: string,\n prop1?: string,\n prop2?: string,\n prop3?: string\n ): any[] {\n if (items == null || items.length === 0) {\n return [];\n }\n\n if (searchText == null || searchText.length < 2) {\n return items;\n }\n\n searchText = searchText.trim().toLowerCase();\n return items.filter((i) => {\n if (\n prop1 != null &&\n i[prop1] != null &&\n i[prop1].toString().toLowerCase().indexOf(searchText) > -1\n ) {\n return true;\n }\n if (\n prop2 != null &&\n i[prop2] != null &&\n i[prop2].toString().toLowerCase().indexOf(searchText) > -1\n ) {\n return true;\n }\n if (\n prop3 != null &&\n i[prop3] != null &&\n i[prop3].toString().toLowerCase().indexOf(searchText) > -1\n ) {\n return true;\n }\n return false;\n });\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\ninterface User {\n name?: string;\n email: string;\n}\n\n@Pipe({\n name: \"userName\",\n})\nexport class UserNamePipe implements PipeTransform {\n transform(user?: User): string {\n if (user == null) {\n return null;\n }\n\n return user.name == null || user.name.trim() === \"\" ? user.email : user.name;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"jslib-common/abstractions/vaultTimeout.service\";\n\n@Injectable()\nexport class AuthGuardService implements CanActivate {\n constructor(\n private vaultTimeoutService: VaultTimeoutService,\n private router: Router,\n private messagingService: MessagingService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {\n const isAuthed = await this.stateService.getIsAuthenticated();\n if (!isAuthed) {\n this.messagingService.send(\"authBlocked\");\n return false;\n }\n\n const locked = await this.vaultTimeoutService.isLocked();\n if (locked) {\n if (routerState != null) {\n this.messagingService.send(\"lockedUrl\", { url: routerState.url });\n }\n this.router.navigate([\"lock\"], { queryParams: { promptBiometric: true } });\n return false;\n }\n\n if (\n !routerState.url.includes(\"remove-password\") &&\n (await this.keyConnectorService.getConvertAccountRequired())\n ) {\n this.router.navigate([\"/remove-password\"]);\n return false;\n }\n\n return true;\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { BroadcasterService as BaseBroadcasterService } from \"jslib-common/services/broadcaster.service\";\n\n@Injectable()\nexport class BroadcasterService extends BaseBroadcasterService {}\n","import { Injector, LOCALE_ID, NgModule } from \"@angular/core\";\n\nimport { ApiService as ApiServiceAbstraction } from \"jslib-common/abstractions/api.service\";\nimport { AppIdService as AppIdServiceAbstraction } from \"jslib-common/abstractions/appId.service\";\nimport { AuditService as AuditServiceAbstraction } from \"jslib-common/abstractions/audit.service\";\nimport { AuthService as AuthServiceAbstraction } from \"jslib-common/abstractions/auth.service\";\nimport { BroadcasterService as BroadcasterServiceAbstraction } from \"jslib-common/abstractions/broadcaster.service\";\nimport { CipherService as CipherServiceAbstraction } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService as CollectionServiceAbstraction } from \"jslib-common/abstractions/collection.service\";\nimport { CryptoService as CryptoServiceAbstraction } from \"jslib-common/abstractions/crypto.service\";\nimport { CryptoFunctionService as CryptoFunctionServiceAbstraction } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService as EnvironmentServiceAbstraction } from \"jslib-common/abstractions/environment.service\";\nimport { EventService as EventServiceAbstraction } from \"jslib-common/abstractions/event.service\";\nimport { ExportService as ExportServiceAbstraction } from \"jslib-common/abstractions/export.service\";\nimport { FileUploadService as FileUploadServiceAbstraction } from \"jslib-common/abstractions/fileUpload.service\";\nimport { FolderService as FolderServiceAbstraction } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService as I18nServiceAbstraction } from \"jslib-common/abstractions/i18n.service\";\nimport { KeyConnectorService as KeyConnectorServiceAbstraction } from \"jslib-common/abstractions/keyConnector.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService as MessagingServiceAbstraction } from \"jslib-common/abstractions/messaging.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"jslib-common/abstractions/notifications.service\";\nimport { OrganizationService as OrganizationServiceAbstraction } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordGenerationService as PasswordGenerationServiceAbstraction } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService as PolicyServiceAbstraction } from \"jslib-common/abstractions/policy.service\";\nimport { ProviderService as ProviderServiceAbstraction } from \"jslib-common/abstractions/provider.service\";\nimport { SearchService as SearchServiceAbstraction } from \"jslib-common/abstractions/search.service\";\nimport { SendService as SendServiceAbstraction } from \"jslib-common/abstractions/send.service\";\nimport { SettingsService as SettingsServiceAbstraction } from \"jslib-common/abstractions/settings.service\";\nimport { StateService as StateServiceAbstraction } from \"jslib-common/abstractions/state.service\";\nimport { StateMigrationService as StateMigrationServiceAbstraction } from \"jslib-common/abstractions/stateMigration.service\";\nimport { StorageService as StorageServiceAbstraction } from \"jslib-common/abstractions/storage.service\";\nimport { SyncService as SyncServiceAbstraction } from \"jslib-common/abstractions/sync.service\";\nimport { TokenService as TokenServiceAbstraction } from \"jslib-common/abstractions/token.service\";\nimport { TotpService as TotpServiceAbstraction } from \"jslib-common/abstractions/totp.service\";\nimport { TwoFactorService as TwoFactorServiceAbstraction } from \"jslib-common/abstractions/twoFactor.service\";\nimport { UserVerificationService as UserVerificationServiceAbstraction } from \"jslib-common/abstractions/userVerification.service\";\nimport { UsernameGenerationService as UsernameGenerationServiceAbstraction } from \"jslib-common/abstractions/usernameGeneration.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"jslib-common/abstractions/vaultTimeout.service\";\nimport { StateFactory } from \"jslib-common/factories/stateFactory\";\nimport { Account } from \"jslib-common/models/domain/account\";\nimport { GlobalState } from \"jslib-common/models/domain/globalState\";\nimport { ApiService } from \"jslib-common/services/api.service\";\nimport { AppIdService } from \"jslib-common/services/appId.service\";\nimport { AuditService } from \"jslib-common/services/audit.service\";\nimport { AuthService } from \"jslib-common/services/auth.service\";\nimport { CipherService } from \"jslib-common/services/cipher.service\";\nimport { CollectionService } from \"jslib-common/services/collection.service\";\nimport { ConsoleLogService } from \"jslib-common/services/consoleLog.service\";\nimport { CryptoService } from \"jslib-common/services/crypto.service\";\nimport { EnvironmentService } from \"jslib-common/services/environment.service\";\nimport { EventService } from \"jslib-common/services/event.service\";\nimport { ExportService } from \"jslib-common/services/export.service\";\nimport { FileUploadService } from \"jslib-common/services/fileUpload.service\";\nimport { FolderService } from \"jslib-common/services/folder.service\";\nimport { KeyConnectorService } from \"jslib-common/services/keyConnector.service\";\nimport { NotificationsService } from \"jslib-common/services/notifications.service\";\nimport { OrganizationService } from \"jslib-common/services/organization.service\";\nimport { PasswordGenerationService } from \"jslib-common/services/passwordGeneration.service\";\nimport { PolicyService } from \"jslib-common/services/policy.service\";\nimport { ProviderService } from \"jslib-common/services/provider.service\";\nimport { SearchService } from \"jslib-common/services/search.service\";\nimport { SendService } from \"jslib-common/services/send.service\";\nimport { SettingsService } from \"jslib-common/services/settings.service\";\nimport { StateService } from \"jslib-common/services/state.service\";\nimport { StateMigrationService } from \"jslib-common/services/stateMigration.service\";\nimport { SyncService } from \"jslib-common/services/sync.service\";\nimport { TokenService } from \"jslib-common/services/token.service\";\nimport { TotpService } from \"jslib-common/services/totp.service\";\nimport { TwoFactorService } from \"jslib-common/services/twoFactor.service\";\nimport { UserVerificationService } from \"jslib-common/services/userVerification.service\";\nimport { UsernameGenerationService } from \"jslib-common/services/usernameGeneration.service\";\nimport { VaultTimeoutService } from \"jslib-common/services/vaultTimeout.service\";\nimport { WebCryptoFunctionService } from \"jslib-common/services/webCryptoFunction.service\";\n\nimport { AuthGuardService } from \"./auth-guard.service\";\nimport { BroadcasterService } from \"./broadcaster.service\";\nimport { LockGuardService } from \"./lock-guard.service\";\nimport { ModalService } from \"./modal.service\";\nimport { PasswordRepromptService } from \"./passwordReprompt.service\";\nimport { UnauthGuardService } from \"./unauth-guard.service\";\nimport { ValidationService } from \"./validation.service\";\n\n@NgModule({\n declarations: [],\n providers: [\n { provide: \"WINDOW\", useValue: window },\n {\n provide: LOCALE_ID,\n useFactory: (i18nService: I18nServiceAbstraction) => i18nService.translationLocale,\n deps: [I18nServiceAbstraction],\n },\n ValidationService,\n AuthGuardService,\n UnauthGuardService,\n LockGuardService,\n ModalService,\n {\n provide: AppIdServiceAbstraction,\n useClass: AppIdService,\n deps: [StorageServiceAbstraction],\n },\n {\n provide: AuditServiceAbstraction,\n useClass: AuditService,\n deps: [CryptoFunctionServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: AuthServiceAbstraction,\n useClass: AuthService,\n deps: [\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n TokenServiceAbstraction,\n AppIdServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n MessagingServiceAbstraction,\n LogService,\n KeyConnectorServiceAbstraction,\n EnvironmentServiceAbstraction,\n StateServiceAbstraction,\n TwoFactorServiceAbstraction,\n I18nServiceAbstraction,\n ],\n },\n {\n provide: CipherServiceAbstraction,\n useFactory: (\n cryptoService: CryptoServiceAbstraction,\n settingsService: SettingsServiceAbstraction,\n apiService: ApiServiceAbstraction,\n fileUploadService: FileUploadServiceAbstraction,\n i18nService: I18nServiceAbstraction,\n injector: Injector,\n logService: LogService,\n stateService: StateServiceAbstraction\n ) =>\n new CipherService(\n cryptoService,\n settingsService,\n apiService,\n fileUploadService,\n i18nService,\n () => injector.get(SearchServiceAbstraction),\n logService,\n stateService\n ),\n deps: [\n CryptoServiceAbstraction,\n SettingsServiceAbstraction,\n ApiServiceAbstraction,\n FileUploadServiceAbstraction,\n I18nServiceAbstraction,\n Injector, // TODO: Get rid of this circular dependency!\n LogService,\n StateServiceAbstraction,\n ],\n },\n {\n provide: FolderServiceAbstraction,\n useClass: FolderService,\n deps: [\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n I18nServiceAbstraction,\n CipherServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n { provide: LogService, useFactory: () => new ConsoleLogService(false) },\n {\n provide: CollectionServiceAbstraction,\n useClass: CollectionService,\n deps: [CryptoServiceAbstraction, I18nServiceAbstraction, StateServiceAbstraction],\n },\n {\n provide: EnvironmentServiceAbstraction,\n useClass: EnvironmentService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: TotpServiceAbstraction,\n useClass: TotpService,\n deps: [CryptoFunctionServiceAbstraction, LogService, StateServiceAbstraction],\n },\n { provide: TokenServiceAbstraction, useClass: TokenService, deps: [StateServiceAbstraction] },\n {\n provide: CryptoServiceAbstraction,\n useClass: CryptoService,\n deps: [\n CryptoFunctionServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n LogService,\n StateServiceAbstraction,\n ],\n },\n {\n provide: PasswordGenerationServiceAbstraction,\n useClass: PasswordGenerationService,\n deps: [CryptoServiceAbstraction, PolicyServiceAbstraction, StateServiceAbstraction],\n },\n {\n provide: UsernameGenerationServiceAbstraction,\n useClass: UsernameGenerationService,\n deps: [CryptoServiceAbstraction, StateServiceAbstraction],\n },\n {\n provide: ApiServiceAbstraction,\n useFactory: (\n tokenService: TokenServiceAbstraction,\n platformUtilsService: PlatformUtilsServiceAbstraction,\n environmentService: EnvironmentServiceAbstraction,\n messagingService: MessagingServiceAbstraction,\n appIdService: AppIdServiceAbstraction\n ) =>\n new ApiService(\n tokenService,\n platformUtilsService,\n environmentService,\n appIdService,\n async (expired: boolean) => messagingService.send(\"logout\", { expired: expired })\n ),\n deps: [\n TokenServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n EnvironmentServiceAbstraction,\n MessagingServiceAbstraction,\n AppIdServiceAbstraction,\n ],\n },\n {\n provide: FileUploadServiceAbstraction,\n useClass: FileUploadService,\n deps: [LogService, ApiServiceAbstraction],\n },\n {\n provide: SyncServiceAbstraction,\n useFactory: (\n apiService: ApiServiceAbstraction,\n settingsService: SettingsServiceAbstraction,\n folderService: FolderServiceAbstraction,\n cipherService: CipherServiceAbstraction,\n cryptoService: CryptoServiceAbstraction,\n collectionService: CollectionServiceAbstraction,\n messagingService: MessagingServiceAbstraction,\n policyService: PolicyServiceAbstraction,\n sendService: SendServiceAbstraction,\n logService: LogService,\n keyConnectorService: KeyConnectorServiceAbstraction,\n stateService: StateServiceAbstraction,\n organizationService: OrganizationServiceAbstraction,\n providerService: ProviderServiceAbstraction\n ) =>\n new SyncService(\n apiService,\n settingsService,\n folderService,\n cipherService,\n cryptoService,\n collectionService,\n messagingService,\n policyService,\n sendService,\n logService,\n keyConnectorService,\n stateService,\n organizationService,\n providerService,\n async (expired: boolean) => messagingService.send(\"logout\", { expired: expired })\n ),\n deps: [\n ApiServiceAbstraction,\n SettingsServiceAbstraction,\n FolderServiceAbstraction,\n CipherServiceAbstraction,\n CryptoServiceAbstraction,\n CollectionServiceAbstraction,\n MessagingServiceAbstraction,\n PolicyServiceAbstraction,\n SendServiceAbstraction,\n LogService,\n KeyConnectorServiceAbstraction,\n StateServiceAbstraction,\n OrganizationServiceAbstraction,\n ProviderServiceAbstraction,\n ],\n },\n { provide: BroadcasterServiceAbstraction, useClass: BroadcasterService },\n {\n provide: SettingsServiceAbstraction,\n useClass: SettingsService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: VaultTimeoutServiceAbstraction,\n useFactory: (\n cipherService: CipherServiceAbstraction,\n folderService: FolderServiceAbstraction,\n collectionService: CollectionServiceAbstraction,\n cryptoService: CryptoServiceAbstraction,\n platformUtilsService: PlatformUtilsServiceAbstraction,\n messagingService: MessagingServiceAbstraction,\n searchService: SearchServiceAbstraction,\n tokenService: TokenServiceAbstraction,\n policyService: PolicyServiceAbstraction,\n keyConnectorService: KeyConnectorServiceAbstraction,\n stateService: StateServiceAbstraction\n ) =>\n new VaultTimeoutService(\n cipherService,\n folderService,\n collectionService,\n cryptoService,\n platformUtilsService,\n messagingService,\n searchService,\n tokenService,\n policyService,\n keyConnectorService,\n stateService,\n null,\n async (userId?: string) =>\n messagingService.send(\"logout\", { expired: false, userId: userId })\n ),\n deps: [\n CipherServiceAbstraction,\n FolderServiceAbstraction,\n CollectionServiceAbstraction,\n CryptoServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n MessagingServiceAbstraction,\n SearchServiceAbstraction,\n TokenServiceAbstraction,\n PolicyServiceAbstraction,\n KeyConnectorServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n {\n provide: StateServiceAbstraction,\n useFactory: (\n storageService: StorageServiceAbstraction,\n secureStorageService: StorageServiceAbstraction,\n logService: LogService,\n stateMigrationService: StateMigrationServiceAbstraction\n ) =>\n new StateService(\n storageService,\n secureStorageService,\n logService,\n stateMigrationService,\n new StateFactory(GlobalState, Account)\n ),\n deps: [\n StorageServiceAbstraction,\n \"SECURE_STORAGE\",\n LogService,\n StateMigrationServiceAbstraction,\n ],\n },\n {\n provide: StateMigrationServiceAbstraction,\n useFactory: (\n storageService: StorageServiceAbstraction,\n secureStorageService: StorageServiceAbstraction\n ) =>\n new StateMigrationService(\n storageService,\n secureStorageService,\n new StateFactory(GlobalState, Account)\n ),\n deps: [StorageServiceAbstraction, \"SECURE_STORAGE\"],\n },\n {\n provide: ExportServiceAbstraction,\n useClass: ExportService,\n deps: [\n FolderServiceAbstraction,\n CipherServiceAbstraction,\n ApiServiceAbstraction,\n CryptoServiceAbstraction,\n ],\n },\n {\n provide: SearchServiceAbstraction,\n useClass: SearchService,\n deps: [CipherServiceAbstraction, LogService, I18nServiceAbstraction],\n },\n {\n provide: NotificationsServiceAbstraction,\n useFactory: (\n syncService: SyncServiceAbstraction,\n appIdService: AppIdServiceAbstraction,\n apiService: ApiServiceAbstraction,\n vaultTimeoutService: VaultTimeoutServiceAbstraction,\n environmentService: EnvironmentServiceAbstraction,\n messagingService: MessagingServiceAbstraction,\n logService: LogService,\n stateService: StateServiceAbstraction\n ) =>\n new NotificationsService(\n syncService,\n appIdService,\n apiService,\n vaultTimeoutService,\n environmentService,\n async () => messagingService.send(\"logout\", { expired: true }),\n logService,\n stateService\n ),\n deps: [\n SyncServiceAbstraction,\n AppIdServiceAbstraction,\n ApiServiceAbstraction,\n VaultTimeoutServiceAbstraction,\n EnvironmentServiceAbstraction,\n MessagingServiceAbstraction,\n LogService,\n StateServiceAbstraction,\n ],\n },\n {\n provide: CryptoFunctionServiceAbstraction,\n useClass: WebCryptoFunctionService,\n deps: [\"WINDOW\"],\n },\n {\n provide: EventServiceAbstraction,\n useClass: EventService,\n deps: [\n ApiServiceAbstraction,\n CipherServiceAbstraction,\n StateServiceAbstraction,\n LogService,\n OrganizationServiceAbstraction,\n ],\n },\n {\n provide: PolicyServiceAbstraction,\n useClass: PolicyService,\n deps: [StateServiceAbstraction, OrganizationServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: SendServiceAbstraction,\n useClass: SendService,\n deps: [\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n FileUploadServiceAbstraction,\n I18nServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n {\n provide: KeyConnectorServiceAbstraction,\n useClass: KeyConnectorService,\n deps: [\n StateServiceAbstraction,\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n TokenServiceAbstraction,\n LogService,\n OrganizationServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n ],\n },\n {\n provide: UserVerificationServiceAbstraction,\n useClass: UserVerificationService,\n deps: [CryptoServiceAbstraction, I18nServiceAbstraction, ApiServiceAbstraction],\n },\n { provide: PasswordRepromptServiceAbstraction, useClass: PasswordRepromptService },\n {\n provide: OrganizationServiceAbstraction,\n useClass: OrganizationService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: ProviderServiceAbstraction,\n useClass: ProviderService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: TwoFactorServiceAbstraction,\n useClass: TwoFactorService,\n deps: [I18nServiceAbstraction, PlatformUtilsServiceAbstraction],\n },\n ],\n})\nexport class JslibServicesModule {}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, Router } from \"@angular/router\";\n\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"jslib-common/abstractions/vaultTimeout.service\";\n\n@Injectable()\nexport class LockGuardService implements CanActivate {\n protected homepage = \"vault\";\n protected loginpage = \"login\";\n constructor(\n private vaultTimeoutService: VaultTimeoutService,\n private router: Router,\n private stateService: StateService\n ) {}\n\n async canActivate() {\n if (await this.vaultTimeoutService.isLocked()) {\n return true;\n }\n\n const redirectUrl = (await this.stateService.getIsAuthenticated())\n ? [this.homepage]\n : [this.loginpage];\n\n this.router.navigate(redirectUrl);\n return false;\n }\n}\n","import {\n ApplicationRef,\n ComponentFactory,\n ComponentFactoryResolver,\n ComponentRef,\n EmbeddedViewRef,\n Injectable,\n Injector,\n Type,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { first } from \"rxjs/operators\";\n\nimport { DynamicModalComponent } from \"../components/modal/dynamic-modal.component\";\nimport { ModalInjector } from \"../components/modal/modal-injector\";\nimport { ModalRef } from \"../components/modal/modal.ref\";\n\nexport class ModalConfig {\n data?: D;\n allowMultipleModals = false;\n}\n\n@Injectable()\nexport class ModalService {\n protected modalList: ComponentRef[] = [];\n\n // Lazy loaded modules are not available in componentFactoryResolver,\n // therefore modules needs to manually initialize their resolvers.\n private factoryResolvers: Map, ComponentFactoryResolver> = new Map();\n\n constructor(\n private componentFactoryResolver: ComponentFactoryResolver,\n private applicationRef: ApplicationRef,\n private injector: Injector\n ) {\n document.addEventListener(\"keyup\", (event) => {\n if (event.key === \"Escape\" && this.modalCount > 0) {\n this.topModal.instance.close();\n }\n });\n }\n\n get modalCount() {\n return this.modalList.length;\n }\n\n private get topModal() {\n return this.modalList[this.modalCount - 1];\n }\n\n async openViewRef(\n componentType: Type,\n viewContainerRef: ViewContainerRef,\n setComponentParameters: (component: T) => void = null\n ): Promise<[ModalRef, T]> {\n const [modalRef, modalComponentRef] = this.openInternal(componentType, null, false);\n modalComponentRef.instance.setComponentParameters = setComponentParameters;\n\n viewContainerRef.insert(modalComponentRef.hostView);\n\n await modalRef.onCreated.pipe(first()).toPromise();\n\n return [modalRef, modalComponentRef.instance.componentRef.instance];\n }\n\n open(componentType: Type, config?: ModalConfig) {\n if (!(config?.allowMultipleModals ?? false) && this.modalCount > 0) {\n return;\n }\n\n // eslint-disable-next-line\n const [modalRef, _] = this.openInternal(componentType, config, true);\n\n return modalRef;\n }\n\n registerComponentFactoryResolver(\n componentType: Type,\n componentFactoryResolver: ComponentFactoryResolver\n ): void {\n this.factoryResolvers.set(componentType, componentFactoryResolver);\n }\n\n resolveComponentFactory(componentType: Type): ComponentFactory {\n if (this.factoryResolvers.has(componentType)) {\n return this.factoryResolvers.get(componentType).resolveComponentFactory(componentType);\n }\n\n return this.componentFactoryResolver.resolveComponentFactory(componentType);\n }\n\n protected openInternal(\n componentType: Type,\n config?: ModalConfig,\n attachToDom?: boolean\n ): [ModalRef, ComponentRef] {\n const [modalRef, componentRef] = this.createModalComponent(config);\n componentRef.instance.childComponentType = componentType;\n\n if (attachToDom) {\n this.applicationRef.attachView(componentRef.hostView);\n const domElem = (componentRef.hostView as EmbeddedViewRef).rootNodes[0] as HTMLElement;\n document.body.appendChild(domElem);\n }\n\n modalRef.onClosed.pipe(first()).subscribe(() => {\n if (attachToDom) {\n this.applicationRef.detachView(componentRef.hostView);\n }\n componentRef.destroy();\n\n this.modalList.pop();\n if (this.modalCount > 0) {\n this.topModal.instance.getFocus();\n }\n });\n\n this.setupHandlers(modalRef);\n\n this.modalList.push(componentRef);\n\n return [modalRef, componentRef];\n }\n\n protected setupHandlers(modalRef: ModalRef) {\n let backdrop: HTMLElement = null;\n\n // Add backdrop, setup [data-dismiss] handler.\n modalRef.onCreated.pipe(first()).subscribe((el) => {\n document.body.classList.add(\"modal-open\");\n\n const modalEl: HTMLElement = el.querySelector(\".modal\");\n const dialogEl = modalEl.querySelector(\".modal-dialog\") as HTMLElement;\n\n backdrop = document.createElement(\"div\");\n backdrop.className = \"modal-backdrop fade\";\n backdrop.style.zIndex = `${this.modalCount}040`;\n modalEl.prepend(backdrop);\n\n dialogEl.addEventListener(\"click\", (e: Event) => {\n e.stopPropagation();\n });\n dialogEl.style.zIndex = `${this.modalCount}050`;\n\n const modals = Array.from(\n el.querySelectorAll('.modal-backdrop, .modal *[data-dismiss=\"modal\"]')\n );\n for (const closeElement of modals) {\n closeElement.addEventListener(\"click\", () => {\n modalRef.close();\n });\n }\n });\n\n // onClose is used in Web to hook into bootstrap. On other projects we pipe it directly to closed.\n modalRef.onClose.pipe(first()).subscribe(() => {\n modalRef.closed();\n\n if (this.modalCount === 0) {\n document.body.classList.remove(\"modal-open\");\n }\n });\n }\n\n protected createModalComponent(\n config: ModalConfig\n ): [ModalRef, ComponentRef] {\n const modalRef = new ModalRef();\n\n const map = new WeakMap();\n map.set(ModalConfig, config);\n map.set(ModalRef, modalRef);\n\n const componentFactory =\n this.componentFactoryResolver.resolveComponentFactory(DynamicModalComponent);\n const componentRef = componentFactory.create(new ModalInjector(this.injector, map));\n\n return [modalRef, componentRef];\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"jslib-common/abstractions/passwordReprompt.service\";\n\nimport { PasswordRepromptComponent } from \"../components/password-reprompt.component\";\n\nimport { ModalService } from \"./modal.service\";\n\n@Injectable()\nexport class PasswordRepromptService implements PasswordRepromptServiceAbstraction {\n protected component = PasswordRepromptComponent;\n\n constructor(\n private modalService: ModalService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n protectedFields() {\n return [\"TOTP\", \"Password\", \"H_Field\", \"Card Number\", \"Security Code\"];\n }\n\n async showPasswordPrompt() {\n if (!(await this.enabled())) {\n return true;\n }\n\n const ref = this.modalService.open(this.component, { allowMultipleModals: true });\n\n if (ref == null) {\n return false;\n }\n\n const result = await ref.onClosedPromise();\n return result === true;\n }\n\n async enabled() {\n return !(await this.keyConnectorService.getUsesKeyConnector());\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, Router } from \"@angular/router\";\n\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"jslib-common/abstractions/vaultTimeout.service\";\n\n@Injectable()\nexport class UnauthGuardService implements CanActivate {\n protected homepage = \"vault\";\n constructor(\n private vaultTimeoutService: VaultTimeoutService,\n private router: Router,\n private stateService: StateService\n ) {}\n\n async canActivate() {\n const isAuthed = await this.stateService.getIsAuthenticated();\n if (isAuthed) {\n const locked = await this.vaultTimeoutService.isLocked();\n if (locked) {\n this.router.navigate([\"lock\"]);\n } else {\n this.router.navigate([this.homepage]);\n }\n return false;\n }\n return true;\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { ErrorResponse } from \"jslib-common/models/response/errorResponse\";\n\n@Injectable()\nexport class ValidationService {\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n showError(data: any): string[] {\n const defaultErrorMessage = this.i18nService.t(\"unexpectedError\");\n let errors: string[] = [];\n\n if (data != null && typeof data === \"string\") {\n errors.push(data);\n } else if (data == null || typeof data !== \"object\") {\n errors.push(defaultErrorMessage);\n } else if (data.validationErrors != null) {\n errors = errors.concat((data as ErrorResponse).getAllMessages());\n } else {\n errors.push(data.message ? data.message : defaultErrorMessage);\n }\n\n if (errors.length === 1) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), errors[0]);\n } else if (errors.length > 1) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), errors, {\n timeout: 5000 * errors.length,\n });\n }\n\n return errors;\n }\n}\n","import { PolicyType } from \"../enums/policyType\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/setKeyConnectorKeyRequest\";\nimport { VerifyOTPRequest } from \"../models/request/account/verifyOTPRequest\";\nimport { AttachmentRequest } from \"../models/request/attachmentRequest\";\nimport { BitPayInvoiceRequest } from \"../models/request/bitPayInvoiceRequest\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipherBulkDeleteRequest\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipherBulkMoveRequest\";\nimport { CipherBulkRestoreRequest } from \"../models/request/cipherBulkRestoreRequest\";\nimport { CipherBulkShareRequest } from \"../models/request/cipherBulkShareRequest\";\nimport { CipherCollectionsRequest } from \"../models/request/cipherCollectionsRequest\";\nimport { CipherCreateRequest } from \"../models/request/cipherCreateRequest\";\nimport { CipherRequest } from \"../models/request/cipherRequest\";\nimport { CipherShareRequest } from \"../models/request/cipherShareRequest\";\nimport { CollectionRequest } from \"../models/request/collectionRequest\";\nimport { DeleteRecoverRequest } from \"../models/request/deleteRecoverRequest\";\nimport { EmailRequest } from \"../models/request/emailRequest\";\nimport { EmailTokenRequest } from \"../models/request/emailTokenRequest\";\nimport { EmergencyAccessAcceptRequest } from \"../models/request/emergencyAccessAcceptRequest\";\nimport { EmergencyAccessConfirmRequest } from \"../models/request/emergencyAccessConfirmRequest\";\nimport { EmergencyAccessInviteRequest } from \"../models/request/emergencyAccessInviteRequest\";\nimport { EmergencyAccessPasswordRequest } from \"../models/request/emergencyAccessPasswordRequest\";\nimport { EmergencyAccessUpdateRequest } from \"../models/request/emergencyAccessUpdateRequest\";\nimport { EventRequest } from \"../models/request/eventRequest\";\nimport { FolderRequest } from \"../models/request/folderRequest\";\nimport { GroupRequest } from \"../models/request/groupRequest\";\nimport { IapCheckRequest } from \"../models/request/iapCheckRequest\";\nimport { ApiTokenRequest } from \"../models/request/identityToken/apiTokenRequest\";\nimport { PasswordTokenRequest } from \"../models/request/identityToken/passwordTokenRequest\";\nimport { SsoTokenRequest } from \"../models/request/identityToken/ssoTokenRequest\";\nimport { ImportCiphersRequest } from \"../models/request/importCiphersRequest\";\nimport { ImportDirectoryRequest } from \"../models/request/importDirectoryRequest\";\nimport { ImportOrganizationCiphersRequest } from \"../models/request/importOrganizationCiphersRequest\";\nimport { KdfRequest } from \"../models/request/kdfRequest\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/keyConnectorUserKeyRequest\";\nimport { KeysRequest } from \"../models/request/keysRequest\";\nimport { OrganizationSponsorshipCreateRequest } from \"../models/request/organization/organizationSponsorshipCreateRequest\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../models/request/organization/organizationSponsorshipRedeemRequest\";\nimport { OrganizationSsoRequest } from \"../models/request/organization/organizationSsoRequest\";\nimport { OrganizationCreateRequest } from \"../models/request/organizationCreateRequest\";\nimport { OrganizationImportRequest } from \"../models/request/organizationImportRequest\";\nimport { OrganizationKeysRequest } from \"../models/request/organizationKeysRequest\";\nimport { OrganizationSubscriptionUpdateRequest } from \"../models/request/organizationSubscriptionUpdateRequest\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../models/request/organizationTaxInfoUpdateRequest\";\nimport { OrganizationUpdateRequest } from \"../models/request/organizationUpdateRequest\";\nimport { OrganizationUpgradeRequest } from \"../models/request/organizationUpgradeRequest\";\nimport { OrganizationUserAcceptRequest } from \"../models/request/organizationUserAcceptRequest\";\nimport { OrganizationUserBulkConfirmRequest } from \"../models/request/organizationUserBulkConfirmRequest\";\nimport { OrganizationUserBulkRequest } from \"../models/request/organizationUserBulkRequest\";\nimport { OrganizationUserConfirmRequest } from \"../models/request/organizationUserConfirmRequest\";\nimport { OrganizationUserInviteRequest } from \"../models/request/organizationUserInviteRequest\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"../models/request/organizationUserResetPasswordEnrollmentRequest\";\nimport { OrganizationUserResetPasswordRequest } from \"../models/request/organizationUserResetPasswordRequest\";\nimport { OrganizationUserUpdateGroupsRequest } from \"../models/request/organizationUserUpdateGroupsRequest\";\nimport { OrganizationUserUpdateRequest } from \"../models/request/organizationUserUpdateRequest\";\nimport { PasswordHintRequest } from \"../models/request/passwordHintRequest\";\nimport { PasswordRequest } from \"../models/request/passwordRequest\";\nimport { PaymentRequest } from \"../models/request/paymentRequest\";\nimport { PolicyRequest } from \"../models/request/policyRequest\";\nimport { PreloginRequest } from \"../models/request/preloginRequest\";\nimport { ProviderAddOrganizationRequest } from \"../models/request/provider/providerAddOrganizationRequest\";\nimport { ProviderOrganizationCreateRequest } from \"../models/request/provider/providerOrganizationCreateRequest\";\nimport { ProviderSetupRequest } from \"../models/request/provider/providerSetupRequest\";\nimport { ProviderUpdateRequest } from \"../models/request/provider/providerUpdateRequest\";\nimport { ProviderUserAcceptRequest } from \"../models/request/provider/providerUserAcceptRequest\";\nimport { ProviderUserBulkConfirmRequest } from \"../models/request/provider/providerUserBulkConfirmRequest\";\nimport { ProviderUserBulkRequest } from \"../models/request/provider/providerUserBulkRequest\";\nimport { ProviderUserConfirmRequest } from \"../models/request/provider/providerUserConfirmRequest\";\nimport { ProviderUserInviteRequest } from \"../models/request/provider/providerUserInviteRequest\";\nimport { ProviderUserUpdateRequest } from \"../models/request/provider/providerUserUpdateRequest\";\nimport { RegisterRequest } from \"../models/request/registerRequest\";\nimport { SeatRequest } from \"../models/request/seatRequest\";\nimport { SecretVerificationRequest } from \"../models/request/secretVerificationRequest\";\nimport { SelectionReadOnlyRequest } from \"../models/request/selectionReadOnlyRequest\";\nimport { SendAccessRequest } from \"../models/request/sendAccessRequest\";\nimport { SendRequest } from \"../models/request/sendRequest\";\nimport { SetPasswordRequest } from \"../models/request/setPasswordRequest\";\nimport { StorageRequest } from \"../models/request/storageRequest\";\nimport { TaxInfoUpdateRequest } from \"../models/request/taxInfoUpdateRequest\";\nimport { TwoFactorEmailRequest } from \"../models/request/twoFactorEmailRequest\";\nimport { TwoFactorProviderRequest } from \"../models/request/twoFactorProviderRequest\";\nimport { TwoFactorRecoveryRequest } from \"../models/request/twoFactorRecoveryRequest\";\nimport { UpdateDomainsRequest } from \"../models/request/updateDomainsRequest\";\nimport { UpdateKeyRequest } from \"../models/request/updateKeyRequest\";\nimport { UpdateProfileRequest } from \"../models/request/updateProfileRequest\";\nimport { UpdateTempPasswordRequest } from \"../models/request/updateTempPasswordRequest\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../models/request/updateTwoFactorAuthenticatorRequest\";\nimport { UpdateTwoFactorDuoRequest } from \"../models/request/updateTwoFactorDuoRequest\";\nimport { UpdateTwoFactorEmailRequest } from \"../models/request/updateTwoFactorEmailRequest\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../models/request/updateTwoFactorWebAuthnDeleteRequest\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../models/request/updateTwoFactorWebAuthnRequest\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../models/request/updateTwoFactorYubioOtpRequest\";\nimport { VerifyBankRequest } from \"../models/request/verifyBankRequest\";\nimport { VerifyDeleteRecoverRequest } from \"../models/request/verifyDeleteRecoverRequest\";\nimport { VerifyEmailRequest } from \"../models/request/verifyEmailRequest\";\nimport { ApiKeyResponse } from \"../models/response/apiKeyResponse\";\nimport { AttachmentResponse } from \"../models/response/attachmentResponse\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachmentUploadDataResponse\";\nimport { BillingResponse } from \"../models/response/billingResponse\";\nimport { BreachAccountResponse } from \"../models/response/breachAccountResponse\";\nimport { CipherResponse } from \"../models/response/cipherResponse\";\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from \"../models/response/collectionResponse\";\nimport { DomainsResponse } from \"../models/response/domainsResponse\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse,\n} from \"../models/response/emergencyAccessResponse\";\nimport { EventResponse } from \"../models/response/eventResponse\";\nimport { FolderResponse } from \"../models/response/folderResponse\";\nimport { GroupDetailsResponse, GroupResponse } from \"../models/response/groupResponse\";\nimport { IdentityCaptchaResponse } from \"../models/response/identityCaptchaResponse\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identityTwoFactorResponse\";\nimport { KeyConnectorUserKeyResponse } from \"../models/response/keyConnectorUserKeyResponse\";\nimport { ListResponse } from \"../models/response/listResponse\";\nimport { OrganizationSsoResponse } from \"../models/response/organization/organizationSsoResponse\";\nimport { OrganizationAutoEnrollStatusResponse } from \"../models/response/organizationAutoEnrollStatusResponse\";\nimport { OrganizationKeysResponse } from \"../models/response/organizationKeysResponse\";\nimport { OrganizationResponse } from \"../models/response/organizationResponse\";\nimport { OrganizationSubscriptionResponse } from \"../models/response/organizationSubscriptionResponse\";\nimport { OrganizationUserBulkPublicKeyResponse } from \"../models/response/organizationUserBulkPublicKeyResponse\";\nimport { OrganizationUserBulkResponse } from \"../models/response/organizationUserBulkResponse\";\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n OrganizationUserUserDetailsResponse,\n} from \"../models/response/organizationUserResponse\";\nimport { PaymentResponse } from \"../models/response/paymentResponse\";\nimport { PlanResponse } from \"../models/response/planResponse\";\nimport { PolicyResponse } from \"../models/response/policyResponse\";\nimport { PreloginResponse } from \"../models/response/preloginResponse\";\nimport { ProfileResponse } from \"../models/response/profileResponse\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../models/response/provider/providerOrganizationResponse\";\nimport { ProviderResponse } from \"../models/response/provider/providerResponse\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../models/response/provider/providerUserBulkPublicKeyResponse\";\nimport { ProviderUserBulkResponse } from \"../models/response/provider/providerUserBulkResponse\";\nimport {\n ProviderUserResponse,\n ProviderUserUserDetailsResponse,\n} from \"../models/response/provider/providerUserResponse\";\nimport { SelectionReadOnlyResponse } from \"../models/response/selectionReadOnlyResponse\";\nimport { SendAccessResponse } from \"../models/response/sendAccessResponse\";\nimport { SendFileDownloadDataResponse } from \"../models/response/sendFileDownloadDataResponse\";\nimport { SendFileUploadDataResponse } from \"../models/response/sendFileUploadDataResponse\";\nimport { SendResponse } from \"../models/response/sendResponse\";\nimport { SubscriptionResponse } from \"../models/response/subscriptionResponse\";\nimport { SyncResponse } from \"../models/response/syncResponse\";\nimport { TaxInfoResponse } from \"../models/response/taxInfoResponse\";\nimport { TaxRateResponse } from \"../models/response/taxRateResponse\";\nimport { TwoFactorAuthenticatorResponse } from \"../models/response/twoFactorAuthenticatorResponse\";\nimport { TwoFactorDuoResponse } from \"../models/response/twoFactorDuoResponse\";\nimport { TwoFactorEmailResponse } from \"../models/response/twoFactorEmailResponse\";\nimport { TwoFactorProviderResponse } from \"../models/response/twoFactorProviderResponse\";\nimport { TwoFactorRecoverResponse } from \"../models/response/twoFactorRescoverResponse\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"../models/response/twoFactorWebAuthnResponse\";\nimport { TwoFactorYubiKeyResponse } from \"../models/response/twoFactorYubiKeyResponse\";\nimport { UserKeyResponse } from \"../models/response/userKeyResponse\";\nimport { SendAccessView } from \"../models/view/sendAccessView\";\n\nexport abstract class ApiService {\n postIdentityToken: (\n request: PasswordTokenRequest | SsoTokenRequest | ApiTokenRequest\n ) => Promise;\n refreshIdentityToken: () => Promise;\n\n getProfile: () => Promise;\n getUserBilling: () => Promise;\n getUserSubscription: () => Promise;\n getTaxInfo: () => Promise;\n putProfile: (request: UpdateProfileRequest) => Promise;\n putTaxInfo: (request: TaxInfoUpdateRequest) => Promise;\n postPrelogin: (request: PreloginRequest) => Promise;\n postEmailToken: (request: EmailTokenRequest) => Promise;\n postEmail: (request: EmailRequest) => Promise;\n postPassword: (request: PasswordRequest) => Promise;\n setPassword: (request: SetPasswordRequest) => Promise;\n postSetKeyConnectorKey: (request: SetKeyConnectorKeyRequest) => Promise;\n postSecurityStamp: (request: SecretVerificationRequest) => Promise;\n deleteAccount: (request: SecretVerificationRequest) => Promise;\n getAccountRevisionDate: () => Promise;\n postPasswordHint: (request: PasswordHintRequest) => Promise;\n postRegister: (request: RegisterRequest) => Promise;\n postPremium: (data: FormData) => Promise;\n postIapCheck: (request: IapCheckRequest) => Promise;\n postReinstatePremium: () => Promise;\n postCancelPremium: () => Promise;\n postAccountStorage: (request: StorageRequest) => Promise;\n postAccountPayment: (request: PaymentRequest) => Promise;\n postAccountLicense: (data: FormData) => Promise;\n postAccountKey: (request: UpdateKeyRequest) => Promise;\n postAccountKeys: (request: KeysRequest) => Promise;\n postAccountVerifyEmail: () => Promise;\n postAccountVerifyEmailToken: (request: VerifyEmailRequest) => Promise;\n postAccountVerifyPassword: (request: SecretVerificationRequest) => Promise;\n postAccountRecoverDelete: (request: DeleteRecoverRequest) => Promise;\n postAccountRecoverDeleteToken: (request: VerifyDeleteRecoverRequest) => Promise;\n postAccountKdf: (request: KdfRequest) => Promise;\n postUserApiKey: (id: string, request: SecretVerificationRequest) => Promise;\n postUserRotateApiKey: (id: string, request: SecretVerificationRequest) => Promise;\n putUpdateTempPassword: (request: UpdateTempPasswordRequest) => Promise;\n postAccountRequestOTP: () => Promise;\n postAccountVerifyOTP: (request: VerifyOTPRequest) => Promise;\n postConvertToKeyConnector: () => Promise;\n\n getFolder: (id: string) => Promise;\n postFolder: (request: FolderRequest) => Promise;\n putFolder: (id: string, request: FolderRequest) => Promise;\n deleteFolder: (id: string) => Promise;\n\n getSend: (id: string) => Promise;\n postSendAccess: (\n id: string,\n request: SendAccessRequest,\n apiUrl?: string\n ) => Promise;\n getSends: () => Promise>;\n postSend: (request: SendRequest) => Promise;\n postFileTypeSend: (request: SendRequest) => Promise;\n postSendFile: (sendId: string, fileId: string, data: FormData) => Promise;\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n postSendFileLegacy: (data: FormData) => Promise;\n putSend: (id: string, request: SendRequest) => Promise;\n putSendRemovePassword: (id: string) => Promise;\n deleteSend: (id: string) => Promise;\n getSendFileDownloadData: (\n send: SendAccessView,\n request: SendAccessRequest,\n apiUrl?: string\n ) => Promise;\n renewSendFileUploadUrl: (sendId: string, fileId: string) => Promise;\n\n getCipher: (id: string) => Promise;\n getCipherAdmin: (id: string) => Promise;\n getAttachmentData: (\n cipherId: string,\n attachmentId: string,\n emergencyAccessId?: string\n ) => Promise;\n getCiphersOrganization: (organizationId: string) => Promise>;\n postCipher: (request: CipherRequest) => Promise;\n postCipherCreate: (request: CipherCreateRequest) => Promise;\n postCipherAdmin: (request: CipherCreateRequest) => Promise;\n putCipher: (id: string, request: CipherRequest) => Promise;\n putCipherAdmin: (id: string, request: CipherRequest) => Promise;\n deleteCipher: (id: string) => Promise;\n deleteCipherAdmin: (id: string) => Promise;\n deleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise;\n deleteManyCiphersAdmin: (request: CipherBulkDeleteRequest) => Promise;\n putMoveCiphers: (request: CipherBulkMoveRequest) => Promise;\n putShareCipher: (id: string, request: CipherShareRequest) => Promise;\n putShareCiphers: (request: CipherBulkShareRequest) => Promise;\n putCipherCollections: (id: string, request: CipherCollectionsRequest) => Promise;\n putCipherCollectionsAdmin: (id: string, request: CipherCollectionsRequest) => Promise;\n postPurgeCiphers: (request: SecretVerificationRequest, organizationId?: string) => Promise;\n postImportCiphers: (request: ImportCiphersRequest) => Promise;\n postImportOrganizationCiphers: (\n organizationId: string,\n request: ImportOrganizationCiphersRequest\n ) => Promise;\n putDeleteCipher: (id: string) => Promise;\n putDeleteCipherAdmin: (id: string) => Promise;\n putDeleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise;\n putDeleteManyCiphersAdmin: (request: CipherBulkDeleteRequest) => Promise;\n putRestoreCipher: (id: string) => Promise;\n putRestoreCipherAdmin: (id: string) => Promise;\n putRestoreManyCiphers: (\n request: CipherBulkRestoreRequest\n ) => Promise>;\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n postCipherAttachmentLegacy: (id: string, data: FormData) => Promise;\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n postCipherAttachmentAdminLegacy: (id: string, data: FormData) => Promise;\n postCipherAttachment: (\n id: string,\n request: AttachmentRequest\n ) => Promise;\n deleteCipherAttachment: (id: string, attachmentId: string) => Promise;\n deleteCipherAttachmentAdmin: (id: string, attachmentId: string) => Promise;\n postShareCipherAttachment: (\n id: string,\n attachmentId: string,\n data: FormData,\n organizationId: string\n ) => Promise;\n renewAttachmentUploadUrl: (\n id: string,\n attachmentId: string\n ) => Promise;\n postAttachmentFile: (id: string, attachmentId: string, data: FormData) => Promise;\n\n getCollectionDetails: (\n organizationId: string,\n id: string\n ) => Promise;\n getUserCollections: () => Promise>;\n getCollections: (organizationId: string) => Promise>;\n getCollectionUsers: (organizationId: string, id: string) => Promise;\n postCollection: (\n organizationId: string,\n request: CollectionRequest\n ) => Promise;\n putCollectionUsers: (\n organizationId: string,\n id: string,\n request: SelectionReadOnlyRequest[]\n ) => Promise;\n putCollection: (\n organizationId: string,\n id: string,\n request: CollectionRequest\n ) => Promise;\n deleteCollection: (organizationId: string, id: string) => Promise;\n deleteCollectionUser: (\n organizationId: string,\n id: string,\n organizationUserId: string\n ) => Promise;\n\n getGroupDetails: (organizationId: string, id: string) => Promise;\n getGroups: (organizationId: string) => Promise>;\n getGroupUsers: (organizationId: string, id: string) => Promise;\n postGroup: (organizationId: string, request: GroupRequest) => Promise;\n putGroup: (organizationId: string, id: string, request: GroupRequest) => Promise;\n putGroupUsers: (organizationId: string, id: string, request: string[]) => Promise;\n deleteGroup: (organizationId: string, id: string) => Promise;\n deleteGroupUser: (organizationId: string, id: string, organizationUserId: string) => Promise;\n\n getPolicy: (organizationId: string, type: PolicyType) => Promise;\n getPolicies: (organizationId: string) => Promise>;\n getPoliciesByToken: (\n organizationId: string,\n token: string,\n email: string,\n organizationUserId: string\n ) => Promise>;\n getPoliciesByInvitedUser: (\n organizationId: string,\n userId: string\n ) => Promise>;\n putPolicy: (\n organizationId: string,\n type: PolicyType,\n request: PolicyRequest\n ) => Promise;\n\n getOrganizationUser: (\n organizationId: string,\n id: string\n ) => Promise;\n getOrganizationUserGroups: (organizationId: string, id: string) => Promise;\n getOrganizationUsers: (\n organizationId: string\n ) => Promise>;\n getOrganizationUserResetPasswordDetails: (\n organizationId: string,\n id: string\n ) => Promise;\n postOrganizationUserInvite: (\n organizationId: string,\n request: OrganizationUserInviteRequest\n ) => Promise;\n postOrganizationUserReinvite: (organizationId: string, id: string) => Promise;\n postManyOrganizationUserReinvite: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n postOrganizationUserAccept: (\n organizationId: string,\n id: string,\n request: OrganizationUserAcceptRequest\n ) => Promise;\n postOrganizationUserConfirm: (\n organizationId: string,\n id: string,\n request: OrganizationUserConfirmRequest\n ) => Promise;\n postOrganizationUsersPublicKey: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n postOrganizationUserBulkConfirm: (\n organizationId: string,\n request: OrganizationUserBulkConfirmRequest\n ) => Promise>;\n\n putOrganizationUser: (\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateRequest\n ) => Promise;\n putOrganizationUserGroups: (\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateGroupsRequest\n ) => Promise;\n putOrganizationUserResetPasswordEnrollment: (\n organizationId: string,\n userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest\n ) => Promise;\n putOrganizationUserResetPassword: (\n organizationId: string,\n id: string,\n request: OrganizationUserResetPasswordRequest\n ) => Promise;\n deleteOrganizationUser: (organizationId: string, id: string) => Promise;\n deleteManyOrganizationUsers: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n\n getSync: () => Promise;\n postImportDirectory: (organizationId: string, request: ImportDirectoryRequest) => Promise;\n postPublicImportDirectory: (request: OrganizationImportRequest) => Promise;\n\n getSettingsDomains: () => Promise;\n putSettingsDomains: (request: UpdateDomainsRequest) => Promise;\n\n getTwoFactorProviders: () => Promise>;\n getTwoFactorOrganizationProviders: (\n organizationId: string\n ) => Promise>;\n getTwoFactorAuthenticator: (\n request: SecretVerificationRequest\n ) => Promise;\n getTwoFactorEmail: (request: SecretVerificationRequest) => Promise;\n getTwoFactorDuo: (request: SecretVerificationRequest) => Promise;\n getTwoFactorOrganizationDuo: (\n organizationId: string,\n request: SecretVerificationRequest\n ) => Promise;\n getTwoFactorYubiKey: (request: SecretVerificationRequest) => Promise;\n getTwoFactorWebAuthn: (request: SecretVerificationRequest) => Promise;\n getTwoFactorWebAuthnChallenge: (request: SecretVerificationRequest) => Promise;\n getTwoFactorRecover: (request: SecretVerificationRequest) => Promise;\n putTwoFactorAuthenticator: (\n request: UpdateTwoFactorAuthenticatorRequest\n ) => Promise;\n putTwoFactorEmail: (request: UpdateTwoFactorEmailRequest) => Promise;\n putTwoFactorDuo: (request: UpdateTwoFactorDuoRequest) => Promise;\n putTwoFactorOrganizationDuo: (\n organizationId: string,\n request: UpdateTwoFactorDuoRequest\n ) => Promise;\n putTwoFactorYubiKey: (\n request: UpdateTwoFactorYubioOtpRequest\n ) => Promise;\n putTwoFactorWebAuthn: (\n request: UpdateTwoFactorWebAuthnRequest\n ) => Promise;\n deleteTwoFactorWebAuthn: (\n request: UpdateTwoFactorWebAuthnDeleteRequest\n ) => Promise;\n putTwoFactorDisable: (request: TwoFactorProviderRequest) => Promise;\n putTwoFactorOrganizationDisable: (\n organizationId: string,\n request: TwoFactorProviderRequest\n ) => Promise;\n postTwoFactorRecover: (request: TwoFactorRecoveryRequest) => Promise;\n postTwoFactorEmailSetup: (request: TwoFactorEmailRequest) => Promise;\n postTwoFactorEmail: (request: TwoFactorEmailRequest) => Promise;\n\n getEmergencyAccessTrusted: () => Promise>;\n getEmergencyAccessGranted: () => Promise>;\n getEmergencyAccess: (id: string) => Promise;\n getEmergencyGrantorPolicies: (id: string) => Promise>;\n putEmergencyAccess: (id: string, request: EmergencyAccessUpdateRequest) => Promise;\n deleteEmergencyAccess: (id: string) => Promise;\n postEmergencyAccessInvite: (request: EmergencyAccessInviteRequest) => Promise;\n postEmergencyAccessReinvite: (id: string) => Promise;\n postEmergencyAccessAccept: (id: string, request: EmergencyAccessAcceptRequest) => Promise;\n postEmergencyAccessConfirm: (id: string, request: EmergencyAccessConfirmRequest) => Promise;\n postEmergencyAccessInitiate: (id: string) => Promise;\n postEmergencyAccessApprove: (id: string) => Promise;\n postEmergencyAccessReject: (id: string) => Promise;\n postEmergencyAccessTakeover: (id: string) => Promise;\n postEmergencyAccessPassword: (\n id: string,\n request: EmergencyAccessPasswordRequest\n ) => Promise;\n postEmergencyAccessView: (id: string) => Promise;\n\n getOrganization: (id: string) => Promise;\n getOrganizationBilling: (id: string) => Promise;\n getOrganizationSubscription: (id: string) => Promise;\n getOrganizationLicense: (id: string, installationId: string) => Promise;\n getOrganizationTaxInfo: (id: string) => Promise;\n getOrganizationAutoEnrollStatus: (\n identifier: string\n ) => Promise;\n getOrganizationSso: (id: string) => Promise;\n postOrganization: (request: OrganizationCreateRequest) => Promise;\n putOrganization: (\n id: string,\n request: OrganizationUpdateRequest\n ) => Promise;\n putOrganizationTaxInfo: (id: string, request: OrganizationTaxInfoUpdateRequest) => Promise;\n postLeaveOrganization: (id: string) => Promise;\n postOrganizationLicense: (data: FormData) => Promise;\n postOrganizationLicenseUpdate: (id: string, data: FormData) => Promise;\n postOrganizationApiKey: (\n id: string,\n request: SecretVerificationRequest\n ) => Promise;\n postOrganizationRotateApiKey: (\n id: string,\n request: SecretVerificationRequest\n ) => Promise;\n postOrganizationSso: (\n id: string,\n request: OrganizationSsoRequest\n ) => Promise;\n postOrganizationUpgrade: (\n id: string,\n request: OrganizationUpgradeRequest\n ) => Promise;\n postOrganizationUpdateSubscription: (\n id: string,\n request: OrganizationSubscriptionUpdateRequest\n ) => Promise;\n postOrganizationSeat: (id: string, request: SeatRequest) => Promise;\n postOrganizationStorage: (id: string, request: StorageRequest) => Promise;\n postOrganizationPayment: (id: string, request: PaymentRequest) => Promise;\n postOrganizationVerifyBank: (id: string, request: VerifyBankRequest) => Promise;\n postOrganizationCancel: (id: string) => Promise;\n postOrganizationReinstate: (id: string) => Promise;\n deleteOrganization: (id: string, request: SecretVerificationRequest) => Promise;\n getPlans: () => Promise>;\n getTaxRates: () => Promise>;\n getOrganizationKeys: (id: string) => Promise;\n postOrganizationKeys: (\n id: string,\n request: OrganizationKeysRequest\n ) => Promise;\n\n postProviderSetup: (id: string, request: ProviderSetupRequest) => Promise;\n getProvider: (id: string) => Promise;\n putProvider: (id: string, request: ProviderUpdateRequest) => Promise;\n\n getProviderUsers: (providerId: string) => Promise>;\n getProviderUser: (providerId: string, id: string) => Promise;\n postProviderUserInvite: (providerId: string, request: ProviderUserInviteRequest) => Promise;\n postProviderUserReinvite: (providerId: string, id: string) => Promise;\n postManyProviderUserReinvite: (\n providerId: string,\n request: ProviderUserBulkRequest\n ) => Promise>;\n postProviderUserAccept: (\n providerId: string,\n id: string,\n request: ProviderUserAcceptRequest\n ) => Promise;\n postProviderUserConfirm: (\n providerId: string,\n id: string,\n request: ProviderUserConfirmRequest\n ) => Promise;\n postProviderUsersPublicKey: (\n providerId: string,\n request: ProviderUserBulkRequest\n ) => Promise>;\n postProviderUserBulkConfirm: (\n providerId: string,\n request: ProviderUserBulkConfirmRequest\n ) => Promise>;\n putProviderUser: (\n providerId: string,\n id: string,\n request: ProviderUserUpdateRequest\n ) => Promise;\n deleteProviderUser: (organizationId: string, id: string) => Promise;\n deleteManyProviderUsers: (\n providerId: string,\n request: ProviderUserBulkRequest\n ) => Promise>;\n getProviderClients: (\n providerId: string\n ) => Promise>;\n postProviderAddOrganization: (\n providerId: string,\n request: ProviderAddOrganizationRequest\n ) => Promise;\n postProviderCreateOrganization: (\n providerId: string,\n request: ProviderOrganizationCreateRequest\n ) => Promise;\n deleteProviderOrganization: (providerId: string, organizationId: string) => Promise;\n\n getEvents: (start: string, end: string, token: string) => Promise>;\n getEventsCipher: (\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsOrganization: (\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsOrganizationUser: (\n organizationId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsProvider: (\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsProviderUser: (\n providerId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n postEventsCollect: (request: EventRequest[]) => Promise;\n\n deleteSsoUser: (organizationId: string) => Promise;\n getSsoUserIdentifier: () => Promise;\n\n getUserPublicKey: (id: string) => Promise;\n\n getHibpBreach: (username: string) => Promise;\n\n postBitPayInvoice: (request: BitPayInvoiceRequest) => Promise;\n postSetupPayment: () => Promise;\n\n getActiveBearerToken: () => Promise;\n fetch: (request: Request) => Promise;\n nativeFetch: (request: Request) => Promise;\n\n preValidateSso: (identifier: string) => Promise;\n\n postCreateSponsorship: (\n sponsorshipOrgId: string,\n request: OrganizationSponsorshipCreateRequest\n ) => Promise;\n deleteRevokeSponsorship: (sponsoringOrganizationId: string) => Promise;\n deleteRemoveSponsorship: (sponsoringOrgId: string) => Promise;\n postPreValidateSponsorshipToken: (sponsorshipToken: string) => Promise;\n postRedeemSponsorship: (\n sponsorshipToken: string,\n request: OrganizationSponsorshipRedeemRequest\n ) => Promise;\n postResendSponsorshipOffer: (sponsoringOrgId: string) => Promise;\n\n getUserKeyFromKeyConnector: (keyConnectorUrl: string) => Promise;\n postUserKeyToKeyConnector: (\n keyConnectorUrl: string,\n request: KeyConnectorUserKeyRequest\n ) => Promise;\n getKeyConnectorAlive: (keyConnectorUrl: string) => Promise;\n}\n","export abstract class AppIdService {\n getAppId: () => Promise;\n getAnonymousAppId: () => Promise;\n}\n","import { BreachAccountResponse } from \"../models/response/breachAccountResponse\";\n\nexport abstract class AuditService {\n passwordLeaked: (password: string) => Promise;\n breachedAccounts: (username: string) => Promise;\n}\n","import { AuthResult } from \"../models/domain/authResult\";\nimport {\n ApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n} from \"../models/domain/logInCredentials\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { TokenRequestTwoFactor } from \"../models/request/identityToken/tokenRequestTwoFactor\";\n\nexport abstract class AuthService {\n masterPasswordHash: string;\n email: string;\n logIn: (\n credentials: ApiLogInCredentials | PasswordLogInCredentials | SsoLogInCredentials\n ) => Promise;\n logInTwoFactor: (\n twoFactor: TokenRequestTwoFactor,\n captchaResponse: string\n ) => Promise;\n logOut: (callback: () => void) => void;\n makePreloginKey: (masterPassword: string, email: string) => Promise;\n authingWithApiKey: () => boolean;\n authingWithSso: () => boolean;\n authingWithPassword: () => boolean;\n}\n","export abstract class BroadcasterService {\n send: (message: any, id?: string) => void;\n subscribe: (id: string, messageCallback: (message: any) => any) => void;\n unsubscribe: (id: string) => void;\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport { Field } from \"../models/domain/field\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { FieldView } from \"../models/view/fieldView\";\n\nexport abstract class CipherService {\n clearCache: (userId?: string) => Promise;\n encrypt: (\n model: CipherView,\n key?: SymmetricCryptoKey,\n originalCipher?: Cipher\n ) => Promise;\n encryptFields: (fieldsModel: FieldView[], key: SymmetricCryptoKey) => Promise;\n encryptField: (fieldModel: FieldView, key: SymmetricCryptoKey) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllDecryptedForGrouping: (groupingId: string, folder?: boolean) => Promise;\n getAllDecryptedForUrl: (\n url: string,\n includeOtherTypes?: CipherType[],\n defaultMatch?: UriMatchType\n ) => Promise;\n getAllFromApiForOrganization: (organizationId: string) => Promise;\n getLastUsedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise;\n getLastLaunchedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise;\n getNextCipherForUrl: (url: string) => Promise;\n updateLastUsedIndexForUrl: (url: string) => void;\n updateLastUsedDate: (id: string) => Promise;\n updateLastLaunchedDate: (id: string) => Promise;\n saveNeverDomain: (domain: string) => Promise;\n saveWithServer: (cipher: Cipher) => Promise;\n shareWithServer: (\n cipher: CipherView,\n organizationId: string,\n collectionIds: string[]\n ) => Promise;\n shareManyWithServer: (\n ciphers: CipherView[],\n organizationId: string,\n collectionIds: string[]\n ) => Promise;\n saveAttachmentWithServer: (\n cipher: Cipher,\n unencryptedFile: any,\n admin?: boolean\n ) => Promise;\n saveAttachmentRawWithServer: (\n cipher: Cipher,\n filename: string,\n data: ArrayBuffer,\n admin?: boolean\n ) => Promise;\n saveCollectionsWithServer: (cipher: Cipher) => Promise;\n upsert: (cipher: CipherData | CipherData[]) => Promise;\n replace: (ciphers: { [id: string]: CipherData }) => Promise;\n clear: (userId: string) => Promise;\n moveManyWithServer: (ids: string[], folderId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string) => Promise;\n deleteManyWithServer: (ids: string[]) => Promise;\n deleteAttachment: (id: string, attachmentId: string) => Promise;\n deleteAttachmentWithServer: (id: string, attachmentId: string) => Promise;\n sortCiphersByLastUsed: (a: any, b: any) => number;\n sortCiphersByLastUsedThenName: (a: any, b: any) => number;\n getLocaleSortingFunction: () => (a: CipherView, b: CipherView) => number;\n softDelete: (id: string | string[]) => Promise;\n softDeleteWithServer: (id: string) => Promise;\n softDeleteManyWithServer: (ids: string[]) => Promise;\n restore: (\n cipher: { id: string; revisionDate: string } | { id: string; revisionDate: string }[]\n ) => Promise;\n restoreWithServer: (id: string) => Promise;\n restoreManyWithServer: (ids: string[]) => Promise;\n}\n","import { CollectionData } from \"../models/data/collectionData\";\nimport { Collection } from \"../models/domain/collection\";\nimport { TreeNode } from \"../models/domain/treeNode\";\nimport { CollectionView } from \"../models/view/collectionView\";\n\nexport abstract class CollectionService {\n clearCache: (userId?: string) => Promise;\n encrypt: (model: CollectionView) => Promise;\n decryptMany: (collections: Collection[]) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllNested: (collections?: CollectionView[]) => Promise[]>;\n getNested: (id: string) => Promise>;\n upsert: (collection: CollectionData | CollectionData[]) => Promise;\n replace: (collections: { [id: string]: CollectionData }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n}\n","import { HashPurpose } from \"../enums/hashPurpose\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { KeySuffixOptions } from \"../enums/keySuffixOptions\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { ProfileOrganizationResponse } from \"../models/response/profileOrganizationResponse\";\nimport { ProfileProviderOrganizationResponse } from \"../models/response/profileProviderOrganizationResponse\";\nimport { ProfileProviderResponse } from \"../models/response/profileProviderResponse\";\n\nexport abstract class CryptoService {\n setKey: (key: SymmetricCryptoKey) => Promise;\n setKeyHash: (keyHash: string) => Promise;\n setEncKey: (encKey: string) => Promise;\n setEncPrivateKey: (encPrivateKey: string) => Promise;\n setOrgKeys: (\n orgs: ProfileOrganizationResponse[],\n providerOrgs: ProfileProviderOrganizationResponse[]\n ) => Promise;\n setProviderKeys: (orgs: ProfileProviderResponse[]) => Promise;\n getKey: (keySuffix?: KeySuffixOptions, userId?: string) => Promise;\n getKeyFromStorage: (keySuffix: KeySuffixOptions, userId?: string) => Promise;\n getKeyHash: () => Promise;\n compareAndUpdateKeyHash: (masterPassword: string, key: SymmetricCryptoKey) => Promise;\n getEncKey: (key?: SymmetricCryptoKey) => Promise;\n getPublicKey: () => Promise;\n getPrivateKey: () => Promise;\n getFingerprint: (userId: string, publicKey?: ArrayBuffer) => Promise;\n getOrgKeys: () => Promise>;\n getOrgKey: (orgId: string) => Promise;\n getProviderKey: (providerId: string) => Promise;\n hasKey: () => Promise;\n hasKeyInMemory: (userId?: string) => Promise;\n hasKeyStored: (keySuffix?: KeySuffixOptions, userId?: string) => Promise;\n hasEncKey: () => Promise;\n clearKey: (clearSecretStorage?: boolean, userId?: string) => Promise;\n clearKeyHash: () => Promise;\n clearEncKey: (memoryOnly?: boolean, userId?: string) => Promise;\n clearKeyPair: (memoryOnly?: boolean, userId?: string) => Promise;\n clearOrgKeys: (memoryOnly?: boolean, userId?: string) => Promise;\n clearProviderKeys: (memoryOnly?: boolean) => Promise;\n clearPinProtectedKey: () => Promise;\n clearKeys: (userId?: string) => Promise;\n toggleKey: () => Promise;\n makeKey: (\n password: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number\n ) => Promise;\n makeKeyFromPin: (\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number,\n protectedKeyCs?: EncString\n ) => Promise;\n makeShareKey: () => Promise<[EncString, SymmetricCryptoKey]>;\n makeKeyPair: (key?: SymmetricCryptoKey) => Promise<[string, EncString]>;\n makePinKey: (\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number\n ) => Promise;\n makeSendKey: (keyMaterial: ArrayBuffer) => Promise;\n hashPassword: (\n password: string,\n key: SymmetricCryptoKey,\n hashPurpose?: HashPurpose\n ) => Promise;\n makeEncKey: (key: SymmetricCryptoKey) => Promise<[SymmetricCryptoKey, EncString]>;\n remakeEncKey: (\n key: SymmetricCryptoKey,\n encKey?: SymmetricCryptoKey\n ) => Promise<[SymmetricCryptoKey, EncString]>;\n encrypt: (plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey) => Promise;\n encryptToBytes: (plainValue: ArrayBuffer, key?: SymmetricCryptoKey) => Promise;\n rsaEncrypt: (data: ArrayBuffer, publicKey?: ArrayBuffer) => Promise;\n rsaDecrypt: (encValue: string, privateKeyValue?: ArrayBuffer) => Promise;\n decryptToBytes: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n decryptToUtf8: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n decryptFromBytes: (encBuf: ArrayBuffer, key: SymmetricCryptoKey) => Promise;\n randomNumber: (min: number, max: number) => Promise;\n validateKey: (key: SymmetricCryptoKey) => Promise;\n}\n","import { DecryptParameters } from \"../models/domain/decryptParameters\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\n\nexport abstract class CryptoFunctionService {\n pbkdf2: (\n password: string | ArrayBuffer,\n salt: string | ArrayBuffer,\n algorithm: \"sha256\" | \"sha512\",\n iterations: number\n ) => Promise;\n hkdf: (\n ikm: ArrayBuffer,\n salt: string | ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hkdfExpand: (\n prk: ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hash: (\n value: string | ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"\n ) => Promise;\n hmac: (\n value: ArrayBuffer,\n key: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compare: (a: ArrayBuffer, b: ArrayBuffer) => Promise;\n hmacFast: (\n value: ArrayBuffer | string,\n key: ArrayBuffer | string,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compareFast: (a: ArrayBuffer | string, b: ArrayBuffer | string) => Promise;\n aesEncrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n aesDecryptFastParameters: (\n data: string,\n iv: string,\n mac: string,\n key: SymmetricCryptoKey\n ) => DecryptParameters;\n aesDecryptFast: (parameters: DecryptParameters) => Promise;\n aesDecrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n rsaEncrypt: (\n data: ArrayBuffer,\n publicKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaDecrypt: (\n data: ArrayBuffer,\n privateKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaExtractPublicKey: (privateKey: ArrayBuffer) => Promise;\n rsaGenerateKeyPair: (length: 1024 | 2048 | 4096) => Promise<[ArrayBuffer, ArrayBuffer]>;\n randomBytes: (length: number) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nexport type Urls = {\n base?: string;\n webVault?: string;\n api?: string;\n identity?: string;\n icons?: string;\n notifications?: string;\n events?: string;\n keyConnector?: string;\n};\n\nexport type PayPalConfig = {\n businessId?: string;\n buttonAction?: string;\n};\n\nexport abstract class EnvironmentService {\n urls: Observable;\n\n hasBaseUrl: () => boolean;\n getNotificationsUrl: () => string;\n getWebVaultUrl: () => string;\n getSendUrl: () => string;\n getIconsUrl: () => string;\n getApiUrl: () => string;\n getIdentityUrl: () => string;\n getEventsUrl: () => string;\n getKeyConnectorUrl: () => string;\n setUrlsFromStorage: () => Promise;\n setUrls: (urls: Urls) => Promise;\n getUrls: () => Urls;\n}\n","import { EventType } from \"../enums/eventType\";\n\nexport abstract class EventService {\n collect: (eventType: EventType, cipherId?: string, uploadImmediately?: boolean) => Promise;\n uploadEvents: (userId?: string) => Promise;\n clearEvents: (userId?: string) => Promise;\n}\n","import { EventView } from \"../models/view/eventView\";\n\nexport type ExportFormat = \"csv\" | \"json\" | \"encrypted_json\";\n\nexport abstract class ExportService {\n getExport: (format?: ExportFormat, organizationId?: string) => Promise;\n getPasswordProtectedExport: (password: string, organizationId?: string) => Promise;\n getOrganizationExport: (organizationId: string, format?: ExportFormat) => Promise;\n getEventExport: (events: EventView[]) => Promise;\n getFileName: (prefix?: string, extension?: string) => string;\n}\n","import { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachmentUploadDataResponse\";\nimport { SendFileUploadDataResponse } from \"../models/response/sendFileUploadDataResponse\";\n\nexport abstract class FileUploadService {\n uploadSendFile: (\n uploadData: SendFileUploadDataResponse,\n fileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) => Promise;\n uploadCipherAttachment: (\n admin: boolean,\n uploadData: AttachmentUploadDataResponse,\n fileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) => Promise;\n}\n","import { FolderData } from \"../models/data/folderData\";\nimport { Folder } from \"../models/domain/folder\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { TreeNode } from \"../models/domain/treeNode\";\nimport { FolderView } from \"../models/view/folderView\";\n\nexport abstract class FolderService {\n clearCache: (userId?: string) => Promise;\n encrypt: (model: FolderView, key?: SymmetricCryptoKey) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllNested: () => Promise[]>;\n getNested: (id: string) => Promise>;\n saveWithServer: (folder: Folder) => Promise;\n upsert: (folder: FolderData | FolderData[]) => Promise;\n replace: (folders: { [id: string]: FolderData }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string) => Promise;\n}\n","export abstract class I18nService {\n locale: string;\n supportedTranslationLocales: string[];\n translationLocale: string;\n collator: Intl.Collator;\n localeNames: Map;\n t: (id: string, p1?: string, p2?: string, p3?: string) => string;\n translate: (id: string, p1?: string, p2?: string, p3?: string) => string;\n}\n","import { ImportOption, ImportType } from \"../enums/importOptions\";\nimport { ImportError } from \"../importers/importError\";\nimport { Importer } from \"../importers/importer\";\n\nexport abstract class ImportService {\n featuredImportOptions: readonly ImportOption[];\n regularImportOptions: readonly ImportOption[];\n getImportOptions: () => ImportOption[];\n import: (\n importer: Importer,\n fileContents: string,\n organizationId?: string\n ) => Promise;\n getImporter: (\n format: ImportType | \"bitwardenpasswordprotected\",\n organizationId: string,\n password?: string\n ) => Importer;\n}\n","import { Organization } from \"../models/domain/organization\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\n\nexport abstract class KeyConnectorService {\n getAndSetKey: (url?: string) => Promise;\n getManagingOrganization: () => Promise;\n getUsesKeyConnector: () => Promise;\n migrateUser: () => Promise;\n userNeedsMigration: () => Promise;\n convertNewSsoUserToKeyConnector: (\n tokenResponse: IdentityTokenResponse,\n orgId: string\n ) => Promise;\n setUsesKeyConnector: (enabled: boolean) => Promise;\n setConvertAccountRequired: (status: boolean) => Promise;\n getConvertAccountRequired: () => Promise;\n removeConvertAccountRequired: () => Promise;\n clear: () => Promise;\n}\n","import { LogLevelType } from \"../enums/logLevelType\";\n\nexport abstract class LogService {\n debug: (message: string) => void;\n info: (message: string) => void;\n warning: (message: string) => void;\n error: (message: string) => void;\n write: (level: LogLevelType, message: string) => void;\n time: (label: string) => void;\n timeEnd: (label: string) => [number, number];\n}\n","export abstract class MessagingService {\n send: (subscriber: string, arg?: any) => void;\n}\n","export abstract class NotificationsService {\n init: () => Promise;\n updateConnection: (sync?: boolean) => Promise;\n reconnectFromActivity: () => Promise;\n disconnectFromInactivity: () => Promise;\n}\n","import { OrganizationData } from \"../models/data/organizationData\";\nimport { Organization } from \"../models/domain/organization\";\n\nexport abstract class OrganizationService {\n get: (id: string) => Promise;\n getByIdentifier: (identifier: string) => Promise;\n getAll: (userId?: string) => Promise;\n save: (orgs: { [id: string]: OrganizationData }) => Promise;\n canManageSponsorships: () => Promise;\n hasOrganizations: (userId?: string) => Promise;\n}\n","import * as zxcvbn from \"zxcvbn\";\n\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { PasswordGeneratorPolicyOptions } from \"../models/domain/passwordGeneratorPolicyOptions\";\n\nexport abstract class PasswordGenerationService {\n generatePassword: (options: any) => Promise;\n generatePassphrase: (options: any) => Promise;\n getOptions: () => Promise<[any, PasswordGeneratorPolicyOptions]>;\n enforcePasswordGeneratorPoliciesOnOptions: (\n options: any\n ) => Promise<[any, PasswordGeneratorPolicyOptions]>;\n getPasswordGeneratorPolicyOptions: () => Promise;\n saveOptions: (options: any) => Promise;\n getHistory: () => Promise;\n addHistory: (password: string) => Promise;\n clear: (userId?: string) => Promise;\n passwordStrength: (password: string, userInputs?: string[]) => zxcvbn.ZXCVBNResult;\n normalizeOptions: (options: any, enforcedPolicyOptions: PasswordGeneratorPolicyOptions) => void;\n}\n","export abstract class PasswordRepromptService {\n protectedFields: () => string[];\n showPasswordPrompt: () => Promise;\n enabled: () => Promise;\n}\n","import { ClientType } from \"../enums/clientType\";\nimport { DeviceType } from \"../enums/deviceType\";\nimport { ThemeType } from \"../enums/themeType\";\n\ninterface ToastOptions {\n timeout?: number;\n}\n\nexport abstract class PlatformUtilsService {\n getDevice: () => DeviceType;\n getDeviceString: () => string;\n getClientType: () => ClientType;\n isFirefox: () => boolean;\n isChrome: () => boolean;\n isEdge: () => boolean;\n isOpera: () => boolean;\n isVivaldi: () => boolean;\n isSafari: () => boolean;\n isMacAppStore: () => boolean;\n isViewOpen: () => Promise;\n launchUri: (uri: string, options?: any) => void;\n saveFile: (win: Window, blobData: any, blobOptions: any, fileName: string) => void;\n getApplicationVersion: () => Promise;\n supportsWebAuthn: (win: Window) => boolean;\n supportsDuo: () => boolean;\n showToast: (\n type: \"error\" | \"success\" | \"warning\" | \"info\",\n title: string,\n text: string | string[],\n options?: ToastOptions\n ) => void;\n showDialog: (\n body: string,\n title?: string,\n confirmText?: string,\n cancelText?: string,\n type?: string,\n bodyIsHtml?: boolean\n ) => Promise;\n isDev: () => boolean;\n isSelfHost: () => boolean;\n copyToClipboard: (text: string, options?: any) => void | boolean;\n readFromClipboard: (options?: any) => Promise;\n supportsBiometric: () => Promise;\n authenticateBiometric: () => Promise;\n getDefaultSystemTheme: () => Promise;\n onDefaultSystemThemeChange: (\n callback: (theme: ThemeType.Light | ThemeType.Dark) => unknown\n ) => unknown;\n getEffectiveTheme: () => Promise;\n supportsSecureStorage: () => boolean;\n}\n","import { PolicyType } from \"../enums/policyType\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { MasterPasswordPolicyOptions } from \"../models/domain/masterPasswordPolicyOptions\";\nimport { Policy } from \"../models/domain/policy\";\nimport { ResetPasswordPolicyOptions } from \"../models/domain/resetPasswordPolicyOptions\";\nimport { ListResponse } from \"../models/response/listResponse\";\nimport { PolicyResponse } from \"../models/response/policyResponse\";\n\nexport abstract class PolicyService {\n clearCache: () => void;\n getAll: (type?: PolicyType, userId?: string) => Promise;\n getPolicyForOrganization: (policyType: PolicyType, organizationId: string) => Promise;\n replace: (policies: { [id: string]: PolicyData }) => Promise;\n clear: (userId?: string) => Promise;\n getMasterPasswordPoliciesForInvitedUsers: (orgId: string) => Promise;\n getMasterPasswordPolicyOptions: (policies?: Policy[]) => Promise;\n evaluateMasterPassword: (\n passwordStrength: number,\n newPassword: string,\n enforcedPolicyOptions?: MasterPasswordPolicyOptions\n ) => boolean;\n getResetPasswordPolicyOptions: (\n policies: Policy[],\n orgId: string\n ) => [ResetPasswordPolicyOptions, boolean];\n mapPoliciesFromToken: (policiesResponse: ListResponse) => Policy[];\n policyAppliesToUser: (\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean,\n userId?: string\n ) => Promise;\n}\n","import { ProviderData } from \"../models/data/providerData\";\nimport { Provider } from \"../models/domain/provider\";\n\nexport abstract class ProviderService {\n get: (id: string) => Promise;\n getAll: () => Promise;\n save: (providers: { [id: string]: ProviderData }) => Promise;\n}\n","import { CipherView } from \"../models/view/cipherView\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport abstract class SearchService {\n indexedEntityId?: string = null;\n clearIndex: () => void;\n isSearchable: (query: string) => boolean;\n indexCiphers: (indexedEntityGuid?: string, ciphersToIndex?: CipherView[]) => Promise;\n searchCiphers: (\n query: string,\n filter?: ((cipher: CipherView) => boolean) | ((cipher: CipherView) => boolean)[],\n ciphers?: CipherView[]\n ) => Promise;\n searchCiphersBasic: (ciphers: CipherView[], query: string, deleted?: boolean) => CipherView[];\n searchSends: (sends: SendView[], query: string) => SendView[];\n}\n","import { SendData } from \"../models/data/sendData\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { Send } from \"../models/domain/send\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport abstract class SendService {\n clearCache: () => Promise;\n encrypt: (\n model: SendView,\n file: File | ArrayBuffer,\n password: string,\n key?: SymmetricCryptoKey\n ) => Promise<[Send, EncArrayBuffer]>;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n saveWithServer: (sendData: [Send, EncArrayBuffer]) => Promise;\n upsert: (send: SendData | SendData[]) => Promise;\n replace: (sends: { [id: string]: SendData }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string) => Promise;\n removePasswordWithServer: (id: string) => Promise;\n}\n","export abstract class SettingsService {\n clearCache: () => Promise;\n getEquivalentDomains: () => Promise;\n setEquivalentDomains: (equivalentDomains: string[][]) => Promise;\n clear: (userId?: string) => Promise;\n}\n","import { BehaviorSubject } from \"rxjs\";\n\nimport { KdfType } from \"../enums/kdfType\";\nimport { ThemeType } from \"../enums/themeType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { EventData } from \"../models/data/eventData\";\nimport { FolderData } from \"../models/data/folderData\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { SendData } from \"../models/data/sendData\";\nimport { Account } from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/encString\";\nimport { EnvironmentUrls } from \"../models/domain/environmentUrls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { Policy } from \"../models/domain/policy\";\nimport { StorageOptions } from \"../models/domain/storageOptions\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { WindowState } from \"../models/domain/windowState\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { CollectionView } from \"../models/view/collectionView\";\nimport { FolderView } from \"../models/view/folderView\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport abstract class StateService {\n accounts: BehaviorSubject<{ [userId: string]: T }>;\n activeAccount: BehaviorSubject;\n\n addAccount: (account: T) => Promise;\n setActiveUser: (userId: string) => Promise;\n clean: (options?: StorageOptions) => Promise;\n init: () => Promise;\n\n getAccessToken: (options?: StorageOptions) => Promise;\n setAccessToken: (value: string, options?: StorageOptions) => Promise;\n getAddEditCipherInfo: (options?: StorageOptions) => Promise;\n setAddEditCipherInfo: (value: any, options?: StorageOptions) => Promise;\n getAlwaysShowDock: (options?: StorageOptions) => Promise;\n setAlwaysShowDock: (value: boolean, options?: StorageOptions) => Promise;\n getApiKeyClientId: (options?: StorageOptions) => Promise;\n setApiKeyClientId: (value: string, options?: StorageOptions) => Promise;\n getApiKeyClientSecret: (options?: StorageOptions) => Promise;\n setApiKeyClientSecret: (value: string, options?: StorageOptions) => Promise;\n getAutoConfirmFingerPrints: (options?: StorageOptions) => Promise;\n setAutoConfirmFingerprints: (value: boolean, options?: StorageOptions) => Promise;\n getAutoFillOnPageLoadDefault: (options?: StorageOptions) => Promise;\n setAutoFillOnPageLoadDefault: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricAwaitingAcceptance: (options?: StorageOptions) => Promise;\n setBiometricAwaitingAcceptance: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricFingerprintValidated: (options?: StorageOptions) => Promise;\n setBiometricFingerprintValidated: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricLocked: (options?: StorageOptions) => Promise;\n setBiometricLocked: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricText: (options?: StorageOptions) => Promise;\n setBiometricText: (value: string, options?: StorageOptions) => Promise;\n getBiometricUnlock: (options?: StorageOptions) => Promise;\n setBiometricUnlock: (value: boolean, options?: StorageOptions) => Promise;\n getCanAccessPremium: (options?: StorageOptions) => Promise;\n getClearClipboard: (options?: StorageOptions) => Promise;\n setClearClipboard: (value: number, options?: StorageOptions) => Promise;\n getCollapsedGroupings: (options?: StorageOptions) => Promise;\n setCollapsedGroupings: (value: string[], options?: StorageOptions) => Promise;\n getConvertAccountToKeyConnector: (options?: StorageOptions) => Promise;\n setConvertAccountToKeyConnector: (value: boolean, options?: StorageOptions) => Promise;\n getCryptoMasterKey: (options?: StorageOptions) => Promise;\n setCryptoMasterKey: (value: SymmetricCryptoKey, options?: StorageOptions) => Promise;\n getCryptoMasterKeyAuto: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyAuto: (value: string, options?: StorageOptions) => Promise;\n getCryptoMasterKeyB64: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyB64: (value: string, options?: StorageOptions) => Promise;\n getCryptoMasterKeyBiometric: (options?: StorageOptions) => Promise;\n hasCryptoMasterKeyBiometric: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyBiometric: (value: string, options?: StorageOptions) => Promise;\n getDecodedToken: (options?: StorageOptions) => Promise;\n setDecodedToken: (value: any, options?: StorageOptions) => Promise;\n getDecryptedCiphers: (options?: StorageOptions) => Promise;\n setDecryptedCiphers: (value: CipherView[], options?: StorageOptions) => Promise;\n getDecryptedCollections: (options?: StorageOptions) => Promise;\n setDecryptedCollections: (value: CollectionView[], options?: StorageOptions) => Promise;\n getDecryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise;\n setDecryptedCryptoSymmetricKey: (\n value: SymmetricCryptoKey,\n options?: StorageOptions\n ) => Promise;\n getDecryptedFolders: (options?: StorageOptions) => Promise;\n setDecryptedFolders: (value: FolderView[], options?: StorageOptions) => Promise;\n getDecryptedOrganizationKeys: (\n options?: StorageOptions\n ) => Promise>;\n setDecryptedOrganizationKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n getDecryptedPasswordGenerationHistory: (\n options?: StorageOptions\n ) => Promise;\n setDecryptedPasswordGenerationHistory: (\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ) => Promise;\n getDecryptedPinProtected: (options?: StorageOptions) => Promise;\n setDecryptedPinProtected: (value: EncString, options?: StorageOptions) => Promise;\n getDecryptedPolicies: (options?: StorageOptions) => Promise;\n setDecryptedPolicies: (value: Policy[], options?: StorageOptions) => Promise;\n getDecryptedPrivateKey: (options?: StorageOptions) => Promise;\n setDecryptedPrivateKey: (value: ArrayBuffer, options?: StorageOptions) => Promise;\n getDecryptedProviderKeys: (options?: StorageOptions) => Promise>;\n setDecryptedProviderKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n getDecryptedSends: (options?: StorageOptions) => Promise;\n setDecryptedSends: (value: SendView[], options?: StorageOptions) => Promise;\n getDefaultUriMatch: (options?: StorageOptions) => Promise;\n setDefaultUriMatch: (value: UriMatchType, options?: StorageOptions) => Promise;\n getDisableAddLoginNotification: (options?: StorageOptions) => Promise;\n setDisableAddLoginNotification: (value: boolean, options?: StorageOptions) => Promise;\n getDisableAutoBiometricsPrompt: (options?: StorageOptions) => Promise;\n setDisableAutoBiometricsPrompt: (value: boolean, options?: StorageOptions) => Promise;\n getDisableAutoTotpCopy: (options?: StorageOptions) => Promise;\n setDisableAutoTotpCopy: (value: boolean, options?: StorageOptions) => Promise;\n getDisableBadgeCounter: (options?: StorageOptions) => Promise;\n setDisableBadgeCounter: (value: boolean, options?: StorageOptions) => Promise;\n getDisableChangedPasswordNotification: (options?: StorageOptions) => Promise;\n setDisableChangedPasswordNotification: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getDisableContextMenuItem: (options?: StorageOptions) => Promise;\n setDisableContextMenuItem: (value: boolean, options?: StorageOptions) => Promise;\n getDisableFavicon: (options?: StorageOptions) => Promise;\n setDisableFavicon: (value: boolean, options?: StorageOptions) => Promise;\n getDisableGa: (options?: StorageOptions) => Promise;\n setDisableGa: (value: boolean, options?: StorageOptions) => Promise;\n getDontShowCardsCurrentTab: (options?: StorageOptions) => Promise;\n setDontShowCardsCurrentTab: (value: boolean, options?: StorageOptions) => Promise;\n getDontShowIdentitiesCurrentTab: (options?: StorageOptions) => Promise;\n setDontShowIdentitiesCurrentTab: (value: boolean, options?: StorageOptions) => Promise;\n getEmail: (options?: StorageOptions) => Promise;\n setEmail: (value: string, options?: StorageOptions) => Promise;\n getEmailVerified: (options?: StorageOptions) => Promise;\n setEmailVerified: (value: boolean, options?: StorageOptions) => Promise;\n getEnableAlwaysOnTop: (options?: StorageOptions) => Promise;\n setEnableAlwaysOnTop: (value: boolean, options?: StorageOptions) => Promise;\n getEnableAutoFillOnPageLoad: (options?: StorageOptions) => Promise;\n setEnableAutoFillOnPageLoad: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBiometric: (options?: StorageOptions) => Promise;\n setEnableBiometric: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBrowserIntegration: (options?: StorageOptions) => Promise;\n setEnableBrowserIntegration: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBrowserIntegrationFingerprint: (options?: StorageOptions) => Promise;\n setEnableBrowserIntegrationFingerprint: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getEnableCloseToTray: (options?: StorageOptions) => Promise;\n setEnableCloseToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableFullWidth: (options?: StorageOptions) => Promise;\n setEnableFullWidth: (value: boolean, options?: StorageOptions) => Promise;\n getEnableGravitars: (options?: StorageOptions) => Promise;\n setEnableGravitars: (value: boolean, options?: StorageOptions) => Promise;\n getEnableMinimizeToTray: (options?: StorageOptions) => Promise;\n setEnableMinimizeToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableStartToTray: (options?: StorageOptions) => Promise;\n setEnableStartToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableTray: (options?: StorageOptions) => Promise;\n setEnableTray: (value: boolean, options?: StorageOptions) => Promise;\n getEncryptedCiphers: (options?: StorageOptions) => Promise<{ [id: string]: CipherData }>;\n setEncryptedCiphers: (\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedCollections: (options?: StorageOptions) => Promise<{ [id: string]: CollectionData }>;\n setEncryptedCollections: (\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise;\n setEncryptedCryptoSymmetricKey: (value: string, options?: StorageOptions) => Promise;\n getEncryptedFolders: (options?: StorageOptions) => Promise<{ [id: string]: FolderData }>;\n setEncryptedFolders: (\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedOrganizationKeys: (options?: StorageOptions) => Promise;\n setEncryptedOrganizationKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n getEncryptedPasswordGenerationHistory: (\n options?: StorageOptions\n ) => Promise;\n setEncryptedPasswordGenerationHistory: (\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ) => Promise;\n getEncryptedPinProtected: (options?: StorageOptions) => Promise;\n setEncryptedPinProtected: (value: string, options?: StorageOptions) => Promise;\n getEncryptedPolicies: (options?: StorageOptions) => Promise<{ [id: string]: PolicyData }>;\n setEncryptedPolicies: (\n value: { [id: string]: PolicyData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedPrivateKey: (options?: StorageOptions) => Promise;\n setEncryptedPrivateKey: (value: string, options?: StorageOptions) => Promise;\n getEncryptedProviderKeys: (options?: StorageOptions) => Promise;\n setEncryptedProviderKeys: (value: any, options?: StorageOptions) => Promise;\n getEncryptedSends: (options?: StorageOptions) => Promise<{ [id: string]: SendData }>;\n setEncryptedSends: (value: { [id: string]: SendData }, options?: StorageOptions) => Promise;\n getEntityId: (options?: StorageOptions) => Promise;\n setEntityId: (value: string, options?: StorageOptions) => Promise;\n getEntityType: (options?: StorageOptions) => Promise;\n setEntityType: (value: string, options?: StorageOptions) => Promise;\n getEnvironmentUrls: (options?: StorageOptions) => Promise;\n setEnvironmentUrls: (value: EnvironmentUrls, options?: StorageOptions) => Promise;\n getEquivalentDomains: (options?: StorageOptions) => Promise;\n setEquivalentDomains: (value: string, options?: StorageOptions) => Promise;\n getEventCollection: (options?: StorageOptions) => Promise;\n setEventCollection: (value: EventData[], options?: StorageOptions) => Promise;\n getEverBeenUnlocked: (options?: StorageOptions) => Promise;\n setEverBeenUnlocked: (value: boolean, options?: StorageOptions) => Promise;\n getForcePasswordReset: (options?: StorageOptions) => Promise;\n setForcePasswordReset: (value: boolean, options?: StorageOptions) => Promise;\n getInstalledVersion: (options?: StorageOptions) => Promise;\n setInstalledVersion: (value: string, options?: StorageOptions) => Promise;\n getIsAuthenticated: (options?: StorageOptions) => Promise;\n getKdfIterations: (options?: StorageOptions) => Promise;\n setKdfIterations: (value: number, options?: StorageOptions) => Promise;\n getKdfType: (options?: StorageOptions) => Promise;\n setKdfType: (value: KdfType, options?: StorageOptions) => Promise;\n getKeyHash: (options?: StorageOptions) => Promise;\n setKeyHash: (value: string, options?: StorageOptions) => Promise;\n getLastActive: (options?: StorageOptions) => Promise;\n setLastActive: (value: number, options?: StorageOptions) => Promise;\n getLastSync: (options?: StorageOptions) => Promise;\n setLastSync: (value: string, options?: StorageOptions) => Promise;\n getLegacyEtmKey: (options?: StorageOptions) => Promise;\n setLegacyEtmKey: (value: SymmetricCryptoKey, options?: StorageOptions) => Promise;\n getLocalData: (options?: StorageOptions) => Promise;\n setLocalData: (value: string, options?: StorageOptions) => Promise;\n getLocale: (options?: StorageOptions) => Promise;\n setLocale: (value: string, options?: StorageOptions) => Promise;\n getLoginRedirect: (options?: StorageOptions) => Promise;\n setLoginRedirect: (value: any, options?: StorageOptions) => Promise;\n getMainWindowSize: (options?: StorageOptions) => Promise;\n setMainWindowSize: (value: number, options?: StorageOptions) => Promise;\n getMinimizeOnCopyToClipboard: (options?: StorageOptions) => Promise;\n setMinimizeOnCopyToClipboard: (value: boolean, options?: StorageOptions) => Promise;\n getNeverDomains: (options?: StorageOptions) => Promise<{ [id: string]: any }>;\n setNeverDomains: (value: { [id: string]: any }, options?: StorageOptions) => Promise;\n getNoAutoPromptBiometrics: (options?: StorageOptions) => Promise;\n setNoAutoPromptBiometrics: (value: boolean, options?: StorageOptions) => Promise;\n getNoAutoPromptBiometricsText: (options?: StorageOptions) => Promise;\n setNoAutoPromptBiometricsText: (value: string, options?: StorageOptions) => Promise;\n getOpenAtLogin: (options?: StorageOptions) => Promise;\n setOpenAtLogin: (value: boolean, options?: StorageOptions) => Promise;\n getOrganizationInvitation: (options?: StorageOptions) => Promise;\n setOrganizationInvitation: (value: any, options?: StorageOptions) => Promise;\n getOrganizations: (options?: StorageOptions) => Promise<{ [id: string]: OrganizationData }>;\n setOrganizations: (\n value: { [id: string]: OrganizationData },\n options?: StorageOptions\n ) => Promise;\n getPasswordGenerationOptions: (options?: StorageOptions) => Promise;\n setPasswordGenerationOptions: (value: any, options?: StorageOptions) => Promise;\n getUsernameGenerationOptions: (options?: StorageOptions) => Promise;\n setUsernameGenerationOptions: (value: any, options?: StorageOptions) => Promise;\n getGeneratorOptions: (options?: StorageOptions) => Promise;\n setGeneratorOptions: (value: any, options?: StorageOptions) => Promise;\n getProtectedPin: (options?: StorageOptions) => Promise;\n setProtectedPin: (value: string, options?: StorageOptions) => Promise;\n getProviders: (options?: StorageOptions) => Promise<{ [id: string]: ProviderData }>;\n setProviders: (value: { [id: string]: ProviderData }, options?: StorageOptions) => Promise;\n getPublicKey: (options?: StorageOptions) => Promise;\n setPublicKey: (value: ArrayBuffer, options?: StorageOptions) => Promise;\n getRefreshToken: (options?: StorageOptions) => Promise;\n setRefreshToken: (value: string, options?: StorageOptions) => Promise;\n getRememberedEmail: (options?: StorageOptions) => Promise;\n setRememberedEmail: (value: string, options?: StorageOptions) => Promise;\n getSecurityStamp: (options?: StorageOptions) => Promise;\n setSecurityStamp: (value: string, options?: StorageOptions) => Promise;\n getSettings: (options?: StorageOptions) => Promise;\n setSettings: (value: string, options?: StorageOptions) => Promise;\n getSsoCodeVerifier: (options?: StorageOptions) => Promise;\n setSsoCodeVerifier: (value: string, options?: StorageOptions) => Promise;\n getSsoOrgIdentifier: (options?: StorageOptions) => Promise;\n setSsoOrganizationIdentifier: (value: string, options?: StorageOptions) => Promise;\n getSsoState: (options?: StorageOptions) => Promise;\n setSsoState: (value: string, options?: StorageOptions) => Promise;\n getTheme: (options?: StorageOptions) => Promise;\n setTheme: (value: ThemeType, options?: StorageOptions) => Promise;\n getTwoFactorToken: (options?: StorageOptions) => Promise;\n setTwoFactorToken: (value: string, options?: StorageOptions) => Promise;\n getUserId: (options?: StorageOptions) => Promise;\n getUsesKeyConnector: (options?: StorageOptions) => Promise;\n setUsesKeyConnector: (vaule: boolean, options?: StorageOptions) => Promise;\n getVaultTimeout: (options?: StorageOptions) => Promise;\n setVaultTimeout: (value: number, options?: StorageOptions) => Promise;\n getVaultTimeoutAction: (options?: StorageOptions) => Promise;\n setVaultTimeoutAction: (value: string, options?: StorageOptions) => Promise;\n getStateVersion: () => Promise;\n setStateVersion: (value: number) => Promise;\n getWindow: () => Promise;\n setWindow: (value: WindowState) => Promise;\n}\n","export abstract class StateMigrationService {\n needsMigration: () => Promise;\n migrate: () => Promise;\n}\n","import { StorageOptions } from \"../models/domain/storageOptions\";\n\nexport abstract class StorageService {\n get: (key: string, options?: StorageOptions) => Promise;\n has: (key: string, options?: StorageOptions) => Promise;\n save: (key: string, obj: any, options?: StorageOptions) => Promise;\n remove: (key: string, options?: StorageOptions) => Promise;\n}\n","import {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../models/response/notificationResponse\";\n\nexport abstract class SyncService {\n syncInProgress: boolean;\n\n getLastSync: () => Promise;\n setLastSync: (date: Date, userId?: string) => Promise;\n fullSync: (forceSync: boolean, allowThrowOnError?: boolean) => Promise;\n syncUpsertFolder: (notification: SyncFolderNotification, isEdit: boolean) => Promise;\n syncDeleteFolder: (notification: SyncFolderNotification) => Promise;\n syncUpsertCipher: (notification: SyncCipherNotification, isEdit: boolean) => Promise;\n syncDeleteCipher: (notification: SyncFolderNotification) => Promise;\n syncUpsertSend: (notification: SyncSendNotification, isEdit: boolean) => Promise;\n syncDeleteSend: (notification: SyncSendNotification) => Promise;\n}\n","import { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\n\nexport abstract class TokenService {\n setTokens: (\n accessToken: string,\n refreshToken: string,\n clientIdClientSecret: [string, string]\n ) => Promise;\n setToken: (token: string) => Promise;\n getToken: () => Promise;\n setRefreshToken: (refreshToken: string) => Promise;\n getRefreshToken: () => Promise;\n setClientId: (clientId: string) => Promise;\n getClientId: () => Promise;\n setClientSecret: (clientSecret: string) => Promise;\n getClientSecret: () => Promise;\n setTwoFactorToken: (tokenResponse: IdentityTokenResponse) => Promise;\n getTwoFactorToken: () => Promise;\n clearTwoFactorToken: () => Promise;\n clearToken: (userId?: string) => Promise;\n decodeToken: (token?: string) => any;\n getTokenExpirationDate: () => Promise;\n tokenSecondsRemaining: (offsetSeconds?: number) => Promise;\n tokenNeedsRefresh: (minutes?: number) => Promise;\n getUserId: () => Promise;\n getEmail: () => Promise;\n getEmailVerified: () => Promise;\n getName: () => Promise;\n getPremium: () => Promise;\n getIssuer: () => Promise;\n getIsExternal: () => Promise;\n}\n","export abstract class TotpService {\n getCode: (key: string) => Promise;\n getTimeInterval: (key: string) => number;\n isAutoCopyEnabled: () => Promise;\n}\n","import { TwoFactorProviderType } from \"../enums/twoFactorProviderType\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identityTwoFactorResponse\";\n\nexport interface TwoFactorProviderDetails {\n type: TwoFactorProviderType;\n name: string;\n description: string;\n priority: number;\n sort: number;\n premium: boolean;\n}\n\nexport abstract class TwoFactorService {\n init: () => void;\n getSupportedProviders: (win: Window) => TwoFactorProviderDetails[];\n getDefaultProvider: (webAuthnSupported: boolean) => TwoFactorProviderType;\n setSelectedProvider: (type: TwoFactorProviderType) => void;\n clearSelectedProvider: () => void;\n\n setProviders: (response: IdentityTwoFactorResponse) => void;\n clearProviders: () => void;\n getProviders: () => Map;\n}\n","import { SecretVerificationRequest } from \"../models/request/secretVerificationRequest\";\nimport { Verification } from \"../types/verification\";\n\nexport abstract class UserVerificationService {\n buildRequest: (\n verification: Verification,\n requestClass?: new () => T,\n alreadyHashed?: boolean\n ) => Promise;\n verifyUser: (verification: Verification) => Promise;\n requestOTP: () => Promise;\n}\n","export abstract class UsernameGenerationService {\n generateUsername: (options: any) => Promise;\n generateWord: (options: any) => Promise;\n generateSubaddress: (options: any) => Promise;\n generateCatchall: (options: any) => Promise;\n getOptions: () => Promise;\n saveOptions: (options: any) => Promise;\n}\n","export abstract class VaultTimeoutService {\n isLocked: (userId?: string) => Promise;\n checkVaultTimeout: () => Promise;\n lock: (allowSoftLock?: boolean, userId?: string) => Promise;\n logOut: (userId?: string) => Promise;\n setVaultTimeoutOptions: (vaultTimeout: number, vaultTimeoutAction: string) => Promise;\n getVaultTimeout: () => Promise;\n isPinLockSet: () => Promise<[boolean, boolean]>;\n isBiometricLockSet: () => Promise;\n clear: (userId?: string) => Promise;\n}\n","export enum AuthenticationType {\n Password = 0,\n Sso = 1,\n Api = 2,\n}\n","export enum CipherRepromptType {\n None = 0,\n Password = 1,\n}\n","export enum CipherType {\n Login = 1,\n SecureNote = 2,\n Card = 3,\n Identity = 4,\n}\n","export enum ClientType {\n Web = \"web\",\n Browser = \"browser\",\n Desktop = \"desktop\",\n Mobile = \"mobile\",\n Cli = \"cli\",\n DirectoryConnector = \"connector\",\n}\n","export enum DeviceType {\n Android = 0,\n iOS = 1,\n ChromeExtension = 2,\n FirefoxExtension = 3,\n OperaExtension = 4,\n EdgeExtension = 5,\n WindowsDesktop = 6,\n MacOsDesktop = 7,\n LinuxDesktop = 8,\n ChromeBrowser = 9,\n FirefoxBrowser = 10,\n OperaBrowser = 11,\n EdgeBrowser = 12,\n IEBrowser = 13,\n UnknownBrowser = 14,\n AndroidAmazon = 15,\n UWP = 16,\n SafariBrowser = 17,\n VivaldiBrowser = 18,\n VivaldiExtension = 19,\n SafariExtension = 20,\n}\n","export enum EmergencyAccessStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n RecoveryInitiated = 3,\n RecoveryApproved = 4,\n}\n","export enum EmergencyAccessType {\n View = 0,\n Takeover = 1,\n}\n","export enum EncryptionType {\n AesCbc256_B64 = 0,\n AesCbc128_HmacSha256_B64 = 1,\n AesCbc256_HmacSha256_B64 = 2,\n Rsa2048_OaepSha256_B64 = 3,\n Rsa2048_OaepSha1_B64 = 4,\n Rsa2048_OaepSha256_HmacSha256_B64 = 5,\n Rsa2048_OaepSha1_HmacSha256_B64 = 6,\n}\n","export enum EventType {\n User_LoggedIn = 1000,\n User_ChangedPassword = 1001,\n User_Updated2fa = 1002,\n User_Disabled2fa = 1003,\n User_Recovered2fa = 1004,\n User_FailedLogIn = 1005,\n User_FailedLogIn2fa = 1006,\n User_ClientExportedVault = 1007,\n User_UpdatedTempPassword = 1008,\n User_MigratedKeyToKeyConnector = 1009,\n\n Cipher_Created = 1100,\n Cipher_Updated = 1101,\n Cipher_Deleted = 1102,\n Cipher_AttachmentCreated = 1103,\n Cipher_AttachmentDeleted = 1104,\n Cipher_Shared = 1105,\n Cipher_UpdatedCollections = 1106,\n Cipher_ClientViewed = 1107,\n Cipher_ClientToggledPasswordVisible = 1108,\n Cipher_ClientToggledHiddenFieldVisible = 1109,\n Cipher_ClientToggledCardCodeVisible = 1110,\n Cipher_ClientCopiedPassword = 1111,\n Cipher_ClientCopiedHiddenField = 1112,\n Cipher_ClientCopiedCardCode = 1113,\n Cipher_ClientAutofilled = 1114,\n Cipher_SoftDeleted = 1115,\n Cipher_Restored = 1116,\n Cipher_ClientToggledCardNumberVisible = 1117,\n\n Collection_Created = 1300,\n Collection_Updated = 1301,\n Collection_Deleted = 1302,\n\n Group_Created = 1400,\n Group_Updated = 1401,\n Group_Deleted = 1402,\n\n OrganizationUser_Invited = 1500,\n OrganizationUser_Confirmed = 1501,\n OrganizationUser_Updated = 1502,\n OrganizationUser_Removed = 1503,\n OrganizationUser_UpdatedGroups = 1504,\n OrganizationUser_UnlinkedSso = 1505,\n OrganizationUser_ResetPassword_Enroll = 1506,\n OrganizationUser_ResetPassword_Withdraw = 1507,\n OrganizationUser_AdminResetPassword = 1508,\n OrganizationUser_ResetSsoLink = 1509,\n OrganizationUser_FirstSsoLogin = 1510,\n\n Organization_Updated = 1600,\n Organization_PurgedVault = 1601,\n // Organization_ClientExportedVault = 1602,\n Organization_VaultAccessed = 1603,\n Organization_EnabledSso = 1604,\n Organization_DisabledSso = 1605,\n Organization_EnabledKeyConnector = 1606,\n Organization_DisabledKeyConnector = 1607,\n\n Policy_Updated = 1700,\n\n ProviderUser_Invited = 1800,\n ProviderUser_Confirmed = 1801,\n ProviderUser_Updated = 1802,\n ProviderUser_Removed = 1803,\n\n ProviderOrganization_Created = 1900,\n ProviderOrganization_Added = 1901,\n ProviderOrganization_Removed = 1902,\n ProviderOrganization_VaultAccessed = 1903,\n}\n","export enum FieldType {\n Text = 0,\n Hidden = 1,\n Boolean = 2,\n Linked = 3,\n}\n","export enum FileUploadType {\n Direct = 0,\n Azure = 1,\n}\n","export enum HashPurpose {\n ServerAuthorization = 1,\n LocalAuthorization = 2,\n}\n","export enum HtmlStorageLocation {\n Local = \"local\",\n Memory = \"memory\",\n Session = \"session\",\n}\n","export interface ImportOption {\n id: string;\n name: string;\n}\n\nexport const featuredImportOptions = [\n { id: \"bitwardenjson\", name: \"Bitwarden (json)\" },\n { id: \"bitwardencsv\", name: \"Bitwarden (csv)\" },\n { id: \"chromecsv\", name: \"Chrome (csv)\" },\n { id: \"dashlanecsv\", name: \"Dashlane (csv)\" },\n { id: \"firefoxcsv\", name: \"Firefox (csv)\" },\n { id: \"keepass2xml\", name: \"KeePass 2 (xml)\" },\n { id: \"lastpasscsv\", name: \"LastPass (csv)\" },\n { id: \"safaricsv\", name: \"Safari and macOS (csv)\" },\n { id: \"1password1pux\", name: \"1Password (1pux)\" },\n] as const;\n\nexport const regularImportOptions = [\n { id: \"keepassxcsv\", name: \"KeePassX (csv)\" },\n { id: \"1password1pif\", name: \"1Password (1pif)\" },\n { id: \"1passwordwincsv\", name: \"1Password 6 and 7 Windows (csv)\" },\n { id: \"1passwordmaccsv\", name: \"1Password 6 and 7 Mac (csv)\" },\n { id: \"dashlanejson\", name: \"Dashlane (json)\" },\n { id: \"roboformcsv\", name: \"RoboForm (csv)\" },\n { id: \"keepercsv\", name: \"Keeper (csv)\" },\n // Temporarily remove this option for the Feb release\n // { id: \"keeperjson\", name: \"Keeper (json)\" },\n { id: \"enpasscsv\", name: \"Enpass (csv)\" },\n { id: \"enpassjson\", name: \"Enpass (json)\" },\n { id: \"safeincloudxml\", name: \"SafeInCloud (xml)\" },\n { id: \"pwsafexml\", name: \"Password Safe (xml)\" },\n { id: \"stickypasswordxml\", name: \"Sticky Password (xml)\" },\n { id: \"msecurecsv\", name: \"mSecure (csv)\" },\n { id: \"truekeycsv\", name: \"True Key (csv)\" },\n { id: \"passwordbossjson\", name: \"Password Boss (json)\" },\n { id: \"zohovaultcsv\", name: \"Zoho Vault (csv)\" },\n { id: \"splashidcsv\", name: \"SplashID (csv)\" },\n { id: \"passworddragonxml\", name: \"Password Dragon (xml)\" },\n { id: \"padlockcsv\", name: \"Padlock (csv)\" },\n { id: \"passboltcsv\", name: \"Passbolt (csv)\" },\n { id: \"clipperzhtml\", name: \"Clipperz (html)\" },\n { id: \"aviracsv\", name: \"Avira (csv)\" },\n { id: \"saferpasscsv\", name: \"SaferPass (csv)\" },\n { id: \"upmcsv\", name: \"Universal Password Manager (csv)\" },\n { id: \"ascendocsv\", name: \"Ascendo DataVault (csv)\" },\n { id: \"meldiumcsv\", name: \"Meldium (csv)\" },\n { id: \"passkeepcsv\", name: \"PassKeep (csv)\" },\n { id: \"operacsv\", name: \"Opera (csv)\" },\n { id: \"vivaldicsv\", name: \"Vivaldi (csv)\" },\n { id: \"gnomejson\", name: \"GNOME Passwords and Keys/Seahorse (json)\" },\n { id: \"blurcsv\", name: \"Blur (csv)\" },\n { id: \"passwordagentcsv\", name: \"Password Agent (csv)\" },\n { id: \"passpackcsv\", name: \"Passpack (csv)\" },\n { id: \"passmanjson\", name: \"Passman (json)\" },\n { id: \"avastcsv\", name: \"Avast Passwords (csv)\" },\n { id: \"avastjson\", name: \"Avast Passwords (json)\" },\n { id: \"fsecurefsk\", name: \"F-Secure KEY (fsk)\" },\n { id: \"kasperskytxt\", name: \"Kaspersky Password Manager (txt)\" },\n { id: \"remembearcsv\", name: \"RememBear (csv)\" },\n { id: \"passwordwallettxt\", name: \"PasswordWallet (txt)\" },\n { id: \"mykicsv\", name: \"Myki (csv)\" },\n { id: \"securesafecsv\", name: \"SecureSafe (csv)\" },\n { id: \"logmeoncecsv\", name: \"LogMeOnce (csv)\" },\n { id: \"blackberrycsv\", name: \"BlackBerry Password Keeper (csv)\" },\n { id: \"buttercupcsv\", name: \"Buttercup (csv)\" },\n { id: \"codebookcsv\", name: \"Codebook (csv)\" },\n { id: \"encryptrcsv\", name: \"Encryptr (csv)\" },\n { id: \"yoticsv\", name: \"Yoti (csv)\" },\n { id: \"nordpasscsv\", name: \"Nordpass (csv)\" },\n] as const;\n\nexport type ImportType =\n | typeof featuredImportOptions[number][\"id\"]\n | typeof regularImportOptions[number][\"id\"];\n","export enum KdfType {\n PBKDF2_SHA256 = 0,\n}\n\nexport const DEFAULT_KDF_TYPE = KdfType.PBKDF2_SHA256;\nexport const DEFAULT_KDF_ITERATIONS = 100000;\nexport const SEND_KDF_ITERATIONS = 100000;\n","export enum KeySuffixOptions {\n Auto = \"auto\",\n Biometric = \"biometric\",\n}\n","export type LinkedIdType = LoginLinkedId | CardLinkedId | IdentityLinkedId;\n\n// LoginView\nexport enum LoginLinkedId {\n Username = 100,\n Password = 101,\n}\n\n// CardView\nexport enum CardLinkedId {\n CardholderName = 300,\n ExpMonth = 301,\n ExpYear = 302,\n Code = 303,\n Brand = 304,\n Number = 305,\n}\n\n// IdentityView\nexport enum IdentityLinkedId {\n Title = 400,\n MiddleName = 401,\n Address1 = 402,\n Address2 = 403,\n Address3 = 404,\n City = 405,\n State = 406,\n PostalCode = 407,\n Country = 408,\n Company = 409,\n Email = 410,\n Phone = 411,\n Ssn = 412,\n Username = 413,\n PassportNumber = 414,\n LicenseNumber = 415,\n FirstName = 416,\n LastName = 417,\n FullName = 418,\n}\n","export enum LogLevelType {\n Debug,\n Info,\n Warning,\n Error,\n}\n","export enum NotificationType {\n SyncCipherUpdate = 0,\n SyncCipherCreate = 1,\n SyncLoginDelete = 2,\n SyncFolderDelete = 3,\n SyncCiphers = 4,\n\n SyncVault = 5,\n SyncOrgKeys = 6,\n SyncFolderCreate = 7,\n SyncFolderUpdate = 8,\n SyncCipherDelete = 9,\n SyncSettings = 10,\n\n LogOut = 11,\n\n SyncSendCreate = 12,\n SyncSendUpdate = 13,\n SyncSendDelete = 14,\n}\n","export enum OrganizationUserStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n}\n","export enum OrganizationUserType {\n Owner = 0,\n Admin = 1,\n User = 2,\n Manager = 3,\n Custom = 4,\n}\n","export enum PaymentMethodType {\n Card = 0,\n BankAccount = 1,\n PayPal = 2,\n BitPay = 3,\n Credit = 4,\n WireTransfer = 5,\n AppleInApp = 6,\n GoogleInApp = 7,\n Check = 8,\n}\n","export enum Permissions {\n AccessEventLogs,\n AccessImportExport,\n AccessReports,\n /**\n * @deprecated Sep 29 2021: This permission has been split out to `createNewCollections`, `editAnyCollection`, and\n * `deleteAnyCollection`. It exists here for backwards compatibility with Server versions <= 1.43.0\n */\n ManageAllCollections,\n /**\n * @deprecated Sep 29 2021: This permission has been split out to `editAssignedCollections` and\n * `deleteAssignedCollections`. It exists here for backwards compatibility with Server versions <= 1.43.0\n */\n ManageAssignedCollections,\n ManageGroups,\n ManageOrganization,\n ManagePolicies,\n ManageProvider,\n ManageUsers,\n ManageUsersPassword,\n CreateNewCollections,\n EditAnyCollection,\n DeleteAnyCollection,\n EditAssignedCollections,\n DeleteAssignedCollections,\n ManageSso,\n}\n","export enum PlanSponsorshipType {\n FamiliesForEnterprise = 0,\n}\n","export enum PlanType {\n Free = 0,\n FamiliesAnnually2019 = 1,\n TeamsMonthly2019 = 2,\n TeamsAnnually2019 = 3,\n EnterpriseMonthly2019 = 4,\n EnterpriseAnnually2019 = 5,\n Custom = 6,\n FamiliesAnnually = 7,\n TeamsMonthly = 8,\n TeamsAnnually = 9,\n EnterpriseMonthly = 10,\n EnterpriseAnnually = 11,\n}\n","export enum PolicyType {\n TwoFactorAuthentication = 0, // Requires users to have 2fa enabled\n MasterPassword = 1, // Sets minimum requirements for master password complexity\n PasswordGenerator = 2, // Sets minimum requirements/default type for generated passwords/passphrases\n SingleOrg = 3, // Allows users to only be apart of one organization\n RequireSso = 4, // Requires users to authenticate with SSO\n PersonalOwnership = 5, // Disables personal vault ownership for adding/cloning items\n DisableSend = 6, // Disables the ability to create and edit Bitwarden Sends\n SendOptions = 7, // Sets restrictions or defaults for Bitwarden Sends\n ResetPassword = 8, // Allows orgs to use reset password : also can enable auto-enrollment during invite flow\n MaximumVaultTimeout = 9, // Sets the maximum allowed vault timeout\n DisablePersonalVaultExport = 10, // Disable personal vault export\n}\n","export enum ProductType {\n Free = 0,\n Families = 1,\n Teams = 2,\n Enterprise = 3,\n}\n","export enum ProviderUserStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n}\n","export enum ProviderUserType {\n ProviderAdmin = 0,\n ServiceUser = 1,\n}\n","export enum SecureNoteType {\n Generic = 0,\n}\n","export enum SendType {\n Text = 0,\n File = 1,\n}\n","export enum SsoType {\n None = 0,\n OpenIdConnect = 1,\n Saml2 = 2,\n}\n\nexport enum OpenIdConnectRedirectBehavior {\n RedirectGet = 0,\n FormPost = 1,\n}\n\nexport enum Saml2BindingType {\n HttpRedirect = 1,\n HttpPost = 2,\n}\n\nexport enum Saml2NameIdFormat {\n NotConfigured = 0,\n Unspecified = 1,\n EmailAddress = 2,\n X509SubjectName = 3,\n WindowsDomainQualifiedName = 4,\n KerberosPrincipalName = 5,\n EntityIdentifier = 6,\n Persistent = 7,\n Transient = 8,\n}\n\nexport enum Saml2SigningBehavior {\n IfIdpWantAuthnRequestsSigned = 0,\n Always = 1,\n Never = 3,\n}\n","export enum StateVersion {\n One = 1, // Original flat key/value pair store\n Two = 2, // Move to a typed State object\n Three = 3, // Fix migration of users' premium status\n Four = 4, // Fix 'Never Lock' option by removing stale data\n Latest = Four,\n}\n","export enum StorageLocation {\n Both = \"both\",\n Disk = \"disk\",\n Memory = \"memory\",\n}\n","export enum ThemeType {\n System = \"system\",\n Light = \"light\",\n Dark = \"dark\",\n Nord = \"nord\",\n SolarizedDark = \"solarizedDark\",\n}\n","export enum TransactionType {\n Charge = 0,\n Credit = 1,\n PromotionalCredit = 2,\n ReferralCredit = 3,\n Refund = 4,\n}\n","export enum TwoFactorProviderType {\n Authenticator = 0,\n Email = 1,\n Duo = 2,\n Yubikey = 3,\n U2f = 4,\n Remember = 5,\n OrganizationDuo = 6,\n WebAuthn = 7,\n}\n","export enum UriMatchType {\n Domain = 0,\n Host = 1,\n StartsWith = 2,\n Exact = 3,\n RegularExpression = 4,\n Never = 5,\n}\n","export enum VerificationType {\n MasterPassword = 0,\n OTP = 1,\n}\n","import { Account } from \"../models/domain/account\";\n\nexport class AccountFactory {\n private accountConstructor: new (init: Partial) => T;\n\n constructor(accountConstructor: new (init: Partial) => T) {\n this.accountConstructor = accountConstructor;\n }\n\n create(args: Partial) {\n return new this.accountConstructor(args);\n }\n}\n","import { GlobalState } from \"../models/domain/globalState\";\n\nexport class GlobalStateFactory {\n private globalStateConstructor: new (init: Partial) => T;\n\n constructor(globalStateConstructor: new (init: Partial) => T) {\n this.globalStateConstructor = globalStateConstructor;\n }\n\n create(args?: Partial) {\n return new this.globalStateConstructor(args);\n }\n}\n","import { Account } from \"../models/domain/account\";\nimport { GlobalState } from \"../models/domain/globalState\";\n\nimport { AccountFactory } from \"./accountFactory\";\nimport { GlobalStateFactory } from \"./globalStateFactory\";\n\nexport class StateFactory<\n TGlobal extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n private globalStateFactory: GlobalStateFactory;\n private accountFactory: AccountFactory;\n\n constructor(\n globalStateConstructor: new (init: Partial) => TGlobal,\n accountConstructor: new (init: Partial) => TAccount\n ) {\n this.globalStateFactory = new GlobalStateFactory(globalStateConstructor);\n this.accountFactory = new AccountFactory(accountConstructor);\n }\n\n createGlobal(args: Partial): TGlobal {\n return this.globalStateFactory.create(args);\n }\n\n createAccount(args: Partial): TAccount {\n return this.accountFactory.create(args);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class AscendoCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length < 2) {\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 1]);\n cipher.name = this.getValueOrDefault(value[0], \"--\");\n\n if (value.length > 2 && value.length % 2 === 0) {\n for (let i = 0; i < value.length - 2; i += 2) {\n const val: string = value[i + 2];\n const field: string = value[i + 1];\n if (this.isNullOrWhitespace(val) || this.isNullOrWhitespace(field)) {\n continue;\n }\n\n const fieldLower = field.toLowerCase();\n if (cipher.login.password == null && this.passwordFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.password = this.getValueOrDefault(val);\n } else if (\n cipher.login.username == null &&\n this.usernameFieldNames.indexOf(fieldLower) > -1\n ) {\n cipher.login.username = this.getValueOrDefault(val);\n } else if (\n (cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(fieldLower) > -1\n ) {\n cipher.login.uris = this.makeUriArray(val);\n } else {\n this.processKvp(cipher, field, val);\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class AvastCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name);\n cipher.login.uris = this.makeUriArray(value.web);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.login);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class AvastJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n if (results.logins != null) {\n results.logins.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.custName);\n cipher.notes = this.getValueOrDefault(value.note);\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.password = this.getValueOrDefault(value.pwd);\n cipher.login.username = this.getValueOrDefault(value.loginName);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (results.notes != null) {\n results.notes.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.name = this.getValueOrDefault(value.label);\n cipher.notes = this.getValueOrDefault(value.text);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (results.cards != null) {\n results.cards.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.type = CipherType.Card;\n cipher.name = this.getValueOrDefault(value.custName);\n cipher.notes = this.getValueOrDefault(value.note);\n cipher.card.cardholderName = this.getValueOrDefault(value.holderName);\n cipher.card.number = this.getValueOrDefault(value.cardNumber);\n cipher.card.code = this.getValueOrDefault(value.cvv);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n if (value.expirationDate != null) {\n if (value.expirationDate.month != null) {\n cipher.card.expMonth = value.expirationDate.month + \"\";\n }\n if (value.expirationDate.year != null) {\n cipher.card.expYear = value.expirationDate.year + \"\";\n }\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class AviraCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(\n value.name,\n this.getValueOrDefault(this.nameFromUrl(value.website), \"--\")\n );\n cipher.login.uris = this.makeUriArray(value.website);\n cipher.login.password = this.getValueOrDefault(value.password);\n\n if (\n this.isNullOrWhitespace(value.username) &&\n !this.isNullOrWhitespace(value.secondary_username)\n ) {\n cipher.login.username = value.secondary_username;\n } else {\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.notes = this.getValueOrDefault(value.secondary_username);\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import * as papa from \"papaparse\";\n\nimport { LogService } from \"../abstractions/log.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { Utils } from \"../misc/utils\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { CollectionView } from \"../models/view/collectionView\";\nimport { FieldView } from \"../models/view/fieldView\";\nimport { FolderView } from \"../models/view/folderView\";\nimport { LoginUriView } from \"../models/view/loginUriView\";\nimport { LoginView } from \"../models/view/loginView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\nimport { ConsoleLogService } from \"../services/consoleLog.service\";\n\nexport abstract class BaseImporter {\n organizationId: string = null;\n\n protected logService: LogService = new ConsoleLogService(false);\n\n protected newLineRegex = /(?:\\r\\n|\\r|\\n)/;\n\n protected passwordFieldNames = [\n \"password\",\n \"pass word\",\n \"passphrase\",\n \"pass phrase\",\n \"pass\",\n \"code\",\n \"code word\",\n \"codeword\",\n \"secret\",\n \"secret word\",\n \"personpwd\",\n \"key\",\n \"keyword\",\n \"key word\",\n \"keyphrase\",\n \"key phrase\",\n \"form_pw\",\n \"wppassword\",\n \"pin\",\n \"pwd\",\n \"pw\",\n \"pword\",\n \"passwd\",\n \"p\",\n \"serial\",\n \"serial#\",\n \"license key\",\n \"reg #\",\n\n // Non-English names\n \"passwort\",\n ];\n\n protected usernameFieldNames = [\n \"user\",\n \"name\",\n \"user name\",\n \"username\",\n \"login name\",\n \"email\",\n \"e-mail\",\n \"id\",\n \"userid\",\n \"user id\",\n \"login\",\n \"form_loginname\",\n \"wpname\",\n \"mail\",\n \"loginid\",\n \"login id\",\n \"log\",\n \"personlogin\",\n \"first name\",\n \"last name\",\n \"card#\",\n \"account #\",\n \"member\",\n \"member #\",\n\n // Non-English names\n \"nom\",\n \"benutzername\",\n ];\n\n protected notesFieldNames = [\n \"note\",\n \"notes\",\n \"comment\",\n \"comments\",\n \"memo\",\n \"description\",\n \"free form\",\n \"freeform\",\n \"free text\",\n \"freetext\",\n \"free\",\n\n // Non-English names\n \"kommentar\",\n ];\n\n protected uriFieldNames: string[] = [\n \"url\",\n \"hyper link\",\n \"hyperlink\",\n \"link\",\n \"host\",\n \"hostname\",\n \"host name\",\n \"server\",\n \"address\",\n \"hyper ref\",\n \"href\",\n \"web\",\n \"website\",\n \"web site\",\n \"site\",\n \"web-site\",\n \"uri\",\n\n // Non-English names\n \"ort\",\n \"adresse\",\n ];\n\n protected parseCsvOptions = {\n encoding: \"UTF-8\",\n skipEmptyLines: false,\n };\n\n protected get organization() {\n return this.organizationId != null;\n }\n\n protected parseXml(data: string): Document {\n const parser = new DOMParser();\n const doc = parser.parseFromString(data, \"application/xml\");\n return doc != null && doc.querySelector(\"parsererror\") == null ? doc : null;\n }\n\n protected parseCsv(data: string, header: boolean, options: any = {}): any[] {\n const parseOptions: papa.ParseConfig = Object.assign(\n { header: header },\n this.parseCsvOptions,\n options\n );\n data = this.splitNewLine(data).join(\"\\n\").trim();\n const result = papa.parse(data, parseOptions);\n if (result.errors != null && result.errors.length > 0) {\n result.errors.forEach((e) => {\n if (e.row != null) {\n this.logService.warning(\"Error parsing row \" + e.row + \": \" + e.message);\n }\n });\n }\n return result.data && result.data.length > 0 ? result.data : null;\n }\n\n protected parseSingleRowCsv(rowData: string) {\n if (this.isNullOrWhitespace(rowData)) {\n return null;\n }\n const parsedRow = this.parseCsv(rowData, false);\n if (parsedRow != null && parsedRow.length > 0 && parsedRow[0].length > 0) {\n return parsedRow[0];\n }\n return null;\n }\n\n protected makeUriArray(uri: string | string[]): LoginUriView[] {\n if (uri == null) {\n return null;\n }\n\n if (typeof uri === \"string\") {\n const loginUri = new LoginUriView();\n loginUri.uri = this.fixUri(uri);\n if (this.isNullOrWhitespace(loginUri.uri)) {\n return null;\n }\n loginUri.match = null;\n return [loginUri];\n }\n\n if (uri.length > 0) {\n const returnArr: LoginUriView[] = [];\n uri.forEach((u) => {\n const loginUri = new LoginUriView();\n loginUri.uri = this.fixUri(u);\n if (this.isNullOrWhitespace(loginUri.uri)) {\n return;\n }\n loginUri.match = null;\n returnArr.push(loginUri);\n });\n return returnArr.length === 0 ? null : returnArr;\n }\n\n return null;\n }\n\n protected fixUri(uri: string) {\n if (uri == null) {\n return null;\n }\n uri = uri.trim();\n if (uri.indexOf(\"://\") === -1 && uri.indexOf(\".\") >= 0) {\n uri = \"http://\" + uri;\n }\n if (uri.length > 1000) {\n return uri.substring(0, 1000);\n }\n return uri;\n }\n\n protected nameFromUrl(url: string) {\n const hostname = Utils.getHostname(url);\n if (this.isNullOrWhitespace(hostname)) {\n return null;\n }\n return hostname.startsWith(\"www.\") ? hostname.replace(\"www.\", \"\") : hostname;\n }\n\n protected isNullOrWhitespace(str: string): boolean {\n return Utils.isNullOrWhitespace(str);\n }\n\n protected getValueOrDefault(str: string, defaultValue: string = null): string {\n if (this.isNullOrWhitespace(str)) {\n return defaultValue;\n }\n return str;\n }\n\n protected splitNewLine(str: string): string[] {\n return str.split(this.newLineRegex);\n }\n\n // ref https://stackoverflow.com/a/5911300\n protected getCardBrand(cardNum: string) {\n if (this.isNullOrWhitespace(cardNum)) {\n return null;\n }\n\n // Visa\n let re = new RegExp(\"^4\");\n if (cardNum.match(re) != null) {\n return \"Visa\";\n }\n\n // Mastercard\n // Updated for Mastercard 2017 BINs expansion\n if (\n /^(5[1-5][0-9]{14}|2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))$/.test(\n cardNum\n )\n ) {\n return \"Mastercard\";\n }\n\n // AMEX\n re = new RegExp(\"^3[47]\");\n if (cardNum.match(re) != null) {\n return \"Amex\";\n }\n\n // Discover\n re = new RegExp(\n \"^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)\"\n );\n if (cardNum.match(re) != null) {\n return \"Discover\";\n }\n\n // Diners\n re = new RegExp(\"^36\");\n if (cardNum.match(re) != null) {\n return \"Diners Club\";\n }\n\n // Diners - Carte Blanche\n re = new RegExp(\"^30[0-5]\");\n if (cardNum.match(re) != null) {\n return \"Diners Club\";\n }\n\n // JCB\n re = new RegExp(\"^35(2[89]|[3-8][0-9])\");\n if (cardNum.match(re) != null) {\n return \"JCB\";\n }\n\n // Visa Electron\n re = new RegExp(\"^(4026|417500|4508|4844|491(3|7))\");\n if (cardNum.match(re) != null) {\n return \"Visa\";\n }\n\n return null;\n }\n\n protected setCardExpiration(cipher: CipherView, expiration: string): boolean {\n if (!this.isNullOrWhitespace(expiration)) {\n expiration = expiration.replace(/\\s/g, \"\");\n const parts = expiration.split(\"/\");\n if (parts.length === 2) {\n let month: string = null;\n let year: string = null;\n if (parts[0].length === 1 || parts[0].length === 2) {\n month = parts[0];\n if (month.length === 2 && month[0] === \"0\") {\n month = month.substr(1, 1);\n }\n }\n if (parts[1].length === 2 || parts[1].length === 4) {\n year = month.length === 2 ? \"20\" + parts[1] : parts[1];\n }\n if (month != null && year != null) {\n cipher.card.expMonth = month;\n cipher.card.expYear = year;\n return true;\n }\n }\n }\n return false;\n }\n\n protected moveFoldersToCollections(result: ImportResult) {\n result.folderRelationships.forEach((r) => result.collectionRelationships.push(r));\n result.collections = result.folders.map((f) => {\n const collection = new CollectionView();\n collection.name = f.name;\n return collection;\n });\n result.folderRelationships = [];\n result.folders = [];\n }\n\n protected querySelectorDirectChild(parentEl: Element, query: string) {\n const els = this.querySelectorAllDirectChild(parentEl, query);\n return els.length === 0 ? null : els[0];\n }\n\n protected querySelectorAllDirectChild(parentEl: Element, query: string) {\n return Array.from(parentEl.querySelectorAll(query)).filter((el) => el.parentNode === parentEl);\n }\n\n protected initLoginCipher() {\n const cipher = new CipherView();\n cipher.favorite = false;\n cipher.notes = \"\";\n cipher.fields = [];\n cipher.login = new LoginView();\n cipher.type = CipherType.Login;\n return cipher;\n }\n\n protected cleanupCipher(cipher: CipherView) {\n if (cipher == null) {\n return;\n }\n if (cipher.type !== CipherType.Login) {\n cipher.login = null;\n }\n if (this.isNullOrWhitespace(cipher.name)) {\n cipher.name = \"--\";\n }\n if (this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = null;\n } else {\n cipher.notes = cipher.notes.trim();\n }\n if (cipher.fields != null && cipher.fields.length === 0) {\n cipher.fields = null;\n }\n }\n\n protected processKvp(\n cipher: CipherView,\n key: string,\n value: string,\n type: FieldType = FieldType.Text\n ) {\n if (this.isNullOrWhitespace(value)) {\n return;\n }\n if (this.isNullOrWhitespace(key)) {\n key = \"\";\n }\n if (value.length > 200 || value.trim().search(this.newLineRegex) > -1) {\n if (cipher.notes == null) {\n cipher.notes = \"\";\n }\n cipher.notes += key + \": \" + this.splitNewLine(value).join(\"\\n\") + \"\\n\";\n } else {\n if (cipher.fields == null) {\n cipher.fields = [];\n }\n const field = new FieldView();\n field.type = type;\n field.name = key;\n field.value = value;\n cipher.fields.push(field);\n }\n }\n\n protected processFolder(result: ImportResult, folderName: string) {\n let folderIndex = result.folders.length;\n const hasFolder = !this.isNullOrWhitespace(folderName);\n let addFolder = hasFolder;\n\n if (hasFolder) {\n for (let i = 0; i < result.folders.length; i++) {\n if (result.folders[i].name === folderName) {\n addFolder = false;\n folderIndex = i;\n break;\n }\n }\n }\n\n if (addFolder) {\n const f = new FolderView();\n f.name = folderName;\n result.folders.push(f);\n }\n if (hasFolder) {\n result.folderRelationships.push([result.ciphers.length, folderIndex]);\n }\n }\n\n protected convertToNoteIfNeeded(cipher: CipherView) {\n if (\n cipher.type === CipherType.Login &&\n this.isNullOrWhitespace(cipher.login.username) &&\n this.isNullOrWhitespace(cipher.login.password) &&\n (cipher.login.uris == null || cipher.login.uris.length === 0)\n ) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n }\n }\n\n protected processFullName(cipher: CipherView, fullName: string) {\n if (this.isNullOrWhitespace(fullName)) {\n return;\n }\n\n const nameParts = fullName.split(\" \");\n if (nameParts.length > 0) {\n cipher.identity.firstName = this.getValueOrDefault(nameParts[0]);\n }\n if (nameParts.length === 2) {\n cipher.identity.lastName = this.getValueOrDefault(nameParts[1]);\n } else if (nameParts.length >= 3) {\n cipher.identity.middleName = this.getValueOrDefault(nameParts[1]);\n cipher.identity.lastName = nameParts.slice(2, nameParts.length).join(\" \");\n }\n }\n}\n","import { CipherRepromptType } from \"../enums/cipherRepromptType\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { CollectionView } from \"../models/view/collectionView\";\nimport { FieldView } from \"../models/view/fieldView\";\nimport { LoginView } from \"../models/view/loginView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class BitwardenCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (this.organization && !this.isNullOrWhitespace(value.collections)) {\n const collections = (value.collections as string).split(\",\");\n collections.forEach((col) => {\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === col) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = col;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else if (!this.organization) {\n this.processFolder(result, value.folder);\n }\n\n const cipher = new CipherView();\n cipher.favorite =\n !this.organization && this.getValueOrDefault(value.favorite, \"0\") !== \"0\" ? true : false;\n cipher.type = CipherType.Login;\n cipher.notes = this.getValueOrDefault(value.notes);\n cipher.name = this.getValueOrDefault(value.name, \"--\");\n try {\n cipher.reprompt = parseInt(\n this.getValueOrDefault(value.reprompt, CipherRepromptType.None.toString()),\n 10\n );\n } catch (e) {\n // eslint-disable-next-line\n console.error(\"Unable to parse reprompt value\", e);\n cipher.reprompt = CipherRepromptType.None;\n }\n\n if (!this.isNullOrWhitespace(value.fields)) {\n const fields = this.splitNewLine(value.fields);\n for (let i = 0; i < fields.length; i++) {\n if (this.isNullOrWhitespace(fields[i])) {\n continue;\n }\n\n const delimPosition = fields[i].lastIndexOf(\": \");\n if (delimPosition === -1) {\n continue;\n }\n\n if (cipher.fields == null) {\n cipher.fields = [];\n }\n\n const field = new FieldView();\n field.name = fields[i].substr(0, delimPosition);\n field.value = null;\n field.type = FieldType.Text;\n if (fields[i].length > delimPosition + 2) {\n field.value = fields[i].substr(delimPosition + 2);\n }\n cipher.fields.push(field);\n }\n }\n\n const valueType = value.type != null ? value.type.toLowerCase() : null;\n switch (valueType) {\n case \"note\":\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n break;\n default: {\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n cipher.login.totp = this.getValueOrDefault(value.login_totp || value.totp);\n cipher.login.username = this.getValueOrDefault(value.login_username || value.username);\n cipher.login.password = this.getValueOrDefault(value.login_password || value.password);\n const uris = this.parseSingleRowCsv(value.login_uri || value.uri);\n cipher.login.uris = this.makeUriArray(uris);\n break;\n }\n }\n\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CryptoService } from \"../abstractions/crypto.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { EncString } from \"../models/domain/encString\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CipherWithIds } from \"../models/export/cipherWithIds\";\nimport { CollectionWithId } from \"../models/export/collectionWithId\";\nimport { FolderWithId } from \"../models/export/folderWithId\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class BitwardenJsonImporter extends BaseImporter implements Importer {\n private results: any;\n private result: ImportResult;\n\n constructor(protected cryptoService: CryptoService, protected i18nService: I18nService) {\n super();\n }\n\n async parse(data: string): Promise {\n this.result = new ImportResult();\n this.results = JSON.parse(data);\n if (this.results == null || this.results.items == null) {\n if (this.results?.passwordProtected) {\n this.result.success = false;\n this.result.missingPassword = true;\n this.result.errorMessage = this.i18nService.t(\"importPasswordRequired\");\n return this.result;\n }\n\n this.result.success = false;\n return this.result;\n }\n\n if (this.results.encrypted) {\n await this.parseEncrypted();\n } else {\n this.parseDecrypted();\n }\n\n return this.result;\n }\n\n private async parseEncrypted() {\n if (this.results.encKeyValidation_DO_NOT_EDIT != null) {\n const orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n const encKeyValidation = new EncString(this.results.encKeyValidation_DO_NOT_EDIT);\n const encKeyValidationDecrypt = await this.cryptoService.decryptToUtf8(\n encKeyValidation,\n orgKey\n );\n if (encKeyValidationDecrypt === null) {\n this.result.success = false;\n this.result.errorMessage = this.i18nService.t(\"importEncKeyError\");\n return;\n }\n }\n\n const groupingsMap = new Map();\n\n if (this.organization && this.results.collections != null) {\n for (const c of this.results.collections as CollectionWithId[]) {\n const collection = CollectionWithId.toDomain(c);\n if (collection != null) {\n collection.id = null;\n collection.organizationId = this.organizationId;\n const view = await collection.decrypt();\n groupingsMap.set(c.id, this.result.collections.length);\n this.result.collections.push(view);\n }\n }\n } else if (!this.organization && this.results.folders != null) {\n for (const f of this.results.folders as FolderWithId[]) {\n const folder = FolderWithId.toDomain(f);\n if (folder != null) {\n folder.id = null;\n const view = await folder.decrypt();\n groupingsMap.set(f.id, this.result.folders.length);\n this.result.folders.push(view);\n }\n }\n }\n\n for (const c of this.results.items as CipherWithIds[]) {\n const cipher = CipherWithIds.toDomain(c);\n // reset ids incase they were set for some reason\n cipher.id = null;\n cipher.folderId = null;\n cipher.organizationId = this.organizationId;\n cipher.collectionIds = null;\n\n // make sure password history is limited\n if (cipher.passwordHistory != null && cipher.passwordHistory.length > 5) {\n cipher.passwordHistory = cipher.passwordHistory.slice(0, 5);\n }\n\n if (!this.organization && c.folderId != null && groupingsMap.has(c.folderId)) {\n this.result.folderRelationships.push([\n this.result.ciphers.length,\n groupingsMap.get(c.folderId),\n ]);\n } else if (this.organization && c.collectionIds != null) {\n c.collectionIds.forEach((cId) => {\n if (groupingsMap.has(cId)) {\n this.result.collectionRelationships.push([\n this.result.ciphers.length,\n groupingsMap.get(cId),\n ]);\n }\n });\n }\n\n const view = await cipher.decrypt();\n this.cleanupCipher(view);\n this.result.ciphers.push(view);\n }\n\n this.result.success = true;\n }\n\n private parseDecrypted() {\n const groupingsMap = new Map();\n if (this.organization && this.results.collections != null) {\n this.results.collections.forEach((c: CollectionWithId) => {\n const collection = CollectionWithId.toView(c);\n if (collection != null) {\n collection.id = null;\n collection.organizationId = null;\n groupingsMap.set(c.id, this.result.collections.length);\n this.result.collections.push(collection);\n }\n });\n } else if (!this.organization && this.results.folders != null) {\n this.results.folders.forEach((f: FolderWithId) => {\n const folder = FolderWithId.toView(f);\n if (folder != null) {\n folder.id = null;\n groupingsMap.set(f.id, this.result.folders.length);\n this.result.folders.push(folder);\n }\n });\n }\n\n this.results.items.forEach((c: CipherWithIds) => {\n const cipher = CipherWithIds.toView(c);\n // reset ids incase they were set for some reason\n cipher.id = null;\n cipher.folderId = null;\n cipher.organizationId = null;\n cipher.collectionIds = null;\n\n // make sure password history is limited\n if (cipher.passwordHistory != null && cipher.passwordHistory.length > 5) {\n cipher.passwordHistory = cipher.passwordHistory.slice(0, 5);\n }\n\n if (!this.organization && c.folderId != null && groupingsMap.has(c.folderId)) {\n this.result.folderRelationships.push([\n this.result.ciphers.length,\n groupingsMap.get(c.folderId),\n ]);\n } else if (this.organization && c.collectionIds != null) {\n c.collectionIds.forEach((cId) => {\n if (groupingsMap.has(cId)) {\n this.result.collectionRelationships.push([\n this.result.ciphers.length,\n groupingsMap.get(cId),\n ]);\n }\n });\n }\n\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n\n this.result.success = true;\n }\n}\n","import { CryptoService } from \"../abstractions/crypto.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { EncString } from \"../models/domain/encString\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\n\nimport { BitwardenJsonImporter } from \"./bitwardenJsonImporter\";\nimport { Importer } from \"./importer\";\n\ninterface BitwardenPasswordProtectedFileFormat {\n encrypted: boolean;\n passwordProtected: boolean;\n salt: string;\n kdfIterations: number;\n kdfType: number;\n encKeyValidation_DO_NOT_EDIT: string;\n data: string;\n}\n\nexport class BitwardenPasswordProtectedImporter extends BitwardenJsonImporter implements Importer {\n private key: SymmetricCryptoKey;\n\n constructor(cryptoService: CryptoService, i18nService: I18nService, private password: string) {\n super(cryptoService, i18nService);\n }\n\n async parse(data: string): Promise {\n const result = new ImportResult();\n const parsedData = JSON.parse(data);\n if (this.cannotParseFile(parsedData)) {\n result.success = false;\n return result;\n }\n\n if (!(await this.checkPassword(parsedData))) {\n result.success = false;\n result.errorMessage = this.i18nService.t(\"importEncKeyError\");\n return result;\n }\n\n const encData = new EncString(parsedData.data);\n const clearTextData = await this.cryptoService.decryptToUtf8(encData, this.key);\n return await super.parse(clearTextData);\n }\n\n private async checkPassword(jdoc: BitwardenPasswordProtectedFileFormat): Promise {\n this.key = await this.cryptoService.makePinKey(\n this.password,\n jdoc.salt,\n KdfType.PBKDF2_SHA256,\n jdoc.kdfIterations\n );\n\n const encKeyValidation = new EncString(jdoc.encKeyValidation_DO_NOT_EDIT);\n\n const encKeyValidationDecrypt = await this.cryptoService.decryptToUtf8(\n encKeyValidation,\n this.key\n );\n if (encKeyValidationDecrypt === null) {\n return false;\n }\n return true;\n }\n\n private cannotParseFile(jdoc: BitwardenPasswordProtectedFileFormat): boolean {\n return (\n !jdoc ||\n !jdoc.encrypted ||\n !jdoc.passwordProtected ||\n !jdoc.salt ||\n !jdoc.kdfIterations ||\n typeof jdoc.kdfIterations !== \"number\" ||\n jdoc.kdfType == null ||\n KdfType[jdoc.kdfType] == null ||\n !jdoc.encKeyValidation_DO_NOT_EDIT ||\n !jdoc.data\n );\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class BlackBerryCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.grouping === \"list\") {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.favorite = value.fav === \"1\";\n cipher.name = this.getValueOrDefault(value.name);\n cipher.notes = this.getValueOrDefault(value.extra);\n if (value.grouping !== \"note\") {\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.username);\n }\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class BlurCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.label === \"null\") {\n value.label = null;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(\n value.label,\n this.getValueOrDefault(this.nameFromUrl(value.domain), \"--\")\n );\n cipher.login.uris = this.makeUriArray(value.domain);\n cipher.login.password = this.getValueOrDefault(value.password);\n\n if (this.isNullOrWhitespace(value.email) && !this.isNullOrWhitespace(value.username)) {\n cipher.login.username = value.username;\n } else {\n cipher.login.username = this.getValueOrDefault(value.email);\n cipher.notes = this.getValueOrDefault(value.username);\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nconst OfficialProps = [\"!group_id\", \"!group_name\", \"title\", \"username\", \"password\", \"URL\", \"id\"];\n\nexport class ButtercupCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n this.processFolder(result, this.getValueOrDefault(value[\"!group_name\"]));\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.title, \"--\");\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.URL);\n\n let processingCustomFields = false;\n for (const prop in value) {\n // eslint-disable-next-line\n if (value.hasOwnProperty(prop)) {\n if (!processingCustomFields && OfficialProps.indexOf(prop) === -1) {\n processingCustomFields = true;\n }\n if (processingCustomFields) {\n this.processKvp(cipher, prop, value[prop]);\n }\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class ChromeCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name, \"--\");\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class ClipperzHtmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const textarea = doc.querySelector(\"textarea\");\n if (textarea == null || this.isNullOrWhitespace(textarea.textContent)) {\n result.errorMessage = \"Missing textarea.\";\n result.success = false;\n return Promise.resolve(result);\n }\n\n const entries = JSON.parse(textarea.textContent);\n entries.forEach((entry: any) => {\n const cipher = this.initLoginCipher();\n if (!this.isNullOrWhitespace(entry.label)) {\n cipher.name = entry.label.split(\" \")[0];\n }\n if (entry.data != null && !this.isNullOrWhitespace(entry.data.notes)) {\n cipher.notes = entry.data.notes.split(\"\\\\n\").join(\"\\n\");\n }\n\n if (entry.currentVersion != null && entry.currentVersion.fields != null) {\n for (const property in entry.currentVersion.fields) {\n // eslint-disable-next-line\n if (!entry.currentVersion.fields.hasOwnProperty(property)) {\n continue;\n }\n\n const field = entry.currentVersion.fields[property];\n const actionType = field.actionType != null ? field.actionType.toLowerCase() : null;\n switch (actionType) {\n case \"password\":\n cipher.login.password = this.getValueOrDefault(field.value);\n break;\n case \"email\":\n case \"username\":\n case \"user\":\n case \"name\":\n cipher.login.username = this.getValueOrDefault(field.value);\n break;\n case \"url\":\n cipher.login.uris = this.makeUriArray(field.value);\n break;\n default: {\n const labelLower = field.label != null ? field.label.toLowerCase() : null;\n if (\n cipher.login.password == null &&\n this.passwordFieldNames.indexOf(labelLower) > -1\n ) {\n cipher.login.password = this.getValueOrDefault(field.value);\n } else if (\n cipher.login.username == null &&\n this.usernameFieldNames.indexOf(labelLower) > -1\n ) {\n cipher.login.username = this.getValueOrDefault(field.value);\n } else if (\n (cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(labelLower) > -1\n ) {\n cipher.login.uris = this.makeUriArray(field.value);\n } else {\n this.processKvp(cipher, field.label, field.value);\n }\n break;\n }\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class CodebookCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n this.processFolder(result, this.getValueOrDefault(value.Category));\n\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.Favorite) === \"True\";\n cipher.name = this.getValueOrDefault(value.Entry, \"--\");\n cipher.notes = this.getValueOrDefault(value.Note);\n cipher.login.username = this.getValueOrDefault(value.Username, value.Email);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.totp = this.getValueOrDefault(value.TOTP);\n cipher.login.uris = this.makeUriArray(value.Website);\n\n if (!this.isNullOrWhitespace(value.Username)) {\n this.processKvp(cipher, \"Email\", value.Email);\n }\n this.processKvp(cipher, \"Phone\", value.Phone);\n this.processKvp(cipher, \"PIN\", value.PIN);\n this.processKvp(cipher, \"Account\", value.Account);\n this.processKvp(cipher, \"Date\", value.Date);\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../../enums/cipherType\";\nimport { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { ImportResult } from \"../../models/domain/importResult\";\nimport { CardView } from \"../../models/view/cardView\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { IdentityView } from \"../../models/view/identityView\";\nimport { LoginView } from \"../../models/view/loginView\";\nimport { BaseImporter } from \"../baseImporter\";\nimport { Importer } from \"../importer\";\n\nimport {\n CredentialsRecord,\n IdRecord,\n PaymentsRecord,\n PersonalInformationRecord,\n SecureNoteRecord,\n} from \"./types/dashlaneCsvTypes\";\n\nconst _mappedCredentialsColums = new Set([\n \"title\",\n \"note\",\n \"username\",\n \"password\",\n \"url\",\n \"otpSecret\",\n \"category\",\n]);\n\nconst _mappedPersonalInfoAsIdentiyColumns = new Set([\n \"type\",\n \"title\",\n \"first_name\",\n \"middle_name\",\n \"last_name\",\n \"login\",\n \"email\",\n \"phone_number\",\n \"address\",\n \"country\",\n \"state\",\n \"city\",\n \"zip\",\n // Skip item_name as we already have set a combined name\n \"item_name\",\n]);\n\nconst _mappedSecureNoteColumns = new Set([\"title\", \"note\"]);\n\nexport class DashlaneCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n if (results[0].type != null && results[0].title != null) {\n const personalRecords = results as PersonalInformationRecord[];\n\n // If personalRecords has only one \"name\" then create an Identity-Cipher\n if (personalRecords.filter((x) => x.type === \"name\").length === 1) {\n const cipher = this.initLoginCipher();\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n results.forEach((row) => {\n this.parsePersonalInformationRecordAsIdentity(cipher, row);\n });\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n result.success = true;\n return Promise.resolve(result);\n }\n }\n\n results.forEach((row) => {\n const cipher = this.initLoginCipher();\n\n const rowKeys = Object.keys(row);\n if (rowKeys[0] === \"username\") {\n this.processFolder(result, row.category);\n this.parseCredentialsRecord(cipher, row);\n }\n\n if (rowKeys[0] === \"type\" && rowKeys[1] === \"account_name\") {\n this.parsePaymentRecord(cipher, row);\n }\n\n if (rowKeys[0] === \"type\" && rowKeys[1] === \"number\") {\n this.parseIdRecord(cipher, row);\n }\n\n if ((rowKeys[0] === \"type\") != null && rowKeys[1] === \"title\") {\n this.parsePersonalInformationRecord(cipher, row);\n }\n\n if (rowKeys[0] === \"title\" && rowKeys[1] === \"note\") {\n this.parseSecureNoteRecords(cipher, row);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n parseCredentialsRecord(cipher: CipherView, row: CredentialsRecord) {\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n\n cipher.name = row.title;\n cipher.notes = row.note;\n cipher.login.username = row.username;\n cipher.login.password = row.password;\n cipher.login.totp = row.otpSecret;\n cipher.login.uris = this.makeUriArray(row.url);\n\n this.importUnmappedFields(cipher, row, _mappedCredentialsColums);\n }\n\n parsePaymentRecord(cipher: CipherView, row: PaymentsRecord) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n\n cipher.name = row.account_name;\n let mappedValues: string[] = [];\n switch (row.type) {\n case \"credit_card\":\n cipher.card.cardholderName = row.account_name;\n cipher.card.number = row.cc_number;\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = row.code;\n cipher.card.expMonth = row.expiration_month;\n cipher.card.expYear = row.expiration_year.substring(2, 4);\n\n // If you add more mapped fields please extend this\n mappedValues = [\n \"account_name\",\n \"account_holder\",\n \"cc_number\",\n \"code\",\n \"expiration_month\",\n \"expiration_year\",\n ];\n break;\n case \"bank\":\n cipher.card.cardholderName = row.account_holder;\n cipher.card.number = row.account_number;\n\n // If you add more mapped fields please extend this\n mappedValues = [\"account_name\", \"account_holder\", \"account_number\"];\n break;\n default:\n break;\n }\n\n this.importUnmappedFields(cipher, row, new Set(mappedValues));\n }\n\n parseIdRecord(cipher: CipherView, row: IdRecord) {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n\n const mappedValues: string[] = [\"name\", \"number\"];\n switch (row.type) {\n case \"card\":\n cipher.name = `${row.name} ${row.type}`;\n this.processFullName(cipher, row.name);\n cipher.identity.licenseNumber = row.number;\n break;\n case \"passport\":\n cipher.name = `${row.name} ${row.type}`;\n this.processFullName(cipher, row.name);\n cipher.identity.passportNumber = row.number;\n break;\n case \"license\":\n cipher.name = `${row.name} ${row.type}`;\n this.processFullName(cipher, row.name);\n cipher.identity.licenseNumber = row.number;\n cipher.identity.state = row.state;\n\n mappedValues.push(\"state\");\n break;\n case \"social_security\":\n cipher.name = `${row.name} ${row.type}`;\n this.processFullName(cipher, row.name);\n cipher.identity.ssn = row.number;\n break;\n case \"tax_number\":\n cipher.name = row.type;\n cipher.identity.licenseNumber = row.number;\n break;\n\n default:\n break;\n }\n\n // If you add more mapped fields please extend this\n this.importUnmappedFields(cipher, row, new Set(mappedValues));\n }\n\n parsePersonalInformationRecord(cipher: CipherView, row: PersonalInformationRecord) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n if (row.type === \"name\") {\n cipher.name = `${row.title} ${row.first_name} ${row.middle_name} ${row.last_name}`\n .replace(\" \", \" \")\n .trim();\n } else {\n cipher.name = row.item_name;\n }\n\n const dataRow = row as any;\n Object.keys(row).forEach((key) => {\n this.processKvp(cipher, key, dataRow[key]);\n });\n }\n\n parsePersonalInformationRecordAsIdentity(cipher: CipherView, row: PersonalInformationRecord) {\n switch (row.type) {\n case \"name\":\n this.processFullName(cipher, `${row.first_name} ${row.middle_name} ${row.last_name}`);\n cipher.identity.title = row.title;\n cipher.name = cipher.identity.fullName;\n\n cipher.identity.username = row.login;\n break;\n case \"email\":\n cipher.identity.email = row.email;\n break;\n case \"number\":\n cipher.identity.phone = row.phone_number;\n break;\n case \"address\":\n cipher.identity.address1 = row.address;\n cipher.identity.city = row.city;\n cipher.identity.postalCode = row.zip;\n cipher.identity.state = row.state;\n cipher.identity.country = row.country;\n break;\n default:\n break;\n }\n\n this.importUnmappedFields(cipher, row, _mappedPersonalInfoAsIdentiyColumns);\n }\n\n parseSecureNoteRecords(cipher: CipherView, row: SecureNoteRecord) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.name = row.title;\n cipher.notes = row.note;\n\n this.importUnmappedFields(cipher, row, _mappedSecureNoteColumns);\n }\n\n importUnmappedFields(cipher: CipherView, row: any, mappedValues: Set) {\n const unmappedFields = Object.keys(row).filter((x) => !mappedValues.has(x));\n unmappedFields.forEach((key) => {\n const item = row as any;\n this.processKvp(cipher, key, item[key]);\n });\n }\n}\n","import { CipherType } from \"../../enums/cipherType\";\nimport { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { ImportResult } from \"../../models/domain/importResult\";\nimport { CardView } from \"../../models/view/cardView\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { IdentityView } from \"../../models/view/identityView\";\nimport { SecureNoteView } from \"../../models/view/secureNoteView\";\nimport { BaseImporter } from \"../baseImporter\";\nimport { Importer } from \"../importer\";\n\nconst HandledResults = new Set([\n \"ADDRESS\",\n \"AUTHENTIFIANT\",\n \"BANKSTATEMENT\",\n \"IDCARD\",\n \"IDENTITY\",\n \"PAYMENTMEANS_CREDITCARD\",\n \"PAYMENTMEAN_PAYPAL\",\n \"EMAIL\",\n]);\n\nexport class DashlaneJsonImporter extends BaseImporter implements Importer {\n private result: ImportResult;\n\n parse(data: string): Promise {\n this.result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.length === 0) {\n this.result.success = false;\n return Promise.resolve(this.result);\n }\n\n if (results.ADDRESS != null) {\n this.processAddress(results.ADDRESS);\n }\n if (results.AUTHENTIFIANT != null) {\n this.processAuth(results.AUTHENTIFIANT);\n }\n if (results.BANKSTATEMENT != null) {\n this.processNote(results.BANKSTATEMENT, \"BankAccountName\");\n }\n if (results.IDCARD != null) {\n this.processNote(results.IDCARD, \"Fullname\");\n }\n if (results.PAYMENTMEANS_CREDITCARD != null) {\n this.processCard(results.PAYMENTMEANS_CREDITCARD);\n }\n if (results.IDENTITY != null) {\n this.processIdentity(results.IDENTITY);\n }\n\n for (const key in results) {\n // eslint-disable-next-line\n if (results.hasOwnProperty(key) && !HandledResults.has(key)) {\n this.processNote(results[key], null, \"Generic Note\");\n }\n }\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n private processAuth(results: any[]) {\n results.forEach((credential: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(credential.title);\n\n cipher.login.username = this.getValueOrDefault(\n credential.login,\n this.getValueOrDefault(credential.secondaryLogin)\n );\n if (this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = this.getValueOrDefault(credential.email);\n } else if (!this.isNullOrWhitespace(credential.email)) {\n cipher.notes = \"Email: \" + credential.email + \"\\n\";\n }\n\n cipher.login.password = this.getValueOrDefault(credential.password);\n cipher.login.uris = this.makeUriArray(credential.domain);\n cipher.notes += this.getValueOrDefault(credential.note, \"\");\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processIdentity(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.name = this.getValueOrDefault(obj.fullName, \"\");\n const nameParts = cipher.name.split(\" \");\n if (nameParts.length > 0) {\n cipher.identity.firstName = this.getValueOrDefault(nameParts[0]);\n }\n if (nameParts.length === 2) {\n cipher.identity.lastName = this.getValueOrDefault(nameParts[1]);\n } else if (nameParts.length === 3) {\n cipher.identity.middleName = this.getValueOrDefault(nameParts[1]);\n cipher.identity.lastName = this.getValueOrDefault(nameParts[2]);\n }\n cipher.identity.username = this.getValueOrDefault(obj.pseudo);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processAddress(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.name = this.getValueOrDefault(obj.addressName);\n cipher.identity.address1 = this.getValueOrDefault(obj.addressFull);\n cipher.identity.city = this.getValueOrDefault(obj.city);\n cipher.identity.state = this.getValueOrDefault(obj.state);\n cipher.identity.postalCode = this.getValueOrDefault(obj.zipcode);\n cipher.identity.country = this.getValueOrDefault(obj.country);\n if (cipher.identity.country != null) {\n cipher.identity.country = cipher.identity.country.toUpperCase();\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processCard(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n cipher.name = this.getValueOrDefault(obj.bank);\n cipher.card.number = this.getValueOrDefault(obj.cardNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.cardholderName = this.getValueOrDefault(obj.owner);\n if (!this.isNullOrWhitespace(cipher.card.brand)) {\n if (this.isNullOrWhitespace(cipher.name)) {\n cipher.name = cipher.card.brand;\n } else {\n cipher.name += \" - \" + cipher.card.brand;\n }\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processNote(results: any[], nameProperty: string, name: string = null) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.secureNote = new SecureNoteView();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n if (name != null) {\n cipher.name = name;\n } else {\n cipher.name = this.getValueOrDefault(obj[nameProperty]);\n }\n for (const key in obj) {\n // eslint-disable-next-line\n if (obj.hasOwnProperty(key) && key !== nameProperty) {\n this.processKvp(cipher, key, obj[key].toString());\n }\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class EncryptrCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Label, \"--\");\n cipher.notes = this.getValueOrDefault(value.Notes);\n const text = this.getValueOrDefault(value.Text);\n if (!this.isNullOrWhitespace(text)) {\n if (this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = text;\n } else {\n cipher.notes += \"\\n\\n\" + text;\n }\n }\n\n const type = value[\"Entry Type\"];\n if (type === \"Password\") {\n cipher.login.username = this.getValueOrDefault(value.Username);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value[\"Site URL\"]);\n } else if (type === \"Credit Card\") {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value[\"Name on card\"]);\n cipher.card.number = this.getValueOrDefault(value[\"Card Number\"]);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.CVV);\n const expiry = this.getValueOrDefault(value.Expiry);\n if (!this.isNullOrWhitespace(expiry)) {\n const expParts = expiry.split(\"/\");\n if (expParts.length > 1) {\n cipher.card.expMonth = parseInt(expParts[0], null).toString();\n cipher.card.expYear = (2000 + parseInt(expParts[1], null)).toString();\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class EnpassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let firstRow = true;\n results.forEach((value) => {\n if (value.length < 2 || (firstRow && (value[0] === \"Title\" || value[0] === \"title\"))) {\n firstRow = false;\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 1]);\n cipher.name = this.getValueOrDefault(value[0], \"--\");\n\n if (\n value.length === 2 ||\n (!this.containsField(value, \"username\") &&\n !this.containsField(value, \"password\") &&\n !this.containsField(value, \"email\") &&\n !this.containsField(value, \"url\"))\n ) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n }\n\n if (\n this.containsField(value, \"cardholder\") &&\n this.containsField(value, \"number\") &&\n this.containsField(value, \"expiry date\")\n ) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n }\n\n if (value.length > 2 && value.length % 2 === 0) {\n for (let i = 0; i < value.length - 2; i += 2) {\n const fieldValue: string = value[i + 2];\n if (this.isNullOrWhitespace(fieldValue)) {\n continue;\n }\n\n const fieldName: string = value[i + 1];\n const fieldNameLower = fieldName.toLowerCase();\n\n if (cipher.type === CipherType.Login) {\n if (\n fieldNameLower === \"url\" &&\n (cipher.login.uris == null || cipher.login.uris.length === 0)\n ) {\n cipher.login.uris = this.makeUriArray(fieldValue);\n continue;\n } else if (\n (fieldNameLower === \"username\" || fieldNameLower === \"email\") &&\n this.isNullOrWhitespace(cipher.login.username)\n ) {\n cipher.login.username = fieldValue;\n continue;\n } else if (\n fieldNameLower === \"password\" &&\n this.isNullOrWhitespace(cipher.login.password)\n ) {\n cipher.login.password = fieldValue;\n continue;\n } else if (fieldNameLower === \"totp\" && this.isNullOrWhitespace(cipher.login.totp)) {\n cipher.login.totp = fieldValue;\n continue;\n }\n } else if (cipher.type === CipherType.Card) {\n if (\n fieldNameLower === \"cardholder\" &&\n this.isNullOrWhitespace(cipher.card.cardholderName)\n ) {\n cipher.card.cardholderName = fieldValue;\n continue;\n } else if (fieldNameLower === \"number\" && this.isNullOrWhitespace(cipher.card.number)) {\n cipher.card.number = fieldValue;\n cipher.card.brand = this.getCardBrand(fieldValue);\n continue;\n } else if (fieldNameLower === \"cvc\" && this.isNullOrWhitespace(cipher.card.code)) {\n cipher.card.code = fieldValue;\n continue;\n } else if (\n fieldNameLower === \"expiry date\" &&\n this.isNullOrWhitespace(cipher.card.expMonth) &&\n this.isNullOrWhitespace(cipher.card.expYear)\n ) {\n if (this.setCardExpiration(cipher, fieldValue)) {\n continue;\n }\n } else if (fieldNameLower === \"type\") {\n // Skip since brand was determined from number above\n continue;\n }\n }\n\n this.processKvp(cipher, fieldName, fieldValue);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private containsField(fields: any[], name: string) {\n if (fields == null || name == null) {\n return false;\n }\n return (\n fields.filter((f) => !this.isNullOrWhitespace(f) && f.toLowerCase() === name.toLowerCase())\n .length > 0\n );\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { FolderView } from \"../models/view/folderView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class EnpassJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.items == null || results.items.length === 0) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const foldersMap = new Map();\n const foldersIndexMap = new Map();\n const folderTree = this.buildFolderTree(results.folders);\n this.flattenFolderTree(null, folderTree, foldersMap);\n foldersMap.forEach((val, key) => {\n foldersIndexMap.set(key, result.folders.length);\n const f = new FolderView();\n f.name = val;\n result.folders.push(f);\n });\n\n results.items.forEach((item: any) => {\n if (item.folders != null && item.folders.length > 0 && foldersIndexMap.has(item.folders[0])) {\n result.folderRelationships.push([\n result.ciphers.length,\n foldersIndexMap.get(item.folders[0]),\n ]);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(item.title);\n cipher.favorite = item.favorite > 0;\n\n if (item.template_type != null && item.fields != null && item.fields.length > 0) {\n if (\n item.template_type.indexOf(\"login.\") === 0 ||\n item.template_type.indexOf(\"password.\") === 0\n ) {\n this.processLogin(cipher, item.fields);\n } else if (item.template_type.indexOf(\"creditcard.\") === 0) {\n this.processCard(cipher, item.fields);\n } else if (\n item.template_type.indexOf(\"identity.\") < 0 &&\n item.fields.some((f: any) => f.type === \"password\" && !this.isNullOrWhitespace(f.value))\n ) {\n this.processLogin(cipher, item.fields);\n } else {\n this.processNote(cipher, item.fields);\n }\n }\n\n cipher.notes += \"\\n\" + this.getValueOrDefault(item.note, \"\");\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private processLogin(cipher: CipherView, fields: any[]) {\n const urls: string[] = [];\n fields.forEach((field: any) => {\n if (this.isNullOrWhitespace(field.value) || field.type === \"section\") {\n return;\n }\n\n if (\n (field.type === \"username\" || field.type === \"email\") &&\n this.isNullOrWhitespace(cipher.login.username)\n ) {\n cipher.login.username = field.value;\n } else if (field.type === \"password\" && this.isNullOrWhitespace(cipher.login.password)) {\n cipher.login.password = field.value;\n } else if (field.type === \"totp\" && this.isNullOrWhitespace(cipher.login.totp)) {\n cipher.login.totp = field.value;\n } else if (field.type === \"url\") {\n urls.push(field.value);\n } else {\n this.processKvp(\n cipher,\n field.label,\n field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text\n );\n }\n });\n cipher.login.uris = this.makeUriArray(urls);\n }\n\n private processCard(cipher: CipherView, fields: any[]) {\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n fields.forEach((field: any) => {\n if (\n this.isNullOrWhitespace(field.value) ||\n field.type === \"section\" ||\n field.type === \"ccType\"\n ) {\n return;\n }\n\n if (field.type === \"ccName\" && this.isNullOrWhitespace(cipher.card.cardholderName)) {\n cipher.card.cardholderName = field.value;\n } else if (field.type === \"ccNumber\" && this.isNullOrWhitespace(cipher.card.number)) {\n cipher.card.number = field.value;\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n } else if (field.type === \"ccCvc\" && this.isNullOrWhitespace(cipher.card.code)) {\n cipher.card.code = field.value;\n } else if (field.type === \"ccExpiry\" && this.isNullOrWhitespace(cipher.card.expYear)) {\n if (!this.setCardExpiration(cipher, field.value)) {\n this.processKvp(\n cipher,\n field.label,\n field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text\n );\n }\n } else {\n this.processKvp(\n cipher,\n field.label,\n field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text\n );\n }\n });\n }\n\n private processNote(cipher: CipherView, fields: any[]) {\n fields.forEach((field: any) => {\n if (this.isNullOrWhitespace(field.value) || field.type === \"section\") {\n return;\n }\n this.processKvp(\n cipher,\n field.label,\n field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text\n );\n });\n }\n\n private buildFolderTree(folders: any[]): any[] {\n if (folders == null) {\n return [];\n }\n const folderTree: any[] = [];\n const map = new Map([]);\n folders.forEach((obj: any) => {\n map.set(obj.uuid, obj);\n obj.children = [];\n });\n folders.forEach((obj: any) => {\n if (obj.parent_uuid != null && obj.parent_uuid !== \"\" && map.has(obj.parent_uuid)) {\n map.get(obj.parent_uuid).children.push(obj);\n } else {\n folderTree.push(obj);\n }\n });\n return folderTree;\n }\n\n private flattenFolderTree(titlePrefix: string, tree: any[], map: Map) {\n if (tree == null) {\n return;\n }\n tree.forEach((f: any) => {\n if (f.title != null && f.title.trim() !== \"\") {\n let title = f.title.trim();\n if (titlePrefix != null && titlePrefix.trim() !== \"\") {\n title = titlePrefix + \"/\" + title;\n }\n map.set(f.uuid, title);\n if (f.children != null && f.children.length !== 0) {\n this.flattenFolderTree(title, f.children, map);\n }\n }\n });\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class FirefoxCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results\n .filter((value) => {\n return value.url !== \"chrome://FirefoxAccounts\";\n })\n .forEach((value) => {\n const cipher = this.initLoginCipher();\n const url = this.getValueOrDefault(value.url, this.getValueOrDefault(value.hostname));\n cipher.name = this.getValueOrDefault(this.nameFromUrl(url), \"--\");\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class FSecureFskImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.data == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n for (const key in results.data) {\n // eslint-disable-next-line\n if (!results.data.hasOwnProperty(key)) {\n continue;\n }\n\n const value = results.data[key];\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.service);\n cipher.notes = this.getValueOrDefault(value.notes);\n\n if (value.style === \"website\" || value.style === \"globe\") {\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n } else if (value.style === \"creditcard\") {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.username);\n cipher.card.number = this.getValueOrDefault(value.creditNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.creditCvv);\n if (!this.isNullOrWhitespace(value.creditExpiry)) {\n if (!this.setCardExpiration(cipher, value.creditExpiry)) {\n this.processKvp(cipher, \"Expiration\", value.creditExpiry);\n }\n }\n if (!this.isNullOrWhitespace(value.password)) {\n this.processKvp(cipher, \"PIN\", value.password);\n }\n } else {\n continue;\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class GnomeJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || Object.keys(results).length === 0) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n for (const keyRing in results) {\n if (\n !results.hasOwnProperty(keyRing) || // eslint-disable-line\n this.isNullOrWhitespace(keyRing) ||\n results[keyRing].length === 0\n ) {\n continue;\n }\n\n results[keyRing].forEach((value: any) => {\n if (\n this.isNullOrWhitespace(value.display_name) ||\n value.display_name.indexOf(\"http\") !== 0\n ) {\n return;\n }\n\n this.processFolder(result, keyRing);\n const cipher = this.initLoginCipher();\n cipher.name = value.display_name.replace(\"http://\", \"\").replace(\"https://\", \"\");\n if (cipher.name.length > 30) {\n cipher.name = cipher.name.substring(0, 30);\n }\n cipher.login.password = this.getValueOrDefault(value.secret);\n cipher.login.uris = this.makeUriArray(value.display_name);\n\n if (value.attributes != null) {\n cipher.login.username =\n value.attributes != null\n ? this.getValueOrDefault(value.attributes.username_value)\n : null;\n for (const attr in value.attributes) {\n if (\n !value.attributes.hasOwnProperty(attr) || // eslint-disable-line\n attr === \"username_value\" ||\n attr === \"xdg:schema\"\n ) {\n continue;\n }\n this.processKvp(cipher, attr, value.attributes[attr]);\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","export class ImportError extends Error {\n constructor(message?: string, public passwordRequired: boolean = false) {\n super(message);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nconst NotesHeader = \"Notes\\n\\n\";\nconst ApplicationsHeader = \"Applications\\n\\n\";\nconst WebsitesHeader = \"Websites\\n\\n\";\nconst Delimiter = \"\\n---\\n\";\n\nexport class KasperskyTxtImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n\n let notesData: string;\n let applicationsData: string;\n let websitesData: string;\n let workingData = this.splitNewLine(data).join(\"\\n\");\n\n if (workingData.indexOf(NotesHeader) !== -1) {\n const parts = workingData.split(NotesHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n notesData = parts[1];\n }\n }\n if (workingData.indexOf(ApplicationsHeader) !== -1) {\n const parts = workingData.split(ApplicationsHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n applicationsData = parts[1];\n }\n }\n if (workingData.indexOf(WebsitesHeader) === 0) {\n const parts = workingData.split(WebsitesHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n websitesData = parts[1];\n }\n }\n\n const notes = this.parseDataCategory(notesData);\n const applications = this.parseDataCategory(applicationsData);\n const websites = this.parseDataCategory(websitesData);\n\n notes.forEach((n) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(n.get(\"Name\"));\n cipher.notes = this.getValueOrDefault(n.get(\"Text\"));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n websites.concat(applications).forEach((w) => {\n const cipher = this.initLoginCipher();\n const nameKey = w.has(\"Website name\") ? \"Website name\" : \"Application\";\n cipher.name = this.getValueOrDefault(w.get(nameKey), \"\");\n if (!this.isNullOrWhitespace(w.get(\"Login name\"))) {\n if (!this.isNullOrWhitespace(cipher.name)) {\n cipher.name += \": \";\n }\n cipher.name += w.get(\"Login name\");\n }\n cipher.notes = this.getValueOrDefault(w.get(\"Comment\"));\n if (w.has(\"Website URL\")) {\n cipher.login.uris = this.makeUriArray(w.get(\"Website URL\"));\n }\n cipher.login.username = this.getValueOrDefault(w.get(\"Login\"));\n cipher.login.password = this.getValueOrDefault(w.get(\"Password\"));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private parseDataCategory(data: string): Map[] {\n if (this.isNullOrWhitespace(data) || data.indexOf(Delimiter) === -1) {\n return [];\n }\n const items: Map[] = [];\n data.split(Delimiter).forEach((p) => {\n if (p.indexOf(\"\\n\") === -1) {\n return;\n }\n const item = new Map();\n let itemComment: string;\n let itemCommentKey: string;\n p.split(\"\\n\").forEach((l) => {\n if (itemComment != null) {\n itemComment += \"\\n\" + l;\n return;\n }\n const colonIndex = l.indexOf(\":\");\n let key: string;\n let val: string;\n if (colonIndex === -1) {\n return;\n } else {\n key = l.substring(0, colonIndex);\n if (l.length > colonIndex + 1) {\n val = l.substring(colonIndex + 2);\n }\n }\n if (key != null) {\n item.set(key, val);\n }\n if (key === \"Comment\" || key === \"Text\") {\n itemComment = val;\n itemCommentKey = key;\n }\n });\n if (itemComment != null && itemCommentKey != null) {\n item.set(itemCommentKey, itemComment);\n }\n if (item.size === 0) {\n return;\n }\n items.push(item);\n });\n return items;\n }\n}\n","import { FieldType } from \"../enums/fieldType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { FolderView } from \"../models/view/folderView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class KeePass2XmlImporter extends BaseImporter implements Importer {\n result = new ImportResult();\n\n parse(data: string): Promise {\n const doc = this.parseXml(data);\n if (doc == null) {\n this.result.success = false;\n return Promise.resolve(this.result);\n }\n\n const rootGroup = doc.querySelector(\"KeePassFile > Root > Group\");\n if (rootGroup == null) {\n this.result.errorMessage = \"Missing `KeePassFile > Root > Group` node.\";\n this.result.success = false;\n return Promise.resolve(this.result);\n }\n\n this.traverse(rootGroup, true, \"\");\n\n if (this.organization) {\n this.moveFoldersToCollections(this.result);\n }\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n traverse(node: Element, isRootNode: boolean, groupPrefixName: string) {\n const folderIndex = this.result.folders.length;\n let groupName = groupPrefixName;\n\n if (!isRootNode) {\n if (groupName !== \"\") {\n groupName += \"/\";\n }\n const nameEl = this.querySelectorDirectChild(node, \"Name\");\n groupName += nameEl == null ? \"-\" : nameEl.textContent;\n const folder = new FolderView();\n folder.name = groupName;\n this.result.folders.push(folder);\n }\n\n this.querySelectorAllDirectChild(node, \"Entry\").forEach((entry) => {\n const cipherIndex = this.result.ciphers.length;\n\n const cipher = this.initLoginCipher();\n this.querySelectorAllDirectChild(entry, \"String\").forEach((entryString) => {\n const valueEl = this.querySelectorDirectChild(entryString, \"Value\");\n const value = valueEl != null ? valueEl.textContent : null;\n if (this.isNullOrWhitespace(value)) {\n return;\n }\n const keyEl = this.querySelectorDirectChild(entryString, \"Key\");\n const key = keyEl != null ? keyEl.textContent : null;\n\n if (key === \"URL\") {\n cipher.login.uris = this.makeUriArray(value);\n } else if (key === \"UserName\") {\n cipher.login.username = value;\n } else if (key === \"Password\") {\n cipher.login.password = value;\n } else if (key === \"otp\") {\n cipher.login.totp = value.replace(\"key=\", \"\");\n } else if (key === \"Title\") {\n cipher.name = value;\n } else if (key === \"Notes\") {\n cipher.notes += value + \"\\n\";\n } else {\n let type = FieldType.Text;\n const attrs = valueEl.attributes as any;\n if (\n attrs.length > 0 &&\n attrs.ProtectInMemory != null &&\n attrs.ProtectInMemory.value === \"True\"\n ) {\n type = FieldType.Hidden;\n }\n this.processKvp(cipher, key, value, type);\n }\n });\n\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n\n if (!isRootNode) {\n this.result.folderRelationships.push([cipherIndex, folderIndex]);\n }\n });\n\n this.querySelectorAllDirectChild(node, \"Group\").forEach((group) => {\n this.traverse(group, false, groupName);\n });\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class KeePassXCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (this.isNullOrWhitespace(value.Title)) {\n return;\n }\n\n value.Group =\n !this.isNullOrWhitespace(value.Group) && value.Group.startsWith(\"Root/\")\n ? value.Group.replace(\"Root/\", \"\")\n : value.Group;\n const groupName = !this.isNullOrWhitespace(value.Group) ? value.Group : null;\n this.processFolder(result, groupName);\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.name = this.getValueOrDefault(value.Title, \"--\");\n cipher.login.username = this.getValueOrDefault(value.Username);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../../models/domain/importResult\";\nimport { BaseImporter } from \"../baseImporter\";\nimport { Importer } from \"../importer\";\n\nexport class KeeperCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length < 6) {\n return;\n }\n\n this.processFolder(result, value[0]);\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[5]) + \"\\n\";\n cipher.name = this.getValueOrDefault(value[1], \"--\");\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n\n if (value.length > 7) {\n // we have some custom fields.\n for (let i = 7; i < value.length; i = i + 2) {\n this.processKvp(cipher, value[i], value[i + 1]);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { FolderView } from \"../models/view/folderView\";\nimport { IdentityView } from \"../models/view/identityView\";\nimport { LoginView } from \"../models/view/loginView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class LastPassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipherIndex = result.ciphers.length;\n let folderIndex = result.folders.length;\n let grouping = value.grouping;\n if (grouping != null) {\n // eslint-disable-next-line\n grouping = grouping.replace(/\\\\/g, \"/\").replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, \"\");\n }\n const hasFolder = this.getValueOrDefault(grouping, \"(none)\") !== \"(none)\";\n let addFolder = hasFolder;\n\n if (hasFolder) {\n for (let i = 0; i < result.folders.length; i++) {\n if (result.folders[i].name === grouping) {\n addFolder = false;\n folderIndex = i;\n break;\n }\n }\n }\n\n const cipher = this.buildBaseCipher(value);\n if (cipher.type === CipherType.Login) {\n cipher.notes = this.getValueOrDefault(value.extra);\n cipher.login = new LoginView();\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.totp = this.getValueOrDefault(value.totp);\n } else if (cipher.type === CipherType.SecureNote) {\n this.parseSecureNote(value, cipher);\n } else if (cipher.type === CipherType.Card) {\n cipher.card = this.parseCard(value);\n cipher.notes = this.getValueOrDefault(value.notes);\n } else if (cipher.type === CipherType.Identity) {\n cipher.identity = this.parseIdentity(value);\n cipher.notes = this.getValueOrDefault(value.notes);\n if (!this.isNullOrWhitespace(value.ccnum)) {\n // there is a card on this identity too\n const cardCipher = this.buildBaseCipher(value);\n cardCipher.identity = null;\n cardCipher.type = CipherType.Card;\n cardCipher.card = this.parseCard(value);\n result.ciphers.push(cardCipher);\n }\n }\n\n result.ciphers.push(cipher);\n\n if (addFolder) {\n const f = new FolderView();\n f.name = grouping;\n result.folders.push(f);\n }\n if (hasFolder) {\n result.folderRelationships.push([cipherIndex, folderIndex]);\n }\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private buildBaseCipher(value: any) {\n const cipher = new CipherView();\n // eslint-disable-next-line\n if (value.hasOwnProperty(\"profilename\") && value.hasOwnProperty(\"profilelanguage\")) {\n // form fill\n cipher.favorite = false;\n cipher.name = this.getValueOrDefault(value.profilename, \"--\");\n cipher.type = CipherType.Card;\n\n if (\n !this.isNullOrWhitespace(value.title) ||\n !this.isNullOrWhitespace(value.firstname) ||\n !this.isNullOrWhitespace(value.lastname) ||\n !this.isNullOrWhitespace(value.address1) ||\n !this.isNullOrWhitespace(value.phone) ||\n !this.isNullOrWhitespace(value.username) ||\n !this.isNullOrWhitespace(value.email)\n ) {\n cipher.type = CipherType.Identity;\n }\n } else {\n // site or secure note\n cipher.favorite = !this.organization && this.getValueOrDefault(value.fav, \"0\") === \"1\";\n cipher.name = this.getValueOrDefault(value.name, \"--\");\n cipher.type = value.url === \"http://sn\" ? CipherType.SecureNote : CipherType.Login;\n }\n return cipher;\n }\n\n private parseCard(value: any): CardView {\n const card = new CardView();\n card.cardholderName = this.getValueOrDefault(value.ccname);\n card.number = this.getValueOrDefault(value.ccnum);\n card.code = this.getValueOrDefault(value.cccsc);\n card.brand = this.getCardBrand(value.ccnum);\n\n if (!this.isNullOrWhitespace(value.ccexp) && value.ccexp.indexOf(\"-\") > -1) {\n const ccexpParts = (value.ccexp as string).split(\"-\");\n if (ccexpParts.length > 1) {\n card.expYear = ccexpParts[0];\n card.expMonth = ccexpParts[1];\n if (card.expMonth.length === 2 && card.expMonth[0] === \"0\") {\n card.expMonth = card.expMonth[1];\n }\n }\n }\n\n return card;\n }\n\n private parseIdentity(value: any): IdentityView {\n const identity = new IdentityView();\n identity.title = this.getValueOrDefault(value.title);\n identity.firstName = this.getValueOrDefault(value.firstname);\n identity.middleName = this.getValueOrDefault(value.middlename);\n identity.lastName = this.getValueOrDefault(value.lastname);\n identity.username = this.getValueOrDefault(value.username);\n identity.company = this.getValueOrDefault(value.company);\n identity.ssn = this.getValueOrDefault(value.ssn);\n identity.address1 = this.getValueOrDefault(value.address1);\n identity.address2 = this.getValueOrDefault(value.address2);\n identity.address3 = this.getValueOrDefault(value.address3);\n identity.city = this.getValueOrDefault(value.city);\n identity.state = this.getValueOrDefault(value.state);\n identity.postalCode = this.getValueOrDefault(value.zip);\n identity.country = this.getValueOrDefault(value.country);\n identity.email = this.getValueOrDefault(value.email);\n identity.phone = this.getValueOrDefault(value.phone);\n\n if (!this.isNullOrWhitespace(identity.title)) {\n identity.title = identity.title.charAt(0).toUpperCase() + identity.title.slice(1);\n }\n\n return identity;\n }\n\n private parseSecureNote(value: any, cipher: CipherView) {\n const extraParts = this.splitNewLine(value.extra);\n let processedNote = false;\n\n if (extraParts.length) {\n const typeParts = extraParts[0].split(\":\");\n if (\n typeParts.length > 1 &&\n typeParts[0] === \"NoteType\" &&\n (typeParts[1] === \"Credit Card\" || typeParts[1] === \"Address\")\n ) {\n if (typeParts[1] === \"Credit Card\") {\n const mappedData = this.parseSecureNoteMapping(cipher, extraParts, {\n Number: \"number\",\n \"Name on Card\": \"cardholderName\",\n \"Security Code\": \"code\",\n // LP provides date in a format like 'June,2020'\n // Store in expMonth, then parse and modify\n \"Expiration Date\": \"expMonth\",\n });\n\n if (this.isNullOrWhitespace(mappedData.expMonth) || mappedData.expMonth === \",\") {\n // No expiration data\n mappedData.expMonth = undefined;\n } else {\n const [monthString, year] = mappedData.expMonth.split(\",\");\n // Parse month name into number\n if (!this.isNullOrWhitespace(monthString)) {\n const month = new Date(Date.parse(monthString.trim() + \" 1, 2012\")).getMonth() + 1;\n if (isNaN(month)) {\n mappedData.expMonth = undefined;\n } else {\n mappedData.expMonth = month.toString();\n }\n } else {\n mappedData.expMonth = undefined;\n }\n if (!this.isNullOrWhitespace(year)) {\n mappedData.expYear = year;\n }\n }\n\n cipher.type = CipherType.Card;\n cipher.card = mappedData;\n } else if (typeParts[1] === \"Address\") {\n const mappedData = this.parseSecureNoteMapping(cipher, extraParts, {\n Title: \"title\",\n \"First Name\": \"firstName\",\n \"Last Name\": \"lastName\",\n \"Middle Name\": \"middleName\",\n Company: \"company\",\n \"Address 1\": \"address1\",\n \"Address 2\": \"address2\",\n \"Address 3\": \"address3\",\n \"City / Town\": \"city\",\n State: \"state\",\n \"Zip / Postal Code\": \"postalCode\",\n Country: \"country\",\n \"Email Address\": \"email\",\n Username: \"username\",\n });\n cipher.type = CipherType.Identity;\n cipher.identity = mappedData;\n }\n processedNote = true;\n }\n }\n\n if (!processedNote) {\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.notes = this.getValueOrDefault(value.extra);\n }\n }\n\n private parseSecureNoteMapping(cipher: CipherView, extraParts: string[], map: any): T {\n const dataObj: any = {};\n\n let processingNotes = false;\n extraParts.forEach((extraPart) => {\n let key: string = null;\n let val: string = null;\n if (!processingNotes) {\n if (this.isNullOrWhitespace(extraPart)) {\n return;\n }\n const colonIndex = extraPart.indexOf(\":\");\n if (colonIndex === -1) {\n key = extraPart;\n } else {\n key = extraPart.substring(0, colonIndex);\n if (extraPart.length > colonIndex) {\n val = extraPart.substring(colonIndex + 1);\n }\n }\n if (this.isNullOrWhitespace(key) || this.isNullOrWhitespace(val) || key === \"NoteType\") {\n return;\n }\n }\n\n if (processingNotes) {\n cipher.notes += \"\\n\" + extraPart;\n } else if (key === \"Notes\") {\n if (!this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes += \"\\n\" + val;\n } else {\n cipher.notes = val;\n }\n processingNotes = true;\n // eslint-disable-next-line\n } else if (map.hasOwnProperty(key)) {\n dataObj[map[key]] = val;\n } else {\n this.processKvp(cipher, key, val);\n }\n });\n\n return dataObj;\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class LogMeOnceCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length < 4) {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], \"--\");\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[1]);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class MeldiumCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.DisplayName, \"--\");\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.login.username = this.getValueOrDefault(value.UserName);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.Url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class MSecureCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length < 3) {\n return;\n }\n\n const folderName =\n this.getValueOrDefault(value[0], \"Unassigned\") !== \"Unassigned\" ? value[0] : null;\n this.processFolder(result, folderName);\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[2], \"--\");\n\n if (value[1] === \"Web Logins\" || value[1] === \"Login\") {\n cipher.login.uris = this.makeUriArray(value[4]);\n cipher.login.username = this.getValueOrDefault(value[5]);\n cipher.login.password = this.getValueOrDefault(value[6]);\n cipher.notes = !this.isNullOrWhitespace(value[3]) ? value[3].split(\"\\\\n\").join(\"\\n\") : null;\n } else if (value.length > 3) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n for (let i = 3; i < value.length; i++) {\n if (!this.isNullOrWhitespace(value[i])) {\n cipher.notes += value[i] + \"\\n\";\n }\n }\n }\n\n if (!this.isNullOrWhitespace(value[1]) && cipher.type !== CipherType.Login) {\n cipher.name = value[1] + \": \" + cipher.name;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { IdentityView } from \"../models/view/identityView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nconst mappedBaseColumns = [\"nickname\", \"additionalInfo\"];\nconst _mappedUserAccountColumns = new Set(\n mappedBaseColumns.concat([\"url\", \"username\", \"password\", \"twofaSecret\"])\n);\nconst _mappedCreditCardColumns = new Set(\n mappedBaseColumns.concat([\"cardNumber\", \"cardName\", \"exp_month\", \"exp_year\", \"cvv\"])\n);\n\nconst _mappedIdentityColumns = new Set(\n mappedBaseColumns.concat([\n \"title\",\n \"firstName\",\n \"middleName\",\n \"lastName\",\n \"email\",\n \"firstAddressLine\",\n \"secondAddressLine\",\n \"city\",\n \"country\",\n \"zipCode\",\n ])\n);\n\nconst _mappedIdCardColumns = new Set(mappedBaseColumns.concat([\"idName\", \"idNumber\", \"idCountry\"]));\n\nconst _mappedTwoFaColumns = new Set(mappedBaseColumns.concat([\"authToken\"]));\n\nconst _mappedUserNoteColumns = new Set(mappedBaseColumns.concat([\"content\"]));\n\nexport class MykiCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.nickname, \"--\");\n cipher.notes = this.getValueOrDefault(value.additionalInfo);\n\n if (value.url !== undefined) {\n // Accounts\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.totp = this.getValueOrDefault(value.twofaSecret);\n\n this.importUnmappedFields(cipher, value, _mappedUserAccountColumns);\n } else if (value.authToken !== undefined) {\n // TwoFA\n cipher.login.totp = this.getValueOrDefault(value.authToken);\n\n this.importUnmappedFields(cipher, value, _mappedTwoFaColumns);\n } else if (value.cardNumber !== undefined) {\n // Cards\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n cipher.card.cardholderName = this.getValueOrDefault(value.cardName);\n cipher.card.number = this.getValueOrDefault(value.cardNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.expMonth = this.getValueOrDefault(value.exp_month);\n cipher.card.expYear = this.getValueOrDefault(value.exp_year);\n cipher.card.code = this.getValueOrDefault(value.cvv);\n\n this.importUnmappedFields(cipher, value, _mappedCreditCardColumns);\n } else if (value.firstName !== undefined) {\n // Identities\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.identity.title = this.getValueOrDefault(value.title);\n cipher.identity.firstName = this.getValueOrDefault(value.firstName);\n cipher.identity.middleName = this.getValueOrDefault(value.middleName);\n cipher.identity.lastName = this.getValueOrDefault(value.lastName);\n cipher.identity.phone = this.getValueOrDefault(value.number);\n cipher.identity.email = this.getValueOrDefault(value.email);\n cipher.identity.address1 = this.getValueOrDefault(value.firstAddressLine);\n cipher.identity.address2 = this.getValueOrDefault(value.secondAddressLine);\n cipher.identity.city = this.getValueOrDefault(value.city);\n cipher.identity.country = this.getValueOrDefault(value.country);\n cipher.identity.postalCode = this.getValueOrDefault(value.zipCode);\n\n this.importUnmappedFields(cipher, value, _mappedIdentityColumns);\n } else if (value.idType !== undefined) {\n // IdCards\n\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n this.processFullName(cipher, value.idName);\n cipher.identity.country = this.getValueOrDefault(value.idCountry);\n\n switch (value.idType) {\n // case \"Driver's License\":\n // case \"ID Card\":\n // case \"Outdoor License\":\n // case \"Software License\":\n // case \"Tax Number\":\n // case \"Bank Account\":\n // case \"Insurance Card\":\n // case \"Health Card\":\n // case \"Membership\":\n // case \"Database\":\n // case \"Reward Program\":\n // case \"Tour Visa\":\n case \"Passport\":\n cipher.identity.passportNumber = value.idNumber;\n break;\n case \"Social Security\":\n cipher.identity.ssn = value.idNumber;\n break;\n default:\n cipher.identity.licenseNumber = value.idNumber;\n break;\n }\n\n this.importUnmappedFields(cipher, value, _mappedIdCardColumns);\n } else if (value.content !== undefined) {\n // Notes\n cipher.secureNote = new SecureNoteView();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.notes = this.getValueOrDefault(value.content);\n\n this.importUnmappedFields(cipher, value, _mappedUserNoteColumns);\n } else {\n return;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n importUnmappedFields(cipher: CipherView, row: any, mappedValues: Set) {\n const unmappedFields = Object.keys(row).filter((x) => !mappedValues.has(x));\n unmappedFields.forEach((key) => {\n const item = row as any;\n this.processKvp(cipher, key, item[key]);\n });\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { LoginView } from \"../models/view/loginView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\ntype nodePassCsvParsed = {\n name: string;\n url: string;\n username: string;\n password: string;\n note: string;\n cardholdername: string;\n cardnumber: string;\n cvc: string;\n expirydate: string;\n zipcode: string;\n folder: string;\n full_name: string;\n phone_number: string;\n email: string;\n address1: string;\n address2: string;\n city: string;\n country: string;\n state: string;\n};\n\nexport class NordPassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results: nodePassCsvParsed[] = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((record) => {\n const recordType = this.evaluateType(record);\n if (recordType === undefined) {\n return;\n }\n\n if (!this.organization) {\n this.processFolder(result, record.folder);\n }\n\n const cipher = new CipherView();\n cipher.name = this.getValueOrDefault(record.name, \"--\");\n cipher.notes = this.getValueOrDefault(record.note);\n\n switch (recordType) {\n case CipherType.Login:\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n cipher.login.username = this.getValueOrDefault(record.username);\n cipher.login.password = this.getValueOrDefault(record.password);\n cipher.login.uris = this.makeUriArray(record.url);\n break;\n case CipherType.Card:\n cipher.type = CipherType.Card;\n cipher.card.cardholderName = this.getValueOrDefault(record.cardholdername);\n cipher.card.number = this.getValueOrDefault(record.cardnumber);\n cipher.card.code = this.getValueOrDefault(record.cvc);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n this.setCardExpiration(cipher, record.expirydate);\n break;\n\n case CipherType.Identity:\n cipher.type = CipherType.Identity;\n\n this.processFullName(cipher, this.getValueOrDefault(record.full_name));\n cipher.identity.address1 = this.getValueOrDefault(record.address1);\n cipher.identity.address2 = this.getValueOrDefault(record.address2);\n cipher.identity.city = this.getValueOrDefault(record.city);\n cipher.identity.state = this.getValueOrDefault(record.state);\n cipher.identity.postalCode = this.getValueOrDefault(record.zipcode);\n cipher.identity.country = this.getValueOrDefault(record.country);\n if (cipher.identity.country != null) {\n cipher.identity.country = cipher.identity.country.toUpperCase();\n }\n cipher.identity.email = this.getValueOrDefault(record.email);\n cipher.identity.phone = this.getValueOrDefault(record.phone_number);\n break;\n case CipherType.SecureNote:\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n break;\n default:\n break;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private evaluateType(record: nodePassCsvParsed): CipherType {\n if (!this.isNullOrWhitespace(record.username)) {\n return CipherType.Login;\n }\n\n if (!this.isNullOrWhitespace(record.cardnumber)) {\n return CipherType.Card;\n }\n\n if (!this.isNullOrWhitespace(record.full_name)) {\n return CipherType.Identity;\n }\n\n if (!this.isNullOrWhitespace(record.note)) {\n return CipherType.SecureNote;\n }\n\n return undefined;\n }\n}\n","import { CipherView } from \"../../models/view/cipherView\";\n\nexport class CipherImportContext {\n lowerProperty: string;\n constructor(public importRecord: any, public property: string, public cipher: CipherView) {\n this.lowerProperty = property.toLowerCase();\n }\n}\n","import { CipherType } from \"../../enums/cipherType\";\nimport { FieldType } from \"../../enums/fieldType\";\nimport { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { ImportResult } from \"../../models/domain/importResult\";\nimport { CardView } from \"../../models/view/cardView\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { IdentityView } from \"../../models/view/identityView\";\nimport { PasswordHistoryView } from \"../../models/view/passwordHistoryView\";\nimport { SecureNoteView } from \"../../models/view/secureNoteView\";\nimport { BaseImporter } from \"../baseImporter\";\nimport { Importer } from \"../importer\";\n\nexport class OnePassword1PifImporter extends BaseImporter implements Importer {\n result = new ImportResult();\n\n parse(data: string): Promise {\n data.split(this.newLineRegex).forEach((line) => {\n if (this.isNullOrWhitespace(line) || line[0] !== \"{\") {\n return;\n }\n const item = JSON.parse(line);\n if (item.trashed === true) {\n return;\n }\n const cipher = this.initLoginCipher();\n\n if (this.isNullOrWhitespace(item.hmac)) {\n this.processStandardItem(item, cipher);\n } else {\n this.processWinOpVaultItem(item, cipher);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n private processWinOpVaultItem(item: any, cipher: CipherView) {\n if (item.overview != null) {\n cipher.name = this.getValueOrDefault(item.overview.title);\n if (item.overview.URLs != null) {\n const urls: string[] = [];\n item.overview.URLs.forEach((url: any) => {\n if (!this.isNullOrWhitespace(url.u)) {\n urls.push(url.u);\n }\n });\n cipher.login.uris = this.makeUriArray(urls);\n }\n }\n\n if (item.details != null) {\n if (item.details.passwordHistory != null) {\n this.parsePasswordHistory(item.details.passwordHistory, cipher);\n }\n if (\n !this.isNullOrWhitespace(item.details.ccnum) ||\n !this.isNullOrWhitespace(item.details.cvv)\n ) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n } else if (\n !this.isNullOrWhitespace(item.details.firstname) ||\n !this.isNullOrWhitespace(item.details.address1)\n ) {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n }\n if (cipher.type === CipherType.Login && !this.isNullOrWhitespace(item.details.password)) {\n cipher.login.password = item.details.password;\n }\n if (!this.isNullOrWhitespace(item.details.notesPlain)) {\n cipher.notes = item.details.notesPlain.split(this.newLineRegex).join(\"\\n\") + \"\\n\";\n }\n if (item.details.fields != null) {\n this.parseFields(item.details.fields, cipher, \"designation\", \"value\", \"name\");\n }\n if (item.details.sections != null) {\n item.details.sections.forEach((section: any) => {\n if (section.fields != null) {\n this.parseFields(section.fields, cipher, \"n\", \"v\", \"t\");\n }\n });\n }\n }\n }\n\n private processStandardItem(item: any, cipher: CipherView) {\n cipher.favorite = item.openContents && item.openContents.faveIndex ? true : false;\n cipher.name = this.getValueOrDefault(item.title);\n\n if (item.typeName === \"securenotes.SecureNote\") {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n } else if (item.typeName === \"wallet.financial.CreditCard\") {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n } else if (item.typeName === \"identities.Identity\") {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n } else {\n cipher.login.uris = this.makeUriArray(item.location);\n }\n\n if (item.secureContents != null) {\n if (item.secureContents.passwordHistory != null) {\n this.parsePasswordHistory(item.secureContents.passwordHistory, cipher);\n }\n if (!this.isNullOrWhitespace(item.secureContents.notesPlain)) {\n cipher.notes = item.secureContents.notesPlain.split(this.newLineRegex).join(\"\\n\") + \"\\n\";\n }\n if (cipher.type === CipherType.Login) {\n if (!this.isNullOrWhitespace(item.secureContents.password)) {\n cipher.login.password = item.secureContents.password;\n }\n if (item.secureContents.URLs != null) {\n const urls: string[] = [];\n item.secureContents.URLs.forEach((u: any) => {\n if (!this.isNullOrWhitespace(u.url)) {\n urls.push(u.url);\n }\n });\n if (urls.length > 0) {\n cipher.login.uris = this.makeUriArray(urls);\n }\n }\n }\n if (item.secureContents.fields != null) {\n this.parseFields(item.secureContents.fields, cipher, \"designation\", \"value\", \"name\");\n }\n if (item.secureContents.sections != null) {\n item.secureContents.sections.forEach((section: any) => {\n if (section.fields != null) {\n this.parseFields(section.fields, cipher, \"n\", \"v\", \"t\");\n }\n });\n }\n }\n }\n\n private parsePasswordHistory(items: any[], cipher: CipherView) {\n const maxSize = items.length > 5 ? 5 : items.length;\n cipher.passwordHistory = items\n .filter((h: any) => !this.isNullOrWhitespace(h.value) && h.time != null)\n .sort((a, b) => b.time - a.time)\n .slice(0, maxSize)\n .map((h: any) => {\n const ph = new PasswordHistoryView();\n ph.password = h.value;\n ph.lastUsedDate = new Date((\"\" + h.time).length >= 13 ? h.time : h.time * 1000);\n return ph;\n });\n }\n\n private parseFields(\n fields: any[],\n cipher: CipherView,\n designationKey: string,\n valueKey: string,\n nameKey: string\n ) {\n fields.forEach((field: any) => {\n if (field[valueKey] == null || field[valueKey].toString().trim() === \"\") {\n return;\n }\n\n // TODO: when date FieldType exists, store this as a date field type instead of formatted Text if k is 'date'\n const fieldValue =\n field.k === \"date\"\n ? new Date(field[valueKey] * 1000).toUTCString()\n : field[valueKey].toString();\n const fieldDesignation =\n field[designationKey] != null ? field[designationKey].toString() : null;\n\n if (cipher.type === CipherType.Login) {\n if (this.isNullOrWhitespace(cipher.login.username) && fieldDesignation === \"username\") {\n cipher.login.username = fieldValue;\n return;\n } else if (\n this.isNullOrWhitespace(cipher.login.password) &&\n fieldDesignation === \"password\"\n ) {\n cipher.login.password = fieldValue;\n return;\n } else if (\n this.isNullOrWhitespace(cipher.login.totp) &&\n fieldDesignation != null &&\n fieldDesignation.startsWith(\"TOTP_\")\n ) {\n cipher.login.totp = fieldValue;\n return;\n }\n } else if (cipher.type === CipherType.Card) {\n if (this.isNullOrWhitespace(cipher.card.number) && fieldDesignation === \"ccnum\") {\n cipher.card.number = fieldValue;\n cipher.card.brand = this.getCardBrand(fieldValue);\n return;\n } else if (this.isNullOrWhitespace(cipher.card.code) && fieldDesignation === \"cvv\") {\n cipher.card.code = fieldValue;\n return;\n } else if (\n this.isNullOrWhitespace(cipher.card.cardholderName) &&\n fieldDesignation === \"cardholder\"\n ) {\n cipher.card.cardholderName = fieldValue;\n return;\n } else if (\n this.isNullOrWhitespace(cipher.card.expiration) &&\n fieldDesignation === \"expiry\" &&\n fieldValue.length === 6\n ) {\n cipher.card.expMonth = (fieldValue as string).substr(4, 2);\n if (cipher.card.expMonth[0] === \"0\") {\n cipher.card.expMonth = cipher.card.expMonth.substr(1, 1);\n }\n cipher.card.expYear = (fieldValue as string).substr(0, 4);\n return;\n } else if (fieldDesignation === \"type\") {\n // Skip since brand was determined from number above\n return;\n }\n } else if (cipher.type === CipherType.Identity) {\n const identity = cipher.identity;\n if (this.isNullOrWhitespace(identity.firstName) && fieldDesignation === \"firstname\") {\n identity.firstName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.lastName) && fieldDesignation === \"lastname\") {\n identity.lastName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.middleName) && fieldDesignation === \"initial\") {\n identity.middleName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.phone) && fieldDesignation === \"defphone\") {\n identity.phone = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.company) && fieldDesignation === \"company\") {\n identity.company = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.email) && fieldDesignation === \"email\") {\n identity.email = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.username) && fieldDesignation === \"username\") {\n identity.username = fieldValue;\n return;\n } else if (fieldDesignation === \"address\") {\n // fieldValue is an object casted into a string, so access the plain value instead\n const { street, city, country, zip } = field[valueKey];\n identity.address1 = this.getValueOrDefault(street);\n identity.city = this.getValueOrDefault(city);\n if (!this.isNullOrWhitespace(country)) {\n identity.country = country.toUpperCase();\n }\n identity.postalCode = this.getValueOrDefault(zip);\n return;\n }\n }\n\n const fieldName = this.isNullOrWhitespace(field[nameKey]) ? \"no_name\" : field[nameKey];\n if (\n fieldName === \"password\" &&\n cipher.passwordHistory != null &&\n cipher.passwordHistory.some((h) => h.password === fieldValue)\n ) {\n return;\n }\n\n const fieldType = field.k === \"concealed\" ? FieldType.Hidden : FieldType.Text;\n this.processKvp(cipher, fieldName, fieldValue, fieldType);\n });\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { FieldType } from \"../../enums/fieldType\";\nimport { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { ImportResult } from \"../../models/domain/importResult\";\nimport { CardView } from \"../../models/view/cardView\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { IdentityView } from \"../../models/view/identityView\";\nimport { LoginView } from \"../../models/view/loginView\";\nimport { PasswordHistoryView } from \"../../models/view/passwordHistoryView\";\nimport { SecureNoteView } from \"../../models/view/secureNoteView\";\nimport { BaseImporter } from \"../baseImporter\";\nimport { Importer } from \"../importer\";\n\nimport {\n CategoryEnum,\n Details,\n ExportData,\n FieldsEntity,\n Item,\n LoginFieldTypeEnum,\n Overview,\n PasswordHistoryEntity,\n SectionsEntity,\n UrlsEntity,\n Value,\n VaultsEntity,\n} from \"./types/onepassword1PuxImporterTypes\";\n\nexport class OnePassword1PuxImporter extends BaseImporter implements Importer {\n result = new ImportResult();\n\n parse(data: string): Promise {\n const exportData: ExportData = JSON.parse(data);\n\n const account = exportData.accounts[0];\n // TODO Add handling of multiple vaults\n // const personalVaults = account.vaults[0].filter((v) => v.attrs.type === VaultAttributeTypeEnum.Personal);\n account.vaults.forEach((vault: VaultsEntity) => {\n vault.items.forEach((item: Item) => {\n if (item.trashed === true) {\n return;\n }\n\n const cipher = this.initLoginCipher();\n\n const category = item.categoryUuid as CategoryEnum;\n switch (category) {\n case CategoryEnum.Login:\n case CategoryEnum.Database:\n case CategoryEnum.Password:\n case CategoryEnum.WirelessRouter:\n case CategoryEnum.Server:\n case CategoryEnum.API_Credential:\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n break;\n case CategoryEnum.CreditCard:\n case CategoryEnum.BankAccount:\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n break;\n case CategoryEnum.SecureNote:\n case CategoryEnum.SoftwareLicense:\n case CategoryEnum.EmailAccount:\n case CategoryEnum.MedicalRecord:\n // case CategoryEnum.Document:\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n break;\n case CategoryEnum.Identity:\n case CategoryEnum.DriversLicense:\n case CategoryEnum.OutdoorLicense:\n case CategoryEnum.Membership:\n case CategoryEnum.Passport:\n case CategoryEnum.RewardsProgram:\n case CategoryEnum.SocialSecurityNumber:\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n break;\n default:\n break;\n }\n\n cipher.favorite = item.favIndex === 1 ? true : false;\n\n this.processOverview(item.overview, cipher);\n\n this.processLoginFields(item, cipher);\n\n this.processDetails(category, item.details, cipher);\n\n this.parsePasswordHistory(item.details.passwordHistory, cipher);\n\n this.processSections(category, item.details.sections, cipher);\n\n if (!this.isNullOrWhitespace(item.details.notesPlain)) {\n cipher.notes = item.details.notesPlain.split(this.newLineRegex).join(\"\\n\") + \"\\n\";\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(this.result);\n }\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n private processOverview(overview: Overview, cipher: CipherView) {\n if (overview == null) {\n return;\n }\n\n cipher.name = this.getValueOrDefault(overview.title);\n\n if (overview.urls != null) {\n const urls: string[] = [];\n overview.urls.forEach((url: UrlsEntity) => {\n if (!this.isNullOrWhitespace(url.url)) {\n urls.push(url.url);\n }\n });\n cipher.login.uris = this.makeUriArray(urls);\n }\n\n if (overview.tags != null && overview.tags.length > 0) {\n const folderName = this.capitalize(overview.tags[0]);\n this.processFolder(this.result, folderName);\n }\n }\n\n private capitalize(inputString: string): string {\n return inputString.trim().replace(/\\w\\S*/g, (w) => w.replace(/^\\w/, (c) => c.toUpperCase()));\n }\n\n private processLoginFields(item: Item, cipher: CipherView) {\n if (item.details == null) {\n return;\n }\n\n if (item.details.loginFields == null || item.details.loginFields.length === 0) {\n return;\n }\n\n item.details.loginFields.forEach((loginField) => {\n if (loginField.designation === \"username\" && loginField.value !== \"\") {\n cipher.type = CipherType.Login;\n cipher.login.username = loginField.value;\n return;\n }\n\n if (loginField.designation === \"password\" && loginField.value !== \"\") {\n cipher.type = CipherType.Login;\n cipher.login.password = loginField.value;\n return;\n }\n\n let fieldValue = loginField.value;\n let fieldType: FieldType = FieldType.Text;\n switch (loginField.fieldType) {\n case LoginFieldTypeEnum.Password:\n fieldType = FieldType.Hidden;\n break;\n case LoginFieldTypeEnum.CheckBox:\n fieldValue = loginField.value !== \"\" ? \"true\" : \"false\";\n fieldType = FieldType.Boolean;\n break;\n default:\n break;\n }\n this.processKvp(cipher, loginField.name, fieldValue, fieldType);\n });\n }\n\n private processDetails(category: CategoryEnum, details: Details, cipher: CipherView) {\n if (category !== CategoryEnum.Password) {\n return;\n }\n\n if (details == null) {\n return;\n }\n cipher.login.password = details.password;\n }\n\n private processSections(category: CategoryEnum, sections: SectionsEntity[], cipher: CipherView) {\n if (sections == null || sections.length === 0) {\n return;\n }\n\n sections.forEach((section: SectionsEntity) => {\n if (section.fields == null) {\n return;\n }\n\n this.parseSectionFields(category, section.fields, cipher);\n });\n }\n\n private parseSectionFields(category: CategoryEnum, fields: FieldsEntity[], cipher: CipherView) {\n fields.forEach((field: FieldsEntity) => {\n const valueKey = Object.keys(field.value)[0];\n const anyField = field as any;\n\n if (\n anyField.value == null ||\n anyField.value[valueKey] == null ||\n anyField.value[valueKey] === \"\"\n ) {\n return;\n }\n\n const fieldName = this.getFieldName(field.id, field.title);\n const fieldValue = this.extractValue(field.value, valueKey);\n\n if (cipher.type === CipherType.Login) {\n if (this.fillLogin(field, fieldValue, cipher)) {\n return;\n }\n\n switch (category) {\n case CategoryEnum.Login:\n case CategoryEnum.Database:\n case CategoryEnum.EmailAccount:\n case CategoryEnum.WirelessRouter:\n break;\n\n case CategoryEnum.Server:\n if (this.isNullOrWhitespace(cipher.login.uri) && field.id === \"url\") {\n cipher.login.uris = this.makeUriArray(fieldValue);\n return;\n }\n break;\n\n case CategoryEnum.API_Credential:\n if (this.fillApiCredentials(field, fieldValue, cipher)) {\n return;\n }\n break;\n default:\n break;\n }\n } else if (cipher.type === CipherType.Card) {\n if (this.fillCreditCard(field, fieldValue, cipher)) {\n return;\n }\n\n if (category === CategoryEnum.BankAccount) {\n if (this.fillBankAccount(field, fieldValue, cipher)) {\n return;\n }\n }\n } else if (cipher.type === CipherType.Identity) {\n if (this.fillIdentity(field, fieldValue, cipher)) {\n return;\n }\n if (valueKey === \"address\") {\n // fieldValue is an object casted into a string, so access the plain value instead\n const { street, city, country, zip, state } = field.value.address;\n cipher.identity.address1 = this.getValueOrDefault(street);\n cipher.identity.city = this.getValueOrDefault(city);\n if (!this.isNullOrWhitespace(country)) {\n cipher.identity.country = country.toUpperCase();\n }\n cipher.identity.postalCode = this.getValueOrDefault(zip);\n cipher.identity.state = this.getValueOrDefault(state);\n return;\n }\n\n switch (category) {\n case CategoryEnum.Identity:\n break;\n case CategoryEnum.DriversLicense:\n if (this.fillDriversLicense(field, fieldValue, cipher)) {\n return;\n }\n break;\n case CategoryEnum.OutdoorLicense:\n if (this.fillOutdoorLicense(field, fieldValue, cipher)) {\n return;\n }\n break;\n case CategoryEnum.Membership:\n if (this.fillMembership(field, fieldValue, cipher)) {\n return;\n }\n break;\n case CategoryEnum.Passport:\n if (this.fillPassport(field, fieldValue, cipher)) {\n return;\n }\n break;\n case CategoryEnum.RewardsProgram:\n if (this.fillRewardsProgram(field, fieldValue, cipher)) {\n return;\n }\n break;\n case CategoryEnum.SocialSecurityNumber:\n if (this.fillSSN(field, fieldValue, cipher)) {\n return;\n }\n break;\n default:\n break;\n }\n }\n\n // Do not include a password field if it's already in the history\n if (\n field.title === \"password\" &&\n cipher.passwordHistory != null &&\n cipher.passwordHistory.some((h) => h.password === fieldValue)\n ) {\n return;\n }\n\n // TODO ?? If one of the fields is marked as guarded, then activate Password-Reprompt for the entire item\n if (field.guarded && cipher.reprompt === CipherRepromptType.None) {\n cipher.reprompt = CipherRepromptType.Password;\n }\n\n const fieldType = valueKey === \"concealed\" ? FieldType.Hidden : FieldType.Text;\n this.processKvp(cipher, fieldName, fieldValue, fieldType);\n });\n }\n\n private getFieldName(id: string, title: string): string {\n if (this.isNullOrWhitespace(title)) {\n return id;\n }\n\n // Naive approach of checking if the fields id is usable\n if (id.length > 25 && RegExp(/[0-9]{2}[A-Z]{2}/, \"i\").test(id)) {\n return title;\n }\n return id;\n }\n\n private extractValue(value: Value, valueKey: string): string {\n if (valueKey === \"date\") {\n return new Date(value.date * 1000).toUTCString();\n }\n\n if (valueKey === \"monthYear\") {\n return value.monthYear.toString();\n }\n\n return (value as any)[valueKey];\n }\n\n private fillLogin(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n const fieldName = this.getFieldName(field.id, field.title);\n\n if (this.isNullOrWhitespace(cipher.login.username) && fieldName === \"username\") {\n cipher.login.username = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.login.password) && fieldName === \"password\") {\n cipher.login.password = fieldValue;\n return true;\n }\n\n if (\n this.isNullOrWhitespace(cipher.login.totp) &&\n field.id != null &&\n field.id.startsWith(\"TOTP_\")\n ) {\n cipher.login.totp = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillApiCredentials(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n const fieldName = this.getFieldName(field.id, field.title);\n\n if (this.isNullOrWhitespace(cipher.login.password) && fieldName === \"credential\") {\n cipher.login.password = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.login.uri) && fieldName === \"hostname\") {\n cipher.login.uris = this.makeUriArray(fieldValue);\n return true;\n }\n\n return false;\n }\n\n private fillCreditCard(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.card.number) && field.id === \"ccnum\") {\n cipher.card.number = fieldValue;\n cipher.card.brand = this.getCardBrand(fieldValue);\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.card.code) && field.id === \"cvv\") {\n cipher.card.code = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.card.cardholderName) && field.id === \"cardholder\") {\n cipher.card.cardholderName = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.card.expiration) && field.id === \"expiry\") {\n const monthYear: string = fieldValue.toString().trim();\n cipher.card.expMonth = monthYear.substring(4, 6);\n if (cipher.card.expMonth[0] === \"0\") {\n cipher.card.expMonth = cipher.card.expMonth.substring(1, 2);\n }\n cipher.card.expYear = monthYear.substring(0, 4);\n return true;\n }\n\n if (field.id === \"type\") {\n // Skip since brand was determined from number above\n return true;\n }\n\n return false;\n }\n\n private fillBankAccount(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.card.cardholderName) && field.id === \"owner\") {\n cipher.card.cardholderName = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillIdentity(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"firstname\") {\n cipher.identity.firstName = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.lastName) && field.id === \"lastname\") {\n cipher.identity.lastName = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.middleName) && field.id === \"initial\") {\n cipher.identity.middleName = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.phone) && field.id === \"defphone\") {\n cipher.identity.phone = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.company) && field.id === \"company\") {\n cipher.identity.company = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.email) && field.id === \"email\") {\n cipher.identity.email = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.username) && field.id === \"username\") {\n cipher.identity.username = fieldValue;\n return true;\n }\n return false;\n }\n\n private fillDriversLicense(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"fullname\") {\n this.processFullName(cipher, fieldValue);\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.address1) && field.id === \"address\") {\n cipher.identity.address1 = fieldValue;\n return true;\n }\n\n // TODO ISO code\n if (this.isNullOrWhitespace(cipher.identity.country) && field.id === \"country\") {\n cipher.identity.country = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.state) && field.id === \"state\") {\n cipher.identity.state = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.licenseNumber) && field.id === \"number\") {\n cipher.identity.licenseNumber = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillOutdoorLicense(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"name\") {\n this.processFullName(cipher, fieldValue);\n return true;\n }\n\n // TODO ISO code\n if (this.isNullOrWhitespace(cipher.identity.country) && field.id === \"country\") {\n cipher.identity.country = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.state) && field.id === \"state\") {\n cipher.identity.state = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillMembership(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"member_name\") {\n this.processFullName(cipher, fieldValue);\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.company) && field.id === \"org_name\") {\n cipher.identity.company = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.phone) && field.id === \"phone\") {\n cipher.identity.phone = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillPassport(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"fullname\") {\n this.processFullName(cipher, fieldValue);\n return true;\n }\n\n // TODO Iso\n if (this.isNullOrWhitespace(cipher.identity.country) && field.id === \"issuing_country\") {\n cipher.identity.country = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.passportNumber) && field.id === \"number\") {\n cipher.identity.passportNumber = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillRewardsProgram(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"member_name\") {\n this.processFullName(cipher, fieldValue);\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.company) && field.id === \"company_name\") {\n cipher.identity.company = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillSSN(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"name\") {\n this.processFullName(cipher, fieldValue);\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.ssn) && field.id === \"number\") {\n cipher.identity.ssn = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private parsePasswordHistory(historyItems: PasswordHistoryEntity[], cipher: CipherView) {\n if (historyItems == null || historyItems.length === 0) {\n return;\n }\n\n const maxSize = historyItems.length > 5 ? 5 : historyItems.length;\n cipher.passwordHistory = historyItems\n .filter((h: any) => !this.isNullOrWhitespace(h.value) && h.time != null)\n .sort((a, b) => b.time - a.time)\n .slice(0, maxSize)\n .map((h: any) => {\n const ph = new PasswordHistoryView();\n ph.password = h.value;\n ph.lastUsedDate = new Date((\"\" + h.time).length >= 13 ? h.time : h.time * 1000);\n return ph;\n });\n }\n}\n","import { CipherType } from \"../../enums/cipherType\";\nimport { FieldType } from \"../../enums/fieldType\";\nimport { ImportResult } from \"../../models/domain/importResult\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { BaseImporter } from \"../baseImporter\";\nimport { Importer } from \"../importer\";\n\nimport { CipherImportContext } from \"./cipherImportContext\";\n\nexport const IgnoredProperties = [\n \"ainfo\",\n \"autosubmit\",\n \"notesplain\",\n \"ps\",\n \"scope\",\n \"tags\",\n \"title\",\n \"uuid\",\n \"notes\",\n];\n\nexport abstract class OnePasswordCsvImporter extends BaseImporter implements Importer {\n protected loginPropertyParsers = [\n this.setLoginUsername,\n this.setLoginPassword,\n this.setLoginUris,\n ];\n protected creditCardPropertyParsers = [\n this.setCreditCardNumber,\n this.setCreditCardVerification,\n this.setCreditCardCardholderName,\n this.setCreditCardExpiry,\n ];\n protected identityPropertyParsers = [\n this.setIdentityFirstName,\n this.setIdentityInitial,\n this.setIdentityLastName,\n this.setIdentityUserName,\n this.setIdentityEmail,\n this.setIdentityPhone,\n this.setIdentityCompany,\n ];\n\n abstract setCipherType(value: any, cipher: CipherView): void;\n\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true, {\n quoteChar: '\"',\n escapeChar: \"\\\\\",\n });\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (this.isNullOrWhitespace(this.getProp(value, \"title\"))) {\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(this.getProp(value, \"title\"), \"--\");\n\n this.setNotes(value, cipher);\n\n this.setCipherType(value, cipher);\n\n let altUsername: string = null;\n for (const property in value) {\n // eslint-disable-next-line\n if (!value.hasOwnProperty(property) || this.isNullOrWhitespace(value[property])) {\n continue;\n }\n\n const context = new CipherImportContext(value, property, cipher);\n if (cipher.type === CipherType.Login && this.setKnownLoginValue(context)) {\n continue;\n } else if (cipher.type === CipherType.Card && this.setKnownCreditCardValue(context)) {\n continue;\n } else if (cipher.type === CipherType.Identity && this.setKnownIdentityValue(context)) {\n continue;\n }\n\n altUsername = this.setUnknownValue(context, altUsername);\n }\n\n if (\n cipher.type === CipherType.Login &&\n !this.isNullOrWhitespace(altUsername) &&\n this.isNullOrWhitespace(cipher.login.username) &&\n altUsername.indexOf(\"://\") === -1\n ) {\n cipher.login.username = altUsername;\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n protected getProp(obj: any, name: string): any {\n const lowerObj = Object.entries(obj).reduce((agg: any, entry: [string, any]) => {\n agg[entry[0].toLowerCase()] = entry[1];\n return agg;\n }, {});\n return lowerObj[name.toLowerCase()];\n }\n\n protected getPropByRegexp(obj: any, regexp: RegExp): any {\n const matchingKeys = Object.keys(obj).reduce((agg: string[], key: string) => {\n if (key.match(regexp)) {\n agg.push(key);\n }\n return agg;\n }, []);\n if (matchingKeys.length === 0) {\n return null;\n } else {\n return obj[matchingKeys[0]];\n }\n }\n\n protected getPropIncluding(obj: any, name: string): any {\n const includesMap = Object.keys(obj).reduce((agg: string[], entry: string) => {\n if (entry.toLowerCase().includes(name.toLowerCase())) {\n agg.push(entry);\n }\n return agg;\n }, []);\n if (includesMap.length === 0) {\n return null;\n } else {\n return obj[includesMap[0]];\n }\n }\n\n protected setNotes(importRecord: any, cipher: CipherView) {\n cipher.notes =\n this.getValueOrDefault(this.getProp(importRecord, \"notesPlain\"), \"\") +\n \"\\n\" +\n this.getValueOrDefault(this.getProp(importRecord, \"notes\"), \"\") +\n \"\\n\";\n cipher.notes.trim();\n }\n\n protected setKnownLoginValue(context: CipherImportContext): boolean {\n return this.loginPropertyParsers.reduce((agg: boolean, func) => {\n if (!agg) {\n agg = func.bind(this)(context);\n }\n return agg;\n }, false);\n }\n\n protected setKnownCreditCardValue(context: CipherImportContext): boolean {\n return this.creditCardPropertyParsers.reduce((agg: boolean, func) => {\n if (!agg) {\n agg = func.bind(this)(context);\n }\n return agg;\n }, false);\n }\n\n protected setKnownIdentityValue(context: CipherImportContext): boolean {\n return this.identityPropertyParsers.reduce((agg: boolean, func) => {\n if (!agg) {\n agg = func.bind(this)(context);\n }\n return agg;\n }, false);\n }\n\n protected setUnknownValue(context: CipherImportContext, altUsername: string): string {\n if (\n IgnoredProperties.indexOf(context.lowerProperty) === -1 &&\n !context.lowerProperty.startsWith(\"section:\") &&\n !context.lowerProperty.startsWith(\"section \")\n ) {\n if (altUsername == null && context.lowerProperty === \"email\") {\n return context.importRecord[context.property];\n } else if (\n context.lowerProperty === \"created date\" ||\n context.lowerProperty === \"modified date\"\n ) {\n const readableDate = new Date(\n parseInt(context.importRecord[context.property], 10) * 1000\n ).toUTCString();\n this.processKvp(context.cipher, \"1Password \" + context.property, readableDate);\n return null;\n }\n if (\n context.lowerProperty.includes(\"password\") ||\n context.lowerProperty.includes(\"key\") ||\n context.lowerProperty.includes(\"secret\")\n ) {\n this.processKvp(\n context.cipher,\n context.property,\n context.importRecord[context.property],\n FieldType.Hidden\n );\n } else {\n this.processKvp(context.cipher, context.property, context.importRecord[context.property]);\n }\n }\n return null;\n }\n\n protected setIdentityFirstName(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.firstName) &&\n context.lowerProperty.includes(\"first name\")\n ) {\n context.cipher.identity.firstName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityInitial(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.middleName) &&\n context.lowerProperty.includes(\"initial\")\n ) {\n context.cipher.identity.middleName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityLastName(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.lastName) &&\n context.lowerProperty.includes(\"last name\")\n ) {\n context.cipher.identity.lastName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityUserName(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.username) &&\n context.lowerProperty.includes(\"username\")\n ) {\n context.cipher.identity.username = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityCompany(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.company) &&\n context.lowerProperty.includes(\"company\")\n ) {\n context.cipher.identity.company = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityPhone(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.phone) &&\n context.lowerProperty.includes(\"default phone\")\n ) {\n context.cipher.identity.phone = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityEmail(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.email) &&\n context.lowerProperty.includes(\"email\")\n ) {\n context.cipher.identity.email = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setCreditCardNumber(context: CipherImportContext): boolean {\n if (\n this.isNullOrWhitespace(context.cipher.card.number) &&\n context.lowerProperty.includes(\"number\")\n ) {\n context.cipher.card.number = context.importRecord[context.property];\n context.cipher.card.brand = this.getCardBrand(context.cipher.card.number);\n return true;\n }\n return false;\n }\n\n protected setCreditCardVerification(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.card.code) &&\n context.lowerProperty.includes(\"verification number\")\n ) {\n context.cipher.card.code = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setCreditCardCardholderName(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.card.cardholderName) &&\n context.lowerProperty.includes(\"cardholder name\")\n ) {\n context.cipher.card.cardholderName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setCreditCardExpiry(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.card.expiration) &&\n context.lowerProperty.includes(\"expiry date\") &&\n context.importRecord[context.property].length === 7\n ) {\n context.cipher.card.expMonth = (context.importRecord[context.property] as string).substr(\n 0,\n 2\n );\n if (context.cipher.card.expMonth[0] === \"0\") {\n context.cipher.card.expMonth = context.cipher.card.expMonth.substr(1, 1);\n }\n context.cipher.card.expYear = (context.importRecord[context.property] as string).substr(3, 4);\n return true;\n }\n return false;\n }\n\n protected setLoginPassword(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.login.password) &&\n context.lowerProperty === \"password\"\n ) {\n context.cipher.login.password = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setLoginUsername(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.login.username) &&\n context.lowerProperty === \"username\"\n ) {\n context.cipher.login.username = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setLoginUris(context: CipherImportContext) {\n if (\n (context.cipher.login.uris == null || context.cipher.login.uris.length === 0) &&\n context.lowerProperty === \"urls\"\n ) {\n const urls = context.importRecord[context.property].split(this.newLineRegex);\n context.cipher.login.uris = this.makeUriArray(urls);\n return true;\n } else if (context.lowerProperty === \"url\") {\n if (context.cipher.login.uris == null) {\n context.cipher.login.uris = [];\n }\n context.cipher.login.uris.concat(this.makeUriArray(context.importRecord[context.property]));\n return true;\n }\n return false;\n }\n}\n","import { CipherType } from \"../../enums/cipherType\";\nimport { CardView } from \"../../models/view/cardView\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { IdentityView } from \"../../models/view/identityView\";\nimport { Importer } from \"../importer\";\n\nimport { IgnoredProperties, OnePasswordCsvImporter } from \"./onepasswordCsvImporter\";\n\nexport class OnePasswordMacCsvImporter extends OnePasswordCsvImporter implements Importer {\n setCipherType(value: any, cipher: CipherView) {\n const onePassType = this.getValueOrDefault(this.getProp(value, \"type\"), \"Login\");\n switch (onePassType) {\n case \"Credit Card\":\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n IgnoredProperties.push(\"type\");\n break;\n case \"Identity\":\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n IgnoredProperties.push(\"type\");\n break;\n case \"Login\":\n case \"Secure Note\":\n IgnoredProperties.push(\"type\");\n break;\n default:\n break;\n }\n }\n}\n","import { CipherType } from \"../../enums/cipherType\";\nimport { CardView } from \"../../models/view/cardView\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { IdentityView } from \"../../models/view/identityView\";\nimport { LoginView } from \"../../models/view/loginView\";\nimport { Importer } from \"../importer\";\n\nimport { CipherImportContext } from \"./cipherImportContext\";\nimport { OnePasswordCsvImporter } from \"./onepasswordCsvImporter\";\n\nexport class OnePasswordWinCsvImporter extends OnePasswordCsvImporter implements Importer {\n constructor() {\n super();\n this.identityPropertyParsers.push(this.setIdentityAddress);\n }\n\n setCipherType(value: any, cipher: CipherView) {\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n\n if (\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /\\d+: number/i)) &&\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /\\d+: expiry date/i))\n ) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n }\n\n if (\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: first name/i)) ||\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: initial/i)) ||\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: last name/i)) ||\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /internet \\d+: email/i))\n ) {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n }\n }\n\n setIdentityAddress(context: CipherImportContext) {\n if (context.lowerProperty.match(/address \\d+: address/i)) {\n this.processKvp(context.cipher, \"address\", context.importRecord[context.property]);\n return true;\n }\n return false;\n }\n\n setCreditCardExpiry(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.card.expiration) &&\n context.lowerProperty.includes(\"expiry date\")\n ) {\n const expSplit = (context.importRecord[context.property] as string).split(\"/\");\n context.cipher.card.expMonth = expSplit[0];\n if (context.cipher.card.expMonth[0] === \"0\" && context.cipher.card.expMonth.length === 2) {\n context.cipher.card.expMonth = context.cipher.card.expMonth.substr(1, 1);\n }\n context.cipher.card.expYear = expSplit[2].length > 4 ? expSplit[2].substr(0, 4) : expSplit[2];\n return true;\n }\n return false;\n }\n}\n","export interface ExportData {\n accounts?: AccountsEntity[] | null;\n}\nexport interface AccountsEntity {\n attrs: AccountAttributes;\n vaults?: VaultsEntity[] | null;\n}\nexport interface AccountAttributes {\n accountName: string;\n name: string;\n avatar: string;\n email: string;\n uuid: string;\n domain: string;\n}\nexport interface VaultsEntity {\n attrs: VaultAttributes;\n items?: Item[] | null;\n}\nexport interface VaultAttributes {\n uuid: string;\n desc: string;\n avatar: string;\n name: string;\n type: string;\n}\n\nexport enum CategoryEnum {\n Login = \"001\",\n CreditCard = \"002\",\n SecureNote = \"003\",\n Identity = \"004\",\n Password = \"005\",\n Document = \"006\",\n SoftwareLicense = \"100\",\n BankAccount = \"101\",\n Database = \"102\",\n DriversLicense = \"103\",\n OutdoorLicense = \"104\",\n Membership = \"105\",\n Passport = \"106\",\n RewardsProgram = \"107\",\n SocialSecurityNumber = \"108\",\n WirelessRouter = \"109\",\n Server = \"110\",\n EmailAccount = \"111\",\n API_Credential = \"112\",\n MedicalRecord = \"113\",\n}\n\nexport interface Item {\n uuid: string;\n favIndex: number;\n createdAt: number;\n updatedAt: number;\n trashed?: boolean;\n categoryUuid: string;\n details: Details;\n overview: Overview;\n}\nexport interface Details {\n loginFields?: (LoginFieldsEntity | null)[] | null;\n notesPlain?: string | null;\n sections?: (SectionsEntity | null)[] | null;\n passwordHistory?: (PasswordHistoryEntity | null)[] | null;\n documentAttributes?: DocumentAttributes | null;\n password?: string | null;\n}\n\nexport enum LoginFieldTypeEnum {\n TextOrHtml = \"T\",\n EmailAddress = \"E\",\n URL = \"U\",\n Number = \"N\",\n Password = \"P\",\n TextArea = \"A\",\n PhoneNumber = \"T\",\n CheckBox = \"C\",\n}\nexport interface LoginFieldsEntity {\n value: string;\n id: string;\n name: string;\n fieldType: LoginFieldTypeEnum | string;\n designation?: string | null;\n}\nexport interface SectionsEntity {\n title: string;\n name?: string | null;\n fields?: FieldsEntity[] | null;\n}\nexport interface FieldsEntity {\n title: string;\n id: string;\n value: Value;\n indexAtSource: number;\n guarded: boolean;\n multiline: boolean;\n dontGenerate: boolean;\n placeholder?: string;\n inputTraits: InputTraits;\n clipboardFilter?: string | null;\n}\nexport interface Value {\n totp?: string | null;\n date?: number | null;\n string?: string | null;\n concealed?: string | null;\n email?: string | null;\n phone?: string | null;\n menu?: string | null;\n gender?: string | null;\n monthYear?: number | null;\n url?: string | null;\n address?: Address | null;\n creditCardType?: string | null;\n creditCardNumber?: string | null;\n reference?: string | null;\n}\nexport interface Address {\n street: string;\n city: string;\n country: string;\n zip: string;\n state: string;\n}\nexport interface InputTraits {\n keyboard: string;\n correction: string;\n capitalization: string;\n}\nexport interface PasswordHistoryEntity {\n value: string;\n time: number;\n}\nexport interface DocumentAttributes {\n fileName: string;\n documentId: string;\n decryptedSize: number;\n}\nexport interface Overview {\n subtitle: string;\n title: string;\n url: string;\n urls?: UrlsEntity[] | null;\n ps?: number | null;\n pbe?: number | null;\n pgrng?: boolean | null;\n tags?: string[] | null;\n}\nexport interface UrlsEntity {\n label: string;\n url: string;\n}\n","import { ImportResult } from \"../models/domain/importResult\";\nimport { CollectionView } from \"../models/view/collectionView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PadlockCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let headers: string[] = null;\n results.forEach((value) => {\n if (headers == null) {\n headers = value.map((v: string) => v);\n return;\n }\n\n if (value.length < 2 || value.length !== headers.length) {\n return;\n }\n\n if (!this.isNullOrWhitespace(value[1])) {\n if (this.organization) {\n const tags = (value[1] as string).split(\",\");\n tags.forEach((tag) => {\n tag = tag.trim();\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === tag) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = tag;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else {\n const tags = (value[1] as string).split(\",\");\n const tag = tags.length > 0 ? tags[0].trim() : null;\n this.processFolder(result, tag);\n }\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], \"--\");\n\n for (let i = 2; i < value.length; i++) {\n const header = headers[i].trim().toLowerCase();\n if (this.isNullOrWhitespace(value[i]) || this.isNullOrWhitespace(header)) {\n continue;\n }\n\n if (this.usernameFieldNames.indexOf(header) > -1) {\n cipher.login.username = value[i];\n } else if (this.passwordFieldNames.indexOf(header) > -1) {\n cipher.login.password = value[i];\n } else if (this.uriFieldNames.indexOf(header) > -1) {\n cipher.login.uris = this.makeUriArray(value[i]);\n } else {\n this.processKvp(cipher, headers[i], value[i]);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PassKeepCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n this.processFolder(result, this.getValue(\"category\", value));\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValue(\"description\", value);\n cipher.name = this.getValueOrDefault(this.getValue(\"title\", value), \"--\");\n cipher.login.username = this.getValue(\"username\", value);\n cipher.login.password = this.getValue(\"password\", value);\n cipher.login.uris = this.makeUriArray(this.getValue(\"site\", value));\n this.processKvp(cipher, \"Password 2\", this.getValue(\"password2\", value));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private getValue(key: string, value: any) {\n return this.getValueOrDefault(value[key], this.getValueOrDefault(value[\" \" + key]));\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PassmanJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.length === 0) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((credential: any) => {\n if (credential.tags != null && credential.tags.length > 0) {\n const folderName = credential.tags[0].text;\n this.processFolder(result, folderName);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = credential.label;\n\n cipher.login.username = this.getValueOrDefault(credential.username);\n if (this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = this.getValueOrDefault(credential.email);\n } else if (!this.isNullOrWhitespace(credential.email)) {\n cipher.notes = \"Email: \" + credential.email + \"\\n\";\n }\n\n cipher.login.password = this.getValueOrDefault(credential.password);\n cipher.login.uris = this.makeUriArray(credential.url);\n cipher.notes += this.getValueOrDefault(credential.description, \"\");\n if (credential.otp != null) {\n cipher.login.totp = this.getValueOrDefault(credential.otp.secret);\n }\n\n if (credential.custom_fields != null) {\n credential.custom_fields.forEach((customField: any) => {\n switch (customField.field_type) {\n case \"text\":\n case \"password\":\n this.processKvp(cipher, customField.label, customField.value);\n break;\n }\n });\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\nimport { CollectionView } from \"../models/view/collectionView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PasspackCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const tagsJson = !this.isNullOrWhitespace(value.Tags) ? JSON.parse(value.Tags) : null;\n const tags: string[] =\n tagsJson != null && tagsJson.tags != null && tagsJson.tags.length > 0\n ? tagsJson.tags\n .map((tagJson: string) => {\n try {\n const t = JSON.parse(tagJson);\n return this.getValueOrDefault(t.tag);\n } catch {\n // Ignore error\n }\n return null;\n })\n .filter((t: string) => !this.isNullOrWhitespace(t))\n : null;\n\n if (this.organization && tags != null && tags.length > 0) {\n tags.forEach((tag) => {\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === tag) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = tag;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else if (!this.organization && tags != null && tags.length > 0) {\n this.processFolder(result, tags[0]);\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Notes, \"\");\n cipher.notes += \"\\n\\n\" + this.getValueOrDefault(value[\"Shared Notes\"], \"\") + \"\\n\";\n cipher.name = this.getValueOrDefault(value[\"Entry Name\"], \"--\");\n cipher.login.username = this.getValueOrDefault(value[\"User ID\"]);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n\n if (value.__parsed_extra != null && value.__parsed_extra.length > 0) {\n value.__parsed_extra.forEach((extra: string) => {\n if (!this.isNullOrWhitespace(extra)) {\n cipher.notes += \"\\n\" + extra;\n }\n });\n }\n\n const fieldsJson = !this.isNullOrWhitespace(value[\"Extra Fields\"])\n ? JSON.parse(value[\"Extra Fields\"])\n : null;\n const fields =\n fieldsJson != null && fieldsJson.extraFields != null && fieldsJson.extraFields.length > 0\n ? fieldsJson.extraFields.map((fieldJson: string) => {\n try {\n return JSON.parse(fieldJson);\n } catch {\n // Ignore error\n }\n return null;\n })\n : null;\n if (fields != null) {\n fields.forEach((f: any) => {\n if (f != null) {\n this.processKvp(cipher, f.name, f.data);\n }\n });\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PasswordAgentCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let newVersion = true;\n results.forEach((value) => {\n if (value.length !== 5 && value.length < 9) {\n return;\n }\n const altFormat = value.length === 10 && value[0] === \"0\";\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[altFormat ? 1 : 0], \"--\");\n cipher.login.username = this.getValueOrDefault(value[altFormat ? 2 : 1]);\n cipher.login.password = this.getValueOrDefault(value[altFormat ? 3 : 2]);\n if (value.length === 5) {\n newVersion = false;\n cipher.notes = this.getValueOrDefault(value[4]);\n cipher.login.uris = this.makeUriArray(value[3]);\n } else {\n const folder = this.getValueOrDefault(value[altFormat ? 9 : 8], \"(None)\");\n let folderName = folder !== \"(None)\" ? folder.split(\"\\\\\").join(\"/\") : null;\n if (folderName != null) {\n folderName = folder.split(\" > \").join(\"/\");\n folderName = folder.split(\">\").join(\"/\");\n }\n this.processFolder(result, folderName);\n cipher.notes = this.getValueOrDefault(value[altFormat ? 5 : 3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n }\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (newVersion && this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\nimport { FolderView } from \"../models/view/folderView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PasswordBossJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.items == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const foldersMap = new Map();\n results.folders.forEach((value: any) => {\n foldersMap.set(value.id, value.name);\n });\n const foldersIndexMap = new Map();\n foldersMap.forEach((val, key) => {\n foldersIndexMap.set(key, result.folders.length);\n const f = new FolderView();\n f.name = val;\n result.folders.push(f);\n });\n\n results.items.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name, \"--\");\n cipher.login.uris = this.makeUriArray(value.login_url);\n\n if (value.folder != null && foldersIndexMap.has(value.folder)) {\n result.folderRelationships.push([result.ciphers.length, foldersIndexMap.get(value.folder)]);\n }\n\n if (value.identifiers == null) {\n return;\n }\n\n if (!this.isNullOrWhitespace(value.identifiers.notes)) {\n cipher.notes = value.identifiers.notes.split(\"\\\\r\\\\n\").join(\"\\n\").split(\"\\\\n\").join(\"\\n\");\n }\n\n if (value.type === \"CreditCard\") {\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n }\n\n for (const property in value.identifiers) {\n // eslint-disable-next-line\n if (!value.identifiers.hasOwnProperty(property)) {\n continue;\n }\n const valObj = value.identifiers[property];\n const val = valObj != null ? valObj.toString() : null;\n if (\n this.isNullOrWhitespace(val) ||\n property === \"notes\" ||\n property === \"ignoreItemInSecurityScore\"\n ) {\n continue;\n }\n\n if (property === \"custom_fields\") {\n valObj.forEach((cf: any) => {\n this.processKvp(cipher, cf.name, cf.value);\n });\n continue;\n }\n\n if (cipher.type === CipherType.Card) {\n if (property === \"cardNumber\") {\n cipher.card.number = val;\n cipher.card.brand = this.getCardBrand(val);\n continue;\n } else if (property === \"nameOnCard\") {\n cipher.card.cardholderName = val;\n continue;\n } else if (property === \"security_code\") {\n cipher.card.code = val;\n continue;\n } else if (property === \"expires\") {\n try {\n const expDate = new Date(val);\n cipher.card.expYear = expDate.getFullYear().toString();\n cipher.card.expMonth = (expDate.getMonth() + 1).toString();\n } catch {\n // Ignore error\n }\n continue;\n } else if (property === \"cardType\") {\n continue;\n }\n } else {\n if (\n (property === \"username\" || property === \"email\") &&\n this.isNullOrWhitespace(cipher.login.username)\n ) {\n cipher.login.username = val;\n continue;\n } else if (property === \"password\") {\n cipher.login.password = val;\n continue;\n } else if (property === \"totp\") {\n cipher.login.totp = val;\n continue;\n } else if (\n (cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(property) > -1\n ) {\n cipher.login.uris = this.makeUriArray(val);\n continue;\n }\n }\n\n this.processKvp(cipher, property, val);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PasswordDragonXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const records = doc.querySelectorAll(\"PasswordManager > record\");\n Array.from(records).forEach((record) => {\n const category = this.querySelectorDirectChild(record, \"Category\");\n const categoryText =\n category != null &&\n !this.isNullOrWhitespace(category.textContent) &&\n category.textContent !== \"Unfiled\"\n ? category.textContent\n : null;\n this.processFolder(result, categoryText);\n\n const accountName = this.querySelectorDirectChild(record, \"Account-Name\");\n const userId = this.querySelectorDirectChild(record, \"User-Id\");\n const password = this.querySelectorDirectChild(record, \"Password\");\n const url = this.querySelectorDirectChild(record, \"URL\");\n const notes = this.querySelectorDirectChild(record, \"Notes\");\n const cipher = this.initLoginCipher();\n cipher.name =\n accountName != null ? this.getValueOrDefault(accountName.textContent, \"--\") : \"--\";\n cipher.notes = notes != null ? this.getValueOrDefault(notes.textContent) : \"\";\n cipher.login.username = userId != null ? this.getValueOrDefault(userId.textContent) : null;\n cipher.login.password =\n password != null ? this.getValueOrDefault(password.textContent) : null;\n cipher.login.uris = url != null ? this.makeUriArray(url.textContent) : null;\n\n const attributes: string[] = [];\n for (let i = 1; i <= 10; i++) {\n attributes.push(\"Attribute-\" + i);\n }\n\n this.querySelectorAllDirectChild(record, attributes.join(\",\")).forEach((attr) => {\n if (this.isNullOrWhitespace(attr.textContent) || attr.textContent === \"null\") {\n return;\n }\n this.processKvp(cipher, attr.tagName, attr.textContent);\n });\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PasswordSafeXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const passwordSafe = doc.querySelector(\"passwordsafe\");\n if (passwordSafe == null) {\n result.errorMessage = \"Missing `passwordsafe` node.\";\n result.success = false;\n return Promise.resolve(result);\n }\n\n const notesDelimiter = passwordSafe.getAttribute(\"delimiter\");\n const entries = doc.querySelectorAll(\"passwordsafe > entry\");\n Array.from(entries).forEach((entry) => {\n const group = this.querySelectorDirectChild(entry, \"group\");\n const groupText =\n group != null && !this.isNullOrWhitespace(group.textContent)\n ? group.textContent.split(\".\").join(\"/\")\n : null;\n this.processFolder(result, groupText);\n\n const title = this.querySelectorDirectChild(entry, \"title\");\n const username = this.querySelectorDirectChild(entry, \"username\");\n const email = this.querySelectorDirectChild(entry, \"email\");\n const password = this.querySelectorDirectChild(entry, \"password\");\n const url = this.querySelectorDirectChild(entry, \"url\");\n const notes = this.querySelectorDirectChild(entry, \"notes\");\n const cipher = this.initLoginCipher();\n cipher.name = title != null ? this.getValueOrDefault(title.textContent, \"--\") : \"--\";\n cipher.notes =\n notes != null\n ? this.getValueOrDefault(notes.textContent, \"\").split(notesDelimiter).join(\"\\n\")\n : null;\n cipher.login.username =\n username != null ? this.getValueOrDefault(username.textContent) : null;\n cipher.login.password =\n password != null ? this.getValueOrDefault(password.textContent) : null;\n cipher.login.uris = url != null ? this.makeUriArray(url.textContent) : null;\n\n if (this.isNullOrWhitespace(cipher.login.username) && email != null) {\n cipher.login.username = this.getValueOrDefault(email.textContent);\n } else if (email != null && !this.isNullOrWhitespace(email.textContent)) {\n cipher.notes = this.isNullOrWhitespace(cipher.notes)\n ? \"Email: \" + email.textContent\n : cipher.notes + \"\\n\" + \"Email: \" + email.textContent;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PasswordWalletTxtImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length < 1) {\n return;\n }\n if (value.length > 5) {\n this.processFolder(result, value[5]);\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], \"--\");\n if (value.length > 4) {\n cipher.notes = this.getValueOrDefault(value[4], \"\").split(\"¬\").join(\"\\n\");\n }\n if (value.length > 2) {\n cipher.login.username = this.getValueOrDefault(value[2]);\n }\n if (value.length > 3) {\n cipher.login.password = this.getValueOrDefault(value[3]);\n }\n if (value.length > 1) {\n cipher.login.uris = this.makeUriArray(value[1]);\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class RememBearCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.trash === \"true\") {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name);\n cipher.notes = this.getValueOrDefault(value.notes);\n if (value.type === \"LoginItem\") {\n cipher.login.uris = this.makeUriArray(value.website);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.username);\n } else if (value.type === \"CreditCardItem\") {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.cardholder);\n cipher.card.number = this.getValueOrDefault(value.number);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.verification);\n\n try {\n const expMonth = this.getValueOrDefault(value.expiryMonth);\n if (expMonth != null) {\n const expMonthNumber = parseInt(expMonth, null);\n if (expMonthNumber != null && expMonthNumber >= 1 && expMonthNumber <= 12) {\n cipher.card.expMonth = expMonthNumber.toString();\n }\n }\n } catch {\n // Ignore error\n }\n try {\n const expYear = this.getValueOrDefault(value.expiryYear);\n if (expYear != null) {\n const expYearNumber = parseInt(expYear, null);\n if (expYearNumber != null) {\n cipher.card.expYear = expYearNumber.toString();\n }\n }\n } catch {\n // Ignore error\n }\n\n const pin = this.getValueOrDefault(value.pin);\n if (pin != null) {\n this.processKvp(cipher, \"PIN\", pin);\n }\n const zip = this.getValueOrDefault(value.zipCode);\n if (zip != null) {\n this.processKvp(cipher, \"Zip Code\", zip);\n }\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class RoboFormCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let i = 1;\n results.forEach((value) => {\n const folder =\n !this.isNullOrWhitespace(value.Folder) && value.Folder.startsWith(\"/\")\n ? value.Folder.replace(\"/\", \"\")\n : value.Folder;\n const folderName = !this.isNullOrWhitespace(folder) ? folder : null;\n this.processFolder(result, folderName);\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Note);\n cipher.name = this.getValueOrDefault(value.Name, \"--\");\n cipher.login.username = this.getValueOrDefault(value.Login);\n cipher.login.password = this.getValueOrDefault(value.Pwd);\n cipher.login.uris = this.makeUriArray(value.Url);\n\n if (!this.isNullOrWhitespace(value.Rf_fields)) {\n let fields: string[] = [value.Rf_fields];\n if (value.__parsed_extra != null && value.__parsed_extra.length > 0) {\n fields = fields.concat(value.__parsed_extra);\n }\n fields.forEach((field: string) => {\n const parts = field.split(\":\");\n if (parts.length < 3) {\n return;\n }\n const key = parts[0] === \"-no-name-\" ? null : parts[0];\n const val = parts.length === 4 && parts[2] === \"rck\" ? parts[1] : parts[2];\n this.processKvp(cipher, key, val);\n });\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n\n if (\n i === results.length &&\n cipher.name === \"--\" &&\n this.isNullOrWhitespace(cipher.login.password)\n ) {\n return;\n }\n\n result.ciphers.push(cipher);\n i++;\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class SafariCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Title, \"--\");\n cipher.login.username = this.getValueOrDefault(value.Username);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.Url ?? value.URL);\n cipher.login.totp = this.getValueOrDefault(value.OTPAuth);\n cipher.notes = this.getValueOrDefault(value.Notes);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { FieldView } from \"../models/view/fieldView\";\nimport { FolderView } from \"../models/view/folderView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class SafeInCloudXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const db = doc.querySelector(\"database\");\n if (db == null) {\n result.errorMessage = \"Missing `database` node.\";\n result.success = false;\n return Promise.resolve(result);\n }\n\n const foldersMap = new Map();\n\n Array.from(doc.querySelectorAll(\"database > label\")).forEach((labelEl) => {\n const name = labelEl.getAttribute(\"name\");\n const id = labelEl.getAttribute(\"id\");\n if (!this.isNullOrWhitespace(name) && !this.isNullOrWhitespace(id)) {\n foldersMap.set(id, result.folders.length);\n const folder = new FolderView();\n folder.name = name;\n result.folders.push(folder);\n }\n });\n\n Array.from(doc.querySelectorAll(\"database > card\")).forEach((cardEl) => {\n if (cardEl.getAttribute(\"template\") === \"true\" || cardEl.getAttribute(\"deleted\") === \"true\") {\n return;\n }\n\n const labelIdEl = this.querySelectorDirectChild(cardEl, \"label_id\");\n if (labelIdEl != null) {\n const labelId = labelIdEl.textContent;\n if (!this.isNullOrWhitespace(labelId) && foldersMap.has(labelId)) {\n result.folderRelationships.push([result.ciphers.length, foldersMap.get(labelId)]);\n }\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(cardEl.getAttribute(\"title\"), \"--\");\n\n if (cardEl.getAttribute(\"star\") === \"true\") {\n cipher.favorite = true;\n }\n\n const cardType = cardEl.getAttribute(\"type\");\n if (cardType === \"note\") {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n } else {\n Array.from(this.querySelectorAllDirectChild(cardEl, \"field\")).forEach((fieldEl) => {\n const text = fieldEl.textContent;\n if (this.isNullOrWhitespace(text)) {\n return;\n }\n const name = fieldEl.getAttribute(\"name\");\n const fieldType = this.getValueOrDefault(fieldEl.getAttribute(\"type\"), \"\").toLowerCase();\n if (fieldType === \"login\") {\n cipher.login.username = text;\n } else if (fieldType === \"password\" || fieldType === \"secret\") {\n // safeInCloud allows for more than one password. we just insert them here and find the one used as password later\n this.processKvp(cipher, name, text, FieldType.Hidden);\n } else if (fieldType === \"one_time_password\") {\n cipher.login.totp = text;\n } else if (fieldType === \"notes\") {\n cipher.notes += text + \"\\n\";\n } else if (fieldType === \"weblogin\" || fieldType === \"website\") {\n cipher.login.uris = this.makeUriArray(text);\n } else {\n this.processKvp(cipher, name, text);\n }\n });\n }\n\n Array.from(this.querySelectorAllDirectChild(cardEl, \"notes\")).forEach((notesEl) => {\n cipher.notes += notesEl.textContent + \"\\n\";\n });\n\n this.setPassword(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n // Choose a password from all passwords. Take one that has password in its name, or the first one if there is no such entry\n // if its name is password, we can safely remove it form the fields. otherwise, it would maybe be best to keep it as a hidden field\n setPassword(cipher: CipherView) {\n const candidates = cipher.fields.filter((field) => field.type === FieldType.Hidden);\n if (!candidates.length) {\n return;\n }\n\n let choice: FieldView;\n for (const field of candidates) {\n if (this.passwordFieldNames.includes(field.name.toLowerCase())) {\n choice = field;\n cipher.fields = cipher.fields.filter((f) => f !== choice);\n break;\n }\n }\n\n if (!choice) {\n choice = candidates[0];\n }\n\n cipher.login.password = choice.value;\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class SaferPassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(this.nameFromUrl(value.url), \"--\");\n cipher.notes = this.getValueOrDefault(value.notes);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class SecureSafeCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Title);\n cipher.notes = this.getValueOrDefault(value.Comment);\n cipher.login.uris = this.makeUriArray(value.Url);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.username = this.getValueOrDefault(value.Username);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\nimport { CipherView } from \"../models/view/cipherView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class SplashIdCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length < 3) {\n return;\n }\n\n this.processFolder(result, this.getValueOrDefault(value[value.length - 1]));\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 2], \"\");\n cipher.name = this.getValueOrDefault(value[1], \"--\");\n\n if (value[0] === \"Web Logins\" || value[0] === \"Servers\" || value[0] === \"Email Accounts\") {\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n this.parseFieldsToNotes(cipher, 5, value);\n } else {\n this.parseFieldsToNotes(cipher, 2, value);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private parseFieldsToNotes(cipher: CipherView, startIndex: number, value: any) {\n // last 3 rows do not get parsed\n for (let i = startIndex; i < value.length - 3; i++) {\n if (this.isNullOrWhitespace(value[i])) {\n continue;\n }\n cipher.notes += value[i] + \"\\n\";\n }\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class StickyPasswordXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const loginNodes = doc.querySelectorAll(\"root > Database > Logins > Login\");\n Array.from(loginNodes).forEach((loginNode) => {\n const accountId = loginNode.getAttribute(\"ID\");\n if (this.isNullOrWhitespace(accountId)) {\n return;\n }\n\n const usernameText = loginNode.getAttribute(\"Name\");\n const passwordText = loginNode.getAttribute(\"Password\");\n let titleText: string = null;\n let linkText: string = null;\n let notesText: string = null;\n let groupId: string = null;\n let groupText: string = null;\n\n const accountLogin = doc.querySelector(\n \"root > Database > Accounts > Account > \" +\n 'LoginLinks > Login[SourceLoginID=\"' +\n accountId +\n '\"]'\n );\n if (accountLogin != null) {\n const account = accountLogin.parentElement.parentElement;\n if (account != null) {\n titleText = account.getAttribute(\"Name\");\n linkText = account.getAttribute(\"Link\");\n groupId = account.getAttribute(\"ParentID\");\n notesText = account.getAttribute(\"Comments\");\n if (!this.isNullOrWhitespace(notesText)) {\n notesText = notesText.split(\"/n\").join(\"\\n\");\n }\n }\n }\n\n if (!this.isNullOrWhitespace(groupId)) {\n groupText = this.buildGroupText(doc, groupId, \"\");\n this.processFolder(result, groupText);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(titleText, \"--\");\n cipher.notes = this.getValueOrDefault(notesText);\n cipher.login.username = this.getValueOrDefault(usernameText);\n cipher.login.password = this.getValueOrDefault(passwordText);\n cipher.login.uris = this.makeUriArray(linkText);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n buildGroupText(doc: Document, groupId: string, groupText: string): string {\n const group = doc.querySelector('root > Database > Groups > Group[ID=\"' + groupId + '\"]');\n if (group == null) {\n return groupText;\n }\n if (!this.isNullOrWhitespace(groupText)) {\n groupText = \"/\" + groupText;\n }\n groupText = group.getAttribute(\"Name\") + groupText;\n return this.buildGroupText(doc, group.getAttribute(\"ParentID\"), groupText);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nconst PropertiesToIgnore = [\n \"kind\",\n \"autologin\",\n \"favorite\",\n \"hexcolor\",\n \"protectedwithpassword\",\n \"subdomainonly\",\n \"type\",\n \"tk_export_version\",\n \"note\",\n \"title\",\n \"document_content\",\n];\n\nexport class TrueKeyCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.favorite, \"\").toLowerCase() === \"true\";\n cipher.name = this.getValueOrDefault(value.name, \"--\");\n cipher.notes = this.getValueOrDefault(value.memo, \"\");\n cipher.login.username = this.getValueOrDefault(value.login);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n\n if (value.kind !== \"login\") {\n cipher.name = this.getValueOrDefault(value.title, \"--\");\n cipher.notes = this.getValueOrDefault(value.note, \"\");\n }\n\n if (value.kind === \"cc\") {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.cardholder);\n cipher.card.number = this.getValueOrDefault(value.number);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n if (!this.isNullOrWhitespace(value.expiryDate)) {\n try {\n const expDate = new Date(value.expiryDate);\n cipher.card.expYear = expDate.getFullYear().toString();\n cipher.card.expMonth = (expDate.getMonth() + 1).toString();\n } catch {\n // Ignore error\n }\n }\n } else if (value.kind !== \"login\") {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n if (!this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = this.getValueOrDefault(value.document_content, \"\");\n }\n for (const property in value) {\n if (\n value.hasOwnProperty(property) && // eslint-disable-line\n PropertiesToIgnore.indexOf(property.toLowerCase()) < 0 &&\n !this.isNullOrWhitespace(value[property])\n ) {\n this.processKvp(cipher, property, value[property]);\n }\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class UpmCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length !== 5) {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], \"--\");\n cipher.notes = this.getValueOrDefault(value[4]);\n cipher.login.username = this.getValueOrDefault(value[1]);\n cipher.login.password = this.getValueOrDefault(value[2]);\n cipher.login.uris = this.makeUriArray(value[3]);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class YotiCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Name, \"--\");\n cipher.login.username = this.getValueOrDefault(value[\"User name\"]);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\nimport { CipherView } from \"../models/view/cipherView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class ZohoVaultCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (\n this.isNullOrWhitespace(value[\"Password Name\"]) &&\n this.isNullOrWhitespace(value[\"Secret Name\"])\n ) {\n return;\n }\n this.processFolder(result, this.getValueOrDefault(value.ChamberName));\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.Favorite, \"0\") === \"1\";\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.name = this.getValueOrDefault(\n value[\"Password Name\"],\n this.getValueOrDefault(value[\"Secret Name\"], \"--\")\n );\n cipher.login.uris = this.makeUriArray(\n this.getValueOrDefault(value[\"Password URL\"], this.getValueOrDefault(value[\"Secret URL\"]))\n );\n this.parseData(cipher, value.SecretData);\n this.parseData(cipher, value.CustomData);\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private parseData(cipher: CipherView, data: string) {\n if (this.isNullOrWhitespace(data)) {\n return;\n }\n const dataLines = this.splitNewLine(data);\n dataLines.forEach((line) => {\n const delimPosition = line.indexOf(\":\");\n if (delimPosition < 0) {\n return;\n }\n const field = line.substring(0, delimPosition);\n const value = line.length > delimPosition ? line.substring(delimPosition + 1) : null;\n if (\n this.isNullOrWhitespace(field) ||\n this.isNullOrWhitespace(value) ||\n field === \"SecretType\"\n ) {\n return;\n }\n const fieldLower = field.toLowerCase();\n if (cipher.login.username == null && this.usernameFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.username = value;\n } else if (\n cipher.login.password == null &&\n this.passwordFieldNames.indexOf(fieldLower) > -1\n ) {\n cipher.login.password = value;\n } else {\n this.processKvp(cipher, field, value);\n }\n });\n }\n}\n","import { I18nService } from \"../abstractions/i18n.service\";\n\nimport { IFrameComponent } from \"./iframe_component\";\n\nexport class CaptchaIFrame extends IFrameComponent {\n constructor(\n win: Window,\n webVaultUrl: string,\n private i18nService: I18nService,\n successCallback: (message: string) => any,\n errorCallback: (message: string) => any,\n infoCallback: (message: string) => any\n ) {\n super(\n win,\n webVaultUrl,\n \"captcha-connector.html\",\n \"hcaptcha_iframe\",\n successCallback,\n errorCallback,\n (message: string) => {\n const parsedMessage = JSON.parse(message);\n if (typeof parsedMessage !== \"string\") {\n this.iframe.height = parsedMessage.height.toString();\n this.iframe.width = parsedMessage.width.toString();\n } else {\n infoCallback(parsedMessage);\n }\n }\n );\n }\n\n init(siteKey: string): void {\n super.initComponent(\n this.createParams({ siteKey: siteKey, locale: this.i18nService.translationLocale }, 1)\n );\n }\n}\n","export abstract class IFrameComponent {\n iframe: HTMLIFrameElement;\n private connectorLink: HTMLAnchorElement;\n private parseFunction = this.parseMessage.bind(this);\n\n constructor(\n private win: Window,\n protected webVaultUrl: string,\n private path: string,\n private iframeId: string,\n public successCallback?: (message: string) => any,\n public errorCallback?: (message: string) => any,\n public infoCallback?: (message: string) => any\n ) {\n this.connectorLink = win.document.createElement(\"a\");\n }\n\n stop() {\n this.sendMessage(\"stop\");\n }\n\n start() {\n this.sendMessage(\"start\");\n }\n\n sendMessage(message: any) {\n if (!this.iframe || !this.iframe.src || !this.iframe.contentWindow) {\n return;\n }\n\n this.iframe.contentWindow.postMessage(message, this.iframe.src);\n }\n\n base64Encode(str: string): string {\n return btoa(\n encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode((\"0x\" + p1) as any);\n })\n );\n }\n\n cleanup() {\n this.win.removeEventListener(\"message\", this.parseFunction, false);\n }\n\n protected createParams(data: any, version: number) {\n return new URLSearchParams({\n data: this.base64Encode(JSON.stringify(data)),\n parent: encodeURIComponent(this.win.document.location.href),\n v: version.toString(),\n });\n }\n\n protected initComponent(params: URLSearchParams): void {\n this.connectorLink.href = `${this.webVaultUrl}/${this.path}?${params}`;\n this.iframe = this.win.document.getElementById(this.iframeId) as HTMLIFrameElement;\n this.iframe.src = this.connectorLink.href;\n\n this.win.addEventListener(\"message\", this.parseFunction, false);\n }\n\n private parseMessage(event: MessageEvent) {\n if (!this.validMessage(event)) {\n return;\n }\n\n const parts: string[] = event.data.split(\"|\");\n if (parts[0] === \"success\" && this.successCallback) {\n this.successCallback(parts[1]);\n } else if (parts[0] === \"error\" && this.errorCallback) {\n this.errorCallback(parts[1]);\n } else if (parts[0] === \"info\" && this.infoCallback) {\n this.infoCallback(parts[1]);\n }\n }\n\n private validMessage(event: MessageEvent) {\n if (\n event.origin == null ||\n event.origin === \"\" ||\n event.origin !== (this.connectorLink as any).origin ||\n event.data == null ||\n typeof event.data !== \"string\"\n ) {\n return false;\n }\n\n return (\n event.data.indexOf(\"success|\") === 0 ||\n event.data.indexOf(\"error|\") === 0 ||\n event.data.indexOf(\"info|\") === 0\n );\n }\n}\n","import { LinkedIdType } from \"../enums/linkedIdType\";\nimport { ItemView } from \"../models/view/itemView\";\n\nexport class LinkedMetadata {\n constructor(readonly propertyKey: string, private readonly _i18nKey?: string) {}\n\n get i18nKey() {\n return this._i18nKey ?? this.propertyKey;\n }\n}\n\n/**\n * A decorator used to set metadata used by Linked custom fields. Apply it to a class property or getter to make it\n * available as a Linked custom field option.\n * @param id - A unique value that is saved in the Field model. It is used to look up the decorated class property.\n * @param i18nKey - The i18n key used to describe the decorated class property in the UI. If it is null, then the name\n * of the class property will be used as the i18n key.\n */\nexport function linkedFieldOption(id: LinkedIdType, i18nKey?: string) {\n return (prototype: ItemView, propertyKey: string) => {\n if (prototype.linkedFieldOptions == null) {\n prototype.linkedFieldOptions = new Map();\n }\n\n prototype.linkedFieldOptions.set(id, new LinkedMetadata(propertyKey, i18nKey));\n };\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { EnvironmentService } from \"../../abstractions/environment.service\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { ApiLogInCredentials } from \"../../models/domain/logInCredentials\";\nimport { ApiTokenRequest } from \"../../models/request/identityToken/apiTokenRequest\";\nimport { IdentityTokenResponse } from \"../../models/response/identityTokenResponse\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class ApiLogInStrategy extends LogInStrategy {\n tokenRequest: ApiTokenRequest;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private environmentService: EnvironmentService,\n private keyConnectorService: KeyConnectorService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin(tokenResponse: IdentityTokenResponse) {\n if (tokenResponse.apiUseKeyConnector) {\n const keyConnectorUrl = this.environmentService.getKeyConnectorUrl();\n await this.keyConnectorService.getAndSetKey(keyConnectorUrl);\n }\n }\n\n async logIn(credentials: ApiLogInCredentials) {\n this.tokenRequest = new ApiTokenRequest(\n credentials.clientId,\n credentials.clientSecret,\n await this.buildTwoFactor(),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n\n protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) {\n await super.saveAccountInformation(tokenResponse);\n await this.stateService.setApiKeyClientId(this.tokenRequest.clientId);\n await this.stateService.setApiKeyClientSecret(this.tokenRequest.clientSecret);\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\nimport { Account, AccountProfile, AccountTokens } from \"../../models/domain/account\";\nimport { AuthResult } from \"../../models/domain/authResult\";\nimport {\n ApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n} from \"../../models/domain/logInCredentials\";\nimport { DeviceRequest } from \"../../models/request/deviceRequest\";\nimport { ApiTokenRequest } from \"../../models/request/identityToken/apiTokenRequest\";\nimport { PasswordTokenRequest } from \"../../models/request/identityToken/passwordTokenRequest\";\nimport { SsoTokenRequest } from \"../../models/request/identityToken/ssoTokenRequest\";\nimport { TokenRequestTwoFactor } from \"../../models/request/identityToken/tokenRequestTwoFactor\";\nimport { KeysRequest } from \"../../models/request/keysRequest\";\nimport { IdentityCaptchaResponse } from \"../../models/response/identityCaptchaResponse\";\nimport { IdentityTokenResponse } from \"../../models/response/identityTokenResponse\";\nimport { IdentityTwoFactorResponse } from \"../../models/response/identityTwoFactorResponse\";\n\nexport abstract class LogInStrategy {\n protected abstract tokenRequest: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest;\n protected captchaBypassToken: string = null;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n protected tokenService: TokenService,\n protected appIdService: AppIdService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected logService: LogService,\n protected stateService: StateService,\n protected twoFactorService: TwoFactorService\n ) {}\n\n abstract logIn(\n credentials: ApiLogInCredentials | PasswordLogInCredentials | SsoLogInCredentials\n ): Promise;\n\n async logInTwoFactor(\n twoFactor: TokenRequestTwoFactor,\n captchaResponse: string = null\n ): Promise {\n this.tokenRequest.setTwoFactor(twoFactor);\n return this.startLogIn();\n }\n\n protected async startLogIn(): Promise {\n this.twoFactorService.clearSelectedProvider();\n\n const response = await this.apiService.postIdentityToken(this.tokenRequest);\n\n if (response instanceof IdentityTwoFactorResponse) {\n return this.processTwoFactorResponse(response);\n } else if (response instanceof IdentityCaptchaResponse) {\n return this.processCaptchaResponse(response);\n } else if (response instanceof IdentityTokenResponse) {\n return this.processTokenResponse(response);\n }\n\n throw new Error(\"Invalid response object.\");\n }\n\n protected onSuccessfulLogin(response: IdentityTokenResponse): Promise {\n // Implemented in subclass if required\n return null;\n }\n\n protected async buildDeviceRequest() {\n const appId = await this.appIdService.getAppId();\n return new DeviceRequest(appId, this.platformUtilsService);\n }\n\n protected async buildTwoFactor(userProvidedTwoFactor?: TokenRequestTwoFactor) {\n if (userProvidedTwoFactor != null) {\n return userProvidedTwoFactor;\n }\n\n const storedTwoFactorToken = await this.tokenService.getTwoFactorToken();\n if (storedTwoFactorToken != null) {\n return new TokenRequestTwoFactor(TwoFactorProviderType.Remember, storedTwoFactorToken, false);\n }\n\n return new TokenRequestTwoFactor();\n }\n\n protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) {\n const accountInformation = await this.tokenService.decodeToken(tokenResponse.accessToken);\n await this.stateService.addAccount(\n new Account({\n profile: {\n ...new AccountProfile(),\n ...{\n userId: accountInformation.sub,\n email: accountInformation.email,\n hasPremiumPersonally: accountInformation.premium,\n kdfIterations: tokenResponse.kdfIterations,\n kdfType: tokenResponse.kdf,\n },\n },\n tokens: {\n ...new AccountTokens(),\n ...{\n accessToken: tokenResponse.accessToken,\n refreshToken: tokenResponse.refreshToken,\n },\n },\n })\n );\n }\n\n protected async processTokenResponse(response: IdentityTokenResponse): Promise {\n const result = new AuthResult();\n result.resetMasterPassword = response.resetMasterPassword;\n result.forcePasswordReset = response.forcePasswordReset;\n\n await this.saveAccountInformation(response);\n\n if (response.twoFactorToken != null) {\n await this.tokenService.setTwoFactorToken(response);\n }\n\n const newSsoUser = response.key == null;\n if (!newSsoUser) {\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(\n response.privateKey ?? (await this.createKeyPairForOldAccount())\n );\n }\n\n await this.onSuccessfulLogin(response);\n\n await this.stateService.setBiometricLocked(false);\n this.messagingService.send(\"loggedIn\");\n\n return result;\n }\n\n private async processTwoFactorResponse(response: IdentityTwoFactorResponse): Promise {\n const result = new AuthResult();\n result.twoFactorProviders = response.twoFactorProviders2;\n this.twoFactorService.setProviders(response);\n this.captchaBypassToken = response.captchaToken ?? null;\n return result;\n }\n\n private async processCaptchaResponse(response: IdentityCaptchaResponse): Promise {\n const result = new AuthResult();\n result.captchaSiteKey = response.siteKey;\n return result;\n }\n\n private async createKeyPairForOldAccount() {\n try {\n const [publicKey, privateKey] = await this.cryptoService.makeKeyPair();\n await this.apiService.postAccountKeys(new KeysRequest(publicKey, privateKey.encryptedString));\n return privateKey.encryptedString;\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { AuthService } from \"../../abstractions/auth.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { HashPurpose } from \"../../enums/hashPurpose\";\nimport { AuthResult } from \"../../models/domain/authResult\";\nimport { PasswordLogInCredentials } from \"../../models/domain/logInCredentials\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetricCryptoKey\";\nimport { PasswordTokenRequest } from \"../../models/request/identityToken/passwordTokenRequest\";\nimport { TokenRequestTwoFactor } from \"../../models/request/identityToken/tokenRequestTwoFactor\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class PasswordLogInStrategy extends LogInStrategy {\n get email() {\n return this.tokenRequest.email;\n }\n\n get masterPasswordHash() {\n return this.tokenRequest.masterPasswordHash;\n }\n\n tokenRequest: PasswordTokenRequest;\n\n private localHashedPassword: string;\n private key: SymmetricCryptoKey;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private authService: AuthService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin() {\n await this.cryptoService.setKey(this.key);\n await this.cryptoService.setKeyHash(this.localHashedPassword);\n }\n\n async logInTwoFactor(\n twoFactor: TokenRequestTwoFactor,\n captchaResponse: string\n ): Promise {\n this.tokenRequest.captchaResponse = captchaResponse ?? this.captchaBypassToken;\n return super.logInTwoFactor(twoFactor);\n }\n\n async logIn(credentials: PasswordLogInCredentials) {\n const { email, masterPassword, captchaToken, twoFactor } = credentials;\n\n this.key = await this.authService.makePreloginKey(masterPassword, email);\n\n // Hash the password early (before authentication) so we don't persist it in memory in plaintext\n this.localHashedPassword = await this.cryptoService.hashPassword(\n masterPassword,\n this.key,\n HashPurpose.LocalAuthorization\n );\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, this.key);\n\n this.tokenRequest = new PasswordTokenRequest(\n email,\n hashedPassword,\n captchaToken,\n await this.buildTwoFactor(twoFactor),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { SsoLogInCredentials } from \"../../models/domain/logInCredentials\";\nimport { SsoTokenRequest } from \"../../models/request/identityToken/ssoTokenRequest\";\nimport { IdentityTokenResponse } from \"../../models/response/identityTokenResponse\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class SsoLogInStrategy extends LogInStrategy {\n tokenRequest: SsoTokenRequest;\n orgId: string;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private keyConnectorService: KeyConnectorService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin(tokenResponse: IdentityTokenResponse) {\n const newSsoUser = tokenResponse.key == null;\n\n if (tokenResponse.keyConnectorUrl != null) {\n if (!newSsoUser) {\n await this.keyConnectorService.getAndSetKey(tokenResponse.keyConnectorUrl);\n } else {\n await this.keyConnectorService.convertNewSsoUserToKeyConnector(tokenResponse, this.orgId);\n }\n }\n }\n\n async logIn(credentials: SsoLogInCredentials) {\n this.orgId = credentials.orgId;\n this.tokenRequest = new SsoTokenRequest(\n credentials.code,\n credentials.codeVerifier,\n credentials.redirectUrl,\n await this.buildTwoFactor(credentials.twoFactor),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n}\n","/**\n * Use as a Decorator on async functions, it will prevent multiple 'active' calls as the same time\n *\n * If a promise was returned from a previous call to this function, that hasn't yet resolved it will\n * be returned, instead of calling the original function again\n *\n * Results are not cached, once the promise has returned, the next call will result in a fresh call\n *\n * Read more at https://github.com/bitwarden/jslib/pull/7\n */\nexport function sequentialize(cacheKey: (args: any[]) => string) {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod: () => Promise = descriptor.value;\n const caches = new Map>>();\n\n const getCache = (obj: any) => {\n let cache = caches.get(obj);\n if (cache != null) {\n return cache;\n }\n cache = new Map>();\n caches.set(obj, cache);\n return cache;\n };\n\n return {\n value: function (...args: any[]) {\n const cache = getCache(this);\n const argsCacheKey = cacheKey(args);\n let response = cache.get(argsCacheKey);\n if (response != null) {\n return response;\n }\n\n const onFinally = () => {\n cache.delete(argsCacheKey);\n if (cache.size === 0) {\n caches.delete(this);\n }\n };\n response = originalMethod\n .apply(this, args)\n .then((val: any) => {\n onFinally();\n return val;\n })\n .catch((err: any) => {\n onFinally();\n throw err;\n });\n\n cache.set(argsCacheKey, response);\n return response;\n },\n };\n };\n}\n","import { ITreeNodeObject, TreeNode } from \"../models/domain/treeNode\";\n\nexport class ServiceUtils {\n static nestedTraverse(\n nodeTree: TreeNode[],\n partIndex: number,\n parts: string[],\n obj: ITreeNodeObject,\n parent: ITreeNodeObject,\n delimiter: string\n ) {\n if (parts.length <= partIndex) {\n return;\n }\n\n const end = partIndex === parts.length - 1;\n const partName = parts[partIndex];\n\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.name !== parts[partIndex]) {\n continue;\n }\n if (end && nodeTree[i].node.id !== obj.id) {\n // Another node with the same name.\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n ServiceUtils.nestedTraverse(\n nodeTree[i].children,\n partIndex + 1,\n parts,\n obj,\n nodeTree[i].node,\n delimiter\n );\n return;\n }\n\n if (nodeTree.filter((n) => n.node.name === partName).length === 0) {\n if (end) {\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n const newPartName = parts[partIndex] + delimiter + parts[partIndex + 1];\n ServiceUtils.nestedTraverse(\n nodeTree,\n 0,\n [newPartName, ...parts.slice(partIndex + 2)],\n obj,\n parent,\n delimiter\n );\n }\n }\n\n static getTreeNodeObject(\n nodeTree: TreeNode[],\n id: string\n ): TreeNode {\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.id === id) {\n return nodeTree[i];\n } else if (nodeTree[i].children != null) {\n const node = ServiceUtils.getTreeNodeObject(nodeTree[i].children, id);\n if (node !== null) {\n return node;\n }\n }\n }\n return null;\n }\n}\n","/**\n * Use as a Decorator on async functions, it will limit how many times the function can be\n * in-flight at a time.\n *\n * Calls beyond the limit will be queued, and run when one of the active calls finishes\n */\nexport function throttle(limit: number, throttleKey: (args: any[]) => string) {\n return (\n target: any,\n propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise>\n ) => {\n const originalMethod: () => Promise = descriptor.value;\n const allThrottles = new Map void)[]>>();\n\n const getThrottles = (obj: any) => {\n let throttles = allThrottles.get(obj);\n if (throttles != null) {\n return throttles;\n }\n throttles = new Map void)[]>();\n allThrottles.set(obj, throttles);\n return throttles;\n };\n\n return {\n value: function (...args: any[]) {\n const throttles = getThrottles(this);\n const argsThrottleKey = throttleKey(args);\n let queue = throttles.get(argsThrottleKey);\n if (queue == null) {\n queue = [];\n throttles.set(argsThrottleKey, queue);\n }\n\n return new Promise((resolve, reject) => {\n const exec = () => {\n const onFinally = () => {\n queue.splice(queue.indexOf(exec), 1);\n if (queue.length >= limit) {\n queue[limit - 1]();\n } else if (queue.length === 0) {\n throttles.delete(argsThrottleKey);\n if (throttles.size === 0) {\n allThrottles.delete(this);\n }\n }\n };\n originalMethod\n .apply(this, args)\n .then((val: any) => {\n onFinally();\n return val;\n })\n .catch((err: any) => {\n onFinally();\n throw err;\n })\n .then(resolve, reject);\n };\n queue.push(exec);\n if (queue.length <= limit) {\n exec();\n }\n });\n },\n };\n };\n}\n","export function getDomain(host: string): string | null {\n return null;\n}\n\nexport function isValid(host: string): boolean {\n return true;\n}\n","/* eslint-disable no-useless-escape */\nimport * as tldjs from \"tldjs\";\n\nimport { I18nService } from \"../abstractions/i18n.service\";\n\nconst nodeURL = typeof window === \"undefined\" ? require(\"url\") : null;\n\nexport class Utils {\n static inited = false;\n static isNode = false;\n static isBrowser = true;\n static isMobileBrowser = false;\n static isAppleMobileBrowser = false;\n static global: any = null;\n static tldEndingRegex =\n /.*\\.(com|net|org|edu|uk|gov|ca|de|jp|fr|au|ru|ch|io|es|us|co|xyz|info|ly|mil)$/;\n // Transpiled version of /\\p{Emoji_Presentation}/gu using https://mothereff.in/regexpu. Used for compatability in older browsers.\n static regexpEmojiPresentation =\n /(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])/g;\n\n static init() {\n if (Utils.inited) {\n return;\n }\n\n Utils.inited = true;\n Utils.isNode =\n typeof process !== \"undefined\" &&\n (process as any).release != null &&\n (process as any).release.name === \"node\";\n Utils.isBrowser = typeof window !== \"undefined\";\n Utils.isMobileBrowser = Utils.isBrowser && this.isMobile(window);\n Utils.isAppleMobileBrowser = Utils.isBrowser && this.isAppleMobile(window);\n Utils.global = Utils.isNode && !Utils.isBrowser ? global : window;\n }\n\n static fromB64ToArray(str: string): Uint8Array {\n if (Utils.isNode) {\n return new Uint8Array(Buffer.from(str, \"base64\"));\n } else {\n const binaryString = window.atob(str);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n }\n }\n\n static fromUrlB64ToArray(str: string): Uint8Array {\n return Utils.fromB64ToArray(Utils.fromUrlB64ToB64(str));\n }\n\n static fromHexToArray(str: string): Uint8Array {\n if (Utils.isNode) {\n return new Uint8Array(Buffer.from(str, \"hex\"));\n } else {\n const bytes = new Uint8Array(str.length / 2);\n for (let i = 0; i < str.length; i += 2) {\n bytes[i / 2] = parseInt(str.substr(i, 2), 16);\n }\n return bytes;\n }\n }\n\n static fromUtf8ToArray(str: string): Uint8Array {\n if (Utils.isNode) {\n return new Uint8Array(Buffer.from(str, \"utf8\"));\n } else {\n const strUtf8 = unescape(encodeURIComponent(str));\n const arr = new Uint8Array(strUtf8.length);\n for (let i = 0; i < strUtf8.length; i++) {\n arr[i] = strUtf8.charCodeAt(i);\n }\n return arr;\n }\n }\n\n static fromByteStringToArray(str: string): Uint8Array {\n const arr = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n return arr;\n }\n\n static fromBufferToB64(buffer: ArrayBuffer): string {\n if (Utils.isNode) {\n return Buffer.from(buffer).toString(\"base64\");\n } else {\n let binary = \"\";\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n }\n }\n\n static fromBufferToUrlB64(buffer: ArrayBuffer): string {\n return Utils.fromB64toUrlB64(Utils.fromBufferToB64(buffer));\n }\n\n static fromB64toUrlB64(b64Str: string) {\n return b64Str.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n }\n\n static fromBufferToUtf8(buffer: ArrayBuffer): string {\n if (Utils.isNode) {\n return Buffer.from(buffer).toString(\"utf8\");\n } else {\n const bytes = new Uint8Array(buffer);\n const encodedString = String.fromCharCode.apply(null, bytes);\n return decodeURIComponent(escape(encodedString));\n }\n }\n\n static fromBufferToByteString(buffer: ArrayBuffer): string {\n return String.fromCharCode.apply(null, new Uint8Array(buffer));\n }\n\n // ref: https://stackoverflow.com/a/40031979/1090359\n static fromBufferToHex(buffer: ArrayBuffer): string {\n if (Utils.isNode) {\n return Buffer.from(buffer).toString(\"hex\");\n } else {\n const bytes = new Uint8Array(buffer);\n return Array.prototype.map\n .call(bytes, (x: number) => (\"00\" + x.toString(16)).slice(-2))\n .join(\"\");\n }\n }\n\n static fromUrlB64ToB64(urlB64Str: string): string {\n let output = urlB64Str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"Illegal base64url string!\");\n }\n\n return output;\n }\n\n static fromUrlB64ToUtf8(urlB64Str: string): string {\n return Utils.fromB64ToUtf8(Utils.fromUrlB64ToB64(urlB64Str));\n }\n\n static fromUtf8ToB64(utfStr: string): string {\n if (Utils.isNode) {\n return Buffer.from(utfStr, \"utf8\").toString(\"base64\");\n } else {\n return decodeURIComponent(escape(window.btoa(utfStr)));\n }\n }\n\n static fromUtf8ToUrlB64(utfStr: string): string {\n return Utils.fromBufferToUrlB64(Utils.fromUtf8ToArray(utfStr));\n }\n\n static fromB64ToUtf8(b64Str: string): string {\n if (Utils.isNode) {\n return Buffer.from(b64Str, \"base64\").toString(\"utf8\");\n } else {\n return decodeURIComponent(escape(window.atob(b64Str)));\n }\n }\n\n // ref: http://stackoverflow.com/a/2117523/1090359\n static newGuid(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n static isGuid(id: string) {\n return RegExp(\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/,\n \"i\"\n ).test(id);\n }\n\n static getHostname(uriString: string): string {\n const url = Utils.getUrl(uriString);\n try {\n return url != null && url.hostname !== \"\" ? url.hostname : null;\n } catch {\n return null;\n }\n }\n\n static getHost(uriString: string): string {\n const url = Utils.getUrl(uriString);\n try {\n return url != null && url.host !== \"\" ? url.host : null;\n } catch {\n return null;\n }\n }\n\n static getDomain(uriString: string): string {\n if (uriString == null) {\n return null;\n }\n\n uriString = uriString.trim();\n if (uriString === \"\") {\n return null;\n }\n\n if (uriString.startsWith(\"data:\")) {\n return null;\n }\n\n let httpUrl = uriString.startsWith(\"http://\") || uriString.startsWith(\"https://\");\n if (\n !httpUrl &&\n uriString.indexOf(\"://\") < 0 &&\n Utils.tldEndingRegex.test(uriString) &&\n uriString.indexOf(\"@\") < 0\n ) {\n uriString = \"http://\" + uriString;\n httpUrl = true;\n }\n\n if (httpUrl) {\n try {\n const url = Utils.getUrlObject(uriString);\n const validHostname = tldjs?.isValid != null ? tldjs.isValid(url.hostname) : true;\n if (!validHostname) {\n return null;\n }\n\n if (url.hostname === \"localhost\" || Utils.validIpAddress(url.hostname)) {\n return url.hostname;\n }\n\n const urlDomain =\n tldjs != null && tldjs.getDomain != null ? tldjs.getDomain(url.hostname) : null;\n return urlDomain != null ? urlDomain : url.hostname;\n } catch (e) {\n // Invalid domain, try another approach below.\n }\n }\n\n try {\n const domain = tldjs != null && tldjs.getDomain != null ? tldjs.getDomain(uriString) : null;\n\n if (domain != null) {\n return domain;\n }\n } catch {\n return null;\n }\n\n return null;\n }\n\n static getQueryParams(uriString: string): Map {\n const url = Utils.getUrl(uriString);\n if (url == null || url.search == null || url.search === \"\") {\n return null;\n }\n const map = new Map();\n const pairs = (url.search[0] === \"?\" ? url.search.substr(1) : url.search).split(\"&\");\n pairs.forEach((pair) => {\n const parts = pair.split(\"=\");\n if (parts.length < 1) {\n return;\n }\n map.set(\n decodeURIComponent(parts[0]).toLowerCase(),\n parts[1] == null ? \"\" : decodeURIComponent(parts[1])\n );\n });\n return map;\n }\n\n static getSortFunction(i18nService: I18nService, prop: string) {\n return (a: any, b: any) => {\n if (a[prop] == null && b[prop] != null) {\n return -1;\n }\n if (a[prop] != null && b[prop] == null) {\n return 1;\n }\n if (a[prop] == null && b[prop] == null) {\n return 0;\n }\n\n return i18nService.collator\n ? i18nService.collator.compare(a[prop], b[prop])\n : a[prop].localeCompare(b[prop]);\n };\n }\n\n static isNullOrWhitespace(str: string): boolean {\n return str == null || typeof str !== \"string\" || str.trim() === \"\";\n }\n\n static isNullOrEmpty(str: string): boolean {\n return str == null || typeof str !== \"string\" || str == \"\";\n }\n\n static nameOf(name: string & keyof T) {\n return name;\n }\n\n static assign(target: T, source: Partial): T {\n return Object.assign(target, source);\n }\n\n static iterateEnum(obj: O) {\n return (Object.keys(obj).filter((k) => Number.isNaN(+k)) as K[]).map((k) => obj[k]);\n }\n\n static getUrl(uriString: string): URL {\n if (uriString == null) {\n return null;\n }\n\n uriString = uriString.trim();\n if (uriString === \"\") {\n return null;\n }\n\n let url = Utils.getUrlObject(uriString);\n if (url == null) {\n const hasHttpProtocol =\n uriString.indexOf(\"http://\") === 0 || uriString.indexOf(\"https://\") === 0;\n if (!hasHttpProtocol && uriString.indexOf(\".\") > -1) {\n url = Utils.getUrlObject(\"http://\" + uriString);\n }\n }\n return url;\n }\n\n static camelToPascalCase(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n\n private static validIpAddress(ipString: string): boolean {\n const ipRegex =\n /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n return ipRegex.test(ipString);\n }\n\n private static isMobile(win: Window) {\n let mobile = false;\n ((a) => {\n if (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\n a\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\n a.substr(0, 4)\n )\n ) {\n mobile = true;\n }\n })(win.navigator.userAgent || win.navigator.vendor || (win as any).opera);\n return mobile || win.navigator.userAgent.match(/iPad/i) != null;\n }\n\n private static isAppleMobile(win: Window) {\n return (\n win.navigator.userAgent.match(/iPhone/i) != null ||\n win.navigator.userAgent.match(/iPad/i) != null\n );\n }\n\n private static getUrlObject(uriString: string): URL {\n try {\n if (nodeURL != null) {\n return new nodeURL.URL(uriString);\n } else if (typeof URL === \"function\") {\n return new URL(uriString);\n } else if (window != null) {\n const hasProtocol = uriString.indexOf(\"://\") > -1;\n if (!hasProtocol && uriString.indexOf(\".\") > -1) {\n uriString = \"http://\" + uriString;\n } else if (!hasProtocol) {\n return null;\n }\n const anchor = window.document.createElement(\"a\");\n anchor.href = uriString;\n return anchor as any;\n }\n } catch (e) {\n // Ignore error\n }\n\n return null;\n }\n}\n\nUtils.init();\n","import { I18nService } from \"../abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\n\nexport class WebAuthnIFrame {\n private iframe: HTMLIFrameElement = null;\n private connectorLink: HTMLAnchorElement;\n private parseFunction = this.parseMessage.bind(this);\n\n constructor(\n private win: Window,\n private webVaultUrl: string,\n private webAuthnNewTab: boolean,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private successCallback: Function, // eslint-disable-line\n private errorCallback: Function, // eslint-disable-line\n private infoCallback: Function // eslint-disable-line\n ) {\n this.connectorLink = win.document.createElement(\"a\");\n }\n\n init(data: any): void {\n const params = new URLSearchParams({\n data: this.base64Encode(JSON.stringify(data)),\n parent: encodeURIComponent(this.win.document.location.href),\n btnText: encodeURIComponent(this.i18nService.t(\"webAuthnAuthenticate\")),\n v: \"1\",\n });\n\n if (this.webAuthnNewTab) {\n // Firefox fallback which opens the webauthn page in a new tab\n params.append(\"locale\", this.i18nService.translationLocale);\n this.platformUtilsService.launchUri(\n `${this.webVaultUrl}/webauthn-fallback-connector.html?${params}`\n );\n } else {\n this.connectorLink.href = `${this.webVaultUrl}/webauthn-connector.html?${params}`;\n this.iframe = this.win.document.getElementById(\"webauthn_iframe\") as HTMLIFrameElement;\n this.iframe.allow = \"publickey-credentials-get \" + new URL(this.webVaultUrl).origin;\n this.iframe.src = this.connectorLink.href;\n\n this.win.addEventListener(\"message\", this.parseFunction, false);\n }\n }\n\n stop() {\n this.sendMessage(\"stop\");\n }\n\n start() {\n this.sendMessage(\"start\");\n }\n\n sendMessage(message: any) {\n if (!this.iframe || !this.iframe.src || !this.iframe.contentWindow) {\n return;\n }\n\n this.iframe.contentWindow.postMessage(message, this.iframe.src);\n }\n\n base64Encode(str: string): string {\n return btoa(\n encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode((\"0x\" + p1) as any);\n })\n );\n }\n\n cleanup() {\n this.win.removeEventListener(\"message\", this.parseFunction, false);\n }\n\n private parseMessage(event: MessageEvent) {\n if (!this.validMessage(event)) {\n return;\n }\n\n const parts: string[] = event.data.split(\"|\");\n if (parts[0] === \"success\" && this.successCallback) {\n this.successCallback(parts[1]);\n } else if (parts[0] === \"error\" && this.errorCallback) {\n this.errorCallback(parts[1]);\n } else if (parts[0] === \"info\" && this.infoCallback) {\n this.infoCallback(parts[1]);\n }\n }\n\n private validMessage(event: MessageEvent) {\n if (\n event.origin == null ||\n event.origin === \"\" ||\n event.origin !== (this.connectorLink as any).origin ||\n event.data == null ||\n typeof event.data !== \"string\"\n ) {\n return false;\n }\n\n return (\n event.data.indexOf(\"success|\") === 0 ||\n event.data.indexOf(\"error|\") === 0 ||\n event.data.indexOf(\"info|\") === 0\n );\n }\n}\n","// EFF's Long Wordlist from https://www.eff.org/dice\nexport const EEFLongWordList = [\n \"abacus\",\n \"abdomen\",\n \"abdominal\",\n \"abide\",\n \"abiding\",\n \"ability\",\n \"ablaze\",\n \"able\",\n \"abnormal\",\n \"abrasion\",\n \"abrasive\",\n \"abreast\",\n \"abridge\",\n \"abroad\",\n \"abruptly\",\n \"absence\",\n \"absentee\",\n \"absently\",\n \"absinthe\",\n \"absolute\",\n \"absolve\",\n \"abstain\",\n \"abstract\",\n \"absurd\",\n \"accent\",\n \"acclaim\",\n \"acclimate\",\n \"accompany\",\n \"account\",\n \"accuracy\",\n \"accurate\",\n \"accustom\",\n \"acetone\",\n \"achiness\",\n \"aching\",\n \"acid\",\n \"acorn\",\n \"acquaint\",\n \"acquire\",\n \"acre\",\n \"acrobat\",\n \"acronym\",\n \"acting\",\n \"action\",\n \"activate\",\n \"activator\",\n \"active\",\n \"activism\",\n \"activist\",\n \"activity\",\n \"actress\",\n \"acts\",\n \"acutely\",\n \"acuteness\",\n \"aeration\",\n \"aerobics\",\n \"aerosol\",\n \"aerospace\",\n \"afar\",\n \"affair\",\n \"affected\",\n \"affecting\",\n \"affection\",\n \"affidavit\",\n \"affiliate\",\n \"affirm\",\n \"affix\",\n \"afflicted\",\n \"affluent\",\n \"afford\",\n \"affront\",\n \"aflame\",\n \"afloat\",\n \"aflutter\",\n \"afoot\",\n \"afraid\",\n \"afterglow\",\n \"afterlife\",\n \"aftermath\",\n \"aftermost\",\n \"afternoon\",\n \"aged\",\n \"ageless\",\n \"agency\",\n \"agenda\",\n \"agent\",\n \"aggregate\",\n \"aghast\",\n \"agile\",\n \"agility\",\n \"aging\",\n \"agnostic\",\n \"agonize\",\n \"agonizing\",\n \"agony\",\n \"agreeable\",\n \"agreeably\",\n \"agreed\",\n \"agreeing\",\n \"agreement\",\n \"aground\",\n \"ahead\",\n \"ahoy\",\n \"aide\",\n \"aids\",\n \"aim\",\n \"ajar\",\n \"alabaster\",\n \"alarm\",\n \"albatross\",\n \"album\",\n \"alfalfa\",\n \"algebra\",\n \"algorithm\",\n \"alias\",\n \"alibi\",\n \"alienable\",\n \"alienate\",\n \"aliens\",\n \"alike\",\n \"alive\",\n \"alkaline\",\n \"alkalize\",\n \"almanac\",\n \"almighty\",\n \"almost\",\n \"aloe\",\n \"aloft\",\n \"aloha\",\n \"alone\",\n \"alongside\",\n \"aloof\",\n \"alphabet\",\n \"alright\",\n \"although\",\n \"altitude\",\n \"alto\",\n \"aluminum\",\n \"alumni\",\n \"always\",\n \"amaretto\",\n \"amaze\",\n \"amazingly\",\n \"amber\",\n \"ambiance\",\n \"ambiguity\",\n \"ambiguous\",\n \"ambition\",\n \"ambitious\",\n \"ambulance\",\n \"ambush\",\n \"amendable\",\n \"amendment\",\n \"amends\",\n \"amenity\",\n \"amiable\",\n \"amicably\",\n \"amid\",\n \"amigo\",\n \"amino\",\n \"amiss\",\n \"ammonia\",\n \"ammonium\",\n \"amnesty\",\n \"amniotic\",\n \"among\",\n \"amount\",\n \"amperage\",\n \"ample\",\n \"amplifier\",\n \"amplify\",\n \"amply\",\n \"amuck\",\n \"amulet\",\n \"amusable\",\n \"amused\",\n \"amusement\",\n \"amuser\",\n \"amusing\",\n \"anaconda\",\n \"anaerobic\",\n \"anagram\",\n \"anatomist\",\n \"anatomy\",\n \"anchor\",\n \"anchovy\",\n \"ancient\",\n \"android\",\n \"anemia\",\n \"anemic\",\n \"aneurism\",\n \"anew\",\n \"angelfish\",\n \"angelic\",\n \"anger\",\n \"angled\",\n \"angler\",\n \"angles\",\n \"angling\",\n \"angrily\",\n \"angriness\",\n \"anguished\",\n \"angular\",\n \"animal\",\n \"animate\",\n \"animating\",\n \"animation\",\n \"animator\",\n \"anime\",\n \"animosity\",\n \"ankle\",\n \"annex\",\n \"annotate\",\n \"announcer\",\n \"annoying\",\n \"annually\",\n \"annuity\",\n \"anointer\",\n \"another\",\n \"answering\",\n \"antacid\",\n \"antarctic\",\n \"anteater\",\n \"antelope\",\n \"antennae\",\n \"anthem\",\n \"anthill\",\n \"anthology\",\n \"antibody\",\n \"antics\",\n \"antidote\",\n \"antihero\",\n \"antiquely\",\n \"antiques\",\n \"antiquity\",\n \"antirust\",\n \"antitoxic\",\n \"antitrust\",\n \"antiviral\",\n \"antivirus\",\n \"antler\",\n \"antonym\",\n \"antsy\",\n \"anvil\",\n \"anybody\",\n \"anyhow\",\n \"anymore\",\n \"anyone\",\n \"anyplace\",\n \"anything\",\n \"anytime\",\n \"anyway\",\n \"anywhere\",\n \"aorta\",\n \"apache\",\n \"apostle\",\n \"appealing\",\n \"appear\",\n \"appease\",\n \"appeasing\",\n \"appendage\",\n \"appendix\",\n \"appetite\",\n \"appetizer\",\n \"applaud\",\n \"applause\",\n \"apple\",\n \"appliance\",\n \"applicant\",\n \"applied\",\n \"apply\",\n \"appointee\",\n \"appraisal\",\n \"appraiser\",\n \"apprehend\",\n \"approach\",\n \"approval\",\n \"approve\",\n \"apricot\",\n \"april\",\n \"apron\",\n \"aptitude\",\n \"aptly\",\n \"aqua\",\n \"aqueduct\",\n \"arbitrary\",\n \"arbitrate\",\n \"ardently\",\n \"area\",\n \"arena\",\n \"arguable\",\n \"arguably\",\n \"argue\",\n \"arise\",\n \"armadillo\",\n \"armband\",\n \"armchair\",\n \"armed\",\n \"armful\",\n \"armhole\",\n \"arming\",\n \"armless\",\n \"armoire\",\n \"armored\",\n \"armory\",\n \"armrest\",\n \"army\",\n \"aroma\",\n \"arose\",\n \"around\",\n \"arousal\",\n \"arrange\",\n \"array\",\n \"arrest\",\n \"arrival\",\n \"arrive\",\n \"arrogance\",\n \"arrogant\",\n \"arson\",\n \"art\",\n \"ascend\",\n \"ascension\",\n \"ascent\",\n \"ascertain\",\n \"ashamed\",\n \"ashen\",\n \"ashes\",\n \"ashy\",\n \"aside\",\n \"askew\",\n \"asleep\",\n \"asparagus\",\n \"aspect\",\n \"aspirate\",\n \"aspire\",\n \"aspirin\",\n \"astonish\",\n \"astound\",\n \"astride\",\n \"astrology\",\n \"astronaut\",\n \"astronomy\",\n \"astute\",\n \"atlantic\",\n \"atlas\",\n \"atom\",\n \"atonable\",\n \"atop\",\n \"atrium\",\n \"atrocious\",\n \"atrophy\",\n \"attach\",\n \"attain\",\n \"attempt\",\n \"attendant\",\n \"attendee\",\n \"attention\",\n \"attentive\",\n \"attest\",\n \"attic\",\n \"attire\",\n \"attitude\",\n \"attractor\",\n \"attribute\",\n \"atypical\",\n \"auction\",\n \"audacious\",\n \"audacity\",\n \"audible\",\n \"audibly\",\n \"audience\",\n \"audio\",\n \"audition\",\n \"augmented\",\n \"august\",\n \"authentic\",\n \"author\",\n \"autism\",\n \"autistic\",\n \"autograph\",\n \"automaker\",\n \"automated\",\n \"automatic\",\n \"autopilot\",\n \"available\",\n \"avalanche\",\n \"avatar\",\n \"avenge\",\n \"avenging\",\n \"avenue\",\n \"average\",\n \"aversion\",\n \"avert\",\n \"aviation\",\n \"aviator\",\n \"avid\",\n \"avoid\",\n \"await\",\n \"awaken\",\n \"award\",\n \"aware\",\n \"awhile\",\n \"awkward\",\n \"awning\",\n \"awoke\",\n \"awry\",\n \"axis\",\n \"babble\",\n \"babbling\",\n \"babied\",\n \"baboon\",\n \"backache\",\n \"backboard\",\n \"backboned\",\n \"backdrop\",\n \"backed\",\n \"backer\",\n \"backfield\",\n \"backfire\",\n \"backhand\",\n \"backing\",\n \"backlands\",\n \"backlash\",\n \"backless\",\n \"backlight\",\n \"backlit\",\n \"backlog\",\n \"backpack\",\n \"backpedal\",\n \"backrest\",\n \"backroom\",\n \"backshift\",\n \"backside\",\n \"backslid\",\n \"backspace\",\n \"backspin\",\n \"backstab\",\n \"backstage\",\n \"backtalk\",\n \"backtrack\",\n \"backup\",\n \"backward\",\n \"backwash\",\n \"backwater\",\n \"backyard\",\n \"bacon\",\n \"bacteria\",\n \"bacterium\",\n \"badass\",\n \"badge\",\n \"badland\",\n \"badly\",\n \"badness\",\n \"baffle\",\n \"baffling\",\n \"bagel\",\n \"bagful\",\n \"baggage\",\n \"bagged\",\n \"baggie\",\n \"bagginess\",\n \"bagging\",\n \"baggy\",\n \"bagpipe\",\n \"baguette\",\n \"baked\",\n \"bakery\",\n \"bakeshop\",\n \"baking\",\n \"balance\",\n \"balancing\",\n \"balcony\",\n \"balmy\",\n \"balsamic\",\n \"bamboo\",\n \"banana\",\n \"banish\",\n \"banister\",\n \"banjo\",\n \"bankable\",\n \"bankbook\",\n \"banked\",\n \"banker\",\n \"banking\",\n \"banknote\",\n \"bankroll\",\n \"banner\",\n \"bannister\",\n \"banshee\",\n \"banter\",\n \"barbecue\",\n \"barbed\",\n \"barbell\",\n \"barber\",\n \"barcode\",\n \"barge\",\n \"bargraph\",\n \"barista\",\n \"baritone\",\n \"barley\",\n \"barmaid\",\n \"barman\",\n \"barn\",\n \"barometer\",\n \"barrack\",\n \"barracuda\",\n \"barrel\",\n \"barrette\",\n \"barricade\",\n \"barrier\",\n \"barstool\",\n \"bartender\",\n \"barterer\",\n \"bash\",\n \"basically\",\n \"basics\",\n \"basil\",\n \"basin\",\n \"basis\",\n \"basket\",\n \"batboy\",\n \"batch\",\n \"bath\",\n \"baton\",\n \"bats\",\n \"battalion\",\n \"battered\",\n \"battering\",\n \"battery\",\n \"batting\",\n \"battle\",\n \"bauble\",\n \"bazooka\",\n \"blabber\",\n \"bladder\",\n \"blade\",\n \"blah\",\n \"blame\",\n \"blaming\",\n \"blanching\",\n \"blandness\",\n \"blank\",\n \"blaspheme\",\n \"blasphemy\",\n \"blast\",\n \"blatancy\",\n \"blatantly\",\n \"blazer\",\n \"blazing\",\n \"bleach\",\n \"bleak\",\n \"bleep\",\n \"blemish\",\n \"blend\",\n \"bless\",\n \"blighted\",\n \"blimp\",\n \"bling\",\n \"blinked\",\n \"blinker\",\n \"blinking\",\n \"blinks\",\n \"blip\",\n \"blissful\",\n \"blitz\",\n \"blizzard\",\n \"bloated\",\n \"bloating\",\n \"blob\",\n \"blog\",\n \"bloomers\",\n \"blooming\",\n \"blooper\",\n \"blot\",\n \"blouse\",\n \"blubber\",\n \"bluff\",\n \"bluish\",\n \"blunderer\",\n \"blunt\",\n \"blurb\",\n \"blurred\",\n \"blurry\",\n \"blurt\",\n \"blush\",\n \"blustery\",\n \"boaster\",\n \"boastful\",\n \"boasting\",\n \"boat\",\n \"bobbed\",\n \"bobbing\",\n \"bobble\",\n \"bobcat\",\n \"bobsled\",\n \"bobtail\",\n \"bodacious\",\n \"body\",\n \"bogged\",\n \"boggle\",\n \"bogus\",\n \"boil\",\n \"bok\",\n \"bolster\",\n \"bolt\",\n \"bonanza\",\n \"bonded\",\n \"bonding\",\n \"bondless\",\n \"boned\",\n \"bonehead\",\n \"boneless\",\n \"bonelike\",\n \"boney\",\n \"bonfire\",\n \"bonnet\",\n \"bonsai\",\n \"bonus\",\n \"bony\",\n \"boogeyman\",\n \"boogieman\",\n \"book\",\n \"boondocks\",\n \"booted\",\n \"booth\",\n \"bootie\",\n \"booting\",\n \"bootlace\",\n \"bootleg\",\n \"boots\",\n \"boozy\",\n \"borax\",\n \"boring\",\n \"borough\",\n \"borrower\",\n \"borrowing\",\n \"boss\",\n \"botanical\",\n \"botanist\",\n \"botany\",\n \"botch\",\n \"both\",\n \"bottle\",\n \"bottling\",\n \"bottom\",\n \"bounce\",\n \"bouncing\",\n \"bouncy\",\n \"bounding\",\n \"boundless\",\n \"bountiful\",\n \"bovine\",\n \"boxcar\",\n \"boxer\",\n \"boxing\",\n \"boxlike\",\n \"boxy\",\n \"breach\",\n \"breath\",\n \"breeches\",\n \"breeching\",\n \"breeder\",\n \"breeding\",\n \"breeze\",\n \"breezy\",\n \"brethren\",\n \"brewery\",\n \"brewing\",\n \"briar\",\n \"bribe\",\n \"brick\",\n \"bride\",\n \"bridged\",\n \"brigade\",\n \"bright\",\n \"brilliant\",\n \"brim\",\n \"bring\",\n \"brink\",\n \"brisket\",\n \"briskly\",\n \"briskness\",\n \"bristle\",\n \"brittle\",\n \"broadband\",\n \"broadcast\",\n \"broaden\",\n \"broadly\",\n \"broadness\",\n \"broadside\",\n \"broadways\",\n \"broiler\",\n \"broiling\",\n \"broken\",\n \"broker\",\n \"bronchial\",\n \"bronco\",\n \"bronze\",\n \"bronzing\",\n \"brook\",\n \"broom\",\n \"brought\",\n \"browbeat\",\n \"brownnose\",\n \"browse\",\n \"browsing\",\n \"bruising\",\n \"brunch\",\n \"brunette\",\n \"brunt\",\n \"brush\",\n \"brussels\",\n \"brute\",\n \"brutishly\",\n \"bubble\",\n \"bubbling\",\n \"bubbly\",\n \"buccaneer\",\n \"bucked\",\n \"bucket\",\n \"buckle\",\n \"buckshot\",\n \"buckskin\",\n \"bucktooth\",\n \"buckwheat\",\n \"buddhism\",\n \"buddhist\",\n \"budding\",\n \"buddy\",\n \"budget\",\n \"buffalo\",\n \"buffed\",\n \"buffer\",\n \"buffing\",\n \"buffoon\",\n \"buggy\",\n \"bulb\",\n \"bulge\",\n \"bulginess\",\n \"bulgur\",\n \"bulk\",\n \"bulldog\",\n \"bulldozer\",\n \"bullfight\",\n \"bullfrog\",\n \"bullhorn\",\n \"bullion\",\n \"bullish\",\n \"bullpen\",\n \"bullring\",\n \"bullseye\",\n \"bullwhip\",\n \"bully\",\n \"bunch\",\n \"bundle\",\n \"bungee\",\n \"bunion\",\n \"bunkbed\",\n \"bunkhouse\",\n \"bunkmate\",\n \"bunny\",\n \"bunt\",\n \"busboy\",\n \"bush\",\n \"busily\",\n \"busload\",\n \"bust\",\n \"busybody\",\n \"buzz\",\n \"cabana\",\n \"cabbage\",\n \"cabbie\",\n \"cabdriver\",\n \"cable\",\n \"caboose\",\n \"cache\",\n \"cackle\",\n \"cacti\",\n \"cactus\",\n \"caddie\",\n \"caddy\",\n \"cadet\",\n \"cadillac\",\n \"cadmium\",\n \"cage\",\n \"cahoots\",\n \"cake\",\n \"calamari\",\n \"calamity\",\n \"calcium\",\n \"calculate\",\n \"calculus\",\n \"caliber\",\n \"calibrate\",\n \"calm\",\n \"caloric\",\n \"calorie\",\n \"calzone\",\n \"camcorder\",\n \"cameo\",\n \"camera\",\n \"camisole\",\n \"camper\",\n \"campfire\",\n \"camping\",\n \"campsite\",\n \"campus\",\n \"canal\",\n \"canary\",\n \"cancel\",\n \"candied\",\n \"candle\",\n \"candy\",\n \"cane\",\n \"canine\",\n \"canister\",\n \"cannabis\",\n \"canned\",\n \"canning\",\n \"cannon\",\n \"cannot\",\n \"canola\",\n \"canon\",\n \"canopener\",\n \"canopy\",\n \"canteen\",\n \"canyon\",\n \"capable\",\n \"capably\",\n \"capacity\",\n \"cape\",\n \"capillary\",\n \"capital\",\n \"capitol\",\n \"capped\",\n \"capricorn\",\n \"capsize\",\n \"capsule\",\n \"caption\",\n \"captivate\",\n \"captive\",\n \"captivity\",\n \"capture\",\n \"caramel\",\n \"carat\",\n \"caravan\",\n \"carbon\",\n \"cardboard\",\n \"carded\",\n \"cardiac\",\n \"cardigan\",\n \"cardinal\",\n \"cardstock\",\n \"carefully\",\n \"caregiver\",\n \"careless\",\n \"caress\",\n \"caretaker\",\n \"cargo\",\n \"caring\",\n \"carless\",\n \"carload\",\n \"carmaker\",\n \"carnage\",\n \"carnation\",\n \"carnival\",\n \"carnivore\",\n \"carol\",\n \"carpenter\",\n \"carpentry\",\n \"carpool\",\n \"carport\",\n \"carried\",\n \"carrot\",\n \"carrousel\",\n \"carry\",\n \"cartel\",\n \"cartload\",\n \"carton\",\n \"cartoon\",\n \"cartridge\",\n \"cartwheel\",\n \"carve\",\n \"carving\",\n \"carwash\",\n \"cascade\",\n \"case\",\n \"cash\",\n \"casing\",\n \"casino\",\n \"casket\",\n \"cassette\",\n \"casually\",\n \"casualty\",\n \"catacomb\",\n \"catalog\",\n \"catalyst\",\n \"catalyze\",\n \"catapult\",\n \"cataract\",\n \"catatonic\",\n \"catcall\",\n \"catchable\",\n \"catcher\",\n \"catching\",\n \"catchy\",\n \"caterer\",\n \"catering\",\n \"catfight\",\n \"catfish\",\n \"cathedral\",\n \"cathouse\",\n \"catlike\",\n \"catnap\",\n \"catnip\",\n \"catsup\",\n \"cattail\",\n \"cattishly\",\n \"cattle\",\n \"catty\",\n \"catwalk\",\n \"caucasian\",\n \"caucus\",\n \"causal\",\n \"causation\",\n \"cause\",\n \"causing\",\n \"cauterize\",\n \"caution\",\n \"cautious\",\n \"cavalier\",\n \"cavalry\",\n \"caviar\",\n \"cavity\",\n \"cedar\",\n \"celery\",\n \"celestial\",\n \"celibacy\",\n \"celibate\",\n \"celtic\",\n \"cement\",\n \"census\",\n \"ceramics\",\n \"ceremony\",\n \"certainly\",\n \"certainty\",\n \"certified\",\n \"certify\",\n \"cesarean\",\n \"cesspool\",\n \"chafe\",\n \"chaffing\",\n \"chain\",\n \"chair\",\n \"chalice\",\n \"challenge\",\n \"chamber\",\n \"chamomile\",\n \"champion\",\n \"chance\",\n \"change\",\n \"channel\",\n \"chant\",\n \"chaos\",\n \"chaperone\",\n \"chaplain\",\n \"chapped\",\n \"chaps\",\n \"chapter\",\n \"character\",\n \"charbroil\",\n \"charcoal\",\n \"charger\",\n \"charging\",\n \"chariot\",\n \"charity\",\n \"charm\",\n \"charred\",\n \"charter\",\n \"charting\",\n \"chase\",\n \"chasing\",\n \"chaste\",\n \"chastise\",\n \"chastity\",\n \"chatroom\",\n \"chatter\",\n \"chatting\",\n \"chatty\",\n \"cheating\",\n \"cheddar\",\n \"cheek\",\n \"cheer\",\n \"cheese\",\n \"cheesy\",\n \"chef\",\n \"chemicals\",\n \"chemist\",\n \"chemo\",\n \"cherisher\",\n \"cherub\",\n \"chess\",\n \"chest\",\n \"chevron\",\n \"chevy\",\n \"chewable\",\n \"chewer\",\n \"chewing\",\n \"chewy\",\n \"chief\",\n \"chihuahua\",\n \"childcare\",\n \"childhood\",\n \"childish\",\n \"childless\",\n \"childlike\",\n \"chili\",\n \"chill\",\n \"chimp\",\n \"chip\",\n \"chirping\",\n \"chirpy\",\n \"chitchat\",\n \"chivalry\",\n \"chive\",\n \"chloride\",\n \"chlorine\",\n \"choice\",\n \"chokehold\",\n \"choking\",\n \"chomp\",\n \"chooser\",\n \"choosing\",\n \"choosy\",\n \"chop\",\n \"chosen\",\n \"chowder\",\n \"chowtime\",\n \"chrome\",\n \"chubby\",\n \"chuck\",\n \"chug\",\n \"chummy\",\n \"chump\",\n \"chunk\",\n \"churn\",\n \"chute\",\n \"cider\",\n \"cilantro\",\n \"cinch\",\n \"cinema\",\n \"cinnamon\",\n \"circle\",\n \"circling\",\n \"circular\",\n \"circulate\",\n \"circus\",\n \"citable\",\n \"citadel\",\n \"citation\",\n \"citizen\",\n \"citric\",\n \"citrus\",\n \"city\",\n \"civic\",\n \"civil\",\n \"clad\",\n \"claim\",\n \"clambake\",\n \"clammy\",\n \"clamor\",\n \"clamp\",\n \"clamshell\",\n \"clang\",\n \"clanking\",\n \"clapped\",\n \"clapper\",\n \"clapping\",\n \"clarify\",\n \"clarinet\",\n \"clarity\",\n \"clash\",\n \"clasp\",\n \"class\",\n \"clatter\",\n \"clause\",\n \"clavicle\",\n \"claw\",\n \"clay\",\n \"clean\",\n \"clear\",\n \"cleat\",\n \"cleaver\",\n \"cleft\",\n \"clench\",\n \"clergyman\",\n \"clerical\",\n \"clerk\",\n \"clever\",\n \"clicker\",\n \"client\",\n \"climate\",\n \"climatic\",\n \"cling\",\n \"clinic\",\n \"clinking\",\n \"clip\",\n \"clique\",\n \"cloak\",\n \"clobber\",\n \"clock\",\n \"clone\",\n \"cloning\",\n \"closable\",\n \"closure\",\n \"clothes\",\n \"clothing\",\n \"cloud\",\n \"clover\",\n \"clubbed\",\n \"clubbing\",\n \"clubhouse\",\n \"clump\",\n \"clumsily\",\n \"clumsy\",\n \"clunky\",\n \"clustered\",\n \"clutch\",\n \"clutter\",\n \"coach\",\n \"coagulant\",\n \"coastal\",\n \"coaster\",\n \"coasting\",\n \"coastland\",\n \"coastline\",\n \"coat\",\n \"coauthor\",\n \"cobalt\",\n \"cobbler\",\n \"cobweb\",\n \"cocoa\",\n \"coconut\",\n \"cod\",\n \"coeditor\",\n \"coerce\",\n \"coexist\",\n \"coffee\",\n \"cofounder\",\n \"cognition\",\n \"cognitive\",\n \"cogwheel\",\n \"coherence\",\n \"coherent\",\n \"cohesive\",\n \"coil\",\n \"coke\",\n \"cola\",\n \"cold\",\n \"coleslaw\",\n \"coliseum\",\n \"collage\",\n \"collapse\",\n \"collar\",\n \"collected\",\n \"collector\",\n \"collide\",\n \"collie\",\n \"collision\",\n \"colonial\",\n \"colonist\",\n \"colonize\",\n \"colony\",\n \"colossal\",\n \"colt\",\n \"coma\",\n \"come\",\n \"comfort\",\n \"comfy\",\n \"comic\",\n \"coming\",\n \"comma\",\n \"commence\",\n \"commend\",\n \"comment\",\n \"commerce\",\n \"commode\",\n \"commodity\",\n \"commodore\",\n \"common\",\n \"commotion\",\n \"commute\",\n \"commuting\",\n \"compacted\",\n \"compacter\",\n \"compactly\",\n \"compactor\",\n \"companion\",\n \"company\",\n \"compare\",\n \"compel\",\n \"compile\",\n \"comply\",\n \"component\",\n \"composed\",\n \"composer\",\n \"composite\",\n \"compost\",\n \"composure\",\n \"compound\",\n \"compress\",\n \"comprised\",\n \"computer\",\n \"computing\",\n \"comrade\",\n \"concave\",\n \"conceal\",\n \"conceded\",\n \"concept\",\n \"concerned\",\n \"concert\",\n \"conch\",\n \"concierge\",\n \"concise\",\n \"conclude\",\n \"concrete\",\n \"concur\",\n \"condense\",\n \"condiment\",\n \"condition\",\n \"condone\",\n \"conducive\",\n \"conductor\",\n \"conduit\",\n \"cone\",\n \"confess\",\n \"confetti\",\n \"confidant\",\n \"confident\",\n \"confider\",\n \"confiding\",\n \"configure\",\n \"confined\",\n \"confining\",\n \"confirm\",\n \"conflict\",\n \"conform\",\n \"confound\",\n \"confront\",\n \"confused\",\n \"confusing\",\n \"confusion\",\n \"congenial\",\n \"congested\",\n \"congrats\",\n \"congress\",\n \"conical\",\n \"conjoined\",\n \"conjure\",\n \"conjuror\",\n \"connected\",\n \"connector\",\n \"consensus\",\n \"consent\",\n \"console\",\n \"consoling\",\n \"consonant\",\n \"constable\",\n \"constant\",\n \"constrain\",\n \"constrict\",\n \"construct\",\n \"consult\",\n \"consumer\",\n \"consuming\",\n \"contact\",\n \"container\",\n \"contempt\",\n \"contend\",\n \"contented\",\n \"contently\",\n \"contents\",\n \"contest\",\n \"context\",\n \"contort\",\n \"contour\",\n \"contrite\",\n \"control\",\n \"contusion\",\n \"convene\",\n \"convent\",\n \"copartner\",\n \"cope\",\n \"copied\",\n \"copier\",\n \"copilot\",\n \"coping\",\n \"copious\",\n \"copper\",\n \"copy\",\n \"coral\",\n \"cork\",\n \"cornball\",\n \"cornbread\",\n \"corncob\",\n \"cornea\",\n \"corned\",\n \"corner\",\n \"cornfield\",\n \"cornflake\",\n \"cornhusk\",\n \"cornmeal\",\n \"cornstalk\",\n \"corny\",\n \"coronary\",\n \"coroner\",\n \"corporal\",\n \"corporate\",\n \"corral\",\n \"correct\",\n \"corridor\",\n \"corrode\",\n \"corroding\",\n \"corrosive\",\n \"corsage\",\n \"corset\",\n \"cortex\",\n \"cosigner\",\n \"cosmetics\",\n \"cosmic\",\n \"cosmos\",\n \"cosponsor\",\n \"cost\",\n \"cottage\",\n \"cotton\",\n \"couch\",\n \"cough\",\n \"could\",\n \"countable\",\n \"countdown\",\n \"counting\",\n \"countless\",\n \"country\",\n \"county\",\n \"courier\",\n \"covenant\",\n \"cover\",\n \"coveted\",\n \"coveting\",\n \"coyness\",\n \"cozily\",\n \"coziness\",\n \"cozy\",\n \"crabbing\",\n \"crabgrass\",\n \"crablike\",\n \"crabmeat\",\n \"cradle\",\n \"cradling\",\n \"crafter\",\n \"craftily\",\n \"craftsman\",\n \"craftwork\",\n \"crafty\",\n \"cramp\",\n \"cranberry\",\n \"crane\",\n \"cranial\",\n \"cranium\",\n \"crank\",\n \"crate\",\n \"crave\",\n \"craving\",\n \"crawfish\",\n \"crawlers\",\n \"crawling\",\n \"crayfish\",\n \"crayon\",\n \"crazed\",\n \"crazily\",\n \"craziness\",\n \"crazy\",\n \"creamed\",\n \"creamer\",\n \"creamlike\",\n \"crease\",\n \"creasing\",\n \"creatable\",\n \"create\",\n \"creation\",\n \"creative\",\n \"creature\",\n \"credible\",\n \"credibly\",\n \"credit\",\n \"creed\",\n \"creme\",\n \"creole\",\n \"crepe\",\n \"crept\",\n \"crescent\",\n \"crested\",\n \"cresting\",\n \"crestless\",\n \"crevice\",\n \"crewless\",\n \"crewman\",\n \"crewmate\",\n \"crib\",\n \"cricket\",\n \"cried\",\n \"crier\",\n \"crimp\",\n \"crimson\",\n \"cringe\",\n \"cringing\",\n \"crinkle\",\n \"crinkly\",\n \"crisped\",\n \"crisping\",\n \"crisply\",\n \"crispness\",\n \"crispy\",\n \"criteria\",\n \"critter\",\n \"croak\",\n \"crock\",\n \"crook\",\n \"croon\",\n \"crop\",\n \"cross\",\n \"crouch\",\n \"crouton\",\n \"crowbar\",\n \"crowd\",\n \"crown\",\n \"crucial\",\n \"crudely\",\n \"crudeness\",\n \"cruelly\",\n \"cruelness\",\n \"cruelty\",\n \"crumb\",\n \"crummiest\",\n \"crummy\",\n \"crumpet\",\n \"crumpled\",\n \"cruncher\",\n \"crunching\",\n \"crunchy\",\n \"crusader\",\n \"crushable\",\n \"crushed\",\n \"crusher\",\n \"crushing\",\n \"crust\",\n \"crux\",\n \"crying\",\n \"cryptic\",\n \"crystal\",\n \"cubbyhole\",\n \"cube\",\n \"cubical\",\n \"cubicle\",\n \"cucumber\",\n \"cuddle\",\n \"cuddly\",\n \"cufflink\",\n \"culinary\",\n \"culminate\",\n \"culpable\",\n \"culprit\",\n \"cultivate\",\n \"cultural\",\n \"culture\",\n \"cupbearer\",\n \"cupcake\",\n \"cupid\",\n \"cupped\",\n \"cupping\",\n \"curable\",\n \"curator\",\n \"curdle\",\n \"cure\",\n \"curfew\",\n \"curing\",\n \"curled\",\n \"curler\",\n \"curliness\",\n \"curling\",\n \"curly\",\n \"curry\",\n \"curse\",\n \"cursive\",\n \"cursor\",\n \"curtain\",\n \"curtly\",\n \"curtsy\",\n \"curvature\",\n \"curve\",\n \"curvy\",\n \"cushy\",\n \"cusp\",\n \"cussed\",\n \"custard\",\n \"custodian\",\n \"custody\",\n \"customary\",\n \"customer\",\n \"customize\",\n \"customs\",\n \"cut\",\n \"cycle\",\n \"cyclic\",\n \"cycling\",\n \"cyclist\",\n \"cylinder\",\n \"cymbal\",\n \"cytoplasm\",\n \"cytoplast\",\n \"dab\",\n \"dad\",\n \"daffodil\",\n \"dagger\",\n \"daily\",\n \"daintily\",\n \"dainty\",\n \"dairy\",\n \"daisy\",\n \"dallying\",\n \"dance\",\n \"dancing\",\n \"dandelion\",\n \"dander\",\n \"dandruff\",\n \"dandy\",\n \"danger\",\n \"dangle\",\n \"dangling\",\n \"daredevil\",\n \"dares\",\n \"daringly\",\n \"darkened\",\n \"darkening\",\n \"darkish\",\n \"darkness\",\n \"darkroom\",\n \"darling\",\n \"darn\",\n \"dart\",\n \"darwinism\",\n \"dash\",\n \"dastardly\",\n \"data\",\n \"datebook\",\n \"dating\",\n \"daughter\",\n \"daunting\",\n \"dawdler\",\n \"dawn\",\n \"daybed\",\n \"daybreak\",\n \"daycare\",\n \"daydream\",\n \"daylight\",\n \"daylong\",\n \"dayroom\",\n \"daytime\",\n \"dazzler\",\n \"dazzling\",\n \"deacon\",\n \"deafening\",\n \"deafness\",\n \"dealer\",\n \"dealing\",\n \"dealmaker\",\n \"dealt\",\n \"dean\",\n \"debatable\",\n \"debate\",\n \"debating\",\n \"debit\",\n \"debrief\",\n \"debtless\",\n \"debtor\",\n \"debug\",\n \"debunk\",\n \"decade\",\n \"decaf\",\n \"decal\",\n \"decathlon\",\n \"decay\",\n \"deceased\",\n \"deceit\",\n \"deceiver\",\n \"deceiving\",\n \"december\",\n \"decency\",\n \"decent\",\n \"deception\",\n \"deceptive\",\n \"decibel\",\n \"decidable\",\n \"decimal\",\n \"decimeter\",\n \"decipher\",\n \"deck\",\n \"declared\",\n \"decline\",\n \"decode\",\n \"decompose\",\n \"decorated\",\n \"decorator\",\n \"decoy\",\n \"decrease\",\n \"decree\",\n \"dedicate\",\n \"dedicator\",\n \"deduce\",\n \"deduct\",\n \"deed\",\n \"deem\",\n \"deepen\",\n \"deeply\",\n \"deepness\",\n \"deface\",\n \"defacing\",\n \"defame\",\n \"default\",\n \"defeat\",\n \"defection\",\n \"defective\",\n \"defendant\",\n \"defender\",\n \"defense\",\n \"defensive\",\n \"deferral\",\n \"deferred\",\n \"defiance\",\n \"defiant\",\n \"defile\",\n \"defiling\",\n \"define\",\n \"definite\",\n \"deflate\",\n \"deflation\",\n \"deflator\",\n \"deflected\",\n \"deflector\",\n \"defog\",\n \"deforest\",\n \"defraud\",\n \"defrost\",\n \"deftly\",\n \"defuse\",\n \"defy\",\n \"degraded\",\n \"degrading\",\n \"degrease\",\n \"degree\",\n \"dehydrate\",\n \"deity\",\n \"dejected\",\n \"delay\",\n \"delegate\",\n \"delegator\",\n \"delete\",\n \"deletion\",\n \"delicacy\",\n \"delicate\",\n \"delicious\",\n \"delighted\",\n \"delirious\",\n \"delirium\",\n \"deliverer\",\n \"delivery\",\n \"delouse\",\n \"delta\",\n \"deluge\",\n \"delusion\",\n \"deluxe\",\n \"demanding\",\n \"demeaning\",\n \"demeanor\",\n \"demise\",\n \"democracy\",\n \"democrat\",\n \"demote\",\n \"demotion\",\n \"demystify\",\n \"denatured\",\n \"deniable\",\n \"denial\",\n \"denim\",\n \"denote\",\n \"dense\",\n \"density\",\n \"dental\",\n \"dentist\",\n \"denture\",\n \"deny\",\n \"deodorant\",\n \"deodorize\",\n \"departed\",\n \"departure\",\n \"depict\",\n \"deplete\",\n \"depletion\",\n \"deplored\",\n \"deploy\",\n \"deport\",\n \"depose\",\n \"depraved\",\n \"depravity\",\n \"deprecate\",\n \"depress\",\n \"deprive\",\n \"depth\",\n \"deputize\",\n \"deputy\",\n \"derail\",\n \"deranged\",\n \"derby\",\n \"derived\",\n \"desecrate\",\n \"deserve\",\n \"deserving\",\n \"designate\",\n \"designed\",\n \"designer\",\n \"designing\",\n \"deskbound\",\n \"desktop\",\n \"deskwork\",\n \"desolate\",\n \"despair\",\n \"despise\",\n \"despite\",\n \"destiny\",\n \"destitute\",\n \"destruct\",\n \"detached\",\n \"detail\",\n \"detection\",\n \"detective\",\n \"detector\",\n \"detention\",\n \"detergent\",\n \"detest\",\n \"detonate\",\n \"detonator\",\n \"detoxify\",\n \"detract\",\n \"deuce\",\n \"devalue\",\n \"deviancy\",\n \"deviant\",\n \"deviate\",\n \"deviation\",\n \"deviator\",\n \"device\",\n \"devious\",\n \"devotedly\",\n \"devotee\",\n \"devotion\",\n \"devourer\",\n \"devouring\",\n \"devoutly\",\n \"dexterity\",\n \"dexterous\",\n \"diabetes\",\n \"diabetic\",\n \"diabolic\",\n \"diagnoses\",\n \"diagnosis\",\n \"diagram\",\n \"dial\",\n \"diameter\",\n \"diaper\",\n \"diaphragm\",\n \"diary\",\n \"dice\",\n \"dicing\",\n \"dictate\",\n \"dictation\",\n \"dictator\",\n \"difficult\",\n \"diffused\",\n \"diffuser\",\n \"diffusion\",\n \"diffusive\",\n \"dig\",\n \"dilation\",\n \"diligence\",\n \"diligent\",\n \"dill\",\n \"dilute\",\n \"dime\",\n \"diminish\",\n \"dimly\",\n \"dimmed\",\n \"dimmer\",\n \"dimness\",\n \"dimple\",\n \"diner\",\n \"dingbat\",\n \"dinghy\",\n \"dinginess\",\n \"dingo\",\n \"dingy\",\n \"dining\",\n \"dinner\",\n \"diocese\",\n \"dioxide\",\n \"diploma\",\n \"dipped\",\n \"dipper\",\n \"dipping\",\n \"directed\",\n \"direction\",\n \"directive\",\n \"directly\",\n \"directory\",\n \"direness\",\n \"dirtiness\",\n \"disabled\",\n \"disagree\",\n \"disallow\",\n \"disarm\",\n \"disarray\",\n \"disaster\",\n \"disband\",\n \"disbelief\",\n \"disburse\",\n \"discard\",\n \"discern\",\n \"discharge\",\n \"disclose\",\n \"discolor\",\n \"discount\",\n \"discourse\",\n \"discover\",\n \"discuss\",\n \"disdain\",\n \"disengage\",\n \"disfigure\",\n \"disgrace\",\n \"dish\",\n \"disinfect\",\n \"disjoin\",\n \"disk\",\n \"dislike\",\n \"disliking\",\n \"dislocate\",\n \"dislodge\",\n \"disloyal\",\n \"dismantle\",\n \"dismay\",\n \"dismiss\",\n \"dismount\",\n \"disobey\",\n \"disorder\",\n \"disown\",\n \"disparate\",\n \"disparity\",\n \"dispatch\",\n \"dispense\",\n \"dispersal\",\n \"dispersed\",\n \"disperser\",\n \"displace\",\n \"display\",\n \"displease\",\n \"disposal\",\n \"dispose\",\n \"disprove\",\n \"dispute\",\n \"disregard\",\n \"disrupt\",\n \"dissuade\",\n \"distance\",\n \"distant\",\n \"distaste\",\n \"distill\",\n \"distinct\",\n \"distort\",\n \"distract\",\n \"distress\",\n \"district\",\n \"distrust\",\n \"ditch\",\n \"ditto\",\n \"ditzy\",\n \"dividable\",\n \"divided\",\n \"dividend\",\n \"dividers\",\n \"dividing\",\n \"divinely\",\n \"diving\",\n \"divinity\",\n \"divisible\",\n \"divisibly\",\n \"division\",\n \"divisive\",\n \"divorcee\",\n \"dizziness\",\n \"dizzy\",\n \"doable\",\n \"docile\",\n \"dock\",\n \"doctrine\",\n \"document\",\n \"dodge\",\n \"dodgy\",\n \"doily\",\n \"doing\",\n \"dole\",\n \"dollar\",\n \"dollhouse\",\n \"dollop\",\n \"dolly\",\n \"dolphin\",\n \"domain\",\n \"domelike\",\n \"domestic\",\n \"dominion\",\n \"dominoes\",\n \"donated\",\n \"donation\",\n \"donator\",\n \"donor\",\n \"donut\",\n \"doodle\",\n \"doorbell\",\n \"doorframe\",\n \"doorknob\",\n \"doorman\",\n \"doormat\",\n \"doornail\",\n \"doorpost\",\n \"doorstep\",\n \"doorstop\",\n \"doorway\",\n \"doozy\",\n \"dork\",\n \"dormitory\",\n \"dorsal\",\n \"dosage\",\n \"dose\",\n \"dotted\",\n \"doubling\",\n \"douche\",\n \"dove\",\n \"down\",\n \"dowry\",\n \"doze\",\n \"drab\",\n \"dragging\",\n \"dragonfly\",\n \"dragonish\",\n \"dragster\",\n \"drainable\",\n \"drainage\",\n \"drained\",\n \"drainer\",\n \"drainpipe\",\n \"dramatic\",\n \"dramatize\",\n \"drank\",\n \"drapery\",\n \"drastic\",\n \"draw\",\n \"dreaded\",\n \"dreadful\",\n \"dreadlock\",\n \"dreamboat\",\n \"dreamily\",\n \"dreamland\",\n \"dreamless\",\n \"dreamlike\",\n \"dreamt\",\n \"dreamy\",\n \"drearily\",\n \"dreary\",\n \"drench\",\n \"dress\",\n \"drew\",\n \"dribble\",\n \"dried\",\n \"drier\",\n \"drift\",\n \"driller\",\n \"drilling\",\n \"drinkable\",\n \"drinking\",\n \"dripping\",\n \"drippy\",\n \"drivable\",\n \"driven\",\n \"driver\",\n \"driveway\",\n \"driving\",\n \"drizzle\",\n \"drizzly\",\n \"drone\",\n \"drool\",\n \"droop\",\n \"drop-down\",\n \"dropbox\",\n \"dropkick\",\n \"droplet\",\n \"dropout\",\n \"dropper\",\n \"drove\",\n \"drown\",\n \"drowsily\",\n \"drudge\",\n \"drum\",\n \"dry\",\n \"dubbed\",\n \"dubiously\",\n \"duchess\",\n \"duckbill\",\n \"ducking\",\n \"duckling\",\n \"ducktail\",\n \"ducky\",\n \"duct\",\n \"dude\",\n \"duffel\",\n \"dugout\",\n \"duh\",\n \"duke\",\n \"duller\",\n \"dullness\",\n \"duly\",\n \"dumping\",\n \"dumpling\",\n \"dumpster\",\n \"duo\",\n \"dupe\",\n \"duplex\",\n \"duplicate\",\n \"duplicity\",\n \"durable\",\n \"durably\",\n \"duration\",\n \"duress\",\n \"during\",\n \"dusk\",\n \"dust\",\n \"dutiful\",\n \"duty\",\n \"duvet\",\n \"dwarf\",\n \"dweeb\",\n \"dwelled\",\n \"dweller\",\n \"dwelling\",\n \"dwindle\",\n \"dwindling\",\n \"dynamic\",\n \"dynamite\",\n \"dynasty\",\n \"dyslexia\",\n \"dyslexic\",\n \"each\",\n \"eagle\",\n \"earache\",\n \"eardrum\",\n \"earflap\",\n \"earful\",\n \"earlobe\",\n \"early\",\n \"earmark\",\n \"earmuff\",\n \"earphone\",\n \"earpiece\",\n \"earplugs\",\n \"earring\",\n \"earshot\",\n \"earthen\",\n \"earthlike\",\n \"earthling\",\n \"earthly\",\n \"earthworm\",\n \"earthy\",\n \"earwig\",\n \"easeful\",\n \"easel\",\n \"easiest\",\n \"easily\",\n \"easiness\",\n \"easing\",\n \"eastbound\",\n \"eastcoast\",\n \"easter\",\n \"eastward\",\n \"eatable\",\n \"eaten\",\n \"eatery\",\n \"eating\",\n \"eats\",\n \"ebay\",\n \"ebony\",\n \"ebook\",\n \"ecard\",\n \"eccentric\",\n \"echo\",\n \"eclair\",\n \"eclipse\",\n \"ecologist\",\n \"ecology\",\n \"economic\",\n \"economist\",\n \"economy\",\n \"ecosphere\",\n \"ecosystem\",\n \"edge\",\n \"edginess\",\n \"edging\",\n \"edgy\",\n \"edition\",\n \"editor\",\n \"educated\",\n \"education\",\n \"educator\",\n \"eel\",\n \"effective\",\n \"effects\",\n \"efficient\",\n \"effort\",\n \"eggbeater\",\n \"egging\",\n \"eggnog\",\n \"eggplant\",\n \"eggshell\",\n \"egomaniac\",\n \"egotism\",\n \"egotistic\",\n \"either\",\n \"eject\",\n \"elaborate\",\n \"elastic\",\n \"elated\",\n \"elbow\",\n \"eldercare\",\n \"elderly\",\n \"eldest\",\n \"electable\",\n \"election\",\n \"elective\",\n \"elephant\",\n \"elevate\",\n \"elevating\",\n \"elevation\",\n \"elevator\",\n \"eleven\",\n \"elf\",\n \"eligible\",\n \"eligibly\",\n \"eliminate\",\n \"elite\",\n \"elitism\",\n \"elixir\",\n \"elk\",\n \"ellipse\",\n \"elliptic\",\n \"elm\",\n \"elongated\",\n \"elope\",\n \"eloquence\",\n \"eloquent\",\n \"elsewhere\",\n \"elude\",\n \"elusive\",\n \"elves\",\n \"email\",\n \"embargo\",\n \"embark\",\n \"embassy\",\n \"embattled\",\n \"embellish\",\n \"ember\",\n \"embezzle\",\n \"emblaze\",\n \"emblem\",\n \"embody\",\n \"embolism\",\n \"emboss\",\n \"embroider\",\n \"emcee\",\n \"emerald\",\n \"emergency\",\n \"emission\",\n \"emit\",\n \"emote\",\n \"emoticon\",\n \"emotion\",\n \"empathic\",\n \"empathy\",\n \"emperor\",\n \"emphases\",\n \"emphasis\",\n \"emphasize\",\n \"emphatic\",\n \"empirical\",\n \"employed\",\n \"employee\",\n \"employer\",\n \"emporium\",\n \"empower\",\n \"emptier\",\n \"emptiness\",\n \"empty\",\n \"emu\",\n \"enable\",\n \"enactment\",\n \"enamel\",\n \"enchanted\",\n \"enchilada\",\n \"encircle\",\n \"enclose\",\n \"enclosure\",\n \"encode\",\n \"encore\",\n \"encounter\",\n \"encourage\",\n \"encroach\",\n \"encrust\",\n \"encrypt\",\n \"endanger\",\n \"endeared\",\n \"endearing\",\n \"ended\",\n \"ending\",\n \"endless\",\n \"endnote\",\n \"endocrine\",\n \"endorphin\",\n \"endorse\",\n \"endowment\",\n \"endpoint\",\n \"endurable\",\n \"endurance\",\n \"enduring\",\n \"energetic\",\n \"energize\",\n \"energy\",\n \"enforced\",\n \"enforcer\",\n \"engaged\",\n \"engaging\",\n \"engine\",\n \"engorge\",\n \"engraved\",\n \"engraver\",\n \"engraving\",\n \"engross\",\n \"engulf\",\n \"enhance\",\n \"enigmatic\",\n \"enjoyable\",\n \"enjoyably\",\n \"enjoyer\",\n \"enjoying\",\n \"enjoyment\",\n \"enlarged\",\n \"enlarging\",\n \"enlighten\",\n \"enlisted\",\n \"enquirer\",\n \"enrage\",\n \"enrich\",\n \"enroll\",\n \"enslave\",\n \"ensnare\",\n \"ensure\",\n \"entail\",\n \"entangled\",\n \"entering\",\n \"entertain\",\n \"enticing\",\n \"entire\",\n \"entitle\",\n \"entity\",\n \"entomb\",\n \"entourage\",\n \"entrap\",\n \"entree\",\n \"entrench\",\n \"entrust\",\n \"entryway\",\n \"entwine\",\n \"enunciate\",\n \"envelope\",\n \"enviable\",\n \"enviably\",\n \"envious\",\n \"envision\",\n \"envoy\",\n \"envy\",\n \"enzyme\",\n \"epic\",\n \"epidemic\",\n \"epidermal\",\n \"epidermis\",\n \"epidural\",\n \"epilepsy\",\n \"epileptic\",\n \"epilogue\",\n \"epiphany\",\n \"episode\",\n \"equal\",\n \"equate\",\n \"equation\",\n \"equator\",\n \"equinox\",\n \"equipment\",\n \"equity\",\n \"equivocal\",\n \"eradicate\",\n \"erasable\",\n \"erased\",\n \"eraser\",\n \"erasure\",\n \"ergonomic\",\n \"errand\",\n \"errant\",\n \"erratic\",\n \"error\",\n \"erupt\",\n \"escalate\",\n \"escalator\",\n \"escapable\",\n \"escapade\",\n \"escapist\",\n \"escargot\",\n \"eskimo\",\n \"esophagus\",\n \"espionage\",\n \"espresso\",\n \"esquire\",\n \"essay\",\n \"essence\",\n \"essential\",\n \"establish\",\n \"estate\",\n \"esteemed\",\n \"estimate\",\n \"estimator\",\n \"estranged\",\n \"estrogen\",\n \"etching\",\n \"eternal\",\n \"eternity\",\n \"ethanol\",\n \"ether\",\n \"ethically\",\n \"ethics\",\n \"euphemism\",\n \"evacuate\",\n \"evacuee\",\n \"evade\",\n \"evaluate\",\n \"evaluator\",\n \"evaporate\",\n \"evasion\",\n \"evasive\",\n \"even\",\n \"everglade\",\n \"evergreen\",\n \"everybody\",\n \"everyday\",\n \"everyone\",\n \"evict\",\n \"evidence\",\n \"evident\",\n \"evil\",\n \"evoke\",\n \"evolution\",\n \"evolve\",\n \"exact\",\n \"exalted\",\n \"example\",\n \"excavate\",\n \"excavator\",\n \"exceeding\",\n \"exception\",\n \"excess\",\n \"exchange\",\n \"excitable\",\n \"exciting\",\n \"exclaim\",\n \"exclude\",\n \"excluding\",\n \"exclusion\",\n \"exclusive\",\n \"excretion\",\n \"excretory\",\n \"excursion\",\n \"excusable\",\n \"excusably\",\n \"excuse\",\n \"exemplary\",\n \"exemplify\",\n \"exemption\",\n \"exerciser\",\n \"exert\",\n \"exes\",\n \"exfoliate\",\n \"exhale\",\n \"exhaust\",\n \"exhume\",\n \"exile\",\n \"existing\",\n \"exit\",\n \"exodus\",\n \"exonerate\",\n \"exorcism\",\n \"exorcist\",\n \"expand\",\n \"expanse\",\n \"expansion\",\n \"expansive\",\n \"expectant\",\n \"expedited\",\n \"expediter\",\n \"expel\",\n \"expend\",\n \"expenses\",\n \"expensive\",\n \"expert\",\n \"expire\",\n \"expiring\",\n \"explain\",\n \"expletive\",\n \"explicit\",\n \"explode\",\n \"exploit\",\n \"explore\",\n \"exploring\",\n \"exponent\",\n \"exporter\",\n \"exposable\",\n \"expose\",\n \"exposure\",\n \"express\",\n \"expulsion\",\n \"exquisite\",\n \"extended\",\n \"extending\",\n \"extent\",\n \"extenuate\",\n \"exterior\",\n \"external\",\n \"extinct\",\n \"extortion\",\n \"extradite\",\n \"extras\",\n \"extrovert\",\n \"extrude\",\n \"extruding\",\n \"exuberant\",\n \"fable\",\n \"fabric\",\n \"fabulous\",\n \"facebook\",\n \"facecloth\",\n \"facedown\",\n \"faceless\",\n \"facelift\",\n \"faceplate\",\n \"faceted\",\n \"facial\",\n \"facility\",\n \"facing\",\n \"facsimile\",\n \"faction\",\n \"factoid\",\n \"factor\",\n \"factsheet\",\n \"factual\",\n \"faculty\",\n \"fade\",\n \"fading\",\n \"failing\",\n \"falcon\",\n \"fall\",\n \"false\",\n \"falsify\",\n \"fame\",\n \"familiar\",\n \"family\",\n \"famine\",\n \"famished\",\n \"fanatic\",\n \"fancied\",\n \"fanciness\",\n \"fancy\",\n \"fanfare\",\n \"fang\",\n \"fanning\",\n \"fantasize\",\n \"fantastic\",\n \"fantasy\",\n \"fascism\",\n \"fastball\",\n \"faster\",\n \"fasting\",\n \"fastness\",\n \"faucet\",\n \"favorable\",\n \"favorably\",\n \"favored\",\n \"favoring\",\n \"favorite\",\n \"fax\",\n \"feast\",\n \"federal\",\n \"fedora\",\n \"feeble\",\n \"feed\",\n \"feel\",\n \"feisty\",\n \"feline\",\n \"felt-tip\",\n \"feminine\",\n \"feminism\",\n \"feminist\",\n \"feminize\",\n \"femur\",\n \"fence\",\n \"fencing\",\n \"fender\",\n \"ferment\",\n \"fernlike\",\n \"ferocious\",\n \"ferocity\",\n \"ferret\",\n \"ferris\",\n \"ferry\",\n \"fervor\",\n \"fester\",\n \"festival\",\n \"festive\",\n \"festivity\",\n \"fetal\",\n \"fetch\",\n \"fever\",\n \"fiber\",\n \"fiction\",\n \"fiddle\",\n \"fiddling\",\n \"fidelity\",\n \"fidgeting\",\n \"fidgety\",\n \"fifteen\",\n \"fifth\",\n \"fiftieth\",\n \"fifty\",\n \"figment\",\n \"figure\",\n \"figurine\",\n \"filing\",\n \"filled\",\n \"filler\",\n \"filling\",\n \"film\",\n \"filter\",\n \"filth\",\n \"filtrate\",\n \"finale\",\n \"finalist\",\n \"finalize\",\n \"finally\",\n \"finance\",\n \"financial\",\n \"finch\",\n \"fineness\",\n \"finer\",\n \"finicky\",\n \"finished\",\n \"finisher\",\n \"finishing\",\n \"finite\",\n \"finless\",\n \"finlike\",\n \"fiscally\",\n \"fit\",\n \"five\",\n \"flaccid\",\n \"flagman\",\n \"flagpole\",\n \"flagship\",\n \"flagstick\",\n \"flagstone\",\n \"flail\",\n \"flakily\",\n \"flaky\",\n \"flame\",\n \"flammable\",\n \"flanked\",\n \"flanking\",\n \"flannels\",\n \"flap\",\n \"flaring\",\n \"flashback\",\n \"flashbulb\",\n \"flashcard\",\n \"flashily\",\n \"flashing\",\n \"flashy\",\n \"flask\",\n \"flatbed\",\n \"flatfoot\",\n \"flatly\",\n \"flatness\",\n \"flatten\",\n \"flattered\",\n \"flatterer\",\n \"flattery\",\n \"flattop\",\n \"flatware\",\n \"flatworm\",\n \"flavored\",\n \"flavorful\",\n \"flavoring\",\n \"flaxseed\",\n \"fled\",\n \"fleshed\",\n \"fleshy\",\n \"flick\",\n \"flier\",\n \"flight\",\n \"flinch\",\n \"fling\",\n \"flint\",\n \"flip\",\n \"flirt\",\n \"float\",\n \"flock\",\n \"flogging\",\n \"flop\",\n \"floral\",\n \"florist\",\n \"floss\",\n \"flounder\",\n \"flyable\",\n \"flyaway\",\n \"flyer\",\n \"flying\",\n \"flyover\",\n \"flypaper\",\n \"foam\",\n \"foe\",\n \"fog\",\n \"foil\",\n \"folic\",\n \"folk\",\n \"follicle\",\n \"follow\",\n \"fondling\",\n \"fondly\",\n \"fondness\",\n \"fondue\",\n \"font\",\n \"food\",\n \"fool\",\n \"footage\",\n \"football\",\n \"footbath\",\n \"footboard\",\n \"footer\",\n \"footgear\",\n \"foothill\",\n \"foothold\",\n \"footing\",\n \"footless\",\n \"footman\",\n \"footnote\",\n \"footpad\",\n \"footpath\",\n \"footprint\",\n \"footrest\",\n \"footsie\",\n \"footsore\",\n \"footwear\",\n \"footwork\",\n \"fossil\",\n \"foster\",\n \"founder\",\n \"founding\",\n \"fountain\",\n \"fox\",\n \"foyer\",\n \"fraction\",\n \"fracture\",\n \"fragile\",\n \"fragility\",\n \"fragment\",\n \"fragrance\",\n \"fragrant\",\n \"frail\",\n \"frame\",\n \"framing\",\n \"frantic\",\n \"fraternal\",\n \"frayed\",\n \"fraying\",\n \"frays\",\n \"freckled\",\n \"freckles\",\n \"freebase\",\n \"freebee\",\n \"freebie\",\n \"freedom\",\n \"freefall\",\n \"freehand\",\n \"freeing\",\n \"freeload\",\n \"freely\",\n \"freemason\",\n \"freeness\",\n \"freestyle\",\n \"freeware\",\n \"freeway\",\n \"freewill\",\n \"freezable\",\n \"freezing\",\n \"freight\",\n \"french\",\n \"frenzied\",\n \"frenzy\",\n \"frequency\",\n \"frequent\",\n \"fresh\",\n \"fretful\",\n \"fretted\",\n \"friction\",\n \"friday\",\n \"fridge\",\n \"fried\",\n \"friend\",\n \"frighten\",\n \"frightful\",\n \"frigidity\",\n \"frigidly\",\n \"frill\",\n \"fringe\",\n \"frisbee\",\n \"frisk\",\n \"fritter\",\n \"frivolous\",\n \"frolic\",\n \"from\",\n \"front\",\n \"frostbite\",\n \"frosted\",\n \"frostily\",\n \"frosting\",\n \"frostlike\",\n \"frosty\",\n \"froth\",\n \"frown\",\n \"frozen\",\n \"fructose\",\n \"frugality\",\n \"frugally\",\n \"fruit\",\n \"frustrate\",\n \"frying\",\n \"gab\",\n \"gaffe\",\n \"gag\",\n \"gainfully\",\n \"gaining\",\n \"gains\",\n \"gala\",\n \"gallantly\",\n \"galleria\",\n \"gallery\",\n \"galley\",\n \"gallon\",\n \"gallows\",\n \"gallstone\",\n \"galore\",\n \"galvanize\",\n \"gambling\",\n \"game\",\n \"gaming\",\n \"gamma\",\n \"gander\",\n \"gangly\",\n \"gangrene\",\n \"gangway\",\n \"gap\",\n \"garage\",\n \"garbage\",\n \"garden\",\n \"gargle\",\n \"garland\",\n \"garlic\",\n \"garment\",\n \"garnet\",\n \"garnish\",\n \"garter\",\n \"gas\",\n \"gatherer\",\n \"gathering\",\n \"gating\",\n \"gauging\",\n \"gauntlet\",\n \"gauze\",\n \"gave\",\n \"gawk\",\n \"gazing\",\n \"gear\",\n \"gecko\",\n \"geek\",\n \"geiger\",\n \"gem\",\n \"gender\",\n \"generic\",\n \"generous\",\n \"genetics\",\n \"genre\",\n \"gentile\",\n \"gentleman\",\n \"gently\",\n \"gents\",\n \"geography\",\n \"geologic\",\n \"geologist\",\n \"geology\",\n \"geometric\",\n \"geometry\",\n \"geranium\",\n \"gerbil\",\n \"geriatric\",\n \"germicide\",\n \"germinate\",\n \"germless\",\n \"germproof\",\n \"gestate\",\n \"gestation\",\n \"gesture\",\n \"getaway\",\n \"getting\",\n \"getup\",\n \"giant\",\n \"gibberish\",\n \"giblet\",\n \"giddily\",\n \"giddiness\",\n \"giddy\",\n \"gift\",\n \"gigabyte\",\n \"gigahertz\",\n \"gigantic\",\n \"giggle\",\n \"giggling\",\n \"giggly\",\n \"gigolo\",\n \"gilled\",\n \"gills\",\n \"gimmick\",\n \"girdle\",\n \"giveaway\",\n \"given\",\n \"giver\",\n \"giving\",\n \"gizmo\",\n \"gizzard\",\n \"glacial\",\n \"glacier\",\n \"glade\",\n \"gladiator\",\n \"gladly\",\n \"glamorous\",\n \"glamour\",\n \"glance\",\n \"glancing\",\n \"glandular\",\n \"glare\",\n \"glaring\",\n \"glass\",\n \"glaucoma\",\n \"glazing\",\n \"gleaming\",\n \"gleeful\",\n \"glider\",\n \"gliding\",\n \"glimmer\",\n \"glimpse\",\n \"glisten\",\n \"glitch\",\n \"glitter\",\n \"glitzy\",\n \"gloater\",\n \"gloating\",\n \"gloomily\",\n \"gloomy\",\n \"glorified\",\n \"glorifier\",\n \"glorify\",\n \"glorious\",\n \"glory\",\n \"gloss\",\n \"glove\",\n \"glowing\",\n \"glowworm\",\n \"glucose\",\n \"glue\",\n \"gluten\",\n \"glutinous\",\n \"glutton\",\n \"gnarly\",\n \"gnat\",\n \"goal\",\n \"goatskin\",\n \"goes\",\n \"goggles\",\n \"going\",\n \"goldfish\",\n \"goldmine\",\n \"goldsmith\",\n \"golf\",\n \"goliath\",\n \"gonad\",\n \"gondola\",\n \"gone\",\n \"gong\",\n \"good\",\n \"gooey\",\n \"goofball\",\n \"goofiness\",\n \"goofy\",\n \"google\",\n \"goon\",\n \"gopher\",\n \"gore\",\n \"gorged\",\n \"gorgeous\",\n \"gory\",\n \"gosling\",\n \"gossip\",\n \"gothic\",\n \"gotten\",\n \"gout\",\n \"gown\",\n \"grab\",\n \"graceful\",\n \"graceless\",\n \"gracious\",\n \"gradation\",\n \"graded\",\n \"grader\",\n \"gradient\",\n \"grading\",\n \"gradually\",\n \"graduate\",\n \"graffiti\",\n \"grafted\",\n \"grafting\",\n \"grain\",\n \"granddad\",\n \"grandkid\",\n \"grandly\",\n \"grandma\",\n \"grandpa\",\n \"grandson\",\n \"granite\",\n \"granny\",\n \"granola\",\n \"grant\",\n \"granular\",\n \"grape\",\n \"graph\",\n \"grapple\",\n \"grappling\",\n \"grasp\",\n \"grass\",\n \"gratified\",\n \"gratify\",\n \"grating\",\n \"gratitude\",\n \"gratuity\",\n \"gravel\",\n \"graveness\",\n \"graves\",\n \"graveyard\",\n \"gravitate\",\n \"gravity\",\n \"gravy\",\n \"gray\",\n \"grazing\",\n \"greasily\",\n \"greedily\",\n \"greedless\",\n \"greedy\",\n \"green\",\n \"greeter\",\n \"greeting\",\n \"grew\",\n \"greyhound\",\n \"grid\",\n \"grief\",\n \"grievance\",\n \"grieving\",\n \"grievous\",\n \"grill\",\n \"grimace\",\n \"grimacing\",\n \"grime\",\n \"griminess\",\n \"grimy\",\n \"grinch\",\n \"grinning\",\n \"grip\",\n \"gristle\",\n \"grit\",\n \"groggily\",\n \"groggy\",\n \"groin\",\n \"groom\",\n \"groove\",\n \"grooving\",\n \"groovy\",\n \"grope\",\n \"ground\",\n \"grouped\",\n \"grout\",\n \"grove\",\n \"grower\",\n \"growing\",\n \"growl\",\n \"grub\",\n \"grudge\",\n \"grudging\",\n \"grueling\",\n \"gruffly\",\n \"grumble\",\n \"grumbling\",\n \"grumbly\",\n \"grumpily\",\n \"grunge\",\n \"grunt\",\n \"guacamole\",\n \"guidable\",\n \"guidance\",\n \"guide\",\n \"guiding\",\n \"guileless\",\n \"guise\",\n \"gulf\",\n \"gullible\",\n \"gully\",\n \"gulp\",\n \"gumball\",\n \"gumdrop\",\n \"gumminess\",\n \"gumming\",\n \"gummy\",\n \"gurgle\",\n \"gurgling\",\n \"guru\",\n \"gush\",\n \"gusto\",\n \"gusty\",\n \"gutless\",\n \"guts\",\n \"gutter\",\n \"guy\",\n \"guzzler\",\n \"gyration\",\n \"habitable\",\n \"habitant\",\n \"habitat\",\n \"habitual\",\n \"hacked\",\n \"hacker\",\n \"hacking\",\n \"hacksaw\",\n \"had\",\n \"haggler\",\n \"haiku\",\n \"half\",\n \"halogen\",\n \"halt\",\n \"halved\",\n \"halves\",\n \"hamburger\",\n \"hamlet\",\n \"hammock\",\n \"hamper\",\n \"hamster\",\n \"hamstring\",\n \"handbag\",\n \"handball\",\n \"handbook\",\n \"handbrake\",\n \"handcart\",\n \"handclap\",\n \"handclasp\",\n \"handcraft\",\n \"handcuff\",\n \"handed\",\n \"handful\",\n \"handgrip\",\n \"handgun\",\n \"handheld\",\n \"handiness\",\n \"handiwork\",\n \"handlebar\",\n \"handled\",\n \"handler\",\n \"handling\",\n \"handmade\",\n \"handoff\",\n \"handpick\",\n \"handprint\",\n \"handrail\",\n \"handsaw\",\n \"handset\",\n \"handsfree\",\n \"handshake\",\n \"handstand\",\n \"handwash\",\n \"handwork\",\n \"handwoven\",\n \"handwrite\",\n \"handyman\",\n \"hangnail\",\n \"hangout\",\n \"hangover\",\n \"hangup\",\n \"hankering\",\n \"hankie\",\n \"hanky\",\n \"haphazard\",\n \"happening\",\n \"happier\",\n \"happiest\",\n \"happily\",\n \"happiness\",\n \"happy\",\n \"harbor\",\n \"hardcopy\",\n \"hardcore\",\n \"hardcover\",\n \"harddisk\",\n \"hardened\",\n \"hardener\",\n \"hardening\",\n \"hardhat\",\n \"hardhead\",\n \"hardiness\",\n \"hardly\",\n \"hardness\",\n \"hardship\",\n \"hardware\",\n \"hardwired\",\n \"hardwood\",\n \"hardy\",\n \"harmful\",\n \"harmless\",\n \"harmonica\",\n \"harmonics\",\n \"harmonize\",\n \"harmony\",\n \"harness\",\n \"harpist\",\n \"harsh\",\n \"harvest\",\n \"hash\",\n \"hassle\",\n \"haste\",\n \"hastily\",\n \"hastiness\",\n \"hasty\",\n \"hatbox\",\n \"hatchback\",\n \"hatchery\",\n \"hatchet\",\n \"hatching\",\n \"hatchling\",\n \"hate\",\n \"hatless\",\n \"hatred\",\n \"haunt\",\n \"haven\",\n \"hazard\",\n \"hazelnut\",\n \"hazily\",\n \"haziness\",\n \"hazing\",\n \"hazy\",\n \"headache\",\n \"headband\",\n \"headboard\",\n \"headcount\",\n \"headdress\",\n \"headed\",\n \"header\",\n \"headfirst\",\n \"headgear\",\n \"heading\",\n \"headlamp\",\n \"headless\",\n \"headlock\",\n \"headphone\",\n \"headpiece\",\n \"headrest\",\n \"headroom\",\n \"headscarf\",\n \"headset\",\n \"headsman\",\n \"headstand\",\n \"headstone\",\n \"headway\",\n \"headwear\",\n \"heap\",\n \"heat\",\n \"heave\",\n \"heavily\",\n \"heaviness\",\n \"heaving\",\n \"hedge\",\n \"hedging\",\n \"heftiness\",\n \"hefty\",\n \"helium\",\n \"helmet\",\n \"helper\",\n \"helpful\",\n \"helping\",\n \"helpless\",\n \"helpline\",\n \"hemlock\",\n \"hemstitch\",\n \"hence\",\n \"henchman\",\n \"henna\",\n \"herald\",\n \"herbal\",\n \"herbicide\",\n \"herbs\",\n \"heritage\",\n \"hermit\",\n \"heroics\",\n \"heroism\",\n \"herring\",\n \"herself\",\n \"hertz\",\n \"hesitancy\",\n \"hesitant\",\n \"hesitate\",\n \"hexagon\",\n \"hexagram\",\n \"hubcap\",\n \"huddle\",\n \"huddling\",\n \"huff\",\n \"hug\",\n \"hula\",\n \"hulk\",\n \"hull\",\n \"human\",\n \"humble\",\n \"humbling\",\n \"humbly\",\n \"humid\",\n \"humiliate\",\n \"humility\",\n \"humming\",\n \"hummus\",\n \"humongous\",\n \"humorist\",\n \"humorless\",\n \"humorous\",\n \"humpback\",\n \"humped\",\n \"humvee\",\n \"hunchback\",\n \"hundredth\",\n \"hunger\",\n \"hungrily\",\n \"hungry\",\n \"hunk\",\n \"hunter\",\n \"hunting\",\n \"huntress\",\n \"huntsman\",\n \"hurdle\",\n \"hurled\",\n \"hurler\",\n \"hurling\",\n \"hurray\",\n \"hurricane\",\n \"hurried\",\n \"hurry\",\n \"hurt\",\n \"husband\",\n \"hush\",\n \"husked\",\n \"huskiness\",\n \"hut\",\n \"hybrid\",\n \"hydrant\",\n \"hydrated\",\n \"hydration\",\n \"hydrogen\",\n \"hydroxide\",\n \"hyperlink\",\n \"hypertext\",\n \"hyphen\",\n \"hypnoses\",\n \"hypnosis\",\n \"hypnotic\",\n \"hypnotism\",\n \"hypnotist\",\n \"hypnotize\",\n \"hypocrisy\",\n \"hypocrite\",\n \"ibuprofen\",\n \"ice\",\n \"iciness\",\n \"icing\",\n \"icky\",\n \"icon\",\n \"icy\",\n \"idealism\",\n \"idealist\",\n \"idealize\",\n \"ideally\",\n \"idealness\",\n \"identical\",\n \"identify\",\n \"identity\",\n \"ideology\",\n \"idiocy\",\n \"idiom\",\n \"idly\",\n \"igloo\",\n \"ignition\",\n \"ignore\",\n \"iguana\",\n \"illicitly\",\n \"illusion\",\n \"illusive\",\n \"image\",\n \"imaginary\",\n \"imagines\",\n \"imaging\",\n \"imbecile\",\n \"imitate\",\n \"imitation\",\n \"immature\",\n \"immerse\",\n \"immersion\",\n \"imminent\",\n \"immobile\",\n \"immodest\",\n \"immorally\",\n \"immortal\",\n \"immovable\",\n \"immovably\",\n \"immunity\",\n \"immunize\",\n \"impaired\",\n \"impale\",\n \"impart\",\n \"impatient\",\n \"impeach\",\n \"impeding\",\n \"impending\",\n \"imperfect\",\n \"imperial\",\n \"impish\",\n \"implant\",\n \"implement\",\n \"implicate\",\n \"implicit\",\n \"implode\",\n \"implosion\",\n \"implosive\",\n \"imply\",\n \"impolite\",\n \"important\",\n \"importer\",\n \"impose\",\n \"imposing\",\n \"impotence\",\n \"impotency\",\n \"impotent\",\n \"impound\",\n \"imprecise\",\n \"imprint\",\n \"imprison\",\n \"impromptu\",\n \"improper\",\n \"improve\",\n \"improving\",\n \"improvise\",\n \"imprudent\",\n \"impulse\",\n \"impulsive\",\n \"impure\",\n \"impurity\",\n \"iodine\",\n \"iodize\",\n \"ion\",\n \"ipad\",\n \"iphone\",\n \"ipod\",\n \"irate\",\n \"irk\",\n \"iron\",\n \"irregular\",\n \"irrigate\",\n \"irritable\",\n \"irritably\",\n \"irritant\",\n \"irritate\",\n \"islamic\",\n \"islamist\",\n \"isolated\",\n \"isolating\",\n \"isolation\",\n \"isotope\",\n \"issue\",\n \"issuing\",\n \"italicize\",\n \"italics\",\n \"item\",\n \"itinerary\",\n \"itunes\",\n \"ivory\",\n \"ivy\",\n \"jab\",\n \"jackal\",\n \"jacket\",\n \"jackknife\",\n \"jackpot\",\n \"jailbird\",\n \"jailbreak\",\n \"jailer\",\n \"jailhouse\",\n \"jalapeno\",\n \"jam\",\n \"janitor\",\n \"january\",\n \"jargon\",\n \"jarring\",\n \"jasmine\",\n \"jaundice\",\n \"jaunt\",\n \"java\",\n \"jawed\",\n \"jawless\",\n \"jawline\",\n \"jaws\",\n \"jaybird\",\n \"jaywalker\",\n \"jazz\",\n \"jeep\",\n \"jeeringly\",\n \"jellied\",\n \"jelly\",\n \"jersey\",\n \"jester\",\n \"jet\",\n \"jiffy\",\n \"jigsaw\",\n \"jimmy\",\n \"jingle\",\n \"jingling\",\n \"jinx\",\n \"jitters\",\n \"jittery\",\n \"job\",\n \"jockey\",\n \"jockstrap\",\n \"jogger\",\n \"jogging\",\n \"john\",\n \"joining\",\n \"jokester\",\n \"jokingly\",\n \"jolliness\",\n \"jolly\",\n \"jolt\",\n \"jot\",\n \"jovial\",\n \"joyfully\",\n \"joylessly\",\n \"joyous\",\n \"joyride\",\n \"joystick\",\n \"jubilance\",\n \"jubilant\",\n \"judge\",\n \"judgingly\",\n \"judicial\",\n \"judiciary\",\n \"judo\",\n \"juggle\",\n \"juggling\",\n \"jugular\",\n \"juice\",\n \"juiciness\",\n \"juicy\",\n \"jujitsu\",\n \"jukebox\",\n \"july\",\n \"jumble\",\n \"jumbo\",\n \"jump\",\n \"junction\",\n \"juncture\",\n \"june\",\n \"junior\",\n \"juniper\",\n \"junkie\",\n \"junkman\",\n \"junkyard\",\n \"jurist\",\n \"juror\",\n \"jury\",\n \"justice\",\n \"justifier\",\n \"justify\",\n \"justly\",\n \"justness\",\n \"juvenile\",\n \"kabob\",\n \"kangaroo\",\n \"karaoke\",\n \"karate\",\n \"karma\",\n \"kebab\",\n \"keenly\",\n \"keenness\",\n \"keep\",\n \"keg\",\n \"kelp\",\n \"kennel\",\n \"kept\",\n \"kerchief\",\n \"kerosene\",\n \"kettle\",\n \"kick\",\n \"kiln\",\n \"kilobyte\",\n \"kilogram\",\n \"kilometer\",\n \"kilowatt\",\n \"kilt\",\n \"kimono\",\n \"kindle\",\n \"kindling\",\n \"kindly\",\n \"kindness\",\n \"kindred\",\n \"kinetic\",\n \"kinfolk\",\n \"king\",\n \"kinship\",\n \"kinsman\",\n \"kinswoman\",\n \"kissable\",\n \"kisser\",\n \"kissing\",\n \"kitchen\",\n \"kite\",\n \"kitten\",\n \"kitty\",\n \"kiwi\",\n \"kleenex\",\n \"knapsack\",\n \"knee\",\n \"knelt\",\n \"knickers\",\n \"knoll\",\n \"koala\",\n \"kooky\",\n \"kosher\",\n \"krypton\",\n \"kudos\",\n \"kung\",\n \"labored\",\n \"laborer\",\n \"laboring\",\n \"laborious\",\n \"labrador\",\n \"ladder\",\n \"ladies\",\n \"ladle\",\n \"ladybug\",\n \"ladylike\",\n \"lagged\",\n \"lagging\",\n \"lagoon\",\n \"lair\",\n \"lake\",\n \"lance\",\n \"landed\",\n \"landfall\",\n \"landfill\",\n \"landing\",\n \"landlady\",\n \"landless\",\n \"landline\",\n \"landlord\",\n \"landmark\",\n \"landmass\",\n \"landmine\",\n \"landowner\",\n \"landscape\",\n \"landside\",\n \"landslide\",\n \"language\",\n \"lankiness\",\n \"lanky\",\n \"lantern\",\n \"lapdog\",\n \"lapel\",\n \"lapped\",\n \"lapping\",\n \"laptop\",\n \"lard\",\n \"large\",\n \"lark\",\n \"lash\",\n \"lasso\",\n \"last\",\n \"latch\",\n \"late\",\n \"lather\",\n \"latitude\",\n \"latrine\",\n \"latter\",\n \"latticed\",\n \"launch\",\n \"launder\",\n \"laundry\",\n \"laurel\",\n \"lavender\",\n \"lavish\",\n \"laxative\",\n \"lazily\",\n \"laziness\",\n \"lazy\",\n \"lecturer\",\n \"left\",\n \"legacy\",\n \"legal\",\n \"legend\",\n \"legged\",\n \"leggings\",\n \"legible\",\n \"legibly\",\n \"legislate\",\n \"lego\",\n \"legroom\",\n \"legume\",\n \"legwarmer\",\n \"legwork\",\n \"lemon\",\n \"lend\",\n \"length\",\n \"lens\",\n \"lent\",\n \"leotard\",\n \"lesser\",\n \"letdown\",\n \"lethargic\",\n \"lethargy\",\n \"letter\",\n \"lettuce\",\n \"level\",\n \"leverage\",\n \"levers\",\n \"levitate\",\n \"levitator\",\n \"liability\",\n \"liable\",\n \"liberty\",\n \"librarian\",\n \"library\",\n \"licking\",\n \"licorice\",\n \"lid\",\n \"life\",\n \"lifter\",\n \"lifting\",\n \"liftoff\",\n \"ligament\",\n \"likely\",\n \"likeness\",\n \"likewise\",\n \"liking\",\n \"lilac\",\n \"lilly\",\n \"lily\",\n \"limb\",\n \"limeade\",\n \"limelight\",\n \"limes\",\n \"limit\",\n \"limping\",\n \"limpness\",\n \"line\",\n \"lingo\",\n \"linguini\",\n \"linguist\",\n \"lining\",\n \"linked\",\n \"linoleum\",\n \"linseed\",\n \"lint\",\n \"lion\",\n \"lip\",\n \"liquefy\",\n \"liqueur\",\n \"liquid\",\n \"lisp\",\n \"list\",\n \"litigate\",\n \"litigator\",\n \"litmus\",\n \"litter\",\n \"little\",\n \"livable\",\n \"lived\",\n \"lively\",\n \"liver\",\n \"livestock\",\n \"lividly\",\n \"living\",\n \"lizard\",\n \"lubricant\",\n \"lubricate\",\n \"lucid\",\n \"luckily\",\n \"luckiness\",\n \"luckless\",\n \"lucrative\",\n \"ludicrous\",\n \"lugged\",\n \"lukewarm\",\n \"lullaby\",\n \"lumber\",\n \"luminance\",\n \"luminous\",\n \"lumpiness\",\n \"lumping\",\n \"lumpish\",\n \"lunacy\",\n \"lunar\",\n \"lunchbox\",\n \"luncheon\",\n \"lunchroom\",\n \"lunchtime\",\n \"lung\",\n \"lurch\",\n \"lure\",\n \"luridness\",\n \"lurk\",\n \"lushly\",\n \"lushness\",\n \"luster\",\n \"lustfully\",\n \"lustily\",\n \"lustiness\",\n \"lustrous\",\n \"lusty\",\n \"luxurious\",\n \"luxury\",\n \"lying\",\n \"lyrically\",\n \"lyricism\",\n \"lyricist\",\n \"lyrics\",\n \"macarena\",\n \"macaroni\",\n \"macaw\",\n \"mace\",\n \"machine\",\n \"machinist\",\n \"magazine\",\n \"magenta\",\n \"maggot\",\n \"magical\",\n \"magician\",\n \"magma\",\n \"magnesium\",\n \"magnetic\",\n \"magnetism\",\n \"magnetize\",\n \"magnifier\",\n \"magnify\",\n \"magnitude\",\n \"magnolia\",\n \"mahogany\",\n \"maimed\",\n \"majestic\",\n \"majesty\",\n \"majorette\",\n \"majority\",\n \"makeover\",\n \"maker\",\n \"makeshift\",\n \"making\",\n \"malformed\",\n \"malt\",\n \"mama\",\n \"mammal\",\n \"mammary\",\n \"mammogram\",\n \"manager\",\n \"managing\",\n \"manatee\",\n \"mandarin\",\n \"mandate\",\n \"mandatory\",\n \"mandolin\",\n \"manger\",\n \"mangle\",\n \"mango\",\n \"mangy\",\n \"manhandle\",\n \"manhole\",\n \"manhood\",\n \"manhunt\",\n \"manicotti\",\n \"manicure\",\n \"manifesto\",\n \"manila\",\n \"mankind\",\n \"manlike\",\n \"manliness\",\n \"manly\",\n \"manmade\",\n \"manned\",\n \"mannish\",\n \"manor\",\n \"manpower\",\n \"mantis\",\n \"mantra\",\n \"manual\",\n \"many\",\n \"map\",\n \"marathon\",\n \"marauding\",\n \"marbled\",\n \"marbles\",\n \"marbling\",\n \"march\",\n \"mardi\",\n \"margarine\",\n \"margarita\",\n \"margin\",\n \"marigold\",\n \"marina\",\n \"marine\",\n \"marital\",\n \"maritime\",\n \"marlin\",\n \"marmalade\",\n \"maroon\",\n \"married\",\n \"marrow\",\n \"marry\",\n \"marshland\",\n \"marshy\",\n \"marsupial\",\n \"marvelous\",\n \"marxism\",\n \"mascot\",\n \"masculine\",\n \"mashed\",\n \"mashing\",\n \"massager\",\n \"masses\",\n \"massive\",\n \"mastiff\",\n \"matador\",\n \"matchbook\",\n \"matchbox\",\n \"matcher\",\n \"matching\",\n \"matchless\",\n \"material\",\n \"maternal\",\n \"maternity\",\n \"math\",\n \"mating\",\n \"matriarch\",\n \"matrimony\",\n \"matrix\",\n \"matron\",\n \"matted\",\n \"matter\",\n \"maturely\",\n \"maturing\",\n \"maturity\",\n \"mauve\",\n \"maverick\",\n \"maximize\",\n \"maximum\",\n \"maybe\",\n \"mayday\",\n \"mayflower\",\n \"moaner\",\n \"moaning\",\n \"mobile\",\n \"mobility\",\n \"mobilize\",\n \"mobster\",\n \"mocha\",\n \"mocker\",\n \"mockup\",\n \"modified\",\n \"modify\",\n \"modular\",\n \"modulator\",\n \"module\",\n \"moisten\",\n \"moistness\",\n \"moisture\",\n \"molar\",\n \"molasses\",\n \"mold\",\n \"molecular\",\n \"molecule\",\n \"molehill\",\n \"mollusk\",\n \"mom\",\n \"monastery\",\n \"monday\",\n \"monetary\",\n \"monetize\",\n \"moneybags\",\n \"moneyless\",\n \"moneywise\",\n \"mongoose\",\n \"mongrel\",\n \"monitor\",\n \"monkhood\",\n \"monogamy\",\n \"monogram\",\n \"monologue\",\n \"monopoly\",\n \"monorail\",\n \"monotone\",\n \"monotype\",\n \"monoxide\",\n \"monsieur\",\n \"monsoon\",\n \"monstrous\",\n \"monthly\",\n \"monument\",\n \"moocher\",\n \"moodiness\",\n \"moody\",\n \"mooing\",\n \"moonbeam\",\n \"mooned\",\n \"moonlight\",\n \"moonlike\",\n \"moonlit\",\n \"moonrise\",\n \"moonscape\",\n \"moonshine\",\n \"moonstone\",\n \"moonwalk\",\n \"mop\",\n \"morale\",\n \"morality\",\n \"morally\",\n \"morbidity\",\n \"morbidly\",\n \"morphine\",\n \"morphing\",\n \"morse\",\n \"mortality\",\n \"mortally\",\n \"mortician\",\n \"mortified\",\n \"mortify\",\n \"mortuary\",\n \"mosaic\",\n \"mossy\",\n \"most\",\n \"mothball\",\n \"mothproof\",\n \"motion\",\n \"motivate\",\n \"motivator\",\n \"motive\",\n \"motocross\",\n \"motor\",\n \"motto\",\n \"mountable\",\n \"mountain\",\n \"mounted\",\n \"mounting\",\n \"mourner\",\n \"mournful\",\n \"mouse\",\n \"mousiness\",\n \"moustache\",\n \"mousy\",\n \"mouth\",\n \"movable\",\n \"move\",\n \"movie\",\n \"moving\",\n \"mower\",\n \"mowing\",\n \"much\",\n \"muck\",\n \"mud\",\n \"mug\",\n \"mulberry\",\n \"mulch\",\n \"mule\",\n \"mulled\",\n \"mullets\",\n \"multiple\",\n \"multiply\",\n \"multitask\",\n \"multitude\",\n \"mumble\",\n \"mumbling\",\n \"mumbo\",\n \"mummified\",\n \"mummify\",\n \"mummy\",\n \"mumps\",\n \"munchkin\",\n \"mundane\",\n \"municipal\",\n \"muppet\",\n \"mural\",\n \"murkiness\",\n \"murky\",\n \"murmuring\",\n \"muscular\",\n \"museum\",\n \"mushily\",\n \"mushiness\",\n \"mushroom\",\n \"mushy\",\n \"music\",\n \"musket\",\n \"muskiness\",\n \"musky\",\n \"mustang\",\n \"mustard\",\n \"muster\",\n \"mustiness\",\n \"musty\",\n \"mutable\",\n \"mutate\",\n \"mutation\",\n \"mute\",\n \"mutilated\",\n \"mutilator\",\n \"mutiny\",\n \"mutt\",\n \"mutual\",\n \"muzzle\",\n \"myself\",\n \"myspace\",\n \"mystified\",\n \"mystify\",\n \"myth\",\n \"nacho\",\n \"nag\",\n \"nail\",\n \"name\",\n \"naming\",\n \"nanny\",\n \"nanometer\",\n \"nape\",\n \"napkin\",\n \"napped\",\n \"napping\",\n \"nappy\",\n \"narrow\",\n \"nastily\",\n \"nastiness\",\n \"national\",\n \"native\",\n \"nativity\",\n \"natural\",\n \"nature\",\n \"naturist\",\n \"nautical\",\n \"navigate\",\n \"navigator\",\n \"navy\",\n \"nearby\",\n \"nearest\",\n \"nearly\",\n \"nearness\",\n \"neatly\",\n \"neatness\",\n \"nebula\",\n \"nebulizer\",\n \"nectar\",\n \"negate\",\n \"negation\",\n \"negative\",\n \"neglector\",\n \"negligee\",\n \"negligent\",\n \"negotiate\",\n \"nemeses\",\n \"nemesis\",\n \"neon\",\n \"nephew\",\n \"nerd\",\n \"nervous\",\n \"nervy\",\n \"nest\",\n \"net\",\n \"neurology\",\n \"neuron\",\n \"neurosis\",\n \"neurotic\",\n \"neuter\",\n \"neutron\",\n \"never\",\n \"next\",\n \"nibble\",\n \"nickname\",\n \"nicotine\",\n \"niece\",\n \"nifty\",\n \"nimble\",\n \"nimbly\",\n \"nineteen\",\n \"ninetieth\",\n \"ninja\",\n \"nintendo\",\n \"ninth\",\n \"nuclear\",\n \"nuclei\",\n \"nucleus\",\n \"nugget\",\n \"nullify\",\n \"number\",\n \"numbing\",\n \"numbly\",\n \"numbness\",\n \"numeral\",\n \"numerate\",\n \"numerator\",\n \"numeric\",\n \"numerous\",\n \"nuptials\",\n \"nursery\",\n \"nursing\",\n \"nurture\",\n \"nutcase\",\n \"nutlike\",\n \"nutmeg\",\n \"nutrient\",\n \"nutshell\",\n \"nuttiness\",\n \"nutty\",\n \"nuzzle\",\n \"nylon\",\n \"oaf\",\n \"oak\",\n \"oasis\",\n \"oat\",\n \"obedience\",\n \"obedient\",\n \"obituary\",\n \"object\",\n \"obligate\",\n \"obliged\",\n \"oblivion\",\n \"oblivious\",\n \"oblong\",\n \"obnoxious\",\n \"oboe\",\n \"obscure\",\n \"obscurity\",\n \"observant\",\n \"observer\",\n \"observing\",\n \"obsessed\",\n \"obsession\",\n \"obsessive\",\n \"obsolete\",\n \"obstacle\",\n \"obstinate\",\n \"obstruct\",\n \"obtain\",\n \"obtrusive\",\n \"obtuse\",\n \"obvious\",\n \"occultist\",\n \"occupancy\",\n \"occupant\",\n \"occupier\",\n \"occupy\",\n \"ocean\",\n \"ocelot\",\n \"octagon\",\n \"octane\",\n \"october\",\n \"octopus\",\n \"ogle\",\n \"oil\",\n \"oink\",\n \"ointment\",\n \"okay\",\n \"old\",\n \"olive\",\n \"olympics\",\n \"omega\",\n \"omen\",\n \"ominous\",\n \"omission\",\n \"omit\",\n \"omnivore\",\n \"onboard\",\n \"oncoming\",\n \"ongoing\",\n \"onion\",\n \"online\",\n \"onlooker\",\n \"only\",\n \"onscreen\",\n \"onset\",\n \"onshore\",\n \"onslaught\",\n \"onstage\",\n \"onto\",\n \"onward\",\n \"onyx\",\n \"oops\",\n \"ooze\",\n \"oozy\",\n \"opacity\",\n \"opal\",\n \"open\",\n \"operable\",\n \"operate\",\n \"operating\",\n \"operation\",\n \"operative\",\n \"operator\",\n \"opium\",\n \"opossum\",\n \"opponent\",\n \"oppose\",\n \"opposing\",\n \"opposite\",\n \"oppressed\",\n \"oppressor\",\n \"opt\",\n \"opulently\",\n \"osmosis\",\n \"other\",\n \"otter\",\n \"ouch\",\n \"ought\",\n \"ounce\",\n \"outage\",\n \"outback\",\n \"outbid\",\n \"outboard\",\n \"outbound\",\n \"outbreak\",\n \"outburst\",\n \"outcast\",\n \"outclass\",\n \"outcome\",\n \"outdated\",\n \"outdoors\",\n \"outer\",\n \"outfield\",\n \"outfit\",\n \"outflank\",\n \"outgoing\",\n \"outgrow\",\n \"outhouse\",\n \"outing\",\n \"outlast\",\n \"outlet\",\n \"outline\",\n \"outlook\",\n \"outlying\",\n \"outmatch\",\n \"outmost\",\n \"outnumber\",\n \"outplayed\",\n \"outpost\",\n \"outpour\",\n \"output\",\n \"outrage\",\n \"outrank\",\n \"outreach\",\n \"outright\",\n \"outscore\",\n \"outsell\",\n \"outshine\",\n \"outshoot\",\n \"outsider\",\n \"outskirts\",\n \"outsmart\",\n \"outsource\",\n \"outspoken\",\n \"outtakes\",\n \"outthink\",\n \"outward\",\n \"outweigh\",\n \"outwit\",\n \"oval\",\n \"ovary\",\n \"oven\",\n \"overact\",\n \"overall\",\n \"overarch\",\n \"overbid\",\n \"overbill\",\n \"overbite\",\n \"overblown\",\n \"overboard\",\n \"overbook\",\n \"overbuilt\",\n \"overcast\",\n \"overcoat\",\n \"overcome\",\n \"overcook\",\n \"overcrowd\",\n \"overdraft\",\n \"overdrawn\",\n \"overdress\",\n \"overdrive\",\n \"overdue\",\n \"overeager\",\n \"overeater\",\n \"overexert\",\n \"overfed\",\n \"overfeed\",\n \"overfill\",\n \"overflow\",\n \"overfull\",\n \"overgrown\",\n \"overhand\",\n \"overhang\",\n \"overhaul\",\n \"overhead\",\n \"overhear\",\n \"overheat\",\n \"overhung\",\n \"overjoyed\",\n \"overkill\",\n \"overlabor\",\n \"overlaid\",\n \"overlap\",\n \"overlay\",\n \"overload\",\n \"overlook\",\n \"overlord\",\n \"overlying\",\n \"overnight\",\n \"overpass\",\n \"overpay\",\n \"overplant\",\n \"overplay\",\n \"overpower\",\n \"overprice\",\n \"overrate\",\n \"overreach\",\n \"overreact\",\n \"override\",\n \"overripe\",\n \"overrule\",\n \"overrun\",\n \"overshoot\",\n \"overshot\",\n \"oversight\",\n \"oversized\",\n \"oversleep\",\n \"oversold\",\n \"overspend\",\n \"overstate\",\n \"overstay\",\n \"overstep\",\n \"overstock\",\n \"overstuff\",\n \"oversweet\",\n \"overtake\",\n \"overthrow\",\n \"overtime\",\n \"overtly\",\n \"overtone\",\n \"overture\",\n \"overturn\",\n \"overuse\",\n \"overvalue\",\n \"overview\",\n \"overwrite\",\n \"owl\",\n \"oxford\",\n \"oxidant\",\n \"oxidation\",\n \"oxidize\",\n \"oxidizing\",\n \"oxygen\",\n \"oxymoron\",\n \"oyster\",\n \"ozone\",\n \"paced\",\n \"pacemaker\",\n \"pacific\",\n \"pacifier\",\n \"pacifism\",\n \"pacifist\",\n \"pacify\",\n \"padded\",\n \"padding\",\n \"paddle\",\n \"paddling\",\n \"padlock\",\n \"pagan\",\n \"pager\",\n \"paging\",\n \"pajamas\",\n \"palace\",\n \"palatable\",\n \"palm\",\n \"palpable\",\n \"palpitate\",\n \"paltry\",\n \"pampered\",\n \"pamperer\",\n \"pampers\",\n \"pamphlet\",\n \"panama\",\n \"pancake\",\n \"pancreas\",\n \"panda\",\n \"pandemic\",\n \"pang\",\n \"panhandle\",\n \"panic\",\n \"panning\",\n \"panorama\",\n \"panoramic\",\n \"panther\",\n \"pantomime\",\n \"pantry\",\n \"pants\",\n \"pantyhose\",\n \"paparazzi\",\n \"papaya\",\n \"paper\",\n \"paprika\",\n \"papyrus\",\n \"parabola\",\n \"parachute\",\n \"parade\",\n \"paradox\",\n \"paragraph\",\n \"parakeet\",\n \"paralegal\",\n \"paralyses\",\n \"paralysis\",\n \"paralyze\",\n \"paramedic\",\n \"parameter\",\n \"paramount\",\n \"parasail\",\n \"parasite\",\n \"parasitic\",\n \"parcel\",\n \"parched\",\n \"parchment\",\n \"pardon\",\n \"parish\",\n \"parka\",\n \"parking\",\n \"parkway\",\n \"parlor\",\n \"parmesan\",\n \"parole\",\n \"parrot\",\n \"parsley\",\n \"parsnip\",\n \"partake\",\n \"parted\",\n \"parting\",\n \"partition\",\n \"partly\",\n \"partner\",\n \"partridge\",\n \"party\",\n \"passable\",\n \"passably\",\n \"passage\",\n \"passcode\",\n \"passenger\",\n \"passerby\",\n \"passing\",\n \"passion\",\n \"passive\",\n \"passivism\",\n \"passover\",\n \"passport\",\n \"password\",\n \"pasta\",\n \"pasted\",\n \"pastel\",\n \"pastime\",\n \"pastor\",\n \"pastrami\",\n \"pasture\",\n \"pasty\",\n \"patchwork\",\n \"patchy\",\n \"paternal\",\n \"paternity\",\n \"path\",\n \"patience\",\n \"patient\",\n \"patio\",\n \"patriarch\",\n \"patriot\",\n \"patrol\",\n \"patronage\",\n \"patronize\",\n \"pauper\",\n \"pavement\",\n \"paver\",\n \"pavestone\",\n \"pavilion\",\n \"paving\",\n \"pawing\",\n \"payable\",\n \"payback\",\n \"paycheck\",\n \"payday\",\n \"payee\",\n \"payer\",\n \"paying\",\n \"payment\",\n \"payphone\",\n \"payroll\",\n \"pebble\",\n \"pebbly\",\n \"pecan\",\n \"pectin\",\n \"peculiar\",\n \"peddling\",\n \"pediatric\",\n \"pedicure\",\n \"pedigree\",\n \"pedometer\",\n \"pegboard\",\n \"pelican\",\n \"pellet\",\n \"pelt\",\n \"pelvis\",\n \"penalize\",\n \"penalty\",\n \"pencil\",\n \"pendant\",\n \"pending\",\n \"penholder\",\n \"penknife\",\n \"pennant\",\n \"penniless\",\n \"penny\",\n \"penpal\",\n \"pension\",\n \"pentagon\",\n \"pentagram\",\n \"pep\",\n \"perceive\",\n \"percent\",\n \"perch\",\n \"percolate\",\n \"perennial\",\n \"perfected\",\n \"perfectly\",\n \"perfume\",\n \"periscope\",\n \"perish\",\n \"perjurer\",\n \"perjury\",\n \"perkiness\",\n \"perky\",\n \"perm\",\n \"peroxide\",\n \"perpetual\",\n \"perplexed\",\n \"persecute\",\n \"persevere\",\n \"persuaded\",\n \"persuader\",\n \"pesky\",\n \"peso\",\n \"pessimism\",\n \"pessimist\",\n \"pester\",\n \"pesticide\",\n \"petal\",\n \"petite\",\n \"petition\",\n \"petri\",\n \"petroleum\",\n \"petted\",\n \"petticoat\",\n \"pettiness\",\n \"petty\",\n \"petunia\",\n \"phantom\",\n \"phobia\",\n \"phoenix\",\n \"phonebook\",\n \"phoney\",\n \"phonics\",\n \"phoniness\",\n \"phony\",\n \"phosphate\",\n \"photo\",\n \"phrase\",\n \"phrasing\",\n \"placard\",\n \"placate\",\n \"placidly\",\n \"plank\",\n \"planner\",\n \"plant\",\n \"plasma\",\n \"plaster\",\n \"plastic\",\n \"plated\",\n \"platform\",\n \"plating\",\n \"platinum\",\n \"platonic\",\n \"platter\",\n \"platypus\",\n \"plausible\",\n \"plausibly\",\n \"playable\",\n \"playback\",\n \"player\",\n \"playful\",\n \"playgroup\",\n \"playhouse\",\n \"playing\",\n \"playlist\",\n \"playmaker\",\n \"playmate\",\n \"playoff\",\n \"playpen\",\n \"playroom\",\n \"playset\",\n \"plaything\",\n \"playtime\",\n \"plaza\",\n \"pleading\",\n \"pleat\",\n \"pledge\",\n \"plentiful\",\n \"plenty\",\n \"plethora\",\n \"plexiglas\",\n \"pliable\",\n \"plod\",\n \"plop\",\n \"plot\",\n \"plow\",\n \"ploy\",\n \"pluck\",\n \"plug\",\n \"plunder\",\n \"plunging\",\n \"plural\",\n \"plus\",\n \"plutonium\",\n \"plywood\",\n \"poach\",\n \"pod\",\n \"poem\",\n \"poet\",\n \"pogo\",\n \"pointed\",\n \"pointer\",\n \"pointing\",\n \"pointless\",\n \"pointy\",\n \"poise\",\n \"poison\",\n \"poker\",\n \"poking\",\n \"polar\",\n \"police\",\n \"policy\",\n \"polio\",\n \"polish\",\n \"politely\",\n \"polka\",\n \"polo\",\n \"polyester\",\n \"polygon\",\n \"polygraph\",\n \"polymer\",\n \"poncho\",\n \"pond\",\n \"pony\",\n \"popcorn\",\n \"pope\",\n \"poplar\",\n \"popper\",\n \"poppy\",\n \"popsicle\",\n \"populace\",\n \"popular\",\n \"populate\",\n \"porcupine\",\n \"pork\",\n \"porous\",\n \"porridge\",\n \"portable\",\n \"portal\",\n \"portfolio\",\n \"porthole\",\n \"portion\",\n \"portly\",\n \"portside\",\n \"poser\",\n \"posh\",\n \"posing\",\n \"possible\",\n \"possibly\",\n \"possum\",\n \"postage\",\n \"postal\",\n \"postbox\",\n \"postcard\",\n \"posted\",\n \"poster\",\n \"posting\",\n \"postnasal\",\n \"posture\",\n \"postwar\",\n \"pouch\",\n \"pounce\",\n \"pouncing\",\n \"pound\",\n \"pouring\",\n \"pout\",\n \"powdered\",\n \"powdering\",\n \"powdery\",\n \"power\",\n \"powwow\",\n \"pox\",\n \"praising\",\n \"prance\",\n \"prancing\",\n \"pranker\",\n \"prankish\",\n \"prankster\",\n \"prayer\",\n \"praying\",\n \"preacher\",\n \"preaching\",\n \"preachy\",\n \"preamble\",\n \"precinct\",\n \"precise\",\n \"precision\",\n \"precook\",\n \"precut\",\n \"predator\",\n \"predefine\",\n \"predict\",\n \"preface\",\n \"prefix\",\n \"preflight\",\n \"preformed\",\n \"pregame\",\n \"pregnancy\",\n \"pregnant\",\n \"preheated\",\n \"prelaunch\",\n \"prelaw\",\n \"prelude\",\n \"premiere\",\n \"premises\",\n \"premium\",\n \"prenatal\",\n \"preoccupy\",\n \"preorder\",\n \"prepaid\",\n \"prepay\",\n \"preplan\",\n \"preppy\",\n \"preschool\",\n \"prescribe\",\n \"preseason\",\n \"preset\",\n \"preshow\",\n \"president\",\n \"presoak\",\n \"press\",\n \"presume\",\n \"presuming\",\n \"preteen\",\n \"pretended\",\n \"pretender\",\n \"pretense\",\n \"pretext\",\n \"pretty\",\n \"pretzel\",\n \"prevail\",\n \"prevalent\",\n \"prevent\",\n \"preview\",\n \"previous\",\n \"prewar\",\n \"prewashed\",\n \"prideful\",\n \"pried\",\n \"primal\",\n \"primarily\",\n \"primary\",\n \"primate\",\n \"primer\",\n \"primp\",\n \"princess\",\n \"print\",\n \"prior\",\n \"prism\",\n \"prison\",\n \"prissy\",\n \"pristine\",\n \"privacy\",\n \"private\",\n \"privatize\",\n \"prize\",\n \"proactive\",\n \"probable\",\n \"probably\",\n \"probation\",\n \"probe\",\n \"probing\",\n \"probiotic\",\n \"problem\",\n \"procedure\",\n \"process\",\n \"proclaim\",\n \"procreate\",\n \"procurer\",\n \"prodigal\",\n \"prodigy\",\n \"produce\",\n \"product\",\n \"profane\",\n \"profanity\",\n \"professed\",\n \"professor\",\n \"profile\",\n \"profound\",\n \"profusely\",\n \"progeny\",\n \"prognosis\",\n \"program\",\n \"progress\",\n \"projector\",\n \"prologue\",\n \"prolonged\",\n \"promenade\",\n \"prominent\",\n \"promoter\",\n \"promotion\",\n \"prompter\",\n \"promptly\",\n \"prone\",\n \"prong\",\n \"pronounce\",\n \"pronto\",\n \"proofing\",\n \"proofread\",\n \"proofs\",\n \"propeller\",\n \"properly\",\n \"property\",\n \"proponent\",\n \"proposal\",\n \"propose\",\n \"props\",\n \"prorate\",\n \"protector\",\n \"protegee\",\n \"proton\",\n \"prototype\",\n \"protozoan\",\n \"protract\",\n \"protrude\",\n \"proud\",\n \"provable\",\n \"proved\",\n \"proven\",\n \"provided\",\n \"provider\",\n \"providing\",\n \"province\",\n \"proving\",\n \"provoke\",\n \"provoking\",\n \"provolone\",\n \"prowess\",\n \"prowler\",\n \"prowling\",\n \"proximity\",\n \"proxy\",\n \"prozac\",\n \"prude\",\n \"prudishly\",\n \"prune\",\n \"pruning\",\n \"pry\",\n \"psychic\",\n \"public\",\n \"publisher\",\n \"pucker\",\n \"pueblo\",\n \"pug\",\n \"pull\",\n \"pulmonary\",\n \"pulp\",\n \"pulsate\",\n \"pulse\",\n \"pulverize\",\n \"puma\",\n \"pumice\",\n \"pummel\",\n \"punch\",\n \"punctual\",\n \"punctuate\",\n \"punctured\",\n \"pungent\",\n \"punisher\",\n \"punk\",\n \"pupil\",\n \"puppet\",\n \"puppy\",\n \"purchase\",\n \"pureblood\",\n \"purebred\",\n \"purely\",\n \"pureness\",\n \"purgatory\",\n \"purge\",\n \"purging\",\n \"purifier\",\n \"purify\",\n \"purist\",\n \"puritan\",\n \"purity\",\n \"purple\",\n \"purplish\",\n \"purposely\",\n \"purr\",\n \"purse\",\n \"pursuable\",\n \"pursuant\",\n \"pursuit\",\n \"purveyor\",\n \"pushcart\",\n \"pushchair\",\n \"pusher\",\n \"pushiness\",\n \"pushing\",\n \"pushover\",\n \"pushpin\",\n \"pushup\",\n \"pushy\",\n \"putdown\",\n \"putt\",\n \"puzzle\",\n \"puzzling\",\n \"pyramid\",\n \"pyromania\",\n \"python\",\n \"quack\",\n \"quadrant\",\n \"quail\",\n \"quaintly\",\n \"quake\",\n \"quaking\",\n \"qualified\",\n \"qualifier\",\n \"qualify\",\n \"quality\",\n \"qualm\",\n \"quantum\",\n \"quarrel\",\n \"quarry\",\n \"quartered\",\n \"quarterly\",\n \"quarters\",\n \"quartet\",\n \"quench\",\n \"query\",\n \"quicken\",\n \"quickly\",\n \"quickness\",\n \"quicksand\",\n \"quickstep\",\n \"quiet\",\n \"quill\",\n \"quilt\",\n \"quintet\",\n \"quintuple\",\n \"quirk\",\n \"quit\",\n \"quiver\",\n \"quizzical\",\n \"quotable\",\n \"quotation\",\n \"quote\",\n \"rabid\",\n \"race\",\n \"racing\",\n \"racism\",\n \"rack\",\n \"racoon\",\n \"radar\",\n \"radial\",\n \"radiance\",\n \"radiantly\",\n \"radiated\",\n \"radiation\",\n \"radiator\",\n \"radio\",\n \"radish\",\n \"raffle\",\n \"raft\",\n \"rage\",\n \"ragged\",\n \"raging\",\n \"ragweed\",\n \"raider\",\n \"railcar\",\n \"railing\",\n \"railroad\",\n \"railway\",\n \"raisin\",\n \"rake\",\n \"raking\",\n \"rally\",\n \"ramble\",\n \"rambling\",\n \"ramp\",\n \"ramrod\",\n \"ranch\",\n \"rancidity\",\n \"random\",\n \"ranged\",\n \"ranger\",\n \"ranging\",\n \"ranked\",\n \"ranking\",\n \"ransack\",\n \"ranting\",\n \"rants\",\n \"rare\",\n \"rarity\",\n \"rascal\",\n \"rash\",\n \"rasping\",\n \"ravage\",\n \"raven\",\n \"ravine\",\n \"raving\",\n \"ravioli\",\n \"ravishing\",\n \"reabsorb\",\n \"reach\",\n \"reacquire\",\n \"reaction\",\n \"reactive\",\n \"reactor\",\n \"reaffirm\",\n \"ream\",\n \"reanalyze\",\n \"reappear\",\n \"reapply\",\n \"reappoint\",\n \"reapprove\",\n \"rearrange\",\n \"rearview\",\n \"reason\",\n \"reassign\",\n \"reassure\",\n \"reattach\",\n \"reawake\",\n \"rebalance\",\n \"rebate\",\n \"rebel\",\n \"rebirth\",\n \"reboot\",\n \"reborn\",\n \"rebound\",\n \"rebuff\",\n \"rebuild\",\n \"rebuilt\",\n \"reburial\",\n \"rebuttal\",\n \"recall\",\n \"recant\",\n \"recapture\",\n \"recast\",\n \"recede\",\n \"recent\",\n \"recess\",\n \"recharger\",\n \"recipient\",\n \"recital\",\n \"recite\",\n \"reckless\",\n \"reclaim\",\n \"recliner\",\n \"reclining\",\n \"recluse\",\n \"reclusive\",\n \"recognize\",\n \"recoil\",\n \"recollect\",\n \"recolor\",\n \"reconcile\",\n \"reconfirm\",\n \"reconvene\",\n \"recopy\",\n \"record\",\n \"recount\",\n \"recoup\",\n \"recovery\",\n \"recreate\",\n \"rectal\",\n \"rectangle\",\n \"rectified\",\n \"rectify\",\n \"recycled\",\n \"recycler\",\n \"recycling\",\n \"reemerge\",\n \"reenact\",\n \"reenter\",\n \"reentry\",\n \"reexamine\",\n \"referable\",\n \"referee\",\n \"reference\",\n \"refill\",\n \"refinance\",\n \"refined\",\n \"refinery\",\n \"refining\",\n \"refinish\",\n \"reflected\",\n \"reflector\",\n \"reflex\",\n \"reflux\",\n \"refocus\",\n \"refold\",\n \"reforest\",\n \"reformat\",\n \"reformed\",\n \"reformer\",\n \"reformist\",\n \"refract\",\n \"refrain\",\n \"refreeze\",\n \"refresh\",\n \"refried\",\n \"refueling\",\n \"refund\",\n \"refurbish\",\n \"refurnish\",\n \"refusal\",\n \"refuse\",\n \"refusing\",\n \"refutable\",\n \"refute\",\n \"regain\",\n \"regalia\",\n \"regally\",\n \"reggae\",\n \"regime\",\n \"region\",\n \"register\",\n \"registrar\",\n \"registry\",\n \"regress\",\n \"regretful\",\n \"regroup\",\n \"regular\",\n \"regulate\",\n \"regulator\",\n \"rehab\",\n \"reheat\",\n \"rehire\",\n \"rehydrate\",\n \"reimburse\",\n \"reissue\",\n \"reiterate\",\n \"rejoice\",\n \"rejoicing\",\n \"rejoin\",\n \"rekindle\",\n \"relapse\",\n \"relapsing\",\n \"relatable\",\n \"related\",\n \"relation\",\n \"relative\",\n \"relax\",\n \"relay\",\n \"relearn\",\n \"release\",\n \"relenting\",\n \"reliable\",\n \"reliably\",\n \"reliance\",\n \"reliant\",\n \"relic\",\n \"relieve\",\n \"relieving\",\n \"relight\",\n \"relish\",\n \"relive\",\n \"reload\",\n \"relocate\",\n \"relock\",\n \"reluctant\",\n \"rely\",\n \"remake\",\n \"remark\",\n \"remarry\",\n \"rematch\",\n \"remedial\",\n \"remedy\",\n \"remember\",\n \"reminder\",\n \"remindful\",\n \"remission\",\n \"remix\",\n \"remnant\",\n \"remodeler\",\n \"remold\",\n \"remorse\",\n \"remote\",\n \"removable\",\n \"removal\",\n \"removed\",\n \"remover\",\n \"removing\",\n \"rename\",\n \"renderer\",\n \"rendering\",\n \"rendition\",\n \"renegade\",\n \"renewable\",\n \"renewably\",\n \"renewal\",\n \"renewed\",\n \"renounce\",\n \"renovate\",\n \"renovator\",\n \"rentable\",\n \"rental\",\n \"rented\",\n \"renter\",\n \"reoccupy\",\n \"reoccur\",\n \"reopen\",\n \"reorder\",\n \"repackage\",\n \"repacking\",\n \"repaint\",\n \"repair\",\n \"repave\",\n \"repaying\",\n \"repayment\",\n \"repeal\",\n \"repeated\",\n \"repeater\",\n \"repent\",\n \"rephrase\",\n \"replace\",\n \"replay\",\n \"replica\",\n \"reply\",\n \"reporter\",\n \"repose\",\n \"repossess\",\n \"repost\",\n \"repressed\",\n \"reprimand\",\n \"reprint\",\n \"reprise\",\n \"reproach\",\n \"reprocess\",\n \"reproduce\",\n \"reprogram\",\n \"reps\",\n \"reptile\",\n \"reptilian\",\n \"repugnant\",\n \"repulsion\",\n \"repulsive\",\n \"repurpose\",\n \"reputable\",\n \"reputably\",\n \"request\",\n \"require\",\n \"requisite\",\n \"reroute\",\n \"rerun\",\n \"resale\",\n \"resample\",\n \"rescuer\",\n \"reseal\",\n \"research\",\n \"reselect\",\n \"reseller\",\n \"resemble\",\n \"resend\",\n \"resent\",\n \"reset\",\n \"reshape\",\n \"reshoot\",\n \"reshuffle\",\n \"residence\",\n \"residency\",\n \"resident\",\n \"residual\",\n \"residue\",\n \"resigned\",\n \"resilient\",\n \"resistant\",\n \"resisting\",\n \"resize\",\n \"resolute\",\n \"resolved\",\n \"resonant\",\n \"resonate\",\n \"resort\",\n \"resource\",\n \"respect\",\n \"resubmit\",\n \"result\",\n \"resume\",\n \"resupply\",\n \"resurface\",\n \"resurrect\",\n \"retail\",\n \"retainer\",\n \"retaining\",\n \"retake\",\n \"retaliate\",\n \"retention\",\n \"rethink\",\n \"retinal\",\n \"retired\",\n \"retiree\",\n \"retiring\",\n \"retold\",\n \"retool\",\n \"retorted\",\n \"retouch\",\n \"retrace\",\n \"retract\",\n \"retrain\",\n \"retread\",\n \"retreat\",\n \"retrial\",\n \"retrieval\",\n \"retriever\",\n \"retry\",\n \"return\",\n \"retying\",\n \"retype\",\n \"reunion\",\n \"reunite\",\n \"reusable\",\n \"reuse\",\n \"reveal\",\n \"reveler\",\n \"revenge\",\n \"revenue\",\n \"reverb\",\n \"revered\",\n \"reverence\",\n \"reverend\",\n \"reversal\",\n \"reverse\",\n \"reversing\",\n \"reversion\",\n \"revert\",\n \"revisable\",\n \"revise\",\n \"revision\",\n \"revisit\",\n \"revivable\",\n \"revival\",\n \"reviver\",\n \"reviving\",\n \"revocable\",\n \"revoke\",\n \"revolt\",\n \"revolver\",\n \"revolving\",\n \"reward\",\n \"rewash\",\n \"rewind\",\n \"rewire\",\n \"reword\",\n \"rework\",\n \"rewrap\",\n \"rewrite\",\n \"rhyme\",\n \"ribbon\",\n \"ribcage\",\n \"rice\",\n \"riches\",\n \"richly\",\n \"richness\",\n \"rickety\",\n \"ricotta\",\n \"riddance\",\n \"ridden\",\n \"ride\",\n \"riding\",\n \"rifling\",\n \"rift\",\n \"rigging\",\n \"rigid\",\n \"rigor\",\n \"rimless\",\n \"rimmed\",\n \"rind\",\n \"rink\",\n \"rinse\",\n \"rinsing\",\n \"riot\",\n \"ripcord\",\n \"ripeness\",\n \"ripening\",\n \"ripping\",\n \"ripple\",\n \"rippling\",\n \"riptide\",\n \"rise\",\n \"rising\",\n \"risk\",\n \"risotto\",\n \"ritalin\",\n \"ritzy\",\n \"rival\",\n \"riverbank\",\n \"riverbed\",\n \"riverboat\",\n \"riverside\",\n \"riveter\",\n \"riveting\",\n \"roamer\",\n \"roaming\",\n \"roast\",\n \"robbing\",\n \"robe\",\n \"robin\",\n \"robotics\",\n \"robust\",\n \"rockband\",\n \"rocker\",\n \"rocket\",\n \"rockfish\",\n \"rockiness\",\n \"rocking\",\n \"rocklike\",\n \"rockslide\",\n \"rockstar\",\n \"rocky\",\n \"rogue\",\n \"roman\",\n \"romp\",\n \"rope\",\n \"roping\",\n \"roster\",\n \"rosy\",\n \"rotten\",\n \"rotting\",\n \"rotunda\",\n \"roulette\",\n \"rounding\",\n \"roundish\",\n \"roundness\",\n \"roundup\",\n \"roundworm\",\n \"routine\",\n \"routing\",\n \"rover\",\n \"roving\",\n \"royal\",\n \"rubbed\",\n \"rubber\",\n \"rubbing\",\n \"rubble\",\n \"rubdown\",\n \"ruby\",\n \"ruckus\",\n \"rudder\",\n \"rug\",\n \"ruined\",\n \"rule\",\n \"rumble\",\n \"rumbling\",\n \"rummage\",\n \"rumor\",\n \"runaround\",\n \"rundown\",\n \"runner\",\n \"running\",\n \"runny\",\n \"runt\",\n \"runway\",\n \"rupture\",\n \"rural\",\n \"ruse\",\n \"rush\",\n \"rust\",\n \"rut\",\n \"sabbath\",\n \"sabotage\",\n \"sacrament\",\n \"sacred\",\n \"sacrifice\",\n \"sadden\",\n \"saddlebag\",\n \"saddled\",\n \"saddling\",\n \"sadly\",\n \"sadness\",\n \"safari\",\n \"safeguard\",\n \"safehouse\",\n \"safely\",\n \"safeness\",\n \"saffron\",\n \"saga\",\n \"sage\",\n \"sagging\",\n \"saggy\",\n \"said\",\n \"saint\",\n \"sake\",\n \"salad\",\n \"salami\",\n \"salaried\",\n \"salary\",\n \"saline\",\n \"salon\",\n \"saloon\",\n \"salsa\",\n \"salt\",\n \"salutary\",\n \"salute\",\n \"salvage\",\n \"salvaging\",\n \"salvation\",\n \"same\",\n \"sample\",\n \"sampling\",\n \"sanction\",\n \"sanctity\",\n \"sanctuary\",\n \"sandal\",\n \"sandbag\",\n \"sandbank\",\n \"sandbar\",\n \"sandblast\",\n \"sandbox\",\n \"sanded\",\n \"sandfish\",\n \"sanding\",\n \"sandlot\",\n \"sandpaper\",\n \"sandpit\",\n \"sandstone\",\n \"sandstorm\",\n \"sandworm\",\n \"sandy\",\n \"sanitary\",\n \"sanitizer\",\n \"sank\",\n \"santa\",\n \"sapling\",\n \"sappiness\",\n \"sappy\",\n \"sarcasm\",\n \"sarcastic\",\n \"sardine\",\n \"sash\",\n \"sasquatch\",\n \"sassy\",\n \"satchel\",\n \"satiable\",\n \"satin\",\n \"satirical\",\n \"satisfied\",\n \"satisfy\",\n \"saturate\",\n \"saturday\",\n \"sauciness\",\n \"saucy\",\n \"sauna\",\n \"savage\",\n \"savanna\",\n \"saved\",\n \"savings\",\n \"savior\",\n \"savor\",\n \"saxophone\",\n \"say\",\n \"scabbed\",\n \"scabby\",\n \"scalded\",\n \"scalding\",\n \"scale\",\n \"scaling\",\n \"scallion\",\n \"scallop\",\n \"scalping\",\n \"scam\",\n \"scandal\",\n \"scanner\",\n \"scanning\",\n \"scant\",\n \"scapegoat\",\n \"scarce\",\n \"scarcity\",\n \"scarecrow\",\n \"scared\",\n \"scarf\",\n \"scarily\",\n \"scariness\",\n \"scarring\",\n \"scary\",\n \"scavenger\",\n \"scenic\",\n \"schedule\",\n \"schematic\",\n \"scheme\",\n \"scheming\",\n \"schilling\",\n \"schnapps\",\n \"scholar\",\n \"science\",\n \"scientist\",\n \"scion\",\n \"scoff\",\n \"scolding\",\n \"scone\",\n \"scoop\",\n \"scooter\",\n \"scope\",\n \"scorch\",\n \"scorebook\",\n \"scorecard\",\n \"scored\",\n \"scoreless\",\n \"scorer\",\n \"scoring\",\n \"scorn\",\n \"scorpion\",\n \"scotch\",\n \"scoundrel\",\n \"scoured\",\n \"scouring\",\n \"scouting\",\n \"scouts\",\n \"scowling\",\n \"scrabble\",\n \"scraggly\",\n \"scrambled\",\n \"scrambler\",\n \"scrap\",\n \"scratch\",\n \"scrawny\",\n \"screen\",\n \"scribble\",\n \"scribe\",\n \"scribing\",\n \"scrimmage\",\n \"script\",\n \"scroll\",\n \"scrooge\",\n \"scrounger\",\n \"scrubbed\",\n \"scrubber\",\n \"scruffy\",\n \"scrunch\",\n \"scrutiny\",\n \"scuba\",\n \"scuff\",\n \"sculptor\",\n \"sculpture\",\n \"scurvy\",\n \"scuttle\",\n \"secluded\",\n \"secluding\",\n \"seclusion\",\n \"second\",\n \"secrecy\",\n \"secret\",\n \"sectional\",\n \"sector\",\n \"secular\",\n \"securely\",\n \"security\",\n \"sedan\",\n \"sedate\",\n \"sedation\",\n \"sedative\",\n \"sediment\",\n \"seduce\",\n \"seducing\",\n \"segment\",\n \"seismic\",\n \"seizing\",\n \"seldom\",\n \"selected\",\n \"selection\",\n \"selective\",\n \"selector\",\n \"self\",\n \"seltzer\",\n \"semantic\",\n \"semester\",\n \"semicolon\",\n \"semifinal\",\n \"seminar\",\n \"semisoft\",\n \"semisweet\",\n \"senate\",\n \"senator\",\n \"send\",\n \"senior\",\n \"senorita\",\n \"sensation\",\n \"sensitive\",\n \"sensitize\",\n \"sensually\",\n \"sensuous\",\n \"sepia\",\n \"september\",\n \"septic\",\n \"septum\",\n \"sequel\",\n \"sequence\",\n \"sequester\",\n \"series\",\n \"sermon\",\n \"serotonin\",\n \"serpent\",\n \"serrated\",\n \"serve\",\n \"service\",\n \"serving\",\n \"sesame\",\n \"sessions\",\n \"setback\",\n \"setting\",\n \"settle\",\n \"settling\",\n \"setup\",\n \"sevenfold\",\n \"seventeen\",\n \"seventh\",\n \"seventy\",\n \"severity\",\n \"shabby\",\n \"shack\",\n \"shaded\",\n \"shadily\",\n \"shadiness\",\n \"shading\",\n \"shadow\",\n \"shady\",\n \"shaft\",\n \"shakable\",\n \"shakily\",\n \"shakiness\",\n \"shaking\",\n \"shaky\",\n \"shale\",\n \"shallot\",\n \"shallow\",\n \"shame\",\n \"shampoo\",\n \"shamrock\",\n \"shank\",\n \"shanty\",\n \"shape\",\n \"shaping\",\n \"share\",\n \"sharpener\",\n \"sharper\",\n \"sharpie\",\n \"sharply\",\n \"sharpness\",\n \"shawl\",\n \"sheath\",\n \"shed\",\n \"sheep\",\n \"sheet\",\n \"shelf\",\n \"shell\",\n \"shelter\",\n \"shelve\",\n \"shelving\",\n \"sherry\",\n \"shield\",\n \"shifter\",\n \"shifting\",\n \"shiftless\",\n \"shifty\",\n \"shimmer\",\n \"shimmy\",\n \"shindig\",\n \"shine\",\n \"shingle\",\n \"shininess\",\n \"shining\",\n \"shiny\",\n \"ship\",\n \"shirt\",\n \"shivering\",\n \"shock\",\n \"shone\",\n \"shoplift\",\n \"shopper\",\n \"shopping\",\n \"shoptalk\",\n \"shore\",\n \"shortage\",\n \"shortcake\",\n \"shortcut\",\n \"shorten\",\n \"shorter\",\n \"shorthand\",\n \"shortlist\",\n \"shortly\",\n \"shortness\",\n \"shorts\",\n \"shortwave\",\n \"shorty\",\n \"shout\",\n \"shove\",\n \"showbiz\",\n \"showcase\",\n \"showdown\",\n \"shower\",\n \"showgirl\",\n \"showing\",\n \"showman\",\n \"shown\",\n \"showoff\",\n \"showpiece\",\n \"showplace\",\n \"showroom\",\n \"showy\",\n \"shrank\",\n \"shrapnel\",\n \"shredder\",\n \"shredding\",\n \"shrewdly\",\n \"shriek\",\n \"shrill\",\n \"shrimp\",\n \"shrine\",\n \"shrink\",\n \"shrivel\",\n \"shrouded\",\n \"shrubbery\",\n \"shrubs\",\n \"shrug\",\n \"shrunk\",\n \"shucking\",\n \"shudder\",\n \"shuffle\",\n \"shuffling\",\n \"shun\",\n \"shush\",\n \"shut\",\n \"shy\",\n \"siamese\",\n \"siberian\",\n \"sibling\",\n \"siding\",\n \"sierra\",\n \"siesta\",\n \"sift\",\n \"sighing\",\n \"silenced\",\n \"silencer\",\n \"silent\",\n \"silica\",\n \"silicon\",\n \"silk\",\n \"silliness\",\n \"silly\",\n \"silo\",\n \"silt\",\n \"silver\",\n \"similarly\",\n \"simile\",\n \"simmering\",\n \"simple\",\n \"simplify\",\n \"simply\",\n \"sincere\",\n \"sincerity\",\n \"singer\",\n \"singing\",\n \"single\",\n \"singular\",\n \"sinister\",\n \"sinless\",\n \"sinner\",\n \"sinuous\",\n \"sip\",\n \"siren\",\n \"sister\",\n \"sitcom\",\n \"sitter\",\n \"sitting\",\n \"situated\",\n \"situation\",\n \"sixfold\",\n \"sixteen\",\n \"sixth\",\n \"sixties\",\n \"sixtieth\",\n \"sixtyfold\",\n \"sizable\",\n \"sizably\",\n \"size\",\n \"sizing\",\n \"sizzle\",\n \"sizzling\",\n \"skater\",\n \"skating\",\n \"skedaddle\",\n \"skeletal\",\n \"skeleton\",\n \"skeptic\",\n \"sketch\",\n \"skewed\",\n \"skewer\",\n \"skid\",\n \"skied\",\n \"skier\",\n \"skies\",\n \"skiing\",\n \"skilled\",\n \"skillet\",\n \"skillful\",\n \"skimmed\",\n \"skimmer\",\n \"skimming\",\n \"skimpily\",\n \"skincare\",\n \"skinhead\",\n \"skinless\",\n \"skinning\",\n \"skinny\",\n \"skintight\",\n \"skipper\",\n \"skipping\",\n \"skirmish\",\n \"skirt\",\n \"skittle\",\n \"skydiver\",\n \"skylight\",\n \"skyline\",\n \"skype\",\n \"skyrocket\",\n \"skyward\",\n \"slab\",\n \"slacked\",\n \"slacker\",\n \"slacking\",\n \"slackness\",\n \"slacks\",\n \"slain\",\n \"slam\",\n \"slander\",\n \"slang\",\n \"slapping\",\n \"slapstick\",\n \"slashed\",\n \"slashing\",\n \"slate\",\n \"slather\",\n \"slaw\",\n \"sled\",\n \"sleek\",\n \"sleep\",\n \"sleet\",\n \"sleeve\",\n \"slept\",\n \"sliceable\",\n \"sliced\",\n \"slicer\",\n \"slicing\",\n \"slick\",\n \"slider\",\n \"slideshow\",\n \"sliding\",\n \"slighted\",\n \"slighting\",\n \"slightly\",\n \"slimness\",\n \"slimy\",\n \"slinging\",\n \"slingshot\",\n \"slinky\",\n \"slip\",\n \"slit\",\n \"sliver\",\n \"slobbery\",\n \"slogan\",\n \"sloped\",\n \"sloping\",\n \"sloppily\",\n \"sloppy\",\n \"slot\",\n \"slouching\",\n \"slouchy\",\n \"sludge\",\n \"slug\",\n \"slum\",\n \"slurp\",\n \"slush\",\n \"sly\",\n \"small\",\n \"smartly\",\n \"smartness\",\n \"smasher\",\n \"smashing\",\n \"smashup\",\n \"smell\",\n \"smelting\",\n \"smile\",\n \"smilingly\",\n \"smirk\",\n \"smite\",\n \"smith\",\n \"smitten\",\n \"smock\",\n \"smog\",\n \"smoked\",\n \"smokeless\",\n \"smokiness\",\n \"smoking\",\n \"smoky\",\n \"smolder\",\n \"smooth\",\n \"smother\",\n \"smudge\",\n \"smudgy\",\n \"smuggler\",\n \"smuggling\",\n \"smugly\",\n \"smugness\",\n \"snack\",\n \"snagged\",\n \"snaking\",\n \"snap\",\n \"snare\",\n \"snarl\",\n \"snazzy\",\n \"sneak\",\n \"sneer\",\n \"sneeze\",\n \"sneezing\",\n \"snide\",\n \"sniff\",\n \"snippet\",\n \"snipping\",\n \"snitch\",\n \"snooper\",\n \"snooze\",\n \"snore\",\n \"snoring\",\n \"snorkel\",\n \"snort\",\n \"snout\",\n \"snowbird\",\n \"snowboard\",\n \"snowbound\",\n \"snowcap\",\n \"snowdrift\",\n \"snowdrop\",\n \"snowfall\",\n \"snowfield\",\n \"snowflake\",\n \"snowiness\",\n \"snowless\",\n \"snowman\",\n \"snowplow\",\n \"snowshoe\",\n \"snowstorm\",\n \"snowsuit\",\n \"snowy\",\n \"snub\",\n \"snuff\",\n \"snuggle\",\n \"snugly\",\n \"snugness\",\n \"speak\",\n \"spearfish\",\n \"spearhead\",\n \"spearman\",\n \"spearmint\",\n \"species\",\n \"specimen\",\n \"specked\",\n \"speckled\",\n \"specks\",\n \"spectacle\",\n \"spectator\",\n \"spectrum\",\n \"speculate\",\n \"speech\",\n \"speed\",\n \"spellbind\",\n \"speller\",\n \"spelling\",\n \"spendable\",\n \"spender\",\n \"spending\",\n \"spent\",\n \"spew\",\n \"sphere\",\n \"spherical\",\n \"sphinx\",\n \"spider\",\n \"spied\",\n \"spiffy\",\n \"spill\",\n \"spilt\",\n \"spinach\",\n \"spinal\",\n \"spindle\",\n \"spinner\",\n \"spinning\",\n \"spinout\",\n \"spinster\",\n \"spiny\",\n \"spiral\",\n \"spirited\",\n \"spiritism\",\n \"spirits\",\n \"spiritual\",\n \"splashed\",\n \"splashing\",\n \"splashy\",\n \"splatter\",\n \"spleen\",\n \"splendid\",\n \"splendor\",\n \"splice\",\n \"splicing\",\n \"splinter\",\n \"splotchy\",\n \"splurge\",\n \"spoilage\",\n \"spoiled\",\n \"spoiler\",\n \"spoiling\",\n \"spoils\",\n \"spoken\",\n \"spokesman\",\n \"sponge\",\n \"spongy\",\n \"sponsor\",\n \"spoof\",\n \"spookily\",\n \"spooky\",\n \"spool\",\n \"spoon\",\n \"spore\",\n \"sporting\",\n \"sports\",\n \"sporty\",\n \"spotless\",\n \"spotlight\",\n \"spotted\",\n \"spotter\",\n \"spotting\",\n \"spotty\",\n \"spousal\",\n \"spouse\",\n \"spout\",\n \"sprain\",\n \"sprang\",\n \"sprawl\",\n \"spray\",\n \"spree\",\n \"sprig\",\n \"spring\",\n \"sprinkled\",\n \"sprinkler\",\n \"sprint\",\n \"sprite\",\n \"sprout\",\n \"spruce\",\n \"sprung\",\n \"spry\",\n \"spud\",\n \"spur\",\n \"sputter\",\n \"spyglass\",\n \"squabble\",\n \"squad\",\n \"squall\",\n \"squander\",\n \"squash\",\n \"squatted\",\n \"squatter\",\n \"squatting\",\n \"squeak\",\n \"squealer\",\n \"squealing\",\n \"squeamish\",\n \"squeegee\",\n \"squeeze\",\n \"squeezing\",\n \"squid\",\n \"squiggle\",\n \"squiggly\",\n \"squint\",\n \"squire\",\n \"squirt\",\n \"squishier\",\n \"squishy\",\n \"stability\",\n \"stabilize\",\n \"stable\",\n \"stack\",\n \"stadium\",\n \"staff\",\n \"stage\",\n \"staging\",\n \"stagnant\",\n \"stagnate\",\n \"stainable\",\n \"stained\",\n \"staining\",\n \"stainless\",\n \"stalemate\",\n \"staleness\",\n \"stalling\",\n \"stallion\",\n \"stamina\",\n \"stammer\",\n \"stamp\",\n \"stand\",\n \"stank\",\n \"staple\",\n \"stapling\",\n \"starboard\",\n \"starch\",\n \"stardom\",\n \"stardust\",\n \"starfish\",\n \"stargazer\",\n \"staring\",\n \"stark\",\n \"starless\",\n \"starlet\",\n \"starlight\",\n \"starlit\",\n \"starring\",\n \"starry\",\n \"starship\",\n \"starter\",\n \"starting\",\n \"startle\",\n \"startling\",\n \"startup\",\n \"starved\",\n \"starving\",\n \"stash\",\n \"state\",\n \"static\",\n \"statistic\",\n \"statue\",\n \"stature\",\n \"status\",\n \"statute\",\n \"statutory\",\n \"staunch\",\n \"stays\",\n \"steadfast\",\n \"steadier\",\n \"steadily\",\n \"steadying\",\n \"steam\",\n \"steed\",\n \"steep\",\n \"steerable\",\n \"steering\",\n \"steersman\",\n \"stegosaur\",\n \"stellar\",\n \"stem\",\n \"stench\",\n \"stencil\",\n \"step\",\n \"stereo\",\n \"sterile\",\n \"sterility\",\n \"sterilize\",\n \"sterling\",\n \"sternness\",\n \"sternum\",\n \"stew\",\n \"stick\",\n \"stiffen\",\n \"stiffly\",\n \"stiffness\",\n \"stifle\",\n \"stifling\",\n \"stillness\",\n \"stilt\",\n \"stimulant\",\n \"stimulate\",\n \"stimuli\",\n \"stimulus\",\n \"stinger\",\n \"stingily\",\n \"stinging\",\n \"stingray\",\n \"stingy\",\n \"stinking\",\n \"stinky\",\n \"stipend\",\n \"stipulate\",\n \"stir\",\n \"stitch\",\n \"stock\",\n \"stoic\",\n \"stoke\",\n \"stole\",\n \"stomp\",\n \"stonewall\",\n \"stoneware\",\n \"stonework\",\n \"stoning\",\n \"stony\",\n \"stood\",\n \"stooge\",\n \"stool\",\n \"stoop\",\n \"stoplight\",\n \"stoppable\",\n \"stoppage\",\n \"stopped\",\n \"stopper\",\n \"stopping\",\n \"stopwatch\",\n \"storable\",\n \"storage\",\n \"storeroom\",\n \"storewide\",\n \"storm\",\n \"stout\",\n \"stove\",\n \"stowaway\",\n \"stowing\",\n \"straddle\",\n \"straggler\",\n \"strained\",\n \"strainer\",\n \"straining\",\n \"strangely\",\n \"stranger\",\n \"strangle\",\n \"strategic\",\n \"strategy\",\n \"stratus\",\n \"straw\",\n \"stray\",\n \"streak\",\n \"stream\",\n \"street\",\n \"strength\",\n \"strenuous\",\n \"strep\",\n \"stress\",\n \"stretch\",\n \"strewn\",\n \"stricken\",\n \"strict\",\n \"stride\",\n \"strife\",\n \"strike\",\n \"striking\",\n \"strive\",\n \"striving\",\n \"strobe\",\n \"strode\",\n \"stroller\",\n \"strongbox\",\n \"strongly\",\n \"strongman\",\n \"struck\",\n \"structure\",\n \"strudel\",\n \"struggle\",\n \"strum\",\n \"strung\",\n \"strut\",\n \"stubbed\",\n \"stubble\",\n \"stubbly\",\n \"stubborn\",\n \"stucco\",\n \"stuck\",\n \"student\",\n \"studied\",\n \"studio\",\n \"study\",\n \"stuffed\",\n \"stuffing\",\n \"stuffy\",\n \"stumble\",\n \"stumbling\",\n \"stump\",\n \"stung\",\n \"stunned\",\n \"stunner\",\n \"stunning\",\n \"stunt\",\n \"stupor\",\n \"sturdily\",\n \"sturdy\",\n \"styling\",\n \"stylishly\",\n \"stylist\",\n \"stylized\",\n \"stylus\",\n \"suave\",\n \"subarctic\",\n \"subatomic\",\n \"subdivide\",\n \"subdued\",\n \"subduing\",\n \"subfloor\",\n \"subgroup\",\n \"subheader\",\n \"subject\",\n \"sublease\",\n \"sublet\",\n \"sublevel\",\n \"sublime\",\n \"submarine\",\n \"submerge\",\n \"submersed\",\n \"submitter\",\n \"subpanel\",\n \"subpar\",\n \"subplot\",\n \"subprime\",\n \"subscribe\",\n \"subscript\",\n \"subsector\",\n \"subside\",\n \"subsiding\",\n \"subsidize\",\n \"subsidy\",\n \"subsoil\",\n \"subsonic\",\n \"substance\",\n \"subsystem\",\n \"subtext\",\n \"subtitle\",\n \"subtly\",\n \"subtotal\",\n \"subtract\",\n \"subtype\",\n \"suburb\",\n \"subway\",\n \"subwoofer\",\n \"subzero\",\n \"succulent\",\n \"such\",\n \"suction\",\n \"sudden\",\n \"sudoku\",\n \"suds\",\n \"sufferer\",\n \"suffering\",\n \"suffice\",\n \"suffix\",\n \"suffocate\",\n \"suffrage\",\n \"sugar\",\n \"suggest\",\n \"suing\",\n \"suitable\",\n \"suitably\",\n \"suitcase\",\n \"suitor\",\n \"sulfate\",\n \"sulfide\",\n \"sulfite\",\n \"sulfur\",\n \"sulk\",\n \"sullen\",\n \"sulphate\",\n \"sulphuric\",\n \"sultry\",\n \"superbowl\",\n \"superglue\",\n \"superhero\",\n \"superior\",\n \"superjet\",\n \"superman\",\n \"supermom\",\n \"supernova\",\n \"supervise\",\n \"supper\",\n \"supplier\",\n \"supply\",\n \"support\",\n \"supremacy\",\n \"supreme\",\n \"surcharge\",\n \"surely\",\n \"sureness\",\n \"surface\",\n \"surfacing\",\n \"surfboard\",\n \"surfer\",\n \"surgery\",\n \"surgical\",\n \"surging\",\n \"surname\",\n \"surpass\",\n \"surplus\",\n \"surprise\",\n \"surreal\",\n \"surrender\",\n \"surrogate\",\n \"surround\",\n \"survey\",\n \"survival\",\n \"survive\",\n \"surviving\",\n \"survivor\",\n \"sushi\",\n \"suspect\",\n \"suspend\",\n \"suspense\",\n \"sustained\",\n \"sustainer\",\n \"swab\",\n \"swaddling\",\n \"swagger\",\n \"swampland\",\n \"swan\",\n \"swapping\",\n \"swarm\",\n \"sway\",\n \"swear\",\n \"sweat\",\n \"sweep\",\n \"swell\",\n \"swept\",\n \"swerve\",\n \"swifter\",\n \"swiftly\",\n \"swiftness\",\n \"swimmable\",\n \"swimmer\",\n \"swimming\",\n \"swimsuit\",\n \"swimwear\",\n \"swinger\",\n \"swinging\",\n \"swipe\",\n \"swirl\",\n \"switch\",\n \"swivel\",\n \"swizzle\",\n \"swooned\",\n \"swoop\",\n \"swoosh\",\n \"swore\",\n \"sworn\",\n \"swung\",\n \"sycamore\",\n \"sympathy\",\n \"symphonic\",\n \"symphony\",\n \"symptom\",\n \"synapse\",\n \"syndrome\",\n \"synergy\",\n \"synopses\",\n \"synopsis\",\n \"synthesis\",\n \"synthetic\",\n \"syrup\",\n \"system\",\n \"t-shirt\",\n \"tabasco\",\n \"tabby\",\n \"tableful\",\n \"tables\",\n \"tablet\",\n \"tableware\",\n \"tabloid\",\n \"tackiness\",\n \"tacking\",\n \"tackle\",\n \"tackling\",\n \"tacky\",\n \"taco\",\n \"tactful\",\n \"tactical\",\n \"tactics\",\n \"tactile\",\n \"tactless\",\n \"tadpole\",\n \"taekwondo\",\n \"tag\",\n \"tainted\",\n \"take\",\n \"taking\",\n \"talcum\",\n \"talisman\",\n \"tall\",\n \"talon\",\n \"tamale\",\n \"tameness\",\n \"tamer\",\n \"tamper\",\n \"tank\",\n \"tanned\",\n \"tannery\",\n \"tanning\",\n \"tantrum\",\n \"tapeless\",\n \"tapered\",\n \"tapering\",\n \"tapestry\",\n \"tapioca\",\n \"tapping\",\n \"taps\",\n \"tarantula\",\n \"target\",\n \"tarmac\",\n \"tarnish\",\n \"tarot\",\n \"tartar\",\n \"tartly\",\n \"tartness\",\n \"task\",\n \"tassel\",\n \"taste\",\n \"tastiness\",\n \"tasting\",\n \"tasty\",\n \"tattered\",\n \"tattle\",\n \"tattling\",\n \"tattoo\",\n \"taunt\",\n \"tavern\",\n \"thank\",\n \"that\",\n \"thaw\",\n \"theater\",\n \"theatrics\",\n \"thee\",\n \"theft\",\n \"theme\",\n \"theology\",\n \"theorize\",\n \"thermal\",\n \"thermos\",\n \"thesaurus\",\n \"these\",\n \"thesis\",\n \"thespian\",\n \"thicken\",\n \"thicket\",\n \"thickness\",\n \"thieving\",\n \"thievish\",\n \"thigh\",\n \"thimble\",\n \"thing\",\n \"think\",\n \"thinly\",\n \"thinner\",\n \"thinness\",\n \"thinning\",\n \"thirstily\",\n \"thirsting\",\n \"thirsty\",\n \"thirteen\",\n \"thirty\",\n \"thong\",\n \"thorn\",\n \"those\",\n \"thousand\",\n \"thrash\",\n \"thread\",\n \"threaten\",\n \"threefold\",\n \"thrift\",\n \"thrill\",\n \"thrive\",\n \"thriving\",\n \"throat\",\n \"throbbing\",\n \"throng\",\n \"throttle\",\n \"throwaway\",\n \"throwback\",\n \"thrower\",\n \"throwing\",\n \"thud\",\n \"thumb\",\n \"thumping\",\n \"thursday\",\n \"thus\",\n \"thwarting\",\n \"thyself\",\n \"tiara\",\n \"tibia\",\n \"tidal\",\n \"tidbit\",\n \"tidiness\",\n \"tidings\",\n \"tidy\",\n \"tiger\",\n \"tighten\",\n \"tightly\",\n \"tightness\",\n \"tightrope\",\n \"tightwad\",\n \"tigress\",\n \"tile\",\n \"tiling\",\n \"till\",\n \"tilt\",\n \"timid\",\n \"timing\",\n \"timothy\",\n \"tinderbox\",\n \"tinfoil\",\n \"tingle\",\n \"tingling\",\n \"tingly\",\n \"tinker\",\n \"tinkling\",\n \"tinsel\",\n \"tinsmith\",\n \"tint\",\n \"tinwork\",\n \"tiny\",\n \"tipoff\",\n \"tipped\",\n \"tipper\",\n \"tipping\",\n \"tiptoeing\",\n \"tiptop\",\n \"tiring\",\n \"tissue\",\n \"trace\",\n \"tracing\",\n \"track\",\n \"traction\",\n \"tractor\",\n \"trade\",\n \"trading\",\n \"tradition\",\n \"traffic\",\n \"tragedy\",\n \"trailing\",\n \"trailside\",\n \"train\",\n \"traitor\",\n \"trance\",\n \"tranquil\",\n \"transfer\",\n \"transform\",\n \"translate\",\n \"transpire\",\n \"transport\",\n \"transpose\",\n \"trapdoor\",\n \"trapeze\",\n \"trapezoid\",\n \"trapped\",\n \"trapper\",\n \"trapping\",\n \"traps\",\n \"trash\",\n \"travel\",\n \"traverse\",\n \"travesty\",\n \"tray\",\n \"treachery\",\n \"treading\",\n \"treadmill\",\n \"treason\",\n \"treat\",\n \"treble\",\n \"tree\",\n \"trekker\",\n \"tremble\",\n \"trembling\",\n \"tremor\",\n \"trench\",\n \"trend\",\n \"trespass\",\n \"triage\",\n \"trial\",\n \"triangle\",\n \"tribesman\",\n \"tribunal\",\n \"tribune\",\n \"tributary\",\n \"tribute\",\n \"triceps\",\n \"trickery\",\n \"trickily\",\n \"tricking\",\n \"trickle\",\n \"trickster\",\n \"tricky\",\n \"tricolor\",\n \"tricycle\",\n \"trident\",\n \"tried\",\n \"trifle\",\n \"trifocals\",\n \"trillion\",\n \"trilogy\",\n \"trimester\",\n \"trimmer\",\n \"trimming\",\n \"trimness\",\n \"trinity\",\n \"trio\",\n \"tripod\",\n \"tripping\",\n \"triumph\",\n \"trivial\",\n \"trodden\",\n \"trolling\",\n \"trombone\",\n \"trophy\",\n \"tropical\",\n \"tropics\",\n \"trouble\",\n \"troubling\",\n \"trough\",\n \"trousers\",\n \"trout\",\n \"trowel\",\n \"truce\",\n \"truck\",\n \"truffle\",\n \"trump\",\n \"trunks\",\n \"trustable\",\n \"trustee\",\n \"trustful\",\n \"trusting\",\n \"trustless\",\n \"truth\",\n \"try\",\n \"tubby\",\n \"tubeless\",\n \"tubular\",\n \"tucking\",\n \"tuesday\",\n \"tug\",\n \"tuition\",\n \"tulip\",\n \"tumble\",\n \"tumbling\",\n \"tummy\",\n \"turban\",\n \"turbine\",\n \"turbofan\",\n \"turbojet\",\n \"turbulent\",\n \"turf\",\n \"turkey\",\n \"turmoil\",\n \"turret\",\n \"turtle\",\n \"tusk\",\n \"tutor\",\n \"tutu\",\n \"tux\",\n \"tweak\",\n \"tweed\",\n \"tweet\",\n \"tweezers\",\n \"twelve\",\n \"twentieth\",\n \"twenty\",\n \"twerp\",\n \"twice\",\n \"twiddle\",\n \"twiddling\",\n \"twig\",\n \"twilight\",\n \"twine\",\n \"twins\",\n \"twirl\",\n \"twistable\",\n \"twisted\",\n \"twister\",\n \"twisting\",\n \"twisty\",\n \"twitch\",\n \"twitter\",\n \"tycoon\",\n \"tying\",\n \"tyke\",\n \"udder\",\n \"ultimate\",\n \"ultimatum\",\n \"ultra\",\n \"umbilical\",\n \"umbrella\",\n \"umpire\",\n \"unabashed\",\n \"unable\",\n \"unadorned\",\n \"unadvised\",\n \"unafraid\",\n \"unaired\",\n \"unaligned\",\n \"unaltered\",\n \"unarmored\",\n \"unashamed\",\n \"unaudited\",\n \"unawake\",\n \"unaware\",\n \"unbaked\",\n \"unbalance\",\n \"unbeaten\",\n \"unbend\",\n \"unbent\",\n \"unbiased\",\n \"unbitten\",\n \"unblended\",\n \"unblessed\",\n \"unblock\",\n \"unbolted\",\n \"unbounded\",\n \"unboxed\",\n \"unbraided\",\n \"unbridle\",\n \"unbroken\",\n \"unbuckled\",\n \"unbundle\",\n \"unburned\",\n \"unbutton\",\n \"uncanny\",\n \"uncapped\",\n \"uncaring\",\n \"uncertain\",\n \"unchain\",\n \"unchanged\",\n \"uncharted\",\n \"uncheck\",\n \"uncivil\",\n \"unclad\",\n \"unclaimed\",\n \"unclamped\",\n \"unclasp\",\n \"uncle\",\n \"unclip\",\n \"uncloak\",\n \"unclog\",\n \"unclothed\",\n \"uncoated\",\n \"uncoiled\",\n \"uncolored\",\n \"uncombed\",\n \"uncommon\",\n \"uncooked\",\n \"uncork\",\n \"uncorrupt\",\n \"uncounted\",\n \"uncouple\",\n \"uncouth\",\n \"uncover\",\n \"uncross\",\n \"uncrown\",\n \"uncrushed\",\n \"uncured\",\n \"uncurious\",\n \"uncurled\",\n \"uncut\",\n \"undamaged\",\n \"undated\",\n \"undaunted\",\n \"undead\",\n \"undecided\",\n \"undefined\",\n \"underage\",\n \"underarm\",\n \"undercoat\",\n \"undercook\",\n \"undercut\",\n \"underdog\",\n \"underdone\",\n \"underfed\",\n \"underfeed\",\n \"underfoot\",\n \"undergo\",\n \"undergrad\",\n \"underhand\",\n \"underline\",\n \"underling\",\n \"undermine\",\n \"undermost\",\n \"underpaid\",\n \"underpass\",\n \"underpay\",\n \"underrate\",\n \"undertake\",\n \"undertone\",\n \"undertook\",\n \"undertow\",\n \"underuse\",\n \"underwear\",\n \"underwent\",\n \"underwire\",\n \"undesired\",\n \"undiluted\",\n \"undivided\",\n \"undocked\",\n \"undoing\",\n \"undone\",\n \"undrafted\",\n \"undress\",\n \"undrilled\",\n \"undusted\",\n \"undying\",\n \"unearned\",\n \"unearth\",\n \"unease\",\n \"uneasily\",\n \"uneasy\",\n \"uneatable\",\n \"uneaten\",\n \"unedited\",\n \"unelected\",\n \"unending\",\n \"unengaged\",\n \"unenvied\",\n \"unequal\",\n \"unethical\",\n \"uneven\",\n \"unexpired\",\n \"unexposed\",\n \"unfailing\",\n \"unfair\",\n \"unfasten\",\n \"unfazed\",\n \"unfeeling\",\n \"unfiled\",\n \"unfilled\",\n \"unfitted\",\n \"unfitting\",\n \"unfixable\",\n \"unfixed\",\n \"unflawed\",\n \"unfocused\",\n \"unfold\",\n \"unfounded\",\n \"unframed\",\n \"unfreeze\",\n \"unfrosted\",\n \"unfrozen\",\n \"unfunded\",\n \"unglazed\",\n \"ungloved\",\n \"unglue\",\n \"ungodly\",\n \"ungraded\",\n \"ungreased\",\n \"unguarded\",\n \"unguided\",\n \"unhappily\",\n \"unhappy\",\n \"unharmed\",\n \"unhealthy\",\n \"unheard\",\n \"unhearing\",\n \"unheated\",\n \"unhelpful\",\n \"unhidden\",\n \"unhinge\",\n \"unhitched\",\n \"unholy\",\n \"unhook\",\n \"unicorn\",\n \"unicycle\",\n \"unified\",\n \"unifier\",\n \"uniformed\",\n \"uniformly\",\n \"unify\",\n \"unimpeded\",\n \"uninjured\",\n \"uninstall\",\n \"uninsured\",\n \"uninvited\",\n \"union\",\n \"uniquely\",\n \"unisexual\",\n \"unison\",\n \"unissued\",\n \"unit\",\n \"universal\",\n \"universe\",\n \"unjustly\",\n \"unkempt\",\n \"unkind\",\n \"unknotted\",\n \"unknowing\",\n \"unknown\",\n \"unlaced\",\n \"unlatch\",\n \"unlawful\",\n \"unleaded\",\n \"unlearned\",\n \"unleash\",\n \"unless\",\n \"unleveled\",\n \"unlighted\",\n \"unlikable\",\n \"unlimited\",\n \"unlined\",\n \"unlinked\",\n \"unlisted\",\n \"unlit\",\n \"unlivable\",\n \"unloaded\",\n \"unloader\",\n \"unlocked\",\n \"unlocking\",\n \"unlovable\",\n \"unloved\",\n \"unlovely\",\n \"unloving\",\n \"unluckily\",\n \"unlucky\",\n \"unmade\",\n \"unmanaged\",\n \"unmanned\",\n \"unmapped\",\n \"unmarked\",\n \"unmasked\",\n \"unmasking\",\n \"unmatched\",\n \"unmindful\",\n \"unmixable\",\n \"unmixed\",\n \"unmolded\",\n \"unmoral\",\n \"unmovable\",\n \"unmoved\",\n \"unmoving\",\n \"unnamable\",\n \"unnamed\",\n \"unnatural\",\n \"unneeded\",\n \"unnerve\",\n \"unnerving\",\n \"unnoticed\",\n \"unopened\",\n \"unopposed\",\n \"unpack\",\n \"unpadded\",\n \"unpaid\",\n \"unpainted\",\n \"unpaired\",\n \"unpaved\",\n \"unpeeled\",\n \"unpicked\",\n \"unpiloted\",\n \"unpinned\",\n \"unplanned\",\n \"unplanted\",\n \"unpleased\",\n \"unpledged\",\n \"unplowed\",\n \"unplug\",\n \"unpopular\",\n \"unproven\",\n \"unquote\",\n \"unranked\",\n \"unrated\",\n \"unraveled\",\n \"unreached\",\n \"unread\",\n \"unreal\",\n \"unreeling\",\n \"unrefined\",\n \"unrelated\",\n \"unrented\",\n \"unrest\",\n \"unretired\",\n \"unrevised\",\n \"unrigged\",\n \"unripe\",\n \"unrivaled\",\n \"unroasted\",\n \"unrobed\",\n \"unroll\",\n \"unruffled\",\n \"unruly\",\n \"unrushed\",\n \"unsaddle\",\n \"unsafe\",\n \"unsaid\",\n \"unsalted\",\n \"unsaved\",\n \"unsavory\",\n \"unscathed\",\n \"unscented\",\n \"unscrew\",\n \"unsealed\",\n \"unseated\",\n \"unsecured\",\n \"unseeing\",\n \"unseemly\",\n \"unseen\",\n \"unselect\",\n \"unselfish\",\n \"unsent\",\n \"unsettled\",\n \"unshackle\",\n \"unshaken\",\n \"unshaved\",\n \"unshaven\",\n \"unsheathe\",\n \"unshipped\",\n \"unsightly\",\n \"unsigned\",\n \"unskilled\",\n \"unsliced\",\n \"unsmooth\",\n \"unsnap\",\n \"unsocial\",\n \"unsoiled\",\n \"unsold\",\n \"unsolved\",\n \"unsorted\",\n \"unspoiled\",\n \"unspoken\",\n \"unstable\",\n \"unstaffed\",\n \"unstamped\",\n \"unsteady\",\n \"unsterile\",\n \"unstirred\",\n \"unstitch\",\n \"unstopped\",\n \"unstuck\",\n \"unstuffed\",\n \"unstylish\",\n \"unsubtle\",\n \"unsubtly\",\n \"unsuited\",\n \"unsure\",\n \"unsworn\",\n \"untagged\",\n \"untainted\",\n \"untaken\",\n \"untamed\",\n \"untangled\",\n \"untapped\",\n \"untaxed\",\n \"unthawed\",\n \"unthread\",\n \"untidy\",\n \"untie\",\n \"until\",\n \"untimed\",\n \"untimely\",\n \"untitled\",\n \"untoasted\",\n \"untold\",\n \"untouched\",\n \"untracked\",\n \"untrained\",\n \"untreated\",\n \"untried\",\n \"untrimmed\",\n \"untrue\",\n \"untruth\",\n \"unturned\",\n \"untwist\",\n \"untying\",\n \"unusable\",\n \"unused\",\n \"unusual\",\n \"unvalued\",\n \"unvaried\",\n \"unvarying\",\n \"unveiled\",\n \"unveiling\",\n \"unvented\",\n \"unviable\",\n \"unvisited\",\n \"unvocal\",\n \"unwanted\",\n \"unwarlike\",\n \"unwary\",\n \"unwashed\",\n \"unwatched\",\n \"unweave\",\n \"unwed\",\n \"unwelcome\",\n \"unwell\",\n \"unwieldy\",\n \"unwilling\",\n \"unwind\",\n \"unwired\",\n \"unwitting\",\n \"unwomanly\",\n \"unworldly\",\n \"unworn\",\n \"unworried\",\n \"unworthy\",\n \"unwound\",\n \"unwoven\",\n \"unwrapped\",\n \"unwritten\",\n \"unzip\",\n \"upbeat\",\n \"upchuck\",\n \"upcoming\",\n \"upcountry\",\n \"update\",\n \"upfront\",\n \"upgrade\",\n \"upheaval\",\n \"upheld\",\n \"uphill\",\n \"uphold\",\n \"uplifted\",\n \"uplifting\",\n \"upload\",\n \"upon\",\n \"upper\",\n \"upright\",\n \"uprising\",\n \"upriver\",\n \"uproar\",\n \"uproot\",\n \"upscale\",\n \"upside\",\n \"upstage\",\n \"upstairs\",\n \"upstart\",\n \"upstate\",\n \"upstream\",\n \"upstroke\",\n \"upswing\",\n \"uptake\",\n \"uptight\",\n \"uptown\",\n \"upturned\",\n \"upward\",\n \"upwind\",\n \"uranium\",\n \"urban\",\n \"urchin\",\n \"urethane\",\n \"urgency\",\n \"urgent\",\n \"urging\",\n \"urologist\",\n \"urology\",\n \"usable\",\n \"usage\",\n \"useable\",\n \"used\",\n \"uselessly\",\n \"user\",\n \"usher\",\n \"usual\",\n \"utensil\",\n \"utility\",\n \"utilize\",\n \"utmost\",\n \"utopia\",\n \"utter\",\n \"vacancy\",\n \"vacant\",\n \"vacate\",\n \"vacation\",\n \"vagabond\",\n \"vagrancy\",\n \"vagrantly\",\n \"vaguely\",\n \"vagueness\",\n \"valiant\",\n \"valid\",\n \"valium\",\n \"valley\",\n \"valuables\",\n \"value\",\n \"vanilla\",\n \"vanish\",\n \"vanity\",\n \"vanquish\",\n \"vantage\",\n \"vaporizer\",\n \"variable\",\n \"variably\",\n \"varied\",\n \"variety\",\n \"various\",\n \"varmint\",\n \"varnish\",\n \"varsity\",\n \"varying\",\n \"vascular\",\n \"vaseline\",\n \"vastly\",\n \"vastness\",\n \"veal\",\n \"vegan\",\n \"veggie\",\n \"vehicular\",\n \"velcro\",\n \"velocity\",\n \"velvet\",\n \"vendetta\",\n \"vending\",\n \"vendor\",\n \"veneering\",\n \"vengeful\",\n \"venomous\",\n \"ventricle\",\n \"venture\",\n \"venue\",\n \"venus\",\n \"verbalize\",\n \"verbally\",\n \"verbose\",\n \"verdict\",\n \"verify\",\n \"verse\",\n \"version\",\n \"versus\",\n \"vertebrae\",\n \"vertical\",\n \"vertigo\",\n \"very\",\n \"vessel\",\n \"vest\",\n \"veteran\",\n \"veto\",\n \"vexingly\",\n \"viability\",\n \"viable\",\n \"vibes\",\n \"vice\",\n \"vicinity\",\n \"victory\",\n \"video\",\n \"viewable\",\n \"viewer\",\n \"viewing\",\n \"viewless\",\n \"viewpoint\",\n \"vigorous\",\n \"village\",\n \"villain\",\n \"vindicate\",\n \"vineyard\",\n \"vintage\",\n \"violate\",\n \"violation\",\n \"violator\",\n \"violet\",\n \"violin\",\n \"viper\",\n \"viral\",\n \"virtual\",\n \"virtuous\",\n \"virus\",\n \"visa\",\n \"viscosity\",\n \"viscous\",\n \"viselike\",\n \"visible\",\n \"visibly\",\n \"vision\",\n \"visiting\",\n \"visitor\",\n \"visor\",\n \"vista\",\n \"vitality\",\n \"vitalize\",\n \"vitally\",\n \"vitamins\",\n \"vivacious\",\n \"vividly\",\n \"vividness\",\n \"vixen\",\n \"vocalist\",\n \"vocalize\",\n \"vocally\",\n \"vocation\",\n \"voice\",\n \"voicing\",\n \"void\",\n \"volatile\",\n \"volley\",\n \"voltage\",\n \"volumes\",\n \"voter\",\n \"voting\",\n \"voucher\",\n \"vowed\",\n \"vowel\",\n \"voyage\",\n \"wackiness\",\n \"wad\",\n \"wafer\",\n \"waffle\",\n \"waged\",\n \"wager\",\n \"wages\",\n \"waggle\",\n \"wagon\",\n \"wake\",\n \"waking\",\n \"walk\",\n \"walmart\",\n \"walnut\",\n \"walrus\",\n \"waltz\",\n \"wand\",\n \"wannabe\",\n \"wanted\",\n \"wanting\",\n \"wasabi\",\n \"washable\",\n \"washbasin\",\n \"washboard\",\n \"washbowl\",\n \"washcloth\",\n \"washday\",\n \"washed\",\n \"washer\",\n \"washhouse\",\n \"washing\",\n \"washout\",\n \"washroom\",\n \"washstand\",\n \"washtub\",\n \"wasp\",\n \"wasting\",\n \"watch\",\n \"water\",\n \"waviness\",\n \"waving\",\n \"wavy\",\n \"whacking\",\n \"whacky\",\n \"wham\",\n \"wharf\",\n \"wheat\",\n \"whenever\",\n \"whiff\",\n \"whimsical\",\n \"whinny\",\n \"whiny\",\n \"whisking\",\n \"whoever\",\n \"whole\",\n \"whomever\",\n \"whoopee\",\n \"whooping\",\n \"whoops\",\n \"why\",\n \"wick\",\n \"widely\",\n \"widen\",\n \"widget\",\n \"widow\",\n \"width\",\n \"wieldable\",\n \"wielder\",\n \"wife\",\n \"wifi\",\n \"wikipedia\",\n \"wildcard\",\n \"wildcat\",\n \"wilder\",\n \"wildfire\",\n \"wildfowl\",\n \"wildland\",\n \"wildlife\",\n \"wildly\",\n \"wildness\",\n \"willed\",\n \"willfully\",\n \"willing\",\n \"willow\",\n \"willpower\",\n \"wilt\",\n \"wimp\",\n \"wince\",\n \"wincing\",\n \"wind\",\n \"wing\",\n \"winking\",\n \"winner\",\n \"winnings\",\n \"winter\",\n \"wipe\",\n \"wired\",\n \"wireless\",\n \"wiring\",\n \"wiry\",\n \"wisdom\",\n \"wise\",\n \"wish\",\n \"wisplike\",\n \"wispy\",\n \"wistful\",\n \"wizard\",\n \"wobble\",\n \"wobbling\",\n \"wobbly\",\n \"wok\",\n \"wolf\",\n \"wolverine\",\n \"womanhood\",\n \"womankind\",\n \"womanless\",\n \"womanlike\",\n \"womanly\",\n \"womb\",\n \"woof\",\n \"wooing\",\n \"wool\",\n \"woozy\",\n \"word\",\n \"work\",\n \"worried\",\n \"worrier\",\n \"worrisome\",\n \"worry\",\n \"worsening\",\n \"worshiper\",\n \"worst\",\n \"wound\",\n \"woven\",\n \"wow\",\n \"wrangle\",\n \"wrath\",\n \"wreath\",\n \"wreckage\",\n \"wrecker\",\n \"wrecking\",\n \"wrench\",\n \"wriggle\",\n \"wriggly\",\n \"wrinkle\",\n \"wrinkly\",\n \"wrist\",\n \"writing\",\n \"written\",\n \"wrongdoer\",\n \"wronged\",\n \"wrongful\",\n \"wrongly\",\n \"wrongness\",\n \"wrought\",\n \"xbox\",\n \"xerox\",\n \"yahoo\",\n \"yam\",\n \"yanking\",\n \"yapping\",\n \"yard\",\n \"yarn\",\n \"yeah\",\n \"yearbook\",\n \"yearling\",\n \"yearly\",\n \"yearning\",\n \"yeast\",\n \"yelling\",\n \"yelp\",\n \"yen\",\n \"yesterday\",\n \"yiddish\",\n \"yield\",\n \"yin\",\n \"yippee\",\n \"yo-yo\",\n \"yodel\",\n \"yoga\",\n \"yogurt\",\n \"yonder\",\n \"yoyo\",\n \"yummy\",\n \"zap\",\n \"zealous\",\n \"zebra\",\n \"zen\",\n \"zeppelin\",\n \"zero\",\n \"zestfully\",\n \"zesty\",\n \"zigzagged\",\n \"zipfile\",\n \"zipping\",\n \"zippy\",\n \"zips\",\n \"zit\",\n \"zodiac\",\n \"zombie\",\n \"zone\",\n \"zoning\",\n \"zookeeper\",\n \"zoologist\",\n \"zoology\",\n \"zoom\",\n];\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class CardApi extends BaseResponse {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.cardholderName = this.getResponseProperty(\"CardholderName\");\n this.brand = this.getResponseProperty(\"Brand\");\n this.number = this.getResponseProperty(\"Number\");\n this.expMonth = this.getResponseProperty(\"ExpMonth\");\n this.expYear = this.getResponseProperty(\"ExpYear\");\n this.code = this.getResponseProperty(\"Code\");\n }\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { BaseResponse } from \"../response/baseResponse\";\n\nexport class FieldApi extends BaseResponse {\n name: string;\n value: string;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.value = this.getResponseProperty(\"Value\");\n this.linkedId = this.getResponseProperty(\"linkedId\");\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class IdentityApi extends BaseResponse {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.title = this.getResponseProperty(\"Title\");\n this.firstName = this.getResponseProperty(\"FirstName\");\n this.middleName = this.getResponseProperty(\"MiddleName\");\n this.lastName = this.getResponseProperty(\"LastName\");\n this.address1 = this.getResponseProperty(\"Address1\");\n this.address2 = this.getResponseProperty(\"Address2\");\n this.address3 = this.getResponseProperty(\"Address3\");\n this.city = this.getResponseProperty(\"City\");\n this.state = this.getResponseProperty(\"State\");\n this.postalCode = this.getResponseProperty(\"PostalCode\");\n this.country = this.getResponseProperty(\"Country\");\n this.company = this.getResponseProperty(\"Company\");\n this.email = this.getResponseProperty(\"Email\");\n this.phone = this.getResponseProperty(\"Phone\");\n this.ssn = this.getResponseProperty(\"SSN\");\n this.username = this.getResponseProperty(\"Username\");\n this.passportNumber = this.getResponseProperty(\"PassportNumber\");\n this.licenseNumber = this.getResponseProperty(\"LicenseNumber\");\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nimport { LoginUriApi } from \"./loginUriApi\";\n\nexport class LoginApi extends BaseResponse {\n uris: LoginUriApi[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n autofillOnPageLoad: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.username = this.getResponseProperty(\"Username\");\n this.password = this.getResponseProperty(\"Password\");\n this.passwordRevisionDate = this.getResponseProperty(\"PasswordRevisionDate\");\n this.totp = this.getResponseProperty(\"Totp\");\n this.autofillOnPageLoad = this.getResponseProperty(\"AutofillOnPageLoad\");\n\n const uris = this.getResponseProperty(\"Uris\");\n if (uris != null) {\n this.uris = uris.map((u: any) => new LoginUriApi(u));\n }\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { BaseResponse } from \"../response/baseResponse\";\n\nexport class LoginUriApi extends BaseResponse {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.uri = this.getResponseProperty(\"Uri\");\n const match = this.getResponseProperty(\"Match\");\n this.match = match != null ? match : null;\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class PermissionsApi extends BaseResponse {\n accessEventLogs: boolean;\n accessImportExport: boolean;\n accessReports: boolean;\n /**\n * @deprecated Sep 29 2021: This permission has been split out to `createNewCollections`, `editAnyCollection`, and\n * `deleteAnyCollection`. It exists here for backwards compatibility with Server versions <= 1.43.0\n */\n manageAllCollections: boolean;\n createNewCollections: boolean;\n editAnyCollection: boolean;\n deleteAnyCollection: boolean;\n /**\n * @deprecated Sep 29 2021: This permission has been split out to `editAssignedCollections` and\n * `deleteAssignedCollections`. It exists here for backwards compatibility with Server versions <= 1.43.0\n */\n manageAssignedCollections: boolean;\n editAssignedCollections: boolean;\n deleteAssignedCollections: boolean;\n manageCiphers: boolean;\n manageGroups: boolean;\n manageSso: boolean;\n managePolicies: boolean;\n manageUsers: boolean;\n manageResetPassword: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return this;\n }\n this.accessEventLogs = this.getResponseProperty(\"AccessEventLogs\");\n this.accessImportExport = this.getResponseProperty(\"AccessImportExport\");\n this.accessReports = this.getResponseProperty(\"AccessReports\");\n\n // For backwards compatibility with Server <= 1.43.0\n this.manageAllCollections = this.getResponseProperty(\"ManageAllCollections\");\n this.manageAssignedCollections = this.getResponseProperty(\"ManageAssignedCollections\");\n\n this.createNewCollections = this.getResponseProperty(\"CreateNewCollections\");\n this.editAnyCollection = this.getResponseProperty(\"EditAnyCollection\");\n this.deleteAnyCollection = this.getResponseProperty(\"DeleteAnyCollection\");\n this.editAssignedCollections = this.getResponseProperty(\"EditAssignedCollections\");\n this.deleteAssignedCollections = this.getResponseProperty(\"DeleteAssignedCollections\");\n\n this.manageCiphers = this.getResponseProperty(\"ManageCiphers\");\n this.manageGroups = this.getResponseProperty(\"ManageGroups\");\n this.manageSso = this.getResponseProperty(\"ManageSso\");\n this.managePolicies = this.getResponseProperty(\"ManagePolicies\");\n this.manageUsers = this.getResponseProperty(\"ManageUsers\");\n this.manageResetPassword = this.getResponseProperty(\"ManageResetPassword\");\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { BaseResponse } from \"../response/baseResponse\";\n\nexport class SecureNoteApi extends BaseResponse {\n type: SecureNoteType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty(\"Type\");\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class SendFileApi extends BaseResponse {\n id: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.id = this.getResponseProperty(\"Id\");\n this.fileName = this.getResponseProperty(\"FileName\");\n this.key = this.getResponseProperty(\"Key\");\n this.size = this.getResponseProperty(\"Size\");\n this.sizeName = this.getResponseProperty(\"SizeName\");\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class SendTextApi extends BaseResponse {\n text: string;\n hidden: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.text = this.getResponseProperty(\"Text\");\n this.hidden = this.getResponseProperty(\"Hidden\") || false;\n }\n}\n","import {\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"../../enums/ssoEnums\";\nimport { BaseResponse } from \"../response/baseResponse\";\nimport { SsoConfigView } from \"../view/ssoConfigView\";\n\nexport class SsoConfigApi extends BaseResponse {\n static fromView(view: SsoConfigView, api = new SsoConfigApi()) {\n api.configType = view.configType;\n\n api.keyConnectorEnabled = view.keyConnectorEnabled;\n api.keyConnectorUrl = view.keyConnectorUrl;\n\n if (api.configType === SsoType.OpenIdConnect) {\n api.authority = view.openId.authority;\n api.clientId = view.openId.clientId;\n api.clientSecret = view.openId.clientSecret;\n api.metadataAddress = view.openId.metadataAddress;\n api.redirectBehavior = view.openId.redirectBehavior;\n api.getClaimsFromUserInfoEndpoint = view.openId.getClaimsFromUserInfoEndpoint;\n api.additionalScopes = view.openId.additionalScopes;\n api.additionalUserIdClaimTypes = view.openId.additionalUserIdClaimTypes;\n api.additionalEmailClaimTypes = view.openId.additionalEmailClaimTypes;\n api.additionalNameClaimTypes = view.openId.additionalNameClaimTypes;\n api.acrValues = view.openId.acrValues;\n api.expectedReturnAcrValue = view.openId.expectedReturnAcrValue;\n } else if (api.configType === SsoType.Saml2) {\n api.spNameIdFormat = view.saml.spNameIdFormat;\n api.spOutboundSigningAlgorithm = view.saml.spOutboundSigningAlgorithm;\n api.spSigningBehavior = view.saml.spSigningBehavior;\n api.spMinIncomingSigningAlgorithm = view.saml.spMinIncomingSigningAlgorithm;\n api.spWantAssertionsSigned = view.saml.spWantAssertionsSigned;\n api.spValidateCertificates = view.saml.spValidateCertificates;\n\n api.idpEntityId = view.saml.idpEntityId;\n api.idpBindingType = view.saml.idpBindingType;\n api.idpSingleSignOnServiceUrl = view.saml.idpSingleSignOnServiceUrl;\n api.idpSingleLogoutServiceUrl = view.saml.idpSingleLogoutServiceUrl;\n api.idpX509PublicCert = view.saml.idpX509PublicCert;\n api.idpOutboundSigningAlgorithm = view.saml.idpOutboundSigningAlgorithm;\n api.idpAllowUnsolicitedAuthnResponse = view.saml.idpAllowUnsolicitedAuthnResponse;\n api.idpWantAuthnRequestsSigned = view.saml.idpWantAuthnRequestsSigned;\n\n // Value is inverted in the api model (disable instead of allow)\n api.idpDisableOutboundLogoutRequests = !view.saml.idpAllowOutboundLogoutRequests;\n }\n\n return api;\n }\n configType: SsoType;\n\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n\n // OpenId\n authority: string;\n clientId: string;\n clientSecret: string;\n metadataAddress: string;\n redirectBehavior: OpenIdConnectRedirectBehavior;\n getClaimsFromUserInfoEndpoint: boolean;\n additionalScopes: string;\n additionalUserIdClaimTypes: string;\n additionalEmailClaimTypes: string;\n additionalNameClaimTypes: string;\n acrValues: string;\n expectedReturnAcrValue: string;\n\n // SAML\n spNameIdFormat: Saml2NameIdFormat;\n spOutboundSigningAlgorithm: string;\n spSigningBehavior: Saml2SigningBehavior;\n spMinIncomingSigningAlgorithm: boolean;\n spWantAssertionsSigned: boolean;\n spValidateCertificates: boolean;\n\n idpEntityId: string;\n idpBindingType: Saml2BindingType;\n idpSingleSignOnServiceUrl: string;\n idpSingleLogoutServiceUrl: string;\n idpX509PublicCert: string;\n idpOutboundSigningAlgorithm: string;\n idpAllowUnsolicitedAuthnResponse: boolean;\n idpDisableOutboundLogoutRequests: boolean;\n idpWantAuthnRequestsSigned: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n\n this.configType = this.getResponseProperty(\"ConfigType\");\n\n this.keyConnectorEnabled = this.getResponseProperty(\"KeyConnectorEnabled\");\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n\n this.authority = this.getResponseProperty(\"Authority\");\n this.clientId = this.getResponseProperty(\"ClientId\");\n this.clientSecret = this.getResponseProperty(\"ClientSecret\");\n this.metadataAddress = this.getResponseProperty(\"MetadataAddress\");\n this.redirectBehavior = this.getResponseProperty(\"RedirectBehavior\");\n this.getClaimsFromUserInfoEndpoint = this.getResponseProperty(\"GetClaimsFromUserInfoEndpoint\");\n this.additionalScopes = this.getResponseProperty(\"AdditionalScopes\");\n this.additionalUserIdClaimTypes = this.getResponseProperty(\"AdditionalUserIdClaimTypes\");\n this.additionalEmailClaimTypes = this.getResponseProperty(\"AdditionalEmailClaimTypes\");\n this.additionalNameClaimTypes = this.getResponseProperty(\"AdditionalNameClaimTypes\");\n this.acrValues = this.getResponseProperty(\"AcrValues\");\n this.expectedReturnAcrValue = this.getResponseProperty(\"ExpectedReturnAcrValue\");\n\n this.spNameIdFormat = this.getResponseProperty(\"SpNameIdFormat\");\n this.spOutboundSigningAlgorithm = this.getResponseProperty(\"SpOutboundSigningAlgorithm\");\n this.spSigningBehavior = this.getResponseProperty(\"SpSigningBehavior\");\n this.spMinIncomingSigningAlgorithm = this.getResponseProperty(\"SpMinIncomingSigningAlgorithm\");\n this.spWantAssertionsSigned = this.getResponseProperty(\"SpWantAssertionsSigned\");\n this.spValidateCertificates = this.getResponseProperty(\"SpValidateCertificates\");\n\n this.idpEntityId = this.getResponseProperty(\"IdpEntityId\");\n this.idpBindingType = this.getResponseProperty(\"IdpBindingType\");\n this.idpSingleSignOnServiceUrl = this.getResponseProperty(\"IdpSingleSignOnServiceUrl\");\n this.idpSingleLogoutServiceUrl = this.getResponseProperty(\"IdpSingleLogoutServiceUrl\");\n this.idpX509PublicCert = this.getResponseProperty(\"IdpX509PublicCert\");\n this.idpOutboundSigningAlgorithm = this.getResponseProperty(\"IdpOutboundSigningAlgorithm\");\n this.idpAllowUnsolicitedAuthnResponse = this.getResponseProperty(\n \"IdpAllowUnsolicitedAuthnResponse\"\n );\n this.idpDisableOutboundLogoutRequests = this.getResponseProperty(\n \"IdpDisableOutboundLogoutRequests\"\n );\n this.idpWantAuthnRequestsSigned = this.getResponseProperty(\"IdpWantAuthnRequestsSigned\");\n }\n}\n","import { AttachmentResponse } from \"../response/attachmentResponse\";\n\nexport class AttachmentData {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response?: AttachmentResponse) {\n if (response == null) {\n return;\n }\n this.id = response.id;\n this.url = response.url;\n this.fileName = response.fileName;\n this.key = response.key;\n this.size = response.size;\n this.sizeName = response.sizeName;\n }\n}\n","import { CardApi } from \"../api/cardApi\";\n\nexport class CardData {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data?: CardApi) {\n if (data == null) {\n return;\n }\n\n this.cardholderName = data.cardholderName;\n this.brand = data.brand;\n this.number = data.number;\n this.expMonth = data.expMonth;\n this.expYear = data.expYear;\n this.code = data.code;\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { CipherResponse } from \"../response/cipherResponse\";\n\nimport { AttachmentData } from \"./attachmentData\";\nimport { CardData } from \"./cardData\";\nimport { FieldData } from \"./fieldData\";\nimport { IdentityData } from \"./identityData\";\nimport { LoginData } from \"./loginData\";\nimport { PasswordHistoryData } from \"./passwordHistoryData\";\nimport { SecureNoteData } from \"./secureNoteData\";\n\nexport class CipherData {\n id: string;\n organizationId: string;\n folderId: string;\n userId: string;\n edit: boolean;\n viewPassword: boolean;\n organizationUseTotp: boolean;\n favorite: boolean;\n revisionDate: string;\n type: CipherType;\n sizeName: string;\n name: string;\n notes: string;\n login?: LoginData;\n secureNote?: SecureNoteData;\n card?: CardData;\n identity?: IdentityData;\n fields?: FieldData[];\n attachments?: AttachmentData[];\n passwordHistory?: PasswordHistoryData[];\n collectionIds?: string[];\n deletedDate: string;\n reprompt: CipherRepromptType;\n\n constructor(response?: CipherResponse, userId?: string, collectionIds?: string[]) {\n if (response == null) {\n return;\n }\n\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.folderId = response.folderId;\n this.userId = userId;\n this.edit = response.edit;\n this.viewPassword = response.viewPassword;\n this.organizationUseTotp = response.organizationUseTotp;\n this.favorite = response.favorite;\n this.revisionDate = response.revisionDate;\n this.type = response.type;\n this.name = response.name;\n this.notes = response.notes;\n this.collectionIds = collectionIds != null ? collectionIds : response.collectionIds;\n this.deletedDate = response.deletedDate;\n this.reprompt = response.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginData(response.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteData(response.secureNote);\n break;\n case CipherType.Card:\n this.card = new CardData(response.card);\n break;\n case CipherType.Identity:\n this.identity = new IdentityData(response.identity);\n break;\n default:\n break;\n }\n\n if (response.fields != null) {\n this.fields = response.fields.map((f) => new FieldData(f));\n }\n if (response.attachments != null) {\n this.attachments = response.attachments.map((a) => new AttachmentData(a));\n }\n if (response.passwordHistory != null) {\n this.passwordHistory = response.passwordHistory.map((ph) => new PasswordHistoryData(ph));\n }\n }\n}\n","import { CollectionDetailsResponse } from \"../response/collectionResponse\";\n\nexport class CollectionData {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n readOnly: boolean;\n\n constructor(response: CollectionDetailsResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.name = response.name;\n this.externalId = response.externalId;\n this.readOnly = response.readOnly;\n }\n}\n","import { EventType } from \"../../enums/eventType\";\n\nexport class EventData {\n type: EventType;\n cipherId: string;\n date: string;\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { FieldApi } from \"../api/fieldApi\";\n\nexport class FieldData {\n type: FieldType;\n name: string;\n value: string;\n linkedId: LinkedIdType;\n\n constructor(response?: FieldApi) {\n if (response == null) {\n return;\n }\n this.type = response.type;\n this.name = response.name;\n this.value = response.value;\n this.linkedId = response.linkedId;\n }\n}\n","import { FolderResponse } from \"../response/folderResponse\";\n\nexport class FolderData {\n id: string;\n userId: string;\n name: string;\n revisionDate: string;\n\n constructor(response: FolderResponse, userId: string) {\n this.userId = userId;\n this.name = response.name;\n this.id = response.id;\n this.revisionDate = response.revisionDate;\n }\n}\n","import { IdentityApi } from \"../api/identityApi\";\n\nexport class IdentityData {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data?: IdentityApi) {\n if (data == null) {\n return;\n }\n\n this.title = data.title;\n this.firstName = data.firstName;\n this.middleName = data.middleName;\n this.lastName = data.lastName;\n this.address1 = data.address1;\n this.address2 = data.address2;\n this.address3 = data.address3;\n this.city = data.city;\n this.state = data.state;\n this.postalCode = data.postalCode;\n this.country = data.country;\n this.company = data.company;\n this.email = data.email;\n this.phone = data.phone;\n this.ssn = data.ssn;\n this.username = data.username;\n this.passportNumber = data.passportNumber;\n this.licenseNumber = data.licenseNumber;\n }\n}\n","import { LoginApi } from \"../api/loginApi\";\n\nimport { LoginUriData } from \"./loginUriData\";\n\nexport class LoginData {\n uris: LoginUriData[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n autofillOnPageLoad: boolean;\n\n constructor(data?: LoginApi) {\n if (data == null) {\n return;\n }\n\n this.username = data.username;\n this.password = data.password;\n this.passwordRevisionDate = data.passwordRevisionDate;\n this.totp = data.totp;\n this.autofillOnPageLoad = data.autofillOnPageLoad;\n\n if (data.uris) {\n this.uris = data.uris.map((u) => new LoginUriData(u));\n }\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { LoginUriApi } from \"../api/loginUriApi\";\n\nexport class LoginUriData {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data?: LoginUriApi) {\n if (data == null) {\n return;\n }\n this.uri = data.uri;\n this.match = data.match;\n }\n}\n","import { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\nimport { ProfileOrganizationResponse } from \"../response/profileOrganizationResponse\";\n\nexport class OrganizationData {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useResetPassword: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n hasPublicAndPrivateKeys: boolean;\n providerId: string;\n providerName: string;\n isProviderUser: boolean;\n familySponsorshipFriendlyName: string;\n familySponsorshipAvailable: boolean;\n planProductType: ProductType;\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n\n constructor(response: ProfileOrganizationResponse) {\n this.id = response.id;\n this.name = response.name;\n this.status = response.status;\n this.type = response.type;\n this.enabled = response.enabled;\n this.usePolicies = response.usePolicies;\n this.useGroups = response.useGroups;\n this.useDirectory = response.useDirectory;\n this.useEvents = response.useEvents;\n this.useTotp = response.useTotp;\n this.use2fa = response.use2fa;\n this.useApi = response.useApi;\n this.useSso = response.useSso;\n this.useKeyConnector = response.useKeyConnector;\n this.useResetPassword = response.useResetPassword;\n this.selfHost = response.selfHost;\n this.usersGetPremium = response.usersGetPremium;\n this.seats = response.seats;\n this.maxCollections = response.maxCollections;\n this.maxStorageGb = response.maxStorageGb;\n this.ssoBound = response.ssoBound;\n this.identifier = response.identifier;\n this.permissions = response.permissions;\n this.resetPasswordEnrolled = response.resetPasswordEnrolled;\n this.userId = response.userId;\n this.hasPublicAndPrivateKeys = response.hasPublicAndPrivateKeys;\n this.providerId = response.providerId;\n this.providerName = response.providerName;\n this.familySponsorshipFriendlyName = response.familySponsorshipFriendlyName;\n this.familySponsorshipAvailable = response.familySponsorshipAvailable;\n this.planProductType = response.planProductType;\n this.keyConnectorEnabled = response.keyConnectorEnabled;\n this.keyConnectorUrl = response.keyConnectorUrl;\n }\n}\n","import { PasswordHistoryResponse } from \"../response/passwordHistoryResponse\";\n\nexport class PasswordHistoryData {\n password: string;\n lastUsedDate: string;\n\n constructor(response?: PasswordHistoryResponse) {\n if (response == null) {\n return;\n }\n\n this.password = response.password;\n this.lastUsedDate = response.lastUsedDate;\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\nimport { PolicyResponse } from \"../response/policyResponse\";\n\nexport class PolicyData {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: PolicyResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.type = response.type;\n this.data = response.data;\n this.enabled = response.enabled;\n }\n}\n","import { ProviderUserStatusType } from \"../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../enums/providerUserType\";\nimport { ProfileProviderResponse } from \"../response/profileProviderResponse\";\n\nexport class ProviderData {\n id: string;\n name: string;\n status: ProviderUserStatusType;\n type: ProviderUserType;\n enabled: boolean;\n userId: string;\n useEvents: boolean;\n\n constructor(response: ProfileProviderResponse) {\n this.id = response.id;\n this.name = response.name;\n this.status = response.status;\n this.type = response.type;\n this.enabled = response.enabled;\n this.userId = response.userId;\n this.useEvents = response.useEvents;\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNoteApi } from \"../api/secureNoteApi\";\n\nexport class SecureNoteData {\n type: SecureNoteType;\n\n constructor(data?: SecureNoteApi) {\n if (data == null) {\n return;\n }\n\n this.type = data.type;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendResponse } from \"../response/sendResponse\";\n\nimport { SendFileData } from \"./sendFileData\";\nimport { SendTextData } from \"./sendTextData\";\n\nexport class SendData {\n id: string;\n accessId: string;\n userId: string;\n type: SendType;\n name: string;\n notes: string;\n file: SendFileData;\n text: SendTextData;\n key: string;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: string;\n expirationDate: string;\n deletionDate: string;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(response?: SendResponse, userId?: string) {\n if (response == null) {\n return;\n }\n\n this.id = response.id;\n this.accessId = response.accessId;\n this.userId = userId;\n this.type = response.type;\n this.name = response.name;\n this.notes = response.notes;\n this.key = response.key;\n this.maxAccessCount = response.maxAccessCount;\n this.accessCount = response.accessCount;\n this.revisionDate = response.revisionDate;\n this.expirationDate = response.expirationDate;\n this.deletionDate = response.deletionDate;\n this.password = response.password;\n this.disabled = response.disable;\n this.hideEmail = response.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendTextData(response.text);\n break;\n case SendType.File:\n this.file = new SendFileData(response.file);\n break;\n default:\n break;\n }\n }\n}\n","import { SendFileApi } from \"../api/sendFileApi\";\n\nexport class SendFileData {\n id: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(data?: SendFileApi) {\n if (data == null) {\n return;\n }\n\n this.id = data.id;\n this.fileName = data.fileName;\n this.key = data.key;\n this.size = data.size;\n this.sizeName = data.sizeName;\n }\n}\n","import { SendTextApi } from \"../api/sendTextApi\";\n\nexport class SendTextData {\n text: string;\n hidden: boolean;\n\n constructor(data?: SendTextApi) {\n if (data == null) {\n return;\n }\n\n this.text = data.text;\n this.hidden = data.hidden;\n }\n}\n","import { AuthenticationStatus } from \"../../enums/authenticationStatus\";\nimport { KdfType } from \"../../enums/kdfType\";\nimport { UriMatchType } from \"../../enums/uriMatchType\";\nimport { CipherData } from \"../data/cipherData\";\nimport { CollectionData } from \"../data/collectionData\";\nimport { EventData } from \"../data/eventData\";\nimport { FolderData } from \"../data/folderData\";\nimport { OrganizationData } from \"../data/organizationData\";\nimport { PolicyData } from \"../data/policyData\";\nimport { ProviderData } from \"../data/providerData\";\nimport { SendData } from \"../data/sendData\";\nimport { CipherView } from \"../view/cipherView\";\nimport { CollectionView } from \"../view/collectionView\";\nimport { FolderView } from \"../view/folderView\";\nimport { SendView } from \"../view/sendView\";\n\nimport { EncString } from \"./encString\";\nimport { EnvironmentUrls } from \"./environmentUrls\";\nimport { GeneratedPasswordHistory } from \"./generatedPasswordHistory\";\nimport { Policy } from \"./policy\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class EncryptionPair {\n encrypted?: TEncrypted;\n decrypted?: TDecrypted;\n}\n\nexport class DataEncryptionPair {\n encrypted?: { [id: string]: TEncrypted };\n decrypted?: TDecrypted[];\n}\n\nexport class AccountData {\n ciphers?: DataEncryptionPair = new DataEncryptionPair<\n CipherData,\n CipherView\n >();\n folders?: DataEncryptionPair = new DataEncryptionPair<\n FolderData,\n FolderView\n >();\n localData?: any;\n sends?: DataEncryptionPair = new DataEncryptionPair();\n collections?: DataEncryptionPair = new DataEncryptionPair<\n CollectionData,\n CollectionView\n >();\n policies?: DataEncryptionPair = new DataEncryptionPair();\n passwordGenerationHistory?: EncryptionPair<\n GeneratedPasswordHistory[],\n GeneratedPasswordHistory[]\n > = new EncryptionPair();\n addEditCipherInfo?: any;\n eventCollection?: EventData[];\n organizations?: { [id: string]: OrganizationData };\n providers?: { [id: string]: ProviderData };\n}\n\nexport class AccountKeys {\n cryptoMasterKey?: SymmetricCryptoKey;\n cryptoMasterKeyAuto?: string;\n cryptoMasterKeyB64?: string;\n cryptoMasterKeyBiometric?: string;\n cryptoSymmetricKey?: EncryptionPair = new EncryptionPair<\n string,\n SymmetricCryptoKey\n >();\n organizationKeys?: EncryptionPair> = new EncryptionPair<\n any,\n Map\n >();\n providerKeys?: EncryptionPair> = new EncryptionPair<\n any,\n Map\n >();\n privateKey?: EncryptionPair = new EncryptionPair();\n legacyEtmKey?: SymmetricCryptoKey;\n publicKey?: ArrayBuffer;\n apiKeyClientSecret?: string;\n}\n\nexport class AccountProfile {\n apiKeyClientId?: string;\n authenticationStatus?: AuthenticationStatus;\n convertAccountToKeyConnector?: boolean;\n email?: string;\n emailVerified?: boolean;\n entityId?: string;\n entityType?: string;\n everBeenUnlocked?: boolean;\n forcePasswordReset?: boolean;\n hasPremiumPersonally?: boolean;\n lastSync?: string;\n userId?: string;\n usesKeyConnector?: boolean;\n keyHash?: string;\n kdfIterations?: number;\n kdfType?: KdfType;\n}\n\nexport class AccountSettings {\n autoConfirmFingerPrints?: boolean;\n autoFillOnPageLoadDefault?: boolean;\n biometricLocked?: boolean;\n biometricUnlock?: boolean;\n clearClipboard?: number;\n collapsedGroupings?: string[];\n defaultUriMatch?: UriMatchType;\n disableAddLoginNotification?: boolean;\n disableAutoBiometricsPrompt?: boolean;\n disableAutoTotpCopy?: boolean;\n disableBadgeCounter?: boolean;\n disableChangedPasswordNotification?: boolean;\n disableContextMenuItem?: boolean;\n disableGa?: boolean;\n dontShowCardsCurrentTab?: boolean;\n dontShowIdentitiesCurrentTab?: boolean;\n enableAlwaysOnTop?: boolean;\n enableAutoFillOnPageLoad?: boolean;\n enableBiometric?: boolean;\n enableFullWidth?: boolean;\n enableGravitars?: boolean;\n environmentUrls: EnvironmentUrls = new EnvironmentUrls();\n equivalentDomains?: any;\n minimizeOnCopyToClipboard?: boolean;\n neverDomains?: { [id: string]: any };\n passwordGenerationOptions?: any;\n usernameGenerationOptions?: any;\n generatorOptions?: any;\n pinProtected?: EncryptionPair = new EncryptionPair();\n protectedPin?: string;\n settings?: any; // TODO: Merge whatever is going on here into the AccountSettings model properly\n vaultTimeout?: number;\n vaultTimeoutAction?: string = \"lock\";\n}\n\nexport class AccountTokens {\n accessToken?: string;\n decodedToken?: any;\n refreshToken?: string;\n securityStamp?: string;\n}\n\nexport class Account {\n data?: AccountData = new AccountData();\n keys?: AccountKeys = new AccountKeys();\n profile?: AccountProfile = new AccountProfile();\n settings?: AccountSettings = new AccountSettings();\n tokens?: AccountTokens = new AccountTokens();\n\n constructor(init: Partial) {\n Object.assign(this, {\n data: {\n ...new AccountData(),\n ...init?.data,\n },\n keys: {\n ...new AccountKeys(),\n ...init?.keys,\n },\n profile: {\n ...new AccountProfile(),\n ...init?.profile,\n },\n settings: {\n ...new AccountSettings(),\n ...init?.settings,\n },\n tokens: {\n ...new AccountTokens(),\n ...init?.tokens,\n },\n });\n }\n}\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { Utils } from \"../../misc/utils\";\nimport { AttachmentData } from \"../data/attachmentData\";\nimport { AttachmentView } from \"../view/attachmentView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Attachment extends Domain {\n id: string;\n url: string;\n size: string;\n sizeName: string;\n key: EncString;\n fileName: EncString;\n\n constructor(obj?: AttachmentData, alreadyEncrypted = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.size = obj.size;\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n url: null,\n sizeName: null,\n fileName: null,\n key: null,\n },\n alreadyEncrypted,\n [\"id\", \"url\", \"sizeName\"]\n );\n }\n\n async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(\n new AttachmentView(this),\n {\n fileName: null,\n },\n orgId,\n encKey\n );\n\n if (this.key != null) {\n let cryptoService: CryptoService;\n const containerService = (Utils.global as any).bitwardenContainerService;\n if (containerService) {\n cryptoService = containerService.getCryptoService();\n } else {\n throw new Error(\"global bitwardenContainerService not initialized.\");\n }\n\n try {\n const orgKey = await cryptoService.getOrgKey(orgId);\n const decValue = await cryptoService.decryptToBytes(this.key, orgKey ?? encKey);\n view.key = new SymmetricCryptoKey(decValue);\n } catch (e) {\n // TODO: error?\n }\n }\n\n return view;\n }\n\n toAttachmentData(): AttachmentData {\n const a = new AttachmentData();\n a.size = this.size;\n this.buildDataModel(\n this,\n a,\n {\n id: null,\n url: null,\n sizeName: null,\n fileName: null,\n key: null,\n },\n [\"id\", \"url\", \"sizeName\"]\n );\n return a;\n }\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\nimport { Utils } from \"../../misc/utils\";\n\nexport class AuthResult {\n captchaSiteKey = \"\";\n resetMasterPassword = false;\n forcePasswordReset = false;\n twoFactorProviders: Map = null;\n\n get requiresCaptcha() {\n return !Utils.isNullOrWhitespace(this.captchaSiteKey);\n }\n\n get requiresTwoFactor() {\n return this.twoFactorProviders != null;\n }\n}\n","import { CardData } from \"../data/cardData\";\nimport { CardView } from \"../view/cardView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Card extends Domain {\n cardholderName: EncString;\n brand: EncString;\n number: EncString;\n expMonth: EncString;\n expYear: EncString;\n code: EncString;\n\n constructor(obj?: CardData, alreadyEncrypted = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n },\n alreadyEncrypted,\n []\n );\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new CardView(),\n {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n },\n orgId,\n encKey\n );\n }\n\n toCardData(): CardData {\n const c = new CardData();\n this.buildDataModel(this, c, {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n });\n return c;\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { CipherData } from \"../data/cipherData\";\nimport { CipherView } from \"../view/cipherView\";\n\nimport { Attachment } from \"./attachment\";\nimport { Card } from \"./card\";\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { Field } from \"./field\";\nimport { Identity } from \"./identity\";\nimport { Login } from \"./login\";\nimport { Password } from \"./password\";\nimport { SecureNote } from \"./secureNote\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Cipher extends Domain {\n id: string;\n organizationId: string;\n folderId: string;\n name: EncString;\n notes: EncString;\n type: CipherType;\n favorite: boolean;\n organizationUseTotp: boolean;\n edit: boolean;\n viewPassword: boolean;\n revisionDate: Date;\n localData: any;\n login: Login;\n identity: Identity;\n card: Card;\n secureNote: SecureNote;\n attachments: Attachment[];\n fields: Field[];\n passwordHistory: Password[];\n collectionIds: string[];\n deletedDate: Date;\n reprompt: CipherRepromptType;\n\n constructor(obj?: CipherData, alreadyEncrypted = false, localData: any = null) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n userId: null,\n organizationId: null,\n folderId: null,\n name: null,\n notes: null,\n },\n alreadyEncrypted,\n [\"id\", \"userId\", \"organizationId\", \"folderId\"]\n );\n\n this.type = obj.type;\n this.favorite = obj.favorite;\n this.organizationUseTotp = obj.organizationUseTotp;\n this.edit = obj.edit;\n if (obj.viewPassword != null) {\n this.viewPassword = obj.viewPassword;\n } else {\n this.viewPassword = true; // Default for already synced Ciphers without viewPassword\n }\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n this.collectionIds = obj.collectionIds;\n this.localData = localData;\n this.deletedDate = obj.deletedDate != null ? new Date(obj.deletedDate) : null;\n this.reprompt = obj.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new Login(obj.login, alreadyEncrypted);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNote(obj.secureNote);\n break;\n case CipherType.Card:\n this.card = new Card(obj.card, alreadyEncrypted);\n break;\n case CipherType.Identity:\n this.identity = new Identity(obj.identity, alreadyEncrypted);\n break;\n default:\n break;\n }\n\n if (obj.attachments != null) {\n this.attachments = obj.attachments.map((a) => new Attachment(a, alreadyEncrypted));\n } else {\n this.attachments = null;\n }\n\n if (obj.fields != null) {\n this.fields = obj.fields.map((f) => new Field(f, alreadyEncrypted));\n } else {\n this.fields = null;\n }\n\n if (obj.passwordHistory != null) {\n this.passwordHistory = obj.passwordHistory.map((ph) => new Password(ph, alreadyEncrypted));\n } else {\n this.passwordHistory = null;\n }\n }\n\n async decrypt(encKey?: SymmetricCryptoKey): Promise {\n const model = new CipherView(this);\n\n await this.decryptObj(\n model,\n {\n name: null,\n notes: null,\n },\n this.organizationId,\n encKey\n );\n\n switch (this.type) {\n case CipherType.Login:\n model.login = await this.login.decrypt(this.organizationId, encKey);\n break;\n case CipherType.SecureNote:\n model.secureNote = await this.secureNote.decrypt(this.organizationId, encKey);\n break;\n case CipherType.Card:\n model.card = await this.card.decrypt(this.organizationId, encKey);\n break;\n case CipherType.Identity:\n model.identity = await this.identity.decrypt(this.organizationId, encKey);\n break;\n default:\n break;\n }\n\n const orgId = this.organizationId;\n\n if (this.attachments != null && this.attachments.length > 0) {\n const attachments: any[] = [];\n await this.attachments.reduce((promise, attachment) => {\n return promise\n .then(() => {\n return attachment.decrypt(orgId, encKey);\n })\n .then((decAttachment) => {\n attachments.push(decAttachment);\n });\n }, Promise.resolve());\n model.attachments = attachments;\n }\n\n if (this.fields != null && this.fields.length > 0) {\n const fields: any[] = [];\n await this.fields.reduce((promise, field) => {\n return promise\n .then(() => {\n return field.decrypt(orgId, encKey);\n })\n .then((decField) => {\n fields.push(decField);\n });\n }, Promise.resolve());\n model.fields = fields;\n }\n\n if (this.passwordHistory != null && this.passwordHistory.length > 0) {\n const passwordHistory: any[] = [];\n await this.passwordHistory.reduce((promise, ph) => {\n return promise\n .then(() => {\n return ph.decrypt(orgId, encKey);\n })\n .then((decPh) => {\n passwordHistory.push(decPh);\n });\n }, Promise.resolve());\n model.passwordHistory = passwordHistory;\n }\n\n return model;\n }\n\n toCipherData(userId: string): CipherData {\n const c = new CipherData();\n c.id = this.id;\n c.organizationId = this.organizationId;\n c.folderId = this.folderId;\n c.userId = this.organizationId != null ? userId : null;\n c.edit = this.edit;\n c.viewPassword = this.viewPassword;\n c.organizationUseTotp = this.organizationUseTotp;\n c.favorite = this.favorite;\n c.revisionDate = this.revisionDate != null ? this.revisionDate.toISOString() : null;\n c.type = this.type;\n c.collectionIds = this.collectionIds;\n c.deletedDate = this.deletedDate != null ? this.deletedDate.toISOString() : null;\n c.reprompt = this.reprompt;\n\n this.buildDataModel(this, c, {\n name: null,\n notes: null,\n });\n\n switch (c.type) {\n case CipherType.Login:\n c.login = this.login.toLoginData();\n break;\n case CipherType.SecureNote:\n c.secureNote = this.secureNote.toSecureNoteData();\n break;\n case CipherType.Card:\n c.card = this.card.toCardData();\n break;\n case CipherType.Identity:\n c.identity = this.identity.toIdentityData();\n break;\n default:\n break;\n }\n\n if (this.fields != null) {\n c.fields = this.fields.map((f) => f.toFieldData());\n }\n if (this.attachments != null) {\n c.attachments = this.attachments.map((a) => a.toAttachmentData());\n }\n if (this.passwordHistory != null) {\n c.passwordHistory = this.passwordHistory.map((ph) => ph.toPasswordHistoryData());\n }\n return c;\n }\n}\n","import { CollectionData } from \"../data/collectionData\";\nimport { CollectionView } from \"../view/collectionView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\n\nexport class Collection extends Domain {\n id: string;\n organizationId: string;\n name: EncString;\n externalId: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(obj?: CollectionData, alreadyEncrypted = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n organizationId: null,\n name: null,\n externalId: null,\n readOnly: null,\n hidePasswords: null,\n },\n alreadyEncrypted,\n [\"id\", \"organizationId\", \"externalId\", \"readOnly\", \"hidePasswords\"]\n );\n }\n\n decrypt(): Promise {\n return this.decryptObj(\n new CollectionView(this),\n {\n name: null,\n },\n this.organizationId\n );\n }\n}\n","export class DecryptParameters {\n encKey: T;\n data: T;\n iv: T;\n macKey: T;\n mac: T;\n macData: T;\n}\n","import { View } from \"../view/view\";\n\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport default class Domain {\n protected buildDomainModel(\n domain: D,\n dataObj: any,\n map: any,\n alreadyEncrypted: boolean,\n notEncList: any[] = []\n ) {\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n const objProp = dataObj[map[prop] || prop];\n if (alreadyEncrypted === true || notEncList.indexOf(prop) > -1) {\n (domain as any)[prop] = objProp ? objProp : null;\n } else {\n (domain as any)[prop] = objProp ? new EncString(objProp) : null;\n }\n }\n }\n protected buildDataModel(\n domain: D,\n dataObj: any,\n map: any,\n notEncStringList: any[] = []\n ) {\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n const objProp = (domain as any)[map[prop] || prop];\n if (notEncStringList.indexOf(prop) > -1) {\n (dataObj as any)[prop] = objProp != null ? objProp : null;\n } else {\n (dataObj as any)[prop] = objProp != null ? (objProp as EncString).encryptedString : null;\n }\n }\n }\n\n protected async decryptObj(\n viewModel: T,\n map: any,\n orgId: string,\n key: SymmetricCryptoKey = null\n ): Promise {\n const promises = [];\n const self: any = this;\n\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n (function (theProp) {\n const p = Promise.resolve()\n .then(() => {\n const mapProp = map[theProp] || theProp;\n if (self[mapProp]) {\n return self[mapProp].decrypt(orgId, key);\n }\n return null;\n })\n .then((val: any) => {\n (viewModel as any)[theProp] = val;\n });\n promises.push(p);\n })(prop);\n }\n\n await Promise.all(promises);\n return viewModel;\n }\n}\n","export class EncArrayBuffer {\n constructor(public buffer: ArrayBuffer) {}\n}\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { EncryptionType } from \"../../enums/encryptionType\";\nimport { Utils } from \"../../misc/utils\";\n\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class EncString {\n encryptedString?: string;\n encryptionType?: EncryptionType;\n decryptedValue?: string;\n data?: string;\n iv?: string;\n mac?: string;\n\n constructor(\n encryptedStringOrType: string | EncryptionType,\n data?: string,\n iv?: string,\n mac?: string\n ) {\n if (data != null) {\n // data and header\n const encType = encryptedStringOrType as EncryptionType;\n\n if (iv != null) {\n this.encryptedString = encType + \".\" + iv + \"|\" + data;\n } else {\n this.encryptedString = encType + \".\" + data;\n }\n\n // mac\n if (mac != null) {\n this.encryptedString += \"|\" + mac;\n }\n\n this.encryptionType = encType;\n this.data = data;\n this.iv = iv;\n this.mac = mac;\n\n return;\n }\n\n this.encryptedString = encryptedStringOrType as string;\n if (!this.encryptedString) {\n return;\n }\n\n const headerPieces = this.encryptedString.split(\".\");\n let encPieces: string[] = null;\n\n if (headerPieces.length === 2) {\n try {\n this.encryptionType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split(\"|\");\n } catch (e) {\n return;\n }\n } else {\n encPieces = this.encryptedString.split(\"|\");\n this.encryptionType =\n encPieces.length === 3\n ? EncryptionType.AesCbc128_HmacSha256_B64\n : EncryptionType.AesCbc256_B64;\n }\n\n switch (this.encryptionType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64:\n if (encPieces.length !== 3) {\n return;\n }\n\n this.iv = encPieces[0];\n this.data = encPieces[1];\n this.mac = encPieces[2];\n break;\n case EncryptionType.AesCbc256_B64:\n if (encPieces.length !== 2) {\n return;\n }\n\n this.iv = encPieces[0];\n this.data = encPieces[1];\n break;\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_B64:\n if (encPieces.length !== 1) {\n return;\n }\n\n this.data = encPieces[0];\n break;\n default:\n return;\n }\n }\n\n async decrypt(orgId: string, key: SymmetricCryptoKey = null): Promise {\n if (this.decryptedValue != null) {\n return this.decryptedValue;\n }\n\n let cryptoService: CryptoService;\n const containerService = (Utils.global as any).bitwardenContainerService;\n if (containerService) {\n cryptoService = containerService.getCryptoService();\n } else {\n throw new Error(\"global bitwardenContainerService not initialized.\");\n }\n\n try {\n if (key == null) {\n key = await cryptoService.getOrgKey(orgId);\n }\n this.decryptedValue = await cryptoService.decryptToUtf8(this, key);\n } catch (e) {\n this.decryptedValue = \"[error: cannot decrypt]\";\n }\n return this.decryptedValue;\n }\n}\n","import { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class EncryptedObject {\n iv: ArrayBuffer;\n data: ArrayBuffer;\n mac: ArrayBuffer;\n key: SymmetricCryptoKey;\n}\n","export class EnvironmentUrls {\n base: string = null;\n api: string = null;\n identity: string = null;\n icons: string = null;\n notifications: string = null;\n events: string = null;\n webVault: string = null;\n keyConnector: string = null;\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { FieldData } from \"../data/fieldData\";\nimport { FieldView } from \"../view/fieldView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Field extends Domain {\n name: EncString;\n value: EncString;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(obj?: FieldData, alreadyEncrypted = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.type = obj.type;\n this.linkedId = obj.linkedId;\n this.buildDomainModel(\n this,\n obj,\n {\n name: null,\n value: null,\n },\n alreadyEncrypted,\n []\n );\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new FieldView(this),\n {\n name: null,\n value: null,\n },\n orgId,\n encKey\n );\n }\n\n toFieldData(): FieldData {\n const f = new FieldData();\n this.buildDataModel(\n this,\n f,\n {\n name: null,\n value: null,\n type: null,\n linkedId: null,\n },\n [\"type\", \"linkedId\"]\n );\n return f;\n }\n}\n","import { FolderData } from \"../data/folderData\";\nimport { FolderView } from \"../view/folderView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\n\nexport class Folder extends Domain {\n id: string;\n name: EncString;\n revisionDate: Date;\n\n constructor(obj?: FolderData, alreadyEncrypted = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n name: null,\n },\n alreadyEncrypted,\n [\"id\"]\n );\n\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n }\n\n decrypt(): Promise {\n return this.decryptObj(\n new FolderView(this),\n {\n name: null,\n },\n null\n );\n }\n}\n","export class GeneratedPasswordHistory {\n password: string;\n date: number;\n\n constructor(password: string, date: number) {\n this.password = password;\n this.date = date;\n }\n}\n","import { StateVersion } from \"../../enums/stateVersion\";\nimport { ThemeType } from \"../../enums/themeType\";\n\nimport { EnvironmentUrls } from \"./environmentUrls\";\nimport { WindowState } from \"./windowState\";\n\nexport class GlobalState {\n enableAlwaysOnTop?: boolean;\n installedVersion?: string;\n locale?: string = \"en\";\n organizationInvitation?: any;\n ssoCodeVerifier?: string;\n ssoOrganizationIdentifier?: string;\n ssoState?: string;\n rememberedEmail?: string;\n theme?: ThemeType = ThemeType.System;\n window?: WindowState = new WindowState();\n twoFactorToken?: string;\n disableFavicon?: boolean;\n biometricAwaitingAcceptance?: boolean;\n biometricFingerprintValidated?: boolean;\n vaultTimeout?: number;\n vaultTimeoutAction?: string;\n loginRedirect?: any;\n mainWindowSize?: number;\n enableBiometrics?: boolean;\n biometricText?: string;\n noAutoPromptBiometrics?: boolean;\n noAutoPromptBiometricsText?: string;\n stateVersion: StateVersion = StateVersion.One;\n environmentUrls: EnvironmentUrls = new EnvironmentUrls();\n enableTray?: boolean;\n enableMinimizeToTray?: boolean;\n enableCloseToTray?: boolean;\n enableStartToTray?: boolean;\n openAtLogin?: boolean;\n alwaysShowDock?: boolean;\n enableBrowserIntegration?: boolean;\n enableBrowserIntegrationFingerprint?: boolean;\n}\n","import { IdentityData } from \"../data/identityData\";\nimport { IdentityView } from \"../view/identityView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Identity extends Domain {\n title: EncString;\n firstName: EncString;\n middleName: EncString;\n lastName: EncString;\n address1: EncString;\n address2: EncString;\n address3: EncString;\n city: EncString;\n state: EncString;\n postalCode: EncString;\n country: EncString;\n company: EncString;\n email: EncString;\n phone: EncString;\n ssn: EncString;\n username: EncString;\n passportNumber: EncString;\n licenseNumber: EncString;\n\n constructor(obj?: IdentityData, alreadyEncrypted = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n },\n alreadyEncrypted,\n []\n );\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new IdentityView(),\n {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n },\n orgId,\n encKey\n );\n }\n\n toIdentityData(): IdentityData {\n const i = new IdentityData();\n this.buildDataModel(this, i, {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n });\n return i;\n }\n}\n","import { CipherView } from \"../view/cipherView\";\nimport { CollectionView } from \"../view/collectionView\";\nimport { FolderView } from \"../view/folderView\";\n\nexport class ImportResult {\n success = false;\n missingPassword = false;\n errorMessage: string;\n ciphers: CipherView[] = [];\n folders: FolderView[] = [];\n folderRelationships: [number, number][] = [];\n collections: CollectionView[] = [];\n collectionRelationships: [number, number][] = [];\n}\n","import { AuthenticationType } from \"../../enums/authenticationType\";\nimport { TokenRequestTwoFactor } from \"../request/identityToken/tokenRequestTwoFactor\";\n\nexport class PasswordLogInCredentials {\n readonly type = AuthenticationType.Password;\n\n constructor(\n public email: string,\n public masterPassword: string,\n public captchaToken?: string,\n public twoFactor?: TokenRequestTwoFactor\n ) {}\n}\n\nexport class SsoLogInCredentials {\n readonly type = AuthenticationType.Sso;\n\n constructor(\n public code: string,\n public codeVerifier: string,\n public redirectUrl: string,\n public orgId: string,\n public twoFactor?: TokenRequestTwoFactor\n ) {}\n}\n\nexport class ApiLogInCredentials {\n readonly type = AuthenticationType.Api;\n\n constructor(public clientId: string, public clientSecret: string) {}\n}\n","import { LoginData } from \"../data/loginData\";\nimport { LoginView } from \"../view/loginView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { LoginUri } from \"./loginUri\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Login extends Domain {\n uris: LoginUri[];\n username: EncString;\n password: EncString;\n passwordRevisionDate?: Date;\n totp: EncString;\n autofillOnPageLoad: boolean;\n\n constructor(obj?: LoginData, alreadyEncrypted = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.passwordRevisionDate =\n obj.passwordRevisionDate != null ? new Date(obj.passwordRevisionDate) : null;\n this.autofillOnPageLoad = obj.autofillOnPageLoad;\n this.buildDomainModel(\n this,\n obj,\n {\n username: null,\n password: null,\n totp: null,\n },\n alreadyEncrypted,\n []\n );\n\n if (obj.uris) {\n this.uris = [];\n obj.uris.forEach((u) => {\n this.uris.push(new LoginUri(u, alreadyEncrypted));\n });\n }\n }\n\n async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(\n new LoginView(this),\n {\n username: null,\n password: null,\n totp: null,\n },\n orgId,\n encKey\n );\n\n if (this.uris != null) {\n view.uris = [];\n for (let i = 0; i < this.uris.length; i++) {\n const uri = await this.uris[i].decrypt(orgId, encKey);\n view.uris.push(uri);\n }\n }\n\n return view;\n }\n\n toLoginData(): LoginData {\n const l = new LoginData();\n l.passwordRevisionDate =\n this.passwordRevisionDate != null ? this.passwordRevisionDate.toISOString() : null;\n l.autofillOnPageLoad = this.autofillOnPageLoad;\n this.buildDataModel(this, l, {\n username: null,\n password: null,\n totp: null,\n });\n\n if (this.uris != null && this.uris.length > 0) {\n l.uris = [];\n this.uris.forEach((u) => {\n l.uris.push(u.toLoginUriData());\n });\n }\n\n return l;\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { LoginUriData } from \"../data/loginUriData\";\nimport { LoginUriView } from \"../view/loginUriView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class LoginUri extends Domain {\n uri: EncString;\n match: UriMatchType;\n\n constructor(obj?: LoginUriData, alreadyEncrypted = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.match = obj.match;\n this.buildDomainModel(\n this,\n obj,\n {\n uri: null,\n },\n alreadyEncrypted,\n []\n );\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new LoginUriView(this),\n {\n uri: null,\n },\n orgId,\n encKey\n );\n }\n\n toLoginUriData(): LoginUriData {\n const u = new LoginUriData();\n this.buildDataModel(\n this,\n u,\n {\n uri: null,\n },\n [\"match\"]\n );\n return u;\n }\n}\n","import Domain from \"./domainBase\";\n\nexport class MasterPasswordPolicyOptions extends Domain {\n minComplexity = 0;\n minLength = 0;\n requireUpper = false;\n requireLower = false;\n requireNumbers = false;\n requireSpecial = false;\n}\n","import { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\nimport { OrganizationData } from \"../data/organizationData\";\n\nexport class Organization {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useResetPassword: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n hasPublicAndPrivateKeys: boolean;\n providerId: string;\n providerName: string;\n isProviderUser: boolean;\n familySponsorshipFriendlyName: string;\n familySponsorshipAvailable: boolean;\n planProductType: ProductType;\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n\n constructor(obj?: OrganizationData) {\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.name = obj.name;\n this.status = obj.status;\n this.type = obj.type;\n this.enabled = obj.enabled;\n this.usePolicies = obj.usePolicies;\n this.useGroups = obj.useGroups;\n this.useDirectory = obj.useDirectory;\n this.useEvents = obj.useEvents;\n this.useTotp = obj.useTotp;\n this.use2fa = obj.use2fa;\n this.useApi = obj.useApi;\n this.useSso = obj.useSso;\n this.useKeyConnector = obj.useKeyConnector;\n this.useResetPassword = obj.useResetPassword;\n this.selfHost = obj.selfHost;\n this.usersGetPremium = obj.usersGetPremium;\n this.seats = obj.seats;\n this.maxCollections = obj.maxCollections;\n this.maxStorageGb = obj.maxStorageGb;\n this.ssoBound = obj.ssoBound;\n this.identifier = obj.identifier;\n this.permissions = obj.permissions;\n this.resetPasswordEnrolled = obj.resetPasswordEnrolled;\n this.userId = obj.userId;\n this.hasPublicAndPrivateKeys = obj.hasPublicAndPrivateKeys;\n this.providerId = obj.providerId;\n this.providerName = obj.providerName;\n this.isProviderUser = obj.isProviderUser;\n this.familySponsorshipFriendlyName = obj.familySponsorshipFriendlyName;\n this.familySponsorshipAvailable = obj.familySponsorshipAvailable;\n this.planProductType = obj.planProductType;\n this.keyConnectorEnabled = obj.keyConnectorEnabled;\n this.keyConnectorUrl = obj.keyConnectorUrl;\n }\n\n get canAccess() {\n if (this.type === OrganizationUserType.Owner) {\n return true;\n }\n return this.enabled && this.status === OrganizationUserStatusType.Confirmed;\n }\n\n get isManager() {\n return (\n this.type === OrganizationUserType.Manager ||\n this.type === OrganizationUserType.Owner ||\n this.type === OrganizationUserType.Admin\n );\n }\n\n get isAdmin() {\n return this.type === OrganizationUserType.Owner || this.type === OrganizationUserType.Admin;\n }\n\n get isOwner() {\n return this.type === OrganizationUserType.Owner || this.isProviderUser;\n }\n\n get canAccessEventLogs() {\n return this.isAdmin || this.permissions.accessEventLogs;\n }\n\n get canAccessImportExport() {\n return this.isAdmin || this.permissions.accessImportExport;\n }\n\n get canAccessReports() {\n return this.isAdmin || this.permissions.accessReports;\n }\n\n get canCreateNewCollections() {\n return (\n this.isManager ||\n (this.permissions.createNewCollections ?? this.permissions.manageAllCollections)\n );\n }\n\n get canEditAnyCollection() {\n return (\n this.isAdmin || (this.permissions.editAnyCollection ?? this.permissions.manageAllCollections)\n );\n }\n\n get canDeleteAnyCollection() {\n return (\n this.isAdmin ||\n (this.permissions.deleteAnyCollection ?? this.permissions.manageAllCollections)\n );\n }\n\n get canViewAllCollections() {\n return this.canCreateNewCollections || this.canEditAnyCollection || this.canDeleteAnyCollection;\n }\n\n get canEditAssignedCollections() {\n return (\n this.isManager ||\n (this.permissions.editAssignedCollections ?? this.permissions.manageAssignedCollections)\n );\n }\n\n get canDeleteAssignedCollections() {\n return (\n this.isManager ||\n (this.permissions.deleteAssignedCollections ?? this.permissions.manageAssignedCollections)\n );\n }\n\n get canViewAssignedCollections() {\n return this.canDeleteAssignedCollections || this.canEditAssignedCollections;\n }\n\n get canManageGroups() {\n return this.isAdmin || this.permissions.manageGroups;\n }\n\n get canManageSso() {\n return this.isAdmin || this.permissions.manageSso;\n }\n\n get canManagePolicies() {\n return this.isAdmin || this.permissions.managePolicies;\n }\n\n get canManageUsers() {\n return this.isAdmin || this.permissions.manageUsers;\n }\n\n get canManageUsersPassword() {\n return this.isAdmin || this.permissions.manageResetPassword;\n }\n\n get isExemptFromPolicies() {\n return this.canManagePolicies;\n }\n}\n","import { PasswordHistoryData } from \"../data/passwordHistoryData\";\nimport { PasswordHistoryView } from \"../view/passwordHistoryView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Password extends Domain {\n password: EncString;\n lastUsedDate: Date;\n\n constructor(obj?: PasswordHistoryData, alreadyEncrypted = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n password: null,\n },\n alreadyEncrypted\n );\n this.lastUsedDate = new Date(obj.lastUsedDate);\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new PasswordHistoryView(this),\n {\n password: null,\n },\n orgId,\n encKey\n );\n }\n\n toPasswordHistoryData(): PasswordHistoryData {\n const ph = new PasswordHistoryData();\n ph.lastUsedDate = this.lastUsedDate.toISOString();\n this.buildDataModel(this, ph, {\n password: null,\n });\n return ph;\n }\n}\n","import Domain from \"./domainBase\";\n\nexport class PasswordGeneratorPolicyOptions extends Domain {\n defaultType = \"\";\n minLength = 0;\n useUppercase = false;\n useLowercase = false;\n useNumbers = false;\n numberCount = 0;\n useSpecial = false;\n specialCount = 0;\n minNumberWords = 0;\n capitalize = false;\n includeNumber = false;\n\n inEffect() {\n return (\n this.defaultType !== \"\" ||\n this.minLength > 0 ||\n this.numberCount > 0 ||\n this.specialCount > 0 ||\n this.useUppercase ||\n this.useLowercase ||\n this.useNumbers ||\n this.useSpecial ||\n this.minNumberWords > 0 ||\n this.capitalize ||\n this.includeNumber\n );\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\nimport { PolicyData } from \"../data/policyData\";\n\nimport Domain from \"./domainBase\";\n\nexport class Policy extends Domain {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(obj?: PolicyData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.organizationId = obj.organizationId;\n this.type = obj.type;\n this.data = obj.data;\n this.enabled = obj.enabled;\n }\n}\n","import { ProviderUserStatusType } from \"../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../enums/providerUserType\";\nimport { ProviderData } from \"../data/providerData\";\n\nexport class Provider {\n id: string;\n name: string;\n status: ProviderUserStatusType;\n type: ProviderUserType;\n enabled: boolean;\n userId: string;\n useEvents: boolean;\n\n constructor(obj?: ProviderData) {\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.name = obj.name;\n this.status = obj.status;\n this.type = obj.type;\n this.enabled = obj.enabled;\n this.userId = obj.userId;\n this.useEvents = obj.useEvents;\n }\n\n get canAccess() {\n if (this.isProviderAdmin) {\n return true;\n }\n return this.enabled && this.status === ProviderUserStatusType.Confirmed;\n }\n\n get canCreateOrganizations() {\n return this.enabled && this.isProviderAdmin;\n }\n\n get canManageUsers() {\n return this.isProviderAdmin;\n }\n\n get canAccessEventLogs() {\n return this.isProviderAdmin;\n }\n\n get isProviderAdmin() {\n return this.type === ProviderUserType.ProviderAdmin;\n }\n}\n","import Domain from \"./domainBase\";\n\nexport class ResetPasswordPolicyOptions extends Domain {\n autoEnrollEnabled = false;\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNoteData } from \"../data/secureNoteData\";\nimport { SecureNoteView } from \"../view/secureNoteView\";\n\nimport Domain from \"./domainBase\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class SecureNote extends Domain {\n type: SecureNoteType;\n\n constructor(obj?: SecureNoteData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.type = obj.type;\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return Promise.resolve(new SecureNoteView(this));\n }\n\n toSecureNoteData(): SecureNoteData {\n const n = new SecureNoteData();\n n.type = this.type;\n return n;\n }\n}\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { SendType } from \"../../enums/sendType\";\nimport { Utils } from \"../../misc/utils\";\nimport { SendData } from \"../data/sendData\";\nimport { SendView } from \"../view/sendView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SendFile } from \"./sendFile\";\nimport { SendText } from \"./sendText\";\n\nexport class Send extends Domain {\n id: string;\n accessId: string;\n userId: string;\n type: SendType;\n name: EncString;\n notes: EncString;\n file: SendFile;\n text: SendText;\n key: EncString;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: Date;\n expirationDate: Date;\n deletionDate: Date;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(obj?: SendData, alreadyEncrypted = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n accessId: null,\n userId: null,\n name: null,\n notes: null,\n key: null,\n },\n alreadyEncrypted,\n [\"id\", \"accessId\", \"userId\"]\n );\n\n this.type = obj.type;\n this.maxAccessCount = obj.maxAccessCount;\n this.accessCount = obj.accessCount;\n this.password = obj.password;\n this.disabled = obj.disabled;\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n this.deletionDate = obj.deletionDate != null ? new Date(obj.deletionDate) : null;\n this.expirationDate = obj.expirationDate != null ? new Date(obj.expirationDate) : null;\n this.hideEmail = obj.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendText(obj.text, alreadyEncrypted);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file, alreadyEncrypted);\n break;\n default:\n break;\n }\n }\n\n async decrypt(): Promise {\n const model = new SendView(this);\n\n let cryptoService: CryptoService;\n const containerService = (Utils.global as any).bitwardenContainerService;\n if (containerService) {\n cryptoService = containerService.getCryptoService();\n } else {\n throw new Error(\"global bitwardenContainerService not initialized.\");\n }\n\n try {\n model.key = await cryptoService.decryptToBytes(this.key, null);\n model.cryptoKey = await cryptoService.makeSendKey(model.key);\n } catch (e) {\n // TODO: error?\n }\n\n await this.decryptObj(\n model,\n {\n name: null,\n notes: null,\n },\n null,\n model.cryptoKey\n );\n\n switch (this.type) {\n case SendType.File:\n model.file = await this.file.decrypt(model.cryptoKey);\n break;\n case SendType.Text:\n model.text = await this.text.decrypt(model.cryptoKey);\n break;\n default:\n break;\n }\n\n return model;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendAccessResponse } from \"../response/sendAccessResponse\";\nimport { SendAccessView } from \"../view/sendAccessView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SendFile } from \"./sendFile\";\nimport { SendText } from \"./sendText\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class SendAccess extends Domain {\n id: string;\n type: SendType;\n name: EncString;\n file: SendFile;\n text: SendText;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(obj?: SendAccessResponse, alreadyEncrypted = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n name: null,\n expirationDate: null,\n creatorIdentifier: null,\n },\n alreadyEncrypted,\n [\"id\", \"expirationDate\", \"creatorIdentifier\"]\n );\n\n this.type = obj.type;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendText(obj.text, alreadyEncrypted);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file, alreadyEncrypted);\n break;\n default:\n break;\n }\n }\n\n async decrypt(key: SymmetricCryptoKey): Promise {\n const model = new SendAccessView(this);\n\n await this.decryptObj(\n model,\n {\n name: null,\n },\n null,\n key\n );\n\n switch (this.type) {\n case SendType.File:\n model.file = await this.file.decrypt(key);\n break;\n case SendType.Text:\n model.text = await this.text.decrypt(key);\n break;\n default:\n break;\n }\n\n return model;\n }\n}\n","import { SendFileData } from \"../data/sendFileData\";\nimport { SendFileView } from \"../view/sendFileView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class SendFile extends Domain {\n id: string;\n size: string;\n sizeName: string;\n fileName: EncString;\n\n constructor(obj?: SendFileData, alreadyEncrypted = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.size = obj.size;\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n sizeName: null,\n fileName: null,\n },\n alreadyEncrypted,\n [\"id\", \"sizeName\"]\n );\n }\n\n async decrypt(key: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(\n new SendFileView(this),\n {\n fileName: null,\n },\n null,\n key\n );\n return view;\n }\n}\n","import { SendTextData } from \"../data/sendTextData\";\nimport { SendTextView } from \"../view/sendTextView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class SendText extends Domain {\n text: EncString;\n hidden: boolean;\n\n constructor(obj?: SendTextData, alreadyEncrypted = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.hidden = obj.hidden;\n this.buildDomainModel(\n this,\n obj,\n {\n text: null,\n },\n alreadyEncrypted,\n []\n );\n }\n\n decrypt(key: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new SendTextView(this),\n {\n text: null,\n },\n null,\n key\n );\n }\n}\n","import { CipherView } from \"../view/cipherView\";\n\nconst CacheTTL = 3000;\n\nexport class SortedCiphersCache {\n private readonly sortedCiphersByUrl: Map = new Map();\n private readonly timeouts: Map = new Map();\n\n constructor(private readonly comparator: (a: CipherView, b: CipherView) => number) {}\n\n isCached(url: string) {\n return this.sortedCiphersByUrl.has(url);\n }\n\n addCiphers(url: string, ciphers: CipherView[]) {\n ciphers.sort(this.comparator);\n this.sortedCiphersByUrl.set(url, new Ciphers(ciphers));\n this.resetTimer(url);\n }\n\n getLastUsed(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastUsed() : null;\n }\n\n getLastLaunched(url: string) {\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastLaunched() : null;\n }\n\n getNext(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getNext() : null;\n }\n\n updateLastUsedIndex(url: string) {\n if (this.isCached(url)) {\n this.sortedCiphersByUrl.get(url).updateLastUsedIndex();\n }\n }\n\n clear() {\n this.sortedCiphersByUrl.clear();\n this.timeouts.clear();\n }\n\n private resetTimer(url: string) {\n clearTimeout(this.timeouts.get(url));\n this.timeouts.set(\n url,\n setTimeout(() => {\n this.sortedCiphersByUrl.delete(url);\n this.timeouts.delete(url);\n }, CacheTTL)\n );\n }\n}\n\nclass Ciphers {\n lastUsedIndex = -1;\n\n constructor(private readonly ciphers: CipherView[]) {}\n\n getLastUsed() {\n this.lastUsedIndex = Math.max(this.lastUsedIndex, 0);\n return this.ciphers[this.lastUsedIndex];\n }\n\n getLastLaunched() {\n const usedCiphers = this.ciphers.filter((cipher) => cipher.localData?.lastLaunched);\n const sortedCiphers = usedCiphers.sort(\n (x, y) => y.localData.lastLaunched.valueOf() - x.localData.lastLaunched.valueOf()\n );\n return sortedCiphers[0];\n }\n\n getNextIndex() {\n return (this.lastUsedIndex + 1) % this.ciphers.length;\n }\n\n getNext() {\n return this.ciphers[this.getNextIndex()];\n }\n\n updateLastUsedIndex() {\n this.lastUsedIndex = this.getNextIndex();\n }\n}\n","import { Account } from \"./account\";\nimport { GlobalState } from \"./globalState\";\n\nexport class State<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n accounts: { [userId: string]: TAccount } = {};\n globals: TGlobalState;\n activeUserId: string;\n authenticatedAccounts: string[] = [];\n accountActivity: { [userId: string]: number } = {};\n\n constructor(globals: TGlobalState) {\n this.globals = globals;\n }\n}\n","import { EncryptionType } from \"../../enums/encryptionType\";\nimport { Utils } from \"../../misc/utils\";\n\nexport class SymmetricCryptoKey {\n key: ArrayBuffer;\n encKey?: ArrayBuffer;\n macKey?: ArrayBuffer;\n encType: EncryptionType;\n\n keyB64: string;\n encKeyB64: string;\n macKeyB64: string;\n\n meta: any;\n\n constructor(key: ArrayBuffer, encType?: EncryptionType) {\n if (key == null) {\n throw new Error(\"Must provide key\");\n }\n\n if (encType == null) {\n if (key.byteLength === 32) {\n encType = EncryptionType.AesCbc256_B64;\n } else if (key.byteLength === 64) {\n encType = EncryptionType.AesCbc256_HmacSha256_B64;\n } else {\n throw new Error(\"Unable to determine encType.\");\n }\n }\n\n this.key = key;\n this.encType = encType;\n\n if (encType === EncryptionType.AesCbc256_B64 && key.byteLength === 32) {\n this.encKey = key;\n this.macKey = null;\n } else if (encType === EncryptionType.AesCbc128_HmacSha256_B64 && key.byteLength === 32) {\n this.encKey = key.slice(0, 16);\n this.macKey = key.slice(16, 32);\n } else if (encType === EncryptionType.AesCbc256_HmacSha256_B64 && key.byteLength === 64) {\n this.encKey = key.slice(0, 32);\n this.macKey = key.slice(32, 64);\n } else {\n throw new Error(\"Unsupported encType/key length.\");\n }\n\n if (this.key != null) {\n this.keyB64 = Utils.fromBufferToB64(this.key);\n }\n if (this.encKey != null) {\n this.encKeyB64 = Utils.fromBufferToB64(this.encKey);\n }\n if (this.macKey != null) {\n this.macKeyB64 = Utils.fromBufferToB64(this.macKey);\n }\n }\n}\n","export class TreeNode {\n parent: T;\n node: T;\n children: TreeNode[] = [];\n\n constructor(node: T, name: string, parent: T) {\n this.parent = parent;\n this.node = node;\n this.node.name = name;\n }\n}\n\nexport interface ITreeNodeObject {\n id: string;\n name: string;\n}\n","export class WindowState {\n width?: number;\n height?: number;\n isMaximized?: boolean;\n // TODO: displayBounds is an Electron.Rectangle.\n // We need to establish some kind of client-specific global state, similiar to the way we already extend a base Account.\n displayBounds: any;\n x?: number;\n y?: number;\n}\n","import { Card as CardDomain } from \"../domain/card\";\nimport { EncString } from \"../domain/encString\";\nimport { CardView } from \"../view/cardView\";\n\nexport class Card {\n static template(): Card {\n const req = new Card();\n req.cardholderName = \"John Doe\";\n req.brand = \"visa\";\n req.number = \"4242424242424242\";\n req.expMonth = \"04\";\n req.expYear = \"2023\";\n req.code = \"123\";\n return req;\n }\n\n static toView(req: Card, view = new CardView()) {\n view.cardholderName = req.cardholderName;\n view.brand = req.brand;\n view.number = req.number;\n view.expMonth = req.expMonth;\n view.expYear = req.expYear;\n view.code = req.code;\n return view;\n }\n\n static toDomain(req: Card, domain = new CardDomain()) {\n domain.cardholderName = req.cardholderName != null ? new EncString(req.cardholderName) : null;\n domain.brand = req.brand != null ? new EncString(req.brand) : null;\n domain.number = req.number != null ? new EncString(req.number) : null;\n domain.expMonth = req.expMonth != null ? new EncString(req.expMonth) : null;\n domain.expYear = req.expYear != null ? new EncString(req.expYear) : null;\n domain.code = req.code != null ? new EncString(req.code) : null;\n return domain;\n }\n\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(o?: CardView | CardDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof CardView) {\n this.cardholderName = o.cardholderName;\n this.brand = o.brand;\n this.number = o.number;\n this.expMonth = o.expMonth;\n this.expYear = o.expYear;\n this.code = o.code;\n } else {\n this.cardholderName = o.cardholderName?.encryptedString;\n this.brand = o.brand?.encryptedString;\n this.number = o.number?.encryptedString;\n this.expMonth = o.expMonth?.encryptedString;\n this.expYear = o.expYear?.encryptedString;\n this.code = o.code?.encryptedString;\n }\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { Cipher as CipherDomain } from \"../domain/cipher\";\nimport { EncString } from \"../domain/encString\";\nimport { CipherView } from \"../view/cipherView\";\n\nimport { Card } from \"./card\";\nimport { Field } from \"./field\";\nimport { Identity } from \"./identity\";\nimport { Login } from \"./login\";\nimport { SecureNote } from \"./secureNote\";\n\nexport class Cipher {\n static template(): Cipher {\n const req = new Cipher();\n req.organizationId = null;\n req.collectionIds = null;\n req.folderId = null;\n req.type = CipherType.Login;\n req.name = \"Item name\";\n req.notes = \"Some notes about this item.\";\n req.favorite = false;\n req.fields = [];\n req.login = null;\n req.secureNote = null;\n req.card = null;\n req.identity = null;\n req.reprompt = CipherRepromptType.None;\n return req;\n }\n\n static toView(req: Cipher, view = new CipherView()) {\n view.type = req.type;\n view.folderId = req.folderId;\n if (view.organizationId == null) {\n view.organizationId = req.organizationId;\n }\n if (view.collectionIds || req.collectionIds) {\n const set = new Set((view.collectionIds ?? []).concat(req.collectionIds ?? []));\n view.collectionIds = Array.from(set.values());\n }\n view.name = req.name;\n view.notes = req.notes;\n view.favorite = req.favorite;\n view.reprompt = req.reprompt ?? CipherRepromptType.None;\n\n if (req.fields != null) {\n view.fields = req.fields.map((f) => Field.toView(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n view.login = Login.toView(req.login);\n break;\n case CipherType.SecureNote:\n view.secureNote = SecureNote.toView(req.secureNote);\n break;\n case CipherType.Card:\n view.card = Card.toView(req.card);\n break;\n case CipherType.Identity:\n view.identity = Identity.toView(req.identity);\n break;\n }\n\n return view;\n }\n\n static toDomain(req: Cipher, domain = new CipherDomain()) {\n domain.type = req.type;\n domain.folderId = req.folderId;\n if (domain.organizationId == null) {\n domain.organizationId = req.organizationId;\n }\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.notes = req.notes != null ? new EncString(req.notes) : null;\n domain.favorite = req.favorite;\n domain.reprompt = req.reprompt ?? CipherRepromptType.None;\n\n if (req.fields != null) {\n domain.fields = req.fields.map((f) => Field.toDomain(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n domain.login = Login.toDomain(req.login);\n break;\n case CipherType.SecureNote:\n domain.secureNote = SecureNote.toDomain(req.secureNote);\n break;\n case CipherType.Card:\n domain.card = Card.toDomain(req.card);\n break;\n case CipherType.Identity:\n domain.identity = Identity.toDomain(req.identity);\n break;\n }\n\n return domain;\n }\n\n type: CipherType;\n folderId: string;\n organizationId: string;\n collectionIds: string[];\n name: string;\n notes: string;\n favorite: boolean;\n fields: Field[];\n login: Login;\n secureNote: SecureNote;\n card: Card;\n identity: Identity;\n reprompt: CipherRepromptType;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView | CipherDomain) {\n this.organizationId = o.organizationId;\n this.folderId = o.folderId;\n this.type = o.type;\n this.reprompt = o.reprompt;\n\n if (o instanceof CipherView) {\n this.name = o.name;\n this.notes = o.notes;\n } else {\n this.name = o.name?.encryptedString;\n this.notes = o.notes?.encryptedString;\n }\n\n this.favorite = o.favorite;\n\n if (o.fields != null) {\n if (o instanceof CipherView) {\n this.fields = o.fields.map((f) => new Field(f));\n } else {\n this.fields = o.fields.map((f) => new Field(f));\n }\n }\n\n switch (o.type) {\n case CipherType.Login:\n this.login = new Login(o.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNote(o.secureNote);\n break;\n case CipherType.Card:\n this.card = new Card(o.card);\n break;\n case CipherType.Identity:\n this.identity = new Identity(o.identity);\n break;\n }\n }\n}\n","import { Cipher as CipherDomain } from \"../domain/cipher\";\nimport { CipherView } from \"../view/cipherView\";\n\nimport { Cipher } from \"./cipher\";\n\nexport class CipherWithIds extends Cipher {\n id: string;\n collectionIds: string[];\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView | CipherDomain) {\n this.id = o.id;\n super.build(o);\n this.collectionIds = o.collectionIds;\n }\n}\n","import { Collection as CollectionDomain } from \"../domain/collection\";\nimport { EncString } from \"../domain/encString\";\nimport { CollectionView } from \"../view/collectionView\";\n\nexport class Collection {\n static template(): Collection {\n const req = new Collection();\n req.organizationId = \"00000000-0000-0000-0000-000000000000\";\n req.name = \"Collection name\";\n req.externalId = null;\n return req;\n }\n\n static toView(req: Collection, view = new CollectionView()) {\n view.name = req.name;\n view.externalId = req.externalId;\n if (view.organizationId == null) {\n view.organizationId = req.organizationId;\n }\n return view;\n }\n\n static toDomain(req: Collection, domain = new CollectionDomain()) {\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.externalId = req.externalId;\n if (domain.organizationId == null) {\n domain.organizationId = req.organizationId;\n }\n return domain;\n }\n\n organizationId: string;\n name: string;\n externalId: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CollectionView | CollectionDomain) {\n this.organizationId = o.organizationId;\n if (o instanceof CollectionView) {\n this.name = o.name;\n } else {\n this.name = o.name?.encryptedString;\n }\n this.externalId = o.externalId;\n }\n}\n","import { Collection as CollectionDomain } from \"../domain/collection\";\nimport { CollectionView } from \"../view/collectionView\";\n\nimport { Collection } from \"./collection\";\n\nexport class CollectionWithId extends Collection {\n id: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CollectionView | CollectionDomain) {\n this.id = o.id;\n super.build(o);\n }\n}\n","import { EventType } from \"../../enums/eventType\";\nimport { EventView } from \"../view/eventView\";\n\nexport class Event {\n message: string;\n appIcon: string;\n appName: string;\n userId: string;\n userName: string;\n userEmail: string;\n date: string;\n ip: string;\n type: string;\n\n constructor(event: EventView) {\n this.message = event.humanReadableMessage;\n this.appIcon = event.appIcon;\n this.appName = event.appName;\n this.userId = event.userId;\n this.userName = event.userName;\n this.userEmail = event.userEmail;\n this.date = event.date;\n this.ip = event.ip;\n this.type = EventType[event.type];\n }\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { EncString } from \"../domain/encString\";\nimport { Field as FieldDomain } from \"../domain/field\";\nimport { FieldView } from \"../view/fieldView\";\n\nexport class Field {\n static template(): Field {\n const req = new Field();\n req.name = \"Field name\";\n req.value = \"Some value\";\n req.type = FieldType.Text;\n return req;\n }\n\n static toView(req: Field, view = new FieldView()) {\n view.type = req.type;\n view.value = req.value;\n view.name = req.name;\n view.linkedId = req.linkedId;\n return view;\n }\n\n static toDomain(req: Field, domain = new FieldDomain()) {\n domain.type = req.type;\n domain.value = req.value != null ? new EncString(req.value) : null;\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.linkedId = req.linkedId;\n return domain;\n }\n\n name: string;\n value: string;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(o?: FieldView | FieldDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof FieldView) {\n this.name = o.name;\n this.value = o.value;\n } else {\n this.name = o.name?.encryptedString;\n this.value = o.value?.encryptedString;\n }\n this.type = o.type;\n this.linkedId = o.linkedId;\n }\n}\n","import { EncString } from \"../domain/encString\";\nimport { Folder as FolderDomain } from \"../domain/folder\";\nimport { FolderView } from \"../view/folderView\";\n\nexport class Folder {\n static template(): Folder {\n const req = new Folder();\n req.name = \"Folder name\";\n return req;\n }\n\n static toView(req: Folder, view = new FolderView()) {\n view.name = req.name;\n return view;\n }\n\n static toDomain(req: Folder, domain = new FolderDomain()) {\n domain.name = req.name != null ? new EncString(req.name) : null;\n return domain;\n }\n\n name: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView | FolderDomain) {\n if (o instanceof FolderView) {\n this.name = o.name;\n } else {\n this.name = o.name?.encryptedString;\n }\n }\n}\n","import { Folder as FolderDomain } from \"../domain/folder\";\nimport { FolderView } from \"../view/folderView\";\n\nimport { Folder } from \"./folder\";\n\nexport class FolderWithId extends Folder {\n id: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView | FolderDomain) {\n this.id = o.id;\n super.build(o);\n }\n}\n","import { EncString } from \"../domain/encString\";\nimport { Identity as IdentityDomain } from \"../domain/identity\";\nimport { IdentityView } from \"../view/identityView\";\n\nexport class Identity {\n static template(): Identity {\n const req = new Identity();\n req.title = \"Mr\";\n req.firstName = \"John\";\n req.middleName = \"William\";\n req.lastName = \"Doe\";\n req.address1 = \"123 Any St\";\n req.address2 = \"Apt #123\";\n req.address3 = null;\n req.city = \"New York\";\n req.state = \"NY\";\n req.postalCode = \"10001\";\n req.country = \"US\";\n req.company = \"Acme Inc.\";\n req.email = \"john@company.com\";\n req.phone = \"5555551234\";\n req.ssn = \"000-123-4567\";\n req.username = \"jdoe\";\n req.passportNumber = \"US-123456789\";\n req.licenseNumber = \"D123-12-123-12333\";\n return req;\n }\n\n static toView(req: Identity, view = new IdentityView()) {\n view.title = req.title;\n view.firstName = req.firstName;\n view.middleName = req.middleName;\n view.lastName = req.lastName;\n view.address1 = req.address1;\n view.address2 = req.address2;\n view.address3 = req.address3;\n view.city = req.city;\n view.state = req.state;\n view.postalCode = req.postalCode;\n view.country = req.country;\n view.company = req.company;\n view.email = req.email;\n view.phone = req.phone;\n view.ssn = req.ssn;\n view.username = req.username;\n view.passportNumber = req.passportNumber;\n view.licenseNumber = req.licenseNumber;\n return view;\n }\n\n static toDomain(req: Identity, domain = new IdentityDomain()) {\n domain.title = req.title != null ? new EncString(req.title) : null;\n domain.firstName = req.firstName != null ? new EncString(req.firstName) : null;\n domain.middleName = req.middleName != null ? new EncString(req.middleName) : null;\n domain.lastName = req.lastName != null ? new EncString(req.lastName) : null;\n domain.address1 = req.address1 != null ? new EncString(req.address1) : null;\n domain.address2 = req.address2 != null ? new EncString(req.address2) : null;\n domain.address3 = req.address3 != null ? new EncString(req.address3) : null;\n domain.city = req.city != null ? new EncString(req.city) : null;\n domain.state = req.state != null ? new EncString(req.state) : null;\n domain.postalCode = req.postalCode != null ? new EncString(req.postalCode) : null;\n domain.country = req.country != null ? new EncString(req.country) : null;\n domain.company = req.company != null ? new EncString(req.company) : null;\n domain.email = req.email != null ? new EncString(req.email) : null;\n domain.phone = req.phone != null ? new EncString(req.phone) : null;\n domain.ssn = req.ssn != null ? new EncString(req.ssn) : null;\n domain.username = req.username != null ? new EncString(req.username) : null;\n domain.passportNumber = req.passportNumber != null ? new EncString(req.passportNumber) : null;\n domain.licenseNumber = req.licenseNumber != null ? new EncString(req.licenseNumber) : null;\n return domain;\n }\n\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(o?: IdentityView | IdentityDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof IdentityView) {\n this.title = o.title;\n this.firstName = o.firstName;\n this.middleName = o.middleName;\n this.lastName = o.lastName;\n this.address1 = o.address1;\n this.address2 = o.address2;\n this.address3 = o.address3;\n this.city = o.city;\n this.state = o.state;\n this.postalCode = o.postalCode;\n this.country = o.country;\n this.company = o.company;\n this.email = o.email;\n this.phone = o.phone;\n this.ssn = o.ssn;\n this.username = o.username;\n this.passportNumber = o.passportNumber;\n this.licenseNumber = o.licenseNumber;\n } else {\n this.title = o.title?.encryptedString;\n this.firstName = o.firstName?.encryptedString;\n this.middleName = o.middleName?.encryptedString;\n this.lastName = o.lastName?.encryptedString;\n this.address1 = o.address1?.encryptedString;\n this.address2 = o.address2?.encryptedString;\n this.address3 = o.address3?.encryptedString;\n this.city = o.city?.encryptedString;\n this.state = o.state?.encryptedString;\n this.postalCode = o.postalCode?.encryptedString;\n this.country = o.country?.encryptedString;\n this.company = o.company?.encryptedString;\n this.email = o.email?.encryptedString;\n this.phone = o.phone?.encryptedString;\n this.ssn = o.ssn?.encryptedString;\n this.username = o.username?.encryptedString;\n this.passportNumber = o.passportNumber?.encryptedString;\n this.licenseNumber = o.licenseNumber?.encryptedString;\n }\n }\n}\n","import { EncString } from \"../domain/encString\";\nimport { Login as LoginDomain } from \"../domain/login\";\nimport { LoginView } from \"../view/loginView\";\n\nimport { LoginUri } from \"./loginUri\";\n\nexport class Login {\n static template(): Login {\n const req = new Login();\n req.uris = [];\n req.username = \"jdoe\";\n req.password = \"myp@ssword123\";\n req.totp = \"JBSWY3DPEHPK3PXP\";\n return req;\n }\n\n static toView(req: Login, view = new LoginView()) {\n if (req.uris != null) {\n view.uris = req.uris.map((u) => LoginUri.toView(u));\n }\n view.username = req.username;\n view.password = req.password;\n view.totp = req.totp;\n return view;\n }\n\n static toDomain(req: Login, domain = new LoginDomain()) {\n if (req.uris != null) {\n domain.uris = req.uris.map((u) => LoginUri.toDomain(u));\n }\n domain.username = req.username != null ? new EncString(req.username) : null;\n domain.password = req.password != null ? new EncString(req.password) : null;\n domain.totp = req.totp != null ? new EncString(req.totp) : null;\n return domain;\n }\n\n uris: LoginUri[];\n username: string;\n password: string;\n totp: string;\n\n constructor(o?: LoginView | LoginDomain) {\n if (o == null) {\n return;\n }\n\n if (o.uris != null) {\n if (o instanceof LoginView) {\n this.uris = o.uris.map((u) => new LoginUri(u));\n } else {\n this.uris = o.uris.map((u) => new LoginUri(u));\n }\n }\n\n if (o instanceof LoginView) {\n this.username = o.username;\n this.password = o.password;\n this.totp = o.totp;\n } else {\n this.username = o.username?.encryptedString;\n this.password = o.password?.encryptedString;\n this.totp = o.totp?.encryptedString;\n }\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { EncString } from \"../domain/encString\";\nimport { LoginUri as LoginUriDomain } from \"../domain/loginUri\";\nimport { LoginUriView } from \"../view/loginUriView\";\n\nexport class LoginUri {\n static template(): LoginUri {\n const req = new LoginUri();\n req.uri = \"https://google.com\";\n req.match = null;\n return req;\n }\n\n static toView(req: LoginUri, view = new LoginUriView()) {\n view.uri = req.uri;\n view.match = req.match;\n return view;\n }\n\n static toDomain(req: LoginUri, domain = new LoginUriDomain()) {\n domain.uri = req.uri != null ? new EncString(req.uri) : null;\n domain.match = req.match;\n return domain;\n }\n\n uri: string;\n match: UriMatchType = null;\n\n constructor(o?: LoginUriView | LoginUriDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof LoginUriView) {\n this.uri = o.uri;\n } else {\n this.uri = o.uri?.encryptedString;\n }\n this.match = o.match;\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNote as SecureNoteDomain } from \"../domain/secureNote\";\nimport { SecureNoteView } from \"../view/secureNoteView\";\n\nexport class SecureNote {\n static template(): SecureNote {\n const req = new SecureNote();\n req.type = SecureNoteType.Generic;\n return req;\n }\n\n static toView(req: SecureNote, view = new SecureNoteView()) {\n view.type = req.type;\n return view;\n }\n\n static toDomain(req: SecureNote, view = new SecureNoteDomain()) {\n view.type = req.type;\n return view;\n }\n\n type: SecureNoteType;\n\n constructor(o?: SecureNoteView | SecureNoteDomain) {\n if (o == null) {\n return;\n }\n\n this.type = o.type;\n }\n}\n","import { KdfType } from \"../../../enums/kdfType\";\nimport { KeysRequest } from \"../keysRequest\";\n\nexport class SetKeyConnectorKeyRequest {\n key: string;\n keys: KeysRequest;\n kdf: KdfType;\n kdfIterations: number;\n orgIdentifier: string;\n\n constructor(\n key: string,\n kdf: KdfType,\n kdfIterations: number,\n orgIdentifier: string,\n keys: KeysRequest\n ) {\n this.key = key;\n this.kdf = kdf;\n this.kdfIterations = kdfIterations;\n this.orgIdentifier = orgIdentifier;\n this.keys = keys;\n }\n}\n","export class VerifyOTPRequest {\n OTP: string;\n\n constructor(OTP: string) {\n this.OTP = OTP;\n }\n}\n","export class AttachmentRequest {\n fileName: string;\n key: string;\n fileSize: number;\n adminRequest: boolean;\n}\n","export class BitPayInvoiceRequest {\n userId: string;\n organizationId: string;\n credit: boolean;\n amount: number;\n returnUrl: string;\n name: string;\n email: string;\n}\n","export class CipherBulkDeleteRequest {\n ids: string[];\n organizationId: string;\n\n constructor(ids: string[], organizationId?: string) {\n this.ids = ids == null ? [] : ids;\n this.organizationId = organizationId;\n }\n}\n","export class CipherBulkMoveRequest {\n ids: string[];\n folderId: string;\n\n constructor(ids: string[], folderId: string) {\n this.ids = ids == null ? [] : ids;\n this.folderId = folderId;\n }\n}\n","export class CipherBulkRestoreRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherWithIdRequest } from \"./cipherWithIdRequest\";\n\nexport class CipherBulkShareRequest {\n ciphers: CipherWithIdRequest[];\n collectionIds: string[];\n\n constructor(ciphers: Cipher[], collectionIds: string[]) {\n if (ciphers != null) {\n this.ciphers = [];\n ciphers.forEach((c) => {\n this.ciphers.push(new CipherWithIdRequest(c));\n });\n }\n this.collectionIds = collectionIds;\n }\n}\n","export class CipherCollectionsRequest {\n collectionIds: string[];\n\n constructor(collectionIds: string[]) {\n this.collectionIds = collectionIds == null ? [] : collectionIds;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipherRequest\";\n\nexport class CipherCreateRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { CardApi } from \"../api/cardApi\";\nimport { FieldApi } from \"../api/fieldApi\";\nimport { IdentityApi } from \"../api/identityApi\";\nimport { LoginApi } from \"../api/loginApi\";\nimport { LoginUriApi } from \"../api/loginUriApi\";\nimport { SecureNoteApi } from \"../api/secureNoteApi\";\nimport { Cipher } from \"../domain/cipher\";\n\nimport { AttachmentRequest } from \"./attachmentRequest\";\nimport { PasswordHistoryRequest } from \"./passwordHistoryRequest\";\n\nexport class CipherRequest {\n type: CipherType;\n folderId: string;\n organizationId: string;\n name: string;\n notes: string;\n favorite: boolean;\n login: LoginApi;\n secureNote: SecureNoteApi;\n card: CardApi;\n identity: IdentityApi;\n fields: FieldApi[];\n passwordHistory: PasswordHistoryRequest[];\n // Deprecated, remove at some point and rename attachments2 to attachments\n attachments: { [id: string]: string };\n attachments2: { [id: string]: AttachmentRequest };\n lastKnownRevisionDate: Date;\n reprompt: CipherRepromptType;\n\n constructor(cipher: Cipher) {\n this.type = cipher.type;\n this.folderId = cipher.folderId;\n this.organizationId = cipher.organizationId;\n this.name = cipher.name ? cipher.name.encryptedString : null;\n this.notes = cipher.notes ? cipher.notes.encryptedString : null;\n this.favorite = cipher.favorite;\n this.lastKnownRevisionDate = cipher.revisionDate;\n this.reprompt = cipher.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginApi();\n this.login.uris = null;\n this.login.username = cipher.login.username ? cipher.login.username.encryptedString : null;\n this.login.password = cipher.login.password ? cipher.login.password.encryptedString : null;\n this.login.passwordRevisionDate =\n cipher.login.passwordRevisionDate != null\n ? cipher.login.passwordRevisionDate.toISOString()\n : null;\n this.login.totp = cipher.login.totp ? cipher.login.totp.encryptedString : null;\n this.login.autofillOnPageLoad = cipher.login.autofillOnPageLoad;\n\n if (cipher.login.uris != null) {\n this.login.uris = cipher.login.uris.map((u) => {\n const uri = new LoginUriApi();\n uri.uri = u.uri != null ? u.uri.encryptedString : null;\n uri.match = u.match != null ? u.match : null;\n return uri;\n });\n }\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteApi();\n this.secureNote.type = cipher.secureNote.type;\n break;\n case CipherType.Card:\n this.card = new CardApi();\n this.card.cardholderName =\n cipher.card.cardholderName != null ? cipher.card.cardholderName.encryptedString : null;\n this.card.brand = cipher.card.brand != null ? cipher.card.brand.encryptedString : null;\n this.card.number = cipher.card.number != null ? cipher.card.number.encryptedString : null;\n this.card.expMonth =\n cipher.card.expMonth != null ? cipher.card.expMonth.encryptedString : null;\n this.card.expYear =\n cipher.card.expYear != null ? cipher.card.expYear.encryptedString : null;\n this.card.code = cipher.card.code != null ? cipher.card.code.encryptedString : null;\n break;\n case CipherType.Identity:\n this.identity = new IdentityApi();\n this.identity.title =\n cipher.identity.title != null ? cipher.identity.title.encryptedString : null;\n this.identity.firstName =\n cipher.identity.firstName != null ? cipher.identity.firstName.encryptedString : null;\n this.identity.middleName =\n cipher.identity.middleName != null ? cipher.identity.middleName.encryptedString : null;\n this.identity.lastName =\n cipher.identity.lastName != null ? cipher.identity.lastName.encryptedString : null;\n this.identity.address1 =\n cipher.identity.address1 != null ? cipher.identity.address1.encryptedString : null;\n this.identity.address2 =\n cipher.identity.address2 != null ? cipher.identity.address2.encryptedString : null;\n this.identity.address3 =\n cipher.identity.address3 != null ? cipher.identity.address3.encryptedString : null;\n this.identity.city =\n cipher.identity.city != null ? cipher.identity.city.encryptedString : null;\n this.identity.state =\n cipher.identity.state != null ? cipher.identity.state.encryptedString : null;\n this.identity.postalCode =\n cipher.identity.postalCode != null ? cipher.identity.postalCode.encryptedString : null;\n this.identity.country =\n cipher.identity.country != null ? cipher.identity.country.encryptedString : null;\n this.identity.company =\n cipher.identity.company != null ? cipher.identity.company.encryptedString : null;\n this.identity.email =\n cipher.identity.email != null ? cipher.identity.email.encryptedString : null;\n this.identity.phone =\n cipher.identity.phone != null ? cipher.identity.phone.encryptedString : null;\n this.identity.ssn =\n cipher.identity.ssn != null ? cipher.identity.ssn.encryptedString : null;\n this.identity.username =\n cipher.identity.username != null ? cipher.identity.username.encryptedString : null;\n this.identity.passportNumber =\n cipher.identity.passportNumber != null\n ? cipher.identity.passportNumber.encryptedString\n : null;\n this.identity.licenseNumber =\n cipher.identity.licenseNumber != null\n ? cipher.identity.licenseNumber.encryptedString\n : null;\n break;\n default:\n break;\n }\n\n if (cipher.fields != null) {\n this.fields = cipher.fields.map((f) => {\n const field = new FieldApi();\n field.type = f.type;\n field.name = f.name ? f.name.encryptedString : null;\n field.value = f.value ? f.value.encryptedString : null;\n field.linkedId = f.linkedId;\n return field;\n });\n }\n\n if (cipher.passwordHistory != null) {\n this.passwordHistory = [];\n cipher.passwordHistory.forEach((ph) => {\n this.passwordHistory.push({\n lastUsedDate: ph.lastUsedDate,\n password: ph.password ? ph.password.encryptedString : null,\n });\n });\n }\n\n if (cipher.attachments != null) {\n this.attachments = {};\n this.attachments2 = {};\n cipher.attachments.forEach((attachment) => {\n const fileName = attachment.fileName ? attachment.fileName.encryptedString : null;\n this.attachments[attachment.id] = fileName;\n const attachmentRequest = new AttachmentRequest();\n attachmentRequest.fileName = fileName;\n if (attachment.key != null) {\n attachmentRequest.key = attachment.key.encryptedString;\n }\n this.attachments2[attachment.id] = attachmentRequest;\n });\n }\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipherRequest\";\n\nexport class CipherShareRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipherRequest\";\n\nexport class CipherWithIdRequest extends CipherRequest {\n id: string;\n\n constructor(cipher: Cipher) {\n super(cipher);\n this.id = cipher.id;\n }\n}\n","import { Collection } from \"../domain/collection\";\n\nimport { SelectionReadOnlyRequest } from \"./selectionReadOnlyRequest\";\n\nexport class CollectionRequest {\n name: string;\n externalId: string;\n groups: SelectionReadOnlyRequest[] = [];\n\n constructor(collection?: Collection) {\n if (collection == null) {\n return;\n }\n this.name = collection.name ? collection.name.encryptedString : null;\n this.externalId = collection.externalId;\n }\n}\n","export class DeleteRecoverRequest {\n email: string;\n}\n","import { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { DeviceType } from \"../../enums/deviceType\";\n\nexport class DeviceRequest {\n type: DeviceType;\n name: string;\n identifier: string;\n pushToken?: string;\n\n constructor(appId: string, platformUtilsService: PlatformUtilsService) {\n this.type = platformUtilsService.getDevice();\n this.name = platformUtilsService.getDeviceString();\n this.identifier = appId;\n this.pushToken = null;\n }\n}\n","import { EmailTokenRequest } from \"./emailTokenRequest\";\n\nexport class EmailRequest extends EmailTokenRequest {\n newMasterPasswordHash: string;\n token: string;\n key: string;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class EmailTokenRequest extends SecretVerificationRequest {\n newEmail: string;\n masterPasswordHash: string;\n}\n","export class EmergencyAccessAcceptRequest {\n token: string;\n}\n","export class EmergencyAccessConfirmRequest {\n key: string;\n}\n","import { EmergencyAccessType } from \"../../enums/emergencyAccessType\";\n\nexport class EmergencyAccessInviteRequest {\n email: string;\n type: EmergencyAccessType;\n waitTimeDays: number;\n}\n","export class EmergencyAccessPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","import { EmergencyAccessType } from \"../../enums/emergencyAccessType\";\n\nexport class EmergencyAccessUpdateRequest {\n type: EmergencyAccessType;\n waitTimeDays: number;\n keyEncrypted?: string;\n}\n","import { EventType } from \"../../enums/eventType\";\n\nexport class EventRequest {\n type: EventType;\n cipherId: string;\n date: string;\n}\n","import { Folder } from \"../domain/folder\";\n\nexport class FolderRequest {\n name: string;\n\n constructor(folder: Folder) {\n this.name = folder.name ? folder.name.encryptedString : null;\n }\n}\n","import { Folder } from \"../domain/folder\";\n\nimport { FolderRequest } from \"./folderRequest\";\n\nexport class FolderWithIdRequest extends FolderRequest {\n id: string;\n\n constructor(folder: Folder) {\n super(folder);\n this.id = folder.id;\n }\n}\n","import { SelectionReadOnlyRequest } from \"./selectionReadOnlyRequest\";\n\nexport class GroupRequest {\n name: string;\n accessAll: boolean;\n externalId: string;\n collections: SelectionReadOnlyRequest[] = [];\n}\n","import { DeviceRequest } from \"../deviceRequest\";\n\nimport { TokenRequest } from \"./tokenRequest\";\nimport { TokenRequestTwoFactor } from \"./tokenRequestTwoFactor\";\n\nexport class ApiTokenRequest extends TokenRequest {\n constructor(\n public clientId: string,\n public clientSecret: string,\n protected twoFactor: TokenRequestTwoFactor,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken() {\n const obj = super.toIdentityToken(this.clientId);\n\n obj.scope = this.clientId.startsWith(\"organization\") ? \"api.organization\" : \"api\";\n obj.grant_type = \"client_credentials\";\n obj.client_secret = this.clientSecret;\n\n return obj;\n }\n}\n","import { ClientType } from \"../../../enums/clientType\";\nimport { Utils } from \"../../../misc/utils\";\nimport { CaptchaProtectedRequest } from \"../captchaProtectedRequest\";\nimport { DeviceRequest } from \"../deviceRequest\";\n\nimport { TokenRequest } from \"./tokenRequest\";\nimport { TokenRequestTwoFactor } from \"./tokenRequestTwoFactor\";\n\nexport class PasswordTokenRequest extends TokenRequest implements CaptchaProtectedRequest {\n constructor(\n public email: string,\n public masterPasswordHash: string,\n public captchaResponse: string,\n protected twoFactor: TokenRequestTwoFactor,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken(clientId: ClientType) {\n const obj = super.toIdentityToken(clientId);\n\n obj.grant_type = \"password\";\n obj.username = this.email;\n obj.password = this.masterPasswordHash;\n\n if (this.captchaResponse != null) {\n obj.captchaResponse = this.captchaResponse;\n }\n\n return obj;\n }\n\n alterIdentityTokenHeaders(headers: Headers) {\n headers.set(\"Auth-Email\", Utils.fromUtf8ToUrlB64(this.email));\n }\n}\n","import { DeviceRequest } from \"../deviceRequest\";\n\nimport { TokenRequest } from \"./tokenRequest\";\nimport { TokenRequestTwoFactor } from \"./tokenRequestTwoFactor\";\n\nexport class SsoTokenRequest extends TokenRequest {\n constructor(\n public code: string,\n public codeVerifier: string,\n public redirectUri: string,\n protected twoFactor: TokenRequestTwoFactor,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken(clientId: string) {\n const obj = super.toIdentityToken(clientId);\n\n obj.grant_type = \"authorization_code\";\n obj.code = this.code;\n obj.code_verifier = this.codeVerifier;\n obj.redirect_uri = this.redirectUri;\n\n return obj;\n }\n}\n","import { DeviceRequest } from \"../deviceRequest\";\n\nimport { TokenRequestTwoFactor } from \"./tokenRequestTwoFactor\";\n\nexport abstract class TokenRequest {\n protected device?: DeviceRequest;\n\n constructor(protected twoFactor: TokenRequestTwoFactor, device?: DeviceRequest) {\n this.device = device != null ? device : null;\n }\n\n // eslint-disable-next-line\n alterIdentityTokenHeaders(headers: Headers) {\n // Implemented in subclass if required\n }\n\n setTwoFactor(twoFactor: TokenRequestTwoFactor) {\n this.twoFactor = twoFactor;\n }\n\n protected toIdentityToken(clientId: string) {\n const obj: any = {\n scope: \"api offline_access\",\n client_id: clientId,\n };\n\n if (this.device) {\n obj.deviceType = this.device.type;\n obj.deviceIdentifier = this.device.identifier;\n obj.deviceName = this.device.name;\n // no push tokens for browser apps yet\n // obj.devicePushToken = this.device.pushToken;\n }\n\n if (this.twoFactor.token && this.twoFactor.provider != null) {\n obj.twoFactorToken = this.twoFactor.token;\n obj.twoFactorProvider = this.twoFactor.provider;\n obj.twoFactorRemember = this.twoFactor.remember ? \"1\" : \"0\";\n }\n\n return obj;\n }\n}\n","import { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\n\nexport class TokenRequestTwoFactor {\n constructor(\n public provider: TwoFactorProviderType = null,\n public token: string = null,\n public remember: boolean = false\n ) {}\n}\n","import { CipherRequest } from \"./cipherRequest\";\nimport { FolderRequest } from \"./folderRequest\";\nimport { KvpRequest } from \"./kvpRequest\";\n\nexport class ImportCiphersRequest {\n ciphers: CipherRequest[] = [];\n folders: FolderRequest[] = [];\n folderRelationships: KvpRequest[] = [];\n}\n","import { CipherRequest } from \"./cipherRequest\";\nimport { CollectionRequest } from \"./collectionRequest\";\nimport { KvpRequest } from \"./kvpRequest\";\n\nexport class ImportOrganizationCiphersRequest {\n ciphers: CipherRequest[] = [];\n collections: CollectionRequest[] = [];\n collectionRelationships: KvpRequest[] = [];\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { PasswordRequest } from \"./passwordRequest\";\n\nexport class KdfRequest extends PasswordRequest {\n kdf: KdfType;\n kdfIterations: number;\n}\n","export class KeyConnectorUserKeyRequest {\n key: string;\n\n constructor(key: string) {\n this.key = key;\n }\n}\n","export class KeysRequest {\n publicKey: string;\n encryptedPrivateKey: string;\n\n constructor(publicKey: string, encryptedPrivateKey: string) {\n this.publicKey = publicKey;\n this.encryptedPrivateKey = encryptedPrivateKey;\n }\n}\n","export class KvpRequest {\n key: TK;\n value: TV;\n\n constructor(key: TK, value: TV) {\n this.key = key;\n this.value = value;\n }\n}\n","import { PlanSponsorshipType } from \"../../../enums/planSponsorshipType\";\n\nexport class OrganizationSponsorshipRedeemRequest {\n planSponsorshipType: PlanSponsorshipType;\n sponsoredOrganizationId: string;\n}\n","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\nimport { PlanType } from \"../../enums/planType\";\n\nimport { OrganizationKeysRequest } from \"./organizationKeysRequest\";\n\nexport class OrganizationCreateRequest {\n name: string;\n businessName: string;\n billingEmail: string;\n planType: PlanType;\n key: string;\n keys: OrganizationKeysRequest;\n paymentMethodType: PaymentMethodType;\n paymentToken: string;\n additionalSeats: number;\n maxAutoscaleSeats: number;\n additionalStorageGb: number;\n premiumAccessAddon: boolean;\n collectionName: string;\n taxIdNumber: string;\n billingAddressLine1: string;\n billingAddressLine2: string;\n billingAddressCity: string;\n billingAddressState: string;\n billingAddressPostalCode: string;\n billingAddressCountry: string;\n}\n","import { KeysRequest } from \"./keysRequest\";\n\nexport class OrganizationKeysRequest extends KeysRequest {\n constructor(publicKey: string, encryptedPrivateKey: string) {\n super(publicKey, encryptedPrivateKey);\n }\n}\n","export class OrganizationSubscriptionUpdateRequest {\n constructor(public seatAdjustment: number, public maxAutoscaleSeats?: number) {}\n}\n","import { TaxInfoUpdateRequest } from \"./taxInfoUpdateRequest\";\n\nexport class OrganizationTaxInfoUpdateRequest extends TaxInfoUpdateRequest {\n taxId: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n}\n","import { OrganizationKeysRequest } from \"./organizationKeysRequest\";\n\nexport class OrganizationUpdateRequest {\n name: string;\n identifier: string;\n businessName: string;\n billingEmail: string;\n keys: OrganizationKeysRequest;\n}\n","import { PlanType } from \"../../enums/planType\";\n\nimport { OrganizationKeysRequest } from \"./organizationKeysRequest\";\n\nexport class OrganizationUpgradeRequest {\n businessName: string;\n planType: PlanType;\n additionalSeats: number;\n additionalStorageGb: number;\n premiumAccessAddon: boolean;\n billingAddressCountry: string;\n billingAddressPostalCode: string;\n keys: OrganizationKeysRequest;\n}\n","export class OrganizationUserAcceptRequest {\n token: string;\n}\n","type OrganizationUserBulkRequestEntry = {\n id: string;\n key: string;\n};\n\nexport class OrganizationUserBulkConfirmRequest {\n keys: OrganizationUserBulkRequestEntry[];\n\n constructor(keys: OrganizationUserBulkRequestEntry[]) {\n this.keys = keys;\n }\n}\n","export class OrganizationUserBulkRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","export class OrganizationUserConfirmRequest {\n key: string;\n}\n","import { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\n\nimport { SelectionReadOnlyRequest } from \"./selectionReadOnlyRequest\";\n\nexport class OrganizationUserInviteRequest {\n emails: string[] = [];\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","export class OrganizationUserResetPasswordEnrollmentRequest {\n resetPasswordKey: string;\n}\n","export class OrganizationUserResetPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","export class OrganizationUserUpdateGroupsRequest {\n groupIds: string[] = [];\n}\n","import { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\n\nimport { SelectionReadOnlyRequest } from \"./selectionReadOnlyRequest\";\n\nexport class OrganizationUserUpdateRequest {\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","export class PasswordHintRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class PasswordRequest extends SecretVerificationRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../request/organizationTaxInfoUpdateRequest\";\n\nexport class PaymentRequest extends OrganizationTaxInfoUpdateRequest {\n paymentMethodType: PaymentMethodType;\n paymentToken: string;\n}\n","import { PolicyType } from \"../../enums/policyType\";\n\nexport class PolicyRequest {\n type: PolicyType;\n enabled: boolean;\n data: any;\n}\n","export class PreloginRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","import { OrganizationCreateRequest } from \"../organizationCreateRequest\";\n\nexport class ProviderOrganizationCreateRequest {\n constructor(\n public clientOwnerEmail: string,\n public organizationCreateRequest: OrganizationCreateRequest\n ) {}\n}\n","export class ReferenceEventRequest {\n id: string;\n layout: string;\n flow: string;\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { CaptchaProtectedRequest } from \"./captchaProtectedRequest\";\nimport { KeysRequest } from \"./keysRequest\";\nimport { ReferenceEventRequest } from \"./referenceEventRequest\";\n\nexport class RegisterRequest implements CaptchaProtectedRequest {\n masterPasswordHint: string;\n keys: KeysRequest;\n token: string;\n organizationUserId: string;\n\n constructor(\n public email: string,\n public name: string,\n public masterPasswordHash: string,\n masterPasswordHint: string,\n public key: string,\n public kdf: KdfType,\n public kdfIterations: number,\n public referenceData: ReferenceEventRequest,\n public captchaResponse: string\n ) {\n this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null;\n }\n}\n","export class SecretVerificationRequest {\n masterPasswordHash: string;\n otp: string;\n}\n","export class SelectionReadOnlyRequest {\n id: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(id: string, readOnly: boolean, hidePasswords: boolean) {\n this.id = id;\n this.readOnly = readOnly;\n this.hidePasswords = hidePasswords;\n }\n}\n","export class SendAccessRequest {\n password: string;\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/sendFileApi\";\nimport { SendTextApi } from \"../api/sendTextApi\";\nimport { Send } from \"../domain/send\";\n\nexport class SendRequest {\n type: SendType;\n fileLength?: number;\n name: string;\n notes: string;\n key: string;\n maxAccessCount?: number;\n expirationDate: string;\n deletionDate: string;\n text: SendTextApi;\n file: SendFileApi;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(send: Send, fileLength?: number) {\n this.type = send.type;\n this.fileLength = fileLength;\n this.name = send.name ? send.name.encryptedString : null;\n this.notes = send.notes ? send.notes.encryptedString : null;\n this.maxAccessCount = send.maxAccessCount;\n this.expirationDate = send.expirationDate != null ? send.expirationDate.toISOString() : null;\n this.deletionDate = send.deletionDate != null ? send.deletionDate.toISOString() : null;\n this.key = send.key != null ? send.key.encryptedString : null;\n this.password = send.password;\n this.disabled = send.disabled;\n this.hideEmail = send.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendTextApi();\n this.text.text = send.text.text != null ? send.text.text.encryptedString : null;\n this.text.hidden = send.text.hidden;\n break;\n case SendType.File:\n this.file = new SendFileApi();\n this.file.fileName = send.file.fileName != null ? send.file.fileName.encryptedString : null;\n break;\n default:\n break;\n }\n }\n}\n","import { Send } from \"../domain/send\";\n\nimport { SendRequest } from \"./sendRequest\";\n\nexport class SendWithIdRequest extends SendRequest {\n id: string;\n\n constructor(send: Send) {\n super(send);\n this.id = send.id;\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { KeysRequest } from \"./keysRequest\";\n\nexport class SetPasswordRequest {\n masterPasswordHash: string;\n key: string;\n masterPasswordHint: string;\n keys: KeysRequest;\n kdf: KdfType;\n kdfIterations: number;\n orgIdentifier: string;\n\n constructor(\n masterPasswordHash: string,\n key: string,\n masterPasswordHint: string,\n kdf: KdfType,\n kdfIterations: number,\n orgIdentifier: string,\n keys: KeysRequest\n ) {\n this.masterPasswordHash = masterPasswordHash;\n this.key = key;\n this.masterPasswordHint = masterPasswordHint;\n this.kdf = kdf;\n this.kdfIterations = kdfIterations;\n this.orgIdentifier = orgIdentifier;\n this.keys = keys;\n }\n}\n","export class StorageRequest {\n storageGbAdjustment: number;\n}\n","export class TaxInfoUpdateRequest {\n country: string;\n postalCode: string;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class TwoFactorEmailRequest extends SecretVerificationRequest {\n email: string;\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class TwoFactorProviderRequest extends SecretVerificationRequest {\n type: TwoFactorProviderType;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class TwoFactorRecoveryRequest extends SecretVerificationRequest {\n recoveryCode: string;\n email: string;\n}\n","export class UpdateDomainsRequest {\n equivalentDomains: string[][];\n excludedGlobalEquivalentDomains: number[];\n}\n","import { CipherWithIdRequest } from \"./cipherWithIdRequest\";\nimport { FolderWithIdRequest } from \"./folderWithIdRequest\";\nimport { SendWithIdRequest } from \"./sendWithIdRequest\";\n\nexport class UpdateKeyRequest {\n ciphers: CipherWithIdRequest[] = [];\n folders: FolderWithIdRequest[] = [];\n sends: SendWithIdRequest[] = [];\n masterPasswordHash: string;\n privateKey: string;\n key: string;\n}\n","export class UpdateProfileRequest {\n name: string;\n masterPasswordHint: string;\n culture = \"en-US\"; // deprecated\n\n constructor(name: string, masterPasswordHint: string) {\n this.name = name;\n this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null;\n }\n}\n","import { OrganizationUserResetPasswordRequest } from \"./organizationUserResetPasswordRequest\";\n\nexport class UpdateTempPasswordRequest extends OrganizationUserResetPasswordRequest {\n masterPasswordHint: string;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorAuthenticatorRequest extends SecretVerificationRequest {\n token: string;\n key: string;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorDuoRequest extends SecretVerificationRequest {\n integrationKey: string;\n secretKey: string;\n host: string;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorEmailRequest extends SecretVerificationRequest {\n token: string;\n email: string;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorWebAuthnDeleteRequest extends SecretVerificationRequest {\n id: number;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorWebAuthnRequest extends SecretVerificationRequest {\n deviceResponse: PublicKeyCredential;\n name: string;\n id: number;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorYubioOtpRequest extends SecretVerificationRequest {\n key1: string;\n key2: string;\n key3: string;\n key4: string;\n key5: string;\n nfc: boolean;\n}\n","export class VerifyBankRequest {\n amount1: number;\n amount2: number;\n}\n","export class VerifyDeleteRecoverRequest {\n userId: string;\n token: string;\n\n constructor(userId: string, token: string) {\n this.userId = userId;\n this.token = token;\n }\n}\n","export class VerifyEmailRequest {\n userId: string;\n token: string;\n\n constructor(userId: string, token: string) {\n this.userId = userId;\n this.token = token;\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class ApiKeyResponse extends BaseResponse {\n apiKey: string;\n\n constructor(response: any) {\n super(response);\n this.apiKey = this.getResponseProperty(\"ApiKey\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class AttachmentResponse extends BaseResponse {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.url = this.getResponseProperty(\"Url\");\n this.fileName = this.getResponseProperty(\"FileName\");\n this.key = this.getResponseProperty(\"Key\");\n this.size = this.getResponseProperty(\"Size\");\n this.sizeName = this.getResponseProperty(\"SizeName\");\n }\n}\n","import { FileUploadType } from \"../../enums/fileUploadType\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { CipherResponse } from \"./cipherResponse\";\n\nexport class AttachmentUploadDataResponse extends BaseResponse {\n attachmentId: string;\n fileUploadType: FileUploadType;\n cipherResponse: CipherResponse;\n cipherMiniResponse: CipherResponse;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.attachmentId = this.getResponseProperty(\"AttachmentId\");\n this.fileUploadType = this.getResponseProperty(\"FileUploadType\");\n const cipherResponse = this.getResponseProperty(\"CipherResponse\");\n const cipherMiniResponse = this.getResponseProperty(\"CipherMiniResponse\");\n this.cipherResponse = cipherResponse == null ? null : new CipherResponse(cipherResponse);\n this.cipherMiniResponse =\n cipherMiniResponse == null ? null : new CipherResponse(cipherMiniResponse);\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","export abstract class BaseResponse {\n private response: any;\n\n constructor(response: any) {\n this.response = response;\n }\n\n protected getResponseProperty(\n propertyName: string,\n response: any = null,\n exactName = false\n ): any {\n if (propertyName == null || propertyName === \"\") {\n throw new Error(\"propertyName must not be null/empty.\");\n }\n if (response == null && this.response != null) {\n response = this.response;\n }\n if (response == null) {\n return null;\n }\n if (!exactName && response[propertyName] === undefined) {\n let otherCasePropertyName: string = null;\n if (propertyName.charAt(0) === propertyName.charAt(0).toUpperCase()) {\n otherCasePropertyName = propertyName.charAt(0).toLowerCase();\n } else {\n otherCasePropertyName = propertyName.charAt(0).toUpperCase();\n }\n if (propertyName.length > 1) {\n otherCasePropertyName += propertyName.slice(1);\n }\n\n propertyName = otherCasePropertyName;\n if (response[propertyName] === undefined) {\n propertyName = propertyName.toLowerCase();\n }\n if (response[propertyName] === undefined) {\n propertyName = propertyName.toUpperCase();\n }\n }\n return response[propertyName];\n }\n}\n","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\nimport { TransactionType } from \"../../enums/transactionType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class BillingResponse extends BaseResponse {\n balance: number;\n paymentSource: BillingSourceResponse;\n invoices: BillingInvoiceResponse[] = [];\n transactions: BillingTransactionResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.balance = this.getResponseProperty(\"Balance\");\n const paymentSource = this.getResponseProperty(\"PaymentSource\");\n const transactions = this.getResponseProperty(\"Transactions\");\n const invoices = this.getResponseProperty(\"Invoices\");\n this.paymentSource = paymentSource == null ? null : new BillingSourceResponse(paymentSource);\n if (transactions != null) {\n this.transactions = transactions.map((t: any) => new BillingTransactionResponse(t));\n }\n if (invoices != null) {\n this.invoices = invoices.map((i: any) => new BillingInvoiceResponse(i));\n }\n }\n}\n\nexport class BillingSourceResponse extends BaseResponse {\n type: PaymentMethodType;\n cardBrand: string;\n description: string;\n needsVerification: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.cardBrand = this.getResponseProperty(\"CardBrand\");\n this.description = this.getResponseProperty(\"Description\");\n this.needsVerification = this.getResponseProperty(\"NeedsVerification\");\n }\n}\n\nexport class BillingInvoiceResponse extends BaseResponse {\n url: string;\n pdfUrl: string;\n number: string;\n paid: boolean;\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.url = this.getResponseProperty(\"Url\");\n this.pdfUrl = this.getResponseProperty(\"PdfUrl\");\n this.number = this.getResponseProperty(\"Number\");\n this.paid = this.getResponseProperty(\"Paid\");\n this.date = this.getResponseProperty(\"Date\");\n this.amount = this.getResponseProperty(\"Amount\");\n }\n}\n\nexport class BillingTransactionResponse extends BaseResponse {\n createdDate: string;\n amount: number;\n refunded: boolean;\n partiallyRefunded: boolean;\n refundedAmount: number;\n type: TransactionType;\n paymentMethodType: PaymentMethodType;\n details: string;\n\n constructor(response: any) {\n super(response);\n this.createdDate = this.getResponseProperty(\"CreatedDate\");\n this.amount = this.getResponseProperty(\"Amount\");\n this.refunded = this.getResponseProperty(\"Refunded\");\n this.partiallyRefunded = this.getResponseProperty(\"PartiallyRefunded\");\n this.refundedAmount = this.getResponseProperty(\"RefundedAmount\");\n this.type = this.getResponseProperty(\"Type\");\n this.paymentMethodType = this.getResponseProperty(\"PaymentMethodType\");\n this.details = this.getResponseProperty(\"Details\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class BreachAccountResponse extends BaseResponse {\n addedDate: string;\n breachDate: string;\n dataClasses: string[];\n description: string;\n domain: string;\n isActive: boolean;\n isVerified: boolean;\n logoPath: string;\n modifiedDate: string;\n name: string;\n pwnCount: number;\n title: string;\n\n constructor(response: any) {\n super(response);\n this.addedDate = this.getResponseProperty(\"AddedDate\");\n this.breachDate = this.getResponseProperty(\"BreachDate\");\n this.dataClasses = this.getResponseProperty(\"DataClasses\");\n this.description = this.getResponseProperty(\"Description\");\n this.domain = this.getResponseProperty(\"Domain\");\n this.isActive = this.getResponseProperty(\"IsActive\");\n this.isVerified = this.getResponseProperty(\"IsVerified\");\n this.logoPath = this.getResponseProperty(\"LogoPath\");\n this.modifiedDate = this.getResponseProperty(\"ModifiedDate\");\n this.name = this.getResponseProperty(\"Name\");\n this.pwnCount = this.getResponseProperty(\"PwnCount\");\n this.title = this.getResponseProperty(\"Title\");\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CardApi } from \"../api/cardApi\";\nimport { FieldApi } from \"../api/fieldApi\";\nimport { IdentityApi } from \"../api/identityApi\";\nimport { LoginApi } from \"../api/loginApi\";\nimport { SecureNoteApi } from \"../api/secureNoteApi\";\n\nimport { AttachmentResponse } from \"./attachmentResponse\";\nimport { BaseResponse } from \"./baseResponse\";\nimport { PasswordHistoryResponse } from \"./passwordHistoryResponse\";\n\nexport class CipherResponse extends BaseResponse {\n id: string;\n organizationId: string;\n folderId: string;\n type: number;\n name: string;\n notes: string;\n fields: FieldApi[];\n login: LoginApi;\n card: CardApi;\n identity: IdentityApi;\n secureNote: SecureNoteApi;\n favorite: boolean;\n edit: boolean;\n viewPassword: boolean;\n organizationUseTotp: boolean;\n revisionDate: string;\n attachments: AttachmentResponse[];\n passwordHistory: PasswordHistoryResponse[];\n collectionIds: string[];\n deletedDate: string;\n reprompt: CipherRepromptType;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.folderId = this.getResponseProperty(\"FolderId\") || null;\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.notes = this.getResponseProperty(\"Notes\");\n this.favorite = this.getResponseProperty(\"Favorite\") || false;\n this.edit = !!this.getResponseProperty(\"Edit\");\n if (this.getResponseProperty(\"ViewPassword\") == null) {\n this.viewPassword = true;\n } else {\n this.viewPassword = this.getResponseProperty(\"ViewPassword\");\n }\n this.organizationUseTotp = this.getResponseProperty(\"OrganizationUseTotp\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n this.collectionIds = this.getResponseProperty(\"CollectionIds\");\n this.deletedDate = this.getResponseProperty(\"DeletedDate\");\n\n const login = this.getResponseProperty(\"Login\");\n if (login != null) {\n this.login = new LoginApi(login);\n }\n\n const card = this.getResponseProperty(\"Card\");\n if (card != null) {\n this.card = new CardApi(card);\n }\n\n const identity = this.getResponseProperty(\"Identity\");\n if (identity != null) {\n this.identity = new IdentityApi(identity);\n }\n\n const secureNote = this.getResponseProperty(\"SecureNote\");\n if (secureNote != null) {\n this.secureNote = new SecureNoteApi(secureNote);\n }\n\n const fields = this.getResponseProperty(\"Fields\");\n if (fields != null) {\n this.fields = fields.map((f: any) => new FieldApi(f));\n }\n\n const attachments = this.getResponseProperty(\"Attachments\");\n if (attachments != null) {\n this.attachments = attachments.map((a: any) => new AttachmentResponse(a));\n }\n\n const passwordHistory = this.getResponseProperty(\"PasswordHistory\");\n if (passwordHistory != null) {\n this.passwordHistory = passwordHistory.map((h: any) => new PasswordHistoryResponse(h));\n }\n\n this.reprompt = this.getResponseProperty(\"Reprompt\") || CipherRepromptType.None;\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { SelectionReadOnlyResponse } from \"./selectionReadOnlyResponse\";\n\nexport class CollectionResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.name = this.getResponseProperty(\"Name\");\n this.externalId = this.getResponseProperty(\"ExternalId\");\n }\n}\n\nexport class CollectionDetailsResponse extends CollectionResponse {\n readOnly: boolean;\n\n constructor(response: any) {\n super(response);\n this.readOnly = this.getResponseProperty(\"ReadOnly\") || false;\n }\n}\n\nexport class CollectionGroupDetailsResponse extends CollectionResponse {\n groups: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const groups = this.getResponseProperty(\"Groups\");\n if (groups != null) {\n this.groups = groups.map((g: any) => new SelectionReadOnlyResponse(g));\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { GlobalDomainResponse } from \"./globalDomainResponse\";\n\nexport class DomainsResponse extends BaseResponse {\n equivalentDomains: string[][];\n globalEquivalentDomains: GlobalDomainResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.equivalentDomains = this.getResponseProperty(\"EquivalentDomains\");\n const globalEquivalentDomains = this.getResponseProperty(\"GlobalEquivalentDomains\");\n if (globalEquivalentDomains != null) {\n this.globalEquivalentDomains = globalEquivalentDomains.map(\n (d: any) => new GlobalDomainResponse(d)\n );\n } else {\n this.globalEquivalentDomains = [];\n }\n }\n}\n","import { EmergencyAccessStatusType } from \"../../enums/emergencyAccessStatusType\";\nimport { EmergencyAccessType } from \"../../enums/emergencyAccessType\";\nimport { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { CipherResponse } from \"./cipherResponse\";\n\nexport class EmergencyAccessGranteeDetailsResponse extends BaseResponse {\n id: string;\n granteeId: string;\n name: string;\n email: string;\n type: EmergencyAccessType;\n status: EmergencyAccessStatusType;\n waitTimeDays: number;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.granteeId = this.getResponseProperty(\"GranteeId\");\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.waitTimeDays = this.getResponseProperty(\"WaitTimeDays\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n }\n}\n\nexport class EmergencyAccessGrantorDetailsResponse extends BaseResponse {\n id: string;\n grantorId: string;\n name: string;\n email: string;\n type: EmergencyAccessType;\n status: EmergencyAccessStatusType;\n waitTimeDays: number;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.grantorId = this.getResponseProperty(\"GrantorId\");\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.waitTimeDays = this.getResponseProperty(\"WaitTimeDays\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n }\n}\n\nexport class EmergencyAccessTakeoverResponse extends BaseResponse {\n keyEncrypted: string;\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n\n this.keyEncrypted = this.getResponseProperty(\"KeyEncrypted\");\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n }\n}\n\nexport class EmergencyAccessViewResponse extends BaseResponse {\n keyEncrypted: string;\n ciphers: CipherResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n this.keyEncrypted = this.getResponseProperty(\"KeyEncrypted\");\n\n const ciphers = this.getResponseProperty(\"Ciphers\");\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n }\n}\n","import { Utils } from \"../../misc/utils\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class ErrorResponse extends BaseResponse {\n message: string;\n validationErrors: { [key: string]: string[] };\n statusCode: number;\n captchaRequired: boolean;\n captchaSiteKey: string;\n\n constructor(response: any, status: number, identityResponse?: boolean) {\n super(response);\n let errorModel = null;\n if (response != null) {\n const responseErrorModel = this.getResponseProperty(\"ErrorModel\");\n if (responseErrorModel && identityResponse) {\n errorModel = responseErrorModel;\n } else {\n errorModel = response;\n }\n }\n\n if (errorModel) {\n this.message = this.getResponseProperty(\"Message\", errorModel);\n this.validationErrors = this.getResponseProperty(\"ValidationErrors\", errorModel);\n this.captchaSiteKey = this.validationErrors?.HCaptcha_SiteKey?.[0];\n this.captchaRequired = !Utils.isNullOrWhitespace(this.captchaSiteKey);\n } else {\n if (status === 429) {\n this.message = \"Rate limit exceeded. Try again later.\";\n }\n }\n this.statusCode = status;\n }\n\n getSingleMessage(): string {\n if (this.validationErrors == null) {\n return this.message;\n }\n for (const key in this.validationErrors) {\n // eslint-disable-next-line\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n if (this.validationErrors[key].length) {\n return this.validationErrors[key][0];\n }\n }\n return this.message;\n }\n\n getAllMessages(): string[] {\n const messages: string[] = [];\n if (this.validationErrors == null) {\n return messages;\n }\n for (const key in this.validationErrors) {\n // eslint-disable-next-line\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n this.validationErrors[key].forEach((item: string) => {\n let prefix = \"\";\n if (key.indexOf(\"[\") > -1 && key.indexOf(\"]\") > -1) {\n const lastSep = key.lastIndexOf(\".\");\n prefix = key.substr(0, lastSep > -1 ? lastSep : key.length) + \": \";\n }\n messages.push(prefix + item);\n });\n }\n return messages;\n }\n}\n","import { DeviceType } from \"../../enums/deviceType\";\nimport { EventType } from \"../../enums/eventType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class EventResponse extends BaseResponse {\n type: EventType;\n userId: string;\n organizationId: string;\n providerId: string;\n cipherId: string;\n collectionId: string;\n groupId: string;\n policyId: string;\n organizationUserId: string;\n providerUserId: string;\n providerOrganizationId: string;\n actingUserId: string;\n date: string;\n deviceType: DeviceType;\n ipAddress: string;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.cipherId = this.getResponseProperty(\"CipherId\");\n this.collectionId = this.getResponseProperty(\"CollectionId\");\n this.groupId = this.getResponseProperty(\"GroupId\");\n this.policyId = this.getResponseProperty(\"PolicyId\");\n this.organizationUserId = this.getResponseProperty(\"OrganizationUserId\");\n this.providerUserId = this.getResponseProperty(\"ProviderUserId\");\n this.providerOrganizationId = this.getResponseProperty(\"ProviderOrganizationId\");\n this.actingUserId = this.getResponseProperty(\"ActingUserId\");\n this.date = this.getResponseProperty(\"Date\");\n this.deviceType = this.getResponseProperty(\"DeviceType\");\n this.ipAddress = this.getResponseProperty(\"IpAddress\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class FolderResponse extends BaseResponse {\n id: string;\n name: string;\n revisionDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class GlobalDomainResponse extends BaseResponse {\n type: number;\n domains: string[];\n excluded: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.domains = this.getResponseProperty(\"Domains\");\n this.excluded = this.getResponseProperty(\"Excluded\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { SelectionReadOnlyResponse } from \"./selectionReadOnlyResponse\";\n\nexport class GroupResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n accessAll: boolean;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.name = this.getResponseProperty(\"Name\");\n this.accessAll = this.getResponseProperty(\"AccessAll\");\n this.externalId = this.getResponseProperty(\"ExternalId\");\n }\n}\n\nexport class GroupDetailsResponse extends GroupResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class IdentityCaptchaResponse extends BaseResponse {\n siteKey: string;\n\n constructor(response: any) {\n super(response);\n this.siteKey = this.getResponseProperty(\"HCaptcha_SiteKey\");\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class IdentityTokenResponse extends BaseResponse {\n accessToken: string;\n expiresIn: number;\n refreshToken: string;\n tokenType: string;\n\n resetMasterPassword: boolean;\n privateKey: string;\n key: string;\n twoFactorToken: string;\n kdf: KdfType;\n kdfIterations: number;\n forcePasswordReset: boolean;\n apiUseKeyConnector: boolean;\n keyConnectorUrl: string;\n\n constructor(response: any) {\n super(response);\n this.accessToken = response.access_token;\n this.expiresIn = response.expires_in;\n this.refreshToken = response.refresh_token;\n this.tokenType = response.token_type;\n\n this.resetMasterPassword = this.getResponseProperty(\"ResetMasterPassword\");\n this.privateKey = this.getResponseProperty(\"PrivateKey\");\n this.key = this.getResponseProperty(\"Key\");\n this.twoFactorToken = this.getResponseProperty(\"TwoFactorToken\");\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n this.forcePasswordReset = this.getResponseProperty(\"ForcePasswordReset\");\n this.apiUseKeyConnector = this.getResponseProperty(\"ApiUseKeyConnector\");\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n }\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class IdentityTwoFactorResponse extends BaseResponse {\n twoFactorProviders: TwoFactorProviderType[];\n twoFactorProviders2 = new Map();\n captchaToken: string;\n\n constructor(response: any) {\n super(response);\n this.captchaToken = this.getResponseProperty(\"CaptchaBypassToken\");\n this.twoFactorProviders = this.getResponseProperty(\"TwoFactorProviders\");\n const twoFactorProviders2 = this.getResponseProperty(\"TwoFactorProviders2\");\n if (twoFactorProviders2 != null) {\n for (const prop in twoFactorProviders2) {\n // eslint-disable-next-line\n if (twoFactorProviders2.hasOwnProperty(prop)) {\n this.twoFactorProviders2.set(parseInt(prop, null), twoFactorProviders2[prop]);\n }\n }\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class KeyConnectorUserKeyResponse extends BaseResponse {\n key: string;\n\n constructor(response: any) {\n super(response);\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class KeysResponse extends BaseResponse {\n privateKey: string;\n publicKey: string;\n\n constructor(response: any) {\n super(response);\n this.privateKey = this.getResponseProperty(\"PrivateKey\");\n this.publicKey = this.getResponseProperty(\"PublicKey\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class ListResponse extends BaseResponse {\n data: T[];\n continuationToken: string;\n\n constructor(response: any, t: new (dataResponse: any) => T) {\n super(response);\n const data = this.getResponseProperty(\"Data\");\n this.data = data == null ? [] : data.map((dr: any) => new t(dr));\n this.continuationToken = this.getResponseProperty(\"ContinuationToken\");\n }\n}\n","import { NotificationType } from \"../../enums/notificationType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class NotificationResponse extends BaseResponse {\n contextId: string;\n type: NotificationType;\n payload: any;\n\n constructor(response: any) {\n super(response);\n this.contextId = this.getResponseProperty(\"ContextId\");\n this.type = this.getResponseProperty(\"Type\");\n\n const payload = this.getResponseProperty(\"Payload\");\n switch (this.type) {\n case NotificationType.SyncCipherCreate:\n case NotificationType.SyncCipherDelete:\n case NotificationType.SyncCipherUpdate:\n case NotificationType.SyncLoginDelete:\n this.payload = new SyncCipherNotification(payload);\n break;\n case NotificationType.SyncFolderCreate:\n case NotificationType.SyncFolderDelete:\n case NotificationType.SyncFolderUpdate:\n this.payload = new SyncFolderNotification(payload);\n break;\n case NotificationType.SyncVault:\n case NotificationType.SyncCiphers:\n case NotificationType.SyncOrgKeys:\n case NotificationType.SyncSettings:\n case NotificationType.LogOut:\n this.payload = new UserNotification(payload);\n break;\n case NotificationType.SyncSendCreate:\n case NotificationType.SyncSendUpdate:\n case NotificationType.SyncSendDelete:\n this.payload = new SyncSendNotification(payload);\n break;\n default:\n break;\n }\n }\n}\n\nexport class SyncCipherNotification extends BaseResponse {\n id: string;\n userId: string;\n organizationId: string;\n collectionIds: string[];\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.collectionIds = this.getResponseProperty(\"CollectionIds\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n\nexport class SyncFolderNotification extends BaseResponse {\n id: string;\n userId: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n\nexport class UserNotification extends BaseResponse {\n userId: string;\n date: Date;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty(\"UserId\");\n this.date = new Date(this.getResponseProperty(\"Date\"));\n }\n}\n\nexport class SyncSendNotification extends BaseResponse {\n id: string;\n userId: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n","import { SsoConfigApi } from \"../../api/ssoConfigApi\";\nimport { BaseResponse } from \"../baseResponse\";\n\nexport class OrganizationSsoResponse extends BaseResponse {\n enabled: boolean;\n data: SsoConfigApi;\n urls: SsoUrls;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.data =\n this.getResponseProperty(\"Data\") != null\n ? new SsoConfigApi(this.getResponseProperty(\"Data\"))\n : null;\n this.urls = new SsoUrls(this.getResponseProperty(\"Urls\"));\n }\n}\n\nclass SsoUrls extends BaseResponse {\n callbackPath: string;\n signedOutCallbackPath: string;\n spEntityId: string;\n spMetadataUrl: string;\n spAcsUrl: string;\n\n constructor(response: any) {\n super(response);\n this.callbackPath = this.getResponseProperty(\"CallbackPath\");\n this.signedOutCallbackPath = this.getResponseProperty(\"SignedOutCallbackPath\");\n this.spEntityId = this.getResponseProperty(\"SpEntityId\");\n this.spMetadataUrl = this.getResponseProperty(\"SpMetadataUrl\");\n this.spAcsUrl = this.getResponseProperty(\"SpAcsUrl\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class OrganizationAutoEnrollStatusResponse extends BaseResponse {\n id: string;\n resetPasswordEnabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.resetPasswordEnabled = this.getResponseProperty(\"ResetPasswordEnabled\");\n }\n}\n","import { KeysResponse } from \"./keysResponse\";\n\nexport class OrganizationKeysResponse extends KeysResponse {\n constructor(response: any) {\n super(response);\n }\n}\n","import { PlanType } from \"../../enums/planType\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { PlanResponse } from \"./planResponse\";\n\nexport class OrganizationResponse extends BaseResponse {\n id: string;\n identifier: string;\n name: string;\n businessName: string;\n businessAddress1: string;\n businessAddress2: string;\n businessAddress3: string;\n businessCountry: string;\n businessTaxNumber: string;\n billingEmail: string;\n plan: PlanResponse;\n planType: PlanType;\n seats: number;\n maxAutoscaleSeats: number;\n maxCollections: number;\n maxStorageGb: number;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useResetPassword: boolean;\n hasPublicAndPrivateKeys: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.identifier = this.getResponseProperty(\"Identifier\");\n this.name = this.getResponseProperty(\"Name\");\n this.businessName = this.getResponseProperty(\"BusinessName\");\n this.businessAddress1 = this.getResponseProperty(\"BusinessAddress1\");\n this.businessAddress2 = this.getResponseProperty(\"BusinessAddress2\");\n this.businessAddress3 = this.getResponseProperty(\"BusinessAddress3\");\n this.businessCountry = this.getResponseProperty(\"BusinessCountry\");\n this.businessTaxNumber = this.getResponseProperty(\"BusinessTaxNumber\");\n this.billingEmail = this.getResponseProperty(\"BillingEmail\");\n const plan = this.getResponseProperty(\"Plan\");\n this.plan = plan == null ? null : new PlanResponse(plan);\n this.planType = this.getResponseProperty(\"PlanType\");\n this.seats = this.getResponseProperty(\"Seats\");\n this.maxAutoscaleSeats = this.getResponseProperty(\"MaxAutoscaleSeats\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.useGroups = this.getResponseProperty(\"UseGroups\");\n this.useDirectory = this.getResponseProperty(\"UseDirectory\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n this.useTotp = this.getResponseProperty(\"UseTotp\");\n this.use2fa = this.getResponseProperty(\"Use2fa\");\n this.useApi = this.getResponseProperty(\"UseApi\");\n this.useResetPassword = this.getResponseProperty(\"UseResetPassword\");\n this.hasPublicAndPrivateKeys = this.getResponseProperty(\"HasPublicAndPrivateKeys\");\n }\n}\n","import { OrganizationResponse } from \"./organizationResponse\";\nimport {\n BillingSubscriptionResponse,\n BillingSubscriptionUpcomingInvoiceResponse,\n} from \"./subscriptionResponse\";\n\nexport class OrganizationSubscriptionResponse extends OrganizationResponse {\n storageName: string;\n storageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n expiration: string;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty(\"StorageName\");\n this.storageGb = this.getResponseProperty(\"StorageGb\");\n const subscription = this.getResponseProperty(\"Subscription\");\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n const upcomingInvoice = this.getResponseProperty(\"UpcomingInvoice\");\n this.upcomingInvoice =\n upcomingInvoice == null\n ? null\n : new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n this.expiration = this.getResponseProperty(\"Expiration\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class OrganizationUserBulkPublicKeyResponse extends BaseResponse {\n id: string;\n userId: string;\n key: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class OrganizationUserBulkResponse extends BaseResponse {\n id: string;\n error: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.error = this.getResponseProperty(\"Error\");\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\nimport { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { SelectionReadOnlyResponse } from \"./selectionReadOnlyResponse\";\n\nexport class OrganizationUserResponse extends BaseResponse {\n id: string;\n userId: string;\n type: OrganizationUserType;\n status: OrganizationUserStatusType;\n accessAll: boolean;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"Permissions\"));\n this.accessAll = this.getResponseProperty(\"AccessAll\");\n this.resetPasswordEnrolled = this.getResponseProperty(\"ResetPasswordEnrolled\");\n }\n}\n\nexport class OrganizationUserUserDetailsResponse extends OrganizationUserResponse {\n name: string;\n email: string;\n twoFactorEnabled: boolean;\n usesKeyConnector: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.twoFactorEnabled = this.getResponseProperty(\"TwoFactorEnabled\");\n this.usesKeyConnector = this.getResponseProperty(\"UsesKeyConnector\") ?? false;\n }\n}\n\nexport class OrganizationUserDetailsResponse extends OrganizationUserResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n\nexport class OrganizationUserResetPasswordDetailsReponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n resetPasswordKey: string;\n encryptedPrivateKey: string;\n\n constructor(response: any) {\n super(response);\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n this.resetPasswordKey = this.getResponseProperty(\"ResetPasswordKey\");\n this.encryptedPrivateKey = this.getResponseProperty(\"EncryptedPrivateKey\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class PasswordHistoryResponse extends BaseResponse {\n password: string;\n lastUsedDate: string;\n\n constructor(response: any) {\n super(response);\n this.password = this.getResponseProperty(\"Password\");\n this.lastUsedDate = this.getResponseProperty(\"LastUsedDate\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { ProfileResponse } from \"./profileResponse\";\n\nexport class PaymentResponse extends BaseResponse {\n userProfile: ProfileResponse;\n paymentIntentClientSecret: string;\n success: boolean;\n\n constructor(response: any) {\n super(response);\n const userProfile = this.getResponseProperty(\"UserProfile\");\n if (userProfile != null) {\n this.userProfile = new ProfileResponse(userProfile);\n }\n this.paymentIntentClientSecret = this.getResponseProperty(\"PaymentIntentClientSecret\");\n this.success = this.getResponseProperty(\"Success\");\n }\n}\n","import { PlanType } from \"../../enums/planType\";\nimport { ProductType } from \"../../enums/productType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class PlanResponse extends BaseResponse {\n type: PlanType;\n product: ProductType;\n name: string;\n isAnnual: boolean;\n nameLocalizationKey: string;\n descriptionLocalizationKey: string;\n canBeUsedByBusiness: boolean;\n baseSeats: number;\n baseStorageGb: number;\n maxCollections: number;\n maxUsers: number;\n\n hasAdditionalSeatsOption: boolean;\n maxAdditionalSeats: number;\n hasAdditionalStorageOption: boolean;\n maxAdditionalStorage: number;\n hasPremiumAccessOption: boolean;\n trialPeriodDays: number;\n\n hasSelfHost: boolean;\n hasPolicies: boolean;\n hasGroups: boolean;\n hasDirectory: boolean;\n hasEvents: boolean;\n hasTotp: boolean;\n has2fa: boolean;\n hasApi: boolean;\n hasSso: boolean;\n hasResetPassword: boolean;\n usersGetPremium: boolean;\n\n upgradeSortOrder: number;\n displaySortOrder: number;\n legacyYear: number;\n disabled: boolean;\n\n stripePlanId: string;\n stripeSeatPlanId: string;\n stripeStoragePlanId: string;\n stripePremiumAccessPlanId: string;\n basePrice: number;\n seatPrice: number;\n additionalStoragePricePerGb: number;\n premiumAccessOptionPrice: number;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.product = this.getResponseProperty(\"Product\");\n this.name = this.getResponseProperty(\"Name\");\n this.isAnnual = this.getResponseProperty(\"IsAnnual\");\n this.nameLocalizationKey = this.getResponseProperty(\"NameLocalizationKey\");\n this.descriptionLocalizationKey = this.getResponseProperty(\"DescriptionLocalizationKey\");\n this.canBeUsedByBusiness = this.getResponseProperty(\"CanBeUsedByBusiness\");\n this.baseSeats = this.getResponseProperty(\"BaseSeats\");\n this.baseStorageGb = this.getResponseProperty(\"BaseStorageGb\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxUsers = this.getResponseProperty(\"MaxUsers\");\n this.hasAdditionalSeatsOption = this.getResponseProperty(\"HasAdditionalSeatsOption\");\n this.maxAdditionalSeats = this.getResponseProperty(\"MaxAdditionalSeats\");\n this.hasAdditionalStorageOption = this.getResponseProperty(\"HasAdditionalStorageOption\");\n this.maxAdditionalStorage = this.getResponseProperty(\"MaxAdditionalStorage\");\n this.hasPremiumAccessOption = this.getResponseProperty(\"HasPremiumAccessOption\");\n this.trialPeriodDays = this.getResponseProperty(\"TrialPeriodDays\");\n this.hasSelfHost = this.getResponseProperty(\"HasSelfHost\");\n this.hasPolicies = this.getResponseProperty(\"HasPolicies\");\n this.hasGroups = this.getResponseProperty(\"HasGroups\");\n this.hasDirectory = this.getResponseProperty(\"HasDirectory\");\n this.hasEvents = this.getResponseProperty(\"HasEvents\");\n this.hasTotp = this.getResponseProperty(\"HasTotp\");\n this.has2fa = this.getResponseProperty(\"Has2fa\");\n this.hasApi = this.getResponseProperty(\"HasApi\");\n this.hasSso = this.getResponseProperty(\"HasSso\");\n this.hasResetPassword = this.getResponseProperty(\"HasResetPassword\");\n this.usersGetPremium = this.getResponseProperty(\"UsersGetPremium\");\n this.upgradeSortOrder = this.getResponseProperty(\"UpgradeSortOrder\");\n this.displaySortOrder = this.getResponseProperty(\"SortOrder\");\n this.legacyYear = this.getResponseProperty(\"LegacyYear\");\n this.disabled = this.getResponseProperty(\"Disabled\");\n this.stripePlanId = this.getResponseProperty(\"StripePlanId\");\n this.stripeSeatPlanId = this.getResponseProperty(\"StripeSeatPlanId\");\n this.stripeStoragePlanId = this.getResponseProperty(\"StripeStoragePlanId\");\n this.stripePremiumAccessPlanId = this.getResponseProperty(\"StripePremiumAccessPlanId\");\n this.basePrice = this.getResponseProperty(\"BasePrice\");\n this.seatPrice = this.getResponseProperty(\"SeatPrice\");\n this.additionalStoragePricePerGb = this.getResponseProperty(\"AdditionalStoragePricePerGb\");\n this.premiumAccessOptionPrice = this.getResponseProperty(\"PremiumAccessOptionPrice\");\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class PolicyResponse extends BaseResponse {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.type = this.getResponseProperty(\"Type\");\n this.data = this.getResponseProperty(\"Data\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class PreloginResponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n }\n}\n","import { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class ProfileOrganizationResponse extends BaseResponse {\n id: string;\n name: string;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useResetPassword: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n key: string;\n hasPublicAndPrivateKeys: boolean;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n providerId: string;\n providerName: string;\n familySponsorshipFriendlyName: string;\n familySponsorshipAvailable: boolean;\n planProductType: ProductType;\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.usePolicies = this.getResponseProperty(\"UsePolicies\");\n this.useGroups = this.getResponseProperty(\"UseGroups\");\n this.useDirectory = this.getResponseProperty(\"UseDirectory\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n this.useTotp = this.getResponseProperty(\"UseTotp\");\n this.use2fa = this.getResponseProperty(\"Use2fa\");\n this.useApi = this.getResponseProperty(\"UseApi\");\n this.useSso = this.getResponseProperty(\"UseSso\");\n this.useKeyConnector = this.getResponseProperty(\"UseKeyConnector\") ?? false;\n this.useResetPassword = this.getResponseProperty(\"UseResetPassword\");\n this.selfHost = this.getResponseProperty(\"SelfHost\");\n this.usersGetPremium = this.getResponseProperty(\"UsersGetPremium\");\n this.seats = this.getResponseProperty(\"Seats\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.key = this.getResponseProperty(\"Key\");\n this.hasPublicAndPrivateKeys = this.getResponseProperty(\"HasPublicAndPrivateKeys\");\n this.status = this.getResponseProperty(\"Status\");\n this.type = this.getResponseProperty(\"Type\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.ssoBound = this.getResponseProperty(\"SsoBound\");\n this.identifier = this.getResponseProperty(\"Identifier\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"permissions\"));\n this.resetPasswordEnrolled = this.getResponseProperty(\"ResetPasswordEnrolled\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.providerName = this.getResponseProperty(\"ProviderName\");\n this.familySponsorshipFriendlyName = this.getResponseProperty(\"FamilySponsorshipFriendlyName\");\n this.familySponsorshipAvailable = this.getResponseProperty(\"FamilySponsorshipAvailable\");\n this.planProductType = this.getResponseProperty(\"PlanProductType\");\n this.keyConnectorEnabled = this.getResponseProperty(\"KeyConnectorEnabled\") ?? false;\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n }\n}\n","import { ProfileOrganizationResponse } from \"./profileOrganizationResponse\";\n\nexport class ProfileProviderOrganizationResponse extends ProfileOrganizationResponse {\n constructor(response: any) {\n super(response);\n this.keyConnectorEnabled = false;\n }\n}\n","import { ProviderUserStatusType } from \"../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../enums/providerUserType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class ProfileProviderResponse extends BaseResponse {\n id: string;\n name: string;\n key: string;\n status: ProviderUserStatusType;\n type: ProviderUserType;\n enabled: boolean;\n permissions: PermissionsApi;\n userId: string;\n useEvents: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.key = this.getResponseProperty(\"Key\");\n this.status = this.getResponseProperty(\"Status\");\n this.type = this.getResponseProperty(\"Type\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"permissions\"));\n this.userId = this.getResponseProperty(\"UserId\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { ProfileOrganizationResponse } from \"./profileOrganizationResponse\";\nimport { ProfileProviderOrganizationResponse } from \"./profileProviderOrganizationResponse\";\nimport { ProfileProviderResponse } from \"./profileProviderResponse\";\n\nexport class ProfileResponse extends BaseResponse {\n id: string;\n name: string;\n email: string;\n emailVerified: boolean;\n masterPasswordHint: string;\n premium: boolean;\n culture: string;\n twoFactorEnabled: boolean;\n key: string;\n privateKey: string;\n securityStamp: string;\n forcePasswordReset: boolean;\n usesKeyConnector: boolean;\n organizations: ProfileOrganizationResponse[] = [];\n providers: ProfileProviderResponse[] = [];\n providerOrganizations: ProfileProviderOrganizationResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.emailVerified = this.getResponseProperty(\"EmailVerified\");\n this.masterPasswordHint = this.getResponseProperty(\"MasterPasswordHint\");\n this.premium = this.getResponseProperty(\"Premium\");\n this.culture = this.getResponseProperty(\"Culture\");\n this.twoFactorEnabled = this.getResponseProperty(\"TwoFactorEnabled\");\n this.key = this.getResponseProperty(\"Key\");\n this.privateKey = this.getResponseProperty(\"PrivateKey\");\n this.securityStamp = this.getResponseProperty(\"SecurityStamp\");\n this.forcePasswordReset = this.getResponseProperty(\"ForcePasswordReset\") ?? false;\n this.usesKeyConnector = this.getResponseProperty(\"UsesKeyConnector\") ?? false;\n\n const organizations = this.getResponseProperty(\"Organizations\");\n if (organizations != null) {\n this.organizations = organizations.map((o: any) => new ProfileOrganizationResponse(o));\n }\n const providers = this.getResponseProperty(\"Providers\");\n if (providers != null) {\n this.providers = providers.map((o: any) => new ProfileProviderResponse(o));\n }\n const providerOrganizations = this.getResponseProperty(\"ProviderOrganizations\");\n if (providerOrganizations != null) {\n this.providerOrganizations = providerOrganizations.map(\n (o: any) => new ProfileProviderOrganizationResponse(o)\n );\n }\n }\n}\n","import { BaseResponse } from \"../baseResponse\";\n\nexport class ProviderOrganizationResponse extends BaseResponse {\n id: string;\n providerId: string;\n organizationId: string;\n key: string;\n settings: string;\n creationDate: string;\n revisionDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.key = this.getResponseProperty(\"Key\");\n this.settings = this.getResponseProperty(\"Settings\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n }\n}\n\nexport class ProviderOrganizationOrganizationDetailsResponse extends ProviderOrganizationResponse {\n organizationName: string;\n\n constructor(response: any) {\n super(response);\n this.organizationName = this.getResponseProperty(\"OrganizationName\");\n }\n}\n","import { BaseResponse } from \"../baseResponse\";\n\nexport class ProviderResponse extends BaseResponse {\n id: string;\n name: string;\n businessName: string;\n billingEmail: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.businessName = this.getResponseProperty(\"BusinessName\");\n this.billingEmail = this.getResponseProperty(\"BillingEmail\");\n }\n}\n","import { OrganizationUserBulkPublicKeyResponse } from \"../organizationUserBulkPublicKeyResponse\";\n\nexport class ProviderUserBulkPublicKeyResponse extends OrganizationUserBulkPublicKeyResponse {}\n","import { BaseResponse } from \"../baseResponse\";\n\nexport class ProviderUserBulkResponse extends BaseResponse {\n id: string;\n error: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.error = this.getResponseProperty(\"Error\");\n }\n}\n","import { ProviderUserStatusType } from \"../../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../../enums/providerUserType\";\nimport { PermissionsApi } from \"../../api/permissionsApi\";\nimport { BaseResponse } from \"../baseResponse\";\n\nexport class ProviderUserResponse extends BaseResponse {\n id: string;\n userId: string;\n type: ProviderUserType;\n status: ProviderUserStatusType;\n permissions: PermissionsApi;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"Permissions\"));\n }\n}\n\nexport class ProviderUserUserDetailsResponse extends ProviderUserResponse {\n name: string;\n email: string;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class SelectionReadOnlyResponse extends BaseResponse {\n id: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.readOnly = this.getResponseProperty(\"ReadOnly\");\n this.hidePasswords = this.getResponseProperty(\"HidePasswords\");\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/sendFileApi\";\nimport { SendTextApi } from \"../api/sendTextApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class SendAccessResponse extends BaseResponse {\n id: string;\n type: SendType;\n name: string;\n file: SendFileApi;\n text: SendTextApi;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n\n const text = this.getResponseProperty(\"Text\");\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty(\"File\");\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n\n this.expirationDate = this.getResponseProperty(\"ExpirationDate\");\n this.creatorIdentifier = this.getResponseProperty(\"CreatorIdentifier\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class SendFileDownloadDataResponse extends BaseResponse {\n id: string = null;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import { FileUploadType } from \"../../enums/fileUploadType\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { SendResponse } from \"./sendResponse\";\n\nexport class SendFileUploadDataResponse extends BaseResponse {\n fileUploadType: FileUploadType;\n sendResponse: SendResponse;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.fileUploadType = this.getResponseProperty(\"FileUploadType\");\n const sendResponse = this.getResponseProperty(\"SendResponse\");\n this.sendResponse = sendResponse == null ? null : new SendResponse(sendResponse);\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/sendFileApi\";\nimport { SendTextApi } from \"../api/sendTextApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class SendResponse extends BaseResponse {\n id: string;\n accessId: string;\n type: SendType;\n name: string;\n notes: string;\n file: SendFileApi;\n text: SendTextApi;\n key: string;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: string;\n expirationDate: string;\n deletionDate: string;\n password: string;\n disable: boolean;\n hideEmail: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.accessId = this.getResponseProperty(\"AccessId\");\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.notes = this.getResponseProperty(\"Notes\");\n this.key = this.getResponseProperty(\"Key\");\n this.maxAccessCount = this.getResponseProperty(\"MaxAccessCount\");\n this.accessCount = this.getResponseProperty(\"AccessCount\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n this.expirationDate = this.getResponseProperty(\"ExpirationDate\");\n this.deletionDate = this.getResponseProperty(\"DeletionDate\");\n this.password = this.getResponseProperty(\"Password\");\n this.disable = this.getResponseProperty(\"Disabled\") || false;\n this.hideEmail = this.getResponseProperty(\"HideEmail\") || false;\n\n const text = this.getResponseProperty(\"Text\");\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty(\"File\");\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class SubscriptionResponse extends BaseResponse {\n storageName: string;\n storageGb: number;\n maxStorageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n license: any;\n expiration: string;\n usingInAppPurchase: boolean;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty(\"StorageName\");\n this.storageGb = this.getResponseProperty(\"StorageGb\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.license = this.getResponseProperty(\"License\");\n this.expiration = this.getResponseProperty(\"Expiration\");\n this.usingInAppPurchase = this.getResponseProperty(\"UsingInAppPurchase\");\n const subscription = this.getResponseProperty(\"Subscription\");\n const upcomingInvoice = this.getResponseProperty(\"UpcomingInvoice\");\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n this.upcomingInvoice =\n upcomingInvoice == null\n ? null\n : new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n }\n}\n\nexport class BillingSubscriptionResponse extends BaseResponse {\n trialStartDate: string;\n trialEndDate: string;\n periodStartDate: string;\n periodEndDate: string;\n cancelledDate: string;\n cancelAtEndDate: boolean;\n status: string;\n cancelled: boolean;\n items: BillingSubscriptionItemResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.trialEndDate = this.getResponseProperty(\"TrialStartDate\");\n this.trialEndDate = this.getResponseProperty(\"TrialEndDate\");\n this.periodStartDate = this.getResponseProperty(\"PeriodStartDate\");\n this.periodEndDate = this.getResponseProperty(\"PeriodEndDate\");\n this.cancelledDate = this.getResponseProperty(\"CancelledDate\");\n this.cancelAtEndDate = this.getResponseProperty(\"CancelAtEndDate\");\n this.status = this.getResponseProperty(\"Status\");\n this.cancelled = this.getResponseProperty(\"Cancelled\");\n const items = this.getResponseProperty(\"Items\");\n if (items != null) {\n this.items = items.map((i: any) => new BillingSubscriptionItemResponse(i));\n }\n }\n}\n\nexport class BillingSubscriptionItemResponse extends BaseResponse {\n name: string;\n amount: number;\n quantity: number;\n interval: string;\n sponsoredSubscriptionItem: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.amount = this.getResponseProperty(\"Amount\");\n this.quantity = this.getResponseProperty(\"Quantity\");\n this.interval = this.getResponseProperty(\"Interval\");\n this.sponsoredSubscriptionItem = this.getResponseProperty(\"SponsoredSubscriptionItem\");\n }\n}\n\nexport class BillingSubscriptionUpcomingInvoiceResponse extends BaseResponse {\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.date = this.getResponseProperty(\"Date\");\n this.amount = this.getResponseProperty(\"Amount\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { CipherResponse } from \"./cipherResponse\";\nimport { CollectionDetailsResponse } from \"./collectionResponse\";\nimport { DomainsResponse } from \"./domainsResponse\";\nimport { FolderResponse } from \"./folderResponse\";\nimport { PolicyResponse } from \"./policyResponse\";\nimport { ProfileResponse } from \"./profileResponse\";\nimport { SendResponse } from \"./sendResponse\";\n\nexport class SyncResponse extends BaseResponse {\n profile?: ProfileResponse;\n folders: FolderResponse[] = [];\n collections: CollectionDetailsResponse[] = [];\n ciphers: CipherResponse[] = [];\n domains?: DomainsResponse;\n policies?: PolicyResponse[] = [];\n sends: SendResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n const profile = this.getResponseProperty(\"Profile\");\n if (profile != null) {\n this.profile = new ProfileResponse(profile);\n }\n\n const folders = this.getResponseProperty(\"Folders\");\n if (folders != null) {\n this.folders = folders.map((f: any) => new FolderResponse(f));\n }\n\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new CollectionDetailsResponse(c));\n }\n\n const ciphers = this.getResponseProperty(\"Ciphers\");\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n\n const domains = this.getResponseProperty(\"Domains\");\n if (domains != null) {\n this.domains = new DomainsResponse(domains);\n }\n\n const policies = this.getResponseProperty(\"Policies\");\n if (policies != null) {\n this.policies = policies.map((p: any) => new PolicyResponse(p));\n }\n\n const sends = this.getResponseProperty(\"Sends\");\n if (sends != null) {\n this.sends = sends.map((s: any) => new SendResponse(s));\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TaxInfoResponse extends BaseResponse {\n taxId: string;\n taxIdType: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n country: string;\n postalCode: string;\n\n constructor(response: any) {\n super(response);\n this.taxId = this.getResponseProperty(\"TaxIdNumber\");\n this.taxIdType = this.getResponseProperty(\"TaxIdType\");\n this.line1 = this.getResponseProperty(\"Line1\");\n this.line2 = this.getResponseProperty(\"Line2\");\n this.city = this.getResponseProperty(\"City\");\n this.state = this.getResponseProperty(\"State\");\n this.postalCode = this.getResponseProperty(\"PostalCode\");\n this.country = this.getResponseProperty(\"Country\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TaxRateResponse extends BaseResponse {\n id: string;\n country: string;\n state: string;\n postalCode: string;\n rate: number;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.country = this.getResponseProperty(\"Country\");\n this.state = this.getResponseProperty(\"State\");\n this.postalCode = this.getResponseProperty(\"PostalCode\");\n this.rate = this.getResponseProperty(\"Rate\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorAuthenticatorResponse extends BaseResponse {\n enabled: boolean;\n key: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorDuoResponse extends BaseResponse {\n enabled: boolean;\n host: string;\n secretKey: string;\n integrationKey: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.host = this.getResponseProperty(\"Host\");\n this.secretKey = this.getResponseProperty(\"SecretKey\");\n this.integrationKey = this.getResponseProperty(\"IntegrationKey\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorEmailResponse extends BaseResponse {\n enabled: boolean;\n email: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.email = this.getResponseProperty(\"Email\");\n }\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorProviderResponse extends BaseResponse {\n enabled: boolean;\n type: TwoFactorProviderType;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.type = this.getResponseProperty(\"Type\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorRecoverResponse extends BaseResponse {\n code: string;\n\n constructor(response: any) {\n super(response);\n this.code = this.getResponseProperty(\"Code\");\n }\n}\n","import { Utils } from \"../../misc/utils\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorWebAuthnResponse extends BaseResponse {\n enabled: boolean;\n keys: KeyResponse[];\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n const keys = this.getResponseProperty(\"Keys\");\n this.keys = keys == null ? null : keys.map((k: any) => new KeyResponse(k));\n }\n}\n\nexport class KeyResponse extends BaseResponse {\n name: string;\n id: number;\n migrated: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.id = this.getResponseProperty(\"Id\");\n this.migrated = this.getResponseProperty(\"Migrated\");\n }\n}\n\nexport class ChallengeResponse extends BaseResponse implements PublicKeyCredentialCreationOptions {\n attestation?: AttestationConveyancePreference;\n authenticatorSelection?: AuthenticatorSelectionCriteria;\n challenge: BufferSource;\n excludeCredentials?: PublicKeyCredentialDescriptor[];\n extensions?: AuthenticationExtensionsClientInputs;\n pubKeyCredParams: PublicKeyCredentialParameters[];\n rp: PublicKeyCredentialRpEntity;\n timeout?: number;\n user: PublicKeyCredentialUserEntity;\n\n constructor(response: any) {\n super(response);\n this.attestation = this.getResponseProperty(\"attestation\");\n this.authenticatorSelection = this.getResponseProperty(\"authenticatorSelection\");\n this.challenge = Utils.fromUrlB64ToArray(this.getResponseProperty(\"challenge\"));\n this.excludeCredentials = this.getResponseProperty(\"excludeCredentials\").map((c: any) => {\n c.id = Utils.fromUrlB64ToArray(c.id).buffer;\n return c;\n });\n this.extensions = this.getResponseProperty(\"extensions\");\n this.pubKeyCredParams = this.getResponseProperty(\"pubKeyCredParams\");\n this.rp = this.getResponseProperty(\"rp\");\n this.timeout = this.getResponseProperty(\"timeout\");\n\n const user = this.getResponseProperty(\"user\");\n user.id = Utils.fromUrlB64ToArray(user.id);\n\n this.user = user;\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorYubiKeyResponse extends BaseResponse {\n enabled: boolean;\n key1: string;\n key2: string;\n key3: string;\n key4: string;\n key5: string;\n nfc: boolean;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.key1 = this.getResponseProperty(\"Key1\");\n this.key2 = this.getResponseProperty(\"Key2\");\n this.key3 = this.getResponseProperty(\"Key3\");\n this.key4 = this.getResponseProperty(\"Key4\");\n this.key5 = this.getResponseProperty(\"Key5\");\n this.nfc = this.getResponseProperty(\"Nfc\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class UserKeyResponse extends BaseResponse {\n userId: string;\n publicKey: string;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty(\"UserId\");\n this.publicKey = this.getResponseProperty(\"PublicKey\");\n }\n}\n","import { Attachment } from \"../domain/attachment\";\nimport { SymmetricCryptoKey } from \"../domain/symmetricCryptoKey\";\n\nimport { View } from \"./view\";\n\nexport class AttachmentView implements View {\n id: string = null;\n url: string = null;\n size: string = null;\n sizeName: string = null;\n fileName: string = null;\n key: SymmetricCryptoKey = null;\n\n constructor(a?: Attachment) {\n if (!a) {\n return;\n }\n\n this.id = a.id;\n this.url = a.url;\n this.size = a.size;\n this.sizeName = a.sizeName;\n }\n\n get fileSize(): number {\n try {\n if (this.size != null) {\n return parseInt(this.size, null);\n }\n } catch {\n // Invalid file size.\n }\n return 0;\n }\n}\n","import { CardLinkedId as LinkedId } from \"../../enums/linkedIdType\";\nimport { linkedFieldOption } from \"../../misc/linkedFieldOption.decorator\";\n\nimport { ItemView } from \"./itemView\";\n\nexport class CardView extends ItemView {\n @linkedFieldOption(LinkedId.CardholderName)\n cardholderName: string = null;\n @linkedFieldOption(LinkedId.ExpMonth, \"expirationMonth\")\n expMonth: string = null;\n @linkedFieldOption(LinkedId.ExpYear, \"expirationYear\")\n expYear: string = null;\n @linkedFieldOption(LinkedId.Code, \"securityCode\")\n code: string = null;\n\n private _brand: string = null;\n private _number: string = null;\n private _subTitle: string = null;\n\n constructor() {\n super();\n }\n\n get maskedCode(): string {\n return this.code != null ? \"•\".repeat(this.code.length) : null;\n }\n\n get maskedNumber(): string {\n return this.number != null ? \"•\".repeat(this.number.length) : null;\n }\n\n @linkedFieldOption(LinkedId.Brand)\n get brand(): string {\n return this._brand;\n }\n set brand(value: string) {\n this._brand = value;\n this._subTitle = null;\n }\n\n @linkedFieldOption(LinkedId.Number)\n get number(): string {\n return this._number;\n }\n set number(value: string) {\n this._number = value;\n this._subTitle = null;\n }\n\n get subTitle(): string {\n if (this._subTitle == null) {\n this._subTitle = this.brand;\n if (this.number != null && this.number.length >= 4) {\n if (this._subTitle != null && this._subTitle !== \"\") {\n this._subTitle += \", \";\n } else {\n this._subTitle = \"\";\n }\n\n // Show last 5 on amex, last 4 for all others\n const count =\n this.number.length >= 5 && this.number.match(new RegExp(\"^3[47]\")) != null ? 5 : 4;\n this._subTitle += \"*\" + this.number.substr(this.number.length - count);\n }\n }\n return this._subTitle;\n }\n\n get expiration(): string {\n if (!this.expMonth && !this.expYear) {\n return null;\n }\n\n let exp = this.expMonth != null ? (\"0\" + this.expMonth).slice(-2) : \"__\";\n exp += \" / \" + (this.expYear != null ? this.formatYear(this.expYear) : \"____\");\n return exp;\n }\n\n private formatYear(year: string): string {\n return year.length === 2 ? \"20\" + year : year;\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { Cipher } from \"../domain/cipher\";\n\nimport { AttachmentView } from \"./attachmentView\";\nimport { CardView } from \"./cardView\";\nimport { FieldView } from \"./fieldView\";\nimport { IdentityView } from \"./identityView\";\nimport { LoginView } from \"./loginView\";\nimport { PasswordHistoryView } from \"./passwordHistoryView\";\nimport { SecureNoteView } from \"./secureNoteView\";\nimport { View } from \"./view\";\n\nexport class CipherView implements View {\n id: string = null;\n organizationId: string = null;\n folderId: string = null;\n name: string = null;\n notes: string = null;\n type: CipherType = null;\n favorite = false;\n organizationUseTotp = false;\n edit = false;\n viewPassword = true;\n localData: any;\n login = new LoginView();\n identity = new IdentityView();\n card = new CardView();\n secureNote = new SecureNoteView();\n attachments: AttachmentView[] = null;\n fields: FieldView[] = null;\n passwordHistory: PasswordHistoryView[] = null;\n collectionIds: string[] = null;\n revisionDate: Date = null;\n deletedDate: Date = null;\n reprompt: CipherRepromptType = CipherRepromptType.None;\n\n constructor(c?: Cipher) {\n if (!c) {\n return;\n }\n\n this.id = c.id;\n this.organizationId = c.organizationId;\n this.folderId = c.folderId;\n this.favorite = c.favorite;\n this.organizationUseTotp = c.organizationUseTotp;\n this.edit = c.edit;\n this.viewPassword = c.viewPassword;\n this.type = c.type;\n this.localData = c.localData;\n this.collectionIds = c.collectionIds;\n this.revisionDate = c.revisionDate;\n this.deletedDate = c.deletedDate;\n // Old locally stored ciphers might have reprompt == null. If so set it to None.\n this.reprompt = c.reprompt ?? CipherRepromptType.None;\n }\n\n private get item() {\n switch (this.type) {\n case CipherType.Login:\n return this.login;\n case CipherType.SecureNote:\n return this.secureNote;\n case CipherType.Card:\n return this.card;\n case CipherType.Identity:\n return this.identity;\n default:\n break;\n }\n\n return null;\n }\n\n get subTitle(): string {\n return this.item.subTitle;\n }\n\n get hasPasswordHistory(): boolean {\n return this.passwordHistory && this.passwordHistory.length > 0;\n }\n\n get hasAttachments(): boolean {\n return this.attachments && this.attachments.length > 0;\n }\n\n get hasOldAttachments(): boolean {\n if (this.hasAttachments) {\n for (let i = 0; i < this.attachments.length; i++) {\n if (this.attachments[i].key == null) {\n return true;\n }\n }\n }\n return false;\n }\n\n get hasFields(): boolean {\n return this.fields && this.fields.length > 0;\n }\n\n get passwordRevisionDisplayDate(): Date {\n if (this.type !== CipherType.Login || this.login == null) {\n return null;\n } else if (this.login.password == null || this.login.password === \"\") {\n return null;\n }\n return this.login.passwordRevisionDate;\n }\n\n get isDeleted(): boolean {\n return this.deletedDate != null;\n }\n\n get linkedFieldOptions() {\n return this.item.linkedFieldOptions;\n }\n\n linkedFieldValue(id: LinkedIdType) {\n const linkedFieldOption = this.linkedFieldOptions?.get(id);\n if (linkedFieldOption == null) {\n return null;\n }\n\n const item = this.item;\n return this.item[linkedFieldOption.propertyKey as keyof typeof item];\n }\n\n linkedFieldI18nKey(id: LinkedIdType): string {\n return this.linkedFieldOptions.get(id)?.i18nKey;\n }\n}\n","import { Collection } from \"../domain/collection\";\nimport { ITreeNodeObject } from \"../domain/treeNode\";\nimport { CollectionGroupDetailsResponse } from \"../response/collectionResponse\";\n\nimport { View } from \"./view\";\n\nexport class CollectionView implements View, ITreeNodeObject {\n id: string = null;\n organizationId: string = null;\n name: string = null;\n externalId: string = null;\n readOnly: boolean = null;\n hidePasswords: boolean = null;\n\n constructor(c?: Collection | CollectionGroupDetailsResponse) {\n if (!c) {\n return;\n }\n\n this.id = c.id;\n this.organizationId = c.organizationId;\n this.externalId = c.externalId;\n if (c instanceof Collection) {\n this.readOnly = c.readOnly;\n this.hidePasswords = c.hidePasswords;\n }\n }\n}\n","import { EventType } from \"../../enums/eventType\";\n\nexport class EventView {\n message: string;\n humanReadableMessage: string;\n appIcon: string;\n appName: string;\n userId: string;\n userName: string;\n userEmail: string;\n date: string;\n ip: string;\n type: EventType;\n\n constructor(data: Required) {\n this.message = data.message;\n this.humanReadableMessage = data.humanReadableMessage;\n this.appIcon = data.appIcon;\n this.appName = data.appName;\n this.userId = data.userId;\n this.userName = data.userName;\n this.userEmail = data.userEmail;\n this.date = data.date;\n this.ip = data.ip;\n this.type = data.type;\n }\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { Field } from \"../domain/field\";\n\nimport { View } from \"./view\";\n\nexport class FieldView implements View {\n name: string = null;\n value: string = null;\n type: FieldType = null;\n newField = false; // Marks if the field is new and hasn't been saved\n showValue = false;\n showCount = false;\n linkedId: LinkedIdType = null;\n\n constructor(f?: Field) {\n if (!f) {\n return;\n }\n\n this.type = f.type;\n this.linkedId = f.linkedId;\n }\n\n get maskedValue(): string {\n return this.value != null ? \"••••••••\" : null;\n }\n}\n","import { Folder } from \"../domain/folder\";\nimport { ITreeNodeObject } from \"../domain/treeNode\";\n\nimport { View } from \"./view\";\n\nexport class FolderView implements View, ITreeNodeObject {\n id: string = null;\n name: string = null;\n revisionDate: Date = null;\n\n constructor(f?: Folder) {\n if (!f) {\n return;\n }\n\n this.id = f.id;\n this.revisionDate = f.revisionDate;\n }\n}\n","import { IdentityLinkedId as LinkedId } from \"../../enums/linkedIdType\";\nimport { linkedFieldOption } from \"../../misc/linkedFieldOption.decorator\";\nimport { Utils } from \"../../misc/utils\";\n\nimport { ItemView } from \"./itemView\";\n\nexport class IdentityView extends ItemView {\n @linkedFieldOption(LinkedId.Title)\n title: string = null;\n @linkedFieldOption(LinkedId.MiddleName)\n middleName: string = null;\n @linkedFieldOption(LinkedId.Address1)\n address1: string = null;\n @linkedFieldOption(LinkedId.Address2)\n address2: string = null;\n @linkedFieldOption(LinkedId.Address3)\n address3: string = null;\n @linkedFieldOption(LinkedId.City, \"cityTown\")\n city: string = null;\n @linkedFieldOption(LinkedId.State, \"stateProvince\")\n state: string = null;\n @linkedFieldOption(LinkedId.PostalCode, \"zipPostalCode\")\n postalCode: string = null;\n @linkedFieldOption(LinkedId.Country)\n country: string = null;\n @linkedFieldOption(LinkedId.Company)\n company: string = null;\n @linkedFieldOption(LinkedId.Email)\n email: string = null;\n @linkedFieldOption(LinkedId.Phone)\n phone: string = null;\n @linkedFieldOption(LinkedId.Ssn)\n ssn: string = null;\n @linkedFieldOption(LinkedId.Username)\n username: string = null;\n @linkedFieldOption(LinkedId.PassportNumber)\n passportNumber: string = null;\n @linkedFieldOption(LinkedId.LicenseNumber)\n licenseNumber: string = null;\n\n private _firstName: string = null;\n private _lastName: string = null;\n private _subTitle: string = null;\n\n constructor() {\n super();\n }\n\n @linkedFieldOption(LinkedId.FirstName)\n get firstName(): string {\n return this._firstName;\n }\n set firstName(value: string) {\n this._firstName = value;\n this._subTitle = null;\n }\n\n @linkedFieldOption(LinkedId.LastName)\n get lastName(): string {\n return this._lastName;\n }\n set lastName(value: string) {\n this._lastName = value;\n this._subTitle = null;\n }\n\n get subTitle(): string {\n if (this._subTitle == null && (this.firstName != null || this.lastName != null)) {\n this._subTitle = \"\";\n if (this.firstName != null) {\n this._subTitle = this.firstName;\n }\n if (this.lastName != null) {\n if (this._subTitle !== \"\") {\n this._subTitle += \" \";\n }\n this._subTitle += this.lastName;\n }\n }\n\n return this._subTitle;\n }\n\n @linkedFieldOption(LinkedId.FullName)\n get fullName(): string {\n if (\n this.title != null ||\n this.firstName != null ||\n this.middleName != null ||\n this.lastName != null\n ) {\n let name = \"\";\n if (this.title != null) {\n name += this.title + \" \";\n }\n if (this.firstName != null) {\n name += this.firstName + \" \";\n }\n if (this.middleName != null) {\n name += this.middleName + \" \";\n }\n if (this.lastName != null) {\n name += this.lastName;\n }\n return name.trim();\n }\n\n return null;\n }\n\n get fullAddress(): string {\n let address = this.address1;\n if (!Utils.isNullOrWhitespace(this.address2)) {\n if (!Utils.isNullOrWhitespace(address)) {\n address += \", \";\n }\n address += this.address2;\n }\n if (!Utils.isNullOrWhitespace(this.address3)) {\n if (!Utils.isNullOrWhitespace(address)) {\n address += \", \";\n }\n address += this.address3;\n }\n return address;\n }\n\n get fullAddressPart2(): string {\n if (this.city == null && this.state == null && this.postalCode == null) {\n return null;\n }\n const city = this.city || \"-\";\n const state = this.state;\n const postalCode = this.postalCode || \"-\";\n let addressPart2 = city;\n if (!Utils.isNullOrWhitespace(state)) {\n addressPart2 += \", \" + state;\n }\n addressPart2 += \", \" + postalCode;\n return addressPart2;\n }\n}\n","import { LinkedMetadata } from \"../../misc/linkedFieldOption.decorator\";\n\nimport { View } from \"./view\";\n\nexport abstract class ItemView implements View {\n linkedFieldOptions: Map;\n abstract get subTitle(): string;\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { Utils } from \"../../misc/utils\";\nimport { LoginUri } from \"../domain/loginUri\";\n\nimport { View } from \"./view\";\n\nconst CanLaunchWhitelist = [\n \"https://\",\n \"http://\",\n \"ssh://\",\n \"ftp://\",\n \"sftp://\",\n \"irc://\",\n \"vnc://\",\n // https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-uri\n \"rdp://\", // Legacy RDP URI scheme\n \"ms-rd:\", // Preferred RDP URI scheme\n \"chrome://\",\n \"iosapp://\",\n \"androidapp://\",\n];\n\nexport class LoginUriView implements View {\n match: UriMatchType = null;\n\n private _uri: string = null;\n private _domain: string = null;\n private _hostname: string = null;\n private _host: string = null;\n private _canLaunch: boolean = null;\n\n constructor(u?: LoginUri) {\n if (!u) {\n return;\n }\n\n this.match = u.match;\n }\n\n get uri(): string {\n return this._uri;\n }\n set uri(value: string) {\n this._uri = value;\n this._domain = null;\n this._canLaunch = null;\n }\n\n get domain(): string {\n if (this._domain == null && this.uri != null) {\n this._domain = Utils.getDomain(this.uri);\n if (this._domain === \"\") {\n this._domain = null;\n }\n }\n\n return this._domain;\n }\n\n get hostname(): string {\n if (this.match === UriMatchType.RegularExpression) {\n return null;\n }\n if (this._hostname == null && this.uri != null) {\n this._hostname = Utils.getHostname(this.uri);\n if (this._hostname === \"\") {\n this._hostname = null;\n }\n }\n\n return this._hostname;\n }\n\n get host(): string {\n if (this.match === UriMatchType.RegularExpression) {\n return null;\n }\n if (this._host == null && this.uri != null) {\n this._host = Utils.getHost(this.uri);\n if (this._host === \"\") {\n this._host = null;\n }\n }\n\n return this._host;\n }\n\n get hostnameOrUri(): string {\n return this.hostname != null ? this.hostname : this.uri;\n }\n\n get hostOrUri(): string {\n return this.host != null ? this.host : this.uri;\n }\n\n get isWebsite(): boolean {\n return (\n this.uri != null &&\n (this.uri.indexOf(\"http://\") === 0 ||\n this.uri.indexOf(\"https://\") === 0 ||\n (this.uri.indexOf(\"://\") < 0 && Utils.tldEndingRegex.test(this.uri)))\n );\n }\n\n get canLaunch(): boolean {\n if (this._canLaunch != null) {\n return this._canLaunch;\n }\n if (this.uri != null && this.match !== UriMatchType.RegularExpression) {\n const uri = this.launchUri;\n for (let i = 0; i < CanLaunchWhitelist.length; i++) {\n if (uri.indexOf(CanLaunchWhitelist[i]) === 0) {\n this._canLaunch = true;\n return this._canLaunch;\n }\n }\n }\n this._canLaunch = false;\n return this._canLaunch;\n }\n\n get launchUri(): string {\n return this.uri.indexOf(\"://\") < 0 && Utils.tldEndingRegex.test(this.uri)\n ? \"http://\" + this.uri\n : this.uri;\n }\n}\n","import { LoginLinkedId as LinkedId } from \"../../enums/linkedIdType\";\nimport { linkedFieldOption } from \"../../misc/linkedFieldOption.decorator\";\nimport { Utils } from \"../../misc/utils\";\nimport { Login } from \"../domain/login\";\n\nimport { ItemView } from \"./itemView\";\nimport { LoginUriView } from \"./loginUriView\";\n\nexport class LoginView extends ItemView {\n @linkedFieldOption(LinkedId.Username)\n username: string = null;\n @linkedFieldOption(LinkedId.Password)\n password: string = null;\n\n passwordRevisionDate?: Date = null;\n totp: string = null;\n uris: LoginUriView[] = null;\n autofillOnPageLoad: boolean = null;\n\n constructor(l?: Login) {\n super();\n if (!l) {\n return;\n }\n\n this.passwordRevisionDate = l.passwordRevisionDate;\n this.autofillOnPageLoad = l.autofillOnPageLoad;\n }\n\n get uri(): string {\n return this.hasUris ? this.uris[0].uri : null;\n }\n\n get maskedPassword(): string {\n return this.password != null ? \"••••••••\" : null;\n }\n\n get subTitle(): string {\n return this.username;\n }\n\n get canLaunch(): boolean {\n return this.hasUris && this.uris.some((u) => u.canLaunch);\n }\n\n get hasTotp(): boolean {\n return !Utils.isNullOrWhitespace(this.totp);\n }\n\n get launchUri(): string {\n if (this.hasUris) {\n const uri = this.uris.find((u) => u.canLaunch);\n if (uri != null) {\n return uri.launchUri;\n }\n }\n return null;\n }\n\n get hasUris(): boolean {\n return this.uris != null && this.uris.length > 0;\n }\n}\n","import { Password } from \"../domain/password\";\n\nimport { View } from \"./view\";\n\nexport class PasswordHistoryView implements View {\n password: string = null;\n lastUsedDate: Date = null;\n\n constructor(ph?: Password) {\n if (!ph) {\n return;\n }\n\n this.lastUsedDate = ph.lastUsedDate;\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNote } from \"../domain/secureNote\";\n\nimport { ItemView } from \"./itemView\";\n\nexport class SecureNoteView extends ItemView {\n type: SecureNoteType = null;\n\n constructor(n?: SecureNote) {\n super();\n if (!n) {\n return;\n }\n\n this.type = n.type;\n }\n\n get subTitle(): string {\n return null;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendAccess } from \"../domain/sendAccess\";\n\nimport { SendFileView } from \"./sendFileView\";\nimport { SendTextView } from \"./sendTextView\";\nimport { View } from \"./view\";\n\nexport class SendAccessView implements View {\n id: string = null;\n name: string = null;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n expirationDate: Date = null;\n creatorIdentifier: string = null;\n\n constructor(s?: SendAccess) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.type = s.type;\n this.expirationDate = s.expirationDate;\n this.creatorIdentifier = s.creatorIdentifier;\n }\n}\n","import { SendFile } from \"../domain/sendFile\";\n\nimport { View } from \"./view\";\n\nexport class SendFileView implements View {\n id: string = null;\n size: string = null;\n sizeName: string = null;\n fileName: string = null;\n\n constructor(f?: SendFile) {\n if (!f) {\n return;\n }\n\n this.id = f.id;\n this.size = f.size;\n this.sizeName = f.sizeName;\n }\n\n get fileSize(): number {\n try {\n if (this.size != null) {\n return parseInt(this.size, null);\n }\n } catch {\n // Invalid file size.\n }\n return 0;\n }\n}\n","import { SendText } from \"../domain/sendText\";\n\nimport { View } from \"./view\";\n\nexport class SendTextView implements View {\n text: string = null;\n hidden: boolean;\n\n constructor(t?: SendText) {\n if (!t) {\n return;\n }\n\n this.hidden = t.hidden;\n }\n\n get maskedText(): string {\n return this.text != null ? \"••••••••\" : null;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { Utils } from \"../../misc/utils\";\nimport { Send } from \"../domain/send\";\nimport { SymmetricCryptoKey } from \"../domain/symmetricCryptoKey\";\n\nimport { SendFileView } from \"./sendFileView\";\nimport { SendTextView } from \"./sendTextView\";\nimport { View } from \"./view\";\n\nexport class SendView implements View {\n id: string = null;\n accessId: string = null;\n name: string = null;\n notes: string = null;\n key: ArrayBuffer;\n cryptoKey: SymmetricCryptoKey;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n maxAccessCount?: number = null;\n accessCount = 0;\n revisionDate: Date = null;\n deletionDate: Date = null;\n expirationDate: Date = null;\n password: string = null;\n disabled = false;\n hideEmail = false;\n\n constructor(s?: Send) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.accessId = s.accessId;\n this.type = s.type;\n this.maxAccessCount = s.maxAccessCount;\n this.accessCount = s.accessCount;\n this.revisionDate = s.revisionDate;\n this.deletionDate = s.deletionDate;\n this.expirationDate = s.expirationDate;\n this.disabled = s.disabled;\n this.password = s.password;\n this.hideEmail = s.hideEmail;\n }\n\n get urlB64Key(): string {\n return Utils.fromBufferToUrlB64(this.key);\n }\n\n get maxAccessCountReached(): boolean {\n if (this.maxAccessCount == null) {\n return false;\n }\n return this.accessCount >= this.maxAccessCount;\n }\n\n get expired(): boolean {\n if (this.expirationDate == null) {\n return false;\n }\n return this.expirationDate <= new Date();\n }\n\n get pendingDelete(): boolean {\n return this.deletionDate <= new Date();\n }\n}\n","import { AppIdService } from \"jslib-common/abstractions/appId.service\";\nimport { DeviceRequest } from \"jslib-common/models/request/deviceRequest\";\nimport { TokenRequestTwoFactor } from \"jslib-common/models/request/identityToken/tokenRequestTwoFactor\";\n\nimport { ApiService as ApiServiceAbstraction } from \"../abstractions/api.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { DeviceType } from \"../enums/deviceType\";\nimport { PolicyType } from \"../enums/policyType\";\nimport { Utils } from \"../misc/utils\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/setKeyConnectorKeyRequest\";\nimport { VerifyOTPRequest } from \"../models/request/account/verifyOTPRequest\";\nimport { AttachmentRequest } from \"../models/request/attachmentRequest\";\nimport { BitPayInvoiceRequest } from \"../models/request/bitPayInvoiceRequest\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipherBulkDeleteRequest\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipherBulkMoveRequest\";\nimport { CipherBulkShareRequest } from \"../models/request/cipherBulkShareRequest\";\nimport { CipherCollectionsRequest } from \"../models/request/cipherCollectionsRequest\";\nimport { CipherCreateRequest } from \"../models/request/cipherCreateRequest\";\nimport { CipherRequest } from \"../models/request/cipherRequest\";\nimport { CipherShareRequest } from \"../models/request/cipherShareRequest\";\nimport { CollectionRequest } from \"../models/request/collectionRequest\";\nimport { DeleteRecoverRequest } from \"../models/request/deleteRecoverRequest\";\nimport { EmailRequest } from \"../models/request/emailRequest\";\nimport { EmailTokenRequest } from \"../models/request/emailTokenRequest\";\nimport { EmergencyAccessAcceptRequest } from \"../models/request/emergencyAccessAcceptRequest\";\nimport { EmergencyAccessConfirmRequest } from \"../models/request/emergencyAccessConfirmRequest\";\nimport { EmergencyAccessInviteRequest } from \"../models/request/emergencyAccessInviteRequest\";\nimport { EmergencyAccessPasswordRequest } from \"../models/request/emergencyAccessPasswordRequest\";\nimport { EmergencyAccessUpdateRequest } from \"../models/request/emergencyAccessUpdateRequest\";\nimport { EventRequest } from \"../models/request/eventRequest\";\nimport { FolderRequest } from \"../models/request/folderRequest\";\nimport { GroupRequest } from \"../models/request/groupRequest\";\nimport { IapCheckRequest } from \"../models/request/iapCheckRequest\";\nimport { ApiTokenRequest } from \"../models/request/identityToken/apiTokenRequest\";\nimport { PasswordTokenRequest } from \"../models/request/identityToken/passwordTokenRequest\";\nimport { SsoTokenRequest } from \"../models/request/identityToken/ssoTokenRequest\";\nimport { ImportCiphersRequest } from \"../models/request/importCiphersRequest\";\nimport { ImportDirectoryRequest } from \"../models/request/importDirectoryRequest\";\nimport { ImportOrganizationCiphersRequest } from \"../models/request/importOrganizationCiphersRequest\";\nimport { KdfRequest } from \"../models/request/kdfRequest\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/keyConnectorUserKeyRequest\";\nimport { KeysRequest } from \"../models/request/keysRequest\";\nimport { OrganizationSponsorshipCreateRequest } from \"../models/request/organization/organizationSponsorshipCreateRequest\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../models/request/organization/organizationSponsorshipRedeemRequest\";\nimport { OrganizationSsoRequest } from \"../models/request/organization/organizationSsoRequest\";\nimport { OrganizationCreateRequest } from \"../models/request/organizationCreateRequest\";\nimport { OrganizationImportRequest } from \"../models/request/organizationImportRequest\";\nimport { OrganizationKeysRequest } from \"../models/request/organizationKeysRequest\";\nimport { OrganizationSubscriptionUpdateRequest } from \"../models/request/organizationSubscriptionUpdateRequest\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../models/request/organizationTaxInfoUpdateRequest\";\nimport { OrganizationUpdateRequest } from \"../models/request/organizationUpdateRequest\";\nimport { OrganizationUpgradeRequest } from \"../models/request/organizationUpgradeRequest\";\nimport { OrganizationUserAcceptRequest } from \"../models/request/organizationUserAcceptRequest\";\nimport { OrganizationUserBulkConfirmRequest } from \"../models/request/organizationUserBulkConfirmRequest\";\nimport { OrganizationUserBulkRequest } from \"../models/request/organizationUserBulkRequest\";\nimport { OrganizationUserConfirmRequest } from \"../models/request/organizationUserConfirmRequest\";\nimport { OrganizationUserInviteRequest } from \"../models/request/organizationUserInviteRequest\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"../models/request/organizationUserResetPasswordEnrollmentRequest\";\nimport { OrganizationUserResetPasswordRequest } from \"../models/request/organizationUserResetPasswordRequest\";\nimport { OrganizationUserUpdateGroupsRequest } from \"../models/request/organizationUserUpdateGroupsRequest\";\nimport { OrganizationUserUpdateRequest } from \"../models/request/organizationUserUpdateRequest\";\nimport { PasswordHintRequest } from \"../models/request/passwordHintRequest\";\nimport { PasswordRequest } from \"../models/request/passwordRequest\";\nimport { PaymentRequest } from \"../models/request/paymentRequest\";\nimport { PolicyRequest } from \"../models/request/policyRequest\";\nimport { PreloginRequest } from \"../models/request/preloginRequest\";\nimport { ProviderAddOrganizationRequest } from \"../models/request/provider/providerAddOrganizationRequest\";\nimport { ProviderOrganizationCreateRequest } from \"../models/request/provider/providerOrganizationCreateRequest\";\nimport { ProviderSetupRequest } from \"../models/request/provider/providerSetupRequest\";\nimport { ProviderUpdateRequest } from \"../models/request/provider/providerUpdateRequest\";\nimport { ProviderUserAcceptRequest } from \"../models/request/provider/providerUserAcceptRequest\";\nimport { ProviderUserBulkConfirmRequest } from \"../models/request/provider/providerUserBulkConfirmRequest\";\nimport { ProviderUserBulkRequest } from \"../models/request/provider/providerUserBulkRequest\";\nimport { ProviderUserConfirmRequest } from \"../models/request/provider/providerUserConfirmRequest\";\nimport { ProviderUserInviteRequest } from \"../models/request/provider/providerUserInviteRequest\";\nimport { ProviderUserUpdateRequest } from \"../models/request/provider/providerUserUpdateRequest\";\nimport { RegisterRequest } from \"../models/request/registerRequest\";\nimport { SeatRequest } from \"../models/request/seatRequest\";\nimport { SecretVerificationRequest } from \"../models/request/secretVerificationRequest\";\nimport { SelectionReadOnlyRequest } from \"../models/request/selectionReadOnlyRequest\";\nimport { SendAccessRequest } from \"../models/request/sendAccessRequest\";\nimport { SendRequest } from \"../models/request/sendRequest\";\nimport { SetPasswordRequest } from \"../models/request/setPasswordRequest\";\nimport { StorageRequest } from \"../models/request/storageRequest\";\nimport { TaxInfoUpdateRequest } from \"../models/request/taxInfoUpdateRequest\";\nimport { TwoFactorEmailRequest } from \"../models/request/twoFactorEmailRequest\";\nimport { TwoFactorProviderRequest } from \"../models/request/twoFactorProviderRequest\";\nimport { TwoFactorRecoveryRequest } from \"../models/request/twoFactorRecoveryRequest\";\nimport { UpdateDomainsRequest } from \"../models/request/updateDomainsRequest\";\nimport { UpdateKeyRequest } from \"../models/request/updateKeyRequest\";\nimport { UpdateProfileRequest } from \"../models/request/updateProfileRequest\";\nimport { UpdateTempPasswordRequest } from \"../models/request/updateTempPasswordRequest\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../models/request/updateTwoFactorAuthenticatorRequest\";\nimport { UpdateTwoFactorDuoRequest } from \"../models/request/updateTwoFactorDuoRequest\";\nimport { UpdateTwoFactorEmailRequest } from \"../models/request/updateTwoFactorEmailRequest\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../models/request/updateTwoFactorWebAuthnDeleteRequest\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../models/request/updateTwoFactorWebAuthnRequest\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../models/request/updateTwoFactorYubioOtpRequest\";\nimport { VerifyBankRequest } from \"../models/request/verifyBankRequest\";\nimport { VerifyDeleteRecoverRequest } from \"../models/request/verifyDeleteRecoverRequest\";\nimport { VerifyEmailRequest } from \"../models/request/verifyEmailRequest\";\nimport { ApiKeyResponse } from \"../models/response/apiKeyResponse\";\nimport { AttachmentResponse } from \"../models/response/attachmentResponse\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachmentUploadDataResponse\";\nimport { BillingResponse } from \"../models/response/billingResponse\";\nimport { BreachAccountResponse } from \"../models/response/breachAccountResponse\";\nimport { CipherResponse } from \"../models/response/cipherResponse\";\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from \"../models/response/collectionResponse\";\nimport { DomainsResponse } from \"../models/response/domainsResponse\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse,\n} from \"../models/response/emergencyAccessResponse\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\nimport { EventResponse } from \"../models/response/eventResponse\";\nimport { FolderResponse } from \"../models/response/folderResponse\";\nimport { GroupDetailsResponse, GroupResponse } from \"../models/response/groupResponse\";\nimport { IdentityCaptchaResponse } from \"../models/response/identityCaptchaResponse\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identityTwoFactorResponse\";\nimport { KeyConnectorUserKeyResponse } from \"../models/response/keyConnectorUserKeyResponse\";\nimport { ListResponse } from \"../models/response/listResponse\";\nimport { OrganizationSsoResponse } from \"../models/response/organization/organizationSsoResponse\";\nimport { OrganizationAutoEnrollStatusResponse } from \"../models/response/organizationAutoEnrollStatusResponse\";\nimport { OrganizationKeysResponse } from \"../models/response/organizationKeysResponse\";\nimport { OrganizationResponse } from \"../models/response/organizationResponse\";\nimport { OrganizationSubscriptionResponse } from \"../models/response/organizationSubscriptionResponse\";\nimport { OrganizationUserBulkPublicKeyResponse } from \"../models/response/organizationUserBulkPublicKeyResponse\";\nimport { OrganizationUserBulkResponse } from \"../models/response/organizationUserBulkResponse\";\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n OrganizationUserUserDetailsResponse,\n} from \"../models/response/organizationUserResponse\";\nimport { PaymentResponse } from \"../models/response/paymentResponse\";\nimport { PlanResponse } from \"../models/response/planResponse\";\nimport { PolicyResponse } from \"../models/response/policyResponse\";\nimport { PreloginResponse } from \"../models/response/preloginResponse\";\nimport { ProfileResponse } from \"../models/response/profileResponse\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../models/response/provider/providerOrganizationResponse\";\nimport { ProviderResponse } from \"../models/response/provider/providerResponse\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../models/response/provider/providerUserBulkPublicKeyResponse\";\nimport { ProviderUserBulkResponse } from \"../models/response/provider/providerUserBulkResponse\";\nimport {\n ProviderUserResponse,\n ProviderUserUserDetailsResponse,\n} from \"../models/response/provider/providerUserResponse\";\nimport { SelectionReadOnlyResponse } from \"../models/response/selectionReadOnlyResponse\";\nimport { SendAccessResponse } from \"../models/response/sendAccessResponse\";\nimport { SendFileDownloadDataResponse } from \"../models/response/sendFileDownloadDataResponse\";\nimport { SendFileUploadDataResponse } from \"../models/response/sendFileUploadDataResponse\";\nimport { SendResponse } from \"../models/response/sendResponse\";\nimport { SubscriptionResponse } from \"../models/response/subscriptionResponse\";\nimport { SyncResponse } from \"../models/response/syncResponse\";\nimport { TaxInfoResponse } from \"../models/response/taxInfoResponse\";\nimport { TaxRateResponse } from \"../models/response/taxRateResponse\";\nimport { TwoFactorAuthenticatorResponse } from \"../models/response/twoFactorAuthenticatorResponse\";\nimport { TwoFactorDuoResponse } from \"../models/response/twoFactorDuoResponse\";\nimport { TwoFactorEmailResponse } from \"../models/response/twoFactorEmailResponse\";\nimport { TwoFactorProviderResponse } from \"../models/response/twoFactorProviderResponse\";\nimport { TwoFactorRecoverResponse } from \"../models/response/twoFactorRescoverResponse\";\nimport {\n TwoFactorWebAuthnResponse,\n ChallengeResponse,\n} from \"../models/response/twoFactorWebAuthnResponse\";\nimport { TwoFactorYubiKeyResponse } from \"../models/response/twoFactorYubiKeyResponse\";\nimport { UserKeyResponse } from \"../models/response/userKeyResponse\";\nimport { SendAccessView } from \"../models/view/sendAccessView\";\n\nexport class ApiService implements ApiServiceAbstraction {\n private device: DeviceType;\n private deviceType: string;\n private isWebClient = false;\n private isDesktopClient = false;\n\n constructor(\n private tokenService: TokenService,\n private platformUtilsService: PlatformUtilsService,\n private environmentService: EnvironmentService,\n private appIdService: AppIdService,\n private logoutCallback: (expired: boolean) => Promise,\n private customUserAgent: string = null\n ) {\n this.device = platformUtilsService.getDevice();\n this.deviceType = this.device.toString();\n this.isWebClient =\n this.device === DeviceType.IEBrowser ||\n this.device === DeviceType.ChromeBrowser ||\n this.device === DeviceType.EdgeBrowser ||\n this.device === DeviceType.FirefoxBrowser ||\n this.device === DeviceType.OperaBrowser ||\n this.device === DeviceType.SafariBrowser ||\n this.device === DeviceType.UnknownBrowser ||\n this.device === DeviceType.VivaldiBrowser;\n this.isDesktopClient =\n this.device === DeviceType.WindowsDesktop ||\n this.device === DeviceType.MacOsDesktop ||\n this.device === DeviceType.LinuxDesktop;\n }\n\n // Auth APIs\n\n async postIdentityToken(\n request: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest\n ): Promise {\n const headers = new Headers({\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n request.alterIdentityTokenHeaders(headers);\n\n const identityToken =\n request instanceof ApiTokenRequest\n ? request.toIdentityToken()\n : request.toIdentityToken(this.platformUtilsService.getClientType());\n\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + \"/connect/token\", {\n body: this.qsStringify(identityToken),\n credentials: this.getCredentials(),\n cache: \"no-store\",\n headers: headers,\n method: \"POST\",\n })\n );\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n }\n\n if (responseJson != null) {\n if (response.status === 200) {\n return new IdentityTokenResponse(responseJson);\n } else if (\n response.status === 400 &&\n responseJson.TwoFactorProviders2 &&\n Object.keys(responseJson.TwoFactorProviders2).length\n ) {\n await this.tokenService.clearTwoFactorToken();\n return new IdentityTwoFactorResponse(responseJson);\n } else if (\n response.status === 400 &&\n responseJson.HCaptcha_SiteKey &&\n Object.keys(responseJson.HCaptcha_SiteKey).length\n ) {\n return new IdentityCaptchaResponse(responseJson);\n }\n }\n\n return Promise.reject(new ErrorResponse(responseJson, response.status, true));\n }\n\n async refreshIdentityToken(): Promise {\n try {\n await this.doAuthRefresh();\n } catch (e) {\n return Promise.reject(null);\n }\n }\n\n // Account APIs\n\n async getProfile(): Promise {\n const r = await this.send(\"GET\", \"/accounts/profile\", null, true, true);\n return new ProfileResponse(r);\n }\n\n async getUserBilling(): Promise {\n const r = await this.send(\"GET\", \"/accounts/billing\", null, true, true);\n return new BillingResponse(r);\n }\n\n async getUserSubscription(): Promise {\n const r = await this.send(\"GET\", \"/accounts/subscription\", null, true, true);\n return new SubscriptionResponse(r);\n }\n\n async getTaxInfo(): Promise {\n const r = await this.send(\"GET\", \"/accounts/tax\", null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async putProfile(request: UpdateProfileRequest): Promise {\n const r = await this.send(\"PUT\", \"/accounts/profile\", request, true, true);\n return new ProfileResponse(r);\n }\n\n putTaxInfo(request: TaxInfoUpdateRequest): Promise {\n return this.send(\"PUT\", \"/accounts/tax\", request, true, false);\n }\n\n async postPrelogin(request: PreloginRequest): Promise {\n const r = await this.send(\n \"POST\",\n \"/accounts/prelogin\",\n request,\n false,\n true,\n this.platformUtilsService.isDev()\n ? this.environmentService.getIdentityUrl()\n : this.environmentService.getApiUrl()\n );\n return new PreloginResponse(r);\n }\n\n postEmailToken(request: EmailTokenRequest): Promise {\n return this.send(\"POST\", \"/accounts/email-token\", request, true, false);\n }\n\n postEmail(request: EmailRequest): Promise {\n return this.send(\"POST\", \"/accounts/email\", request, true, false);\n }\n\n postPassword(request: PasswordRequest): Promise {\n return this.send(\"POST\", \"/accounts/password\", request, true, false);\n }\n\n setPassword(request: SetPasswordRequest): Promise {\n return this.send(\"POST\", \"/accounts/set-password\", request, true, false);\n }\n\n postSetKeyConnectorKey(request: SetKeyConnectorKeyRequest): Promise {\n return this.send(\"POST\", \"/accounts/set-key-connector-key\", request, true, false);\n }\n\n postSecurityStamp(request: SecretVerificationRequest): Promise {\n return this.send(\"POST\", \"/accounts/security-stamp\", request, true, false);\n }\n\n deleteAccount(request: SecretVerificationRequest): Promise {\n return this.send(\"DELETE\", \"/accounts\", request, true, false);\n }\n\n async getAccountRevisionDate(): Promise {\n const r = await this.send(\"GET\", \"/accounts/revision-date\", null, true, true);\n return r as number;\n }\n\n postPasswordHint(request: PasswordHintRequest): Promise {\n return this.send(\"POST\", \"/accounts/password-hint\", request, false, false);\n }\n\n postRegister(request: RegisterRequest): Promise {\n return this.send(\n \"POST\",\n \"/accounts/register\",\n request,\n false,\n false,\n this.platformUtilsService.isDev()\n ? this.environmentService.getIdentityUrl()\n : this.environmentService.getApiUrl()\n );\n }\n\n async postPremium(data: FormData): Promise {\n const r = await this.send(\"POST\", \"/accounts/premium\", data, true, true);\n return new PaymentResponse(r);\n }\n\n async postIapCheck(request: IapCheckRequest): Promise {\n return this.send(\"POST\", \"/accounts/iap-check\", request, true, false);\n }\n\n postReinstatePremium(): Promise {\n return this.send(\"POST\", \"/accounts/reinstate-premium\", null, true, false);\n }\n\n postCancelPremium(): Promise {\n return this.send(\"POST\", \"/accounts/cancel-premium\", null, true, false);\n }\n\n async postAccountStorage(request: StorageRequest): Promise {\n const r = await this.send(\"POST\", \"/accounts/storage\", request, true, true);\n return new PaymentResponse(r);\n }\n\n postAccountPayment(request: PaymentRequest): Promise {\n return this.send(\"POST\", \"/accounts/payment\", request, true, false);\n }\n\n postAccountLicense(data: FormData): Promise {\n return this.send(\"POST\", \"/accounts/license\", data, true, false);\n }\n\n postAccountKeys(request: KeysRequest): Promise {\n return this.send(\"POST\", \"/accounts/keys\", request, true, false);\n }\n\n postAccountKey(request: UpdateKeyRequest): Promise {\n return this.send(\"POST\", \"/accounts/key\", request, true, false);\n }\n\n postAccountVerifyEmail(): Promise {\n return this.send(\"POST\", \"/accounts/verify-email\", null, true, false);\n }\n\n postAccountVerifyEmailToken(request: VerifyEmailRequest): Promise {\n return this.send(\"POST\", \"/accounts/verify-email-token\", request, false, false);\n }\n\n postAccountVerifyPassword(request: SecretVerificationRequest): Promise {\n return this.send(\"POST\", \"/accounts/verify-password\", request, true, false);\n }\n\n postAccountRecoverDelete(request: DeleteRecoverRequest): Promise {\n return this.send(\"POST\", \"/accounts/delete-recover\", request, false, false);\n }\n\n postAccountRecoverDeleteToken(request: VerifyDeleteRecoverRequest): Promise {\n return this.send(\"POST\", \"/accounts/delete-recover-token\", request, false, false);\n }\n\n postAccountKdf(request: KdfRequest): Promise {\n return this.send(\"POST\", \"/accounts/kdf\", request, true, false);\n }\n\n async deleteSsoUser(organizationId: string): Promise {\n return this.send(\"DELETE\", \"/accounts/sso/\" + organizationId, null, true, false);\n }\n\n async getSsoUserIdentifier(): Promise {\n return this.send(\"GET\", \"/accounts/sso/user-identifier\", null, true, true);\n }\n\n async postUserApiKey(id: string, request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/accounts/api-key\", request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async postUserRotateApiKey(\n id: string,\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/accounts/rotate-api-key\", request, true, true);\n return new ApiKeyResponse(r);\n }\n\n putUpdateTempPassword(request: UpdateTempPasswordRequest): Promise {\n return this.send(\"PUT\", \"/accounts/update-temp-password\", request, true, false);\n }\n\n postAccountRequestOTP(): Promise {\n return this.send(\"POST\", \"/accounts/request-otp\", null, true, false);\n }\n\n postAccountVerifyOTP(request: VerifyOTPRequest): Promise {\n return this.send(\"POST\", \"/accounts/verify-otp\", request, true, false);\n }\n\n postConvertToKeyConnector(): Promise {\n return this.send(\"POST\", \"/accounts/convert-to-key-connector\", null, true, false);\n }\n\n // Folder APIs\n\n async getFolder(id: string): Promise {\n const r = await this.send(\"GET\", \"/folders/\" + id, null, true, true);\n return new FolderResponse(r);\n }\n\n async postFolder(request: FolderRequest): Promise {\n const r = await this.send(\"POST\", \"/folders\", request, true, true);\n return new FolderResponse(r);\n }\n\n async putFolder(id: string, request: FolderRequest): Promise {\n const r = await this.send(\"PUT\", \"/folders/\" + id, request, true, true);\n return new FolderResponse(r);\n }\n\n deleteFolder(id: string): Promise {\n return this.send(\"DELETE\", \"/folders/\" + id, null, true, false);\n }\n\n // Send APIs\n\n async getSend(id: string): Promise {\n const r = await this.send(\"GET\", \"/sends/\" + id, null, true, true);\n return new SendResponse(r);\n }\n\n async postSendAccess(\n id: string,\n request: SendAccessRequest,\n apiUrl?: string\n ): Promise {\n const addSendIdHeader = (headers: Headers) => {\n headers.set(\"Send-Id\", id);\n };\n const r = await this.send(\n \"POST\",\n \"/sends/access/\" + id,\n request,\n false,\n true,\n apiUrl,\n addSendIdHeader\n );\n return new SendAccessResponse(r);\n }\n\n async getSendFileDownloadData(\n send: SendAccessView,\n request: SendAccessRequest,\n apiUrl?: string\n ): Promise {\n const addSendIdHeader = (headers: Headers) => {\n headers.set(\"Send-Id\", send.id);\n };\n const r = await this.send(\n \"POST\",\n \"/sends/\" + send.id + \"/access/file/\" + send.file.id,\n request,\n false,\n true,\n apiUrl,\n addSendIdHeader\n );\n return new SendFileDownloadDataResponse(r);\n }\n\n async getSends(): Promise> {\n const r = await this.send(\"GET\", \"/sends\", null, true, true);\n return new ListResponse(r, SendResponse);\n }\n\n async postSend(request: SendRequest): Promise {\n const r = await this.send(\"POST\", \"/sends\", request, true, true);\n return new SendResponse(r);\n }\n\n async postFileTypeSend(request: SendRequest): Promise {\n const r = await this.send(\"POST\", \"/sends/file/v2\", request, true, true);\n return new SendFileUploadDataResponse(r);\n }\n\n async renewSendFileUploadUrl(\n sendId: string,\n fileId: string\n ): Promise {\n const r = await this.send(\"GET\", \"/sends/\" + sendId + \"/file/\" + fileId, null, true, true);\n return new SendFileUploadDataResponse(r);\n }\n\n postSendFile(sendId: string, fileId: string, data: FormData): Promise {\n return this.send(\"POST\", \"/sends/\" + sendId + \"/file/\" + fileId, data, true, false);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postSendFileLegacy(data: FormData): Promise {\n const r = await this.send(\"POST\", \"/sends/file\", data, true, true);\n return new SendResponse(r);\n }\n\n async putSend(id: string, request: SendRequest): Promise {\n const r = await this.send(\"PUT\", \"/sends/\" + id, request, true, true);\n return new SendResponse(r);\n }\n\n async putSendRemovePassword(id: string): Promise {\n const r = await this.send(\"PUT\", \"/sends/\" + id + \"/remove-password\", null, true, true);\n return new SendResponse(r);\n }\n\n deleteSend(id: string): Promise {\n return this.send(\"DELETE\", \"/sends/\" + id, null, true, false);\n }\n\n // Cipher APIs\n\n async getCipher(id: string): Promise {\n const r = await this.send(\"GET\", \"/ciphers/\" + id, null, true, true);\n return new CipherResponse(r);\n }\n\n async getCipherAdmin(id: string): Promise {\n const r = await this.send(\"GET\", \"/ciphers/\" + id + \"/admin\", null, true, true);\n return new CipherResponse(r);\n }\n\n async getCiphersOrganization(organizationId: string): Promise> {\n const r = await this.send(\n \"GET\",\n \"/ciphers/organization-details?organizationId=\" + organizationId,\n null,\n true,\n true\n );\n return new ListResponse(r, CipherResponse);\n }\n\n async postCipher(request: CipherRequest): Promise {\n const r = await this.send(\"POST\", \"/ciphers\", request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherCreate(request: CipherCreateRequest): Promise {\n const r = await this.send(\"POST\", \"/ciphers/create\", request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherAdmin(request: CipherCreateRequest): Promise {\n const r = await this.send(\"POST\", \"/ciphers/admin\", request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipher(id: string, request: CipherRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id, request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipherAdmin(id: string, request: CipherRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/admin\", request, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipher(id: string): Promise {\n return this.send(\"DELETE\", \"/ciphers/\" + id, null, true, false);\n }\n\n deleteCipherAdmin(id: string): Promise {\n return this.send(\"DELETE\", \"/ciphers/\" + id + \"/admin\", null, true, false);\n }\n\n deleteManyCiphers(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"DELETE\", \"/ciphers\", request, true, false);\n }\n\n deleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"DELETE\", \"/ciphers/admin\", request, true, false);\n }\n\n putMoveCiphers(request: CipherBulkMoveRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/move\", request, true, false);\n }\n\n async putShareCipher(id: string, request: CipherShareRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/share\", request, true, true);\n return new CipherResponse(r);\n }\n\n putShareCiphers(request: CipherBulkShareRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/share\", request, true, false);\n }\n\n putCipherCollections(id: string, request: CipherCollectionsRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/collections\", request, true, false);\n }\n\n putCipherCollectionsAdmin(id: string, request: CipherCollectionsRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/collections-admin\", request, true, false);\n }\n\n postPurgeCiphers(\n request: SecretVerificationRequest,\n organizationId: string = null\n ): Promise {\n let path = \"/ciphers/purge\";\n if (organizationId != null) {\n path += \"?organizationId=\" + organizationId;\n }\n return this.send(\"POST\", path, request, true, false);\n }\n\n postImportCiphers(request: ImportCiphersRequest): Promise {\n return this.send(\"POST\", \"/ciphers/import\", request, true, false);\n }\n\n postImportOrganizationCiphers(\n organizationId: string,\n request: ImportOrganizationCiphersRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/ciphers/import-organization?organizationId=\" + organizationId,\n request,\n true,\n false\n );\n }\n\n putDeleteCipher(id: string): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/delete\", null, true, false);\n }\n\n putDeleteCipherAdmin(id: string): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/delete-admin\", null, true, false);\n }\n\n putDeleteManyCiphers(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/delete\", request, true, false);\n }\n\n putDeleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/delete-admin\", request, true, false);\n }\n\n async putRestoreCipher(id: string): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/restore\", null, true, true);\n return new CipherResponse(r);\n }\n\n async putRestoreCipherAdmin(id: string): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/restore-admin\", null, true, true);\n return new CipherResponse(r);\n }\n\n async putRestoreManyCiphers(\n request: CipherBulkDeleteRequest\n ): Promise> {\n const r = await this.send(\"PUT\", \"/ciphers/restore\", request, true, true);\n return new ListResponse(r, CipherResponse);\n }\n\n // Attachments APIs\n\n async getAttachmentData(\n cipherId: string,\n attachmentId: string,\n emergencyAccessId?: string\n ): Promise {\n const path =\n (emergencyAccessId != null ? \"/emergency-access/\" + emergencyAccessId + \"/\" : \"/ciphers/\") +\n cipherId +\n \"/attachment/\" +\n attachmentId;\n const r = await this.send(\"GET\", path, null, true, true);\n return new AttachmentResponse(r);\n }\n\n async postCipherAttachment(\n id: string,\n request: AttachmentRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/ciphers/\" + id + \"/attachment/v2\", request, true, true);\n return new AttachmentUploadDataResponse(r);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postCipherAttachmentLegacy(id: string, data: FormData): Promise {\n const r = await this.send(\"POST\", \"/ciphers/\" + id + \"/attachment\", data, true, true);\n return new CipherResponse(r);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postCipherAttachmentAdminLegacy(id: string, data: FormData): Promise {\n const r = await this.send(\"POST\", \"/ciphers/\" + id + \"/attachment-admin\", data, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipherAttachment(id: string, attachmentId: string): Promise {\n return this.send(\"DELETE\", \"/ciphers/\" + id + \"/attachment/\" + attachmentId, null, true, false);\n }\n\n deleteCipherAttachmentAdmin(id: string, attachmentId: string): Promise {\n return this.send(\n \"DELETE\",\n \"/ciphers/\" + id + \"/attachment/\" + attachmentId + \"/admin\",\n null,\n true,\n false\n );\n }\n\n postShareCipherAttachment(\n id: string,\n attachmentId: string,\n data: FormData,\n organizationId: string\n ): Promise {\n return this.send(\n \"POST\",\n \"/ciphers/\" + id + \"/attachment/\" + attachmentId + \"/share?organizationId=\" + organizationId,\n data,\n true,\n false\n );\n }\n\n async renewAttachmentUploadUrl(\n id: string,\n attachmentId: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/ciphers/\" + id + \"/attachment/\" + attachmentId + \"/renew\",\n null,\n true,\n true\n );\n return new AttachmentUploadDataResponse(r);\n }\n\n postAttachmentFile(id: string, attachmentId: string, data: FormData): Promise {\n return this.send(\"POST\", \"/ciphers/\" + id + \"/attachment/\" + attachmentId, data, true, false);\n }\n\n // Collections APIs\n\n async getCollectionDetails(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/details\",\n null,\n true,\n true\n );\n return new CollectionGroupDetailsResponse(r);\n }\n\n async getUserCollections(): Promise> {\n const r = await this.send(\"GET\", \"/collections\", null, true, true);\n return new ListResponse(r, CollectionResponse);\n }\n\n async getCollections(organizationId: string): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections\",\n null,\n true,\n true\n );\n return new ListResponse(r, CollectionResponse);\n }\n\n async getCollectionUsers(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/users\",\n null,\n true,\n true\n );\n return r.map((dr: any) => new SelectionReadOnlyResponse(dr));\n }\n\n async postCollection(\n organizationId: string,\n request: CollectionRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/collections\",\n request,\n true,\n true\n );\n return new CollectionResponse(r);\n }\n\n async putCollection(\n organizationId: string,\n id: string,\n request: CollectionRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/collections/\" + id,\n request,\n true,\n true\n );\n return new CollectionResponse(r);\n }\n\n async putCollectionUsers(\n organizationId: string,\n id: string,\n request: SelectionReadOnlyRequest[]\n ): Promise {\n await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/users\",\n request,\n true,\n false\n );\n }\n\n deleteCollection(organizationId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/collections/\" + id,\n null,\n true,\n false\n );\n }\n\n deleteCollectionUser(\n organizationId: string,\n id: string,\n organizationUserId: string\n ): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/user/\" + organizationUserId,\n null,\n true,\n false\n );\n }\n\n // Groups APIs\n\n async getGroupDetails(organizationId: string, id: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/details\",\n null,\n true,\n true\n );\n return new GroupDetailsResponse(r);\n }\n\n async getGroups(organizationId: string): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/groups\",\n null,\n true,\n true\n );\n return new ListResponse(r, GroupResponse);\n }\n\n async getGroupUsers(organizationId: string, id: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/users\",\n null,\n true,\n true\n );\n return r;\n }\n\n async postGroup(organizationId: string, request: GroupRequest): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/groups\",\n request,\n true,\n true\n );\n return new GroupResponse(r);\n }\n\n async putGroup(\n organizationId: string,\n id: string,\n request: GroupRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/groups/\" + id,\n request,\n true,\n true\n );\n return new GroupResponse(r);\n }\n\n async putGroupUsers(organizationId: string, id: string, request: string[]): Promise {\n await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/users\",\n request,\n true,\n false\n );\n }\n\n deleteGroup(organizationId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/groups/\" + id,\n null,\n true,\n false\n );\n }\n\n deleteGroupUser(organizationId: string, id: string, organizationUserId: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/user/\" + organizationUserId,\n null,\n true,\n false\n );\n }\n\n // Policy APIs\n\n async getPolicy(organizationId: string, type: PolicyType): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/policies/\" + type,\n null,\n true,\n true\n );\n return new PolicyResponse(r);\n }\n\n async getPolicies(organizationId: string): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/policies\",\n null,\n true,\n true\n );\n return new ListResponse(r, PolicyResponse);\n }\n\n async getPoliciesByToken(\n organizationId: string,\n token: string,\n email: string,\n organizationUserId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" +\n organizationId +\n \"/policies/token?\" +\n \"token=\" +\n encodeURIComponent(token) +\n \"&email=\" +\n encodeURIComponent(email) +\n \"&organizationUserId=\" +\n organizationUserId,\n null,\n false,\n true\n );\n return new ListResponse(r, PolicyResponse);\n }\n\n async getPoliciesByInvitedUser(\n organizationId: string,\n userId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/policies/invited-user?\" + \"userId=\" + userId,\n null,\n false,\n true\n );\n return new ListResponse(r, PolicyResponse);\n }\n\n async putPolicy(\n organizationId: string,\n type: PolicyType,\n request: PolicyRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/policies/\" + type,\n request,\n true,\n true\n );\n return new PolicyResponse(r);\n }\n\n // Organization User APIs\n\n async getOrganizationUser(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n null,\n true,\n true\n );\n return new OrganizationUserDetailsResponse(r);\n }\n\n async getOrganizationUserGroups(organizationId: string, id: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/groups\",\n null,\n true,\n true\n );\n return r;\n }\n\n async getOrganizationUsers(\n organizationId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users\",\n null,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserUserDetailsResponse);\n }\n\n async getOrganizationUserResetPasswordDetails(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reset-password-details\",\n null,\n true,\n true\n );\n return new OrganizationUserResetPasswordDetailsReponse(r);\n }\n\n async getOrganizationAutoEnrollStatus(\n identifier: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + identifier + \"/auto-enroll-status\",\n null,\n true,\n true\n );\n return new OrganizationAutoEnrollStatusResponse(r);\n }\n\n postOrganizationUserInvite(\n organizationId: string,\n request: OrganizationUserInviteRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/invite\",\n request,\n true,\n false\n );\n }\n\n postOrganizationUserReinvite(organizationId: string, id: string): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reinvite\",\n null,\n true,\n false\n );\n }\n\n async postManyOrganizationUserReinvite(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/reinvite\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n postOrganizationUserAccept(\n organizationId: string,\n id: string,\n request: OrganizationUserAcceptRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/accept\",\n request,\n true,\n false\n );\n }\n\n postOrganizationUserConfirm(\n organizationId: string,\n id: string,\n request: OrganizationUserConfirmRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/confirm\",\n request,\n true,\n false\n );\n }\n\n async postOrganizationUsersPublicKey(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/public-keys\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkPublicKeyResponse);\n }\n\n async postOrganizationUserBulkConfirm(\n organizationId: string,\n request: OrganizationUserBulkConfirmRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/confirm\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n putOrganizationUser(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n request,\n true,\n false\n );\n }\n\n putOrganizationUserGroups(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateGroupsRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/groups\",\n request,\n true,\n false\n );\n }\n\n putOrganizationUserResetPasswordEnrollment(\n organizationId: string,\n userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + userId + \"/reset-password-enrollment\",\n request,\n true,\n false\n );\n }\n\n putOrganizationUserResetPassword(\n organizationId: string,\n id: string,\n request: OrganizationUserResetPasswordRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reset-password\",\n request,\n true,\n false\n );\n }\n\n deleteOrganizationUser(organizationId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n null,\n true,\n false\n );\n }\n\n async deleteManyOrganizationUsers(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n // Plan APIs\n\n async getPlans(): Promise> {\n const r = await this.send(\"GET\", \"/plans/\", null, true, true);\n return new ListResponse(r, PlanResponse);\n }\n\n async postImportDirectory(organizationId: string, request: ImportDirectoryRequest): Promise {\n return this.send(\"POST\", \"/organizations/\" + organizationId + \"/import\", request, true, false);\n }\n\n async postPublicImportDirectory(request: OrganizationImportRequest): Promise {\n return this.send(\"POST\", \"/public/organization/import\", request, true, false);\n }\n\n async getTaxRates(): Promise> {\n const r = await this.send(\"GET\", \"/plans/sales-tax-rates/\", null, true, true);\n return new ListResponse(r, TaxRateResponse);\n }\n\n // Settings APIs\n\n async getSettingsDomains(): Promise {\n const r = await this.send(\"GET\", \"/settings/domains\", null, true, true);\n return new DomainsResponse(r);\n }\n\n async putSettingsDomains(request: UpdateDomainsRequest): Promise {\n const r = await this.send(\"PUT\", \"/settings/domains\", request, true, true);\n return new DomainsResponse(r);\n }\n\n // Sync APIs\n\n async getSync(): Promise {\n const path = this.isDesktopClient || this.isWebClient ? \"/sync?excludeDomains=true\" : \"/sync\";\n const r = await this.send(\"GET\", path, null, true, true);\n return new SyncResponse(r);\n }\n\n // Two-factor APIs\n\n async getTwoFactorProviders(): Promise> {\n const r = await this.send(\"GET\", \"/two-factor\", null, true, true);\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorOrganizationProviders(\n organizationId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/two-factor\",\n null,\n true,\n true\n );\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorAuthenticator(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-authenticator\", request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async getTwoFactorEmail(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-email\", request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async getTwoFactorDuo(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-duo\", request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorOrganizationDuo(\n organizationId: string,\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/two-factor/get-duo\",\n request,\n true,\n true\n );\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorYubiKey(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-yubikey\", request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async getTwoFactorWebAuthn(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-webauthn\", request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async getTwoFactorWebAuthnChallenge(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-webauthn-challenge\", request, true, true);\n return new ChallengeResponse(r);\n }\n\n async getTwoFactorRecover(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-recover\", request, true, true);\n return new TwoFactorRecoverResponse(r);\n }\n\n async putTwoFactorAuthenticator(\n request: UpdateTwoFactorAuthenticatorRequest\n ): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/authenticator\", request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async putTwoFactorEmail(request: UpdateTwoFactorEmailRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/email\", request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async putTwoFactorDuo(request: UpdateTwoFactorDuoRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/duo\", request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorOrganizationDuo(\n organizationId: string,\n request: UpdateTwoFactorDuoRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/two-factor/duo\",\n request,\n true,\n true\n );\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorYubiKey(\n request: UpdateTwoFactorYubioOtpRequest\n ): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/yubikey\", request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async putTwoFactorWebAuthn(\n request: UpdateTwoFactorWebAuthnRequest\n ): Promise {\n const response = request.deviceResponse.response as AuthenticatorAttestationResponse;\n const data: any = Object.assign({}, request);\n\n data.deviceResponse = {\n id: request.deviceResponse.id,\n rawId: btoa(request.deviceResponse.id),\n type: request.deviceResponse.type,\n extensions: request.deviceResponse.getClientExtensionResults(),\n response: {\n AttestationObject: Utils.fromBufferToB64(response.attestationObject),\n clientDataJson: Utils.fromBufferToB64(response.clientDataJSON),\n },\n };\n\n const r = await this.send(\"PUT\", \"/two-factor/webauthn\", data, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async deleteTwoFactorWebAuthn(\n request: UpdateTwoFactorWebAuthnDeleteRequest\n ): Promise {\n const r = await this.send(\"DELETE\", \"/two-factor/webauthn\", request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async putTwoFactorDisable(request: TwoFactorProviderRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/disable\", request, true, true);\n return new TwoFactorProviderResponse(r);\n }\n\n async putTwoFactorOrganizationDisable(\n organizationId: string,\n request: TwoFactorProviderRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/two-factor/disable\",\n request,\n true,\n true\n );\n return new TwoFactorProviderResponse(r);\n }\n\n postTwoFactorRecover(request: TwoFactorRecoveryRequest): Promise {\n return this.send(\"POST\", \"/two-factor/recover\", request, false, false);\n }\n\n postTwoFactorEmailSetup(request: TwoFactorEmailRequest): Promise {\n return this.send(\"POST\", \"/two-factor/send-email\", request, true, false);\n }\n\n postTwoFactorEmail(request: TwoFactorEmailRequest): Promise {\n return this.send(\"POST\", \"/two-factor/send-email-login\", request, false, false);\n }\n\n // Emergency Access APIs\n\n async getEmergencyAccessTrusted(): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/trusted\", null, true, true);\n return new ListResponse(r, EmergencyAccessGranteeDetailsResponse);\n }\n\n async getEmergencyAccessGranted(): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/granted\", null, true, true);\n return new ListResponse(r, EmergencyAccessGrantorDetailsResponse);\n }\n\n async getEmergencyAccess(id: string): Promise {\n const r = await this.send(\"GET\", \"/emergency-access/\" + id, null, true, true);\n return new EmergencyAccessGranteeDetailsResponse(r);\n }\n\n async getEmergencyGrantorPolicies(id: string): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/\" + id + \"/policies\", null, true, true);\n return new ListResponse(r, PolicyResponse);\n }\n\n putEmergencyAccess(id: string, request: EmergencyAccessUpdateRequest): Promise {\n return this.send(\"PUT\", \"/emergency-access/\" + id, request, true, false);\n }\n\n deleteEmergencyAccess(id: string): Promise {\n return this.send(\"DELETE\", \"/emergency-access/\" + id, null, true, false);\n }\n\n postEmergencyAccessInvite(request: EmergencyAccessInviteRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/invite\", request, true, false);\n }\n\n postEmergencyAccessReinvite(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/reinvite\", null, true, false);\n }\n\n postEmergencyAccessAccept(id: string, request: EmergencyAccessAcceptRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/accept\", request, true, false);\n }\n\n postEmergencyAccessConfirm(id: string, request: EmergencyAccessConfirmRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/confirm\", request, true, false);\n }\n\n postEmergencyAccessInitiate(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/initiate\", null, true, false);\n }\n\n postEmergencyAccessApprove(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/approve\", null, true, false);\n }\n\n postEmergencyAccessReject(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/reject\", null, true, false);\n }\n\n async postEmergencyAccessTakeover(id: string): Promise {\n const r = await this.send(\"POST\", \"/emergency-access/\" + id + \"/takeover\", null, true, true);\n return new EmergencyAccessTakeoverResponse(r);\n }\n\n async postEmergencyAccessPassword(\n id: string,\n request: EmergencyAccessPasswordRequest\n ): Promise {\n await this.send(\"POST\", \"/emergency-access/\" + id + \"/password\", request, true, true);\n }\n\n async postEmergencyAccessView(id: string): Promise {\n const r = await this.send(\"POST\", \"/emergency-access/\" + id + \"/view\", null, true, true);\n return new EmergencyAccessViewResponse(r);\n }\n\n // Organization APIs\n\n async getOrganization(id: string): Promise {\n const r = await this.send(\"GET\", \"/organizations/\" + id, null, true, true);\n return new OrganizationResponse(r);\n }\n\n async getOrganizationBilling(id: string): Promise {\n const r = await this.send(\"GET\", \"/organizations/\" + id + \"/billing\", null, true, true);\n return new BillingResponse(r);\n }\n\n async getOrganizationSubscription(id: string): Promise {\n const r = await this.send(\"GET\", \"/organizations/\" + id + \"/subscription\", null, true, true);\n return new OrganizationSubscriptionResponse(r);\n }\n\n async getOrganizationLicense(id: string, installationId: string): Promise {\n return this.send(\n \"GET\",\n \"/organizations/\" + id + \"/license?installationId=\" + installationId,\n null,\n true,\n true\n );\n }\n\n async getOrganizationTaxInfo(id: string): Promise {\n const r = await this.send(\"GET\", \"/organizations/\" + id + \"/tax\", null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async getOrganizationSso(id: string): Promise {\n const r = await this.send(\"GET\", \"/organizations/\" + id + \"/sso\", null, true, true);\n return new OrganizationSsoResponse(r);\n }\n\n async postOrganization(request: OrganizationCreateRequest): Promise {\n const r = await this.send(\"POST\", \"/organizations\", request, true, true);\n return new OrganizationResponse(r);\n }\n\n async putOrganization(\n id: string,\n request: OrganizationUpdateRequest\n ): Promise {\n const r = await this.send(\"PUT\", \"/organizations/\" + id, request, true, true);\n return new OrganizationResponse(r);\n }\n\n async putOrganizationTaxInfo(\n id: string,\n request: OrganizationTaxInfoUpdateRequest\n ): Promise {\n return this.send(\"PUT\", \"/organizations/\" + id + \"/tax\", request, true, false);\n }\n\n postLeaveOrganization(id: string): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/leave\", null, true, false);\n }\n\n async postOrganizationLicense(data: FormData): Promise {\n const r = await this.send(\"POST\", \"/organizations/license\", data, true, true);\n return new OrganizationResponse(r);\n }\n\n async postOrganizationLicenseUpdate(id: string, data: FormData): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/license\", data, true, false);\n }\n\n async postOrganizationApiKey(\n id: string,\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/organizations/\" + id + \"/api-key\", request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async postOrganizationRotateApiKey(\n id: string,\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + id + \"/rotate-api-key\",\n request,\n true,\n true\n );\n return new ApiKeyResponse(r);\n }\n\n async postOrganizationSso(\n id: string,\n request: OrganizationSsoRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/organizations/\" + id + \"/sso\", request, true, true);\n return new OrganizationSsoResponse(r);\n }\n\n async postOrganizationUpgrade(\n id: string,\n request: OrganizationUpgradeRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/organizations/\" + id + \"/upgrade\", request, true, true);\n return new PaymentResponse(r);\n }\n\n async postOrganizationUpdateSubscription(\n id: string,\n request: OrganizationSubscriptionUpdateRequest\n ): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/subscription\", request, true, false);\n }\n\n async postOrganizationSeat(id: string, request: SeatRequest): Promise {\n const r = await this.send(\"POST\", \"/organizations/\" + id + \"/seat\", request, true, true);\n return new PaymentResponse(r);\n }\n\n async postOrganizationStorage(id: string, request: StorageRequest): Promise {\n const r = await this.send(\"POST\", \"/organizations/\" + id + \"/storage\", request, true, true);\n return new PaymentResponse(r);\n }\n\n postOrganizationPayment(id: string, request: PaymentRequest): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/payment\", request, true, false);\n }\n\n postOrganizationVerifyBank(id: string, request: VerifyBankRequest): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/verify-bank\", request, true, false);\n }\n\n postOrganizationCancel(id: string): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/cancel\", null, true, false);\n }\n\n postOrganizationReinstate(id: string): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/reinstate\", null, true, false);\n }\n\n deleteOrganization(id: string, request: SecretVerificationRequest): Promise {\n return this.send(\"DELETE\", \"/organizations/\" + id, request, true, false);\n }\n\n async getOrganizationKeys(id: string): Promise {\n const r = await this.send(\"GET\", \"/organizations/\" + id + \"/keys\", null, true, true);\n return new OrganizationKeysResponse(r);\n }\n\n async postOrganizationKeys(\n id: string,\n request: OrganizationKeysRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/organizations/\" + id + \"/keys\", request, true, true);\n return new OrganizationKeysResponse(r);\n }\n\n // Provider APIs\n\n async postProviderSetup(id: string, request: ProviderSetupRequest) {\n const r = await this.send(\"POST\", \"/providers/\" + id + \"/setup\", request, true, true);\n return new ProviderResponse(r);\n }\n\n async getProvider(id: string) {\n const r = await this.send(\"GET\", \"/providers/\" + id, null, true, true);\n return new ProviderResponse(r);\n }\n\n async putProvider(id: string, request: ProviderUpdateRequest) {\n const r = await this.send(\"PUT\", \"/providers/\" + id, request, true, true);\n return new ProviderResponse(r);\n }\n\n // Provider User APIs\n\n async getProviderUsers(\n providerId: string\n ): Promise> {\n const r = await this.send(\"GET\", \"/providers/\" + providerId + \"/users\", null, true, true);\n return new ListResponse(r, ProviderUserUserDetailsResponse);\n }\n\n async getProviderUser(providerId: string, id: string): Promise {\n const r = await this.send(\"GET\", \"/providers/\" + providerId + \"/users/\" + id, null, true, true);\n return new ProviderUserResponse(r);\n }\n\n postProviderUserInvite(providerId: string, request: ProviderUserInviteRequest): Promise {\n return this.send(\"POST\", \"/providers/\" + providerId + \"/users/invite\", request, true, false);\n }\n\n postProviderUserReinvite(providerId: string, id: string): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/reinvite\",\n null,\n true,\n false\n );\n }\n\n async postManyProviderUserReinvite(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/reinvite\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n async postProviderUserBulkConfirm(\n providerId: string,\n request: ProviderUserBulkConfirmRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/confirm\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n async deleteManyProviderUsers(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\"DELETE\", \"/providers/\" + providerId + \"/users\", request, true, true);\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n postProviderUserAccept(\n providerId: string,\n id: string,\n request: ProviderUserAcceptRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/accept\",\n request,\n true,\n false\n );\n }\n\n postProviderUserConfirm(\n providerId: string,\n id: string,\n request: ProviderUserConfirmRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/confirm\",\n request,\n true,\n false\n );\n }\n\n async postProviderUsersPublicKey(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/public-keys\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkPublicKeyResponse);\n }\n\n putProviderUser(\n providerId: string,\n id: string,\n request: ProviderUserUpdateRequest\n ): Promise {\n return this.send(\"PUT\", \"/providers/\" + providerId + \"/users/\" + id, request, true, false);\n }\n\n deleteProviderUser(providerId: string, id: string): Promise {\n return this.send(\"DELETE\", \"/providers/\" + providerId + \"/users/\" + id, null, true, false);\n }\n\n // Provider Organization APIs\n\n async getProviderClients(\n providerId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/providers/\" + providerId + \"/organizations\",\n null,\n true,\n true\n );\n return new ListResponse(r, ProviderOrganizationOrganizationDetailsResponse);\n }\n\n postProviderAddOrganization(\n providerId: string,\n request: ProviderAddOrganizationRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/organizations/add\",\n request,\n true,\n false\n );\n }\n\n async postProviderCreateOrganization(\n providerId: string,\n request: ProviderOrganizationCreateRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/organizations\",\n request,\n true,\n true\n );\n return new ProviderOrganizationResponse(r);\n }\n\n deleteProviderOrganization(providerId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/providers/\" + providerId + \"/organizations/\" + id,\n null,\n true,\n false\n );\n }\n\n // Event APIs\n\n async getEvents(start: string, end: string, token: string): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsCipher(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/ciphers/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganization(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/organizations/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganizationUser(\n organizationId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/events\",\n start,\n end,\n token\n ),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsProvider(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/providers/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsProviderUser(\n providerId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\n \"/providers/\" + providerId + \"/users/\" + id + \"/events\",\n start,\n end,\n token\n ),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async postEventsCollect(request: EventRequest[]): Promise {\n const authHeader = await this.getActiveBearerToken();\n const headers = new Headers({\n \"Device-Type\": this.deviceType,\n Authorization: \"Bearer \" + authHeader,\n \"Content-Type\": \"application/json; charset=utf-8\",\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n const response = await this.fetch(\n new Request(this.environmentService.getEventsUrl() + \"/collect\", {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n method: \"POST\",\n body: JSON.stringify(request),\n headers: headers,\n })\n );\n if (response.status !== 200) {\n return Promise.reject(\"Event post failed.\");\n }\n }\n\n // User APIs\n\n async getUserPublicKey(id: string): Promise {\n const r = await this.send(\"GET\", \"/users/\" + id + \"/public-key\", null, true, true);\n return new UserKeyResponse(r);\n }\n\n // HIBP APIs\n\n async getHibpBreach(username: string): Promise {\n const r = await this.send(\"GET\", \"/hibp/breach?username=\" + username, null, true, true);\n return r.map((a: any) => new BreachAccountResponse(a));\n }\n\n // Misc\n\n async postBitPayInvoice(request: BitPayInvoiceRequest): Promise {\n const r = await this.send(\"POST\", \"/bitpay-invoice\", request, true, true);\n return r as string;\n }\n\n async postSetupPayment(): Promise {\n const r = await this.send(\"POST\", \"/setup-payment\", null, true, true);\n return r as string;\n }\n\n // Key Connector\n\n async getUserKeyFromKeyConnector(keyConnectorUrl: string): Promise {\n const authHeader = await this.getActiveBearerToken();\n\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/user-keys\", {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Accept: \"application/json\",\n Authorization: \"Bearer \" + authHeader,\n }),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n\n return new KeyConnectorUserKeyResponse(await response.json());\n }\n\n async postUserKeyToKeyConnector(\n keyConnectorUrl: string,\n request: KeyConnectorUserKeyRequest\n ): Promise {\n const authHeader = await this.getActiveBearerToken();\n\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/user-keys\", {\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Accept: \"application/json\",\n Authorization: \"Bearer \" + authHeader,\n \"Content-Type\": \"application/json; charset=utf-8\",\n }),\n body: JSON.stringify(request),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n async getKeyConnectorAlive(keyConnectorUrl: string) {\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/alive\", {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Accept: \"application/json\",\n \"Content-Type\": \"application/json; charset=utf-8\",\n }),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n // Helpers\n\n async getActiveBearerToken(): Promise {\n let accessToken = await this.tokenService.getToken();\n if (await this.tokenService.tokenNeedsRefresh()) {\n await this.doAuthRefresh();\n accessToken = await this.tokenService.getToken();\n }\n return accessToken;\n }\n\n async fetch(request: Request): Promise {\n if (request.method === \"GET\") {\n request.headers.set(\"Cache-Control\", \"no-store\");\n request.headers.set(\"Pragma\", \"no-cache\");\n }\n request.headers.set(\"Bitwarden-Client-Name\", this.platformUtilsService.getClientType());\n request.headers.set(\n \"Bitwarden-Client-Version\",\n await this.platformUtilsService.getApplicationVersion()\n );\n return this.nativeFetch(request);\n }\n\n nativeFetch(request: Request): Promise {\n return fetch(request);\n }\n\n async preValidateSso(identifier: string): Promise {\n if (identifier == null || identifier === \"\") {\n throw new Error(\"Organization Identifier was not provided.\");\n }\n const headers = new Headers({\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const path = `/account/prevalidate?domainHint=${encodeURIComponent(identifier)}`;\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + path, {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n headers: headers,\n method: \"GET\",\n })\n );\n\n if (response.status === 200) {\n return true;\n } else {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n async postCreateSponsorship(\n sponsoredOrgId: string,\n request: OrganizationSponsorshipCreateRequest\n ): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/\" + sponsoredOrgId + \"/families-for-enterprise\",\n request,\n true,\n false\n );\n }\n\n async deleteRevokeSponsorship(sponsoringOrganizationId: string): Promise {\n return await this.send(\n \"DELETE\",\n \"/organization/sponsorship/\" + sponsoringOrganizationId,\n null,\n true,\n false\n );\n }\n\n async deleteRemoveSponsorship(sponsoringOrgId: string): Promise {\n return await this.send(\n \"DELETE\",\n \"/organization/sponsorship/sponsored/\" + sponsoringOrgId,\n null,\n true,\n false\n );\n }\n\n async postPreValidateSponsorshipToken(sponsorshipToken: string): Promise {\n const r = await this.send(\n \"POST\",\n \"/organization/sponsorship/validate-token?sponsorshipToken=\" +\n encodeURIComponent(sponsorshipToken),\n null,\n true,\n true\n );\n return r as boolean;\n }\n\n async postRedeemSponsorship(\n sponsorshipToken: string,\n request: OrganizationSponsorshipRedeemRequest\n ): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/redeem?sponsorshipToken=\" + encodeURIComponent(sponsorshipToken),\n request,\n true,\n false\n );\n }\n\n async postResendSponsorshipOffer(sponsoringOrgId: string): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/\" + sponsoringOrgId + \"/families-for-enterprise/resend\",\n null,\n true,\n false\n );\n }\n\n protected async doAuthRefresh(): Promise {\n const refreshToken = await this.tokenService.getRefreshToken();\n if (refreshToken != null && refreshToken !== \"\") {\n return this.doRefreshToken();\n }\n\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n if (!Utils.isNullOrWhitespace(clientId) && !Utils.isNullOrWhitespace(clientSecret)) {\n return this.doApiTokenRefresh();\n }\n\n throw new Error(\"Cannot refresh token, no refresh token or api keys are stored\");\n }\n\n protected async doRefreshToken(): Promise {\n const refreshToken = await this.tokenService.getRefreshToken();\n if (refreshToken == null || refreshToken === \"\") {\n throw new Error();\n }\n const headers = new Headers({\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const decodedToken = await this.tokenService.decodeToken();\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + \"/connect/token\", {\n body: this.qsStringify({\n grant_type: \"refresh_token\",\n client_id: decodedToken.client_id,\n refresh_token: refreshToken,\n }),\n cache: \"no-store\",\n credentials: this.getCredentials(),\n headers: headers,\n method: \"POST\",\n })\n );\n\n if (response.status === 200) {\n const responseJson = await response.json();\n const tokenResponse = new IdentityTokenResponse(responseJson);\n await this.tokenService.setTokens(\n tokenResponse.accessToken,\n tokenResponse.refreshToken,\n null\n );\n } else {\n const error = await this.handleError(response, true, true);\n return Promise.reject(error);\n }\n }\n\n protected async doApiTokenRefresh(): Promise {\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n\n const appId = await this.appIdService.getAppId();\n const deviceRequest = new DeviceRequest(appId, this.platformUtilsService);\n\n const tokenRequest = new ApiTokenRequest(\n clientId,\n clientSecret,\n new TokenRequestTwoFactor(),\n deviceRequest\n );\n\n const response = await this.postIdentityToken(tokenRequest);\n if (!(response instanceof IdentityTokenResponse)) {\n throw new Error(\"Invalid response received when refreshing api token\");\n }\n\n await this.tokenService.setToken(response.accessToken);\n }\n\n private async send(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n path: string,\n body: any,\n authed: boolean,\n hasResponse: boolean,\n apiUrl?: string,\n alterHeaders?: (headers: Headers) => void\n ): Promise {\n apiUrl = Utils.isNullOrWhitespace(apiUrl) ? this.environmentService.getApiUrl() : apiUrl;\n\n const requestUrl = apiUrl + path;\n // Prevent directory traversal from malicious paths\n if (new URL(requestUrl).href !== requestUrl) {\n return Promise.reject(\"Invalid request url path.\");\n }\n\n const headers = new Headers({\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const requestInit: RequestInit = {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n method: method,\n };\n\n if (authed) {\n const authHeader = await this.getActiveBearerToken();\n headers.set(\"Authorization\", \"Bearer \" + authHeader);\n }\n if (body != null) {\n if (typeof body === \"string\") {\n requestInit.body = body;\n headers.set(\"Content-Type\", \"application/x-www-form-urlencoded; charset=utf-8\");\n } else if (typeof body === \"object\") {\n if (body instanceof FormData) {\n requestInit.body = body;\n } else {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n requestInit.body = JSON.stringify(body);\n }\n }\n }\n if (hasResponse) {\n headers.set(\"Accept\", \"application/json\");\n }\n if (alterHeaders != null) {\n alterHeaders(headers);\n }\n\n requestInit.headers = headers;\n const response = await this.fetch(new Request(requestUrl, requestInit));\n\n if (hasResponse && response.status === 200) {\n const responseJson = await response.json();\n return responseJson;\n } else if (response.status !== 200) {\n const error = await this.handleError(response, false, authed);\n return Promise.reject(error);\n }\n }\n\n private async handleError(\n response: Response,\n tokenError: boolean,\n authed: boolean\n ): Promise {\n if (\n authed &&\n ((tokenError && response.status === 400) ||\n response.status === 401 ||\n response.status === 403)\n ) {\n await this.logoutCallback(true);\n return null;\n }\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n } else if (this.isTextResponse(response)) {\n responseJson = { Message: await response.text() };\n }\n\n return new ErrorResponse(responseJson, response.status, tokenError);\n }\n\n private qsStringify(params: any): string {\n return Object.keys(params)\n .map((key) => {\n return encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]);\n })\n .join(\"&\");\n }\n\n private getCredentials(): RequestCredentials {\n if (!this.isWebClient || this.environmentService.hasBaseUrl()) {\n return \"include\";\n }\n return undefined;\n }\n\n private addEventParameters(base: string, start: string, end: string, token: string) {\n if (start != null) {\n base += \"?start=\" + start;\n }\n if (end != null) {\n base += base.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n base += \"end=\" + end;\n }\n if (token != null) {\n base += base.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n base += \"continuationToken=\" + token;\n }\n return base;\n }\n\n private isJsonResponse(response: Response): boolean {\n const typeHeader = response.headers.get(\"content-type\");\n return typeHeader != null && typeHeader.indexOf(\"application/json\") > -1;\n }\n\n private isTextResponse(response: Response): boolean {\n const typeHeader = response.headers.get(\"content-type\");\n return typeHeader != null && typeHeader.indexOf(\"text\") > -1;\n }\n}\n","import { AppIdService as AppIdServiceAbstraction } from \"../abstractions/appId.service\";\nimport { StorageService } from \"../abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"../enums/htmlStorageLocation\";\nimport { Utils } from \"../misc/utils\";\n\nexport class AppIdService implements AppIdServiceAbstraction {\n constructor(private storageService: StorageService) {}\n\n getAppId(): Promise {\n return this.makeAndGetAppId(\"appId\");\n }\n\n getAnonymousAppId(): Promise {\n return this.makeAndGetAppId(\"anonymousAppId\");\n }\n\n private async makeAndGetAppId(key: string) {\n const existingId = await this.storageService.get(key, {\n htmlStorageLocation: HtmlStorageLocation.Local,\n });\n if (existingId != null) {\n return existingId;\n }\n\n const guid = Utils.newGuid();\n await this.storageService.save(key, guid, {\n htmlStorageLocation: HtmlStorageLocation.Local,\n });\n return guid;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { AuditService as AuditServiceAbstraction } from \"../abstractions/audit.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { throttle } from \"../misc/throttle\";\nimport { Utils } from \"../misc/utils\";\nimport { BreachAccountResponse } from \"../models/response/breachAccountResponse\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\n\nconst PwnedPasswordsApi = \"https://api.pwnedpasswords.com/range/\";\n\nexport class AuditService implements AuditServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService\n ) {}\n\n @throttle(100, () => \"passwordLeaked\")\n async passwordLeaked(password: string): Promise {\n const hashBytes = await this.cryptoFunctionService.hash(password, \"sha1\");\n const hash = Utils.fromBufferToHex(hashBytes).toUpperCase();\n const hashStart = hash.substr(0, 5);\n const hashEnding = hash.substr(5);\n\n const response = await this.apiService.nativeFetch(new Request(PwnedPasswordsApi + hashStart));\n const leakedHashes = await response.text();\n const match = leakedHashes.split(/\\r?\\n/).find((v) => {\n return v.split(\":\")[0] === hashEnding;\n });\n\n return match != null ? parseInt(match.split(\":\")[1], 10) : 0;\n }\n\n async breachedAccounts(username: string): Promise {\n try {\n return await this.apiService.getHibpBreach(username);\n } catch (e) {\n const error = e as ErrorResponse;\n if (error.statusCode === 404) {\n return [];\n }\n throw new Error();\n }\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { AppIdService } from \"../abstractions/appId.service\";\nimport { AuthService as AuthServiceAbstraction } from \"../abstractions/auth.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { KeyConnectorService } from \"../abstractions/keyConnector.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { MessagingService } from \"../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { TwoFactorService } from \"../abstractions/twoFactor.service\";\nimport { AuthenticationType } from \"../enums/authenticationType\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { ApiLogInStrategy } from \"../misc/logInStrategies/apiLogin.strategy\";\nimport { PasswordLogInStrategy } from \"../misc/logInStrategies/passwordLogin.strategy\";\nimport { SsoLogInStrategy } from \"../misc/logInStrategies/ssoLogin.strategy\";\nimport { AuthResult } from \"../models/domain/authResult\";\nimport {\n ApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n} from \"../models/domain/logInCredentials\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { TokenRequestTwoFactor } from \"../models/request/identityToken/tokenRequestTwoFactor\";\nimport { PreloginRequest } from \"../models/request/preloginRequest\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\n\nconst sessionTimeoutLength = 2 * 60 * 1000; // 2 minutes\n\nexport class AuthService implements AuthServiceAbstraction {\n get email(): string {\n return this.logInStrategy instanceof PasswordLogInStrategy ? this.logInStrategy.email : null;\n }\n\n get masterPasswordHash(): string {\n return this.logInStrategy instanceof PasswordLogInStrategy\n ? this.logInStrategy.masterPasswordHash\n : null;\n }\n\n private logInStrategy: ApiLogInStrategy | PasswordLogInStrategy | SsoLogInStrategy;\n private sessionTimeout: any;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n protected tokenService: TokenService,\n protected appIdService: AppIdService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected logService: LogService,\n protected keyConnectorService: KeyConnectorService,\n protected environmentService: EnvironmentService,\n protected stateService: StateService,\n protected twoFactorService: TwoFactorService,\n protected i18nService: I18nService\n ) {}\n\n async logIn(\n credentials: ApiLogInCredentials | PasswordLogInCredentials | SsoLogInCredentials\n ): Promise {\n this.clearState();\n\n let strategy: ApiLogInStrategy | PasswordLogInStrategy | SsoLogInStrategy;\n\n if (credentials.type === AuthenticationType.Password) {\n strategy = new PasswordLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this\n );\n } else if (credentials.type === AuthenticationType.Sso) {\n strategy = new SsoLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this.keyConnectorService\n );\n } else if (credentials.type === AuthenticationType.Api) {\n strategy = new ApiLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this.environmentService,\n this.keyConnectorService\n );\n }\n\n const result = await strategy.logIn(credentials as any);\n\n if (result?.requiresTwoFactor) {\n this.saveState(strategy);\n }\n return result;\n }\n\n async logInTwoFactor(\n twoFactor: TokenRequestTwoFactor,\n captchaResponse: string\n ): Promise {\n if (this.logInStrategy == null) {\n throw new Error(this.i18nService.t(\"sessionTimeout\"));\n }\n\n try {\n const result = await this.logInStrategy.logInTwoFactor(twoFactor, captchaResponse);\n\n // Only clear state if 2FA token has been accepted, otherwise we need to be able to try again\n if (!result.requiresTwoFactor && !result.requiresCaptcha) {\n this.clearState();\n }\n return result;\n } catch (e) {\n // API exceptions are okay, but if there are any unhandled client-side errors then clear state to be safe\n if (!(e instanceof ErrorResponse)) {\n this.clearState();\n }\n throw e;\n }\n }\n\n logOut(callback: () => void) {\n callback();\n this.messagingService.send(\"loggedOut\");\n }\n\n authingWithApiKey(): boolean {\n return this.logInStrategy instanceof ApiLogInStrategy;\n }\n\n authingWithSso(): boolean {\n return this.logInStrategy instanceof SsoLogInStrategy;\n }\n\n authingWithPassword(): boolean {\n return this.logInStrategy instanceof PasswordLogInStrategy;\n }\n\n async makePreloginKey(masterPassword: string, email: string): Promise {\n email = email.trim().toLowerCase();\n let kdf: KdfType = null;\n let kdfIterations: number = null;\n try {\n const preloginResponse = await this.apiService.postPrelogin(new PreloginRequest(email));\n if (preloginResponse != null) {\n kdf = preloginResponse.kdf;\n kdfIterations = preloginResponse.kdfIterations;\n }\n } catch (e) {\n if (e == null || e.statusCode !== 404) {\n throw e;\n }\n }\n return this.cryptoService.makeKey(masterPassword, email, kdf, kdfIterations);\n }\n\n private saveState(strategy: ApiLogInStrategy | PasswordLogInStrategy | SsoLogInStrategy) {\n this.logInStrategy = strategy;\n this.startSessionTimeout();\n }\n\n private clearState() {\n this.logInStrategy = null;\n this.clearSessionTimeout();\n }\n\n private startSessionTimeout() {\n this.clearSessionTimeout();\n this.sessionTimeout = setTimeout(() => this.clearState(), sessionTimeoutLength);\n }\n\n private clearSessionTimeout() {\n if (this.sessionTimeout != null) {\n clearTimeout(this.sessionTimeout);\n }\n }\n}\n","import { LogService } from \"../abstractions/log.service\";\nimport { Utils } from \"../misc/utils\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\n\nconst MAX_SINGLE_BLOB_UPLOAD_SIZE = 256 * 1024 * 1024; // 256 MiB\nconst MAX_BLOCKS_PER_BLOB = 50000;\n\nexport class AzureFileUploadService {\n constructor(private logService: LogService) {}\n\n async upload(url: string, data: EncArrayBuffer, renewalCallback: () => Promise) {\n if (data.buffer.byteLength <= MAX_SINGLE_BLOB_UPLOAD_SIZE) {\n return await this.azureUploadBlob(url, data);\n } else {\n return await this.azureUploadBlocks(url, data, renewalCallback);\n }\n }\n private async azureUploadBlob(url: string, data: EncArrayBuffer) {\n const urlObject = Utils.getUrl(url);\n const headers = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": urlObject.searchParams.get(\"sv\"),\n \"Content-Length\": data.buffer.byteLength.toString(),\n \"x-ms-blob-type\": \"BlockBlob\",\n });\n\n const request = new Request(url, {\n body: data.buffer,\n cache: \"no-store\",\n method: \"PUT\",\n headers: headers,\n });\n\n const blobResponse = await fetch(request);\n\n if (blobResponse.status !== 201) {\n throw new Error(`Failed to create Azure blob: ${blobResponse.status}`);\n }\n }\n private async azureUploadBlocks(\n url: string,\n data: EncArrayBuffer,\n renewalCallback: () => Promise\n ) {\n const baseUrl = Utils.getUrl(url);\n const blockSize = this.getMaxBlockSize(baseUrl.searchParams.get(\"sv\"));\n let blockIndex = 0;\n const numBlocks = Math.ceil(data.buffer.byteLength / blockSize);\n const blocksStaged: string[] = [];\n\n if (numBlocks > MAX_BLOCKS_PER_BLOB) {\n throw new Error(\n `Cannot upload file, exceeds maximum size of ${blockSize * MAX_BLOCKS_PER_BLOB}`\n );\n }\n\n // eslint-disable-next-line\n try {\n while (blockIndex < numBlocks) {\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockUrl = Utils.getUrl(url);\n const blockId = this.encodedBlockId(blockIndex);\n blockUrl.searchParams.append(\"comp\", \"block\");\n blockUrl.searchParams.append(\"blockid\", blockId);\n const start = blockIndex * blockSize;\n const blockData = data.buffer.slice(start, start + blockSize);\n const blockHeaders = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": blockUrl.searchParams.get(\"sv\"),\n \"Content-Length\": blockData.byteLength.toString(),\n });\n\n const blockRequest = new Request(blockUrl.toString(), {\n body: blockData,\n cache: \"no-store\",\n method: \"PUT\",\n headers: blockHeaders,\n });\n\n const blockResponse = await fetch(blockRequest);\n\n if (blockResponse.status !== 201) {\n const message = `Unsuccessful block PUT. Received status ${blockResponse.status}`;\n this.logService.error(message + \"\\n\" + (await blockResponse.json()));\n throw new Error(message);\n }\n\n blocksStaged.push(blockId);\n blockIndex++;\n }\n\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockListUrl = Utils.getUrl(url);\n const blockListXml = this.blockListXml(blocksStaged);\n blockListUrl.searchParams.append(\"comp\", \"blocklist\");\n const headers = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": blockListUrl.searchParams.get(\"sv\"),\n \"Content-Length\": blockListXml.length.toString(),\n });\n\n const request = new Request(blockListUrl.toString(), {\n body: blockListXml,\n cache: \"no-store\",\n method: \"PUT\",\n headers: headers,\n });\n\n const response = await fetch(request);\n\n if (response.status !== 201) {\n const message = `Unsuccessful block list PUT. Received status ${response.status}`;\n this.logService.error(message + \"\\n\" + (await response.json()));\n throw new Error(message);\n }\n } catch (e) {\n throw e;\n }\n }\n\n private async renewUrlIfNecessary(\n url: string,\n renewalCallback: () => Promise\n ): Promise {\n const urlObject = Utils.getUrl(url);\n const expiry = new Date(urlObject.searchParams.get(\"se\") ?? \"\");\n\n if (isNaN(expiry.getTime())) {\n expiry.setTime(Date.now() + 3600000);\n }\n\n if (expiry.getTime() < Date.now() + 1000) {\n return await renewalCallback();\n }\n return url;\n }\n\n private encodedBlockId(blockIndex: number) {\n // Encoded blockId max size is 64, so pre-encoding max size is 48\n const utfBlockId = (\n \"000000000000000000000000000000000000000000000000\" + blockIndex.toString()\n ).slice(-48);\n return Utils.fromUtf8ToB64(utfBlockId);\n }\n\n private blockListXml(blockIdList: string[]) {\n let xml = '';\n blockIdList.forEach((blockId) => {\n xml += `${blockId}`;\n });\n xml += \"\";\n return xml;\n }\n\n private getMaxBlockSize(version: string) {\n if (Version.compare(version, \"2019-12-12\") >= 0) {\n return 4000 * 1024 * 1024; // 4000 MiB\n } else if (Version.compare(version, \"2016-05-31\") >= 0) {\n return 100 * 1024 * 1024; // 100 MiB\n } else {\n return 4 * 1024 * 1024; // 4 MiB\n }\n }\n}\n\nclass Version {\n /**\n * Compares two Azure Versions against each other\n * @param a Version to compare\n * @param b Version to compare\n * @returns a number less than zero if b is newer than a, 0 if equal,\n * and greater than zero if a is newer than b\n */\n static compare(a: Required | string, b: Required | string) {\n if (typeof a === \"string\") {\n a = new Version(a);\n }\n\n if (typeof b === \"string\") {\n b = new Version(b);\n }\n\n return a.year !== b.year\n ? a.year - b.year\n : a.month !== b.month\n ? a.month - b.month\n : a.day !== b.day\n ? a.day - b.day\n : 0;\n }\n year = 0;\n month = 0;\n day = 0;\n\n constructor(version: string) {\n try {\n const parts = version.split(\"-\").map((v) => Number.parseInt(v, 10));\n this.year = parts[0];\n this.month = parts[1];\n this.day = parts[2];\n } catch {\n // Ignore error\n }\n }\n /**\n * Compares two Azure Versions against each other\n * @param compareTo Version to compare against\n * @returns a number less than zero if compareTo is newer, 0 if equal,\n * and greater than zero if this is greater than compareTo\n */\n compare(compareTo: Required | string) {\n return Version.compare(this, compareTo);\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { Utils } from \"../misc/utils\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\n\nexport class BitwardenFileUploadService {\n constructor(private apiService: ApiService) {}\n\n async upload(\n encryptedFileName: string,\n encryptedFileData: EncArrayBuffer,\n apiCall: (fd: FormData) => Promise\n ) {\n const fd = new FormData();\n try {\n const blob = new Blob([encryptedFileData.buffer], { type: \"application/octet-stream\" });\n fd.append(\"data\", blob, encryptedFileName);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\n \"data\",\n Buffer.from(encryptedFileData.buffer) as any,\n {\n filepath: encryptedFileName,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n\n await apiCall(fd);\n }\n}\n","import { BroadcasterService as BroadcasterServiceAbstraction } from \"../abstractions/broadcaster.service\";\n\nexport class BroadcasterService implements BroadcasterServiceAbstraction {\n subscribers: Map any> = new Map any>();\n\n send(message: any, id?: string) {\n if (id != null) {\n if (this.subscribers.has(id)) {\n this.subscribers.get(id)(message);\n }\n return;\n }\n\n this.subscribers.forEach((value) => {\n value(message);\n });\n }\n\n subscribe(id: string, messageCallback: (message: any) => any) {\n this.subscribers.set(id, messageCallback);\n }\n\n unsubscribe(id: string) {\n if (this.subscribers.has(id)) {\n this.subscribers.delete(id);\n }\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CipherService as CipherServiceAbstraction } from \"../abstractions/cipher.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { FileUploadService } from \"../abstractions/fileUpload.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { SearchService } from \"../abstractions/search.service\";\nimport { SettingsService } from \"../abstractions/settings.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { sequentialize } from \"../misc/sequentialize\";\nimport { Utils } from \"../misc/utils\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { Attachment } from \"../models/domain/attachment\";\nimport { Card } from \"../models/domain/card\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport Domain from \"../models/domain/domainBase\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { Field } from \"../models/domain/field\";\nimport { Identity } from \"../models/domain/identity\";\nimport { Login } from \"../models/domain/login\";\nimport { LoginUri } from \"../models/domain/loginUri\";\nimport { Password } from \"../models/domain/password\";\nimport { SecureNote } from \"../models/domain/secureNote\";\nimport { SortedCiphersCache } from \"../models/domain/sortedCiphersCache\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { AttachmentRequest } from \"../models/request/attachmentRequest\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipherBulkDeleteRequest\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipherBulkMoveRequest\";\nimport { CipherBulkRestoreRequest } from \"../models/request/cipherBulkRestoreRequest\";\nimport { CipherBulkShareRequest } from \"../models/request/cipherBulkShareRequest\";\nimport { CipherCollectionsRequest } from \"../models/request/cipherCollectionsRequest\";\nimport { CipherCreateRequest } from \"../models/request/cipherCreateRequest\";\nimport { CipherRequest } from \"../models/request/cipherRequest\";\nimport { CipherShareRequest } from \"../models/request/cipherShareRequest\";\nimport { CipherResponse } from \"../models/response/cipherResponse\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\nimport { AttachmentView } from \"../models/view/attachmentView\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { FieldView } from \"../models/view/fieldView\";\nimport { PasswordHistoryView } from \"../models/view/passwordHistoryView\";\nimport { View } from \"../models/view/view\";\n\nconst DomainMatchBlacklist = new Map>([\n [\"google.com\", new Set([\"script.google.com\"])],\n]);\n\nexport class CipherService implements CipherServiceAbstraction {\n private sortedCiphersCache: SortedCiphersCache = new SortedCiphersCache(\n this.sortCiphersByLastUsed\n );\n\n constructor(\n private cryptoService: CryptoService,\n private settingsService: SettingsService,\n private apiService: ApiService,\n private fileUploadService: FileUploadService,\n private i18nService: I18nService,\n private searchService: () => SearchService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n async getDecryptedCipherCache(): Promise {\n const decryptedCiphers = await this.stateService.getDecryptedCiphers();\n return decryptedCiphers;\n }\n\n async setDecryptedCipherCache(value: CipherView[]) {\n await this.stateService.setDecryptedCiphers(value);\n if (this.searchService != null) {\n if (value == null) {\n this.searchService().clearIndex();\n } else {\n this.searchService().indexCiphers();\n }\n }\n }\n\n async clearCache(userId?: string): Promise {\n await this.clearDecryptedCiphersState(userId);\n }\n\n async encrypt(\n model: CipherView,\n key?: SymmetricCryptoKey,\n originalCipher: Cipher = null\n ): Promise {\n // Adjust password history\n if (model.id != null) {\n if (originalCipher == null) {\n originalCipher = await this.get(model.id);\n }\n if (originalCipher != null) {\n const existingCipher = await originalCipher.decrypt();\n model.passwordHistory = existingCipher.passwordHistory || [];\n if (model.type === CipherType.Login && existingCipher.type === CipherType.Login) {\n if (\n existingCipher.login.password != null &&\n existingCipher.login.password !== \"\" &&\n existingCipher.login.password !== model.login.password\n ) {\n const ph = new PasswordHistoryView();\n ph.password = existingCipher.login.password;\n ph.lastUsedDate = model.login.passwordRevisionDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n } else {\n model.login.passwordRevisionDate = existingCipher.login.passwordRevisionDate;\n }\n }\n if (existingCipher.hasFields) {\n const existingHiddenFields = existingCipher.fields.filter(\n (f) =>\n f.type === FieldType.Hidden &&\n f.name != null &&\n f.name !== \"\" &&\n f.value != null &&\n f.value !== \"\"\n );\n const hiddenFields =\n model.fields == null\n ? []\n : model.fields.filter(\n (f) => f.type === FieldType.Hidden && f.name != null && f.name !== \"\"\n );\n existingHiddenFields.forEach((ef) => {\n const matchedField = hiddenFields.find((f) => f.name === ef.name);\n if (matchedField == null || matchedField.value !== ef.value) {\n const ph = new PasswordHistoryView();\n ph.password = ef.name + \": \" + ef.value;\n ph.lastUsedDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n }\n });\n }\n }\n if (model.passwordHistory != null && model.passwordHistory.length === 0) {\n model.passwordHistory = null;\n } else if (model.passwordHistory != null && model.passwordHistory.length > 5) {\n // only save last 5 history\n model.passwordHistory = model.passwordHistory.slice(0, 5);\n }\n }\n\n const cipher = new Cipher();\n cipher.id = model.id;\n cipher.folderId = model.folderId;\n cipher.favorite = model.favorite;\n cipher.organizationId = model.organizationId;\n cipher.type = model.type;\n cipher.collectionIds = model.collectionIds;\n cipher.revisionDate = model.revisionDate;\n cipher.reprompt = model.reprompt;\n\n if (key == null && cipher.organizationId != null) {\n key = await this.cryptoService.getOrgKey(cipher.organizationId);\n if (key == null) {\n throw new Error(\"Cannot encrypt cipher for organization. No key.\");\n }\n }\n await Promise.all([\n this.encryptObjProperty(\n model,\n cipher,\n {\n name: null,\n notes: null,\n },\n key\n ),\n this.encryptCipherData(cipher, model, key),\n this.encryptFields(model.fields, key).then((fields) => {\n cipher.fields = fields;\n }),\n this.encryptPasswordHistories(model.passwordHistory, key).then((ph) => {\n cipher.passwordHistory = ph;\n }),\n this.encryptAttachments(model.attachments, key).then((attachments) => {\n cipher.attachments = attachments;\n }),\n ]);\n\n return cipher;\n }\n\n async encryptAttachments(\n attachmentsModel: AttachmentView[],\n key: SymmetricCryptoKey\n ): Promise {\n if (attachmentsModel == null || attachmentsModel.length === 0) {\n return null;\n }\n\n const promises: Promise[] = [];\n const encAttachments: Attachment[] = [];\n attachmentsModel.forEach(async (model) => {\n const attachment = new Attachment();\n attachment.id = model.id;\n attachment.size = model.size;\n attachment.sizeName = model.sizeName;\n attachment.url = model.url;\n const promise = this.encryptObjProperty(\n model,\n attachment,\n {\n fileName: null,\n },\n key\n ).then(async () => {\n if (model.key != null) {\n attachment.key = await this.cryptoService.encrypt(model.key.key, key);\n }\n encAttachments.push(attachment);\n });\n promises.push(promise);\n });\n\n await Promise.all(promises);\n return encAttachments;\n }\n\n async encryptFields(fieldsModel: FieldView[], key: SymmetricCryptoKey): Promise {\n if (!fieldsModel || !fieldsModel.length) {\n return null;\n }\n\n const self = this;\n const encFields: Field[] = [];\n await fieldsModel.reduce(async (promise, field) => {\n await promise;\n const encField = await self.encryptField(field, key);\n encFields.push(encField);\n }, Promise.resolve());\n\n return encFields;\n }\n\n async encryptField(fieldModel: FieldView, key: SymmetricCryptoKey): Promise {\n const field = new Field();\n field.type = fieldModel.type;\n field.linkedId = fieldModel.linkedId;\n // normalize boolean type field values\n if (fieldModel.type === FieldType.Boolean && fieldModel.value !== \"true\") {\n fieldModel.value = \"false\";\n }\n\n await this.encryptObjProperty(\n fieldModel,\n field,\n {\n name: null,\n value: null,\n },\n key\n );\n\n return field;\n }\n\n async encryptPasswordHistories(\n phModels: PasswordHistoryView[],\n key: SymmetricCryptoKey\n ): Promise {\n if (!phModels || !phModels.length) {\n return null;\n }\n\n const self = this;\n const encPhs: Password[] = [];\n await phModels.reduce(async (promise, ph) => {\n await promise;\n const encPh = await self.encryptPasswordHistory(ph, key);\n encPhs.push(encPh);\n }, Promise.resolve());\n\n return encPhs;\n }\n\n async encryptPasswordHistory(\n phModel: PasswordHistoryView,\n key: SymmetricCryptoKey\n ): Promise {\n const ph = new Password();\n ph.lastUsedDate = phModel.lastUsedDate;\n\n await this.encryptObjProperty(\n phModel,\n ph,\n {\n password: null,\n },\n key\n );\n\n return ph;\n }\n\n async get(id: string): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n // eslint-disable-next-line\n if (ciphers == null || !ciphers.hasOwnProperty(id)) {\n return null;\n }\n\n const localData = await this.stateService.getLocalData();\n return new Cipher(ciphers[id], false, localData ? localData[id] : null);\n }\n\n async getAll(): Promise {\n const localData = await this.stateService.getLocalData();\n const ciphers = await this.stateService.getEncryptedCiphers();\n const response: Cipher[] = [];\n for (const id in ciphers) {\n // eslint-disable-next-line\n if (ciphers.hasOwnProperty(id)) {\n response.push(new Cipher(ciphers[id], false, localData ? localData[id] : null));\n }\n }\n return response;\n }\n\n @sequentialize(() => \"getAllDecrypted\")\n async getAllDecrypted(): Promise {\n const userId = await this.stateService.getUserId();\n if ((await this.getDecryptedCipherCache()) != null) {\n if (\n this.searchService != null &&\n (this.searchService().indexedEntityId ?? userId) !== userId\n ) {\n await this.searchService().indexCiphers(userId, await this.getDecryptedCipherCache());\n }\n return await this.getDecryptedCipherCache();\n }\n\n const decCiphers: CipherView[] = [];\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const promises: any[] = [];\n const ciphers = await this.getAll();\n ciphers.forEach(async (cipher) => {\n promises.push(cipher.decrypt().then((c) => decCiphers.push(c)));\n });\n\n await Promise.all(promises);\n decCiphers.sort(this.getLocaleSortingFunction());\n await this.setDecryptedCipherCache(decCiphers);\n return decCiphers;\n }\n\n async getAllDecryptedForGrouping(groupingId: string, folder = true): Promise {\n const ciphers = await this.getAllDecrypted();\n\n return ciphers.filter((cipher) => {\n if (cipher.isDeleted) {\n return false;\n }\n if (folder && cipher.folderId === groupingId) {\n return true;\n } else if (\n !folder &&\n cipher.collectionIds != null &&\n cipher.collectionIds.indexOf(groupingId) > -1\n ) {\n return true;\n }\n\n return false;\n });\n }\n\n async getAllDecryptedForUrl(\n url: string,\n includeOtherTypes?: CipherType[],\n defaultMatch: UriMatchType = null\n ): Promise {\n if (url == null && includeOtherTypes == null) {\n return Promise.resolve([]);\n }\n\n const domain = Utils.getDomain(url);\n const eqDomainsPromise =\n domain == null\n ? Promise.resolve([])\n : this.settingsService.getEquivalentDomains().then((eqDomains: any[][]) => {\n let matches: any[] = [];\n eqDomains.forEach((eqDomain) => {\n if (eqDomain.length && eqDomain.indexOf(domain) >= 0) {\n matches = matches.concat(eqDomain);\n }\n });\n\n if (!matches.length) {\n matches.push(domain);\n }\n\n return matches;\n });\n\n const result = await Promise.all([eqDomainsPromise, this.getAllDecrypted()]);\n const matchingDomains = result[0];\n const ciphers = result[1];\n\n if (defaultMatch == null) {\n defaultMatch = await this.stateService.getDefaultUriMatch();\n if (defaultMatch == null) {\n defaultMatch = UriMatchType.Domain;\n }\n }\n\n return ciphers.filter((cipher) => {\n if (cipher.deletedDate != null) {\n return false;\n }\n if (includeOtherTypes != null && includeOtherTypes.indexOf(cipher.type) > -1) {\n return true;\n }\n\n if (url != null && cipher.type === CipherType.Login && cipher.login.uris != null) {\n for (let i = 0; i < cipher.login.uris.length; i++) {\n const u = cipher.login.uris[i];\n if (u.uri == null) {\n continue;\n }\n\n const match = u.match == null ? defaultMatch : u.match;\n switch (match) {\n case UriMatchType.Domain:\n if (domain != null && u.domain != null && matchingDomains.indexOf(u.domain) > -1) {\n if (DomainMatchBlacklist.has(u.domain)) {\n const domainUrlHost = Utils.getHost(url);\n if (!DomainMatchBlacklist.get(u.domain).has(domainUrlHost)) {\n return true;\n }\n } else {\n return true;\n }\n }\n break;\n case UriMatchType.Host: {\n const urlHost = Utils.getHost(url);\n if (urlHost != null && urlHost === Utils.getHost(u.uri)) {\n return true;\n }\n break;\n }\n case UriMatchType.Exact:\n if (url === u.uri) {\n return true;\n }\n break;\n case UriMatchType.StartsWith:\n if (url.startsWith(u.uri)) {\n return true;\n }\n break;\n case UriMatchType.RegularExpression:\n try {\n const regex = new RegExp(u.uri, \"i\");\n if (regex.test(url)) {\n return true;\n }\n } catch (e) {\n this.logService.error(e);\n }\n break;\n case UriMatchType.Never:\n default:\n break;\n }\n }\n }\n\n return false;\n });\n }\n\n async getAllFromApiForOrganization(organizationId: string): Promise {\n const ciphers = await this.apiService.getCiphersOrganization(organizationId);\n if (ciphers != null && ciphers.data != null && ciphers.data.length) {\n const decCiphers: CipherView[] = [];\n const promises: any[] = [];\n ciphers.data.forEach((r) => {\n const data = new CipherData(r);\n const cipher = new Cipher(data);\n promises.push(cipher.decrypt().then((c) => decCiphers.push(c)));\n });\n await Promise.all(promises);\n decCiphers.sort(this.getLocaleSortingFunction());\n return decCiphers;\n } else {\n return [];\n }\n }\n\n async getLastUsedForUrl(url: string, autofillOnPageLoad = false): Promise {\n return this.getCipherForUrl(url, true, false, autofillOnPageLoad);\n }\n\n async getLastLaunchedForUrl(url: string, autofillOnPageLoad = false): Promise {\n return this.getCipherForUrl(url, false, true, autofillOnPageLoad);\n }\n\n async getNextCipherForUrl(url: string): Promise {\n return this.getCipherForUrl(url, false, false, false);\n }\n\n updateLastUsedIndexForUrl(url: string) {\n this.sortedCiphersCache.updateLastUsedIndex(url);\n }\n\n async updateLastUsedDate(id: string): Promise {\n let ciphersLocalData = await this.stateService.getLocalData();\n if (!ciphersLocalData) {\n ciphersLocalData = {};\n }\n\n if (ciphersLocalData[id]) {\n ciphersLocalData[id].lastUsedDate = new Date().getTime();\n } else {\n ciphersLocalData[id] = {\n lastUsedDate: new Date().getTime(),\n };\n }\n\n await this.stateService.setLocalData(ciphersLocalData);\n\n const decryptedCipherCache = await this.stateService.getDecryptedCiphers();\n if (!decryptedCipherCache) {\n return;\n }\n\n for (let i = 0; i < decryptedCipherCache.length; i++) {\n const cached = decryptedCipherCache[i];\n if (cached.id === id) {\n cached.localData = ciphersLocalData[id];\n break;\n }\n }\n await this.stateService.setDecryptedCiphers(decryptedCipherCache);\n }\n\n async updateLastLaunchedDate(id: string): Promise {\n let ciphersLocalData = await this.stateService.getLocalData();\n if (!ciphersLocalData) {\n ciphersLocalData = {};\n }\n\n if (ciphersLocalData[id]) {\n ciphersLocalData[id].lastLaunched = new Date().getTime();\n } else {\n ciphersLocalData[id] = {\n lastUsedDate: new Date().getTime(),\n };\n }\n\n await this.stateService.setLocalData(ciphersLocalData);\n\n const decryptedCipherCache = await this.stateService.getDecryptedCiphers();\n if (!decryptedCipherCache) {\n return;\n }\n\n for (let i = 0; i < decryptedCipherCache.length; i++) {\n const cached = decryptedCipherCache[i];\n if (cached.id === id) {\n cached.localData = ciphersLocalData[id];\n break;\n }\n }\n await this.stateService.setDecryptedCiphers(decryptedCipherCache);\n }\n\n async saveNeverDomain(domain: string): Promise {\n if (domain == null) {\n return;\n }\n\n let domains = await this.stateService.getNeverDomains();\n if (!domains) {\n domains = {};\n }\n domains[domain] = null;\n await this.stateService.setNeverDomains(domains);\n }\n\n async saveWithServer(cipher: Cipher): Promise {\n let response: CipherResponse;\n if (cipher.id == null) {\n if (cipher.collectionIds != null) {\n const request = new CipherCreateRequest(cipher);\n response = await this.apiService.postCipherCreate(request);\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.postCipher(request);\n }\n cipher.id = response.id;\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.putCipher(cipher.id, request);\n }\n\n const data = new CipherData(\n response,\n await this.stateService.getUserId(),\n cipher.collectionIds\n );\n await this.upsert(data);\n }\n\n async shareWithServer(\n cipher: CipherView,\n organizationId: string,\n collectionIds: string[]\n ): Promise {\n const attachmentPromises: Promise[] = [];\n if (cipher.attachments != null) {\n cipher.attachments.forEach((attachment) => {\n if (attachment.key == null) {\n attachmentPromises.push(\n this.shareAttachmentWithServer(attachment, cipher.id, organizationId)\n );\n }\n });\n }\n await Promise.all(attachmentPromises);\n\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n const encCipher = await this.encrypt(cipher);\n const request = new CipherShareRequest(encCipher);\n const response = await this.apiService.putShareCipher(cipher.id, request);\n const data = new CipherData(response, await this.stateService.getUserId(), collectionIds);\n await this.upsert(data);\n }\n\n async shareManyWithServer(\n ciphers: CipherView[],\n organizationId: string,\n collectionIds: string[]\n ): Promise {\n const promises: Promise[] = [];\n const encCiphers: Cipher[] = [];\n for (const cipher of ciphers) {\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n promises.push(\n this.encrypt(cipher).then((c) => {\n encCiphers.push(c);\n })\n );\n }\n await Promise.all(promises);\n const request = new CipherBulkShareRequest(encCiphers, collectionIds);\n try {\n await this.apiService.putShareCiphers(request);\n } catch (e) {\n for (const cipher of ciphers) {\n cipher.organizationId = null;\n cipher.collectionIds = null;\n }\n throw e;\n }\n const userId = await this.stateService.getUserId();\n await this.upsert(encCiphers.map((c) => c.toCipherData(userId)));\n }\n\n saveAttachmentWithServer(cipher: Cipher, unencryptedFile: any, admin = false): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsArrayBuffer(unencryptedFile);\n reader.onload = async (evt: any) => {\n try {\n const cData = await this.saveAttachmentRawWithServer(\n cipher,\n unencryptedFile.name,\n evt.target.result,\n admin\n );\n resolve(cData);\n } catch (e) {\n reject(e);\n }\n };\n reader.onerror = () => {\n reject(\"Error reading file.\");\n };\n });\n }\n\n async saveAttachmentRawWithServer(\n cipher: Cipher,\n filename: string,\n data: ArrayBuffer,\n admin = false\n ): Promise {\n const key = await this.cryptoService.getOrgKey(cipher.organizationId);\n const encFileName = await this.cryptoService.encrypt(filename, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(data, dataEncKey[0]);\n\n const request: AttachmentRequest = {\n key: dataEncKey[1].encryptedString,\n fileName: encFileName.encryptedString,\n fileSize: encData.buffer.byteLength,\n adminRequest: admin,\n };\n\n let response: CipherResponse;\n try {\n const uploadDataResponse = await this.apiService.postCipherAttachment(cipher.id, request);\n response = admin ? uploadDataResponse.cipherMiniResponse : uploadDataResponse.cipherResponse;\n await this.fileUploadService.uploadCipherAttachment(\n admin,\n uploadDataResponse,\n encFileName,\n encData\n );\n } catch (e) {\n if (\n (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) ||\n (e as ErrorResponse).statusCode === 405\n ) {\n response = await this.legacyServerAttachmentFileUpload(\n admin,\n cipher.id,\n encFileName,\n encData,\n dataEncKey[1]\n );\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n\n const cData = new CipherData(\n response,\n await this.stateService.getUserId(),\n cipher.collectionIds\n );\n if (!admin) {\n await this.upsert(cData);\n }\n return new Cipher(cData);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async legacyServerAttachmentFileUpload(\n admin: boolean,\n cipherId: string,\n encFileName: EncString,\n encData: EncArrayBuffer,\n key: EncString\n ) {\n const fd = new FormData();\n try {\n const blob = new Blob([encData.buffer], { type: \"application/octet-stream\" });\n fd.append(\"key\", key.encryptedString);\n fd.append(\"data\", blob, encFileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\"key\", key.encryptedString);\n fd.append(\n \"data\",\n Buffer.from(encData.buffer) as any,\n {\n filepath: encFileName.encryptedString,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n\n let response: CipherResponse;\n try {\n if (admin) {\n response = await this.apiService.postCipherAttachmentAdminLegacy(cipherId, fd);\n } else {\n response = await this.apiService.postCipherAttachmentLegacy(cipherId, fd);\n }\n } catch (e) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n }\n\n return response;\n }\n\n async saveCollectionsWithServer(cipher: Cipher): Promise {\n const request = new CipherCollectionsRequest(cipher.collectionIds);\n await this.apiService.putCipherCollections(cipher.id, request);\n const data = cipher.toCipherData(await this.stateService.getUserId());\n await this.upsert(data);\n }\n\n async upsert(cipher: CipherData | CipherData[]): Promise {\n let ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n ciphers = {};\n }\n\n if (cipher instanceof CipherData) {\n const c = cipher as CipherData;\n ciphers[c.id] = c;\n } else {\n (cipher as CipherData[]).forEach((c) => {\n ciphers[c.id] = c;\n });\n }\n\n await this.replace(ciphers);\n }\n\n async replace(ciphers: { [id: string]: CipherData }): Promise {\n await this.clearDecryptedCiphersState();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async clear(userId?: string): Promise {\n await this.clearEncryptedCiphersState(userId);\n await this.clearCache(userId);\n }\n\n async moveManyWithServer(ids: string[], folderId: string): Promise {\n await this.apiService.putMoveCiphers(new CipherBulkMoveRequest(ids, folderId));\n\n let ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n ciphers = {};\n }\n\n ids.forEach((id) => {\n // eslint-disable-next-line\n if (ciphers.hasOwnProperty(id)) {\n ciphers[id].folderId = folderId;\n }\n });\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async delete(id: string | string[]): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n if (ciphers[id] == null) {\n return;\n }\n delete ciphers[id];\n } else {\n (id as string[]).forEach((i) => {\n delete ciphers[i];\n });\n }\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteCipher(id);\n await this.delete(id);\n }\n\n async deleteManyWithServer(ids: string[]): Promise {\n await this.apiService.deleteManyCiphers(new CipherBulkDeleteRequest(ids));\n await this.delete(ids);\n }\n\n async deleteAttachment(id: string, attachmentId: string): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n\n // eslint-disable-next-line\n if (ciphers == null || !ciphers.hasOwnProperty(id) || ciphers[id].attachments == null) {\n return;\n }\n\n for (let i = 0; i < ciphers[id].attachments.length; i++) {\n if (ciphers[id].attachments[i].id === attachmentId) {\n ciphers[id].attachments.splice(i, 1);\n }\n }\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async deleteAttachmentWithServer(id: string, attachmentId: string): Promise {\n try {\n await this.apiService.deleteCipherAttachment(id, attachmentId);\n } catch (e) {\n return Promise.reject((e as ErrorResponse).getSingleMessage());\n }\n await this.deleteAttachment(id, attachmentId);\n }\n\n sortCiphersByLastUsed(a: CipherView, b: CipherView): number {\n const aLastUsed =\n a.localData && a.localData.lastUsedDate ? (a.localData.lastUsedDate as number) : null;\n const bLastUsed =\n b.localData && b.localData.lastUsedDate ? (b.localData.lastUsedDate as number) : null;\n\n const bothNotNull = aLastUsed != null && bLastUsed != null;\n if (bothNotNull && aLastUsed < bLastUsed) {\n return 1;\n }\n if (aLastUsed != null && bLastUsed == null) {\n return -1;\n }\n\n if (bothNotNull && aLastUsed > bLastUsed) {\n return -1;\n }\n if (bLastUsed != null && aLastUsed == null) {\n return 1;\n }\n\n return 0;\n }\n\n sortCiphersByLastUsedThenName(a: CipherView, b: CipherView): number {\n const result = this.sortCiphersByLastUsed(a, b);\n if (result !== 0) {\n return result;\n }\n\n return this.getLocaleSortingFunction()(a, b);\n }\n\n getLocaleSortingFunction(): (a: CipherView, b: CipherView) => number {\n return (a, b) => {\n let aName = a.name;\n let bName = b.name;\n\n if (aName == null && bName != null) {\n return -1;\n }\n if (aName != null && bName == null) {\n return 1;\n }\n if (aName == null && bName == null) {\n return 0;\n }\n\n const result = this.i18nService.collator\n ? this.i18nService.collator.compare(aName, bName)\n : aName.localeCompare(bName);\n\n if (result !== 0 || a.type !== CipherType.Login || b.type !== CipherType.Login) {\n return result;\n }\n\n if (a.login.username != null) {\n aName += a.login.username;\n }\n\n if (b.login.username != null) {\n bName += b.login.username;\n }\n\n return this.i18nService.collator\n ? this.i18nService.collator.compare(aName, bName)\n : aName.localeCompare(bName);\n };\n }\n\n async softDelete(id: string | string[]): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n return;\n }\n\n const setDeletedDate = (cipherId: string) => {\n if (ciphers[cipherId] == null) {\n return;\n }\n ciphers[cipherId].deletedDate = new Date().toISOString();\n };\n\n if (typeof id === \"string\") {\n setDeletedDate(id);\n } else {\n (id as string[]).forEach(setDeletedDate);\n }\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async softDeleteWithServer(id: string): Promise {\n await this.apiService.putDeleteCipher(id);\n await this.softDelete(id);\n }\n\n async softDeleteManyWithServer(ids: string[]): Promise {\n await this.apiService.putDeleteManyCiphers(new CipherBulkDeleteRequest(ids));\n await this.softDelete(ids);\n }\n\n async restore(\n cipher: { id: string; revisionDate: string } | { id: string; revisionDate: string }[]\n ) {\n const ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n return;\n }\n\n const clearDeletedDate = (c: { id: string; revisionDate: string }) => {\n if (ciphers[c.id] == null) {\n return;\n }\n ciphers[c.id].deletedDate = null;\n ciphers[c.id].revisionDate = c.revisionDate;\n };\n\n if (cipher.constructor.name === Array.name) {\n (cipher as { id: string; revisionDate: string }[]).forEach(clearDeletedDate);\n } else {\n clearDeletedDate(cipher as { id: string; revisionDate: string });\n }\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async restoreWithServer(id: string): Promise {\n const response = await this.apiService.putRestoreCipher(id);\n await this.restore({ id: id, revisionDate: response.revisionDate });\n }\n\n async restoreManyWithServer(ids: string[]): Promise {\n const response = await this.apiService.putRestoreManyCiphers(new CipherBulkRestoreRequest(ids));\n const restores: { id: string; revisionDate: string }[] = [];\n for (const cipher of response.data) {\n restores.push({ id: cipher.id, revisionDate: cipher.revisionDate });\n }\n await this.restore(restores);\n }\n\n // Helpers\n\n private async shareAttachmentWithServer(\n attachmentView: AttachmentView,\n cipherId: string,\n organizationId: string\n ): Promise {\n const attachmentResponse = await this.apiService.nativeFetch(\n new Request(attachmentView.url, { cache: \"no-store\" })\n );\n if (attachmentResponse.status !== 200) {\n throw Error(\"Failed to download attachment: \" + attachmentResponse.status.toString());\n }\n\n const buf = await attachmentResponse.arrayBuffer();\n const decBuf = await this.cryptoService.decryptFromBytes(buf, null);\n const key = await this.cryptoService.getOrgKey(organizationId);\n const encFileName = await this.cryptoService.encrypt(attachmentView.fileName, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(decBuf, dataEncKey[0]);\n\n const fd = new FormData();\n try {\n const blob = new Blob([encData.buffer], { type: \"application/octet-stream\" });\n fd.append(\"key\", dataEncKey[1].encryptedString);\n fd.append(\"data\", blob, encFileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\"key\", dataEncKey[1].encryptedString);\n fd.append(\n \"data\",\n Buffer.from(encData.buffer) as any,\n {\n filepath: encFileName.encryptedString,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n\n try {\n await this.apiService.postShareCipherAttachment(\n cipherId,\n attachmentView.id,\n fd,\n organizationId\n );\n } catch (e) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n }\n }\n\n private async encryptObjProperty(\n model: V,\n obj: D,\n map: any,\n key: SymmetricCryptoKey\n ): Promise {\n const promises = [];\n const self = this;\n\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n (function (theProp, theObj) {\n const p = Promise.resolve()\n .then(() => {\n const modelProp = (model as any)[map[theProp] || theProp];\n if (modelProp && modelProp !== \"\") {\n return self.cryptoService.encrypt(modelProp, key);\n }\n return null;\n })\n .then((val: EncString) => {\n (theObj as any)[theProp] = val;\n });\n promises.push(p);\n })(prop, obj);\n }\n\n await Promise.all(promises);\n }\n\n private async encryptCipherData(cipher: Cipher, model: CipherView, key: SymmetricCryptoKey) {\n switch (cipher.type) {\n case CipherType.Login:\n cipher.login = new Login();\n cipher.login.passwordRevisionDate = model.login.passwordRevisionDate;\n cipher.login.autofillOnPageLoad = model.login.autofillOnPageLoad;\n await this.encryptObjProperty(\n model.login,\n cipher.login,\n {\n username: null,\n password: null,\n totp: null,\n },\n key\n );\n\n if (model.login.uris != null) {\n cipher.login.uris = [];\n for (let i = 0; i < model.login.uris.length; i++) {\n const loginUri = new LoginUri();\n loginUri.match = model.login.uris[i].match;\n await this.encryptObjProperty(\n model.login.uris[i],\n loginUri,\n {\n uri: null,\n },\n key\n );\n cipher.login.uris.push(loginUri);\n }\n }\n return;\n case CipherType.SecureNote:\n cipher.secureNote = new SecureNote();\n cipher.secureNote.type = model.secureNote.type;\n return;\n case CipherType.Card:\n cipher.card = new Card();\n await this.encryptObjProperty(\n model.card,\n cipher.card,\n {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n },\n key\n );\n return;\n case CipherType.Identity:\n cipher.identity = new Identity();\n await this.encryptObjProperty(\n model.identity,\n cipher.identity,\n {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n },\n key\n );\n return;\n default:\n throw new Error(\"Unknown cipher type.\");\n }\n }\n\n private async getCipherForUrl(\n url: string,\n lastUsed: boolean,\n lastLaunched: boolean,\n autofillOnPageLoad: boolean\n ): Promise {\n const cacheKey = autofillOnPageLoad ? \"autofillOnPageLoad-\" + url : url;\n\n if (!this.sortedCiphersCache.isCached(cacheKey)) {\n let ciphers = await this.getAllDecryptedForUrl(url);\n if (!ciphers) {\n return null;\n }\n\n if (autofillOnPageLoad) {\n const autofillOnPageLoadDefault = await this.stateService.getAutoFillOnPageLoadDefault();\n ciphers = ciphers.filter(\n (cipher) =>\n cipher.login.autofillOnPageLoad ||\n (cipher.login.autofillOnPageLoad == null && autofillOnPageLoadDefault !== false)\n );\n if (ciphers.length === 0) {\n return null;\n }\n }\n\n this.sortedCiphersCache.addCiphers(cacheKey, ciphers);\n }\n\n if (lastLaunched) {\n return this.sortedCiphersCache.getLastLaunched(cacheKey);\n } else if (lastUsed) {\n return this.sortedCiphersCache.getLastUsed(cacheKey);\n } else {\n return this.sortedCiphersCache.getNext(cacheKey);\n }\n }\n\n private async clearEncryptedCiphersState(userId?: string) {\n await this.stateService.setEncryptedCiphers(null, { userId: userId });\n }\n\n private async clearDecryptedCiphersState(userId?: string) {\n await this.stateService.setDecryptedCiphers(null, { userId: userId });\n this.clearSortedCiphers();\n }\n\n private clearSortedCiphers() {\n this.sortedCiphersCache.clear();\n }\n}\n","import { CollectionService as CollectionServiceAbstraction } from \"../abstractions/collection.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { ServiceUtils } from \"../misc/serviceUtils\";\nimport { Utils } from \"../misc/utils\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { Collection } from \"../models/domain/collection\";\nimport { TreeNode } from \"../models/domain/treeNode\";\nimport { CollectionView } from \"../models/view/collectionView\";\n\nconst NestingDelimiter = \"/\";\n\nexport class CollectionService implements CollectionServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private stateService: StateService\n ) {}\n\n async clearCache(userId?: string): Promise {\n await this.stateService.setDecryptedCollections(null, { userId: userId });\n }\n\n async encrypt(model: CollectionView): Promise {\n if (model.organizationId == null) {\n throw new Error(\"Collection has no organization id.\");\n }\n const key = await this.cryptoService.getOrgKey(model.organizationId);\n if (key == null) {\n throw new Error(\"No key for this collection's organization.\");\n }\n const collection = new Collection();\n collection.id = model.id;\n collection.organizationId = model.organizationId;\n collection.readOnly = model.readOnly;\n collection.name = await this.cryptoService.encrypt(model.name, key);\n return collection;\n }\n\n async decryptMany(collections: Collection[]): Promise {\n if (collections == null) {\n return [];\n }\n const decCollections: CollectionView[] = [];\n const promises: Promise[] = [];\n collections.forEach((collection) => {\n promises.push(collection.decrypt().then((c) => decCollections.push(c)));\n });\n await Promise.all(promises);\n return decCollections.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n\n async get(id: string): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n // eslint-disable-next-line\n if (collections == null || !collections.hasOwnProperty(id)) {\n return null;\n }\n\n return new Collection(collections[id]);\n }\n\n async getAll(): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n const response: Collection[] = [];\n for (const id in collections) {\n // eslint-disable-next-line\n if (collections.hasOwnProperty(id)) {\n response.push(new Collection(collections[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n let decryptedCollections = await this.stateService.getDecryptedCollections();\n if (decryptedCollections != null) {\n return decryptedCollections;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const collections = await this.getAll();\n decryptedCollections = await this.decryptMany(collections);\n await this.stateService.setDecryptedCollections(decryptedCollections);\n return decryptedCollections;\n }\n\n async getAllNested(collections: CollectionView[] = null): Promise[]> {\n if (collections == null) {\n collections = await this.getAllDecrypted();\n }\n const nodes: TreeNode[] = [];\n collections.forEach((c) => {\n const collectionCopy = new CollectionView();\n collectionCopy.id = c.id;\n collectionCopy.organizationId = c.organizationId;\n const parts = c.name != null ? c.name.replace(/^\\/+|\\/+$/g, \"\").split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, collectionCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n async getNested(id: string): Promise> {\n const collections = await this.getAllNested();\n return ServiceUtils.getTreeNodeObject(collections, id) as TreeNode;\n }\n\n async upsert(collection: CollectionData | CollectionData[]): Promise {\n let collections = await this.stateService.getEncryptedCollections();\n if (collections == null) {\n collections = {};\n }\n\n if (collection instanceof CollectionData) {\n const c = collection as CollectionData;\n collections[c.id] = c;\n } else {\n (collection as CollectionData[]).forEach((c) => {\n collections[c.id] = c;\n });\n }\n\n await this.replace(collections);\n }\n\n async replace(collections: { [id: string]: CollectionData }): Promise {\n await this.clearCache();\n await this.stateService.setEncryptedCollections(collections);\n }\n\n async clear(userId?: string): Promise {\n await this.clearCache(userId);\n await this.stateService.setEncryptedCollections(null, { userId: userId });\n }\n\n async delete(id: string | string[]): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n if (collections == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n delete collections[id];\n } else {\n (id as string[]).forEach((i) => {\n delete collections[i];\n });\n }\n\n await this.replace(collections);\n }\n}\n","import * as hrtime from \"browser-hrtime\";\n\nimport { LogService as LogServiceAbstraction } from \"../abstractions/log.service\";\nimport { LogLevelType } from \"../enums/logLevelType\";\n\nexport class ConsoleLogService implements LogServiceAbstraction {\n protected timersMap: Map = new Map();\n\n constructor(\n protected isDev: boolean,\n protected filter: (level: LogLevelType) => boolean = null\n ) {}\n\n debug(message: string) {\n if (!this.isDev) {\n return;\n }\n this.write(LogLevelType.Debug, message);\n }\n\n info(message: string) {\n this.write(LogLevelType.Info, message);\n }\n\n warning(message: string) {\n this.write(LogLevelType.Warning, message);\n }\n\n error(message: string) {\n this.write(LogLevelType.Error, message);\n }\n\n write(level: LogLevelType, message: string) {\n if (this.filter != null && this.filter(level)) {\n return;\n }\n\n switch (level) {\n case LogLevelType.Debug:\n // eslint-disable-next-line\n console.log(message);\n break;\n case LogLevelType.Info:\n // eslint-disable-next-line\n console.log(message);\n break;\n case LogLevelType.Warning:\n // eslint-disable-next-line\n console.warn(message);\n break;\n case LogLevelType.Error:\n // eslint-disable-next-line\n console.error(message);\n break;\n default:\n break;\n }\n }\n\n time(label = \"default\") {\n if (!this.timersMap.has(label)) {\n this.timersMap.set(label, hrtime());\n }\n }\n\n timeEnd(label = \"default\"): [number, number] {\n const elapsed = hrtime(this.timersMap.get(label));\n this.timersMap.delete(label);\n this.write(LogLevelType.Info, `${label}: ${elapsed[0] * 1000 + elapsed[1] / 10e6}ms`);\n return elapsed;\n }\n}\n","import { CryptoService } from \"../abstractions/crypto.service\";\n\nexport class ContainerService {\n constructor(private cryptoService: CryptoService) {}\n\n // deprecated, use attachToGlobal instead\n attachToWindow(win: any) {\n this.attachToGlobal(win);\n }\n\n attachToGlobal(global: any) {\n if (!global.bitwardenContainerService) {\n global.bitwardenContainerService = this;\n }\n }\n\n getCryptoService(): CryptoService {\n return this.cryptoService;\n }\n}\n","import * as bigInt from \"big-integer\";\n\nimport { CryptoService as CryptoServiceAbstraction } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { EncryptionType } from \"../enums/encryptionType\";\nimport { HashPurpose } from \"../enums/hashPurpose\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { KeySuffixOptions } from \"../enums/keySuffixOptions\";\nimport { sequentialize } from \"../misc/sequentialize\";\nimport { Utils } from \"../misc/utils\";\nimport { EEFLongWordList } from \"../misc/wordlist\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { EncryptedObject } from \"../models/domain/encryptedObject\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { ProfileOrganizationResponse } from \"../models/response/profileOrganizationResponse\";\nimport { ProfileProviderOrganizationResponse } from \"../models/response/profileProviderOrganizationResponse\";\nimport { ProfileProviderResponse } from \"../models/response/profileProviderResponse\";\n\nexport class CryptoService implements CryptoServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n protected platformUtilService: PlatformUtilsService,\n protected logService: LogService,\n protected stateService: StateService\n ) {}\n\n async setKey(key: SymmetricCryptoKey, userId?: string): Promise {\n await this.stateService.setCryptoMasterKey(key, { userId: userId });\n await this.storeKey(key, userId);\n }\n\n async setKeyHash(keyHash: string): Promise {\n await this.stateService.setKeyHash(keyHash);\n }\n\n async setEncKey(encKey: string): Promise {\n if (encKey == null) {\n return;\n }\n\n await this.stateService.setDecryptedCryptoSymmetricKey(null);\n await this.stateService.setEncryptedCryptoSymmetricKey(encKey);\n }\n\n async setEncPrivateKey(encPrivateKey: string): Promise {\n if (encPrivateKey == null) {\n return;\n }\n\n await this.stateService.setDecryptedPrivateKey(null);\n await this.stateService.setEncryptedPrivateKey(encPrivateKey);\n }\n\n async setOrgKeys(\n orgs: ProfileOrganizationResponse[],\n providerOrgs: ProfileProviderOrganizationResponse[]\n ): Promise {\n const orgKeys: any = {};\n orgs.forEach((org) => {\n orgKeys[org.id] = org.key;\n });\n\n for (const providerOrg of providerOrgs) {\n // Convert provider encrypted keys to user encrypted.\n const providerKey = await this.getProviderKey(providerOrg.providerId);\n const decValue = await this.decryptToBytes(new EncString(providerOrg.key), providerKey);\n orgKeys[providerOrg.id] = (await this.rsaEncrypt(decValue)).encryptedString;\n }\n\n await this.stateService.setDecryptedOrganizationKeys(null);\n return await this.stateService.setEncryptedOrganizationKeys(orgKeys);\n }\n\n async setProviderKeys(providers: ProfileProviderResponse[]): Promise {\n const providerKeys: any = {};\n providers.forEach((provider) => {\n providerKeys[provider.id] = provider.key;\n });\n\n await this.stateService.setDecryptedProviderKeys(null);\n return await this.stateService.setEncryptedProviderKeys(providerKeys);\n }\n\n async getKey(keySuffix?: KeySuffixOptions, userId?: string): Promise {\n const inMemoryKey = await this.stateService.getCryptoMasterKey({ userId: userId });\n\n if (inMemoryKey != null) {\n return inMemoryKey;\n }\n\n keySuffix ||= KeySuffixOptions.Auto;\n const symmetricKey = await this.getKeyFromStorage(keySuffix, userId);\n\n if (symmetricKey != null) {\n // TODO: Refactor here so get key doesn't also set key\n this.setKey(symmetricKey, userId);\n }\n\n return symmetricKey;\n }\n\n async getKeyFromStorage(\n keySuffix: KeySuffixOptions,\n userId?: string\n ): Promise {\n const key = await this.retrieveKeyFromStorage(keySuffix, userId);\n if (key != null) {\n const symmetricKey = new SymmetricCryptoKey(Utils.fromB64ToArray(key).buffer);\n\n if (!(await this.validateKey(symmetricKey))) {\n this.logService.warning(\"Wrong key, throwing away stored key\");\n await this.clearSecretKeyStore(userId);\n return null;\n }\n\n return symmetricKey;\n }\n return null;\n }\n\n async getKeyHash(): Promise {\n return await this.stateService.getKeyHash();\n }\n\n async compareAndUpdateKeyHash(masterPassword: string, key: SymmetricCryptoKey): Promise {\n const storedKeyHash = await this.getKeyHash();\n if (masterPassword != null && storedKeyHash != null) {\n const localKeyHash = await this.hashPassword(\n masterPassword,\n key,\n HashPurpose.LocalAuthorization\n );\n if (localKeyHash != null && storedKeyHash === localKeyHash) {\n return true;\n }\n\n // TODO: remove serverKeyHash check in 1-2 releases after everyone's keyHash has been updated\n const serverKeyHash = await this.hashPassword(\n masterPassword,\n key,\n HashPurpose.ServerAuthorization\n );\n if (serverKeyHash != null && storedKeyHash === serverKeyHash) {\n await this.setKeyHash(localKeyHash);\n return true;\n }\n }\n\n return false;\n }\n\n @sequentialize(() => \"getEncKey\")\n getEncKey(key: SymmetricCryptoKey = null): Promise {\n return this.getEncKeyHelper(key);\n }\n\n async getPublicKey(): Promise {\n const inMemoryPublicKey = await this.stateService.getPublicKey();\n if (inMemoryPublicKey != null) {\n return inMemoryPublicKey;\n }\n\n const privateKey = await this.getPrivateKey();\n if (privateKey == null) {\n return null;\n }\n\n const publicKey = await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n await this.stateService.setPublicKey(publicKey);\n return publicKey;\n }\n\n async getPrivateKey(): Promise {\n const decryptedPrivateKey = await this.stateService.getDecryptedPrivateKey();\n if (decryptedPrivateKey != null) {\n return decryptedPrivateKey;\n }\n\n const encPrivateKey = await this.stateService.getEncryptedPrivateKey();\n if (encPrivateKey == null) {\n return null;\n }\n\n const privateKey = await this.decryptToBytes(new EncString(encPrivateKey), null);\n await this.stateService.setDecryptedPrivateKey(privateKey);\n return privateKey;\n }\n\n async getFingerprint(userId: string, publicKey?: ArrayBuffer): Promise {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey === null) {\n throw new Error(\"No public key available.\");\n }\n const keyFingerprint = await this.cryptoFunctionService.hash(publicKey, \"sha256\");\n const userFingerprint = await this.cryptoFunctionService.hkdfExpand(\n keyFingerprint,\n userId,\n 32,\n \"sha256\"\n );\n return this.hashPhrase(userFingerprint);\n }\n\n @sequentialize(() => \"getOrgKeys\")\n async getOrgKeys(): Promise> {\n const orgKeys: Map = new Map();\n const decryptedOrganizationKeys = await this.stateService.getDecryptedOrganizationKeys();\n if (decryptedOrganizationKeys != null && decryptedOrganizationKeys.size > 0) {\n return decryptedOrganizationKeys;\n }\n\n const encOrgKeys = await this.stateService.getEncryptedOrganizationKeys();\n if (encOrgKeys == null) {\n return null;\n }\n\n let setKey = false;\n\n for (const orgId in encOrgKeys) {\n // eslint-disable-next-line\n if (!encOrgKeys.hasOwnProperty(orgId)) {\n continue;\n }\n\n const decValue = await this.rsaDecrypt(encOrgKeys[orgId]);\n orgKeys.set(orgId, new SymmetricCryptoKey(decValue));\n setKey = true;\n }\n\n if (setKey) {\n await this.stateService.setDecryptedOrganizationKeys(orgKeys);\n }\n\n return orgKeys;\n }\n\n async getOrgKey(orgId: string): Promise {\n if (orgId == null) {\n return null;\n }\n\n const orgKeys = await this.getOrgKeys();\n if (orgKeys == null || !orgKeys.has(orgId)) {\n return null;\n }\n\n return orgKeys.get(orgId);\n }\n\n @sequentialize(() => \"getProviderKeys\")\n async getProviderKeys(): Promise> {\n const providerKeys: Map = new Map();\n const decryptedProviderKeys = await this.stateService.getDecryptedProviderKeys();\n if (decryptedProviderKeys != null && decryptedProviderKeys.size > 0) {\n return decryptedProviderKeys;\n }\n\n const encProviderKeys = await this.stateService.getEncryptedProviderKeys();\n if (encProviderKeys == null) {\n return null;\n }\n\n let setKey = false;\n\n for (const orgId in encProviderKeys) {\n // eslint-disable-next-line\n if (!encProviderKeys.hasOwnProperty(orgId)) {\n continue;\n }\n\n const decValue = await this.rsaDecrypt(encProviderKeys[orgId]);\n providerKeys.set(orgId, new SymmetricCryptoKey(decValue));\n setKey = true;\n }\n\n if (setKey) {\n await this.stateService.setDecryptedProviderKeys(providerKeys);\n }\n\n return providerKeys;\n }\n\n async getProviderKey(providerId: string): Promise {\n if (providerId == null) {\n return null;\n }\n\n const providerKeys = await this.getProviderKeys();\n if (providerKeys == null || !providerKeys.has(providerId)) {\n return null;\n }\n\n return providerKeys.get(providerId);\n }\n\n async hasKey(): Promise {\n return (\n (await this.hasKeyInMemory()) ||\n (await this.hasKeyStored(KeySuffixOptions.Auto)) ||\n (await this.hasKeyStored(KeySuffixOptions.Biometric))\n );\n }\n\n async hasKeyInMemory(userId?: string): Promise {\n return (await this.stateService.getCryptoMasterKey({ userId: userId })) != null;\n }\n\n async hasKeyStored(keySuffix: KeySuffixOptions, userId?: string): Promise {\n switch (keySuffix) {\n case KeySuffixOptions.Auto:\n return (await this.stateService.getCryptoMasterKeyAuto({ userId: userId })) != null;\n case KeySuffixOptions.Biometric:\n return (await this.stateService.hasCryptoMasterKeyBiometric({ userId: userId })) === true;\n default:\n return false;\n }\n }\n\n async hasEncKey(): Promise {\n return (await this.stateService.getEncryptedCryptoSymmetricKey()) != null;\n }\n\n async clearKey(clearSecretStorage = true, userId?: string): Promise {\n await this.stateService.setCryptoMasterKey(null, { userId: userId });\n await this.stateService.setLegacyEtmKey(null, { userId: userId });\n if (clearSecretStorage) {\n await this.clearSecretKeyStore(userId);\n }\n }\n\n async clearStoredKey(keySuffix: KeySuffixOptions) {\n keySuffix === KeySuffixOptions.Auto\n ? await this.stateService.setCryptoMasterKeyAuto(null)\n : await this.stateService.setCryptoMasterKeyBiometric(null);\n }\n\n async clearKeyHash(userId?: string): Promise {\n return await this.stateService.setKeyHash(null, { userId: userId });\n }\n\n async clearEncKey(memoryOnly?: boolean, userId?: string): Promise {\n await this.stateService.setDecryptedCryptoSymmetricKey(null, { userId: userId });\n if (!memoryOnly) {\n await this.stateService.setEncryptedCryptoSymmetricKey(null, { userId: userId });\n }\n }\n\n async clearKeyPair(memoryOnly?: boolean, userId?: string): Promise {\n const keysToClear: Promise[] = [\n this.stateService.setDecryptedPrivateKey(null, { userId: userId }),\n this.stateService.setPublicKey(null, { userId: userId }),\n ];\n if (!memoryOnly) {\n keysToClear.push(this.stateService.setEncryptedPrivateKey(null, { userId: userId }));\n }\n return Promise.all(keysToClear);\n }\n\n async clearOrgKeys(memoryOnly?: boolean, userId?: string): Promise {\n await this.stateService.setDecryptedOrganizationKeys(null, { userId: userId });\n if (!memoryOnly) {\n await this.stateService.setEncryptedOrganizationKeys(null, { userId: userId });\n }\n }\n\n async clearProviderKeys(memoryOnly?: boolean, userId?: string): Promise {\n await this.stateService.setDecryptedProviderKeys(null, { userId: userId });\n if (!memoryOnly) {\n await this.stateService.setEncryptedProviderKeys(null, { userId: userId });\n }\n }\n\n async clearPinProtectedKey(userId?: string): Promise {\n return await this.stateService.setEncryptedPinProtected(null, { userId: userId });\n }\n\n async clearKeys(userId?: string): Promise {\n await this.clearKey(true, userId);\n await this.clearKeyHash(userId);\n await this.clearOrgKeys(false, userId);\n await this.clearProviderKeys(false, userId);\n await this.clearEncKey(false, userId);\n await this.clearKeyPair(false, userId);\n await this.clearPinProtectedKey(userId);\n }\n\n async toggleKey(): Promise {\n const key = await this.getKey();\n\n await this.setKey(key);\n }\n\n async makeKey(\n password: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number\n ): Promise {\n let key: ArrayBuffer = null;\n if (kdf == null || kdf === KdfType.PBKDF2_SHA256) {\n if (kdfIterations == null) {\n kdfIterations = 5000;\n } else if (kdfIterations < 5000) {\n throw new Error(\"PBKDF2 iteration minimum is 5000.\");\n }\n key = await this.cryptoFunctionService.pbkdf2(password, salt, \"sha256\", kdfIterations);\n } else {\n throw new Error(\"Unknown Kdf.\");\n }\n return new SymmetricCryptoKey(key);\n }\n\n async makeKeyFromPin(\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number,\n protectedKeyCs: EncString = null\n ): Promise {\n if (protectedKeyCs == null) {\n const pinProtectedKey = await this.stateService.getEncryptedPinProtected();\n if (pinProtectedKey == null) {\n throw new Error(\"No PIN protected key found.\");\n }\n protectedKeyCs = new EncString(pinProtectedKey);\n }\n const pinKey = await this.makePinKey(pin, salt, kdf, kdfIterations);\n const decKey = await this.decryptToBytes(protectedKeyCs, pinKey);\n return new SymmetricCryptoKey(decKey);\n }\n\n async makeShareKey(): Promise<[EncString, SymmetricCryptoKey]> {\n const shareKey = await this.cryptoFunctionService.randomBytes(64);\n const publicKey = await this.getPublicKey();\n const encShareKey = await this.rsaEncrypt(shareKey, publicKey);\n return [encShareKey, new SymmetricCryptoKey(shareKey)];\n }\n\n async makeKeyPair(key?: SymmetricCryptoKey): Promise<[string, EncString]> {\n const keyPair = await this.cryptoFunctionService.rsaGenerateKeyPair(2048);\n const publicB64 = Utils.fromBufferToB64(keyPair[0]);\n const privateEnc = await this.encrypt(keyPair[1], key);\n return [publicB64, privateEnc];\n }\n\n async makePinKey(\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number\n ): Promise {\n const pinKey = await this.makeKey(pin, salt, kdf, kdfIterations);\n return await this.stretchKey(pinKey);\n }\n\n async makeSendKey(keyMaterial: ArrayBuffer): Promise {\n const sendKey = await this.cryptoFunctionService.hkdf(\n keyMaterial,\n \"bitwarden-send\",\n \"send\",\n 64,\n \"sha256\"\n );\n return new SymmetricCryptoKey(sendKey);\n }\n\n async hashPassword(\n password: string,\n key: SymmetricCryptoKey,\n hashPurpose?: HashPurpose\n ): Promise {\n if (key == null) {\n key = await this.getKey();\n }\n if (password == null || key == null) {\n throw new Error(\"Invalid parameters.\");\n }\n\n const iterations = hashPurpose === HashPurpose.LocalAuthorization ? 2 : 1;\n const hash = await this.cryptoFunctionService.pbkdf2(key.key, password, \"sha256\", iterations);\n return Utils.fromBufferToB64(hash);\n }\n\n async makeEncKey(key: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, EncString]> {\n const theKey = await this.getKeyForEncryption(key);\n const encKey = await this.cryptoFunctionService.randomBytes(64);\n return this.buildEncKey(theKey, encKey);\n }\n\n async remakeEncKey(\n key: SymmetricCryptoKey,\n encKey?: SymmetricCryptoKey\n ): Promise<[SymmetricCryptoKey, EncString]> {\n if (encKey == null) {\n encKey = await this.getEncKey();\n }\n return this.buildEncKey(key, encKey.key);\n }\n\n async encrypt(plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n if (plainValue == null) {\n return Promise.resolve(null);\n }\n\n let plainBuf: ArrayBuffer;\n if (typeof plainValue === \"string\") {\n plainBuf = Utils.fromUtf8ToArray(plainValue).buffer;\n } else {\n plainBuf = plainValue;\n }\n\n const encObj = await this.aesEncrypt(plainBuf, key);\n const iv = Utils.fromBufferToB64(encObj.iv);\n const data = Utils.fromBufferToB64(encObj.data);\n const mac = encObj.mac != null ? Utils.fromBufferToB64(encObj.mac) : null;\n return new EncString(encObj.key.encType, data, iv, mac);\n }\n\n async encryptToBytes(plainValue: ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n const encValue = await this.aesEncrypt(plainValue, key);\n let macLen = 0;\n if (encValue.mac != null) {\n macLen = encValue.mac.byteLength;\n }\n\n const encBytes = new Uint8Array(1 + encValue.iv.byteLength + macLen + encValue.data.byteLength);\n encBytes.set([encValue.key.encType]);\n encBytes.set(new Uint8Array(encValue.iv), 1);\n if (encValue.mac != null) {\n encBytes.set(new Uint8Array(encValue.mac), 1 + encValue.iv.byteLength);\n }\n\n encBytes.set(new Uint8Array(encValue.data), 1 + encValue.iv.byteLength + macLen);\n return new EncArrayBuffer(encBytes.buffer);\n }\n\n async rsaEncrypt(data: ArrayBuffer, publicKey?: ArrayBuffer): Promise {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey == null) {\n throw new Error(\"Public key unavailable.\");\n }\n\n const encBytes = await this.cryptoFunctionService.rsaEncrypt(data, publicKey, \"sha1\");\n return new EncString(EncryptionType.Rsa2048_OaepSha1_B64, Utils.fromBufferToB64(encBytes));\n }\n\n async rsaDecrypt(encValue: string, privateKeyValue?: ArrayBuffer): Promise {\n const headerPieces = encValue.split(\".\");\n let encType: EncryptionType = null;\n let encPieces: string[];\n\n if (headerPieces.length === 1) {\n encType = EncryptionType.Rsa2048_OaepSha256_B64;\n encPieces = [headerPieces[0]];\n } else if (headerPieces.length === 2) {\n try {\n encType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split(\"|\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_B64:\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64: // HmacSha256 types are deprecated\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error(\"encType unavailable.\");\n }\n\n if (encPieces == null || encPieces.length <= 0) {\n throw new Error(\"encPieces unavailable.\");\n }\n\n const data = Utils.fromB64ToArray(encPieces[0]).buffer;\n const privateKey = privateKeyValue ?? (await this.getPrivateKey());\n if (privateKey == null) {\n throw new Error(\"No private key.\");\n }\n\n let alg: \"sha1\" | \"sha256\" = \"sha1\";\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64:\n alg = \"sha256\";\n break;\n case EncryptionType.Rsa2048_OaepSha1_B64:\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error(\"encType unavailable.\");\n }\n\n return this.cryptoFunctionService.rsaDecrypt(data, privateKey, alg);\n }\n\n async decryptToBytes(encString: EncString, key?: SymmetricCryptoKey): Promise {\n const iv = Utils.fromB64ToArray(encString.iv).buffer;\n const data = Utils.fromB64ToArray(encString.data).buffer;\n const mac = encString.mac ? Utils.fromB64ToArray(encString.mac).buffer : null;\n const decipher = await this.aesDecryptToBytes(encString.encryptionType, data, iv, mac, key);\n if (decipher == null) {\n return null;\n }\n\n return decipher;\n }\n\n async decryptToUtf8(encString: EncString, key?: SymmetricCryptoKey): Promise {\n return await this.aesDecryptToUtf8(\n encString.encryptionType,\n encString.data,\n encString.iv,\n encString.mac,\n key\n );\n }\n\n async decryptFromBytes(encBuf: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n if (encBuf == null) {\n throw new Error(\"no encBuf.\");\n }\n\n const encBytes = new Uint8Array(encBuf);\n const encType = encBytes[0];\n let ctBytes: Uint8Array = null;\n let ivBytes: Uint8Array = null;\n let macBytes: Uint8Array = null;\n\n switch (encType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64:\n if (encBytes.length <= 49) {\n // 1 + 16 + 32 + ctLength\n return null;\n }\n\n ivBytes = encBytes.slice(1, 17);\n macBytes = encBytes.slice(17, 49);\n ctBytes = encBytes.slice(49);\n break;\n case EncryptionType.AesCbc256_B64:\n if (encBytes.length <= 17) {\n // 1 + 16 + ctLength\n return null;\n }\n\n ivBytes = encBytes.slice(1, 17);\n ctBytes = encBytes.slice(17);\n break;\n default:\n return null;\n }\n\n return await this.aesDecryptToBytes(\n encType,\n ctBytes.buffer,\n ivBytes.buffer,\n macBytes != null ? macBytes.buffer : null,\n key\n );\n }\n\n // EFForg/OpenWireless\n // ref https://github.com/EFForg/OpenWireless/blob/master/app/js/diceware.js\n async randomNumber(min: number, max: number): Promise {\n let rval = 0;\n const range = max - min + 1;\n const bitsNeeded = Math.ceil(Math.log2(range));\n if (bitsNeeded > 53) {\n throw new Error(\"We cannot generate numbers larger than 53 bits.\");\n }\n\n const bytesNeeded = Math.ceil(bitsNeeded / 8);\n const mask = Math.pow(2, bitsNeeded) - 1;\n // 7776 -> (2^13 = 8192) -1 == 8191 or 0x00001111 11111111\n\n // Fill a byte array with N random numbers\n const byteArray = new Uint8Array(await this.cryptoFunctionService.randomBytes(bytesNeeded));\n\n let p = (bytesNeeded - 1) * 8;\n for (let i = 0; i < bytesNeeded; i++) {\n rval += byteArray[i] * Math.pow(2, p);\n p -= 8;\n }\n\n // Use & to apply the mask and reduce the number of recursive lookups\n rval = rval & mask;\n\n if (rval >= range) {\n // Integer out of acceptable range\n return this.randomNumber(min, max);\n }\n\n // Return an integer that falls within the range\n return min + rval;\n }\n\n async validateKey(key: SymmetricCryptoKey) {\n try {\n const encPrivateKey = await this.stateService.getEncryptedPrivateKey();\n const encKey = await this.getEncKeyHelper(key);\n if (encPrivateKey == null || encKey == null) {\n return false;\n }\n\n const privateKey = await this.decryptToBytes(new EncString(encPrivateKey), encKey);\n await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n } catch (e) {\n return false;\n }\n\n return true;\n }\n\n // Helpers\n protected async storeKey(key: SymmetricCryptoKey, userId?: string) {\n if (await this.shouldStoreKey(KeySuffixOptions.Auto, userId)) {\n await this.stateService.setCryptoMasterKeyAuto(key.keyB64, { userId: userId });\n } else if (await this.shouldStoreKey(KeySuffixOptions.Biometric, userId)) {\n await this.stateService.setCryptoMasterKeyBiometric(key.keyB64, { userId: userId });\n } else {\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n await this.stateService.setCryptoMasterKeyBiometric(null, { userId: userId });\n }\n }\n\n protected async shouldStoreKey(keySuffix: KeySuffixOptions, userId?: string) {\n let shouldStoreKey = false;\n if (keySuffix === KeySuffixOptions.Auto) {\n const vaultTimeout = await this.stateService.getVaultTimeout({ userId: userId });\n shouldStoreKey = vaultTimeout == null;\n } else if (keySuffix === KeySuffixOptions.Biometric) {\n const biometricUnlock = await this.stateService.getBiometricUnlock({ userId: userId });\n shouldStoreKey = biometricUnlock && this.platformUtilService.supportsSecureStorage();\n }\n return shouldStoreKey;\n }\n\n protected async retrieveKeyFromStorage(keySuffix: KeySuffixOptions, userId?: string) {\n return keySuffix === KeySuffixOptions.Auto\n ? await this.stateService.getCryptoMasterKeyAuto({ userId: userId })\n : await this.stateService.getCryptoMasterKeyBiometric({ userId: userId });\n }\n\n private async aesEncrypt(data: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n const obj = new EncryptedObject();\n obj.key = await this.getKeyForEncryption(key);\n obj.iv = await this.cryptoFunctionService.randomBytes(16);\n obj.data = await this.cryptoFunctionService.aesEncrypt(data, obj.iv, obj.key.encKey);\n\n if (obj.key.macKey != null) {\n const macData = new Uint8Array(obj.iv.byteLength + obj.data.byteLength);\n macData.set(new Uint8Array(obj.iv), 0);\n macData.set(new Uint8Array(obj.data), obj.iv.byteLength);\n obj.mac = await this.cryptoFunctionService.hmac(macData.buffer, obj.key.macKey, \"sha256\");\n }\n\n return obj;\n }\n\n private async aesDecryptToUtf8(\n encType: EncryptionType,\n data: string,\n iv: string,\n mac: string,\n key: SymmetricCryptoKey\n ): Promise {\n const keyForEnc = await this.getKeyForEncryption(key);\n const theKey = await this.resolveLegacyKey(encType, keyForEnc);\n\n if (theKey.macKey != null && mac == null) {\n this.logService.error(\"mac required.\");\n return null;\n }\n\n if (theKey.encType !== encType) {\n this.logService.error(\"encType unavailable.\");\n return null;\n }\n\n const fastParams = this.cryptoFunctionService.aesDecryptFastParameters(data, iv, mac, theKey);\n if (fastParams.macKey != null && fastParams.mac != null) {\n const computedMac = await this.cryptoFunctionService.hmacFast(\n fastParams.macData,\n fastParams.macKey,\n \"sha256\"\n );\n const macsEqual = await this.cryptoFunctionService.compareFast(fastParams.mac, computedMac);\n if (!macsEqual) {\n this.logService.error(\"mac failed.\");\n return null;\n }\n }\n\n return this.cryptoFunctionService.aesDecryptFast(fastParams);\n }\n\n private async aesDecryptToBytes(\n encType: EncryptionType,\n data: ArrayBuffer,\n iv: ArrayBuffer,\n mac: ArrayBuffer,\n key: SymmetricCryptoKey\n ): Promise {\n const keyForEnc = await this.getKeyForEncryption(key);\n const theKey = await this.resolveLegacyKey(encType, keyForEnc);\n\n if (theKey.macKey != null && mac == null) {\n return null;\n }\n\n if (theKey.encType !== encType) {\n return null;\n }\n\n if (theKey.macKey != null && mac != null) {\n const macData = new Uint8Array(iv.byteLength + data.byteLength);\n macData.set(new Uint8Array(iv), 0);\n macData.set(new Uint8Array(data), iv.byteLength);\n const computedMac = await this.cryptoFunctionService.hmac(\n macData.buffer,\n theKey.macKey,\n \"sha256\"\n );\n if (computedMac === null) {\n return null;\n }\n\n const macsMatch = await this.cryptoFunctionService.compare(mac, computedMac);\n if (!macsMatch) {\n this.logService.error(\"mac failed.\");\n return null;\n }\n }\n\n return await this.cryptoFunctionService.aesDecrypt(data, iv, theKey.encKey);\n }\n\n private async getKeyForEncryption(key?: SymmetricCryptoKey): Promise {\n if (key != null) {\n return key;\n }\n\n const encKey = await this.getEncKey();\n if (encKey != null) {\n return encKey;\n }\n\n return await this.getKey();\n }\n\n private async resolveLegacyKey(\n encType: EncryptionType,\n key: SymmetricCryptoKey\n ): Promise {\n if (\n encType === EncryptionType.AesCbc128_HmacSha256_B64 &&\n key.encType === EncryptionType.AesCbc256_B64\n ) {\n // Old encrypt-then-mac scheme, make a new key\n let legacyKey = await this.stateService.getLegacyEtmKey();\n if (legacyKey == null) {\n legacyKey = new SymmetricCryptoKey(key.key, EncryptionType.AesCbc128_HmacSha256_B64);\n await this.stateService.setLegacyEtmKey(legacyKey);\n }\n return legacyKey;\n }\n\n return key;\n }\n\n private async stretchKey(key: SymmetricCryptoKey): Promise {\n const newKey = new Uint8Array(64);\n const encKey = await this.cryptoFunctionService.hkdfExpand(key.key, \"enc\", 32, \"sha256\");\n const macKey = await this.cryptoFunctionService.hkdfExpand(key.key, \"mac\", 32, \"sha256\");\n newKey.set(new Uint8Array(encKey));\n newKey.set(new Uint8Array(macKey), 32);\n return new SymmetricCryptoKey(newKey.buffer);\n }\n\n private async hashPhrase(hash: ArrayBuffer, minimumEntropy = 64) {\n const entropyPerWord = Math.log(EEFLongWordList.length) / Math.log(2);\n let numWords = Math.ceil(minimumEntropy / entropyPerWord);\n\n const hashArr = Array.from(new Uint8Array(hash));\n const entropyAvailable = hashArr.length * 4;\n if (numWords * entropyPerWord > entropyAvailable) {\n throw new Error(\"Output entropy of hash function is too small\");\n }\n\n const phrase: string[] = [];\n let hashNumber = bigInt.fromArray(hashArr, 256);\n while (numWords--) {\n const remainder = hashNumber.mod(EEFLongWordList.length);\n hashNumber = hashNumber.divide(EEFLongWordList.length);\n phrase.push(EEFLongWordList[remainder as any]);\n }\n return phrase;\n }\n\n private async buildEncKey(\n key: SymmetricCryptoKey,\n encKey: ArrayBuffer\n ): Promise<[SymmetricCryptoKey, EncString]> {\n let encKeyEnc: EncString = null;\n if (key.key.byteLength === 32) {\n const newKey = await this.stretchKey(key);\n encKeyEnc = await this.encrypt(encKey, newKey);\n } else if (key.key.byteLength === 64) {\n encKeyEnc = await this.encrypt(encKey, key);\n } else {\n throw new Error(\"Invalid key size.\");\n }\n return [new SymmetricCryptoKey(encKey), encKeyEnc];\n }\n\n private async clearSecretKeyStore(userId?: string): Promise {\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n await this.stateService.setCryptoMasterKeyBiometric(null, { userId: userId });\n }\n\n private async getEncKeyHelper(key: SymmetricCryptoKey = null): Promise {\n const inMemoryKey = await this.stateService.getDecryptedCryptoSymmetricKey();\n if (inMemoryKey != null) {\n return inMemoryKey;\n }\n\n const encKey = await this.stateService.getEncryptedCryptoSymmetricKey();\n if (encKey == null) {\n return null;\n }\n\n if (key == null) {\n key = await this.getKey();\n }\n if (key == null) {\n return null;\n }\n\n let decEncKey: ArrayBuffer;\n const encKeyCipher = new EncString(encKey);\n if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_B64) {\n decEncKey = await this.decryptToBytes(encKeyCipher, key);\n } else if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) {\n const newKey = await this.stretchKey(key);\n decEncKey = await this.decryptToBytes(encKeyCipher, newKey);\n } else {\n throw new Error(\"Unsupported encKey type.\");\n }\n if (decEncKey == null) {\n return null;\n }\n const symmetricCryptoKey = new SymmetricCryptoKey(decEncKey);\n await this.stateService.setDecryptedCryptoSymmetricKey(symmetricCryptoKey);\n return symmetricCryptoKey;\n }\n}\n","import { Observable, Subject } from \"rxjs\";\n\nimport {\n EnvironmentService as EnvironmentServiceAbstraction,\n Urls,\n} from \"../abstractions/environment.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { EnvironmentUrls } from \"../models/domain/environmentUrls\";\n\nexport class EnvironmentService implements EnvironmentServiceAbstraction {\n private readonly urlsSubject = new Subject();\n urls: Observable = this.urlsSubject;\n\n private baseUrl: string;\n private webVaultUrl: string;\n private apiUrl: string;\n private identityUrl: string;\n private iconsUrl: string;\n private notificationsUrl: string;\n private eventsUrl: string;\n private keyConnectorUrl: string;\n\n constructor(private stateService: StateService) {\n this.stateService.activeAccount.subscribe(async () => {\n await this.setUrlsFromStorage();\n });\n }\n\n hasBaseUrl() {\n return this.baseUrl != null;\n }\n\n getNotificationsUrl() {\n if (this.notificationsUrl != null) {\n return this.notificationsUrl;\n }\n\n if (this.baseUrl != null) {\n return this.baseUrl + \"/notifications\";\n }\n\n return \"https://notifications.bitwarden.com\";\n }\n\n getWebVaultUrl() {\n if (this.webVaultUrl != null) {\n return this.webVaultUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl;\n }\n return \"https://vault.bitwarden.com\";\n }\n\n getSendUrl() {\n return this.getWebVaultUrl() === \"https://vault.bitwarden.com\"\n ? \"https://send.bitwarden.com/#\"\n : this.getWebVaultUrl() + \"/#/send/\";\n }\n\n getIconsUrl() {\n if (this.iconsUrl != null) {\n return this.iconsUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl + \"/icons\";\n }\n\n return \"https://icons.bitwarden.net\";\n }\n\n getApiUrl() {\n if (this.apiUrl != null) {\n return this.apiUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl + \"/api\";\n }\n\n return \"https://api.bitwarden.com\";\n }\n\n getIdentityUrl() {\n if (this.identityUrl != null) {\n return this.identityUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl + \"/identity\";\n }\n\n return \"https://identity.bitwarden.com\";\n }\n\n getEventsUrl() {\n if (this.eventsUrl != null) {\n return this.eventsUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl + \"/events\";\n }\n\n return \"https://events.bitwarden.com\";\n }\n\n getKeyConnectorUrl() {\n return this.keyConnectorUrl;\n }\n\n async setUrlsFromStorage(): Promise {\n const urls: any = await this.stateService.getEnvironmentUrls();\n const envUrls = new EnvironmentUrls();\n\n this.baseUrl = envUrls.base = urls.base;\n this.webVaultUrl = urls.webVault;\n this.apiUrl = envUrls.api = urls.api;\n this.identityUrl = envUrls.identity = urls.identity;\n this.iconsUrl = urls.icons;\n this.notificationsUrl = urls.notifications;\n this.eventsUrl = envUrls.events = urls.events;\n this.keyConnectorUrl = urls.keyConnector;\n }\n\n async setUrls(urls: Urls): Promise {\n urls.base = this.formatUrl(urls.base);\n urls.webVault = this.formatUrl(urls.webVault);\n urls.api = this.formatUrl(urls.api);\n urls.identity = this.formatUrl(urls.identity);\n urls.icons = this.formatUrl(urls.icons);\n urls.notifications = this.formatUrl(urls.notifications);\n urls.events = this.formatUrl(urls.events);\n urls.keyConnector = this.formatUrl(urls.keyConnector);\n\n await this.stateService.setEnvironmentUrls({\n base: urls.base,\n api: urls.api,\n identity: urls.identity,\n webVault: urls.webVault,\n icons: urls.icons,\n notifications: urls.notifications,\n events: urls.events,\n keyConnector: urls.keyConnector,\n });\n\n this.baseUrl = urls.base;\n this.webVaultUrl = urls.webVault;\n this.apiUrl = urls.api;\n this.identityUrl = urls.identity;\n this.iconsUrl = urls.icons;\n this.notificationsUrl = urls.notifications;\n this.eventsUrl = urls.events;\n this.keyConnectorUrl = urls.keyConnector;\n\n this.urlsSubject.next(urls);\n\n return urls;\n }\n\n getUrls() {\n return {\n base: this.baseUrl,\n webVault: this.webVaultUrl,\n api: this.apiUrl,\n identity: this.identityUrl,\n icons: this.iconsUrl,\n notifications: this.notificationsUrl,\n events: this.eventsUrl,\n keyConnector: this.keyConnectorUrl,\n };\n }\n\n private formatUrl(url: string): string {\n if (url == null || url === \"\") {\n return null;\n }\n\n url = url.replace(/\\/+$/g, \"\");\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = \"https://\" + url;\n }\n\n return url.trim();\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { EventService as EventServiceAbstraction } from \"../abstractions/event.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { OrganizationService } from \"../abstractions/organization.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { EventType } from \"../enums/eventType\";\nimport { EventData } from \"../models/data/eventData\";\nimport { EventRequest } from \"../models/request/eventRequest\";\n\nexport class EventService implements EventServiceAbstraction {\n private inited = false;\n\n constructor(\n private apiService: ApiService,\n private cipherService: CipherService,\n private stateService: StateService,\n private logService: LogService,\n private organizationService: OrganizationService\n ) {}\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.uploadEvents();\n setInterval(() => this.uploadEvents(), 60 * 1000); // check every 60 seconds\n }\n }\n\n async collect(\n eventType: EventType,\n cipherId: string = null,\n uploadImmediately = false\n ): Promise {\n const authed = await this.stateService.getIsAuthenticated();\n if (!authed) {\n return;\n }\n const organizations = await this.organizationService.getAll();\n if (organizations == null) {\n return;\n }\n const orgIds = new Set(organizations.filter((o) => o.useEvents).map((o) => o.id));\n if (orgIds.size === 0) {\n return;\n }\n if (cipherId != null) {\n const cipher = await this.cipherService.get(cipherId);\n if (cipher == null || cipher.organizationId == null || !orgIds.has(cipher.organizationId)) {\n return;\n }\n }\n let eventCollection = await this.stateService.getEventCollection();\n if (eventCollection == null) {\n eventCollection = [];\n }\n const event = new EventData();\n event.type = eventType;\n event.cipherId = cipherId;\n event.date = new Date().toISOString();\n eventCollection.push(event);\n await this.stateService.setEventCollection(eventCollection);\n if (uploadImmediately) {\n await this.uploadEvents();\n }\n }\n\n async uploadEvents(userId?: string): Promise {\n const authed = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!authed) {\n return;\n }\n const eventCollection = await this.stateService.getEventCollection({ userId: userId });\n if (eventCollection == null || eventCollection.length === 0) {\n return;\n }\n const request = eventCollection.map((e) => {\n const req = new EventRequest();\n req.type = e.type;\n req.cipherId = e.cipherId;\n req.date = e.date;\n return req;\n });\n try {\n await this.apiService.postEventsCollect(request);\n this.clearEvents(userId);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async clearEvents(userId?: string): Promise {\n await this.stateService.setEventCollection(null, { userId: userId });\n }\n}\n","import * as papa from \"papaparse\";\n\nimport { ApiService } from \"../abstractions/api.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport {\n ExportFormat,\n ExportService as ExportServiceAbstraction,\n} from \"../abstractions/export.service\";\nimport { FolderService } from \"../abstractions/folder.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { DEFAULT_KDF_ITERATIONS, KdfType } from \"../enums/kdfType\";\nimport { Utils } from \"../misc/utils\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport { Collection } from \"../models/domain/collection\";\nimport { Folder } from \"../models/domain/folder\";\nimport { CipherWithIds as CipherExport } from \"../models/export/cipherWithIds\";\nimport { CollectionWithId as CollectionExport } from \"../models/export/collectionWithId\";\nimport { Event } from \"../models/export/event\";\nimport { FolderWithId as FolderExport } from \"../models/export/folderWithId\";\nimport { CollectionDetailsResponse } from \"../models/response/collectionResponse\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { CollectionView } from \"../models/view/collectionView\";\nimport { EventView } from \"../models/view/eventView\";\nimport { FolderView } from \"../models/view/folderView\";\n\nexport class ExportService implements ExportServiceAbstraction {\n constructor(\n private folderService: FolderService,\n private cipherService: CipherService,\n private apiService: ApiService,\n private cryptoService: CryptoService,\n private cryptoFunctionService: CryptoFunctionService\n ) {}\n\n async getExport(format: ExportFormat = \"csv\", organizationId?: string): Promise {\n if (organizationId) {\n return await this.getOrganizationExport(organizationId, format);\n }\n\n if (format === \"encrypted_json\") {\n return this.getEncryptedExport();\n } else {\n return this.getDecryptedExport(format);\n }\n }\n\n async getPasswordProtectedExport(password: string, organizationId?: string): Promise {\n const clearText = organizationId\n ? await this.getOrganizationExport(organizationId, \"json\")\n : await this.getExport(\"json\");\n\n const salt = Utils.fromBufferToB64(await this.cryptoFunctionService.randomBytes(16));\n const kdfIterations = DEFAULT_KDF_ITERATIONS;\n const key = await this.cryptoService.makePinKey(\n password,\n salt,\n KdfType.PBKDF2_SHA256,\n kdfIterations\n );\n\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid(), key);\n const encText = await this.cryptoService.encrypt(clearText, key);\n\n const jsonDoc: any = {\n encrypted: true,\n passwordProtected: true,\n salt: salt,\n kdfIterations: kdfIterations,\n kdfType: KdfType.PBKDF2_SHA256,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n data: encText.encryptedString,\n };\n\n return JSON.stringify(jsonDoc, null, \" \");\n }\n\n async getOrganizationExport(\n organizationId: string,\n format: ExportFormat = \"csv\"\n ): Promise {\n if (format === \"encrypted_json\") {\n return this.getOrganizationEncryptedExport(organizationId);\n } else {\n return this.getOrganizationDecryptedExport(organizationId, format);\n }\n }\n\n async getEventExport(events: EventView[]): Promise {\n return papa.unparse(events.map((e) => new Event(e)));\n }\n\n getFileName(prefix: string = null, extension = \"csv\"): string {\n const now = new Date();\n const dateString =\n now.getFullYear() +\n \"\" +\n this.padNumber(now.getMonth() + 1, 2) +\n \"\" +\n this.padNumber(now.getDate(), 2) +\n this.padNumber(now.getHours(), 2) +\n \"\" +\n this.padNumber(now.getMinutes(), 2) +\n this.padNumber(now.getSeconds(), 2);\n\n return \"bitwarden\" + (prefix ? \"_\" + prefix : \"\") + \"_export_\" + dateString + \".\" + extension;\n }\n\n private async getDecryptedExport(format: \"json\" | \"csv\"): Promise {\n let decFolders: FolderView[] = [];\n let decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(\n this.folderService.getAllDecrypted().then((folders) => {\n decFolders = folders;\n })\n );\n\n promises.push(\n this.cipherService.getAllDecrypted().then((ciphers) => {\n decCiphers = ciphers.filter((f) => f.deletedDate == null);\n })\n );\n\n await Promise.all(promises);\n\n if (format === \"csv\") {\n const foldersMap = new Map();\n decFolders.forEach((f) => {\n if (f.id != null) {\n foldersMap.set(f.id, f);\n }\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach((c) => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n if (c.organizationId != null) {\n return;\n }\n\n const cipher: any = {};\n cipher.folder =\n c.folderId != null && foldersMap.has(c.folderId) ? foldersMap.get(c.folderId).name : null;\n cipher.favorite = c.favorite ? 1 : null;\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n encrypted: false,\n folders: [],\n items: [],\n };\n\n decFolders.forEach((f) => {\n if (f.id == null) {\n return;\n }\n const folder = new FolderExport();\n folder.build(f);\n jsonDoc.folders.push(folder);\n });\n\n decCiphers.forEach((c) => {\n if (c.organizationId != null) {\n return;\n }\n const cipher = new CipherExport();\n cipher.build(c);\n cipher.collectionIds = null;\n jsonDoc.items.push(cipher);\n });\n\n return JSON.stringify(jsonDoc, null, \" \");\n }\n }\n\n private async getEncryptedExport(): Promise {\n let folders: Folder[] = [];\n let ciphers: Cipher[] = [];\n const promises = [];\n\n promises.push(\n this.folderService.getAll().then((f) => {\n folders = f;\n })\n );\n\n promises.push(\n this.cipherService.getAll().then((c) => {\n ciphers = c.filter((f) => f.deletedDate == null);\n })\n );\n\n await Promise.all(promises);\n\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid());\n\n const jsonDoc: any = {\n encrypted: true,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n folders: [],\n items: [],\n };\n\n folders.forEach((f) => {\n if (f.id == null) {\n return;\n }\n const folder = new FolderExport();\n folder.build(f);\n jsonDoc.folders.push(folder);\n });\n\n ciphers.forEach((c) => {\n if (c.organizationId != null) {\n return;\n }\n const cipher = new CipherExport();\n cipher.build(c);\n cipher.collectionIds = null;\n jsonDoc.items.push(cipher);\n });\n\n return JSON.stringify(jsonDoc, null, \" \");\n }\n\n private async getOrganizationDecryptedExport(\n organizationId: string,\n format: \"json\" | \"csv\"\n ): Promise {\n const decCollections: CollectionView[] = [];\n const decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(\n this.apiService.getCollections(organizationId).then((collections) => {\n const collectionPromises: any = [];\n if (collections != null && collections.data != null && collections.data.length > 0) {\n collections.data.forEach((c) => {\n const collection = new Collection(new CollectionData(c as CollectionDetailsResponse));\n collectionPromises.push(\n collection.decrypt().then((decCol) => {\n decCollections.push(decCol);\n })\n );\n });\n }\n return Promise.all(collectionPromises);\n })\n );\n\n promises.push(\n this.apiService.getCiphersOrganization(organizationId).then((ciphers) => {\n const cipherPromises: any = [];\n if (ciphers != null && ciphers.data != null && ciphers.data.length > 0) {\n ciphers.data\n .filter((c) => c.deletedDate === null)\n .forEach((c) => {\n const cipher = new Cipher(new CipherData(c));\n cipherPromises.push(\n cipher.decrypt().then((decCipher) => {\n decCiphers.push(decCipher);\n })\n );\n });\n }\n return Promise.all(cipherPromises);\n })\n );\n\n await Promise.all(promises);\n\n if (format === \"csv\") {\n const collectionsMap = new Map();\n decCollections.forEach((c) => {\n collectionsMap.set(c.id, c);\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach((c) => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n\n const cipher: any = {};\n cipher.collections = [];\n if (c.collectionIds != null) {\n cipher.collections = c.collectionIds\n .filter((id) => collectionsMap.has(id))\n .map((id) => collectionsMap.get(id).name);\n }\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n encrypted: false,\n collections: [],\n items: [],\n };\n\n decCollections.forEach((c) => {\n const collection = new CollectionExport();\n collection.build(c);\n jsonDoc.collections.push(collection);\n });\n\n decCiphers.forEach((c) => {\n const cipher = new CipherExport();\n cipher.build(c);\n jsonDoc.items.push(cipher);\n });\n return JSON.stringify(jsonDoc, null, \" \");\n }\n }\n\n private async getOrganizationEncryptedExport(organizationId: string): Promise {\n const collections: Collection[] = [];\n const ciphers: Cipher[] = [];\n const promises = [];\n\n promises.push(\n this.apiService.getCollections(organizationId).then((c) => {\n const collectionPromises: any = [];\n if (c != null && c.data != null && c.data.length > 0) {\n c.data.forEach((r) => {\n const collection = new Collection(new CollectionData(r as CollectionDetailsResponse));\n collections.push(collection);\n });\n }\n return Promise.all(collectionPromises);\n })\n );\n\n promises.push(\n this.apiService.getCiphersOrganization(organizationId).then((c) => {\n const cipherPromises: any = [];\n if (c != null && c.data != null && c.data.length > 0) {\n c.data\n .filter((item) => item.deletedDate === null)\n .forEach((item) => {\n const cipher = new Cipher(new CipherData(item));\n ciphers.push(cipher);\n });\n }\n return Promise.all(cipherPromises);\n })\n );\n\n await Promise.all(promises);\n\n const orgKey = await this.cryptoService.getOrgKey(organizationId);\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid(), orgKey);\n\n const jsonDoc: any = {\n encrypted: true,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n collections: [],\n items: [],\n };\n\n collections.forEach((c) => {\n const collection = new CollectionExport();\n collection.build(c);\n jsonDoc.collections.push(collection);\n });\n\n ciphers.forEach((c) => {\n const cipher = new CipherExport();\n cipher.build(c);\n jsonDoc.items.push(cipher);\n });\n return JSON.stringify(jsonDoc, null, \" \");\n }\n\n private padNumber(num: number, width: number, padCharacter = \"0\"): string {\n const numString = num.toString();\n return numString.length >= width\n ? numString\n : new Array(width - numString.length + 1).join(padCharacter) + numString;\n }\n\n private buildCommonCipher(cipher: any, c: CipherView) {\n cipher.type = null;\n cipher.name = c.name;\n cipher.notes = c.notes;\n cipher.fields = null;\n cipher.reprompt = c.reprompt;\n // Login props\n cipher.login_uri = null;\n cipher.login_username = null;\n cipher.login_password = null;\n cipher.login_totp = null;\n\n if (c.fields) {\n c.fields.forEach((f: any) => {\n if (!cipher.fields) {\n cipher.fields = \"\";\n } else {\n cipher.fields += \"\\n\";\n }\n\n cipher.fields += (f.name || \"\") + \": \" + f.value;\n });\n }\n\n switch (c.type) {\n case CipherType.Login:\n cipher.type = \"login\";\n cipher.login_username = c.login.username;\n cipher.login_password = c.login.password;\n cipher.login_totp = c.login.totp;\n\n if (c.login.uris) {\n cipher.login_uri = [];\n c.login.uris.forEach((u) => {\n cipher.login_uri.push(u.uri);\n });\n }\n break;\n case CipherType.SecureNote:\n cipher.type = \"note\";\n break;\n default:\n return;\n }\n\n return cipher;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { FileUploadService as FileUploadServiceAbstraction } from \"../abstractions/fileUpload.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { FileUploadType } from \"../enums/fileUploadType\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachmentUploadDataResponse\";\nimport { SendFileUploadDataResponse } from \"../models/response/sendFileUploadDataResponse\";\n\nimport { AzureFileUploadService } from \"./azureFileUpload.service\";\nimport { BitwardenFileUploadService } from \"./bitwardenFileUpload.service\";\n\nexport class FileUploadService implements FileUploadServiceAbstraction {\n private azureFileUploadService: AzureFileUploadService;\n private bitwardenFileUploadService: BitwardenFileUploadService;\n\n constructor(private logService: LogService, private apiService: ApiService) {\n this.azureFileUploadService = new AzureFileUploadService(logService);\n this.bitwardenFileUploadService = new BitwardenFileUploadService(apiService);\n }\n\n async uploadSendFile(\n uploadData: SendFileUploadDataResponse,\n fileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) {\n try {\n switch (uploadData.fileUploadType) {\n case FileUploadType.Direct:\n await this.bitwardenFileUploadService.upload(\n fileName.encryptedString,\n encryptedFileData,\n (fd) =>\n this.apiService.postSendFile(\n uploadData.sendResponse.id,\n uploadData.sendResponse.file.id,\n fd\n )\n );\n break;\n case FileUploadType.Azure: {\n const renewalCallback = async () => {\n const renewalResponse = await this.apiService.renewSendFileUploadUrl(\n uploadData.sendResponse.id,\n uploadData.sendResponse.file.id\n );\n return renewalResponse.url;\n };\n await this.azureFileUploadService.upload(\n uploadData.url,\n encryptedFileData,\n renewalCallback\n );\n break;\n }\n default:\n throw new Error(\"Unknown file upload type\");\n }\n } catch (e) {\n await this.apiService.deleteSend(uploadData.sendResponse.id);\n throw e;\n }\n }\n\n async uploadCipherAttachment(\n admin: boolean,\n uploadData: AttachmentUploadDataResponse,\n encryptedFileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) {\n const response = admin ? uploadData.cipherMiniResponse : uploadData.cipherResponse;\n try {\n switch (uploadData.fileUploadType) {\n case FileUploadType.Direct:\n await this.bitwardenFileUploadService.upload(\n encryptedFileName.encryptedString,\n encryptedFileData,\n (fd) => this.apiService.postAttachmentFile(response.id, uploadData.attachmentId, fd)\n );\n break;\n case FileUploadType.Azure: {\n const renewalCallback = async () => {\n const renewalResponse = await this.apiService.renewAttachmentUploadUrl(\n response.id,\n uploadData.attachmentId\n );\n return renewalResponse.url;\n };\n await this.azureFileUploadService.upload(\n uploadData.url,\n encryptedFileData,\n renewalCallback\n );\n break;\n }\n default:\n throw new Error(\"Unknown file upload type.\");\n }\n } catch (e) {\n if (admin) {\n await this.apiService.deleteCipherAttachmentAdmin(response.id, uploadData.attachmentId);\n } else {\n await this.apiService.deleteCipherAttachment(response.id, uploadData.attachmentId);\n }\n throw e;\n }\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { FolderService as FolderServiceAbstraction } from \"../abstractions/folder.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { ServiceUtils } from \"../misc/serviceUtils\";\nimport { Utils } from \"../misc/utils\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { FolderData } from \"../models/data/folderData\";\nimport { Folder } from \"../models/domain/folder\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { TreeNode } from \"../models/domain/treeNode\";\nimport { FolderRequest } from \"../models/request/folderRequest\";\nimport { FolderResponse } from \"../models/response/folderResponse\";\nimport { FolderView } from \"../models/view/folderView\";\n\nconst NestingDelimiter = \"/\";\n\nexport class FolderService implements FolderServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private apiService: ApiService,\n private i18nService: I18nService,\n private cipherService: CipherService,\n private stateService: StateService\n ) {}\n\n async clearCache(userId?: string): Promise {\n await this.stateService.setDecryptedFolders(null, { userId: userId });\n }\n\n async encrypt(model: FolderView, key?: SymmetricCryptoKey): Promise {\n const folder = new Folder();\n folder.id = model.id;\n folder.name = await this.cryptoService.encrypt(model.name, key);\n return folder;\n }\n\n async get(id: string): Promise {\n const folders = await this.stateService.getEncryptedFolders();\n // eslint-disable-next-line\n if (folders == null || !folders.hasOwnProperty(id)) {\n return null;\n }\n\n return new Folder(folders[id]);\n }\n\n async getAll(): Promise {\n const folders = await this.stateService.getEncryptedFolders();\n const response: Folder[] = [];\n for (const id in folders) {\n // eslint-disable-next-line\n if (folders.hasOwnProperty(id)) {\n response.push(new Folder(folders[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n const decryptedFolders = await this.stateService.getDecryptedFolders();\n if (decryptedFolders != null) {\n return decryptedFolders;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const decFolders: FolderView[] = [];\n const promises: Promise[] = [];\n const folders = await this.getAll();\n folders.forEach((folder) => {\n promises.push(folder.decrypt().then((f) => decFolders.push(f)));\n });\n\n await Promise.all(promises);\n decFolders.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n\n const noneFolder = new FolderView();\n noneFolder.name = this.i18nService.t(\"noneFolder\");\n decFolders.push(noneFolder);\n\n await this.stateService.setDecryptedFolders(decFolders);\n return decFolders;\n }\n\n async getAllNested(): Promise[]> {\n const folders = await this.getAllDecrypted();\n const nodes: TreeNode[] = [];\n folders.forEach((f) => {\n const folderCopy = new FolderView();\n folderCopy.id = f.id;\n folderCopy.revisionDate = f.revisionDate;\n const parts = f.name != null ? f.name.replace(/^\\/+|\\/+$/g, \"\").split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, folderCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n async getNested(id: string): Promise> {\n const folders = await this.getAllNested();\n return ServiceUtils.getTreeNodeObject(folders, id) as TreeNode;\n }\n\n async saveWithServer(folder: Folder): Promise {\n const request = new FolderRequest(folder);\n\n let response: FolderResponse;\n if (folder.id == null) {\n response = await this.apiService.postFolder(request);\n folder.id = response.id;\n } else {\n response = await this.apiService.putFolder(folder.id, request);\n }\n\n const userId = await this.stateService.getUserId();\n const data = new FolderData(response, userId);\n await this.upsert(data);\n }\n\n async upsert(folder: FolderData | FolderData[]): Promise {\n let folders = await this.stateService.getEncryptedFolders();\n if (folders == null) {\n folders = {};\n }\n\n if (folder instanceof FolderData) {\n const f = folder as FolderData;\n folders[f.id] = f;\n } else {\n (folder as FolderData[]).forEach((f) => {\n folders[f.id] = f;\n });\n }\n\n await this.stateService.setDecryptedFolders(null);\n await this.stateService.setEncryptedFolders(folders);\n }\n\n async replace(folders: { [id: string]: FolderData }): Promise {\n await this.stateService.setDecryptedFolders(null);\n await this.stateService.setEncryptedFolders(folders);\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setDecryptedFolders(null, { userId: userId });\n await this.stateService.setEncryptedFolders(null, { userId: userId });\n }\n\n async delete(id: string | string[]): Promise {\n const folders = await this.stateService.getEncryptedFolders();\n if (folders == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n if (folders[id] == null) {\n return;\n }\n delete folders[id];\n } else {\n (id as string[]).forEach((i) => {\n delete folders[i];\n });\n }\n\n await this.stateService.setDecryptedFolders(null);\n await this.stateService.setEncryptedFolders(folders);\n\n // Items in a deleted folder are re-assigned to \"No Folder\"\n const ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers != null) {\n const updates: CipherData[] = [];\n for (const cId in ciphers) {\n if (ciphers[cId].folderId === id) {\n ciphers[cId].folderId = null;\n updates.push(ciphers[cId]);\n }\n }\n if (updates.length > 0) {\n this.cipherService.upsert(updates);\n }\n }\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteFolder(id);\n await this.delete(id);\n }\n}\n","import { I18nService as I18nServiceAbstraction } from \"../abstractions/i18n.service\";\n\nexport class I18nService implements I18nServiceAbstraction {\n locale: string;\n // First locale is the default (English)\n supportedTranslationLocales: string[] = [\"en\"];\n translationLocale: string;\n collator: Intl.Collator;\n localeNames = new Map([\n [\"af\", \"Afrikaans\"],\n [\"az\", \"Azərbaycanca\"],\n [\"be\", \"Беларуская\"],\n [\"bg\", \"български\"],\n [\"bn\", \"বাংলা\"],\n [\"bs\", \"bosanski jezik\"],\n [\"ca\", \"català\"],\n [\"cs\", \"čeština\"],\n [\"da\", \"dansk\"],\n [\"de\", \"Deutsch\"],\n [\"el\", \"Ελληνικά\"],\n [\"en\", \"English\"],\n [\"en-GB\", \"English (British)\"],\n [\"en-IN\", \"English (India)\"],\n [\"eo\", \"Esperanto\"],\n [\"es\", \"español\"],\n [\"et\", \"eesti\"],\n [\"fa\", \"فارسی\"],\n [\"fi\", \"suomi\"],\n [\"fil\", \"Wikang Filipino\"],\n [\"fr\", \"français\"],\n [\"he\", \"עברית\"],\n [\"hi\", \"हिन्दी\"],\n [\"hr\", \"hrvatski\"],\n [\"hu\", \"magyar\"],\n [\"id\", \"Bahasa Indonesia\"],\n [\"it\", \"italiano\"],\n [\"ja\", \"日本語\"],\n [\"ka\", \"ქართული\"],\n [\"km\", \"ខ្មែរ, ខេមរភាសា, ភាសាខ្មែរ\"],\n [\"kn\", \"ಕನ್ನಡ\"],\n [\"ko\", \"한국어\"],\n [\"lt\", \"lietuvių kalba\"],\n [\"lv\", \"Latvietis\"],\n [\"me\", \"црногорски\"],\n [\"ml\", \"മലയാളം\"],\n [\"nb\", \"norsk (bokmål)\"],\n [\"nl\", \"Nederlands\"],\n [\"nn\", \"Norsk Nynorsk\"],\n [\"pl\", \"polski\"],\n [\"pt-BR\", \"português do Brasil\"],\n [\"pt-PT\", \"português\"],\n [\"ro\", \"română\"],\n [\"ru\", \"русский\"],\n [\"si\", \"සිංහල\"],\n [\"sk\", \"slovenčina\"],\n [\"sl\", \"Slovenski jezik, Slovenščina\"],\n [\"sr\", \"Српски\"],\n [\"sv\", \"svenska\"],\n [\"th\", \"ไทย\"],\n [\"tr\", \"Türkçe\"],\n [\"uk\", \"українська\"],\n [\"vi\", \"Tiếng Việt\"],\n [\"zh-CN\", \"中文(中国大陆)\"],\n [\"zh-TW\", \"中文(台灣)\"],\n ]);\n\n protected inited: boolean;\n protected defaultMessages: any = {};\n protected localeMessages: any = {};\n\n constructor(\n protected systemLanguage: string,\n protected localesDirectory: string,\n protected getLocalesJson: (formattedLocale: string) => Promise\n ) {\n this.systemLanguage = systemLanguage.replace(\"_\", \"-\");\n }\n\n async init(locale?: string) {\n if (this.inited) {\n throw new Error(\"i18n already initialized.\");\n }\n if (this.supportedTranslationLocales == null || this.supportedTranslationLocales.length === 0) {\n throw new Error(\"supportedTranslationLocales not set.\");\n }\n\n this.inited = true;\n this.locale = this.translationLocale = locale != null ? locale : this.systemLanguage;\n\n try {\n this.collator = new Intl.Collator(this.locale, { numeric: true, sensitivity: \"base\" });\n } catch {\n this.collator = null;\n }\n\n if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n this.translationLocale = this.translationLocale.slice(0, 2);\n\n if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n this.translationLocale = this.supportedTranslationLocales[0];\n }\n }\n\n if (this.localesDirectory != null) {\n await this.loadMessages(this.translationLocale, this.localeMessages);\n if (this.translationLocale !== this.supportedTranslationLocales[0]) {\n await this.loadMessages(this.supportedTranslationLocales[0], this.defaultMessages);\n }\n }\n }\n\n t(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.translate(id, p1, p2, p3);\n }\n\n translate(id: string, p1?: string, p2?: string, p3?: string): string {\n let result: string;\n // eslint-disable-next-line\n if (this.localeMessages.hasOwnProperty(id) && this.localeMessages[id]) {\n result = this.localeMessages[id];\n // eslint-disable-next-line\n } else if (this.defaultMessages.hasOwnProperty(id) && this.defaultMessages[id]) {\n result = this.defaultMessages[id];\n } else {\n result = \"\";\n }\n\n if (result !== \"\") {\n if (p1 != null) {\n result = result.split(\"__$1__\").join(p1);\n }\n if (p2 != null) {\n result = result.split(\"__$2__\").join(p2);\n }\n if (p3 != null) {\n result = result.split(\"__$3__\").join(p3);\n }\n }\n\n return result;\n }\n\n private async loadMessages(locale: string, messagesObj: any): Promise {\n const formattedLocale = locale.replace(\"-\", \"_\");\n const locales = await this.getLocalesJson(formattedLocale);\n for (const prop in locales) {\n // eslint-disable-next-line\n if (!locales.hasOwnProperty(prop)) {\n continue;\n }\n messagesObj[prop] = locales[prop].message;\n\n if (locales[prop].placeholders) {\n for (const placeProp in locales[prop].placeholders) {\n if (\n !locales[prop].placeholders.hasOwnProperty(placeProp) || // eslint-disable-line\n !locales[prop].placeholders[placeProp].content\n ) {\n continue;\n }\n\n const replaceToken = \"\\\\$\" + placeProp.toUpperCase() + \"\\\\$\";\n let replaceContent = locales[prop].placeholders[placeProp].content;\n if (replaceContent === \"$1\" || replaceContent === \"$2\" || replaceContent === \"$3\") {\n replaceContent = \"__$\" + replaceContent + \"__\";\n }\n messagesObj[prop] = messagesObj[prop].replace(\n new RegExp(replaceToken, \"g\"),\n replaceContent\n );\n }\n }\n }\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { CollectionService } from \"../abstractions/collection.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { FolderService } from \"../abstractions/folder.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { ImportService as ImportServiceAbstraction } from \"../abstractions/import.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport {\n featuredImportOptions,\n ImportOption,\n ImportType,\n regularImportOptions,\n} from \"../enums/importOptions\";\nimport { AscendoCsvImporter } from \"../importers/ascendoCsvImporter\";\nimport { AvastCsvImporter } from \"../importers/avastCsvImporter\";\nimport { AvastJsonImporter } from \"../importers/avastJsonImporter\";\nimport { AviraCsvImporter } from \"../importers/aviraCsvImporter\";\nimport { BitwardenCsvImporter } from \"../importers/bitwardenCsvImporter\";\nimport { BitwardenJsonImporter } from \"../importers/bitwardenJsonImporter\";\nimport { BitwardenPasswordProtectedImporter } from \"../importers/bitwardenPasswordProtectedImporter\";\nimport { BlackBerryCsvImporter } from \"../importers/blackBerryCsvImporter\";\nimport { BlurCsvImporter } from \"../importers/blurCsvImporter\";\nimport { ButtercupCsvImporter } from \"../importers/buttercupCsvImporter\";\nimport { ChromeCsvImporter } from \"../importers/chromeCsvImporter\";\nimport { ClipperzHtmlImporter } from \"../importers/clipperzHtmlImporter\";\nimport { CodebookCsvImporter } from \"../importers/codebookCsvImporter\";\nimport { DashlaneCsvImporter } from \"../importers/dashlaneImporters/dashlaneCsvImporter\";\nimport { DashlaneJsonImporter } from \"../importers/dashlaneImporters/dashlaneJsonImporter\";\nimport { EncryptrCsvImporter } from \"../importers/encryptrCsvImporter\";\nimport { EnpassCsvImporter } from \"../importers/enpassCsvImporter\";\nimport { EnpassJsonImporter } from \"../importers/enpassJsonImporter\";\nimport { FirefoxCsvImporter } from \"../importers/firefoxCsvImporter\";\nimport { FSecureFskImporter } from \"../importers/fsecureFskImporter\";\nimport { GnomeJsonImporter } from \"../importers/gnomeJsonImporter\";\nimport { ImportError } from \"../importers/importError\";\nimport { Importer } from \"../importers/importer\";\nimport { KasperskyTxtImporter } from \"../importers/kasperskyTxtImporter\";\nimport { KeePass2XmlImporter } from \"../importers/keepass2XmlImporter\";\nimport { KeePassXCsvImporter } from \"../importers/keepassxCsvImporter\";\nimport { KeeperCsvImporter } from \"../importers/keeperImporters/keeperCsvImporter\";\nimport { LastPassCsvImporter } from \"../importers/lastpassCsvImporter\";\nimport { LogMeOnceCsvImporter } from \"../importers/logMeOnceCsvImporter\";\nimport { MeldiumCsvImporter } from \"../importers/meldiumCsvImporter\";\nimport { MSecureCsvImporter } from \"../importers/msecureCsvImporter\";\nimport { MykiCsvImporter } from \"../importers/mykiCsvImporter\";\nimport { NordPassCsvImporter } from \"../importers/nordpassCsvImporter\";\nimport { OnePassword1PifImporter } from \"../importers/onepasswordImporters/onepassword1PifImporter\";\nimport { OnePassword1PuxImporter } from \"../importers/onepasswordImporters/onepassword1PuxImporter\";\nimport { OnePasswordMacCsvImporter } from \"../importers/onepasswordImporters/onepasswordMacCsvImporter\";\nimport { OnePasswordWinCsvImporter } from \"../importers/onepasswordImporters/onepasswordWinCsvImporter\";\nimport { PadlockCsvImporter } from \"../importers/padlockCsvImporter\";\nimport { PassKeepCsvImporter } from \"../importers/passkeepCsvImporter\";\nimport { PassmanJsonImporter } from \"../importers/passmanJsonImporter\";\nimport { PasspackCsvImporter } from \"../importers/passpackCsvImporter\";\nimport { PasswordAgentCsvImporter } from \"../importers/passwordAgentCsvImporter\";\nimport { PasswordBossJsonImporter } from \"../importers/passwordBossJsonImporter\";\nimport { PasswordDragonXmlImporter } from \"../importers/passwordDragonXmlImporter\";\nimport { PasswordSafeXmlImporter } from \"../importers/passwordSafeXmlImporter\";\nimport { PasswordWalletTxtImporter } from \"../importers/passwordWalletTxtImporter\";\nimport { RememBearCsvImporter } from \"../importers/rememBearCsvImporter\";\nimport { RoboFormCsvImporter } from \"../importers/roboformCsvImporter\";\nimport { SafariCsvImporter } from \"../importers/safariCsvImporter\";\nimport { SafeInCloudXmlImporter } from \"../importers/safeInCloudXmlImporter\";\nimport { SaferPassCsvImporter } from \"../importers/saferpassCsvImport\";\nimport { SecureSafeCsvImporter } from \"../importers/secureSafeCsvImporter\";\nimport { SplashIdCsvImporter } from \"../importers/splashIdCsvImporter\";\nimport { StickyPasswordXmlImporter } from \"../importers/stickyPasswordXmlImporter\";\nimport { TrueKeyCsvImporter } from \"../importers/truekeyCsvImporter\";\nimport { UpmCsvImporter } from \"../importers/upmCsvImporter\";\nimport { YotiCsvImporter } from \"../importers/yotiCsvImporter\";\nimport { ZohoVaultCsvImporter } from \"../importers/zohoVaultCsvImporter\";\nimport { Utils } from \"../misc/utils\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CipherRequest } from \"../models/request/cipherRequest\";\nimport { CollectionRequest } from \"../models/request/collectionRequest\";\nimport { FolderRequest } from \"../models/request/folderRequest\";\nimport { ImportCiphersRequest } from \"../models/request/importCiphersRequest\";\nimport { ImportOrganizationCiphersRequest } from \"../models/request/importOrganizationCiphersRequest\";\nimport { KvpRequest } from \"../models/request/kvpRequest\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\nimport { CipherView } from \"../models/view/cipherView\";\n\nexport class ImportService implements ImportServiceAbstraction {\n featuredImportOptions = featuredImportOptions as readonly ImportOption[];\n\n regularImportOptions = regularImportOptions as readonly ImportOption[];\n\n constructor(\n private cipherService: CipherService,\n private folderService: FolderService,\n private apiService: ApiService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService\n ) {}\n\n getImportOptions(): ImportOption[] {\n return this.featuredImportOptions.concat(this.regularImportOptions);\n }\n\n async import(\n importer: Importer,\n fileContents: string,\n organizationId: string = null\n ): Promise {\n const importResult = await importer.parse(fileContents);\n if (importResult.success) {\n if (importResult.folders.length === 0 && importResult.ciphers.length === 0) {\n return new ImportError(this.i18nService.t(\"importNothingError\"));\n } else if (importResult.ciphers.length > 0) {\n const halfway = Math.floor(importResult.ciphers.length / 2);\n const last = importResult.ciphers.length - 1;\n\n if (\n this.badData(importResult.ciphers[0]) &&\n this.badData(importResult.ciphers[halfway]) &&\n this.badData(importResult.ciphers[last])\n ) {\n return new ImportError(this.i18nService.t(\"importFormatError\"));\n }\n }\n try {\n await this.postImport(importResult, organizationId);\n } catch (error) {\n const errorResponse = new ErrorResponse(error, 400);\n return this.handleServerError(errorResponse, importResult);\n }\n return null;\n } else {\n if (!Utils.isNullOrWhitespace(importResult.errorMessage)) {\n return new ImportError(importResult.errorMessage, importResult.missingPassword);\n } else {\n return new ImportError(\n this.i18nService.t(\"importFormatError\"),\n importResult.missingPassword\n );\n }\n }\n }\n\n getImporter(\n format: ImportType | \"bitwardenpasswordprotected\",\n organizationId: string = null,\n password: string = null\n ): Importer {\n const importer = this.getImporterInstance(format, password);\n if (importer == null) {\n return null;\n }\n importer.organizationId = organizationId;\n return importer;\n }\n\n private getImporterInstance(format: ImportType | \"bitwardenpasswordprotected\", password: string) {\n if (format == null) {\n return null;\n }\n\n switch (format) {\n case \"bitwardencsv\":\n return new BitwardenCsvImporter();\n case \"bitwardenjson\":\n return new BitwardenJsonImporter(this.cryptoService, this.i18nService);\n case \"bitwardenpasswordprotected\":\n return new BitwardenPasswordProtectedImporter(\n this.cryptoService,\n this.i18nService,\n password\n );\n case \"lastpasscsv\":\n case \"passboltcsv\":\n return new LastPassCsvImporter();\n case \"keepassxcsv\":\n return new KeePassXCsvImporter();\n case \"aviracsv\":\n return new AviraCsvImporter();\n case \"blurcsv\":\n return new BlurCsvImporter();\n case \"safeincloudxml\":\n return new SafeInCloudXmlImporter();\n case \"padlockcsv\":\n return new PadlockCsvImporter();\n case \"keepass2xml\":\n return new KeePass2XmlImporter();\n case \"chromecsv\":\n case \"operacsv\":\n case \"vivaldicsv\":\n return new ChromeCsvImporter();\n case \"firefoxcsv\":\n return new FirefoxCsvImporter();\n case \"upmcsv\":\n return new UpmCsvImporter();\n case \"saferpasscsv\":\n return new SaferPassCsvImporter();\n case \"safaricsv\":\n return new SafariCsvImporter();\n case \"meldiumcsv\":\n return new MeldiumCsvImporter();\n case \"1password1pif\":\n return new OnePassword1PifImporter();\n case \"1password1pux\":\n return new OnePassword1PuxImporter();\n case \"1passwordwincsv\":\n return new OnePasswordWinCsvImporter();\n case \"1passwordmaccsv\":\n return new OnePasswordMacCsvImporter();\n case \"keepercsv\":\n return new KeeperCsvImporter();\n // case \"keeperjson\":\n // return new KeeperJsonImporter();\n case \"passworddragonxml\":\n return new PasswordDragonXmlImporter();\n case \"enpasscsv\":\n return new EnpassCsvImporter();\n case \"enpassjson\":\n return new EnpassJsonImporter();\n case \"pwsafexml\":\n return new PasswordSafeXmlImporter();\n case \"dashlanecsv\":\n return new DashlaneCsvImporter();\n case \"dashlanejson\":\n return new DashlaneJsonImporter();\n case \"msecurecsv\":\n return new MSecureCsvImporter();\n case \"stickypasswordxml\":\n return new StickyPasswordXmlImporter();\n case \"truekeycsv\":\n return new TrueKeyCsvImporter();\n case \"clipperzhtml\":\n return new ClipperzHtmlImporter();\n case \"roboformcsv\":\n return new RoboFormCsvImporter();\n case \"ascendocsv\":\n return new AscendoCsvImporter();\n case \"passwordbossjson\":\n return new PasswordBossJsonImporter();\n case \"zohovaultcsv\":\n return new ZohoVaultCsvImporter();\n case \"splashidcsv\":\n return new SplashIdCsvImporter();\n case \"passkeepcsv\":\n return new PassKeepCsvImporter();\n case \"gnomejson\":\n return new GnomeJsonImporter();\n case \"passwordagentcsv\":\n return new PasswordAgentCsvImporter();\n case \"passpackcsv\":\n return new PasspackCsvImporter();\n case \"passmanjson\":\n return new PassmanJsonImporter();\n case \"avastcsv\":\n return new AvastCsvImporter();\n case \"avastjson\":\n return new AvastJsonImporter();\n case \"fsecurefsk\":\n return new FSecureFskImporter();\n case \"kasperskytxt\":\n return new KasperskyTxtImporter();\n case \"remembearcsv\":\n return new RememBearCsvImporter();\n case \"passwordwallettxt\":\n return new PasswordWalletTxtImporter();\n case \"mykicsv\":\n return new MykiCsvImporter();\n case \"securesafecsv\":\n return new SecureSafeCsvImporter();\n case \"logmeoncecsv\":\n return new LogMeOnceCsvImporter();\n case \"blackberrycsv\":\n return new BlackBerryCsvImporter();\n case \"buttercupcsv\":\n return new ButtercupCsvImporter();\n case \"codebookcsv\":\n return new CodebookCsvImporter();\n case \"encryptrcsv\":\n return new EncryptrCsvImporter();\n case \"yoticsv\":\n return new YotiCsvImporter();\n case \"nordpasscsv\":\n return new NordPassCsvImporter();\n default:\n return null;\n }\n }\n\n private async postImport(importResult: ImportResult, organizationId: string = null) {\n if (organizationId == null) {\n const request = new ImportCiphersRequest();\n for (let i = 0; i < importResult.ciphers.length; i++) {\n const c = await this.cipherService.encrypt(importResult.ciphers[i]);\n request.ciphers.push(new CipherRequest(c));\n }\n if (importResult.folders != null) {\n for (let i = 0; i < importResult.folders.length; i++) {\n const f = await this.folderService.encrypt(importResult.folders[i]);\n request.folders.push(new FolderRequest(f));\n }\n }\n if (importResult.folderRelationships != null) {\n importResult.folderRelationships.forEach((r) =>\n request.folderRelationships.push(new KvpRequest(r[0], r[1]))\n );\n }\n return await this.apiService.postImportCiphers(request);\n } else {\n const request = new ImportOrganizationCiphersRequest();\n for (let i = 0; i < importResult.ciphers.length; i++) {\n importResult.ciphers[i].organizationId = organizationId;\n const c = await this.cipherService.encrypt(importResult.ciphers[i]);\n request.ciphers.push(new CipherRequest(c));\n }\n if (importResult.collections != null) {\n for (let i = 0; i < importResult.collections.length; i++) {\n importResult.collections[i].organizationId = organizationId;\n const c = await this.collectionService.encrypt(importResult.collections[i]);\n request.collections.push(new CollectionRequest(c));\n }\n }\n if (importResult.collectionRelationships != null) {\n importResult.collectionRelationships.forEach((r) =>\n request.collectionRelationships.push(new KvpRequest(r[0], r[1]))\n );\n }\n return await this.apiService.postImportOrganizationCiphers(organizationId, request);\n }\n }\n\n private badData(c: CipherView) {\n return (\n (c.name == null || c.name === \"--\") &&\n c.type === CipherType.Login &&\n c.login != null &&\n Utils.isNullOrWhitespace(c.login.password)\n );\n }\n\n private handleServerError(errorResponse: ErrorResponse, importResult: ImportResult): ImportError {\n if (errorResponse.validationErrors == null) {\n return new ImportError(errorResponse.message);\n }\n\n let errorMessage = \"\";\n\n Object.entries(errorResponse.validationErrors).forEach(([key, value], index) => {\n let item;\n let itemType;\n const i = Number(key.match(/[0-9]+/)[0]);\n\n switch (key.match(/^\\w+/)[0]) {\n case \"Ciphers\":\n item = importResult.ciphers[i];\n itemType = CipherType[item.type];\n break;\n case \"Folders\":\n item = importResult.folders[i];\n itemType = \"Folder\";\n break;\n case \"Collections\":\n item = importResult.collections[i];\n itemType = \"Collection\";\n break;\n default:\n return;\n }\n\n if (index > 0) {\n errorMessage += \"\\n\\n\";\n }\n\n if (itemType !== \"Folder\" && itemType !== \"Collection\") {\n errorMessage += \"[\" + (i + 1) + \"] \";\n }\n\n errorMessage += \"[\" + itemType + '] \"' + item.name + '\": ' + value;\n });\n\n return new ImportError(errorMessage);\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { KeyConnectorService as KeyConnectorServiceAbstraction } from \"../abstractions/keyConnector.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { OrganizationService } from \"../abstractions/organization.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { OrganizationUserType } from \"../enums/organizationUserType\";\nimport { Utils } from \"../misc/utils\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/setKeyConnectorKeyRequest\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/keyConnectorUserKeyRequest\";\nimport { KeysRequest } from \"../models/request/keysRequest\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\n\nexport class KeyConnectorService implements KeyConnectorServiceAbstraction {\n constructor(\n private stateService: StateService,\n private cryptoService: CryptoService,\n private apiService: ApiService,\n private tokenService: TokenService,\n private logService: LogService,\n private organizationService: OrganizationService,\n private cryptoFunctionService: CryptoFunctionService\n ) {}\n\n setUsesKeyConnector(usesKeyConnector: boolean) {\n return this.stateService.setUsesKeyConnector(usesKeyConnector);\n }\n\n async getUsesKeyConnector(): Promise {\n return await this.stateService.getUsesKeyConnector();\n }\n\n async userNeedsMigration() {\n const loggedInUsingSso = await this.tokenService.getIsExternal();\n const requiredByOrganization = (await this.getManagingOrganization()) != null;\n const userIsNotUsingKeyConnector = !(await this.getUsesKeyConnector());\n\n return loggedInUsingSso && requiredByOrganization && userIsNotUsingKeyConnector;\n }\n\n async migrateUser() {\n const organization = await this.getManagingOrganization();\n const key = await this.cryptoService.getKey();\n const keyConnectorRequest = new KeyConnectorUserKeyRequest(key.encKeyB64);\n\n try {\n await this.apiService.postUserKeyToKeyConnector(\n organization.keyConnectorUrl,\n keyConnectorRequest\n );\n } catch (e) {\n throw new Error(\"Unable to reach key connector\");\n }\n\n await this.apiService.postConvertToKeyConnector();\n }\n\n async getAndSetKey(url: string) {\n try {\n const userKeyResponse = await this.apiService.getUserKeyFromKeyConnector(url);\n const keyArr = Utils.fromB64ToArray(userKeyResponse.key);\n const k = new SymmetricCryptoKey(keyArr);\n await this.cryptoService.setKey(k);\n } catch (e) {\n this.logService.error(e);\n throw new Error(\"Unable to reach key connector\");\n }\n }\n\n async getManagingOrganization() {\n const orgs = await this.organizationService.getAll();\n return orgs.find(\n (o) =>\n o.keyConnectorEnabled &&\n o.type !== OrganizationUserType.Admin &&\n o.type !== OrganizationUserType.Owner &&\n !o.isProviderUser\n );\n }\n\n async convertNewSsoUserToKeyConnector(tokenResponse: IdentityTokenResponse, orgId: string) {\n const { kdf, kdfIterations, keyConnectorUrl } = tokenResponse;\n const password = await this.cryptoFunctionService.randomBytes(64);\n\n const k = await this.cryptoService.makeKey(\n Utils.fromBufferToB64(password),\n await this.tokenService.getEmail(),\n kdf,\n kdfIterations\n );\n const keyConnectorRequest = new KeyConnectorUserKeyRequest(k.encKeyB64);\n await this.cryptoService.setKey(k);\n\n const encKey = await this.cryptoService.makeEncKey(k);\n await this.cryptoService.setEncKey(encKey[1].encryptedString);\n\n const [pubKey, privKey] = await this.cryptoService.makeKeyPair();\n\n try {\n await this.apiService.postUserKeyToKeyConnector(keyConnectorUrl, keyConnectorRequest);\n } catch (e) {\n throw new Error(\"Unable to reach key connector\");\n }\n\n const keys = new KeysRequest(pubKey, privKey.encryptedString);\n const setPasswordRequest = new SetKeyConnectorKeyRequest(\n encKey[1].encryptedString,\n kdf,\n kdfIterations,\n orgId,\n keys\n );\n await this.apiService.postSetKeyConnectorKey(setPasswordRequest);\n }\n\n async setConvertAccountRequired(status: boolean) {\n await this.stateService.setConvertAccountToKeyConnector(status);\n }\n\n async getConvertAccountRequired(): Promise {\n return await this.stateService.getConvertAccountToKeyConnector();\n }\n\n async removeConvertAccountRequired() {\n await this.stateService.setConvertAccountToKeyConnector(null);\n }\n\n async clear() {\n await this.removeConvertAccountRequired();\n }\n}\n","import * as signalR from \"@microsoft/signalr\";\nimport * as signalRMsgPack from \"@microsoft/signalr-protocol-msgpack\";\n\nimport { ApiService } from \"../abstractions/api.service\";\nimport { AppIdService } from \"../abstractions/appId.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"../abstractions/notifications.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { SyncService } from \"../abstractions/sync.service\";\nimport { VaultTimeoutService } from \"../abstractions/vaultTimeout.service\";\nimport { NotificationType } from \"../enums/notificationType\";\nimport {\n NotificationResponse,\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../models/response/notificationResponse\";\n\nexport class NotificationsService implements NotificationsServiceAbstraction {\n private signalrConnection: signalR.HubConnection;\n private url: string;\n private connected = false;\n private inited = false;\n private inactive = false;\n private reconnectTimer: any = null;\n\n constructor(\n private syncService: SyncService,\n private appIdService: AppIdService,\n private apiService: ApiService,\n private vaultTimeoutService: VaultTimeoutService,\n private environmentService: EnvironmentService,\n private logoutCallback: () => Promise,\n private logService: LogService,\n private stateService: StateService\n ) {\n this.environmentService.urls.subscribe(() => {\n if (!this.inited) {\n return;\n }\n\n this.init();\n });\n }\n\n async init(): Promise {\n this.inited = false;\n this.url = this.environmentService.getNotificationsUrl();\n\n // Set notifications server URL to `https://-` to effectively disable communication\n // with the notifications server from the client app\n if (this.url === \"https://-\") {\n return;\n }\n\n if (this.signalrConnection != null) {\n this.signalrConnection.off(\"ReceiveMessage\");\n this.signalrConnection.off(\"Heartbeat\");\n await this.signalrConnection.stop();\n this.connected = false;\n this.signalrConnection = null;\n }\n\n this.signalrConnection = new signalR.HubConnectionBuilder()\n .withUrl(this.url + \"/hub\", {\n accessTokenFactory: () => this.apiService.getActiveBearerToken(),\n skipNegotiation: true,\n transport: signalR.HttpTransportType.WebSockets,\n })\n .withHubProtocol(new signalRMsgPack.MessagePackHubProtocol() as signalR.IHubProtocol)\n // .configureLogging(signalR.LogLevel.Trace)\n .build();\n\n this.signalrConnection.on(\"ReceiveMessage\", (data: any) =>\n this.processNotification(new NotificationResponse(data))\n );\n // eslint-disable-next-line\n this.signalrConnection.on(\"Heartbeat\", (data: any) => {\n /*console.log('Heartbeat!');*/\n });\n this.signalrConnection.onclose(() => {\n this.connected = false;\n this.reconnect(true);\n });\n this.inited = true;\n if (await this.isAuthedAndUnlocked()) {\n await this.reconnect(false);\n }\n }\n\n async updateConnection(sync = false): Promise {\n if (!this.inited) {\n return;\n }\n try {\n if (await this.isAuthedAndUnlocked()) {\n await this.reconnect(sync);\n } else {\n await this.signalrConnection.stop();\n }\n } catch (e) {\n this.logService.error(e.toString());\n }\n }\n\n async reconnectFromActivity(): Promise {\n this.inactive = false;\n if (this.inited && !this.connected) {\n await this.reconnect(true);\n }\n }\n\n async disconnectFromInactivity(): Promise {\n this.inactive = true;\n if (this.inited && this.connected) {\n await this.signalrConnection.stop();\n }\n }\n\n private async processNotification(notification: NotificationResponse) {\n const appId = await this.appIdService.getAppId();\n if (notification == null || notification.contextId === appId) {\n return;\n }\n\n const isAuthenticated = await this.stateService.getIsAuthenticated();\n const payloadUserId = notification.payload.userId || notification.payload.UserId;\n const myUserId = await this.stateService.getUserId();\n if (isAuthenticated && payloadUserId != null && payloadUserId !== myUserId) {\n return;\n }\n\n switch (notification.type) {\n case NotificationType.SyncCipherCreate:\n case NotificationType.SyncCipherUpdate:\n await this.syncService.syncUpsertCipher(\n notification.payload as SyncCipherNotification,\n notification.type === NotificationType.SyncCipherUpdate\n );\n break;\n case NotificationType.SyncCipherDelete:\n case NotificationType.SyncLoginDelete:\n await this.syncService.syncDeleteCipher(notification.payload as SyncCipherNotification);\n break;\n case NotificationType.SyncFolderCreate:\n case NotificationType.SyncFolderUpdate:\n await this.syncService.syncUpsertFolder(\n notification.payload as SyncFolderNotification,\n notification.type === NotificationType.SyncFolderUpdate\n );\n break;\n case NotificationType.SyncFolderDelete:\n await this.syncService.syncDeleteFolder(notification.payload as SyncFolderNotification);\n break;\n case NotificationType.SyncVault:\n case NotificationType.SyncCiphers:\n case NotificationType.SyncSettings:\n if (isAuthenticated) {\n await this.syncService.fullSync(false);\n }\n break;\n case NotificationType.SyncOrgKeys:\n if (isAuthenticated) {\n await this.syncService.fullSync(true);\n // Stop so a reconnect can be made\n await this.signalrConnection.stop();\n }\n break;\n case NotificationType.LogOut:\n if (isAuthenticated) {\n this.logoutCallback();\n }\n break;\n case NotificationType.SyncSendCreate:\n case NotificationType.SyncSendUpdate:\n await this.syncService.syncUpsertSend(\n notification.payload as SyncSendNotification,\n notification.type === NotificationType.SyncSendUpdate\n );\n break;\n case NotificationType.SyncSendDelete:\n await this.syncService.syncDeleteSend(notification.payload as SyncSendNotification);\n break;\n default:\n break;\n }\n }\n\n private async reconnect(sync: boolean) {\n if (this.reconnectTimer != null) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n if (this.connected || !this.inited || this.inactive) {\n return;\n }\n const authedAndUnlocked = await this.isAuthedAndUnlocked();\n if (!authedAndUnlocked) {\n return;\n }\n\n try {\n await this.signalrConnection.start();\n this.connected = true;\n if (sync) {\n await this.syncService.fullSync(false);\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n if (!this.connected) {\n this.reconnectTimer = setTimeout(() => this.reconnect(sync), this.random(120000, 300000));\n }\n }\n\n private async isAuthedAndUnlocked() {\n if (await this.stateService.getIsAuthenticated()) {\n const locked = await this.vaultTimeoutService.isLocked();\n return !locked;\n }\n return false;\n }\n\n private random(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n}\n","import { OrganizationService as OrganizationServiceAbstraction } from \"../abstractions/organization.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { Organization } from \"../models/domain/organization\";\n\nexport class OrganizationService implements OrganizationServiceAbstraction {\n constructor(private stateService: StateService) {}\n\n async get(id: string): Promise {\n const organizations = await this.stateService.getOrganizations();\n // eslint-disable-next-line\n if (organizations == null || !organizations.hasOwnProperty(id)) {\n return null;\n }\n\n return new Organization(organizations[id]);\n }\n\n async getByIdentifier(identifier: string): Promise {\n const organizations = await this.getAll();\n if (organizations == null || organizations.length === 0) {\n return null;\n }\n\n return organizations.find((o) => o.identifier === identifier);\n }\n\n async getAll(userId?: string): Promise {\n const organizations = await this.stateService.getOrganizations({ userId: userId });\n const response: Organization[] = [];\n for (const id in organizations) {\n // eslint-disable-next-line\n if (organizations.hasOwnProperty(id) && !organizations[id].isProviderUser) {\n response.push(new Organization(organizations[id]));\n }\n }\n return response;\n }\n\n async save(organizations: { [id: string]: OrganizationData }) {\n return await this.stateService.setOrganizations(organizations);\n }\n\n async canManageSponsorships(): Promise {\n const orgs = await this.getAll();\n return orgs.some(\n (o) => o.familySponsorshipAvailable || o.familySponsorshipFriendlyName !== null\n );\n }\n\n async hasOrganizations(userId?: string): Promise {\n const organizations = await this.getAll(userId);\n return organizations.length > 0;\n }\n}\n","import * as zxcvbn from \"zxcvbn\";\n\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { PasswordGenerationService as PasswordGenerationServiceAbstraction } from \"../abstractions/passwordGeneration.service\";\nimport { PolicyService } from \"../abstractions/policy.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { PolicyType } from \"../enums/policyType\";\nimport { EEFLongWordList } from \"../misc/wordlist\";\nimport { EncString } from \"../models/domain/encString\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { PasswordGeneratorPolicyOptions } from \"../models/domain/passwordGeneratorPolicyOptions\";\nimport { Policy } from \"../models/domain/policy\";\n\nconst DefaultOptions = {\n length: 14,\n ambiguous: false,\n number: true,\n minNumber: 1,\n uppercase: true,\n minUppercase: 0,\n lowercase: true,\n minLowercase: 0,\n special: false,\n minSpecial: 1,\n type: \"password\",\n numWords: 3,\n wordSeparator: \"-\",\n capitalize: false,\n includeNumber: false,\n};\n\nconst MaxPasswordsInHistory = 100;\n\nexport class PasswordGenerationService implements PasswordGenerationServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private policyService: PolicyService,\n private stateService: StateService\n ) {}\n\n async generatePassword(options: any): Promise {\n // overload defaults with given options\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.type === \"passphrase\") {\n return this.generatePassphrase(options);\n }\n\n // sanitize\n this.sanitizePasswordLength(o, true);\n\n const minLength: number = o.minUppercase + o.minLowercase + o.minNumber + o.minSpecial;\n if (o.length < minLength) {\n o.length = minLength;\n }\n\n const positions: string[] = [];\n if (o.lowercase && o.minLowercase > 0) {\n for (let i = 0; i < o.minLowercase; i++) {\n positions.push(\"l\");\n }\n }\n if (o.uppercase && o.minUppercase > 0) {\n for (let i = 0; i < o.minUppercase; i++) {\n positions.push(\"u\");\n }\n }\n if (o.number && o.minNumber > 0) {\n for (let i = 0; i < o.minNumber; i++) {\n positions.push(\"n\");\n }\n }\n if (o.special && o.minSpecial > 0) {\n for (let i = 0; i < o.minSpecial; i++) {\n positions.push(\"s\");\n }\n }\n while (positions.length < o.length) {\n positions.push(\"a\");\n }\n\n // shuffle\n await this.shuffleArray(positions);\n\n // build out the char sets\n let allCharSet = \"\";\n\n let lowercaseCharSet = \"abcdefghijkmnopqrstuvwxyz\";\n if (o.ambiguous) {\n lowercaseCharSet += \"l\";\n }\n if (o.lowercase) {\n allCharSet += lowercaseCharSet;\n }\n\n let uppercaseCharSet = \"ABCDEFGHJKLMNPQRSTUVWXYZ\";\n if (o.ambiguous) {\n uppercaseCharSet += \"IO\";\n }\n if (o.uppercase) {\n allCharSet += uppercaseCharSet;\n }\n\n let numberCharSet = \"23456789\";\n if (o.ambiguous) {\n numberCharSet += \"01\";\n }\n if (o.number) {\n allCharSet += numberCharSet;\n }\n\n const specialCharSet = \"!@#$%^&*\";\n if (o.special) {\n allCharSet += specialCharSet;\n }\n\n let password = \"\";\n for (let i = 0; i < o.length; i++) {\n let positionChars: string;\n switch (positions[i]) {\n case \"l\":\n positionChars = lowercaseCharSet;\n break;\n case \"u\":\n positionChars = uppercaseCharSet;\n break;\n case \"n\":\n positionChars = numberCharSet;\n break;\n case \"s\":\n positionChars = specialCharSet;\n break;\n case \"a\":\n positionChars = allCharSet;\n break;\n default:\n break;\n }\n\n const randomCharIndex = await this.cryptoService.randomNumber(0, positionChars.length - 1);\n password += positionChars.charAt(randomCharIndex);\n }\n\n return password;\n }\n\n async generatePassphrase(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.numWords == null || o.numWords <= 2) {\n o.numWords = DefaultOptions.numWords;\n }\n if (o.wordSeparator == null || o.wordSeparator.length === 0 || o.wordSeparator.length > 1) {\n o.wordSeparator = \" \";\n }\n if (o.capitalize == null) {\n o.capitalize = false;\n }\n if (o.includeNumber == null) {\n o.includeNumber = false;\n }\n\n const listLength = EEFLongWordList.length - 1;\n const wordList = new Array(o.numWords);\n for (let i = 0; i < o.numWords; i++) {\n const wordIndex = await this.cryptoService.randomNumber(0, listLength);\n if (o.capitalize) {\n wordList[i] = this.capitalize(EEFLongWordList[wordIndex]);\n } else {\n wordList[i] = EEFLongWordList[wordIndex];\n }\n }\n\n if (o.includeNumber) {\n await this.appendRandomNumberToRandomWord(wordList);\n }\n return wordList.join(o.wordSeparator);\n }\n\n async getOptions(): Promise<[any, PasswordGeneratorPolicyOptions]> {\n let options = await this.stateService.getPasswordGenerationOptions();\n if (options == null) {\n options = DefaultOptions;\n } else {\n options = Object.assign({}, DefaultOptions, options);\n }\n await this.stateService.setPasswordGenerationOptions(options);\n const enforcedOptions = await this.enforcePasswordGeneratorPoliciesOnOptions(options);\n options = enforcedOptions[0];\n return [options, enforcedOptions[1]];\n }\n\n async enforcePasswordGeneratorPoliciesOnOptions(\n options: any\n ): Promise<[any, PasswordGeneratorPolicyOptions]> {\n let enforcedPolicyOptions = await this.getPasswordGeneratorPolicyOptions();\n if (enforcedPolicyOptions != null) {\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (enforcedPolicyOptions.useUppercase) {\n options.uppercase = true;\n }\n\n if (enforcedPolicyOptions.useLowercase) {\n options.lowercase = true;\n }\n\n if (enforcedPolicyOptions.useNumbers) {\n options.number = true;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (enforcedPolicyOptions.useSpecial) {\n options.special = true;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n // Must normalize these fields because the receiving call expects all options to pass the current rules\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (enforcedPolicyOptions.capitalize) {\n options.capitalize = true;\n }\n\n if (enforcedPolicyOptions.includeNumber) {\n options.includeNumber = true;\n }\n\n // Force default type if password/passphrase selected via policy\n if (\n enforcedPolicyOptions.defaultType === \"password\" ||\n enforcedPolicyOptions.defaultType === \"passphrase\"\n ) {\n options.type = enforcedPolicyOptions.defaultType;\n }\n } else {\n // UI layer expects an instantiated object to prevent more explicit null checks\n enforcedPolicyOptions = new PasswordGeneratorPolicyOptions();\n }\n return [options, enforcedPolicyOptions];\n }\n\n async getPasswordGeneratorPolicyOptions(): Promise {\n const policies: Policy[] =\n this.policyService == null\n ? null\n : await this.policyService.getAll(PolicyType.PasswordGenerator);\n let enforcedOptions: PasswordGeneratorPolicyOptions = null;\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach((currentPolicy) => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new PasswordGeneratorPolicyOptions();\n }\n\n // Password wins in multi-org collisions\n if (currentPolicy.data.defaultType != null && enforcedOptions.defaultType !== \"password\") {\n enforcedOptions.defaultType = currentPolicy.data.defaultType;\n }\n\n if (\n currentPolicy.data.minLength != null &&\n currentPolicy.data.minLength > enforcedOptions.minLength\n ) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.useUpper) {\n enforcedOptions.useUppercase = true;\n }\n\n if (currentPolicy.data.useLower) {\n enforcedOptions.useLowercase = true;\n }\n\n if (currentPolicy.data.useNumbers) {\n enforcedOptions.useNumbers = true;\n }\n\n if (\n currentPolicy.data.minNumbers != null &&\n currentPolicy.data.minNumbers > enforcedOptions.numberCount\n ) {\n enforcedOptions.numberCount = currentPolicy.data.minNumbers;\n }\n\n if (currentPolicy.data.useSpecial) {\n enforcedOptions.useSpecial = true;\n }\n\n if (\n currentPolicy.data.minSpecial != null &&\n currentPolicy.data.minSpecial > enforcedOptions.specialCount\n ) {\n enforcedOptions.specialCount = currentPolicy.data.minSpecial;\n }\n\n if (\n currentPolicy.data.minNumberWords != null &&\n currentPolicy.data.minNumberWords > enforcedOptions.minNumberWords\n ) {\n enforcedOptions.minNumberWords = currentPolicy.data.minNumberWords;\n }\n\n if (currentPolicy.data.capitalize) {\n enforcedOptions.capitalize = true;\n }\n\n if (currentPolicy.data.includeNumber) {\n enforcedOptions.includeNumber = true;\n }\n });\n\n return enforcedOptions;\n }\n\n async saveOptions(options: any) {\n await this.stateService.setPasswordGenerationOptions(options);\n }\n\n async getHistory(): Promise {\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return new Array();\n }\n\n if ((await this.stateService.getDecryptedPasswordGenerationHistory()) == null) {\n const encrypted = await this.stateService.getEncryptedPasswordGenerationHistory();\n const decrypted = await this.decryptHistory(encrypted);\n await this.stateService.setDecryptedPasswordGenerationHistory(decrypted);\n }\n\n const passwordGenerationHistory =\n await this.stateService.getDecryptedPasswordGenerationHistory();\n return passwordGenerationHistory != null\n ? passwordGenerationHistory\n : new Array();\n }\n\n async addHistory(password: string): Promise {\n // Cannot add new history if no key is available\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return;\n }\n\n const currentHistory = await this.getHistory();\n\n // Prevent duplicates\n if (this.matchesPrevious(password, currentHistory)) {\n return;\n }\n\n currentHistory.unshift(new GeneratedPasswordHistory(password, Date.now()));\n\n // Remove old items.\n if (currentHistory.length > MaxPasswordsInHistory) {\n currentHistory.pop();\n }\n\n const newHistory = await this.encryptHistory(currentHistory);\n return await this.stateService.setEncryptedPasswordGenerationHistory(newHistory);\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setEncryptedPasswordGenerationHistory(null, { userId: userId });\n await this.stateService.setDecryptedPasswordGenerationHistory(null, { userId: userId });\n }\n\n passwordStrength(password: string, userInputs: string[] = null): zxcvbn.ZXCVBNResult {\n if (password == null || password.length === 0) {\n return null;\n }\n let globalUserInputs = [\"bitwarden\", \"bit\", \"warden\"];\n if (userInputs != null && userInputs.length > 0) {\n globalUserInputs = globalUserInputs.concat(userInputs);\n }\n // Use a hash set to get rid of any duplicate user inputs\n const finalUserInputs = Array.from(new Set(globalUserInputs));\n const result = zxcvbn(password, finalUserInputs);\n return result;\n }\n\n normalizeOptions(options: any, enforcedPolicyOptions: PasswordGeneratorPolicyOptions) {\n options.minLowercase = 0;\n options.minUppercase = 0;\n\n if (!options.length || options.length < 5) {\n options.length = 5;\n } else if (options.length > 128) {\n options.length = 128;\n }\n\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (!options.minNumber) {\n options.minNumber = 0;\n } else if (options.minNumber > options.length) {\n options.minNumber = options.length;\n } else if (options.minNumber > 9) {\n options.minNumber = 9;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (!options.minSpecial) {\n options.minSpecial = 0;\n } else if (options.minSpecial > options.length) {\n options.minSpecial = options.length;\n } else if (options.minSpecial > 9) {\n options.minSpecial = 9;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords == null || options.length < 3) {\n options.numWords = 3;\n } else if (options.numWords > 20) {\n options.numWords = 20;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (options.wordSeparator != null && options.wordSeparator.length > 1) {\n options.wordSeparator = options.wordSeparator[0];\n }\n\n this.sanitizePasswordLength(options, false);\n }\n\n private capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n private async appendRandomNumberToRandomWord(wordList: string[]) {\n if (wordList == null || wordList.length <= 0) {\n return;\n }\n const index = await this.cryptoService.randomNumber(0, wordList.length - 1);\n const num = await this.cryptoService.randomNumber(0, 9);\n wordList[index] = wordList[index] + num;\n }\n\n private async encryptHistory(\n history: GeneratedPasswordHistory[]\n ): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async (item) => {\n const encrypted = await this.cryptoService.encrypt(item.password);\n return new GeneratedPasswordHistory(encrypted.encryptedString, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private async decryptHistory(\n history: GeneratedPasswordHistory[]\n ): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async (item) => {\n const decrypted = await this.cryptoService.decryptToUtf8(new EncString(item.password));\n return new GeneratedPasswordHistory(decrypted, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private matchesPrevious(password: string, history: GeneratedPasswordHistory[]): boolean {\n if (history == null || history.length === 0) {\n return false;\n }\n\n return history[history.length - 1].password === password;\n }\n\n // ref: https://stackoverflow.com/a/12646864/1090359\n private async shuffleArray(array: string[]) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = await this.cryptoService.randomNumber(0, i);\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n\n private sanitizePasswordLength(options: any, forGeneration: boolean) {\n let minUppercaseCalc = 0;\n let minLowercaseCalc = 0;\n let minNumberCalc: number = options.minNumber;\n let minSpecialCalc: number = options.minSpecial;\n\n if (options.uppercase && options.minUppercase <= 0) {\n minUppercaseCalc = 1;\n } else if (!options.uppercase) {\n minUppercaseCalc = 0;\n }\n\n if (options.lowercase && options.minLowercase <= 0) {\n minLowercaseCalc = 1;\n } else if (!options.lowercase) {\n minLowercaseCalc = 0;\n }\n\n if (options.number && options.minNumber <= 0) {\n minNumberCalc = 1;\n } else if (!options.number) {\n minNumberCalc = 0;\n }\n\n if (options.special && options.minSpecial <= 0) {\n minSpecialCalc = 1;\n } else if (!options.special) {\n minSpecialCalc = 0;\n }\n\n // This should never happen but is a final safety net\n if (!options.length || options.length < 1) {\n options.length = 10;\n }\n\n const minLength: number = minUppercaseCalc + minLowercaseCalc + minNumberCalc + minSpecialCalc;\n // Normalize and Generation both require this modification\n if (options.length < minLength) {\n options.length = minLength;\n }\n\n // Apply other changes if the options object passed in is for generation\n if (forGeneration) {\n options.minUppercase = minUppercaseCalc;\n options.minLowercase = minLowercaseCalc;\n options.minNumber = minNumberCalc;\n options.minSpecial = minSpecialCalc;\n }\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { OrganizationService } from \"../abstractions/organization.service\";\nimport { PolicyService as PolicyServiceAbstraction } from \"../abstractions/policy.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { OrganizationUserStatusType } from \"../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../enums/organizationUserType\";\nimport { PolicyType } from \"../enums/policyType\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { MasterPasswordPolicyOptions } from \"../models/domain/masterPasswordPolicyOptions\";\nimport { Organization } from \"../models/domain/organization\";\nimport { Policy } from \"../models/domain/policy\";\nimport { ResetPasswordPolicyOptions } from \"../models/domain/resetPasswordPolicyOptions\";\nimport { ListResponse } from \"../models/response/listResponse\";\nimport { PolicyResponse } from \"../models/response/policyResponse\";\n\nexport class PolicyService implements PolicyServiceAbstraction {\n policyCache: Policy[];\n\n constructor(\n private stateService: StateService,\n private organizationService: OrganizationService,\n private apiService: ApiService\n ) {}\n\n async clearCache(): Promise {\n await this.stateService.setDecryptedPolicies(null);\n }\n\n async getAll(type?: PolicyType, userId?: string): Promise {\n let response: Policy[] = [];\n const decryptedPolicies = await this.stateService.getDecryptedPolicies({ userId: userId });\n if (decryptedPolicies != null) {\n response = decryptedPolicies;\n } else {\n const diskPolicies = await this.stateService.getEncryptedPolicies({ userId: userId });\n for (const id in diskPolicies) {\n // eslint-disable-next-line\n if (diskPolicies.hasOwnProperty(id)) {\n response.push(new Policy(diskPolicies[id]));\n }\n }\n await this.stateService.setDecryptedPolicies(response, { userId: userId });\n }\n if (type != null) {\n return response.filter((policy) => policy.type === type);\n } else {\n return response;\n }\n }\n\n async getPolicyForOrganization(policyType: PolicyType, organizationId: string): Promise {\n const org = await this.organizationService.get(organizationId);\n if (org?.isProviderUser) {\n const orgPolicies = await this.apiService.getPolicies(organizationId);\n const policy = orgPolicies.data.find((p) => p.organizationId === organizationId);\n\n if (policy == null) {\n return null;\n }\n\n return new Policy(new PolicyData(policy));\n }\n\n const policies = await this.getAll(policyType);\n return policies.find((p) => p.organizationId === organizationId);\n }\n\n async replace(policies: { [id: string]: PolicyData }): Promise {\n await this.stateService.setDecryptedPolicies(null);\n await this.stateService.setEncryptedPolicies(policies);\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setDecryptedPolicies(null, { userId: userId });\n await this.stateService.setEncryptedPolicies(null, { userId: userId });\n }\n\n async getMasterPasswordPoliciesForInvitedUsers(\n orgId: string\n ): Promise {\n const userId = await this.stateService.getUserId();\n const response = await this.apiService.getPoliciesByInvitedUser(orgId, userId);\n const policies = await this.mapPoliciesFromToken(response);\n return this.getMasterPasswordPolicyOptions(policies);\n }\n\n async getMasterPasswordPolicyOptions(policies?: Policy[]): Promise {\n let enforcedOptions: MasterPasswordPolicyOptions = null;\n\n if (policies == null) {\n policies = await this.getAll(PolicyType.MasterPassword);\n } else {\n policies = policies.filter((p) => p.type === PolicyType.MasterPassword);\n }\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach((currentPolicy) => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new MasterPasswordPolicyOptions();\n }\n\n if (\n currentPolicy.data.minComplexity != null &&\n currentPolicy.data.minComplexity > enforcedOptions.minComplexity\n ) {\n enforcedOptions.minComplexity = currentPolicy.data.minComplexity;\n }\n\n if (\n currentPolicy.data.minLength != null &&\n currentPolicy.data.minLength > enforcedOptions.minLength\n ) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.requireUpper) {\n enforcedOptions.requireUpper = true;\n }\n\n if (currentPolicy.data.requireLower) {\n enforcedOptions.requireLower = true;\n }\n\n if (currentPolicy.data.requireNumbers) {\n enforcedOptions.requireNumbers = true;\n }\n\n if (currentPolicy.data.requireSpecial) {\n enforcedOptions.requireSpecial = true;\n }\n });\n\n return enforcedOptions;\n }\n\n evaluateMasterPassword(\n passwordStrength: number,\n newPassword: string,\n enforcedPolicyOptions: MasterPasswordPolicyOptions\n ): boolean {\n if (enforcedPolicyOptions == null) {\n return true;\n }\n\n if (\n enforcedPolicyOptions.minComplexity > 0 &&\n enforcedPolicyOptions.minComplexity > passwordStrength\n ) {\n return false;\n }\n\n if (\n enforcedPolicyOptions.minLength > 0 &&\n enforcedPolicyOptions.minLength > newPassword.length\n ) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireUpper && newPassword.toLocaleLowerCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireLower && newPassword.toLocaleUpperCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireNumbers && !/[0-9]/.test(newPassword)) {\n return false;\n }\n\n // eslint-disable-next-line\n if (enforcedPolicyOptions.requireSpecial && !/[!@#$%\\^&*]/g.test(newPassword)) {\n return false;\n }\n\n return true;\n }\n\n getResetPasswordPolicyOptions(\n policies: Policy[],\n orgId: string\n ): [ResetPasswordPolicyOptions, boolean] {\n const resetPasswordPolicyOptions = new ResetPasswordPolicyOptions();\n\n if (policies == null || orgId == null) {\n return [resetPasswordPolicyOptions, false];\n }\n\n const policy = policies.find(\n (p) => p.organizationId === orgId && p.type === PolicyType.ResetPassword && p.enabled\n );\n resetPasswordPolicyOptions.autoEnrollEnabled = policy?.data?.autoEnrollEnabled ?? false;\n\n return [resetPasswordPolicyOptions, policy?.enabled ?? false];\n }\n\n mapPoliciesFromToken(policiesResponse: ListResponse): Policy[] {\n if (policiesResponse == null || policiesResponse.data == null) {\n return null;\n }\n\n const policiesData = policiesResponse.data.map((p) => new PolicyData(p));\n return policiesData.map((p) => new Policy(p));\n }\n\n async policyAppliesToUser(\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean,\n userId?: string\n ) {\n const policies = await this.getAll(policyType, userId);\n const organizations = await this.organizationService.getAll(userId);\n let filteredPolicies;\n\n if (policyFilter != null) {\n filteredPolicies = policies.filter((p) => p.enabled && policyFilter(p));\n } else {\n filteredPolicies = policies.filter((p) => p.enabled);\n }\n\n const policySet = new Set(filteredPolicies.map((p) => p.organizationId));\n\n return organizations.some(\n (o) =>\n o.enabled &&\n o.status >= OrganizationUserStatusType.Accepted &&\n o.usePolicies &&\n !this.isExcemptFromPolicies(o, policyType) &&\n policySet.has(o.id)\n );\n }\n\n private isExcemptFromPolicies(organization: Organization, policyType: PolicyType) {\n if (policyType === PolicyType.MaximumVaultTimeout) {\n return organization.type === OrganizationUserType.Owner;\n }\n\n return organization.isExemptFromPolicies;\n }\n}\n","import { ProviderService as ProviderServiceAbstraction } from \"../abstractions/provider.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { Provider } from \"../models/domain/provider\";\n\nexport class ProviderService implements ProviderServiceAbstraction {\n constructor(private stateService: StateService) {}\n\n async get(id: string): Promise {\n const providers = await this.stateService.getProviders();\n // eslint-disable-next-line\n if (providers == null || !providers.hasOwnProperty(id)) {\n return null;\n }\n\n return new Provider(providers[id]);\n }\n\n async getAll(): Promise {\n const providers = await this.stateService.getProviders();\n const response: Provider[] = [];\n for (const id in providers) {\n // eslint-disable-next-line\n if (providers.hasOwnProperty(id)) {\n response.push(new Provider(providers[id]));\n }\n }\n return response;\n }\n\n async save(providers: { [id: string]: ProviderData }) {\n await this.stateService.setProviders(providers);\n }\n}\n","import * as lunr from \"lunr\";\n\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { SearchService as SearchServiceAbstraction } from \"../abstractions/search.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport class SearchService implements SearchServiceAbstraction {\n indexedEntityId?: string = null;\n private indexing = false;\n private index: lunr.Index = null;\n private searchableMinLength = 2;\n\n constructor(\n private cipherService: CipherService,\n private logService: LogService,\n private i18nService: I18nService\n ) {\n if ([\"zh-CN\", \"zh-TW\"].indexOf(i18nService.locale) !== -1) {\n this.searchableMinLength = 1;\n }\n }\n\n clearIndex(): void {\n this.indexedEntityId = null;\n this.index = null;\n }\n\n isSearchable(query: string): boolean {\n const notSearchable =\n query == null ||\n (this.index == null && query.length < this.searchableMinLength) ||\n (this.index != null && query.length < this.searchableMinLength && query.indexOf(\">\") !== 0);\n return !notSearchable;\n }\n\n async indexCiphers(indexedEntityId?: string, ciphers?: CipherView[]): Promise {\n if (this.indexing) {\n return;\n }\n\n this.logService.time(\"search indexing\");\n this.indexing = true;\n this.indexedEntityId = indexedEntityId;\n this.index = null;\n const builder = new lunr.Builder();\n builder.ref(\"id\");\n builder.field(\"shortid\", { boost: 100, extractor: (c: CipherView) => c.id.substr(0, 8) });\n builder.field(\"name\", { boost: 10 });\n builder.field(\"subtitle\", {\n boost: 5,\n extractor: (c: CipherView) => {\n if (c.subTitle != null && c.type === CipherType.Card) {\n return c.subTitle.replace(/\\*/g, \"\");\n }\n return c.subTitle;\n },\n });\n builder.field(\"notes\");\n builder.field(\"login.username\", {\n extractor: (c: CipherView) =>\n c.type === CipherType.Login && c.login != null ? c.login.username : null,\n });\n builder.field(\"login.uris\", { boost: 2, extractor: (c: CipherView) => this.uriExtractor(c) });\n builder.field(\"fields\", { extractor: (c: CipherView) => this.fieldExtractor(c, false) });\n builder.field(\"fields_joined\", { extractor: (c: CipherView) => this.fieldExtractor(c, true) });\n builder.field(\"attachments\", {\n extractor: (c: CipherView) => this.attachmentExtractor(c, false),\n });\n builder.field(\"attachments_joined\", {\n extractor: (c: CipherView) => this.attachmentExtractor(c, true),\n });\n builder.field(\"organizationid\", { extractor: (c: CipherView) => c.organizationId });\n ciphers = ciphers || (await this.cipherService.getAllDecrypted());\n ciphers.forEach((c) => builder.add(c));\n this.index = builder.build();\n\n this.indexing = false;\n\n this.logService.timeEnd(\"search indexing\");\n }\n\n async searchCiphers(\n query: string,\n filter: ((cipher: CipherView) => boolean) | ((cipher: CipherView) => boolean)[] = null,\n ciphers: CipherView[] = null\n ): Promise {\n const results: CipherView[] = [];\n if (query != null) {\n query = query.trim().toLowerCase();\n }\n if (query === \"\") {\n query = null;\n }\n\n if (ciphers == null) {\n ciphers = await this.cipherService.getAllDecrypted();\n }\n\n if (filter != null && Array.isArray(filter) && filter.length > 0) {\n ciphers = ciphers.filter((c) => filter.every((f) => f == null || f(c)));\n } else if (filter != null) {\n ciphers = ciphers.filter(filter as (cipher: CipherView) => boolean);\n }\n\n if (!this.isSearchable(query)) {\n return ciphers;\n }\n\n if (this.indexing) {\n await new Promise((r) => setTimeout(r, 250));\n if (this.indexing) {\n await new Promise((r) => setTimeout(r, 500));\n }\n }\n\n const index = this.getIndexForSearch();\n if (index == null) {\n // Fall back to basic search if index is not available\n return this.searchCiphersBasic(ciphers, query);\n }\n\n const ciphersMap = new Map();\n ciphers.forEach((c) => ciphersMap.set(c.id, c));\n\n let searchResults: lunr.Index.Result[] = null;\n const isQueryString = query != null && query.length > 1 && query.indexOf(\">\") === 0;\n if (isQueryString) {\n try {\n searchResults = index.search(query.substr(1).trim());\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n const soWild = lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING;\n searchResults = index.query((q) => {\n lunr.tokenizer(query).forEach((token) => {\n const t = token.toString();\n q.term(t, { fields: [\"name\"], wildcard: soWild });\n q.term(t, { fields: [\"subtitle\"], wildcard: soWild });\n q.term(t, { fields: [\"login.uris\"], wildcard: soWild });\n q.term(t, {});\n });\n });\n }\n\n if (searchResults != null) {\n searchResults.forEach((r) => {\n if (ciphersMap.has(r.ref)) {\n results.push(ciphersMap.get(r.ref));\n }\n });\n }\n return results;\n }\n\n searchCiphersBasic(ciphers: CipherView[], query: string, deleted = false) {\n query = query.trim().toLowerCase();\n return ciphers.filter((c) => {\n if (deleted !== c.isDeleted) {\n return false;\n }\n if (c.name != null && c.name.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (query.length >= 8 && c.id.startsWith(query)) {\n return true;\n }\n if (c.subTitle != null && c.subTitle.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (c.login && c.login.uri != null && c.login.uri.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n return false;\n });\n }\n\n searchSends(sends: SendView[], query: string) {\n query = query.trim().toLocaleLowerCase();\n\n return sends.filter((s) => {\n if (s.name != null && s.name.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (\n query.length >= 8 &&\n (s.id.startsWith(query) ||\n s.accessId.toLocaleLowerCase().startsWith(query) ||\n (s.file?.id != null && s.file.id.startsWith(query)))\n ) {\n return true;\n }\n if (s.notes != null && s.notes.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (s.text?.text != null && s.text.text.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (s.file?.fileName != null && s.file.fileName.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n });\n }\n\n getIndexForSearch(): lunr.Index {\n return this.index;\n }\n\n private fieldExtractor(c: CipherView, joined: boolean) {\n if (!c.hasFields) {\n return null;\n }\n let fields: string[] = [];\n c.fields.forEach((f) => {\n if (f.name != null) {\n fields.push(f.name);\n }\n if (f.type === FieldType.Text && f.value != null) {\n fields.push(f.value);\n }\n });\n fields = fields.filter((f) => f.trim() !== \"\");\n if (fields.length === 0) {\n return null;\n }\n return joined ? fields.join(\" \") : fields;\n }\n\n private attachmentExtractor(c: CipherView, joined: boolean) {\n if (!c.hasAttachments) {\n return null;\n }\n let attachments: string[] = [];\n c.attachments.forEach((a) => {\n if (a != null && a.fileName != null) {\n if (joined && a.fileName.indexOf(\".\") > -1) {\n attachments.push(a.fileName.substr(0, a.fileName.lastIndexOf(\".\")));\n } else {\n attachments.push(a.fileName);\n }\n }\n });\n attachments = attachments.filter((f) => f.trim() !== \"\");\n if (attachments.length === 0) {\n return null;\n }\n return joined ? attachments.join(\" \") : attachments;\n }\n\n private uriExtractor(c: CipherView) {\n if (c.type !== CipherType.Login || c.login == null || !c.login.hasUris) {\n return null;\n }\n const uris: string[] = [];\n c.login.uris.forEach((u) => {\n if (u.uri == null || u.uri === \"\") {\n return;\n }\n if (u.hostname != null) {\n uris.push(u.hostname);\n return;\n }\n let uri = u.uri;\n if (u.match !== UriMatchType.RegularExpression) {\n const protocolIndex = uri.indexOf(\"://\");\n if (protocolIndex > -1) {\n uri = uri.substr(protocolIndex + 3);\n }\n const queryIndex = uri.search(/\\?|&|#/);\n if (queryIndex > -1) {\n uri = uri.substring(0, queryIndex);\n }\n }\n uris.push(uri);\n });\n return uris.length > 0 ? uris : null;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { FileUploadService } from \"../abstractions/fileUpload.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { SendService as SendServiceAbstraction } from \"../abstractions/send.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { SEND_KDF_ITERATIONS } from \"../enums/kdfType\";\nimport { SendType } from \"../enums/sendType\";\nimport { Utils } from \"../misc/utils\";\nimport { SendData } from \"../models/data/sendData\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { Send } from \"../models/domain/send\";\nimport { SendFile } from \"../models/domain/sendFile\";\nimport { SendText } from \"../models/domain/sendText\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { SendRequest } from \"../models/request/sendRequest\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\nimport { SendResponse } from \"../models/response/sendResponse\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport class SendService implements SendServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private apiService: ApiService,\n private fileUploadService: FileUploadService,\n private i18nService: I18nService,\n private cryptoFunctionService: CryptoFunctionService,\n private stateService: StateService\n ) {}\n\n async clearCache(): Promise {\n await this.stateService.setDecryptedSends(null);\n }\n\n async encrypt(\n model: SendView,\n file: File | ArrayBuffer,\n password: string,\n key?: SymmetricCryptoKey\n ): Promise<[Send, EncArrayBuffer]> {\n let fileData: EncArrayBuffer = null;\n const send = new Send();\n send.id = model.id;\n send.type = model.type;\n send.disabled = model.disabled;\n send.hideEmail = model.hideEmail;\n send.maxAccessCount = model.maxAccessCount;\n if (model.key == null) {\n model.key = await this.cryptoFunctionService.randomBytes(16);\n model.cryptoKey = await this.cryptoService.makeSendKey(model.key);\n }\n if (password != null) {\n const passwordHash = await this.cryptoFunctionService.pbkdf2(\n password,\n model.key,\n \"sha256\",\n SEND_KDF_ITERATIONS\n );\n send.password = Utils.fromBufferToB64(passwordHash);\n }\n send.key = await this.cryptoService.encrypt(model.key, key);\n send.name = await this.cryptoService.encrypt(model.name, model.cryptoKey);\n send.notes = await this.cryptoService.encrypt(model.notes, model.cryptoKey);\n if (send.type === SendType.Text) {\n send.text = new SendText();\n send.text.text = await this.cryptoService.encrypt(model.text.text, model.cryptoKey);\n send.text.hidden = model.text.hidden;\n } else if (send.type === SendType.File) {\n send.file = new SendFile();\n if (file != null) {\n if (file instanceof ArrayBuffer) {\n const [name, data] = await this.encryptFileData(\n model.file.fileName,\n file,\n model.cryptoKey\n );\n send.file.fileName = name;\n fileData = data;\n } else {\n fileData = await this.parseFile(send, file, model.cryptoKey);\n }\n }\n }\n\n return [send, fileData];\n }\n\n async get(id: string): Promise {\n const sends = await this.stateService.getEncryptedSends();\n // eslint-disable-next-line\n if (sends == null || !sends.hasOwnProperty(id)) {\n return null;\n }\n\n return new Send(sends[id]);\n }\n\n async getAll(): Promise {\n const sends = await this.stateService.getEncryptedSends();\n const response: Send[] = [];\n for (const id in sends) {\n // eslint-disable-next-line\n if (sends.hasOwnProperty(id)) {\n response.push(new Send(sends[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n let decSends = await this.stateService.getDecryptedSends();\n if (decSends != null) {\n return decSends;\n }\n\n decSends = [];\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const promises: Promise[] = [];\n const sends = await this.getAll();\n sends.forEach((send) => {\n promises.push(send.decrypt().then((f) => decSends.push(f)));\n });\n\n await Promise.all(promises);\n decSends.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n\n await this.stateService.setDecryptedSends(decSends);\n return decSends;\n }\n\n async saveWithServer(sendData: [Send, EncArrayBuffer]): Promise {\n const request = new SendRequest(sendData[0], sendData[1]?.buffer.byteLength);\n let response: SendResponse;\n if (sendData[0].id == null) {\n if (sendData[0].type === SendType.Text) {\n response = await this.apiService.postSend(request);\n } else {\n try {\n const uploadDataResponse = await this.apiService.postFileTypeSend(request);\n response = uploadDataResponse.sendResponse;\n\n await this.fileUploadService.uploadSendFile(\n uploadDataResponse,\n sendData[0].file.fileName,\n sendData[1]\n );\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n response = await this.legacyServerSendFileUpload(sendData, request);\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n }\n sendData[0].id = response.id;\n sendData[0].accessId = response.accessId;\n } else {\n response = await this.apiService.putSend(sendData[0].id, request);\n }\n\n const userId = await this.stateService.getUserId();\n const data = new SendData(response, userId);\n await this.upsert(data);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async legacyServerSendFileUpload(\n sendData: [Send, EncArrayBuffer],\n request: SendRequest\n ): Promise {\n const fd = new FormData();\n try {\n const blob = new Blob([sendData[1].buffer], { type: \"application/octet-stream\" });\n fd.append(\"model\", JSON.stringify(request));\n fd.append(\"data\", blob, sendData[0].file.fileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\"model\", JSON.stringify(request));\n fd.append(\n \"data\",\n Buffer.from(sendData[1].buffer) as any,\n {\n filepath: sendData[0].file.fileName.encryptedString,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n return await this.apiService.postSendFileLegacy(fd);\n }\n\n async upsert(send: SendData | SendData[]): Promise {\n let sends = await this.stateService.getEncryptedSends();\n if (sends == null) {\n sends = {};\n }\n\n if (send instanceof SendData) {\n const s = send as SendData;\n sends[s.id] = s;\n } else {\n (send as SendData[]).forEach((s) => {\n sends[s.id] = s;\n });\n }\n\n await this.replace(sends);\n }\n\n async replace(sends: { [id: string]: SendData }): Promise {\n await this.stateService.setDecryptedSends(null);\n await this.stateService.setEncryptedSends(sends);\n }\n\n async clear(): Promise {\n await this.stateService.setDecryptedSends(null);\n await this.stateService.setEncryptedSends(null);\n }\n\n async delete(id: string | string[]): Promise {\n const sends = await this.stateService.getEncryptedSends();\n if (sends == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n if (sends[id] == null) {\n return;\n }\n delete sends[id];\n } else {\n (id as string[]).forEach((i) => {\n delete sends[i];\n });\n }\n\n await this.replace(sends);\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteSend(id);\n await this.delete(id);\n }\n\n async removePasswordWithServer(id: string): Promise {\n const response = await this.apiService.putSendRemovePassword(id);\n const userId = await this.stateService.getUserId();\n const data = new SendData(response, userId);\n await this.upsert(data);\n }\n\n private parseFile(send: Send, file: File, key: SymmetricCryptoKey): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsArrayBuffer(file);\n reader.onload = async (evt) => {\n try {\n const [name, data] = await this.encryptFileData(\n file.name,\n evt.target.result as ArrayBuffer,\n key\n );\n send.file.fileName = name;\n resolve(data);\n } catch (e) {\n reject(e);\n }\n };\n reader.onerror = () => {\n reject(\"Error reading file.\");\n };\n });\n }\n\n private async encryptFileData(\n fileName: string,\n data: ArrayBuffer,\n key: SymmetricCryptoKey\n ): Promise<[EncString, EncArrayBuffer]> {\n const encFileName = await this.cryptoService.encrypt(fileName, key);\n const encFileData = await this.cryptoService.encryptToBytes(data, key);\n return [encFileName, encFileData];\n }\n}\n","import { SettingsService as SettingsServiceAbstraction } from \"../abstractions/settings.service\";\nimport { StateService } from \"../abstractions/state.service\";\n\nconst Keys = {\n settingsPrefix: \"settings_\",\n equivalentDomains: \"equivalentDomains\",\n};\n\nexport class SettingsService implements SettingsServiceAbstraction {\n constructor(private stateService: StateService) {}\n\n async clearCache(): Promise {\n await this.stateService.setSettings(null);\n }\n\n getEquivalentDomains(): Promise {\n return this.getSettingsKey(Keys.equivalentDomains);\n }\n\n async setEquivalentDomains(equivalentDomains: string[][]): Promise {\n await this.setSettingsKey(Keys.equivalentDomains, equivalentDomains);\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setSettings(null, { userId: userId });\n }\n\n // Helpers\n\n private async getSettings(): Promise {\n const settings = await this.stateService.getSettings();\n if (settings == null) {\n // eslint-disable-next-line\n const userId = await this.stateService.getUserId();\n }\n return settings;\n }\n\n private async getSettingsKey(key: string): Promise {\n const settings = await this.getSettings();\n if (settings != null && settings[key]) {\n return settings[key];\n }\n return null;\n }\n\n private async setSettingsKey(key: string, value: any): Promise {\n let settings = await this.getSettings();\n if (!settings) {\n settings = {};\n }\n\n settings[key] = value;\n await this.stateService.setSettings(settings);\n }\n}\n","import { BehaviorSubject } from \"rxjs\";\n\nimport { LogService } from \"../abstractions/log.service\";\nimport { StateService as StateServiceAbstraction } from \"../abstractions/state.service\";\nimport { StateMigrationService } from \"../abstractions/stateMigration.service\";\nimport { StorageService } from \"../abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"../enums/htmlStorageLocation\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { StorageLocation } from \"../enums/storageLocation\";\nimport { ThemeType } from \"../enums/themeType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { StateFactory } from \"../factories/stateFactory\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { EventData } from \"../models/data/eventData\";\nimport { FolderData } from \"../models/data/folderData\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { SendData } from \"../models/data/sendData\";\nimport { Account, AccountData } from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/encString\";\nimport { EnvironmentUrls } from \"../models/domain/environmentUrls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { GlobalState } from \"../models/domain/globalState\";\nimport { Policy } from \"../models/domain/policy\";\nimport { State } from \"../models/domain/state\";\nimport { StorageOptions } from \"../models/domain/storageOptions\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { WindowState } from \"../models/domain/windowState\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { CollectionView } from \"../models/view/collectionView\";\nimport { FolderView } from \"../models/view/folderView\";\nimport { SendView } from \"../models/view/sendView\";\n\nconst keys = {\n global: \"global\",\n authenticatedAccounts: \"authenticatedAccounts\",\n activeUserId: \"activeUserId\",\n tempAccountSettings: \"tempAccountSettings\", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication\n accountActivity: \"accountActivity\",\n};\n\nconst partialKeys = {\n autoKey: \"_masterkey_auto\",\n biometricKey: \"_masterkey_biometric\",\n masterKey: \"_masterkey\",\n};\n\nexport class StateService<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> implements StateServiceAbstraction\n{\n accounts = new BehaviorSubject<{ [userId: string]: TAccount }>({});\n activeAccount = new BehaviorSubject(null);\n\n protected state: State = new State(\n this.createGlobals()\n );\n\n private hasBeenInited = false;\n\n private accountDiskCache: Map;\n\n constructor(\n protected storageService: StorageService,\n protected secureStorageService: StorageService,\n protected logService: LogService,\n protected stateMigrationService: StateMigrationService,\n protected stateFactory: StateFactory,\n protected useAccountCache: boolean = true\n ) {\n this.accountDiskCache = new Map();\n }\n\n async init(): Promise {\n if (this.hasBeenInited) {\n return;\n }\n\n if (await this.stateMigrationService.needsMigration()) {\n await this.stateMigrationService.migrate();\n }\n\n await this.initAccountState();\n this.hasBeenInited = true;\n }\n\n async initAccountState() {\n this.state.authenticatedAccounts =\n (await this.storageService.get(keys.authenticatedAccounts)) ?? [];\n for (const i in this.state.authenticatedAccounts) {\n if (i != null) {\n await this.syncAccountFromDisk(this.state.authenticatedAccounts[i]);\n }\n }\n const storedActiveUser = await this.storageService.get(keys.activeUserId);\n if (storedActiveUser != null) {\n this.state.activeUserId = storedActiveUser;\n }\n await this.pushAccounts();\n this.activeAccount.next(this.state.activeUserId);\n }\n\n async syncAccountFromDisk(userId: string) {\n if (userId == null) {\n return;\n }\n this.state.accounts[userId] = this.createAccount();\n const diskAccount = await this.getAccountFromDisk({ userId: userId });\n this.state.accounts[userId].profile = diskAccount.profile;\n }\n\n async addAccount(account: TAccount) {\n account = await this.setAccountEnvironmentUrls(account);\n this.state.authenticatedAccounts.push(account.profile.userId);\n await this.storageService.save(keys.authenticatedAccounts, this.state.authenticatedAccounts);\n this.state.accounts[account.profile.userId] = account;\n await this.scaffoldNewAccountStorage(account);\n await this.setLastActive(new Date().getTime(), { userId: account.profile.userId });\n await this.setActiveUser(account.profile.userId);\n this.activeAccount.next(account.profile.userId);\n }\n\n async setActiveUser(userId: string): Promise {\n this.clearDecryptedDataForActiveUser();\n this.state.activeUserId = userId;\n await this.storageService.save(keys.activeUserId, userId);\n this.activeAccount.next(this.state.activeUserId);\n await this.pushAccounts();\n }\n\n async clean(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n await this.deAuthenticateAccount(options.userId);\n if (options.userId === this.state.activeUserId) {\n await this.dynamicallySetActiveUser();\n }\n\n await this.removeAccountFromDisk(options?.userId);\n this.removeAccountFromMemory(options?.userId);\n await this.pushAccounts();\n }\n\n async getAccessToken(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.tokens?.accessToken;\n }\n\n async setAccessToken(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.tokens.accessToken = value;\n await this.saveAccount(account, options);\n }\n\n async getAddEditCipherInfo(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.addEditCipherInfo;\n }\n\n async setAddEditCipherInfo(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.addEditCipherInfo = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getAlwaysShowDock(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.alwaysShowDock ?? false\n );\n }\n\n async setAlwaysShowDock(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.alwaysShowDock = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getApiKeyClientId(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.profile?.apiKeyClientId;\n }\n\n async setApiKeyClientId(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.profile.apiKeyClientId = value;\n await this.saveAccount(account, options);\n }\n\n async getApiKeyClientSecret(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.keys?.apiKeyClientSecret;\n }\n\n async setApiKeyClientSecret(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.keys.apiKeyClientSecret = value;\n await this.saveAccount(account, options);\n }\n\n async getAutoConfirmFingerPrints(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.autoConfirmFingerPrints ?? false\n );\n }\n\n async setAutoConfirmFingerprints(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.autoConfirmFingerPrints = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getAutoFillOnPageLoadDefault(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.autoFillOnPageLoadDefault ?? true\n );\n }\n\n async setAutoFillOnPageLoadDefault(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.autoFillOnPageLoadDefault = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getBiometricAwaitingAcceptance(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.biometricAwaitingAcceptance ?? false\n );\n }\n\n async setBiometricAwaitingAcceptance(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.biometricAwaitingAcceptance = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getBiometricFingerprintValidated(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.biometricFingerprintValidated ?? false\n );\n }\n\n async setBiometricFingerprintValidated(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.biometricFingerprintValidated = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getBiometricLocked(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))?.settings\n ?.biometricLocked ?? false\n );\n }\n\n async setBiometricLocked(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.settings.biometricLocked = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getBiometricText(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.biometricText;\n }\n\n async setBiometricText(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.biometricText = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getBiometricUnlock(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.biometricUnlock ?? false\n );\n }\n\n async setBiometricUnlock(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.biometricUnlock = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getCanAccessPremium(options?: StorageOptions): Promise {\n if (!(await this.getIsAuthenticated(options))) {\n return false;\n }\n\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n if (account.profile.hasPremiumPersonally) {\n return true;\n }\n\n const organizations = await this.getOrganizations(options);\n if (organizations == null) {\n return false;\n }\n\n for (const id of Object.keys(organizations)) {\n const o = organizations[id];\n if (o.enabled && o.usersGetPremium && !o.isProviderUser) {\n return true;\n }\n }\n\n return false;\n }\n\n async getClearClipboard(options?: StorageOptions): Promise {\n return (\n (\n await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n )\n )?.settings?.clearClipboard ?? null\n );\n }\n\n async setClearClipboard(value: number, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.clearClipboard = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getCollapsedGroupings(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.collapsedGroupings;\n }\n\n async setCollapsedGroupings(value: string[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.collapsedGroupings = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getConvertAccountToKeyConnector(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.convertAccountToKeyConnector;\n }\n\n async setConvertAccountToKeyConnector(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.convertAccountToKeyConnector = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getCryptoMasterKey(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.keys?.cryptoMasterKey;\n }\n\n async setCryptoMasterKey(value: SymmetricCryptoKey, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.keys.cryptoMasterKey = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getCryptoMasterKeyAuto(options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"auto\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return null;\n }\n return await this.secureStorageService.get(`${options.userId}${partialKeys.autoKey}`, options);\n }\n\n async setCryptoMasterKeyAuto(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"auto\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return;\n }\n await this.saveSecureStorageKey(partialKeys.autoKey, value, options);\n }\n\n async getCryptoMasterKeyB64(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultSecureStorageOptions());\n if (options?.userId == null) {\n return null;\n }\n return await this.secureStorageService.get(\n `${options?.userId}${partialKeys.masterKey}`,\n options\n );\n }\n\n async setCryptoMasterKeyB64(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultSecureStorageOptions());\n if (options?.userId == null) {\n return;\n }\n await this.saveSecureStorageKey(partialKeys.masterKey, value, options);\n }\n\n async getCryptoMasterKeyBiometric(options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"biometric\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return null;\n }\n return await this.secureStorageService.get(\n `${options.userId}${partialKeys.biometricKey}`,\n options\n );\n }\n\n async hasCryptoMasterKeyBiometric(options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"biometric\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return false;\n }\n return await this.secureStorageService.has(\n `${options.userId}${partialKeys.biometricKey}`,\n options\n );\n }\n\n async setCryptoMasterKeyBiometric(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"biometric\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return;\n }\n await this.saveSecureStorageKey(partialKeys.biometricKey, value, options);\n }\n\n async getDecodedToken(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.tokens?.decodedToken;\n }\n\n async setDecodedToken(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.tokens.decodedToken = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedCiphers(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.ciphers?.decrypted;\n }\n\n async setDecryptedCiphers(value: CipherView[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.ciphers.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedCollections(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.collections?.decrypted;\n }\n\n async setDecryptedCollections(value: CollectionView[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.collections.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedCryptoSymmetricKey(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.keys?.cryptoSymmetricKey?.decrypted;\n }\n\n async setDecryptedCryptoSymmetricKey(\n value: SymmetricCryptoKey,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.keys.cryptoSymmetricKey.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedFolders(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.folders?.decrypted;\n }\n\n async setDecryptedFolders(value: FolderView[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.folders.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedOrganizationKeys(\n options?: StorageOptions\n ): Promise> {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.keys?.organizationKeys?.decrypted;\n }\n\n async setDecryptedOrganizationKeys(\n value: Map,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.keys.organizationKeys.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedPasswordGenerationHistory(\n options?: StorageOptions\n ): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.passwordGenerationHistory?.decrypted;\n }\n\n async setDecryptedPasswordGenerationHistory(\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.passwordGenerationHistory.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedPinProtected(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.settings?.pinProtected?.decrypted;\n }\n\n async setDecryptedPinProtected(value: EncString, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.settings.pinProtected.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedPolicies(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.policies?.decrypted;\n }\n\n async setDecryptedPolicies(value: Policy[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.policies.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedPrivateKey(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.keys?.privateKey?.decrypted;\n }\n\n async setDecryptedPrivateKey(value: ArrayBuffer, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.keys.privateKey.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedProviderKeys(\n options?: StorageOptions\n ): Promise> {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.keys?.providerKeys?.decrypted;\n }\n\n async setDecryptedProviderKeys(\n value: Map,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.keys.providerKeys.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedSends(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.sends?.decrypted;\n }\n\n async setDecryptedSends(value: SendView[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.sends.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDefaultUriMatch(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.defaultUriMatch;\n }\n\n async setDefaultUriMatch(value: UriMatchType, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.defaultUriMatch = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableAddLoginNotification(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableAddLoginNotification ?? false\n );\n }\n\n async setDisableAddLoginNotification(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableAddLoginNotification = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableAutoBiometricsPrompt(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableAutoBiometricsPrompt ?? false\n );\n }\n\n async setDisableAutoBiometricsPrompt(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableAutoBiometricsPrompt = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableAutoTotpCopy(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableAutoTotpCopy ?? false\n );\n }\n\n async setDisableAutoTotpCopy(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableAutoTotpCopy = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableBadgeCounter(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableBadgeCounter ?? false\n );\n }\n\n async setDisableBadgeCounter(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableBadgeCounter = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableChangedPasswordNotification(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableChangedPasswordNotification ?? false\n );\n }\n\n async setDisableChangedPasswordNotification(\n value: boolean,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableChangedPasswordNotification = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableContextMenuItem(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableContextMenuItem ?? false\n );\n }\n\n async setDisableContextMenuItem(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableContextMenuItem = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableFavicon(options?: StorageOptions): Promise {\n return (\n (\n await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n )\n )?.disableFavicon ?? false\n );\n }\n\n async setDisableFavicon(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.disableFavicon = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getDisableGa(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableGa ?? false\n );\n }\n\n async setDisableGa(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableGa = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDontShowCardsCurrentTab(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.dontShowCardsCurrentTab ?? false\n );\n }\n\n async setDontShowCardsCurrentTab(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.dontShowCardsCurrentTab = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDontShowIdentitiesCurrentTab(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.dontShowIdentitiesCurrentTab ?? false\n );\n }\n\n async setDontShowIdentitiesCurrentTab(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.dontShowIdentitiesCurrentTab = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEmail(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.profile?.email;\n }\n\n async setEmail(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.profile.email = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getEmailVerified(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.profile.emailVerified ?? false\n );\n }\n\n async setEmailVerified(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.emailVerified = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableAlwaysOnTop(options?: StorageOptions): Promise {\n const accountPreference = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.enableAlwaysOnTop;\n const globalPreference = (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.enableAlwaysOnTop;\n return accountPreference ?? globalPreference ?? false;\n }\n\n async setEnableAlwaysOnTop(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.enableAlwaysOnTop = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableAlwaysOnTop = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableAutoFillOnPageLoad(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.enableAutoFillOnPageLoad ?? false\n );\n }\n\n async setEnableAutoFillOnPageLoad(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.enableAutoFillOnPageLoad = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableBiometric(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableBiometrics ?? false\n );\n }\n\n async setEnableBiometric(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableBiometrics = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableBrowserIntegration(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableBrowserIntegration ?? false\n );\n }\n\n async setEnableBrowserIntegration(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableBrowserIntegration = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableBrowserIntegrationFingerprint(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableBrowserIntegrationFingerprint ?? false\n );\n }\n\n async setEnableBrowserIntegrationFingerprint(\n value: boolean,\n options?: StorageOptions\n ): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableBrowserIntegrationFingerprint = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableCloseToTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableCloseToTray ?? false\n );\n }\n\n async setEnableCloseToTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableCloseToTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableFullWidth(options?: StorageOptions): Promise {\n return (\n (\n await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n )\n )?.settings?.enableFullWidth ?? false\n );\n }\n\n async setEnableFullWidth(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.enableFullWidth = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEnableGravitars(options?: StorageOptions): Promise {\n return (\n (\n await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n )\n )?.settings?.enableGravitars ?? false\n );\n }\n\n async setEnableGravitars(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.enableGravitars = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEnableMinimizeToTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableMinimizeToTray ?? false\n );\n }\n\n async setEnableMinimizeToTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableMinimizeToTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableStartToTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableStartToTray ?? false\n );\n }\n\n async setEnableStartToTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableStartToTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableTray ?? false\n );\n }\n\n async setEnableTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedCiphers(options?: StorageOptions): Promise<{ [id: string]: CipherData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.ciphers?.encrypted;\n }\n\n async setEncryptedCiphers(\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.ciphers.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getEncryptedCollections(\n options?: StorageOptions\n ): Promise<{ [id: string]: CollectionData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.collections?.encrypted;\n }\n\n async setEncryptedCollections(\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.collections.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getEncryptedCryptoSymmetricKey(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys.cryptoSymmetricKey.encrypted;\n }\n\n async setEncryptedCryptoSymmetricKey(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.cryptoSymmetricKey.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedFolders(options?: StorageOptions): Promise<{ [id: string]: FolderData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.folders?.encrypted;\n }\n\n async setEncryptedFolders(\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.folders.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getEncryptedOrganizationKeys(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys?.organizationKeys.encrypted;\n }\n\n async setEncryptedOrganizationKeys(\n value: Map,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.organizationKeys.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedPasswordGenerationHistory(\n options?: StorageOptions\n ): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.passwordGenerationHistory?.encrypted;\n }\n\n async setEncryptedPasswordGenerationHistory(\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.passwordGenerationHistory.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedPinProtected(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.pinProtected?.encrypted;\n }\n\n async setEncryptedPinProtected(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.pinProtected.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedPolicies(options?: StorageOptions): Promise<{ [id: string]: PolicyData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.policies?.encrypted;\n }\n\n async setEncryptedPolicies(\n value: { [id: string]: PolicyData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.policies.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedPrivateKey(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys?.privateKey?.encrypted;\n }\n\n async setEncryptedPrivateKey(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.privateKey.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedProviderKeys(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys?.providerKeys?.encrypted;\n }\n\n async setEncryptedProviderKeys(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.providerKeys.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedSends(options?: StorageOptions): Promise<{ [id: string]: SendData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.sends.encrypted;\n }\n\n async setEncryptedSends(\n value: { [id: string]: SendData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.sends.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getEntityId(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.profile?.entityId;\n }\n\n async setEntityId(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.profile.entityId = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEntityType(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.profile?.entityType;\n }\n\n async setEntityType(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.profile.entityType = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEnvironmentUrls(options?: StorageOptions): Promise {\n if (this.state.activeUserId == null) {\n return await this.getGlobalEnvironmentUrls(options);\n }\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n return (await this.getAccount(options))?.settings?.environmentUrls ?? new EnvironmentUrls();\n }\n\n async setEnvironmentUrls(value: EnvironmentUrls, options?: StorageOptions): Promise {\n // Global values are set on each change and the current global settings are passed to any newly authed accounts.\n // This is to allow setting environement values before an account is active, while still allowing individual accounts to have their own environments.\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.environmentUrls = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEquivalentDomains(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.equivalentDomains;\n }\n\n async setEquivalentDomains(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.equivalentDomains = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEventCollection(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.eventCollection;\n }\n\n async setEventCollection(value: EventData[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.eventCollection = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEverBeenUnlocked(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))?.profile\n ?.everBeenUnlocked ?? false\n );\n }\n\n async setEverBeenUnlocked(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.profile.everBeenUnlocked = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getForcePasswordReset(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))?.profile\n ?.forcePasswordReset ?? false\n );\n }\n\n async setForcePasswordReset(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.profile.forcePasswordReset = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getInstalledVersion(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.installedVersion;\n }\n\n async setInstalledVersion(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.installedVersion = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getIsAuthenticated(options?: StorageOptions): Promise {\n return (await this.getAccessToken(options)) != null && (await this.getUserId(options)) != null;\n }\n\n async getKdfIterations(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.kdfIterations;\n }\n\n async setKdfIterations(value: number, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.kdfIterations = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getKdfType(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.kdfType;\n }\n\n async setKdfType(value: KdfType, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.kdfType = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getKeyHash(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.keyHash;\n }\n\n async setKeyHash(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.keyHash = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getLastActive(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n\n const accountActivity = await this.storageService.get<{ [userId: string]: number }>(\n keys.accountActivity,\n options\n );\n\n if (accountActivity == null || Object.keys(accountActivity).length < 1) {\n return null;\n }\n\n return accountActivity[options.userId];\n }\n\n async setLastActive(value: number, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n if (options.userId == null) {\n return;\n }\n const accountActivity =\n (await this.storageService.get<{ [userId: string]: number }>(\n keys.accountActivity,\n options\n )) ?? {};\n accountActivity[options.userId] = value;\n await this.storageService.save(keys.accountActivity, accountActivity, options);\n }\n\n async getLastSync(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.profile?.lastSync;\n }\n\n async setLastSync(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.profile.lastSync = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getLegacyEtmKey(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys?.legacyEtmKey;\n }\n\n async setLegacyEtmKey(value: SymmetricCryptoKey, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.legacyEtmKey = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getLocalData(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.data?.localData;\n }\n async setLocalData(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.data.localData = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getLocale(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.locale;\n }\n\n async setLocale(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.locale = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getLoginRedirect(options?: StorageOptions): Promise {\n return (await this.getGlobals(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.loginRedirect;\n }\n\n async setLoginRedirect(value: any, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n globals.loginRedirect = value;\n await this.saveGlobals(globals, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getMainWindowSize(options?: StorageOptions): Promise {\n return (await this.getGlobals(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.mainWindowSize;\n }\n\n async setMainWindowSize(value: number, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n globals.mainWindowSize = value;\n await this.saveGlobals(globals, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getMinimizeOnCopyToClipboard(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.minimizeOnCopyToClipboard ?? false\n );\n }\n\n async setMinimizeOnCopyToClipboard(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.minimizeOnCopyToClipboard = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getNeverDomains(options?: StorageOptions): Promise<{ [id: string]: any }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.neverDomains;\n }\n\n async setNeverDomains(value: { [id: string]: any }, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.neverDomains = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getNoAutoPromptBiometrics(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.noAutoPromptBiometrics ?? false\n );\n }\n\n async setNoAutoPromptBiometrics(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.noAutoPromptBiometrics = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getNoAutoPromptBiometricsText(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.noAutoPromptBiometricsText;\n }\n\n async setNoAutoPromptBiometricsText(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.noAutoPromptBiometricsText = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getOpenAtLogin(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.openAtLogin ?? false\n );\n }\n\n async setOpenAtLogin(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.openAtLogin = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getOrganizationInvitation(options?: StorageOptions): Promise {\n return (await this.getGlobals(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.organizationInvitation;\n }\n\n async setOrganizationInvitation(value: any, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n globals.organizationInvitation = value;\n await this.saveGlobals(globals, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getOrganizations(options?: StorageOptions): Promise<{ [id: string]: OrganizationData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.organizations;\n }\n\n async setOrganizations(\n value: { [id: string]: OrganizationData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.organizations = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getPasswordGenerationOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.passwordGenerationOptions;\n }\n\n async setPasswordGenerationOptions(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.passwordGenerationOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getUsernameGenerationOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.usernameGenerationOptions;\n }\n\n async setUsernameGenerationOptions(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.usernameGenerationOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getGeneratorOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.generatorOptions;\n }\n\n async setGeneratorOptions(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.generatorOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getProtectedPin(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.protectedPin;\n }\n\n async setProtectedPin(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.protectedPin = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getProviders(options?: StorageOptions): Promise<{ [id: string]: ProviderData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.providers;\n }\n\n async setProviders(\n value: { [id: string]: ProviderData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.providers = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getPublicKey(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.keys?.publicKey;\n }\n\n async setPublicKey(value: ArrayBuffer, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.keys.publicKey = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getRefreshToken(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.tokens?.refreshToken;\n }\n\n async setRefreshToken(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.tokens.refreshToken = value;\n await this.saveAccount(account, options);\n }\n\n async getRememberedEmail(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.rememberedEmail;\n }\n\n async setRememberedEmail(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.rememberedEmail = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getSecurityStamp(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.tokens?.securityStamp;\n }\n\n async setSecurityStamp(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.tokens.securityStamp = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getSettings(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.settings?.settings;\n }\n\n async setSettings(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.settings.settings = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getSsoCodeVerifier(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.ssoCodeVerifier;\n }\n\n async setSsoCodeVerifier(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.ssoCodeVerifier = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getSsoOrgIdentifier(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.ssoOrganizationIdentifier;\n }\n\n async setSsoOrganizationIdentifier(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.ssoOrganizationIdentifier = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getSsoState(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.ssoState;\n }\n\n async setSsoState(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.ssoState = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getTheme(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.theme;\n }\n\n async setTheme(value: ThemeType, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.theme = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getTwoFactorToken(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.twoFactorToken;\n }\n\n async setTwoFactorToken(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.twoFactorToken = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getUserId(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.userId;\n }\n\n async getUsesKeyConnector(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.usesKeyConnector;\n }\n\n async setUsesKeyConnector(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.usesKeyConnector = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getVaultTimeout(options?: StorageOptions): Promise {\n const accountVaultTimeout = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.vaultTimeout;\n return accountVaultTimeout;\n }\n\n async setVaultTimeout(value: number, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.vaultTimeout = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getVaultTimeoutAction(options?: StorageOptions): Promise {\n const accountVaultTimeoutAction = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.vaultTimeoutAction;\n const globalVaultTimeoutAction = (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.vaultTimeoutAction;\n return accountVaultTimeoutAction ?? globalVaultTimeoutAction;\n }\n\n async setVaultTimeoutAction(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.vaultTimeoutAction = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getStateVersion(): Promise {\n return (await this.getGlobals(await this.defaultOnDiskLocalOptions())).stateVersion ?? 1;\n }\n\n async setStateVersion(value: number): Promise {\n const globals = await this.getGlobals(await this.defaultOnDiskOptions());\n globals.stateVersion = value;\n await this.saveGlobals(globals, await this.defaultOnDiskOptions());\n }\n\n async getWindow(): Promise {\n const globals = await this.getGlobals(await this.defaultOnDiskOptions());\n return globals?.window != null && Object.keys(globals.window).length > 0\n ? globals.window\n : new WindowState();\n }\n\n async setWindow(value: WindowState, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.window = value;\n return await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n protected async getGlobals(options: StorageOptions): Promise {\n let globals: TGlobalState;\n if (this.useMemory(options.storageLocation)) {\n globals = this.getGlobalsFromMemory();\n }\n\n if (this.useDisk && globals == null) {\n globals = await this.getGlobalsFromDisk(options);\n }\n\n return globals ?? this.createGlobals();\n }\n\n protected async saveGlobals(globals: TGlobalState, options: StorageOptions) {\n return this.useMemory(options.storageLocation)\n ? this.saveGlobalsToMemory(globals)\n : await this.saveGlobalsToDisk(globals, options);\n }\n\n protected getGlobalsFromMemory(): TGlobalState {\n return this.state.globals;\n }\n\n protected async getGlobalsFromDisk(options: StorageOptions): Promise {\n return await this.storageService.get(keys.global, options);\n }\n\n protected saveGlobalsToMemory(globals: TGlobalState): void {\n this.state.globals = globals;\n }\n\n protected async saveGlobalsToDisk(globals: TGlobalState, options: StorageOptions): Promise {\n if (options.useSecureStorage) {\n await this.secureStorageService.save(keys.global, globals, options);\n } else {\n await this.storageService.save(keys.global, globals, options);\n }\n }\n\n protected async getAccount(options: StorageOptions): Promise {\n try {\n let account: TAccount;\n if (this.useMemory(options.storageLocation)) {\n account = this.getAccountFromMemory(options);\n }\n\n if (this.useDisk(options.storageLocation) && account == null) {\n account = await this.getAccountFromDisk(options);\n }\n\n return account;\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected getAccountFromMemory(options: StorageOptions): TAccount {\n if (this.state.accounts == null) {\n return null;\n }\n return this.state.accounts[this.getUserIdFromMemory(options)];\n }\n\n protected getUserIdFromMemory(options: StorageOptions): string {\n return options?.userId != null\n ? this.state.accounts[options.userId]?.profile?.userId\n : this.state.activeUserId;\n }\n\n protected async getAccountFromDisk(options: StorageOptions): Promise {\n if (options?.userId == null && this.state.activeUserId == null) {\n return null;\n }\n\n if (this.useAccountCache) {\n const cachedAccount = this.accountDiskCache.get(options.userId);\n if (cachedAccount != null) {\n return cachedAccount;\n }\n }\n\n const account = options?.useSecureStorage\n ? (await this.secureStorageService.get(options.userId, options)) ??\n (await this.storageService.get(\n options.userId,\n this.reconcileOptions(options, { htmlStorageLocation: HtmlStorageLocation.Local })\n ))\n : await this.storageService.get(options.userId, options);\n\n if (this.useAccountCache) {\n this.accountDiskCache.set(options.userId, account);\n }\n return account;\n }\n\n protected useMemory(storageLocation: StorageLocation) {\n return storageLocation === StorageLocation.Memory || storageLocation === StorageLocation.Both;\n }\n\n protected useDisk(storageLocation: StorageLocation) {\n return storageLocation === StorageLocation.Disk || storageLocation === StorageLocation.Both;\n }\n\n protected async saveAccount(\n account: TAccount,\n options: StorageOptions = {\n storageLocation: StorageLocation.Both,\n useSecureStorage: false,\n }\n ) {\n return this.useMemory(options.storageLocation)\n ? await this.saveAccountToMemory(account)\n : await this.saveAccountToDisk(account, options);\n }\n\n protected async saveAccountToDisk(account: TAccount, options: StorageOptions): Promise {\n const storageLocation = options.useSecureStorage\n ? this.secureStorageService\n : this.storageService;\n\n await storageLocation.save(`${options.userId}`, account, options);\n\n if (this.useAccountCache) {\n this.accountDiskCache.delete(options.userId);\n }\n }\n\n protected async saveAccountToMemory(account: TAccount): Promise {\n if (this.getAccountFromMemory({ userId: account.profile.userId }) !== null) {\n this.state.accounts[account.profile.userId] = account;\n }\n await this.pushAccounts();\n }\n\n protected async scaffoldNewAccountStorage(account: TAccount): Promise {\n // We don't want to manipulate the referenced in memory account\n const deepClone = JSON.parse(JSON.stringify(account));\n await this.scaffoldNewAccountLocalStorage(deepClone);\n await this.scaffoldNewAccountSessionStorage(deepClone);\n await this.scaffoldNewAccountMemoryStorage(deepClone);\n }\n\n // TODO: There is a tech debt item for splitting up these methods - only Web uses multiple storage locations in its storageService.\n // For now these methods exist with some redundancy to facilitate this special web requirement.\n protected async scaffoldNewAccountLocalStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskLocalOptions()\n )\n );\n // EnvironmentUrls are set before authenticating and should override whatever is stored from any previous session\n const environmentUrls = account.settings.environmentUrls;\n if (storedAccount?.settings != null) {\n account.settings = storedAccount.settings;\n } else if (await this.storageService.has(keys.tempAccountSettings)) {\n account.settings = await this.storageService.get(keys.tempAccountSettings);\n await this.storageService.remove(keys.tempAccountSettings);\n }\n account.settings.environmentUrls = environmentUrls;\n if (account.settings.vaultTimeoutAction === \"logOut\" && account.settings.vaultTimeout != null) {\n account.tokens.accessToken = null;\n account.tokens.refreshToken = null;\n account.profile.apiKeyClientId = null;\n account.keys.apiKeyClientSecret = null;\n }\n await this.saveAccount(\n account,\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskLocalOptions()\n )\n );\n }\n\n protected async scaffoldNewAccountMemoryStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskMemoryOptions()\n )\n );\n if (storedAccount?.settings != null) {\n storedAccount.settings.environmentUrls = account.settings.environmentUrls;\n account.settings = storedAccount.settings;\n }\n await this.storageService.save(\n account.profile.userId,\n account,\n await this.defaultOnDiskMemoryOptions()\n );\n await this.saveAccount(\n account,\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskMemoryOptions()\n )\n );\n }\n\n protected async scaffoldNewAccountSessionStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: account.profile.userId }, await this.defaultOnDiskOptions())\n );\n if (storedAccount?.settings != null) {\n storedAccount.settings.environmentUrls = account.settings.environmentUrls;\n account.settings = storedAccount.settings;\n }\n await this.storageService.save(\n account.profile.userId,\n account,\n await this.defaultOnDiskMemoryOptions()\n );\n await this.saveAccount(\n account,\n this.reconcileOptions({ userId: account.profile.userId }, await this.defaultOnDiskOptions())\n );\n }\n //\n\n protected async pushAccounts(): Promise {\n await this.pruneInMemoryAccounts();\n if (this.state?.accounts == null || Object.keys(this.state.accounts).length < 1) {\n this.accounts.next(null);\n return;\n }\n\n this.accounts.next(this.state.accounts);\n }\n\n protected reconcileOptions(\n requestedOptions: StorageOptions,\n defaultOptions: StorageOptions\n ): StorageOptions {\n if (requestedOptions == null) {\n return defaultOptions;\n }\n requestedOptions.userId = requestedOptions?.userId ?? defaultOptions.userId;\n requestedOptions.storageLocation =\n requestedOptions?.storageLocation ?? defaultOptions.storageLocation;\n requestedOptions.useSecureStorage =\n requestedOptions?.useSecureStorage ?? defaultOptions.useSecureStorage;\n requestedOptions.htmlStorageLocation =\n requestedOptions?.htmlStorageLocation ?? defaultOptions.htmlStorageLocation;\n requestedOptions.keySuffix = requestedOptions?.keySuffix ?? defaultOptions.keySuffix;\n return requestedOptions;\n }\n\n protected get defaultInMemoryOptions(): StorageOptions {\n return { storageLocation: StorageLocation.Memory, userId: this.state.activeUserId };\n }\n\n protected async defaultOnDiskOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Session,\n userId: this.state.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultOnDiskLocalOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Local,\n userId: this.state.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultOnDiskMemoryOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Memory,\n userId: this.state.activeUserId ?? (await this.getUserId()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultSecureStorageOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n useSecureStorage: true,\n userId: this.state.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n };\n }\n\n protected async getActiveUserIdFromStorage(): Promise {\n return await this.storageService.get(keys.activeUserId);\n }\n\n protected async removeAccountFromLocalStorage(\n userId: string = this.state.activeUserId\n ): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskLocalOptions())\n );\n await this.saveAccount(\n this.resetAccount(storedAccount),\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskLocalOptions())\n );\n }\n\n protected async removeAccountFromSessionStorage(\n userId: string = this.state.activeUserId\n ): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskOptions())\n );\n await this.saveAccount(\n this.resetAccount(storedAccount),\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskOptions())\n );\n }\n\n protected async removeAccountFromSecureStorage(\n userId: string = this.state.activeUserId\n ): Promise {\n await this.setCryptoMasterKeyAuto(null, { userId: userId });\n await this.setCryptoMasterKeyBiometric(null, { userId: userId });\n await this.setCryptoMasterKeyB64(null, { userId: userId });\n }\n\n protected removeAccountFromMemory(userId: string = this.state.activeUserId): void {\n delete this.state.accounts[userId];\n if (this.useAccountCache) {\n this.accountDiskCache.delete(userId);\n }\n }\n\n protected async pruneInMemoryAccounts() {\n // We preserve settings for logged out accounts, but we don't want to consider them when thinking about active account state\n for (const userId in this.state.accounts) {\n if (!(await this.getIsAuthenticated({ userId: userId }))) {\n this.removeAccountFromMemory(userId);\n }\n }\n }\n\n // settings persist even on reset, and are not effected by this method\n protected resetAccount(account: TAccount) {\n const persistentAccountInformation = { settings: account.settings };\n return Object.assign(this.createAccount(), persistentAccountInformation);\n }\n\n protected async setAccountEnvironmentUrls(account: TAccount): Promise {\n account.settings.environmentUrls = await this.getGlobalEnvironmentUrls();\n return account;\n }\n\n protected async getGlobalEnvironmentUrls(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n return (await this.getGlobals(options)).environmentUrls ?? new EnvironmentUrls();\n }\n\n protected clearDecryptedDataForActiveUser() {\n const userId = this.state.activeUserId;\n if (userId == null || this.state?.accounts[userId]?.data == null) {\n return;\n }\n this.state.accounts[userId].data = new AccountData();\n }\n\n protected createAccount(init: Partial = null): TAccount {\n return this.stateFactory.createAccount(init);\n }\n\n protected createGlobals(init: Partial = null): TGlobalState {\n return this.stateFactory.createGlobal(init);\n }\n\n protected async deAuthenticateAccount(userId: string) {\n await this.setAccessToken(null, { userId: userId });\n await this.setLastActive(null, { userId: userId });\n this.state.authenticatedAccounts = this.state.authenticatedAccounts.filter(\n (activeUserId) => activeUserId !== userId\n );\n await this.storageService.save(keys.authenticatedAccounts, this.state.authenticatedAccounts);\n }\n\n protected async removeAccountFromDisk(userId: string) {\n await this.removeAccountFromSessionStorage(userId);\n await this.removeAccountFromLocalStorage(userId);\n await this.removeAccountFromSecureStorage(userId);\n }\n\n protected async dynamicallySetActiveUser() {\n if (this.state.accounts == null || Object.keys(this.state.accounts).length < 1) {\n await this.setActiveUser(null);\n return;\n }\n for (const userId in this.state.accounts) {\n if (userId == null) {\n continue;\n }\n if (await this.getIsAuthenticated({ userId: userId })) {\n await this.setActiveUser(userId);\n break;\n }\n await this.setActiveUser(null);\n }\n }\n\n private async getTimeoutBasedStorageOptions(options?: StorageOptions): Promise {\n const timeoutAction = await this.getVaultTimeoutAction({ userId: options?.userId });\n const timeout = await this.getVaultTimeout({ userId: options?.userId });\n const defaultOptions =\n timeoutAction === \"logOut\" && timeout != null\n ? this.defaultInMemoryOptions\n : await this.defaultOnDiskOptions();\n return this.reconcileOptions(options, defaultOptions);\n }\n\n private async saveSecureStorageKey(key: string, value: string, options?: StorageOptions) {\n return value == null\n ? await this.secureStorageService.remove(`${options.userId}${key}`, options)\n : await this.secureStorageService.save(`${options.userId}${key}`, value, options);\n }\n}\n","import { StorageService } from \"../abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"../enums/htmlStorageLocation\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { StateVersion } from \"../enums/stateVersion\";\nimport { ThemeType } from \"../enums/themeType\";\nimport { StateFactory } from \"../factories/stateFactory\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { EventData } from \"../models/data/eventData\";\nimport { FolderData } from \"../models/data/folderData\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { SendData } from \"../models/data/sendData\";\nimport { Account, AccountSettings } from \"../models/domain/account\";\nimport { EnvironmentUrls } from \"../models/domain/environmentUrls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { GlobalState } from \"../models/domain/globalState\";\nimport { StorageOptions } from \"../models/domain/storageOptions\";\n\nimport { TokenService } from \"./token.service\";\n\n// Originally (before January 2022) storage was handled as a flat key/value pair store.\n// With the move to a typed object for state storage these keys should no longer be in use anywhere outside of this migration.\nconst v1Keys: { [key: string]: string } = {\n accessToken: \"accessToken\",\n alwaysShowDock: \"alwaysShowDock\",\n autoConfirmFingerprints: \"autoConfirmFingerprints\",\n autoFillOnPageLoadDefault: \"autoFillOnPageLoadDefault\",\n biometricAwaitingAcceptance: \"biometricAwaitingAcceptance\",\n biometricFingerprintValidated: \"biometricFingerprintValidated\",\n biometricText: \"biometricText\",\n biometricUnlock: \"biometric\",\n clearClipboard: \"clearClipboardKey\",\n clientId: \"apikey_clientId\",\n clientSecret: \"apikey_clientSecret\",\n collapsedGroupings: \"collapsedGroupings\",\n convertAccountToKeyConnector: \"convertAccountToKeyConnector\",\n defaultUriMatch: \"defaultUriMatch\",\n disableAddLoginNotification: \"disableAddLoginNotification\",\n disableAutoBiometricsPrompt: \"noAutoPromptBiometrics\",\n disableAutoTotpCopy: \"disableAutoTotpCopy\",\n disableBadgeCounter: \"disableBadgeCounter\",\n disableChangedPasswordNotification: \"disableChangedPasswordNotification\",\n disableContextMenuItem: \"disableContextMenuItem\",\n disableFavicon: \"disableFavicon\",\n disableGa: \"disableGa\",\n dontShowCardsCurrentTab: \"dontShowCardsCurrentTab\",\n dontShowIdentitiesCurrentTab: \"dontShowIdentitiesCurrentTab\",\n emailVerified: \"emailVerified\",\n enableAlwaysOnTop: \"enableAlwaysOnTopKey\",\n enableAutoFillOnPageLoad: \"enableAutoFillOnPageLoad\",\n enableBiometric: \"enabledBiometric\",\n enableBrowserIntegration: \"enableBrowserIntegration\",\n enableBrowserIntegrationFingerprint: \"enableBrowserIntegrationFingerprint\",\n enableCloseToTray: \"enableCloseToTray\",\n enableFullWidth: \"enableFullWidth\",\n enableGravatars: \"enableGravatars\",\n enableMinimizeToTray: \"enableMinimizeToTray\",\n enableStartToTray: \"enableStartToTrayKey\",\n enableTray: \"enableTray\",\n encKey: \"encKey\", // Generated Symmetric Key\n encOrgKeys: \"encOrgKeys\",\n encPrivate: \"encPrivateKey\",\n encProviderKeys: \"encProviderKeys\",\n entityId: \"entityId\",\n entityType: \"entityType\",\n environmentUrls: \"environmentUrls\",\n equivalentDomains: \"equivalentDomains\",\n eventCollection: \"eventCollection\",\n forcePasswordReset: \"forcePasswordReset\",\n history: \"generatedPasswordHistory\",\n installedVersion: \"installedVersion\",\n kdf: \"kdf\",\n kdfIterations: \"kdfIterations\",\n key: \"key\", // Master Key\n keyHash: \"keyHash\",\n lastActive: \"lastActive\",\n localData: \"sitesLocalData\",\n locale: \"locale\",\n mainWindowSize: \"mainWindowSize\",\n minimizeOnCopyToClipboard: \"minimizeOnCopyToClipboardKey\",\n neverDomains: \"neverDomains\",\n noAutoPromptBiometricsText: \"noAutoPromptBiometricsText\",\n openAtLogin: \"openAtLogin\",\n passwordGenerationOptions: \"passwordGenerationOptions\",\n pinProtected: \"pinProtectedKey\",\n protectedPin: \"protectedPin\",\n refreshToken: \"refreshToken\",\n ssoCodeVerifier: \"ssoCodeVerifier\",\n ssoIdentifier: \"ssoOrgIdentifier\",\n ssoState: \"ssoState\",\n stamp: \"securityStamp\",\n theme: \"theme\",\n userEmail: \"userEmail\",\n userId: \"userId\",\n usesConnector: \"usesKeyConnector\",\n vaultTimeoutAction: \"vaultTimeoutAction\",\n vaultTimeout: \"lockOption\",\n rememberedEmail: \"rememberedEmail\",\n};\n\nconst v1KeyPrefixes: { [key: string]: string } = {\n ciphers: \"ciphers_\",\n collections: \"collections_\",\n folders: \"folders_\",\n lastSync: \"lastSync_\",\n policies: \"policies_\",\n twoFactorToken: \"twoFactorToken_\",\n organizations: \"organizations_\",\n providers: \"providers_\",\n sends: \"sends_\",\n settings: \"settings_\",\n};\n\nconst keys = {\n global: \"global\",\n authenticatedAccounts: \"authenticatedAccounts\",\n activeUserId: \"activeUserId\",\n tempAccountSettings: \"tempAccountSettings\", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication\n accountActivity: \"accountActivity\",\n};\n\nconst partialKeys = {\n autoKey: \"_masterkey_auto\",\n biometricKey: \"_masterkey_biometric\",\n masterKey: \"_masterkey\",\n};\n\nexport class StateMigrationService<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n constructor(\n protected storageService: StorageService,\n protected secureStorageService: StorageService,\n protected stateFactory: StateFactory\n ) {}\n\n async needsMigration(): Promise {\n const currentStateVersion = await this.getCurrentStateVersion();\n return currentStateVersion == null || currentStateVersion < StateVersion.Latest;\n }\n\n async migrate(): Promise {\n let currentStateVersion = await this.getCurrentStateVersion();\n while (currentStateVersion < StateVersion.Latest) {\n switch (currentStateVersion) {\n case StateVersion.One:\n await this.migrateStateFrom1To2();\n break;\n case StateVersion.Two:\n await this.migrateStateFrom2To3();\n break;\n case StateVersion.Three:\n await this.migrateStateFrom3To4();\n break;\n }\n\n currentStateVersion += 1;\n }\n }\n\n protected async migrateStateFrom1To2(): Promise {\n const clearV1Keys = async (clearingUserId?: string) => {\n for (const key in v1Keys) {\n if (key == null) {\n continue;\n }\n await this.set(v1Keys[key], null);\n }\n if (clearingUserId != null) {\n for (const keyPrefix in v1KeyPrefixes) {\n if (keyPrefix == null) {\n continue;\n }\n await this.set(v1KeyPrefixes[keyPrefix] + userId, null);\n }\n }\n };\n\n // Some processes, like biometrics, may have already defined a value before migrations are run.\n // We don't want to null out those values if they don't exist in the old storage scheme (like for new installs)\n // So, the OOO for migration is that we:\n // 1. Check for an existing storage value from the old storage structure OR\n // 2. Check for a value already set by processes that run before migration OR\n // 3. Assign the default value\n const globals =\n (await this.get(keys.global)) ?? this.stateFactory.createGlobal(null);\n globals.stateVersion = StateVersion.Two;\n globals.environmentUrls =\n (await this.get(v1Keys.environmentUrls)) ?? globals.environmentUrls;\n globals.locale = (await this.get(v1Keys.locale)) ?? globals.locale;\n globals.noAutoPromptBiometrics =\n (await this.get(v1Keys.disableAutoBiometricsPrompt)) ??\n globals.noAutoPromptBiometrics;\n globals.noAutoPromptBiometricsText =\n (await this.get(v1Keys.noAutoPromptBiometricsText)) ??\n globals.noAutoPromptBiometricsText;\n globals.ssoCodeVerifier =\n (await this.get(v1Keys.ssoCodeVerifier)) ?? globals.ssoCodeVerifier;\n globals.ssoOrganizationIdentifier =\n (await this.get(v1Keys.ssoIdentifier)) ?? globals.ssoOrganizationIdentifier;\n globals.ssoState = (await this.get(v1Keys.ssoState)) ?? globals.ssoState;\n globals.rememberedEmail =\n (await this.get(v1Keys.rememberedEmail)) ?? globals.rememberedEmail;\n globals.theme = (await this.get(v1Keys.theme)) ?? globals.theme;\n globals.vaultTimeout = (await this.get(v1Keys.vaultTimeout)) ?? globals.vaultTimeout;\n globals.vaultTimeoutAction =\n (await this.get(v1Keys.vaultTimeoutAction)) ?? globals.vaultTimeoutAction;\n globals.window = (await this.get(v1Keys.mainWindowSize)) ?? globals.window;\n globals.enableTray = (await this.get(v1Keys.enableTray)) ?? globals.enableTray;\n globals.enableMinimizeToTray =\n (await this.get(v1Keys.enableMinimizeToTray)) ?? globals.enableMinimizeToTray;\n globals.enableCloseToTray =\n (await this.get(v1Keys.enableCloseToTray)) ?? globals.enableCloseToTray;\n globals.enableStartToTray =\n (await this.get(v1Keys.enableStartToTray)) ?? globals.enableStartToTray;\n globals.openAtLogin = (await this.get(v1Keys.openAtLogin)) ?? globals.openAtLogin;\n globals.alwaysShowDock =\n (await this.get(v1Keys.alwaysShowDock)) ?? globals.alwaysShowDock;\n globals.enableBrowserIntegration =\n (await this.get(v1Keys.enableBrowserIntegration)) ??\n globals.enableBrowserIntegration;\n globals.enableBrowserIntegrationFingerprint =\n (await this.get(v1Keys.enableBrowserIntegrationFingerprint)) ??\n globals.enableBrowserIntegrationFingerprint;\n\n const userId =\n (await this.get(v1Keys.userId)) ?? (await this.get(v1Keys.entityId));\n\n const defaultAccount = this.stateFactory.createAccount(null);\n const accountSettings: AccountSettings = {\n autoConfirmFingerPrints:\n (await this.get(v1Keys.autoConfirmFingerprints)) ??\n defaultAccount.settings.autoConfirmFingerPrints,\n autoFillOnPageLoadDefault:\n (await this.get(v1Keys.autoFillOnPageLoadDefault)) ??\n defaultAccount.settings.autoFillOnPageLoadDefault,\n biometricLocked: null,\n biometricUnlock:\n (await this.get(v1Keys.biometricUnlock)) ??\n defaultAccount.settings.biometricUnlock,\n clearClipboard:\n (await this.get(v1Keys.clearClipboard)) ?? defaultAccount.settings.clearClipboard,\n defaultUriMatch:\n (await this.get(v1Keys.defaultUriMatch)) ?? defaultAccount.settings.defaultUriMatch,\n disableAddLoginNotification:\n (await this.get(v1Keys.disableAddLoginNotification)) ??\n defaultAccount.settings.disableAddLoginNotification,\n disableAutoBiometricsPrompt:\n (await this.get(v1Keys.disableAutoBiometricsPrompt)) ??\n defaultAccount.settings.disableAutoBiometricsPrompt,\n disableAutoTotpCopy:\n (await this.get(v1Keys.disableAutoTotpCopy)) ??\n defaultAccount.settings.disableAutoTotpCopy,\n disableBadgeCounter:\n (await this.get(v1Keys.disableBadgeCounter)) ??\n defaultAccount.settings.disableBadgeCounter,\n disableChangedPasswordNotification:\n (await this.get(v1Keys.disableChangedPasswordNotification)) ??\n defaultAccount.settings.disableChangedPasswordNotification,\n disableContextMenuItem:\n (await this.get(v1Keys.disableContextMenuItem)) ??\n defaultAccount.settings.disableContextMenuItem,\n disableGa: (await this.get(v1Keys.disableGa)) ?? defaultAccount.settings.disableGa,\n dontShowCardsCurrentTab:\n (await this.get(v1Keys.dontShowCardsCurrentTab)) ??\n defaultAccount.settings.dontShowCardsCurrentTab,\n dontShowIdentitiesCurrentTab:\n (await this.get(v1Keys.dontShowIdentitiesCurrentTab)) ??\n defaultAccount.settings.dontShowIdentitiesCurrentTab,\n enableAlwaysOnTop:\n (await this.get(v1Keys.enableAlwaysOnTop)) ??\n defaultAccount.settings.enableAlwaysOnTop,\n enableAutoFillOnPageLoad:\n (await this.get(v1Keys.enableAutoFillOnPageLoad)) ??\n defaultAccount.settings.enableAutoFillOnPageLoad,\n enableBiometric:\n (await this.get(v1Keys.enableBiometric)) ??\n defaultAccount.settings.enableBiometric,\n enableFullWidth:\n (await this.get(v1Keys.enableFullWidth)) ??\n defaultAccount.settings.enableFullWidth,\n enableGravitars:\n (await this.get(v1Keys.enableGravatars)) ??\n defaultAccount.settings.enableGravitars,\n environmentUrls: globals.environmentUrls ?? defaultAccount.settings.environmentUrls,\n equivalentDomains:\n (await this.get(v1Keys.equivalentDomains)) ??\n defaultAccount.settings.equivalentDomains,\n minimizeOnCopyToClipboard:\n (await this.get(v1Keys.minimizeOnCopyToClipboard)) ??\n defaultAccount.settings.minimizeOnCopyToClipboard,\n neverDomains:\n (await this.get(v1Keys.neverDomains)) ?? defaultAccount.settings.neverDomains,\n passwordGenerationOptions:\n (await this.get(v1Keys.passwordGenerationOptions)) ??\n defaultAccount.settings.passwordGenerationOptions,\n pinProtected: {\n decrypted: null,\n encrypted: await this.get(v1Keys.pinProtected),\n },\n protectedPin: await this.get(v1Keys.protectedPin),\n settings: userId == null ? null : await this.get(v1KeyPrefixes.settings + userId),\n vaultTimeout:\n (await this.get(v1Keys.vaultTimeout)) ?? defaultAccount.settings.vaultTimeout,\n vaultTimeoutAction:\n (await this.get(v1Keys.vaultTimeoutAction)) ??\n defaultAccount.settings.vaultTimeoutAction,\n };\n\n // (userId == null) = no logged in user (so no known userId) and we need to temporarily store account specific settings in state to migrate on first auth\n // (userId != null) = we have a currently authed user (so known userId) with encrypted data and other key settings we can move, no need to temporarily store account settings\n if (userId == null) {\n await this.set(keys.tempAccountSettings, accountSettings);\n await this.set(keys.global, globals);\n await this.set(keys.authenticatedAccounts, []);\n await this.set(keys.activeUserId, null);\n await clearV1Keys();\n return;\n }\n\n globals.twoFactorToken = await this.get(v1KeyPrefixes.twoFactorToken + userId);\n await this.set(keys.global, globals);\n await this.set(userId, {\n data: {\n addEditCipherInfo: null,\n ciphers: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: CipherData }>(v1KeyPrefixes.ciphers + userId),\n },\n collapsedGroupings: null,\n collections: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: CollectionData }>(\n v1KeyPrefixes.collections + userId\n ),\n },\n eventCollection: await this.get(v1Keys.eventCollection),\n folders: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: FolderData }>(v1KeyPrefixes.folders + userId),\n },\n localData: null,\n organizations: await this.get<{ [id: string]: OrganizationData }>(\n v1KeyPrefixes.organizations + userId\n ),\n passwordGenerationHistory: {\n decrypted: null,\n encrypted: await this.get(v1Keys.history),\n },\n policies: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: PolicyData }>(v1KeyPrefixes.policies + userId),\n },\n providers: await this.get<{ [id: string]: ProviderData }>(v1KeyPrefixes.providers + userId),\n sends: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: SendData }>(v1KeyPrefixes.sends + userId),\n },\n },\n keys: {\n apiKeyClientSecret: await this.get(v1Keys.clientSecret),\n cryptoMasterKey: null,\n cryptoMasterKeyAuto: null,\n cryptoMasterKeyB64: null,\n cryptoMasterKeyBiometric: null,\n cryptoSymmetricKey: {\n encrypted: await this.get(v1Keys.encKey),\n decrypted: null,\n },\n legacyEtmKey: null,\n organizationKeys: {\n decrypted: null,\n encrypted: await this.get(v1Keys.encOrgKeys),\n },\n privateKey: {\n decrypted: null,\n encrypted: await this.get(v1Keys.encPrivate),\n },\n providerKeys: {\n decrypted: null,\n encrypted: await this.get(v1Keys.encProviderKeys),\n },\n publicKey: null,\n },\n profile: {\n apiKeyClientId: await this.get(v1Keys.clientId),\n authenticationStatus: null,\n convertAccountToKeyConnector: await this.get(v1Keys.convertAccountToKeyConnector),\n email: await this.get(v1Keys.userEmail),\n emailVerified: await this.get(v1Keys.emailVerified),\n entityId: null,\n entityType: null,\n everBeenUnlocked: null,\n forcePasswordReset: null,\n hasPremiumPersonally: null,\n kdfIterations: await this.get(v1Keys.kdfIterations),\n kdfType: await this.get(v1Keys.kdf),\n keyHash: await this.get(v1Keys.keyHash),\n lastSync: null,\n userId: userId,\n usesKeyConnector: null,\n },\n settings: accountSettings,\n tokens: {\n accessToken: await this.get(v1Keys.accessToken),\n decodedToken: null,\n refreshToken: await this.get(v1Keys.refreshToken),\n securityStamp: null,\n },\n });\n\n await this.set(keys.authenticatedAccounts, [userId]);\n await this.set(keys.activeUserId, userId);\n\n const accountActivity: { [userId: string]: number } = {\n [userId]: await this.get(v1Keys.lastActive),\n };\n accountActivity[userId] = await this.get(v1Keys.lastActive);\n await this.set(keys.accountActivity, accountActivity);\n\n await clearV1Keys(userId);\n\n if (await this.secureStorageService.has(v1Keys.key, { keySuffix: \"biometric\" })) {\n await this.secureStorageService.save(\n `${userId}${partialKeys.biometricKey}`,\n await this.secureStorageService.get(v1Keys.key, { keySuffix: \"biometric\" }),\n { keySuffix: \"biometric\" }\n );\n await this.secureStorageService.remove(v1Keys.key, { keySuffix: \"biometric\" });\n }\n\n if (await this.secureStorageService.has(v1Keys.key, { keySuffix: \"auto\" })) {\n await this.secureStorageService.save(\n `${userId}${partialKeys.autoKey}`,\n await this.secureStorageService.get(v1Keys.key, { keySuffix: \"auto\" }),\n { keySuffix: \"auto\" }\n );\n await this.secureStorageService.remove(v1Keys.key, { keySuffix: \"auto\" });\n }\n\n if (await this.secureStorageService.has(v1Keys.key)) {\n await this.secureStorageService.save(\n `${userId}${partialKeys.masterKey}`,\n await this.secureStorageService.get(v1Keys.key)\n );\n await this.secureStorageService.remove(v1Keys.key);\n }\n }\n\n protected async migrateStateFrom2To3(): Promise {\n const authenticatedUserIds = await this.get(keys.authenticatedAccounts);\n await Promise.all(\n authenticatedUserIds.map(async (userId) => {\n const account = await this.get(userId);\n if (\n account?.profile?.hasPremiumPersonally === null &&\n account.tokens?.accessToken != null\n ) {\n const decodedToken = await TokenService.decodeToken(account.tokens.accessToken);\n account.profile.hasPremiumPersonally = decodedToken.premium;\n await this.set(userId, account);\n }\n })\n );\n\n const globals = await this.getGlobals();\n globals.stateVersion = StateVersion.Three;\n await this.set(keys.global, globals);\n }\n\n protected async migrateStateFrom3To4(): Promise {\n const authenticatedUserIds = await this.get(keys.authenticatedAccounts);\n await Promise.all(\n authenticatedUserIds.map(async (userId) => {\n const account = await this.get(userId);\n if (account?.profile?.everBeenUnlocked != null) {\n delete account.profile.everBeenUnlocked;\n return this.set(userId, account);\n }\n })\n );\n\n const globals = await this.getGlobals();\n globals.stateVersion = StateVersion.Four;\n await this.set(keys.global, globals);\n }\n\n protected get options(): StorageOptions {\n return { htmlStorageLocation: HtmlStorageLocation.Local };\n }\n\n protected get(key: string): Promise {\n return this.storageService.get(key, this.options);\n }\n\n protected set(key: string, value: any): Promise {\n if (value == null) {\n return this.storageService.remove(key, this.options);\n }\n return this.storageService.save(key, value, this.options);\n }\n\n protected async getGlobals(): Promise {\n return await this.get(keys.global);\n }\n\n protected async getCurrentStateVersion(): Promise {\n return (await this.getGlobals())?.stateVersion ?? StateVersion.One;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { CollectionService } from \"../abstractions/collection.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { FolderService } from \"../abstractions/folder.service\";\nimport { KeyConnectorService } from \"../abstractions/keyConnector.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { MessagingService } from \"../abstractions/messaging.service\";\nimport { OrganizationService } from \"../abstractions/organization.service\";\nimport { PolicyService } from \"../abstractions/policy.service\";\nimport { ProviderService } from \"../abstractions/provider.service\";\nimport { SendService } from \"../abstractions/send.service\";\nimport { SettingsService } from \"../abstractions/settings.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { SyncService as SyncServiceAbstraction } from \"../abstractions/sync.service\";\nimport { sequentialize } from \"../misc/sequentialize\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { FolderData } from \"../models/data/folderData\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { SendData } from \"../models/data/sendData\";\nimport { CipherResponse } from \"../models/response/cipherResponse\";\nimport { CollectionDetailsResponse } from \"../models/response/collectionResponse\";\nimport { DomainsResponse } from \"../models/response/domainsResponse\";\nimport { FolderResponse } from \"../models/response/folderResponse\";\nimport {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../models/response/notificationResponse\";\nimport { PolicyResponse } from \"../models/response/policyResponse\";\nimport { ProfileResponse } from \"../models/response/profileResponse\";\nimport { SendResponse } from \"../models/response/sendResponse\";\n\nexport class SyncService implements SyncServiceAbstraction {\n syncInProgress = false;\n\n constructor(\n private apiService: ApiService,\n private settingsService: SettingsService,\n private folderService: FolderService,\n private cipherService: CipherService,\n private cryptoService: CryptoService,\n private collectionService: CollectionService,\n private messagingService: MessagingService,\n private policyService: PolicyService,\n private sendService: SendService,\n private logService: LogService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private organizationService: OrganizationService,\n private providerService: ProviderService,\n private logoutCallback: (expired: boolean) => Promise\n ) {}\n\n async getLastSync(): Promise {\n if ((await this.stateService.getUserId()) == null) {\n return null;\n }\n\n const lastSync = await this.stateService.getLastSync();\n if (lastSync) {\n return new Date(lastSync);\n }\n\n return null;\n }\n\n async setLastSync(date: Date, userId?: string): Promise {\n await this.stateService.setLastSync(date.toJSON(), { userId: userId });\n }\n\n @sequentialize(() => \"fullSync\")\n async fullSync(forceSync: boolean, allowThrowOnError = false): Promise {\n this.syncStarted();\n const isAuthenticated = await this.stateService.getIsAuthenticated();\n if (!isAuthenticated) {\n return this.syncCompleted(false);\n }\n\n const now = new Date();\n let needsSync = false;\n try {\n needsSync = await this.needsSyncing(forceSync);\n } catch (e) {\n if (allowThrowOnError) {\n throw e;\n }\n }\n\n if (!needsSync) {\n await this.setLastSync(now);\n return this.syncCompleted(false);\n }\n\n const userId = await this.stateService.getUserId();\n try {\n await this.apiService.refreshIdentityToken();\n const response = await this.apiService.getSync();\n\n await this.syncProfile(response.profile);\n await this.syncFolders(userId, response.folders);\n await this.syncCollections(response.collections);\n await this.syncCiphers(userId, response.ciphers);\n await this.syncSends(userId, response.sends);\n await this.syncSettings(response.domains);\n await this.syncPolicies(response.policies);\n\n await this.setLastSync(now);\n return this.syncCompleted(true);\n } catch (e) {\n if (allowThrowOnError) {\n throw e;\n } else {\n return this.syncCompleted(false);\n }\n }\n }\n\n async syncUpsertFolder(notification: SyncFolderNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n try {\n const localFolder = await this.folderService.get(notification.id);\n if (\n (!isEdit && localFolder == null) ||\n (isEdit && localFolder != null && localFolder.revisionDate < notification.revisionDate)\n ) {\n const remoteFolder = await this.apiService.getFolder(notification.id);\n if (remoteFolder != null) {\n const userId = await this.stateService.getUserId();\n await this.folderService.upsert(new FolderData(remoteFolder, userId));\n this.messagingService.send(\"syncedUpsertedFolder\", { folderId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteFolder(notification: SyncFolderNotification): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n await this.folderService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedFolder\", { folderId: notification.id });\n this.syncCompleted(true);\n return true;\n }\n return this.syncCompleted(false);\n }\n\n async syncUpsertCipher(notification: SyncCipherNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n try {\n let shouldUpdate = true;\n const localCipher = await this.cipherService.get(notification.id);\n if (localCipher != null && localCipher.revisionDate >= notification.revisionDate) {\n shouldUpdate = false;\n }\n\n let checkCollections = false;\n if (shouldUpdate) {\n if (isEdit) {\n shouldUpdate = localCipher != null;\n checkCollections = true;\n } else {\n if (notification.collectionIds == null || notification.organizationId == null) {\n shouldUpdate = localCipher == null;\n } else {\n shouldUpdate = false;\n checkCollections = true;\n }\n }\n }\n\n if (\n !shouldUpdate &&\n checkCollections &&\n notification.organizationId != null &&\n notification.collectionIds != null &&\n notification.collectionIds.length > 0\n ) {\n const collections = await this.collectionService.getAll();\n if (collections != null) {\n for (let i = 0; i < collections.length; i++) {\n if (notification.collectionIds.indexOf(collections[i].id) > -1) {\n shouldUpdate = true;\n break;\n }\n }\n }\n }\n\n if (shouldUpdate) {\n const remoteCipher = await this.apiService.getCipher(notification.id);\n if (remoteCipher != null) {\n const userId = await this.stateService.getUserId();\n await this.cipherService.upsert(new CipherData(remoteCipher, userId));\n this.messagingService.send(\"syncedUpsertedCipher\", { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n if (e != null && e.statusCode === 404 && isEdit) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedCipher\", { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteCipher(notification: SyncCipherNotification): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedCipher\", { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n return this.syncCompleted(false);\n }\n\n async syncUpsertSend(notification: SyncSendNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n try {\n const localSend = await this.sendService.get(notification.id);\n if (\n (!isEdit && localSend == null) ||\n (isEdit && localSend != null && localSend.revisionDate < notification.revisionDate)\n ) {\n const remoteSend = await this.apiService.getSend(notification.id);\n if (remoteSend != null) {\n const userId = await this.stateService.getUserId();\n await this.sendService.upsert(new SendData(remoteSend, userId));\n this.messagingService.send(\"syncedUpsertedSend\", { sendId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteSend(notification: SyncSendNotification): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n await this.sendService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedSend\", { sendId: notification.id });\n this.syncCompleted(true);\n return true;\n }\n return this.syncCompleted(false);\n }\n\n // Helpers\n\n private syncStarted() {\n this.syncInProgress = true;\n this.messagingService.send(\"syncStarted\");\n }\n\n private syncCompleted(successfully: boolean): boolean {\n this.syncInProgress = false;\n this.messagingService.send(\"syncCompleted\", { successfully: successfully });\n return successfully;\n }\n\n private async needsSyncing(forceSync: boolean) {\n if (forceSync) {\n return true;\n }\n\n const lastSync = await this.getLastSync();\n if (lastSync == null || lastSync.getTime() === 0) {\n return true;\n }\n\n const response = await this.apiService.getAccountRevisionDate();\n if (new Date(response) <= lastSync) {\n return false;\n }\n return true;\n }\n\n private async syncProfile(response: ProfileResponse) {\n const stamp = await this.stateService.getSecurityStamp();\n if (stamp != null && stamp !== response.securityStamp) {\n if (this.logoutCallback != null) {\n await this.logoutCallback(true);\n }\n\n throw new Error(\"Stamp has changed\");\n }\n\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(response.privateKey);\n await this.cryptoService.setProviderKeys(response.providers);\n await this.cryptoService.setOrgKeys(response.organizations, response.providerOrganizations);\n await this.stateService.setSecurityStamp(response.securityStamp);\n await this.stateService.setEmailVerified(response.emailVerified);\n await this.stateService.setForcePasswordReset(response.forcePasswordReset);\n await this.keyConnectorService.setUsesKeyConnector(response.usesKeyConnector);\n\n const organizations: { [id: string]: OrganizationData } = {};\n response.organizations.forEach((o) => {\n organizations[o.id] = new OrganizationData(o);\n });\n\n const providers: { [id: string]: ProviderData } = {};\n response.providers.forEach((p) => {\n providers[p.id] = new ProviderData(p);\n });\n\n response.providerOrganizations.forEach((o) => {\n if (organizations[o.id] == null) {\n organizations[o.id] = new OrganizationData(o);\n organizations[o.id].isProviderUser = true;\n }\n });\n\n await this.organizationService.save(organizations);\n await this.providerService.save(providers);\n\n if (await this.keyConnectorService.userNeedsMigration()) {\n await this.keyConnectorService.setConvertAccountRequired(true);\n this.messagingService.send(\"convertAccountToKeyConnector\");\n } else {\n this.keyConnectorService.removeConvertAccountRequired();\n }\n }\n\n private async syncFolders(userId: string, response: FolderResponse[]) {\n const folders: { [id: string]: FolderData } = {};\n response.forEach((f) => {\n folders[f.id] = new FolderData(f, userId);\n });\n return await this.folderService.replace(folders);\n }\n\n private async syncCollections(response: CollectionDetailsResponse[]) {\n const collections: { [id: string]: CollectionData } = {};\n response.forEach((c) => {\n collections[c.id] = new CollectionData(c);\n });\n return await this.collectionService.replace(collections);\n }\n\n private async syncCiphers(userId: string, response: CipherResponse[]) {\n const ciphers: { [id: string]: CipherData } = {};\n response.forEach((c) => {\n ciphers[c.id] = new CipherData(c, userId);\n });\n return await this.cipherService.replace(ciphers);\n }\n\n private async syncSends(userId: string, response: SendResponse[]) {\n const sends: { [id: string]: SendData } = {};\n response.forEach((s) => {\n sends[s.id] = new SendData(s, userId);\n });\n return await this.sendService.replace(sends);\n }\n\n private async syncSettings(response: DomainsResponse) {\n let eqDomains: string[][] = [];\n if (response != null && response.equivalentDomains != null) {\n eqDomains = eqDomains.concat(response.equivalentDomains);\n }\n\n if (response != null && response.globalEquivalentDomains != null) {\n response.globalEquivalentDomains.forEach((global) => {\n if (global.domains.length > 0) {\n eqDomains.push(global.domains);\n }\n });\n }\n\n return this.settingsService.setEquivalentDomains(eqDomains);\n }\n\n private async syncPolicies(response: PolicyResponse[]) {\n const policies: { [id: string]: PolicyData } = {};\n if (response != null) {\n response.forEach((p) => {\n policies[p.id] = new PolicyData(p);\n });\n }\n return await this.policyService.replace(policies);\n }\n}\n","import { StateService } from \"../abstractions/state.service\";\nimport { TokenService as TokenServiceAbstraction } from \"../abstractions/token.service\";\nimport { Utils } from \"../misc/utils\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\n\nexport class TokenService implements TokenServiceAbstraction {\n static decodeToken(token: string): Promise {\n if (token == null) {\n throw new Error(\"Token not provided.\");\n }\n\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n throw new Error(\"JWT must have 3 parts\");\n }\n\n const decoded = Utils.fromUrlB64ToUtf8(parts[1]);\n if (decoded == null) {\n throw new Error(\"Cannot decode the token\");\n }\n\n const decodedToken = JSON.parse(decoded);\n return decodedToken;\n }\n\n constructor(private stateService: StateService) {}\n\n async setTokens(\n accessToken: string,\n refreshToken: string,\n clientIdClientSecret: [string, string]\n ): Promise {\n await this.setToken(accessToken);\n await this.setRefreshToken(refreshToken);\n if (clientIdClientSecret != null) {\n await this.setClientId(clientIdClientSecret[0]);\n await this.setClientSecret(clientIdClientSecret[1]);\n }\n }\n\n async setClientId(clientId: string): Promise {\n return await this.stateService.setApiKeyClientId(clientId);\n }\n\n async getClientId(): Promise {\n return await this.stateService.getApiKeyClientId();\n }\n\n async setClientSecret(clientSecret: string): Promise {\n return await this.stateService.setApiKeyClientSecret(clientSecret);\n }\n\n async getClientSecret(): Promise {\n return await this.stateService.getApiKeyClientSecret();\n }\n\n async setToken(token: string): Promise {\n await this.stateService.setAccessToken(token);\n }\n\n async getToken(): Promise {\n return await this.stateService.getAccessToken();\n }\n\n async setRefreshToken(refreshToken: string): Promise {\n return await this.stateService.setRefreshToken(refreshToken);\n }\n\n async getRefreshToken(): Promise {\n return await this.stateService.getRefreshToken();\n }\n\n async setTwoFactorToken(tokenResponse: IdentityTokenResponse): Promise {\n return await this.stateService.setTwoFactorToken(tokenResponse.twoFactorToken);\n }\n\n async getTwoFactorToken(): Promise {\n return await this.stateService.getTwoFactorToken();\n }\n\n async clearTwoFactorToken(): Promise {\n return await this.stateService.setTwoFactorToken(null);\n }\n\n async clearToken(userId?: string): Promise {\n await this.stateService.setAccessToken(null, { userId: userId });\n await this.stateService.setRefreshToken(null, { userId: userId });\n await this.stateService.setApiKeyClientId(null, { userId: userId });\n await this.stateService.setApiKeyClientSecret(null, { userId: userId });\n }\n\n // jwthelper methods\n // ref https://github.com/auth0/angular-jwt/blob/master/src/angularJwt/services/jwt.js\n\n async decodeToken(token?: string): Promise {\n const storedToken = await this.stateService.getDecodedToken();\n if (token === null && storedToken != null) {\n return storedToken;\n }\n\n token = token ?? (await this.stateService.getAccessToken());\n\n if (token == null) {\n throw new Error(\"Token not found.\");\n }\n\n return TokenService.decodeToken(token);\n }\n\n async getTokenExpirationDate(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.exp === \"undefined\") {\n return null;\n }\n\n const d = new Date(0); // The 0 here is the key, which sets the date to the epoch\n d.setUTCSeconds(decoded.exp);\n return d;\n }\n\n async tokenSecondsRemaining(offsetSeconds = 0): Promise {\n const d = await this.getTokenExpirationDate();\n if (d == null) {\n return 0;\n }\n\n const msRemaining = d.valueOf() - (new Date().valueOf() + offsetSeconds * 1000);\n return Math.round(msRemaining / 1000);\n }\n\n async tokenNeedsRefresh(minutes = 5): Promise {\n const sRemaining = await this.tokenSecondsRemaining();\n return sRemaining < 60 * minutes;\n }\n\n async getUserId(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.sub === \"undefined\") {\n throw new Error(\"No user id found\");\n }\n\n return decoded.sub as string;\n }\n\n async getEmail(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.email === \"undefined\") {\n throw new Error(\"No email found\");\n }\n\n return decoded.email as string;\n }\n\n async getEmailVerified(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.email_verified === \"undefined\") {\n throw new Error(\"No email verification found\");\n }\n\n return decoded.email_verified as boolean;\n }\n\n async getName(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.name === \"undefined\") {\n return null;\n }\n\n return decoded.name as string;\n }\n\n async getPremium(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.premium === \"undefined\") {\n return false;\n }\n\n return decoded.premium as boolean;\n }\n\n async getIssuer(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.iss === \"undefined\") {\n throw new Error(\"No issuer found\");\n }\n\n return decoded.iss as string;\n }\n\n async getIsExternal(): Promise {\n const decoded = await this.decodeToken();\n\n return Array.isArray(decoded.amr) && decoded.amr.includes(\"external\");\n }\n}\n","import { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { TotpService as TotpServiceAbstraction } from \"../abstractions/totp.service\";\nimport { Utils } from \"../misc/utils\";\n\nconst B32Chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\nconst SteamChars = \"23456789BCDFGHJKMNPQRTVWXY\";\n\nexport class TotpService implements TotpServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n async getCode(key: string): Promise {\n if (key == null) {\n return null;\n }\n let period = 30;\n let alg: \"sha1\" | \"sha256\" | \"sha512\" = \"sha1\";\n let digits = 6;\n let keyB32 = key;\n const isOtpAuth = key.toLowerCase().indexOf(\"otpauth://\") === 0;\n const isSteamAuth = !isOtpAuth && key.toLowerCase().indexOf(\"steam://\") === 0;\n if (isOtpAuth) {\n const params = Utils.getQueryParams(key);\n if (params.has(\"digits\") && params.get(\"digits\") != null) {\n try {\n const digitParams = parseInt(params.get(\"digits\").trim(), null);\n if (digitParams > 10) {\n digits = 10;\n } else if (digitParams > 0) {\n digits = digitParams;\n }\n } catch {\n this.logService.error(\"Invalid digits param.\");\n }\n }\n if (params.has(\"period\") && params.get(\"period\") != null) {\n try {\n const periodParam = parseInt(params.get(\"period\").trim(), null);\n if (periodParam > 0) {\n period = periodParam;\n }\n } catch {\n this.logService.error(\"Invalid period param.\");\n }\n }\n if (params.has(\"secret\") && params.get(\"secret\") != null) {\n keyB32 = params.get(\"secret\");\n }\n if (params.has(\"algorithm\") && params.get(\"algorithm\") != null) {\n const algParam = params.get(\"algorithm\").toLowerCase();\n if (algParam === \"sha1\" || algParam === \"sha256\" || algParam === \"sha512\") {\n alg = algParam;\n }\n }\n } else if (isSteamAuth) {\n keyB32 = key.substr(\"steam://\".length);\n digits = 5;\n }\n\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const timeHex = this.leftPad(this.decToHex(Math.floor(epoch / period)), 16, \"0\");\n const timeBytes = Utils.fromHexToArray(timeHex);\n const keyBytes = this.b32ToBytes(keyB32);\n\n if (!keyBytes.length || !timeBytes.length) {\n return null;\n }\n\n const hash = await this.sign(keyBytes, timeBytes, alg);\n if (hash.length === 0) {\n return null;\n }\n\n const offset = hash[hash.length - 1] & 0xf;\n const binary =\n ((hash[offset] & 0x7f) << 24) |\n ((hash[offset + 1] & 0xff) << 16) |\n ((hash[offset + 2] & 0xff) << 8) |\n (hash[offset + 3] & 0xff);\n\n let otp = \"\";\n if (isSteamAuth) {\n let fullCode = binary & 0x7fffffff;\n for (let i = 0; i < digits; i++) {\n otp += SteamChars[fullCode % SteamChars.length];\n fullCode = Math.trunc(fullCode / SteamChars.length);\n }\n } else {\n otp = (binary % Math.pow(10, digits)).toString();\n otp = this.leftPad(otp, digits, \"0\");\n }\n\n return otp;\n }\n\n getTimeInterval(key: string): number {\n let period = 30;\n if (key != null && key.toLowerCase().indexOf(\"otpauth://\") === 0) {\n const params = Utils.getQueryParams(key);\n if (params.has(\"period\") && params.get(\"period\") != null) {\n try {\n period = parseInt(params.get(\"period\").trim(), null);\n } catch {\n this.logService.error(\"Invalid period param.\");\n }\n }\n }\n return period;\n }\n\n async isAutoCopyEnabled(): Promise {\n return !(await this.stateService.getDisableAutoTotpCopy());\n }\n\n // Helpers\n\n private leftPad(s: string, l: number, p: string): string {\n if (l + 1 >= s.length) {\n s = Array(l + 1 - s.length).join(p) + s;\n }\n return s;\n }\n\n private decToHex(d: number): string {\n return (d < 15.5 ? \"0\" : \"\") + Math.round(d).toString(16);\n }\n\n private b32ToHex(s: string): string {\n s = s.toUpperCase();\n let cleanedInput = \"\";\n\n for (let i = 0; i < s.length; i++) {\n if (B32Chars.indexOf(s[i]) < 0) {\n continue;\n }\n\n cleanedInput += s[i];\n }\n s = cleanedInput;\n\n let bits = \"\";\n let hex = \"\";\n for (let i = 0; i < s.length; i++) {\n const byteIndex = B32Chars.indexOf(s.charAt(i));\n if (byteIndex < 0) {\n continue;\n }\n bits += this.leftPad(byteIndex.toString(2), 5, \"0\");\n }\n for (let i = 0; i + 4 <= bits.length; i += 4) {\n const chunk = bits.substr(i, 4);\n hex = hex + parseInt(chunk, 2).toString(16);\n }\n return hex;\n }\n\n private b32ToBytes(s: string): Uint8Array {\n return Utils.fromHexToArray(this.b32ToHex(s));\n }\n\n private async sign(\n keyBytes: Uint8Array,\n timeBytes: Uint8Array,\n alg: \"sha1\" | \"sha256\" | \"sha512\"\n ) {\n const signature = await this.cryptoFunctionService.hmac(timeBytes.buffer, keyBytes.buffer, alg);\n return new Uint8Array(signature);\n }\n}\n","import { I18nService } from \"../abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport {\n TwoFactorProviderDetails,\n TwoFactorService as TwoFactorServiceAbstraction,\n} from \"../abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"../enums/twoFactorProviderType\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identityTwoFactorResponse\";\n\nexport const TwoFactorProviders: Partial> =\n {\n [TwoFactorProviderType.Authenticator]: {\n type: TwoFactorProviderType.Authenticator,\n name: null as string,\n description: null as string,\n priority: 1,\n sort: 1,\n premium: false,\n },\n [TwoFactorProviderType.Yubikey]: {\n type: TwoFactorProviderType.Yubikey,\n name: null as string,\n description: null as string,\n priority: 3,\n sort: 2,\n premium: true,\n },\n [TwoFactorProviderType.Duo]: {\n type: TwoFactorProviderType.Duo,\n name: \"Duo\",\n description: null as string,\n priority: 2,\n sort: 3,\n premium: true,\n },\n [TwoFactorProviderType.OrganizationDuo]: {\n type: TwoFactorProviderType.OrganizationDuo,\n name: \"Duo (Organization)\",\n description: null as string,\n priority: 10,\n sort: 4,\n premium: false,\n },\n [TwoFactorProviderType.Email]: {\n type: TwoFactorProviderType.Email,\n name: null as string,\n description: null as string,\n priority: 0,\n sort: 6,\n premium: false,\n },\n [TwoFactorProviderType.WebAuthn]: {\n type: TwoFactorProviderType.WebAuthn,\n name: null as string,\n description: null as string,\n priority: 4,\n sort: 5,\n premium: true,\n },\n };\n\nexport class TwoFactorService implements TwoFactorServiceAbstraction {\n private twoFactorProvidersData: Map;\n private selectedTwoFactorProviderType: TwoFactorProviderType = null;\n\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n init() {\n TwoFactorProviders[TwoFactorProviderType.Email].name = this.i18nService.t(\"emailTitle\");\n TwoFactorProviders[TwoFactorProviderType.Email].description = this.i18nService.t(\"emailDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Authenticator].name =\n this.i18nService.t(\"authenticatorAppTitle\");\n TwoFactorProviders[TwoFactorProviderType.Authenticator].description =\n this.i18nService.t(\"authenticatorAppDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Duo].description = this.i18nService.t(\"duoDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].name =\n \"Duo (\" + this.i18nService.t(\"organization\") + \")\";\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].description =\n this.i18nService.t(\"duoOrganizationDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].name = this.i18nService.t(\"webAuthnTitle\");\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].description =\n this.i18nService.t(\"webAuthnDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Yubikey].name = this.i18nService.t(\"yubiKeyTitle\");\n TwoFactorProviders[TwoFactorProviderType.Yubikey].description =\n this.i18nService.t(\"yubiKeyDesc\");\n }\n\n getSupportedProviders(win: Window): TwoFactorProviderDetails[] {\n const providers: any[] = [];\n if (this.twoFactorProvidersData == null) {\n return providers;\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.OrganizationDuo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.OrganizationDuo]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Authenticator)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Authenticator]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Yubikey)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Yubikey]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.Duo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Duo]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.WebAuthn) &&\n this.platformUtilsService.supportsWebAuthn(win)\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.WebAuthn]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Email)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Email]);\n }\n\n return providers;\n }\n\n getDefaultProvider(webAuthnSupported: boolean): TwoFactorProviderType {\n if (this.twoFactorProvidersData == null) {\n return null;\n }\n\n if (\n this.selectedTwoFactorProviderType != null &&\n this.twoFactorProvidersData.has(this.selectedTwoFactorProviderType)\n ) {\n return this.selectedTwoFactorProviderType;\n }\n\n let providerType: TwoFactorProviderType = null;\n let providerPriority = -1;\n this.twoFactorProvidersData.forEach((_value, type) => {\n const provider = (TwoFactorProviders as any)[type];\n if (provider != null && provider.priority > providerPriority) {\n if (type === TwoFactorProviderType.WebAuthn && !webAuthnSupported) {\n return;\n }\n\n providerType = type;\n providerPriority = provider.priority;\n }\n });\n\n return providerType;\n }\n\n setSelectedProvider(type: TwoFactorProviderType) {\n this.selectedTwoFactorProviderType = type;\n }\n\n clearSelectedProvider() {\n this.selectedTwoFactorProviderType = null;\n }\n\n setProviders(response: IdentityTwoFactorResponse) {\n this.twoFactorProvidersData = response.twoFactorProviders2;\n }\n\n clearProviders() {\n this.twoFactorProvidersData = null;\n }\n\n getProviders() {\n return this.twoFactorProvidersData;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { UserVerificationService as UserVerificationServiceAbstraction } from \"../abstractions/userVerification.service\";\nimport { VerificationType } from \"../enums/verificationType\";\nimport { VerifyOTPRequest } from \"../models/request/account/verifyOTPRequest\";\nimport { SecretVerificationRequest } from \"../models/request/secretVerificationRequest\";\nimport { Verification } from \"../types/verification\";\n\nexport class UserVerificationService implements UserVerificationServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private apiService: ApiService\n ) {}\n\n async buildRequest(\n verification: Verification,\n requestClass?: new () => T,\n alreadyHashed?: boolean\n ) {\n this.validateInput(verification);\n\n const request =\n requestClass != null ? new requestClass() : (new SecretVerificationRequest() as T);\n\n if (verification.type === VerificationType.OTP) {\n request.otp = verification.secret;\n } else {\n request.masterPasswordHash = alreadyHashed\n ? verification.secret\n : await this.cryptoService.hashPassword(verification.secret, null);\n }\n\n return request;\n }\n\n async verifyUser(verification: Verification): Promise {\n this.validateInput(verification);\n\n if (verification.type === VerificationType.OTP) {\n const request = new VerifyOTPRequest(verification.secret);\n try {\n await this.apiService.postAccountVerifyOTP(request);\n } catch (e) {\n throw new Error(this.i18nService.t(\"invalidVerificationCode\"));\n }\n } else {\n const passwordValid = await this.cryptoService.compareAndUpdateKeyHash(\n verification.secret,\n null\n );\n if (!passwordValid) {\n throw new Error(this.i18nService.t(\"invalidMasterPassword\"));\n }\n }\n return true;\n }\n\n async requestOTP() {\n await this.apiService.postAccountRequestOTP();\n }\n\n private validateInput(verification: Verification) {\n if (verification?.secret == null || verification.secret === \"\") {\n if (verification.type === VerificationType.OTP) {\n throw new Error(this.i18nService.t(\"verificationCodeRequired\"));\n } else {\n throw new Error(this.i18nService.t(\"masterPassRequired\"));\n }\n }\n }\n}\n","import { CryptoService } from \"../abstractions/crypto.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { UsernameGenerationService as BaseUsernameGenerationService } from \"../abstractions/usernameGeneration.service\";\nimport { EEFLongWordList } from \"../misc/wordlist\";\n\nconst DefaultOptions = {\n type: \"word\",\n wordCapitalize: true,\n wordIncludeNumber: true,\n subaddressType: \"random\",\n catchallType: \"random\",\n};\n\nexport class UsernameGenerationService implements BaseUsernameGenerationService {\n constructor(private cryptoService: CryptoService, private stateService: StateService) {}\n\n generateUsername(options: any): Promise {\n if (options.type === \"catchall\") {\n return this.generateCatchall(options);\n } else if (options.type === \"subaddress\") {\n return this.generateSubaddress(options);\n } else if (options.type === \"forwarded\") {\n return this.generateSubaddress(options);\n } else {\n return this.generateWord(options);\n }\n }\n\n async generateWord(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.wordCapitalize == null) {\n o.wordCapitalize = true;\n }\n if (o.wordIncludeNumber == null) {\n o.wordIncludeNumber = true;\n }\n\n const wordIndex = await this.cryptoService.randomNumber(0, EEFLongWordList.length - 1);\n let word = EEFLongWordList[wordIndex];\n if (o.wordCapitalize) {\n word = word.charAt(0).toUpperCase() + word.slice(1);\n }\n if (o.wordIncludeNumber) {\n const num = await this.cryptoService.randomNumber(1, 9999);\n word = word + this.zeroPad(num.toString(), 4);\n }\n return word;\n }\n\n async generateSubaddress(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n const subaddressEmail = o.subaddressEmail;\n if (subaddressEmail == null || subaddressEmail.length < 3) {\n return o.subaddressEmail;\n }\n const atIndex = subaddressEmail.indexOf(\"@\");\n if (atIndex < 1 || atIndex >= subaddressEmail.length - 1) {\n return subaddressEmail;\n }\n if (o.subaddressType == null) {\n o.subaddressType = \"random\";\n }\n\n const emailBeginning = subaddressEmail.substr(0, atIndex);\n const emailEnding = subaddressEmail.substr(atIndex + 1, subaddressEmail.length);\n\n let subaddressString = \"\";\n if (o.subaddressType === \"random\") {\n subaddressString = await this.randomString(8);\n } else if (o.subaddressType === \"website-name\") {\n subaddressString = o.website;\n }\n return emailBeginning + \"+\" + subaddressString + \"@\" + emailEnding;\n }\n\n async generateCatchall(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.catchallDomain == null || o.catchallDomain === \"\") {\n return null;\n }\n if (o.catchallType == null) {\n o.catchallType = \"random\";\n }\n\n let startString = \"\";\n if (o.catchallType === \"random\") {\n startString = await this.randomString(8);\n } else if (o.catchallType === \"website-name\") {\n startString = o.website;\n }\n return startString + \"@\" + o.catchallDomain;\n }\n\n async getOptions(): Promise {\n let options = await this.stateService.getUsernameGenerationOptions();\n if (options == null) {\n options = DefaultOptions;\n } else {\n options = Object.assign({}, DefaultOptions, options);\n }\n await this.stateService.setUsernameGenerationOptions(options);\n return options;\n }\n\n async saveOptions(options: any) {\n await this.stateService.setUsernameGenerationOptions(options);\n }\n\n private async randomString(length: number) {\n let str = \"\";\n const charSet = \"abcdefghijklmnopqrstuvwxyz1234567890\";\n for (let i = 0; i < length; i++) {\n const randomCharIndex = await this.cryptoService.randomNumber(0, charSet.length - 1);\n str += charSet.charAt(randomCharIndex);\n }\n return str;\n }\n\n // ref: https://stackoverflow.com/a/10073788\n private zeroPad(number: string, width: number) {\n return number.length >= width\n ? number\n : new Array(width - number.length + 1).join(\"0\") + number;\n }\n}\n","import { CipherService } from \"../abstractions/cipher.service\";\nimport { CollectionService } from \"../abstractions/collection.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { FolderService } from \"../abstractions/folder.service\";\nimport { KeyConnectorService } from \"../abstractions/keyConnector.service\";\nimport { MessagingService } from \"../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { PolicyService } from \"../abstractions/policy.service\";\nimport { SearchService } from \"../abstractions/search.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"../abstractions/vaultTimeout.service\";\nimport { KeySuffixOptions } from \"../enums/keySuffixOptions\";\nimport { PolicyType } from \"../enums/policyType\";\n\nexport class VaultTimeoutService implements VaultTimeoutServiceAbstraction {\n private inited = false;\n\n constructor(\n private cipherService: CipherService,\n private folderService: FolderService,\n private collectionService: CollectionService,\n private cryptoService: CryptoService,\n protected platformUtilsService: PlatformUtilsService,\n private messagingService: MessagingService,\n private searchService: SearchService,\n private tokenService: TokenService,\n private policyService: PolicyService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private lockedCallback: (userId?: string) => Promise = null,\n private loggedOutCallback: (userId?: string) => Promise = null\n ) {}\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.startCheck();\n }\n }\n\n startCheck() {\n this.checkVaultTimeout();\n setInterval(() => this.checkVaultTimeout(), 10 * 1000); // check every 10 seconds\n }\n\n // Keys aren't stored for a device that is locked or logged out.\n async isLocked(userId?: string): Promise {\n const neverLock =\n (await this.cryptoService.hasKeyStored(KeySuffixOptions.Auto, userId)) &&\n !(await this.stateService.getEverBeenUnlocked({ userId: userId }));\n if (neverLock) {\n // TODO: This also _sets_ the key so when we check memory in the next line it finds a key.\n // We should refactor here.\n await this.cryptoService.getKey(KeySuffixOptions.Auto, userId);\n }\n\n return !(await this.cryptoService.hasKeyInMemory(userId));\n }\n\n async checkVaultTimeout(): Promise {\n if (await this.platformUtilsService.isViewOpen()) {\n return;\n }\n\n for (const userId in this.stateService.accounts.getValue()) {\n if (userId != null && (await this.shouldLock(userId))) {\n await this.executeTimeoutAction(userId);\n }\n }\n }\n\n async lock(allowSoftLock = false, userId?: string): Promise {\n const authed = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!authed) {\n return;\n }\n\n if (await this.keyConnectorService.getUsesKeyConnector()) {\n const pinSet = await this.isPinLockSet();\n const pinLock =\n (pinSet[0] && (await this.stateService.getDecryptedPinProtected()) != null) || pinSet[1];\n\n if (!pinLock && !(await this.isBiometricLockSet())) {\n await this.logOut(userId);\n }\n }\n\n if (userId == null || userId === (await this.stateService.getUserId())) {\n this.searchService.clearIndex();\n }\n\n await this.stateService.setEverBeenUnlocked(true, { userId: userId });\n await this.stateService.setBiometricLocked(true, { userId: userId });\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n\n await this.cryptoService.clearKey(false, userId);\n await this.cryptoService.clearOrgKeys(true, userId);\n await this.cryptoService.clearKeyPair(true, userId);\n await this.cryptoService.clearEncKey(true, userId);\n\n await this.folderService.clearCache(userId);\n await this.cipherService.clearCache(userId);\n await this.collectionService.clearCache(userId);\n\n this.messagingService.send(\"locked\", { userId: userId });\n\n if (this.lockedCallback != null) {\n await this.lockedCallback(userId);\n }\n }\n\n async logOut(userId?: string): Promise {\n if (this.loggedOutCallback != null) {\n await this.loggedOutCallback(userId);\n }\n }\n\n async setVaultTimeoutOptions(timeout: number, action: string): Promise {\n await this.stateService.setVaultTimeout(timeout);\n\n // We swap these tokens from being on disk for lock actions, and in memory for logout actions\n // Get them here to set them to their new location after changing the timeout action and clearing if needed\n const token = await this.tokenService.getToken();\n const refreshToken = await this.tokenService.getRefreshToken();\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n\n const currentAction = await this.stateService.getVaultTimeoutAction();\n if ((timeout != null || timeout === 0) && action === \"logOut\" && action !== currentAction) {\n // if we have a vault timeout and the action is log out, reset tokens\n await this.tokenService.clearToken();\n }\n\n await this.stateService.setVaultTimeoutAction(action);\n\n await this.tokenService.setToken(token);\n await this.tokenService.setRefreshToken(refreshToken);\n await this.tokenService.setClientId(clientId);\n await this.tokenService.setClientSecret(clientSecret);\n\n await this.cryptoService.toggleKey();\n }\n\n async isPinLockSet(): Promise<[boolean, boolean]> {\n const protectedPin = await this.stateService.getProtectedPin();\n const pinProtectedKey = await this.stateService.getEncryptedPinProtected();\n return [protectedPin != null, pinProtectedKey != null];\n }\n\n async isBiometricLockSet(): Promise {\n return await this.stateService.getBiometricUnlock();\n }\n\n async getVaultTimeout(userId?: string): Promise {\n const vaultTimeout = await this.stateService.getVaultTimeout({ userId: userId });\n\n if (\n await this.policyService.policyAppliesToUser(PolicyType.MaximumVaultTimeout, null, userId)\n ) {\n const policy = await this.policyService.getAll(PolicyType.MaximumVaultTimeout, userId);\n // Remove negative values, and ensure it's smaller than maximum allowed value according to policy\n let timeout = Math.min(vaultTimeout, policy[0].data.minutes);\n\n if (vaultTimeout == null || timeout < 0) {\n timeout = policy[0].data.minutes;\n }\n\n // We really shouldn't need to set the value here, but multiple services relies on this value being correct.\n if (vaultTimeout !== timeout) {\n await this.stateService.setVaultTimeout(timeout, { userId: userId });\n }\n\n return timeout;\n }\n\n return vaultTimeout;\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setEverBeenUnlocked(false, { userId: userId });\n await this.stateService.setDecryptedPinProtected(null, { userId: userId });\n await this.stateService.setProtectedPin(null, { userId: userId });\n }\n\n private async isLoggedOut(userId?: string): Promise {\n return !(await this.stateService.getIsAuthenticated({ userId: userId }));\n }\n\n private async shouldLock(userId: string): Promise {\n if (await this.isLoggedOut(userId)) {\n return false;\n }\n\n if (await this.isLocked(userId)) {\n return false;\n }\n\n const vaultTimeout = await this.getVaultTimeout(userId);\n if (vaultTimeout == null || vaultTimeout < 0) {\n return false;\n }\n\n const lastActive = await this.stateService.getLastActive({ userId: userId });\n if (lastActive == null) {\n return false;\n }\n\n const vaultTimeoutSeconds = vaultTimeout * 60;\n const diffSeconds = (new Date().getTime() - lastActive) / 1000;\n return diffSeconds >= vaultTimeoutSeconds;\n }\n\n private async executeTimeoutAction(userId: string): Promise {\n const timeoutAction = await this.stateService.getVaultTimeoutAction({ userId: userId });\n timeoutAction === \"logOut\" ? await this.logOut(userId) : await this.lock(true, userId);\n }\n}\n","import * as forge from \"node-forge\";\n\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { Utils } from \"../misc/utils\";\nimport { DecryptParameters } from \"../models/domain/decryptParameters\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\n\nexport class WebCryptoFunctionService implements CryptoFunctionService {\n private crypto: Crypto;\n private subtle: SubtleCrypto;\n\n constructor(win: Window) {\n this.crypto = typeof win.crypto !== \"undefined\" ? win.crypto : null;\n this.subtle =\n !!this.crypto && typeof win.crypto.subtle !== \"undefined\" ? win.crypto.subtle : null;\n }\n\n async pbkdf2(\n password: string | ArrayBuffer,\n salt: string | ArrayBuffer,\n algorithm: \"sha256\" | \"sha512\",\n iterations: number\n ): Promise {\n const wcLen = algorithm === \"sha256\" ? 256 : 512;\n const passwordBuf = this.toBuf(password);\n const saltBuf = this.toBuf(salt);\n\n const pbkdf2Params: Pbkdf2Params = {\n name: \"PBKDF2\",\n salt: saltBuf,\n iterations: iterations,\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey(\n \"raw\",\n passwordBuf,\n { name: \"PBKDF2\" } as any,\n false,\n [\"deriveBits\"]\n );\n return await this.subtle.deriveBits(pbkdf2Params, impKey, wcLen);\n }\n\n async hkdf(\n ikm: ArrayBuffer,\n salt: string | ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ): Promise {\n const saltBuf = this.toBuf(salt);\n const infoBuf = this.toBuf(info);\n\n const hkdfParams: HkdfParams = {\n name: \"HKDF\",\n salt: saltBuf,\n info: infoBuf,\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey(\"raw\", ikm, { name: \"HKDF\" } as any, false, [\n \"deriveBits\",\n ]);\n return await this.subtle.deriveBits(hkdfParams as any, impKey, outputByteSize * 8);\n }\n\n // ref: https://tools.ietf.org/html/rfc5869\n async hkdfExpand(\n prk: ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ): Promise {\n const hashLen = algorithm === \"sha256\" ? 32 : 64;\n if (outputByteSize > 255 * hashLen) {\n throw new Error(\"outputByteSize is too large.\");\n }\n const prkArr = new Uint8Array(prk);\n if (prkArr.length < hashLen) {\n throw new Error(\"prk is too small.\");\n }\n const infoBuf = this.toBuf(info);\n const infoArr = new Uint8Array(infoBuf);\n let runningOkmLength = 0;\n let previousT = new Uint8Array(0);\n const n = Math.ceil(outputByteSize / hashLen);\n const okm = new Uint8Array(n * hashLen);\n for (let i = 0; i < n; i++) {\n const t = new Uint8Array(previousT.length + infoArr.length + 1);\n t.set(previousT);\n t.set(infoArr, previousT.length);\n t.set([i + 1], t.length - 1);\n previousT = new Uint8Array(await this.hmac(t.buffer, prk, algorithm));\n okm.set(previousT, runningOkmLength);\n runningOkmLength += previousT.length;\n if (runningOkmLength >= outputByteSize) {\n break;\n }\n }\n return okm.slice(0, outputByteSize).buffer;\n }\n\n async hash(\n value: string | ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"\n ): Promise {\n if (algorithm === \"md5\") {\n const md = algorithm === \"md5\" ? forge.md.md5.create() : forge.md.sha1.create();\n const valueBytes = this.toByteString(value);\n md.update(valueBytes, \"raw\");\n return Utils.fromByteStringToArray(md.digest().data).buffer;\n }\n\n const valueBuf = this.toBuf(value);\n return await this.subtle.digest({ name: this.toWebCryptoAlgorithm(algorithm) }, valueBuf);\n }\n\n async hmac(\n value: ArrayBuffer,\n key: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ): Promise {\n const signingAlgorithm = {\n name: \"HMAC\",\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey(\"raw\", key, signingAlgorithm, false, [\"sign\"]);\n return await this.subtle.sign(signingAlgorithm, impKey, value);\n }\n\n // Safely compare two values in a way that protects against timing attacks (Double HMAC Verification).\n // ref: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/\n // ref: https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-string-comparison-with-double-hmac-strategy\n async compare(a: ArrayBuffer, b: ArrayBuffer): Promise {\n const macKey = await this.randomBytes(32);\n const signingAlgorithm = {\n name: \"HMAC\",\n hash: { name: \"SHA-256\" },\n };\n const impKey = await this.subtle.importKey(\"raw\", macKey, signingAlgorithm, false, [\"sign\"]);\n const mac1 = await this.subtle.sign(signingAlgorithm, impKey, a);\n const mac2 = await this.subtle.sign(signingAlgorithm, impKey, b);\n\n if (mac1.byteLength !== mac2.byteLength) {\n return false;\n }\n\n const arr1 = new Uint8Array(mac1);\n const arr2 = new Uint8Array(mac2);\n for (let i = 0; i < arr2.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n hmacFast(value: string, key: string, algorithm: \"sha1\" | \"sha256\" | \"sha512\"): Promise {\n const hmac = forge.hmac.create();\n hmac.start(algorithm, key);\n hmac.update(value);\n const bytes = hmac.digest().getBytes();\n return Promise.resolve(bytes);\n }\n\n async compareFast(a: string, b: string): Promise {\n const rand = await this.randomBytes(32);\n const bytes = new Uint32Array(rand);\n const buffer = forge.util.createBuffer();\n for (let i = 0; i < bytes.length; i++) {\n buffer.putInt32(bytes[i]);\n }\n const macKey = buffer.getBytes();\n\n const hmac = forge.hmac.create();\n hmac.start(\"sha256\", macKey);\n hmac.update(a);\n const mac1 = hmac.digest().getBytes();\n\n hmac.start(null, null);\n hmac.update(b);\n const mac2 = hmac.digest().getBytes();\n\n const equals = mac1 === mac2;\n return equals;\n }\n\n async aesEncrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise {\n const impKey = await this.subtle.importKey(\"raw\", key, { name: \"AES-CBC\" } as any, false, [\n \"encrypt\",\n ]);\n return await this.subtle.encrypt({ name: \"AES-CBC\", iv: iv }, impKey, data);\n }\n\n aesDecryptFastParameters(\n data: string,\n iv: string,\n mac: string,\n key: SymmetricCryptoKey\n ): DecryptParameters {\n const p = new DecryptParameters();\n if (key.meta != null) {\n p.encKey = key.meta.encKeyByteString;\n p.macKey = key.meta.macKeyByteString;\n }\n\n if (p.encKey == null) {\n p.encKey = forge.util.decode64(key.encKeyB64);\n }\n p.data = forge.util.decode64(data);\n p.iv = forge.util.decode64(iv);\n p.macData = p.iv + p.data;\n if (p.macKey == null && key.macKeyB64 != null) {\n p.macKey = forge.util.decode64(key.macKeyB64);\n }\n if (mac != null) {\n p.mac = forge.util.decode64(mac);\n }\n\n // cache byte string keys for later\n if (key.meta == null) {\n key.meta = {};\n }\n if (key.meta.encKeyByteString == null) {\n key.meta.encKeyByteString = p.encKey;\n }\n if (p.macKey != null && key.meta.macKeyByteString == null) {\n key.meta.macKeyByteString = p.macKey;\n }\n\n return p;\n }\n\n aesDecryptFast(parameters: DecryptParameters): Promise {\n const dataBuffer = forge.util.createBuffer(parameters.data);\n const decipher = forge.cipher.createDecipher(\"AES-CBC\", parameters.encKey);\n decipher.start({ iv: parameters.iv });\n decipher.update(dataBuffer);\n decipher.finish();\n const val = decipher.output.toString();\n return Promise.resolve(val);\n }\n\n async aesDecrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise {\n const impKey = await this.subtle.importKey(\"raw\", key, { name: \"AES-CBC\" } as any, false, [\n \"decrypt\",\n ]);\n return await this.subtle.decrypt({ name: \"AES-CBC\", iv: iv }, impKey, data);\n }\n\n async rsaEncrypt(\n data: ArrayBuffer,\n publicKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ): Promise {\n // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n // We cannot use the proper types here.\n const rsaParams = {\n name: \"RSA-OAEP\",\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n const impKey = await this.subtle.importKey(\"spki\", publicKey, rsaParams, false, [\"encrypt\"]);\n return await this.subtle.encrypt(rsaParams, impKey, data);\n }\n\n async rsaDecrypt(\n data: ArrayBuffer,\n privateKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ): Promise {\n // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n // We cannot use the proper types here.\n const rsaParams = {\n name: \"RSA-OAEP\",\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n const impKey = await this.subtle.importKey(\"pkcs8\", privateKey, rsaParams, false, [\"decrypt\"]);\n return await this.subtle.decrypt(rsaParams, impKey, data);\n }\n\n async rsaExtractPublicKey(privateKey: ArrayBuffer): Promise {\n const rsaParams = {\n name: \"RSA-OAEP\",\n // Have to specify some algorithm\n hash: { name: this.toWebCryptoAlgorithm(\"sha1\") },\n };\n const impPrivateKey = await this.subtle.importKey(\"pkcs8\", privateKey, rsaParams, true, [\n \"decrypt\",\n ]);\n const jwkPrivateKey = await this.subtle.exportKey(\"jwk\", impPrivateKey);\n const jwkPublicKeyParams = {\n kty: \"RSA\",\n e: jwkPrivateKey.e,\n n: jwkPrivateKey.n,\n alg: \"RSA-OAEP\",\n ext: true,\n };\n const impPublicKey = await this.subtle.importKey(\"jwk\", jwkPublicKeyParams, rsaParams, true, [\n \"encrypt\",\n ]);\n return await this.subtle.exportKey(\"spki\", impPublicKey);\n }\n\n async rsaGenerateKeyPair(length: 1024 | 2048 | 4096): Promise<[ArrayBuffer, ArrayBuffer]> {\n const rsaParams = {\n name: \"RSA-OAEP\",\n modulusLength: length,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]), // 65537\n // Have to specify some algorithm\n hash: { name: this.toWebCryptoAlgorithm(\"sha1\") },\n };\n const keyPair = (await this.subtle.generateKey(rsaParams, true, [\n \"encrypt\",\n \"decrypt\",\n ])) as CryptoKeyPair;\n const publicKey = await this.subtle.exportKey(\"spki\", keyPair.publicKey);\n const privateKey = await this.subtle.exportKey(\"pkcs8\", keyPair.privateKey);\n return [publicKey, privateKey];\n }\n\n randomBytes(length: number): Promise {\n const arr = new Uint8Array(length);\n this.crypto.getRandomValues(arr);\n return Promise.resolve(arr.buffer);\n }\n\n private toBuf(value: string | ArrayBuffer): ArrayBuffer {\n let buf: ArrayBuffer;\n if (typeof value === \"string\") {\n buf = Utils.fromUtf8ToArray(value).buffer;\n } else {\n buf = value;\n }\n return buf;\n }\n\n private toByteString(value: string | ArrayBuffer): string {\n let bytes: string;\n if (typeof value === \"string\") {\n bytes = forge.util.encodeUtf8(value);\n } else {\n bytes = Utils.fromBufferToByteString(value);\n }\n return bytes;\n }\n\n private toWebCryptoAlgorithm(algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"): string {\n if (algorithm === \"md5\") {\n throw new Error(\"MD5 is not supported in WebCrypto.\");\n }\n return algorithm === \"sha1\" ? \"SHA-1\" : algorithm === \"sha256\" ? \"SHA-256\" : \"SHA-512\";\n }\n}\n","import { Directive, ElementRef, HostBinding, Input, OnChanges, OnInit } from \"@angular/core\";\n\ntype BadgeTypes = \"primary\" | \"secondary\" | \"success\" | \"danger\" | \"warning\" | \"info\";\n\nconst styles: Record = {\n primary: [\"tw-bg-primary-500\"],\n secondary: [\"tw-bg-text-muted\"],\n success: [\"tw-bg-success-500\"],\n danger: [\"tw-bg-danger-500\"],\n warning: [\"tw-bg-warning-500\"],\n info: [\"tw-bg-info-500\"],\n};\n\nconst hoverStyles: Record = {\n primary: [\"hover:tw-bg-primary-700\"],\n secondary: [\"hover:tw-bg-secondary-700\"],\n success: [\"hover:tw-bg-success-700\"],\n danger: [\"hover:tw-bg-danger-700\"],\n warning: [\"hover:tw-bg-warning-700\"],\n info: [\"hover:tw-bg-info-700\"],\n};\n\n@Directive({\n selector: \"span[bit-badge], a[bit-badge], button[bit-badge]\",\n})\nexport class BadgeComponent implements OnInit, OnChanges {\n @HostBinding(\"class\") @Input(\"class\") classList = \"\";\n\n @Input() badgeType: BadgeTypes = \"primary\";\n\n private isSpan = false;\n\n constructor(private el: ElementRef) {\n this.isSpan = el?.nativeElement?.nodeName == \"SPAN\";\n }\n\n ngOnInit(): void {\n this.classList = this.classes.join(\" \");\n }\n\n ngOnChanges() {\n this.ngOnInit();\n }\n\n get classes() {\n return [\n \"tw-inline-block\",\n \"tw-py-1\",\n \"tw-px-1.5\",\n \"tw-font-bold\",\n \"tw-leading-none\",\n \"tw-text-center\",\n \"!tw-text-contrast\",\n \"tw-rounded\",\n \"tw-border-none\",\n \"tw-box-border\",\n \"tw-whitespace-no-wrap\",\n \"tw-text-xs\",\n \"hover:tw-no-underline\",\n \"focus:tw-outline-none\",\n \"focus:tw-ring\",\n \"focus:tw-ring-offset-2\",\n \"focus:tw-ring-primary-700\",\n ]\n .concat(styles[this.badgeType])\n .concat(this.isSpan ? [] : hoverStyles[this.badgeType]);\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BadgeComponent } from \"./badge.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [BadgeComponent],\n declarations: [BadgeComponent],\n})\nexport class BadgeModule {}\n","export * from \"./badge.component\";\nexport * from \"./badge.module\";\n","import { Input, HostBinding, OnChanges, Directive, OnInit } from \"@angular/core\";\n\nexport type ButtonTypes = \"primary\" | \"secondary\" | \"danger\";\n\nconst buttonStyles: Record = {\n primary: [\n \"tw-border-primary-500\",\n \"tw-bg-primary-500\",\n \"!tw-text-contrast\",\n \"hover:tw-bg-primary-700\",\n \"hover:tw-border-primary-700\",\n \"focus:tw-bg-primary-700\",\n \"focus:tw-border-primary-700\",\n ].join(\" \"),\n secondary: [\n \"tw-bg-transparent\",\n \"tw-border-text-muted\",\n \"!tw-text-muted\",\n \"hover:tw-bg-secondary-500\",\n \"hover:tw-border-secondary-500\",\n \"hover:!tw-text-contrast\",\n \"focus:tw-bg-secondary-500\",\n \"focus:tw-border-secondary-500\",\n \"focus:!tw-text-contrast\",\n ].join(\" \"),\n danger: [\n \"tw-bg-transparent\",\n \"tw-border-danger-500\",\n \"!tw-text-danger\",\n \"hover:tw-bg-danger-500\",\n \"hover:tw-border-danger-500\",\n \"hover:!tw-text-contrast\",\n \"focus:tw-bg-danger-500\",\n \"focus:tw-border-danger-500\",\n \"focus:!tw-text-contrast\",\n ].join(\" \"),\n};\n\n@Directive({\n selector: \"button[bit-button], a[bit-button]\",\n})\nexport class ButtonComponent implements OnInit, OnChanges {\n @HostBinding(\"class\") @Input() classList = \"\";\n\n @Input()\n buttonType: ButtonTypes = \"secondary\";\n\n @Input()\n block = false;\n\n ngOnInit(): void {\n this.classList = this.classes.join(\" \");\n }\n\n ngOnChanges() {\n this.ngOnInit();\n }\n\n get classes(): string[] {\n return [\n \"tw-font-semibold\",\n \"tw-py-1.5\",\n \"tw-px-3\",\n \"tw-rounded\",\n \"tw-transition\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-text-center\",\n \"hover:tw-no-underline\",\n \"disabled:tw-bg-secondary-100\",\n \"disabled:tw-border-secondary-100\",\n \"disabled:!tw-text-main\",\n \"focus:tw-outline-none\",\n \"focus:tw-ring\",\n \"focus:tw-ring-offset-2\",\n \"focus:tw-ring-primary-700\",\n this.block ? \"tw-w-full tw-block\" : \"\",\n buttonStyles[this.buttonType ?? \"secondary\"],\n ];\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { ButtonComponent } from \"./button.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [ButtonComponent],\n declarations: [ButtonComponent],\n})\nexport class ButtonModule {}\n","export * from \"./button.component\";\nexport * from \"./button.module\";\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\n\ntype CalloutTypes = \"success\" | \"info\" | \"warning\" | \"danger\";\n\nconst defaultIcon: Record = {\n success: \"bwi-check\",\n info: \"bwi-info-circle\",\n warning: \"bwi-exclamation-triangle\",\n danger: \"bwi-error\",\n};\n\nconst defaultI18n: Partial> = {\n warning: \"warning\",\n danger: \"error\",\n};\n\n@Component({\n selector: \"bit-callout\",\n templateUrl: \"callout.component.html\",\n})\nexport class CalloutComponent implements OnInit {\n @Input() type: CalloutTypes = \"info\";\n @Input() icon: string;\n @Input() title: string;\n @Input() useAlertRole = false;\n\n constructor(private i18nService: I18nService) {}\n\n ngOnInit() {\n this.icon ??= defaultIcon[this.type];\n if (this.title == null && defaultI18n[this.type] != null) {\n this.title = this.i18nService.t(defaultI18n[this.type]);\n }\n }\n\n get calloutClass() {\n switch (this.type) {\n case \"danger\":\n return \"tw-border-l-danger-500\";\n case \"info\":\n return \"tw-border-l-info-500\";\n case \"success\":\n return \"tw-border-l-success-500\";\n case \"warning\":\n return \"tw-border-l-warning-500\";\n }\n }\n\n get headerClass() {\n switch (this.type) {\n case \"danger\":\n return \"tw-text-danger\";\n case \"info\":\n return \"tw-text-info\";\n case \"success\":\n return \"tw-text-success\";\n case \"warning\":\n return \"tw-text-warning\";\n }\n }\n}\n","\n \n \n {{ title }}\n \n \n\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { CalloutComponent } from \"./callout.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [CalloutComponent],\n declarations: [CalloutComponent],\n})\nexport class CalloutModule {}\n","export * from \"./callout.module\";\nexport * from \"./callout.component\";\n","export * from \"./badge\";\nexport * from \"./button\";\nexport * from \"./callout\";\n","import { StateService as BaseStateService } from \"jslib-common/abstractions/state.service\";\nimport { StorageOptions } from \"jslib-common/models/domain/storageOptions\";\n\nimport { Account } from \"src/models/account\";\n\nexport abstract class StateService extends BaseStateService {\n getRememberEmail: (options?: StorageOptions) => Promise;\n setRememberEmail: (value: boolean, options?: StorageOptions) => Promise;\n}\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { EmergencyAccessAcceptRequest } from \"jslib-common/models/request/emergencyAccessAcceptRequest\";\n\nimport { BaseAcceptComponent } from \"../common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-emergency\",\n templateUrl: \"accept-emergency.component.html\",\n})\nexport class AcceptEmergencyComponent extends BaseAcceptComponent {\n name: string;\n\n protected requiredParameters: string[] = [\"id\", \"name\", \"email\", \"token\"];\n protected failedShortMessage = \"emergencyInviteAcceptFailedShort\";\n protected failedMessage = \"emergencyInviteAcceptFailed\";\n\n constructor(\n router: Router,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n route: ActivatedRoute,\n private apiService: ApiService,\n stateService: StateService\n ) {\n super(router, platformUtilsService, i18nService, route, stateService);\n }\n\n async authedHandler(qParams: any): Promise {\n const request = new EmergencyAccessAcceptRequest();\n request.token = qParams.token;\n this.actionPromise = this.apiService.postEmergencyAccessAccept(qParams.id, request);\n await this.actionPromise;\n this.platformUtilService.showToast(\n \"success\",\n this.i18nService.t(\"inviteAccepted\"),\n this.i18nService.t(\"emergencyInviteAcceptedDesc\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"/vault\"]);\n }\n\n async unauthedHandler(qParams: any): Promise {\n this.name = qParams.name;\n if (this.name != null) {\n // Fix URL encoding of space issue with Angular\n this.name = this.name.replace(/\\+/g, \" \");\n }\n }\n}\n","
\n
\n \"Bitwarden\"\n

\n \n {{ \"loading\" | i18n }}\n

\n
\n
\n
\n
\n
\n

{{ \"emergencyAccess\" | i18n }}

\n
\n
\n

\n {{ name }}\n

\n

{{ \"acceptEmergencyAccess\" | i18n }}

\n
\n
\n \n {{ \"logIn\" | i18n }}\n \n \n {{ \"createAccount\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { Policy } from \"jslib-common/models/domain/policy\";\nimport { OrganizationUserAcceptRequest } from \"jslib-common/models/request/organizationUserAcceptRequest\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest\";\n\nimport { BaseAcceptComponent } from \"../common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-organization\",\n templateUrl: \"accept-organization.component.html\",\n})\nexport class AcceptOrganizationComponent extends BaseAcceptComponent {\n orgName: string;\n\n protected requiredParameters: string[] = [\"organizationId\", \"organizationUserId\", \"token\"];\n\n constructor(\n router: Router,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n route: ActivatedRoute,\n private apiService: ApiService,\n stateService: StateService,\n private cryptoService: CryptoService,\n private policyService: PolicyService,\n private logService: LogService\n ) {\n super(router, platformUtilsService, i18nService, route, stateService);\n }\n\n async authedHandler(qParams: any): Promise {\n const request = new OrganizationUserAcceptRequest();\n request.token = qParams.token;\n if (await this.performResetPasswordAutoEnroll(qParams)) {\n this.actionPromise = this.apiService\n .postOrganizationUserAccept(qParams.organizationId, qParams.organizationUserId, request)\n .then(() => {\n // Retrieve Public Key\n return this.apiService.getOrganizationKeys(qParams.organizationId);\n })\n .then(async (response) => {\n if (response == null) {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n\n const publicKey = Utils.fromB64ToArray(response.publicKey);\n\n // RSA Encrypt user's encKey.key with organization public key\n const encKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n // Create request and execute enrollment\n const resetRequest = new OrganizationUserResetPasswordEnrollmentRequest();\n resetRequest.resetPasswordKey = encryptedKey.encryptedString;\n\n return this.apiService.putOrganizationUserResetPasswordEnrollment(\n qParams.organizationId,\n await this.stateService.getUserId(),\n resetRequest\n );\n });\n } else {\n this.actionPromise = this.apiService.postOrganizationUserAccept(\n qParams.organizationId,\n qParams.organizationUserId,\n request\n );\n }\n\n await this.actionPromise;\n this.platformUtilService.showToast(\n \"success\",\n this.i18nService.t(\"inviteAccepted\"),\n this.i18nService.t(\"inviteAcceptedDesc\"),\n { timeout: 10000 }\n );\n\n await this.stateService.setOrganizationInvitation(null);\n this.router.navigate([\"/vault\"]);\n }\n\n async unauthedHandler(qParams: any): Promise {\n this.orgName = qParams.organizationName;\n if (this.orgName != null) {\n // Fix URL encoding of space issue with Angular\n this.orgName = this.orgName.replace(/\\+/g, \" \");\n }\n await this.stateService.setOrganizationInvitation(qParams);\n }\n\n private async performResetPasswordAutoEnroll(qParams: any): Promise {\n let policyList: Policy[] = null;\n try {\n const policies = await this.apiService.getPoliciesByToken(\n qParams.organizationId,\n qParams.token,\n qParams.email,\n qParams.organizationUserId\n );\n policyList = this.policyService.mapPoliciesFromToken(policies);\n } catch (e) {\n this.logService.error(e);\n }\n\n if (policyList != null) {\n const result = this.policyService.getResetPasswordPolicyOptions(\n policyList,\n qParams.organizationId\n );\n // Return true if policy enabled and auto-enroll enabled\n return result[1] && result[0].autoEnrollEnabled;\n }\n\n return false;\n }\n}\n","
\n
\n \"Bitwarden\"\n

\n \n {{ \"loading\" | i18n }}\n

\n
\n
\n
\n
\n
\n

{{ \"joinOrganization\" | i18n }}

\n
\n
\n

\n {{ orgName }}\n {{ email }}\n

\n

{{ \"joinOrganizationDesc\" | i18n }}

\n
\n
\n \n {{ \"logIn\" | i18n }}\n \n \n {{ \"createAccount\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { HintComponent as BaseHintComponent } from \"jslib-angular/components/hint.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-hint\",\n templateUrl: \"hint.component.html\",\n})\nexport class HintComponent extends BaseHintComponent {\n constructor(\n router: Router,\n i18nService: I18nService,\n apiService: ApiService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService\n ) {\n super(router, i18nService, apiService, platformUtilsService, logService);\n }\n}\n","
\n
\n
\n

{{ \"passwordHint\" | i18n }}

\n
\n
\n
\n \n \n {{ \"enterEmailToGetHint\" | i18n }}\n
\n
\n
\n \n {{ \"submit\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component, NgZone } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { LockComponent as BaseLockComponent } from \"jslib-angular/components/lock.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"jslib-common/abstractions/vaultTimeout.service\";\n\nimport { RouterService } from \"../services/router.service\";\n\n@Component({\n selector: \"app-lock\",\n templateUrl: \"lock.component.html\",\n})\nexport class LockComponent extends BaseLockComponent {\n constructor(\n router: Router,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n cryptoService: CryptoService,\n vaultTimeoutService: VaultTimeoutService,\n environmentService: EnvironmentService,\n private routerService: RouterService,\n stateService: StateService,\n apiService: ApiService,\n logService: LogService,\n keyConnectorService: KeyConnectorService,\n ngZone: NgZone\n ) {\n super(\n router,\n i18nService,\n platformUtilsService,\n messagingService,\n cryptoService,\n vaultTimeoutService,\n environmentService,\n stateService,\n apiService,\n logService,\n keyConnectorService,\n ngZone\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n this.onSuccessfulSubmit = async () => {\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl !== \"/\" && previousUrl.indexOf(\"lock\") === -1) {\n this.successRoute = previousUrl;\n }\n this.router.navigate([this.successRoute]);\n };\n }\n}\n","
\n
\n
\n

\n \n

\n

{{ \"yourVaultIsLocked\" | i18n }}

\n
\n
\n
\n \n
\n \n \n \n \n
\n \n {{ \"loggedInAsEmailOn\" | i18n: email:webVaultHostname }}\n \n
\n
\n
\n \n {{ \"unlock\" | i18n }} \n \n \n \n {{ \"logOut\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component, NgZone } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { LoginComponent as BaseLoginComponent } from \"jslib-angular/components/login.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { PolicyData } from \"jslib-common/models/data/policyData\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\nimport { Policy } from \"jslib-common/models/domain/policy\";\nimport { ListResponse } from \"jslib-common/models/response/listResponse\";\nimport { PolicyResponse } from \"jslib-common/models/response/policyResponse\";\n\nimport { StateService } from \"../../abstractions/state.service\";\n\n@Component({\n selector: \"app-login\",\n templateUrl: \"login.component.html\",\n})\nexport class LoginComponent extends BaseLoginComponent {\n showResetPasswordAutoEnrollWarning = false;\n enforcedPasswordPolicyOptions: MasterPasswordPolicyOptions;\n policies: ListResponse;\n\n constructor(\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n private route: ActivatedRoute,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n passwordGenerationService: PasswordGenerationService,\n cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService,\n private policyService: PolicyService,\n logService: LogService,\n ngZone: NgZone,\n protected stateService: StateService,\n private messagingService: MessagingService\n ) {\n super(\n authService,\n router,\n platformUtilsService,\n i18nService,\n stateService,\n environmentService,\n passwordGenerationService,\n cryptoFunctionService,\n logService,\n ngZone\n );\n this.onSuccessfulLogin = async () => {\n this.messagingService.send(\"setFullWidth\");\n };\n this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n }\n\n async ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.email != null && qParams.email.indexOf(\"@\") > -1) {\n this.email = qParams.email;\n }\n if (qParams.premium != null) {\n this.stateService.setLoginRedirect({ route: \"/settings/premium\" });\n } else if (qParams.org != null) {\n this.stateService.setLoginRedirect({\n route: \"/settings/create-organization\",\n qParams: { plan: qParams.org },\n });\n }\n\n // Are they coming from an email for sponsoring a families organization\n if (qParams.sponsorshipToken != null) {\n // After logging in redirect them to setup the families sponsorship\n this.stateService.setLoginRedirect({\n route: \"/setup/families-for-enterprise\",\n qParams: { token: qParams.sponsorshipToken },\n });\n }\n await super.ngOnInit();\n this.rememberEmail = await this.stateService.getRememberEmail();\n });\n\n const invite = await this.stateService.getOrganizationInvitation();\n if (invite != null) {\n let policyList: Policy[] = null;\n try {\n this.policies = await this.apiService.getPoliciesByToken(\n invite.organizationId,\n invite.token,\n invite.email,\n invite.organizationUserId\n );\n policyList = this.policyService.mapPoliciesFromToken(this.policies);\n } catch (e) {\n this.logService.error(e);\n }\n\n if (policyList != null) {\n const resetPasswordPolicy = this.policyService.getResetPasswordPolicyOptions(\n policyList,\n invite.organizationId\n );\n // Set to true if policy enabled and auto-enroll enabled\n this.showResetPasswordAutoEnrollWarning =\n resetPasswordPolicy[1] && resetPasswordPolicy[0].autoEnrollEnabled;\n\n this.enforcedPasswordPolicyOptions =\n await this.policyService.getMasterPasswordPolicyOptions(policyList);\n }\n }\n }\n\n async goAfterLogIn() {\n // Check master password against policy\n if (this.enforcedPasswordPolicyOptions != null) {\n const strengthResult = this.passwordGenerationService.passwordStrength(\n this.masterPassword,\n this.getPasswordStrengthUserInput()\n );\n const masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n\n // If invalid, save policies and require update\n if (\n !this.policyService.evaluateMasterPassword(\n masterPasswordScore,\n this.masterPassword,\n this.enforcedPasswordPolicyOptions\n )\n ) {\n const policiesData: { [id: string]: PolicyData } = {};\n this.policies.data.map((p) => (policiesData[p.id] = new PolicyData(p)));\n await this.policyService.replace(policiesData);\n this.router.navigate([\"update-password\"]);\n return;\n }\n }\n\n const loginRedirect = await this.stateService.getLoginRedirect();\n if (loginRedirect != null) {\n this.router.navigate([loginRedirect.route], { queryParams: loginRedirect.qParams });\n await this.stateService.setLoginRedirect(null);\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n\n async submit() {\n await this.stateService.setRememberEmail(this.rememberEmail);\n if (!this.rememberEmail) {\n await this.stateService.setRememberedEmail(null);\n }\n await super.submit();\n }\n\n private getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const atPosition = this.email.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput.concat(\n this.email\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n );\n }\n return userInput;\n }\n}\n","
\n
\n
\n \"Bitwarden\"\n

{{ \"loginOrCreateNewAccount\" | i18n }}

\n
\n
\n \n {{ \"resetPasswordAutoEnrollInviteWarning\" | i18n }}\n \n
\n \n \n
\n
\n \n
\n \n \n \n \n
\n \n {{ \"getMasterPasswordHint\" | i18n }}\n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n \n {{ \"logIn\" | i18n }} \n \n \n \n \n {{ \"createAccount\" | i18n }}\n \n
\n \n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { DeleteRecoverRequest } from \"jslib-common/models/request/deleteRecoverRequest\";\n\n@Component({\n selector: \"app-recover-delete\",\n templateUrl: \"recover-delete.component.html\",\n})\nexport class RecoverDeleteComponent {\n email: string;\n formPromise: Promise;\n\n constructor(\n private router: Router,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const request = new DeleteRecoverRequest();\n request.email = this.email.trim().toLowerCase();\n this.formPromise = this.apiService.postAccountRecoverDelete(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deleteRecoverEmailSent\")\n );\n this.router.navigate([\"/\"]);\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n
\n

{{ \"deleteAccount\" | i18n }}

\n
\n
\n

{{ \"deleteRecoverDesc\" | i18n }}

\n
\n \n \n
\n
\n
\n \n {{ \"submit\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { TwoFactorRecoveryRequest } from \"jslib-common/models/request/twoFactorRecoveryRequest\";\n\n@Component({\n selector: \"app-recover-two-factor\",\n templateUrl: \"recover-two-factor.component.html\",\n})\nexport class RecoverTwoFactorComponent {\n email: string;\n masterPassword: string;\n recoveryCode: string;\n formPromise: Promise;\n\n constructor(\n private router: Router,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private cryptoService: CryptoService,\n private authService: AuthService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const request = new TwoFactorRecoveryRequest();\n request.recoveryCode = this.recoveryCode.replace(/\\s/g, \"\").toLowerCase();\n request.email = this.email.trim().toLowerCase();\n const key = await this.authService.makePreloginKey(this.masterPassword, request.email);\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n this.formPromise = this.apiService.postTwoFactorRecover(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"twoStepRecoverDisabled\")\n );\n this.router.navigate([\"/\"]);\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n
\n

{{ \"recoverAccountTwoStep\" | i18n }}

\n
\n
\n

\n {{ \"recoverAccountTwoStepDesc\" | i18n }}\n {{ \"learnMore\" | i18n }}\n

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n {{ \"submit\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { RegisterComponent as BaseRegisterComponent } from \"jslib-angular/components/register.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { PolicyData } from \"jslib-common/models/data/policyData\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\nimport { Policy } from \"jslib-common/models/domain/policy\";\nimport { ReferenceEventRequest } from \"jslib-common/models/request/referenceEventRequest\";\n\n@Component({\n selector: \"app-register\",\n templateUrl: \"register.component.html\",\n})\nexport class RegisterComponent extends BaseRegisterComponent {\n showCreateOrgMessage = false;\n layout = \"\";\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n\n private policies: Policy[];\n\n constructor(\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n cryptoService: CryptoService,\n apiService: ApiService,\n private route: ActivatedRoute,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n private policyService: PolicyService,\n environmentService: EnvironmentService,\n logService: LogService\n ) {\n super(\n authService,\n router,\n i18nService,\n cryptoService,\n apiService,\n stateService,\n platformUtilsService,\n passwordGenerationService,\n environmentService,\n logService\n );\n }\n\n async ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe((qParams) => {\n this.referenceData = new ReferenceEventRequest();\n if (qParams.email != null && qParams.email.indexOf(\"@\") > -1) {\n this.email = qParams.email;\n }\n if (qParams.premium != null) {\n this.stateService.setLoginRedirect({ route: \"/settings/premium\" });\n } else if (qParams.org != null) {\n this.showCreateOrgMessage = true;\n this.referenceData.flow = qParams.org;\n this.stateService.setLoginRedirect({\n route: \"/settings/create-organization\",\n qParams: { plan: qParams.org },\n });\n }\n if (qParams.layout != null) {\n this.layout = this.referenceData.layout = qParams.layout;\n }\n if (qParams.reference != null) {\n this.referenceData.id = qParams.reference;\n } else {\n this.referenceData.id = (\"; \" + document.cookie)\n .split(\"; reference=\")\n .pop()\n .split(\";\")\n .shift();\n }\n // Are they coming from an email for sponsoring a families organization\n if (qParams.sponsorshipToken != null) {\n // After logging in redirect them to setup the families sponsorship\n this.stateService.setLoginRedirect({\n route: \"/setup/families-for-enterprise\",\n qParams: { token: qParams.sponsorshipToken },\n });\n }\n if (this.referenceData.id === \"\") {\n this.referenceData.id = null;\n }\n });\n const invite = await this.stateService.getOrganizationInvitation();\n if (invite != null) {\n try {\n const policies = await this.apiService.getPoliciesByToken(\n invite.organizationId,\n invite.token,\n invite.email,\n invite.organizationUserId\n );\n if (policies.data != null) {\n const policiesData = policies.data.map((p) => new PolicyData(p));\n this.policies = policiesData.map((p) => new Policy(p));\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n if (this.policies != null) {\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(\n this.policies\n );\n }\n\n await super.ngOnInit();\n }\n\n async submit() {\n if (\n this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n this.masterPasswordScore,\n this.masterPassword,\n this.enforcedPolicyOptions\n )\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordPolicyRequirementsNotMet\")\n );\n return;\n }\n\n await super.submit();\n }\n}\n","
\n \n \n
\n
\n
\n
\n
\n
\n \n\n
\n
\n
\n
\n \n \n

The Bitwarden Password Manager

\n

\n Trusted by millions of individuals, teams, and organizations worldwide for secure\n password storage and sharing.\n

\n

Store logins, secure notes, and more

\n

Collaborate and share securely

\n

Access anywhere on any device

\n

Create your account to get started

\n
\n\n \n
\n

\n Start Your Teams
Enterprise Free Trial Now\n

\n

\n Millions of individuals, teams, and organizations worldwide trust Bitwarden for secure\n password storage and sharing.\n

\n

Collaborate and share securely

\n

Deploy and manage quickly and easily

\n

Access anywhere on any device

\n

Create your account to get started

\n
\n\n \n
\n

\n Start Your Teams
Enterprise Free Trial Now\n

\n

\n Millions of individuals, teams, and organizations worldwide trust Bitwarden for secure\n password storage and sharing.\n

\n

Collaborate and share securely

\n

Deploy and manage quickly and easily

\n

Access anywhere on any device

\n

Create your account to get started

\n
\n\n \n
\n

Start Your Premium Account Now

\n

\n Millions of individuals, teams, and organizations worldwide trust Bitwarden for secure\n password storage and sharing.\n

\n

Store logins, secure notes, and more

\n

Secure your account with advanced two-step login

\n

Access anywhere on any device

\n

Create your account to get started

\n
\n
\n
\n
\n
\n
\n

{{ \"createAccount\" | i18n }}

\n
\n
\n \n {{ \"createOrganizationCreatePersonalAccount\" | i18n }}\n \n
\n \n \n {{ \"emailAddressDesc\" | i18n }}\n
\n
\n \n \n {{ \"yourNameDesc\" | i18n }}\n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n {{ \"masterPassDesc\" | i18n }}\n
\n
\n \n
\n \n \n \n \n
\n
\n
\n \n \n {{ \"masterPassHintDesc\" | i18n }}\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n \n {{ \"submit\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n \n \n \n
\n
\n \"No more excuses; start using Bitwarden today. The identity you save could be your\n own. The money definitely will be.\"\n
\n
\n
\n\n \n
\n
\n \n \n \n
\n
\n “Bitwarden boasts the backing of some of the world's best security experts and an\n attractive, easy-to-use interface”\n
\n
\n
\n \n \n \n \n \n \n \n \n \n\n","import { Component } from \"@angular/core\";\n\nimport { RemovePasswordComponent as BaseRemovePasswordComponent } from \"jslib-angular/components/remove-password.component\";\n\n@Component({\n selector: \"app-remove-password\",\n templateUrl: \"remove-password.component.html\",\n})\nexport class RemovePasswordComponent extends BaseRemovePasswordComponent {}\n","
\n
\n \"Bitwarden\"\n

\n \n {{ \"loading\" | i18n }}\n

\n
\n
\n
\n
\n
\n

{{ \"removeMasterPassword\" | i18n }}

\n
\n
\n
\n

{{ \"convertOrganizationEncryptionDesc\" | i18n: organization.name }}

\n\n \n \n {{ \"removeMasterPassword\" | i18n }}\n \n \n \n {{ \"leaveOrganization\" | i18n }}\n \n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { SetPasswordComponent as BaseSetPasswordComponent } from \"jslib-angular/components/set-password.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\n\n@Component({\n selector: \"app-set-password\",\n templateUrl: \"set-password.component.html\",\n})\nexport class SetPasswordComponent extends BaseSetPasswordComponent {\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n router: Router,\n syncService: SyncService,\n route: ActivatedRoute,\n stateService: StateService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n router,\n apiService,\n syncService,\n route,\n stateService\n );\n }\n}\n","
\n
\n
\n

{{ \"setMasterPassword\" | i18n }}

\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n {{ \"ssoCompleteRegistration\" | i18n }}\n \n {{ \"resetPasswordAutoEnrollInviteWarning\" | i18n }}\n \n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n {{ \"masterPassDesc\" | i18n }}\n
\n
\n \n
\n \n \n \n \n
\n
\n
\n \n \n {{ \"masterPassHintDesc\" | i18n }}\n
\n
\n
\n \n \n {{ \"submit\" | i18n }}\n \n \n {{ \"logOut\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { SsoComponent as BaseSsoComponent } from \"jslib-angular/components/sso.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Component({\n selector: \"app-sso\",\n templateUrl: \"sso.component.html\",\n})\nexport class SsoComponent extends BaseSsoComponent {\n constructor(\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n route: ActivatedRoute,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n cryptoFunctionService: CryptoFunctionService,\n environmentService: EnvironmentService,\n passwordGenerationService: PasswordGenerationService,\n logService: LogService\n ) {\n super(\n authService,\n router,\n i18nService,\n route,\n stateService,\n platformUtilsService,\n apiService,\n cryptoFunctionService,\n environmentService,\n passwordGenerationService,\n logService\n );\n this.redirectUri = window.location.origin + \"/sso-connector.html\";\n this.clientId = \"web\";\n }\n\n async ngOnInit() {\n super.ngOnInit();\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n } else {\n const storedIdentifier = await this.stateService.getSsoOrgIdentifier();\n if (storedIdentifier != null) {\n this.identifier = storedIdentifier;\n }\n }\n });\n }\n\n async submit() {\n await this.stateService.setSsoOrganizationIdentifier(this.identifier);\n if (this.clientId === \"browser\") {\n document.cookie = `ssoHandOffMessage=${this.i18nService.t(\"ssoHandOff\")};SameSite=strict`;\n }\n super.submit();\n }\n}\n","\n
\n
\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n

{{ \"ssoLogInWithOrgIdentifier\" | i18n }}

\n
\n \n \n
\n
\n
\n \n {{ \"logIn\" | i18n }} \n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { TwoFactorOptionsComponent as BaseTwoFactorOptionsComponent } from \"jslib-angular/components/two-factor-options.component\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { TwoFactorService } from \"jslib-common/abstractions/twoFactor.service\";\n\n@Component({\n selector: \"app-two-factor-options\",\n templateUrl: \"two-factor-options.component.html\",\n})\nexport class TwoFactorOptionsComponent extends BaseTwoFactorOptionsComponent {\n constructor(\n twoFactorService: TwoFactorService,\n router: Router,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService\n ) {\n super(twoFactorService, router, i18nService, platformUtilsService, window);\n }\n}\n","
\n
\n
\n
\n

{{ \"twoStepOptions\" | i18n }}

\n \n ×\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n

{{ p.name }}

\n {{ p.description }}\n
\n
\n \n {{ \"select\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n \"rc\n
\n
\n

{{ \"recoveryCodeTitle\" | i18n }}

\n {{ \"recoveryCodeDesc\" | i18n }}\n
\n
\n \n {{ \"select\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { TwoFactorComponent as BaseTwoFactorComponent } from \"jslib-angular/components/two-factor.component\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TwoFactorService } from \"jslib-common/abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\n\nimport { TwoFactorOptionsComponent } from \"./two-factor-options.component\";\n\n@Component({\n selector: \"app-two-factor\",\n templateUrl: \"two-factor.component.html\",\n})\nexport class TwoFactorComponent extends BaseTwoFactorComponent {\n @ViewChild(\"twoFactorOptions\", { read: ViewContainerRef, static: true })\n twoFactorOptionsModal: ViewContainerRef;\n\n constructor(\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n apiService: ApiService,\n platformUtilsService: PlatformUtilsService,\n stateService: StateService,\n environmentService: EnvironmentService,\n private modalService: ModalService,\n route: ActivatedRoute,\n logService: LogService,\n twoFactorService: TwoFactorService\n ) {\n super(\n authService,\n router,\n i18nService,\n apiService,\n platformUtilsService,\n window,\n environmentService,\n stateService,\n route,\n logService,\n twoFactorService\n );\n this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n }\n\n async anotherMethod() {\n const [modal] = await this.modalService.openViewRef(\n TwoFactorOptionsComponent,\n this.twoFactorOptionsModal,\n (comp) => {\n comp.onProviderSelected.subscribe(async (provider: TwoFactorProviderType) => {\n modal.close();\n this.selectedProviderType = provider;\n await this.init();\n });\n comp.onRecoverSelected.subscribe(() => {\n modal.close();\n });\n }\n );\n }\n\n async goAfterLogIn() {\n const loginRedirect = await this.stateService.getLoginRedirect();\n if (loginRedirect != null) {\n this.router.navigate([loginRedirect.route], { queryParams: loginRedirect.qParams });\n await this.stateService.setLoginRedirect(null);\n } else {\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.identifier,\n },\n });\n }\n }\n}\n","\n
\n \n

{{ title }}

\n
\n
\n \n

\n {{ \"enterVerificationCodeApp\" | i18n }}\n

\n

\n {{ \"enterVerificationCodeEmail\" | i18n: twoFactorEmail }}\n

\n
\n \n \n \n \n {{ \"sendVerificationCodeEmailAgain\" | i18n }}\n \n \n
\n \n \n

{{ \"insertYubiKey\" | i18n }}

\n \n \n \n \"\"\n \n
\n \n \n
\n
\n \n
\n \n
\n
\n \n
\n \n
\n \n \n
\n \n \n
\n \n

{{ \"noTwoStepProviders\" | i18n }}

\n

{{ \"noTwoStepProviders2\" | i18n }}

\n
\n
\n
\n \n
\n
\n \n \n {{ \"continue\" | i18n }}\n \n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n \n
\n
\n
\n \n\n\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { UpdatePasswordComponent as BaseUpdatePasswordComponent } from \"jslib-angular/components/update-password.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\n\n@Component({\n selector: \"app-update-password\",\n templateUrl: \"update-password.component.html\",\n})\nexport class UpdatePasswordComponent extends BaseUpdatePasswordComponent {\n constructor(\n router: Router,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n apiService: ApiService,\n logService: LogService,\n stateService: StateService,\n userVerificationService: UserVerificationService\n ) {\n super(\n router,\n i18nService,\n platformUtilsService,\n passwordGenerationService,\n policyService,\n cryptoService,\n messagingService,\n apiService,\n stateService,\n userVerificationService,\n logService\n );\n }\n}\n","
\n
\n
\n

{{ \"updateMasterPassword\" | i18n }}

\n
\n
\n {{ \"masterPasswordInvalidWarning\" | i18n }} \n \n\n \n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n \n \n \n
\n
\n
\n
\n\n","import { Component } from \"@angular/core\";\n\nimport { UpdateTempPasswordComponent as BaseUpdateTempPasswordComponent } from \"jslib-angular/components/update-temp-password.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\n\n@Component({\n selector: \"app-update-temp-password\",\n templateUrl: \"update-temp-password.component.html\",\n})\nexport class UpdateTempPasswordComponent extends BaseUpdateTempPasswordComponent {\n constructor(\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n apiService: ApiService,\n logService: LogService,\n stateService: StateService,\n syncService: SyncService\n ) {\n super(\n i18nService,\n platformUtilsService,\n passwordGenerationService,\n policyService,\n cryptoService,\n messagingService,\n apiService,\n stateService,\n syncService,\n logService\n );\n }\n}\n","
\n
\n
\n

{{ \"updateMasterPassword\" | i18n }}

\n
\n
\n {{ \"updateMasterPasswordWarning\" | i18n }} \n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n
\n
\n \n
\n \n \n \n \n
\n
\n
\n \n \n {{ \"masterPassHintDesc\" | i18n }}\n
\n
\n
\n \n \n {{ \"submit\" | i18n }}\n \n \n {{ \"logOut\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { VerifyEmailRequest } from \"jslib-common/models/request/verifyEmailRequest\";\n\n@Component({\n selector: \"app-verify-email-token\",\n templateUrl: \"verify-email-token.component.html\",\n})\nexport class VerifyEmailTokenComponent implements OnInit {\n constructor(\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private apiService: ApiService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.userId != null && qParams.token != null) {\n try {\n await this.apiService.postAccountVerifyEmailToken(\n new VerifyEmailRequest(qParams.userId, qParams.token)\n );\n if (await this.stateService.getIsAuthenticated()) {\n await this.apiService.refreshIdentityToken();\n }\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"emailVerified\"));\n this.router.navigate([\"/\"]);\n return;\n } catch (e) {\n this.logService.error(e);\n }\n }\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"emailVerifiedFailed\"));\n this.router.navigate([\"/\"]);\n });\n }\n}\n","
\n
\n \"Bitwarden\"\n

\n \n {{ \"loading\" | i18n }}\n

\n
\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { VerifyDeleteRecoverRequest } from \"jslib-common/models/request/verifyDeleteRecoverRequest\";\n\n@Component({\n selector: \"app-verify-recover-delete\",\n templateUrl: \"verify-recover-delete.component.html\",\n})\nexport class VerifyRecoverDeleteComponent implements OnInit {\n email: string;\n formPromise: Promise;\n\n private userId: string;\n private token: string;\n\n constructor(\n private router: Router,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private logService: LogService\n ) {}\n\n ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.userId != null && qParams.token != null && qParams.email != null) {\n this.userId = qParams.userId;\n this.token = qParams.token;\n this.email = qParams.email;\n } else {\n this.router.navigate([\"/\"]);\n }\n });\n }\n\n async submit() {\n try {\n const request = new VerifyDeleteRecoverRequest(this.userId, this.token);\n this.formPromise = this.apiService.postAccountRecoverDeleteToken(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"accountDeleted\"),\n this.i18nService.t(\"accountDeletedDesc\")\n );\n this.router.navigate([\"/\"]);\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n
\n

{{ \"deleteAccount\" | i18n }}

\n
\n
\n {{ \"deleteAccountWarning\" | i18n }}\n

\n {{ email }}\n

\n

{{ \"deleteRecoverConfirmDesc\" | i18n }}

\n
\n
\n \n {{ \"deleteAccount\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component, NgZone, OnDestroy, OnInit, SecurityContext } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport * as jq from \"jquery\";\nimport { IndividualConfig, ToastrService } from \"ngx-toastr\";\nimport Swal from \"sweetalert2\";\n\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { NotificationsService } from \"jslib-common/abstractions/notifications.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { SettingsService } from \"jslib-common/abstractions/settings.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { TokenService } from \"jslib-common/abstractions/token.service\";\nimport { VaultTimeoutService } from \"jslib-common/abstractions/vaultTimeout.service\";\n\nimport { DisableSendPolicy } from \"./organizations/policies/disable-send.component\";\nimport { MasterPasswordPolicy } from \"./organizations/policies/master-password.component\";\nimport { PasswordGeneratorPolicy } from \"./organizations/policies/password-generator.component\";\nimport { PersonalOwnershipPolicy } from \"./organizations/policies/personal-ownership.component\";\nimport { RequireSsoPolicy } from \"./organizations/policies/require-sso.component\";\nimport { ResetPasswordPolicy } from \"./organizations/policies/reset-password.component\";\nimport { SendOptionsPolicy } from \"./organizations/policies/send-options.component\";\nimport { SingleOrgPolicy } from \"./organizations/policies/single-org.component\";\nimport { TwoFactorAuthenticationPolicy } from \"./organizations/policies/two-factor-authentication.component\";\nimport { PolicyListService } from \"./services/policy-list.service\";\nimport { RouterService } from \"./services/router.service\";\n\nconst BroadcasterSubscriptionId = \"AppComponent\";\nconst IdleTimeout = 60000 * 10; // 10 minutes\n\n@Component({\n selector: \"app-root\",\n templateUrl: \"app.component.html\",\n})\nexport class AppComponent implements OnDestroy, OnInit {\n private lastActivity: number = null;\n private idleTimer: number = null;\n private isIdle = false;\n\n constructor(\n private broadcasterService: BroadcasterService,\n private tokenService: TokenService,\n private folderService: FolderService,\n private settingsService: SettingsService,\n private syncService: SyncService,\n private passwordGenerationService: PasswordGenerationService,\n private cipherService: CipherService,\n private authService: AuthService,\n private router: Router,\n private toastrService: ToastrService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private ngZone: NgZone,\n private vaultTimeoutService: VaultTimeoutService,\n private cryptoService: CryptoService,\n private collectionService: CollectionService,\n private sanitizer: DomSanitizer,\n private searchService: SearchService,\n private notificationsService: NotificationsService,\n private routerService: RouterService,\n private stateService: StateService,\n private eventService: EventService,\n private policyService: PolicyService,\n protected policyListService: PolicyListService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n ngOnInit() {\n this.ngZone.runOutsideAngular(() => {\n window.onmousemove = () => this.recordActivity();\n window.onmousedown = () => this.recordActivity();\n window.ontouchstart = () => this.recordActivity();\n window.onclick = () => this.recordActivity();\n window.onscroll = () => this.recordActivity();\n window.onkeypress = () => this.recordActivity();\n });\n\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"loggedIn\":\n case \"loggedOut\":\n case \"unlocked\":\n this.notificationsService.updateConnection(false);\n break;\n case \"authBlocked\":\n this.router.navigate([\"/\"]);\n break;\n case \"logout\":\n this.logOut(!!message.expired);\n break;\n case \"lockVault\":\n await this.vaultTimeoutService.lock();\n break;\n case \"locked\":\n this.notificationsService.updateConnection(false);\n this.router.navigate([\"lock\"]);\n break;\n case \"lockedUrl\":\n window.setTimeout(() => this.routerService.setPreviousUrl(message.url), 500);\n break;\n case \"syncStarted\":\n break;\n case \"syncCompleted\":\n break;\n case \"upgradeOrganization\": {\n const upgradeConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"upgradeOrganizationDesc\"),\n this.i18nService.t(\"upgradeOrganization\"),\n this.i18nService.t(\"upgradeOrganization\"),\n this.i18nService.t(\"cancel\")\n );\n if (upgradeConfirmed) {\n this.router.navigate([\n \"organizations\",\n message.organizationId,\n \"settings\",\n \"billing\",\n ]);\n }\n break;\n }\n case \"premiumRequired\": {\n const premiumConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"premiumRequiredDesc\"),\n this.i18nService.t(\"premiumRequired\"),\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"cancel\")\n );\n if (premiumConfirmed) {\n this.router.navigate([\"settings/premium\"]);\n }\n break;\n }\n case \"emailVerificationRequired\": {\n const emailVerificationConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"emailVerificationRequiredDesc\"),\n this.i18nService.t(\"emailVerificationRequired\"),\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"cancel\")\n );\n if (emailVerificationConfirmed) {\n this.platformUtilsService.launchUri(\n \"https://bitwarden.com/help/create-bitwarden-account/\"\n );\n }\n break;\n }\n case \"showToast\":\n if (typeof message.text === \"string\" && typeof crypto.subtle === 'undefined') {\n message.title=\"This browser requires HTTPS to use the web vault\";\n message.text=\"Check the Vaultwarden wiki for details on how to enable it\";\n }\n this.showToast(message);\n break;\n case \"setFullWidth\":\n this.setFullWidth();\n break;\n case \"convertAccountToKeyConnector\":\n this.router.navigate([\"/remove-password\"]);\n break;\n default:\n break;\n }\n });\n });\n\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n const modals = Array.from(document.querySelectorAll(\".modal\"));\n for (const modal of modals) {\n (jq(modal) as any).modal(\"hide\");\n }\n\n if (document.querySelector(\".swal-modal\") != null) {\n Swal.close(undefined);\n }\n }\n });\n\n this.policyListService.addPolicies([\n new TwoFactorAuthenticationPolicy(),\n new MasterPasswordPolicy(),\n new PasswordGeneratorPolicy(),\n new SingleOrgPolicy(),\n new RequireSsoPolicy(),\n new PersonalOwnershipPolicy(),\n new DisableSendPolicy(),\n new SendOptionsPolicy(),\n new ResetPasswordPolicy(),\n ]);\n\n this.setFullWidth();\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n private async logOut(expired: boolean) {\n await this.eventService.uploadEvents();\n const userId = await this.stateService.getUserId();\n await Promise.all([\n this.eventService.clearEvents(),\n this.syncService.setLastSync(new Date(0)),\n this.cryptoService.clearKeys(),\n this.settingsService.clear(userId),\n this.cipherService.clear(userId),\n this.folderService.clear(userId),\n this.collectionService.clear(userId),\n this.policyService.clear(userId),\n this.passwordGenerationService.clear(),\n this.keyConnectorService.clear(),\n ]);\n\n this.searchService.clearIndex();\n this.authService.logOut(async () => {\n if (expired) {\n this.platformUtilsService.showToast(\n \"warning\",\n this.i18nService.t(\"loggedOut\"),\n this.i18nService.t(\"loginExpired\")\n );\n }\n\n await this.stateService.clean({ userId: userId });\n Swal.close();\n this.router.navigate([\"/\"]);\n });\n }\n\n private async recordActivity() {\n const now = new Date().getTime();\n if (this.lastActivity != null && now - this.lastActivity < 250) {\n return;\n }\n\n this.lastActivity = now;\n this.stateService.setLastActive(now);\n // Idle states\n if (this.isIdle) {\n this.isIdle = false;\n this.idleStateChanged();\n }\n if (this.idleTimer != null) {\n window.clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n this.idleTimer = window.setTimeout(() => {\n if (!this.isIdle) {\n this.isIdle = true;\n this.idleStateChanged();\n }\n }, IdleTimeout);\n }\n\n private showToast(msg: any) {\n let message = \"\";\n\n const options: Partial = {};\n\n if (typeof msg.text === \"string\") {\n message = msg.text;\n } else if (msg.text.length === 1) {\n message = msg.text[0];\n } else {\n msg.text.forEach(\n (t: string) =>\n (message += \"

\" + this.sanitizer.sanitize(SecurityContext.HTML, t) + \"

\")\n );\n options.enableHtml = true;\n }\n if (msg.options != null) {\n if (msg.options.trustedHtml === true) {\n options.enableHtml = true;\n }\n if (msg.options.timeout != null && msg.options.timeout > 0) {\n options.timeOut = msg.options.timeout;\n }\n }\n\n this.toastrService.show(message, msg.title, options, \"toast-\" + msg.type);\n }\n\n private idleStateChanged() {\n if (this.isIdle) {\n this.notificationsService.disconnectFromInactivity();\n } else {\n this.notificationsService.reconnectFromActivity();\n }\n }\n\n private async setFullWidth() {\n const enableFullWidth = await this.stateService.getEnableFullWidth();\n if (enableFullWidth) {\n document.body.classList.add(\"full-width\");\n } else {\n document.body.classList.remove(\"full-width\");\n }\n }\n}\n","\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { BrowserAnimationsModule } from \"@angular/platform-browser/animations\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\n\nimport { AppComponent } from \"./app.component\";\nimport { OssRoutingModule } from \"./oss-routing.module\";\nimport { OssModule } from \"./oss.module\";\nimport { ServicesModule } from \"./services/services.module\";\nimport { WildcardRoutingModule } from \"./wildcard-routing.module\";\n\n@NgModule({\n imports: [\n OssModule,\n BrowserAnimationsModule,\n FormsModule,\n ServicesModule,\n InfiniteScrollModule,\n DragDropModule,\n OssRoutingModule,\n WildcardRoutingModule, // Needs to be last to catch all non-existing routes\n ],\n declarations: [AppComponent],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Directive()\nexport abstract class BaseAcceptComponent implements OnInit {\n loading = true;\n authed = false;\n email: string;\n actionPromise: Promise;\n\n protected requiredParameters: string[] = [];\n protected failedShortMessage = \"inviteAcceptFailedShort\";\n protected failedMessage = \"inviteAcceptFailed\";\n\n constructor(\n protected router: Router,\n protected platformUtilService: PlatformUtilsService,\n protected i18nService: I18nService,\n protected route: ActivatedRoute,\n protected stateService: StateService\n ) {}\n\n abstract authedHandler(qParams: any): Promise;\n abstract unauthedHandler(qParams: any): Promise;\n\n ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n await this.stateService.setLoginRedirect(null);\n let error = this.requiredParameters.some((e) => qParams?.[e] == null || qParams[e] === \"\");\n let errorMessage: string = null;\n if (!error) {\n this.authed = await this.stateService.getIsAuthenticated();\n\n if (this.authed) {\n try {\n await this.authedHandler(qParams);\n } catch (e) {\n error = true;\n errorMessage = e.message;\n }\n } else {\n await this.stateService.setLoginRedirect({\n route: this.getRedirectRoute(),\n qParams: qParams,\n });\n\n this.email = qParams.email;\n await this.unauthedHandler(qParams);\n }\n }\n\n if (error) {\n const message =\n errorMessage != null\n ? this.i18nService.t(this.failedShortMessage, errorMessage)\n : this.i18nService.t(this.failedMessage);\n this.platformUtilService.showToast(\"error\", null, message, { timeout: 10000 });\n this.router.navigate([\"/\"]);\n }\n\n this.loading = false;\n });\n }\n\n getRedirectRoute() {\n const urlTree = this.router.parseUrl(this.router.url);\n urlTree.queryParams = {};\n return urlTree.toString();\n }\n}\n","import { Directive } from \"@angular/core\";\n\nimport { ExportService } from \"jslib-common/abstractions/export.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { EventResponse } from \"jslib-common/models/response/eventResponse\";\nimport { ListResponse } from \"jslib-common/models/response/listResponse\";\nimport { EventView } from \"jslib-common/models/view/eventView\";\n\nimport { EventService } from \"src/app/services/event.service\";\n\n@Directive()\nexport abstract class BaseEventsComponent {\n loading = true;\n loaded = false;\n events: EventView[];\n start: string;\n end: string;\n dirtyDates = true;\n continuationToken: string;\n refreshPromise: Promise;\n exportPromise: Promise;\n morePromise: Promise;\n\n abstract readonly exportFileName: string;\n\n constructor(\n protected eventService: EventService,\n protected i18nService: I18nService,\n protected exportService: ExportService,\n protected platformUtilsService: PlatformUtilsService,\n protected logService: LogService\n ) {\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n }\n\n async exportEvents() {\n if (this.appApiPromiseUnfulfilled() || this.dirtyDates) {\n return;\n }\n\n this.loading = true;\n\n const dates = this.parseDates();\n if (dates == null) {\n return;\n }\n\n try {\n this.exportPromise = this.export(dates[0], dates[1]);\n\n await this.exportPromise;\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n\n this.exportPromise = null;\n this.loading = false;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.appApiPromiseUnfulfilled()) {\n return;\n }\n\n const dates = this.parseDates();\n if (dates == null) {\n return;\n }\n\n this.loading = true;\n let events: EventView[] = [];\n try {\n const promise = this.loadAndParseEvents(\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n const result = await promise;\n this.continuationToken = result.continuationToken;\n events = result.events;\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.dirtyDates = false;\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n\n protected abstract requestEvents(\n startDate: string,\n endDate: string,\n continuationToken: string\n ): Promise>;\n protected abstract getUserName(r: EventResponse, userId: string): { name: string; email: string };\n\n protected async loadAndParseEvents(\n startDate: string,\n endDate: string,\n continuationToken: string\n ) {\n const response = await this.requestEvents(startDate, endDate, continuationToken);\n\n const events = await Promise.all(\n response.data.map(async (r) => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = await this.eventService.getEventInfo(r);\n const user = this.getUserName(r, userId);\n return new EventView({\n message: eventInfo.message,\n humanReadableMessage: eventInfo.humanReadableMessage,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: user != null ? user.name : this.i18nService.t(\"unknown\"),\n userEmail: user != null ? user.email : \"\",\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n });\n })\n );\n return { continuationToken: response.continuationToken, events: events };\n }\n\n protected parseDates() {\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidDateRange\")\n );\n return null;\n }\n return dates;\n }\n\n protected appApiPromiseUnfulfilled() {\n return this.refreshPromise != null || this.morePromise != null || this.exportPromise != null;\n }\n\n private async export(start: string, end: string) {\n let continuationToken = this.continuationToken;\n let events = [].concat(this.events);\n\n while (continuationToken != null) {\n const result = await this.loadAndParseEvents(start, end, continuationToken);\n continuationToken = result.continuationToken;\n events = events.concat(result.events);\n }\n\n const data = await this.exportService.getEventExport(events);\n const fileName = this.exportService.getFileName(this.exportFileName, \"csv\");\n this.platformUtilsService.saveFile(window, data, { type: \"text/plain\" }, fileName);\n }\n}\n","import { Directive, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { SearchPipe } from \"jslib-angular/pipes/search.pipe\";\nimport { UserNamePipe } from \"jslib-angular/pipes/user-name.pipe\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ValidationService } from \"jslib-angular/services/validation.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"jslib-common/enums/organizationUserType\";\nimport { ProviderUserStatusType } from \"jslib-common/enums/providerUserStatusType\";\nimport { ProviderUserType } from \"jslib-common/enums/providerUserType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { ListResponse } from \"jslib-common/models/response/listResponse\";\nimport { OrganizationUserUserDetailsResponse } from \"jslib-common/models/response/organizationUserResponse\";\nimport { ProviderUserUserDetailsResponse } from \"jslib-common/models/response/provider/providerUserResponse\";\n\nimport { UserConfirmComponent } from \"../organizations/manage/user-confirm.component\";\n\ntype StatusType = OrganizationUserStatusType | ProviderUserStatusType;\n\nconst MaxCheckedCount = 500;\n\n@Directive()\nexport abstract class BasePeopleComponent<\n UserType extends ProviderUserUserDetailsResponse | OrganizationUserUserDetailsResponse\n> {\n @ViewChild(\"confirmTemplate\", { read: ViewContainerRef, static: true })\n confirmModalRef: ViewContainerRef;\n\n get allCount() {\n return this.allUsers != null ? this.allUsers.length : 0;\n }\n\n get invitedCount() {\n return this.statusMap.has(this.userStatusType.Invited)\n ? this.statusMap.get(this.userStatusType.Invited).length\n : 0;\n }\n\n get acceptedCount() {\n return this.statusMap.has(this.userStatusType.Accepted)\n ? this.statusMap.get(this.userStatusType.Accepted).length\n : 0;\n }\n\n get confirmedCount() {\n return this.statusMap.has(this.userStatusType.Confirmed)\n ? this.statusMap.get(this.userStatusType.Confirmed).length\n : 0;\n }\n\n get showConfirmUsers(): boolean {\n return (\n this.allUsers != null &&\n this.statusMap != null &&\n this.allUsers.length > 1 &&\n this.confirmedCount > 0 &&\n this.confirmedCount < 3 &&\n this.acceptedCount > 0\n );\n }\n\n get showBulkConfirmUsers(): boolean {\n return this.acceptedCount > 0;\n }\n\n abstract userType: typeof OrganizationUserType | typeof ProviderUserType;\n abstract userStatusType: typeof OrganizationUserStatusType | typeof ProviderUserStatusType;\n\n loading = true;\n statusMap = new Map();\n status: StatusType;\n users: UserType[] = [];\n pagedUsers: UserType[] = [];\n searchText: string;\n actionPromise: Promise;\n\n protected allUsers: UserType[] = [];\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedUsersCount = 0;\n\n constructor(\n protected apiService: ApiService,\n private searchService: SearchService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected cryptoService: CryptoService,\n protected validationService: ValidationService,\n protected modalService: ModalService,\n private logService: LogService,\n private searchPipe: SearchPipe,\n protected userNamePipe: UserNamePipe,\n protected stateService: StateService\n ) {}\n\n abstract edit(user: UserType): void;\n abstract getUsers(): Promise>;\n abstract deleteUser(id: string): Promise;\n abstract reinviteUser(id: string): Promise;\n abstract confirmUser(user: UserType, publicKey: Uint8Array): Promise;\n\n async load() {\n const response = await this.getUsers();\n this.statusMap.clear();\n for (const status of Utils.iterateEnum(this.userStatusType)) {\n this.statusMap.set(status, []);\n }\n\n this.allUsers = response.data != null && response.data.length > 0 ? response.data : [];\n this.allUsers.sort(Utils.getSortFunction(this.i18nService, \"email\"));\n this.allUsers.forEach((u) => {\n if (!this.statusMap.has(u.status)) {\n this.statusMap.set(u.status, [u]);\n } else {\n this.statusMap.get(u.status).push(u);\n }\n });\n this.filter(this.status);\n this.loading = false;\n }\n\n filter(status: StatusType) {\n this.status = status;\n if (this.status != null) {\n this.users = this.statusMap.get(this.status);\n } else {\n this.users = this.allUsers;\n }\n // Reset checkbox selecton\n this.selectAll(false);\n this.resetPaging();\n }\n\n loadMore() {\n if (!this.users || this.users.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedUsers.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedUsersCount > this.pageSize) {\n pagedSize = this.pagedUsersCount;\n }\n if (this.users.length > pagedLength) {\n this.pagedUsers = this.pagedUsers.concat(\n this.users.slice(pagedLength, pagedLength + pagedSize)\n );\n }\n this.pagedUsersCount = this.pagedUsers.length;\n this.didScroll = this.pagedUsers.length > this.pageSize;\n }\n\n checkUser(user: OrganizationUserUserDetailsResponse, select?: boolean) {\n (user as any).checked = select == null ? !(user as any).checked : select;\n }\n\n selectAll(select: boolean) {\n if (select) {\n this.selectAll(false);\n }\n\n const filteredUsers = this.searchPipe.transform(\n this.users,\n this.searchText,\n \"name\",\n \"email\",\n \"id\"\n );\n\n const selectCount =\n select && filteredUsers.length > MaxCheckedCount ? MaxCheckedCount : filteredUsers.length;\n for (let i = 0; i < selectCount; i++) {\n this.checkUser(filteredUsers[i], select);\n }\n }\n\n async resetPaging() {\n this.pagedUsers = [];\n this.loadMore();\n }\n\n invite() {\n this.edit(null);\n }\n\n async remove(user: UserType) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.deleteWarningMessage(user),\n this.userNamePipe.transform(user),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n this.actionPromise = this.deleteUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedUserId\", this.userNamePipe.transform(user))\n );\n this.removeUser(user);\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async reinvite(user: UserType) {\n if (this.actionPromise != null) {\n return;\n }\n\n this.actionPromise = this.reinviteUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenReinvited\", this.userNamePipe.transform(user))\n );\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async confirm(user: UserType) {\n function updateUser(self: BasePeopleComponent) {\n user.status = self.userStatusType.Confirmed;\n const mapIndex = self.statusMap.get(self.userStatusType.Accepted).indexOf(user);\n if (mapIndex > -1) {\n self.statusMap.get(self.userStatusType.Accepted).splice(mapIndex, 1);\n self.statusMap.get(self.userStatusType.Confirmed).push(user);\n }\n }\n\n const confirmUser = async (publicKey: Uint8Array) => {\n try {\n this.actionPromise = this.confirmUser(user, publicKey);\n await this.actionPromise;\n updateUser(this);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenConfirmed\", this.userNamePipe.transform(user))\n );\n } catch (e) {\n this.validationService.showError(e);\n throw e;\n } finally {\n this.actionPromise = null;\n }\n };\n\n if (this.actionPromise != null) {\n return;\n }\n\n try {\n const publicKeyResponse = await this.apiService.getUserPublicKey(user.userId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n const autoConfirm = await this.stateService.getAutoConfirmFingerPrints();\n if (autoConfirm == null || !autoConfirm) {\n const [modal] = await this.modalService.openViewRef(\n UserConfirmComponent,\n this.confirmModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.userId = user != null ? user.userId : null;\n comp.publicKey = publicKey;\n comp.onConfirmedUser.subscribe(async () => {\n try {\n comp.formPromise = confirmUser(publicKey);\n await comp.formPromise;\n modal.close();\n } catch (e) {\n this.logService.error(e);\n }\n });\n }\n );\n return;\n }\n\n try {\n const fingerprint = await this.cryptoService.getFingerprint(user.userId, publicKey.buffer);\n this.logService.info(`User's fingerprint: ${fingerprint.join(\"-\")}`);\n } catch (e) {\n this.logService.error(e);\n }\n await confirmUser(publicKey);\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.users && this.users.length > this.pageSize;\n }\n\n protected deleteWarningMessage(user: UserType): string {\n return this.i18nService.t(\"removeUserConfirmation\");\n }\n\n protected getCheckedUsers() {\n return this.users.filter((u) => (u as any).checked);\n }\n\n protected removeUser(user: UserType) {\n let index = this.users.indexOf(user);\n if (index > -1) {\n this.users.splice(index, 1);\n this.resetPaging();\n }\n if (this.statusMap.has(user.status)) {\n index = this.statusMap.get(user.status).indexOf(user);\n if (index > -1) {\n this.statusMap.get(user.status).splice(index, 1);\n }\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Component({\n selector: \"app-nested-checkbox\",\n templateUrl: \"nested-checkbox.component.html\",\n})\nexport class NestedCheckboxComponent {\n @Input() parentId: string;\n @Input() checkboxes: { id: string; get: () => boolean; set: (v: boolean) => void }[];\n @Output() onSavedUser = new EventEmitter();\n @Output() onDeletedUser = new EventEmitter();\n\n get parentIndeterminate() {\n return !this.parentChecked && this.checkboxes.some((c) => c.get());\n }\n\n get parentChecked() {\n return this.checkboxes.every((c) => c.get());\n }\n\n set parentChecked(value: boolean) {\n this.checkboxes.forEach((c) => {\n c.set(value);\n });\n }\n\n pascalize(s: string) {\n return Utils.camelToPascalCase(s);\n }\n}\n","
\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { PasswordRepromptComponent as BasePasswordRepromptComponent } from \"jslib-angular/components/password-reprompt.component\";\n\n@Component({\n templateUrl: \"password-reprompt.component.html\",\n})\nexport class PasswordRepromptComponent extends BasePasswordRepromptComponent {}\n","
\n
\n
\n
\n

\n {{ \"passwordConfirmation\" | i18n }}\n

\n \n
\n
\n {{ \"passwordConfirmationDesc\" | i18n }}\n\n
\n \n
\n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n","import { Component, Input, OnChanges } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\n\n@Component({\n selector: \"app-password-strength\",\n templateUrl: \"password-strength.component.html\",\n})\nexport class PasswordStrengthComponent implements OnChanges {\n @Input() score?: number;\n @Input() showText = false;\n\n scoreWidth = 0;\n color = \"bg-danger\";\n text: string;\n\n constructor(private i18nService: I18nService) {}\n\n ngOnChanges(): void {\n this.scoreWidth = this.score == null ? 0 : (this.score + 1) * 20;\n switch (this.score) {\n case 4:\n this.color = \"bg-success\";\n this.text = this.i18nService.t(\"strong\");\n break;\n case 3:\n this.color = \"bg-primary\";\n this.text = this.i18nService.t(\"good\");\n break;\n case 2:\n this.color = \"bg-warning\";\n this.text = this.i18nService.t(\"weak\");\n break;\n default:\n this.color = \"bg-danger\";\n this.text = this.score != null ? this.i18nService.t(\"weak\") : null;\n break;\n }\n }\n}\n","
\n \n \n {{ text }}\n \n
\n\n","import { Component } from \"@angular/core\";\n\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\n\n@Component({\n selector: \"app-premium-badge\",\n template: `\n \n `,\n})\nexport class PremiumBadgeComponent {\n constructor(private messagingService: MessagingService) {}\n\n premiumRequired() {\n this.messagingService.send(\"premiumRequired\");\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-footer\",\n templateUrl: \"footer.component.html\",\n})\nexport class FooterComponent implements OnInit {\n version: string;\n year = \"2015\";\n\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n async ngOnInit() {\n this.year = new Date().getFullYear().toString();\n this.version = await this.platformUtilsService.getApplicationVersion();\n }\n}\n","
\n
\n
© {{ year }}, Bitwarden Inc. (Powered by Vaultwarden)
\n
\n
\n {{ \"versionNumber\" | i18n: version }}\n
\n
\n
\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-frontend-layout\",\n templateUrl: \"frontend-layout.component.html\",\n})\nexport class FrontendLayoutComponent implements OnInit, OnDestroy {\n version: string;\n year = \"2015\";\n\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n async ngOnInit() {\n this.year = new Date().getFullYear().toString();\n this.version = await this.platformUtilsService.getApplicationVersion();\n document.body.classList.add(\"layout_frontend\");\n }\n\n ngOnDestroy() {\n document.body.classList.remove(\"layout_frontend\");\n }\n}\n","\n
\n © {{ year }}, Bitwarden Inc. (Powered by Vaultwarden)
\n {{ \"versionNumber\" | i18n: version }}\n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"jslib-common/abstractions/provider.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { TokenService } from \"jslib-common/abstractions/token.service\";\nimport { Provider } from \"jslib-common/models/domain/provider\";\n\n@Component({\n selector: \"app-navbar\",\n templateUrl: \"navbar.component.html\",\n})\nexport class NavbarComponent implements OnInit {\n selfHosted = false;\n name: string;\n email: string;\n providers: Provider[] = [];\n\n constructor(\n private messagingService: MessagingService,\n private platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService,\n private providerService: ProviderService,\n private syncService: SyncService\n ) {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.name = await this.tokenService.getName();\n this.email = await this.tokenService.getEmail();\n if (this.name == null || this.name.trim() === \"\") {\n this.name = this.email;\n }\n\n // Ensure provides are loaded\n if ((await this.syncService.getLastSync()) == null) {\n await this.syncService.fullSync(false);\n }\n this.providers = await this.providerService.getAll();\n }\n\n lock() {\n this.messagingService.send(\"lockVault\");\n }\n\n logOut() {\n this.messagingService.send(\"logout\");\n }\n}\n","\n","import { Component, NgZone, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\nconst BroadcasterSubscriptionId = \"OrganizationLayoutComponent\";\n\n@Component({\n selector: \"app-organization-layout\",\n templateUrl: \"organization-layout.component.html\",\n})\nexport class OrganizationLayoutComponent implements OnInit, OnDestroy {\n organization: Organization;\n businessTokenPromise: Promise;\n private organizationId: string;\n\n constructor(\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private broadcasterService: BroadcasterService,\n private ngZone: NgZone\n ) {}\n\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n this.route.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n });\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"updatedOrgLicense\":\n await this.load();\n break;\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async load() {\n this.organization = await this.organizationService.get(this.organizationId);\n }\n\n get showMenuBar() {\n return this.showManageTab || this.showToolsTab || this.organization.isOwner;\n }\n\n get showManageTab(): boolean {\n return (\n this.organization.canManageUsers ||\n this.organization.canViewAllCollections ||\n this.organization.canViewAssignedCollections ||\n this.organization.canManageGroups ||\n this.organization.canManagePolicies ||\n this.organization.canAccessEventLogs\n );\n }\n\n get showToolsTab(): boolean {\n return this.organization.canAccessImportExport || this.organization.canAccessReports;\n }\n\n get toolsRoute(): string {\n return this.organization.canAccessImportExport\n ? \"tools/import\"\n : \"tools/exposed-passwords-report\";\n }\n\n get manageRoute(): string {\n let route: string;\n switch (true) {\n case this.organization.canManageUsers:\n route = \"manage/people\";\n break;\n case this.organization.canViewAssignedCollections || this.organization.canViewAllCollections:\n route = \"manage/collections\";\n break;\n case this.organization.canManageGroups:\n route = \"manage/groups\";\n break;\n case this.organization.canManagePolicies:\n route = \"manage/policies\";\n break;\n case this.organization.canAccessEventLogs:\n route = \"manage/events\";\n break;\n }\n return route;\n }\n}\n","\n
\n
\n
\n
\n \n
\n {{ organization.name }}\n {{ \"organization\" | i18n }}\n
\n \n
\n \n {{ \"organizationIsDisabled\" | i18n }}\n
\n
\n \n
\n \n {{ \"accessingUsingProvider\" | i18n: organization.providerName }}\n
\n
\n
\n \n
\n \n\n\n\n","import { Component, OnInit } from \"@angular/core\";\n\n@Component({\n selector: \"app-user-layout\",\n templateUrl: \"user-layout.component.html\",\n})\nexport class UserLayoutComponent implements OnInit {\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n }\n}\n","\n\n\n","import { enableProdMode } from \"@angular/core\";\nimport { platformBrowserDynamic } from \"@angular/platform-browser-dynamic\";\n\nimport \"bootstrap\";\nimport \"jquery\";\nimport \"popper.js\";\n\nrequire(\"../scss/styles.scss\");\nrequire(\"../scss/tailwind.css\");\n\nimport { AppModule } from \"./app.module\";\n\nif (process.env.NODE_ENV === \"production\") {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, { preserveWhitespaces: true });\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { OrganizationUserBulkConfirmRequest } from \"jslib-common/models/request/organizationUserBulkConfirmRequest\";\nimport { OrganizationUserBulkRequest } from \"jslib-common/models/request/organizationUserBulkRequest\";\n\nimport { BulkUserDetails } from \"./bulk-status.component\";\n\n@Component({\n selector: \"app-bulk-confirm\",\n templateUrl: \"bulk-confirm.component.html\",\n})\nexport class BulkConfirmComponent implements OnInit {\n @Input() organizationId: string;\n @Input() users: BulkUserDetails[];\n\n excludedUsers: BulkUserDetails[];\n filteredUsers: BulkUserDetails[];\n publicKeys: Map = new Map();\n fingerprints: Map = new Map();\n statuses: Map = new Map();\n\n loading = true;\n done = false;\n error: string;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n this.excludedUsers = this.users.filter((u) => !this.isAccepted(u));\n this.filteredUsers = this.users.filter((u) => this.isAccepted(u));\n\n if (this.filteredUsers.length <= 0) {\n this.done = true;\n }\n\n const response = await this.getPublicKeys();\n\n for (const entry of response.data) {\n const publicKey = Utils.fromB64ToArray(entry.key);\n const fingerprint = await this.cryptoService.getFingerprint(entry.userId, publicKey.buffer);\n if (fingerprint != null) {\n this.publicKeys.set(entry.id, publicKey);\n this.fingerprints.set(entry.id, fingerprint.join(\"-\"));\n }\n }\n\n this.loading = false;\n }\n\n async submit() {\n this.loading = true;\n try {\n const key = await this.getCryptoKey();\n const userIdsWithKeys: any[] = [];\n for (const user of this.filteredUsers) {\n const publicKey = this.publicKeys.get(user.id);\n if (publicKey == null) {\n continue;\n }\n const encryptedKey = await this.cryptoService.rsaEncrypt(key.key, publicKey.buffer);\n userIdsWithKeys.push({\n id: user.id,\n key: encryptedKey.encryptedString,\n });\n }\n const response = await this.postConfirmRequest(userIdsWithKeys);\n\n response.data.forEach((entry) => {\n const error = entry.error !== \"\" ? entry.error : this.i18nService.t(\"bulkConfirmMessage\");\n this.statuses.set(entry.id, error);\n });\n\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n this.loading = false;\n }\n\n protected isAccepted(user: BulkUserDetails) {\n return user.status === OrganizationUserStatusType.Accepted;\n }\n\n protected async getPublicKeys() {\n const request = new OrganizationUserBulkRequest(this.filteredUsers.map((user) => user.id));\n return await this.apiService.postOrganizationUsersPublicKey(this.organizationId, request);\n }\n\n protected getCryptoKey() {\n return this.cryptoService.getOrgKey(this.organizationId);\n }\n\n protected async postConfirmRequest(userIdsWithKeys: any[]) {\n const request = new OrganizationUserBulkConfirmRequest(userIdsWithKeys);\n return await this.apiService.postOrganizationUserBulkConfirm(this.organizationId, request);\n }\n}\n","\n","import { Component, Input } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { OrganizationUserBulkRequest } from \"jslib-common/models/request/organizationUserBulkRequest\";\n\nimport { BulkUserDetails } from \"./bulk-status.component\";\n\n@Component({\n selector: \"app-bulk-remove\",\n templateUrl: \"bulk-remove.component.html\",\n})\nexport class BulkRemoveComponent {\n @Input() organizationId: string;\n @Input() users: BulkUserDetails[];\n\n statuses: Map = new Map();\n\n loading = false;\n done = false;\n error: string;\n\n constructor(protected apiService: ApiService, protected i18nService: I18nService) {}\n\n async submit() {\n this.loading = true;\n try {\n const response = await this.deleteUsers();\n\n response.data.forEach((entry) => {\n const error = entry.error !== \"\" ? entry.error : this.i18nService.t(\"bulkRemovedMessage\");\n this.statuses.set(entry.id, error);\n });\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n\n this.loading = false;\n }\n\n protected async deleteUsers() {\n const request = new OrganizationUserBulkRequest(this.users.map((user) => user.id));\n return await this.apiService.deleteManyOrganizationUsers(this.organizationId, request);\n }\n}\n","
\n
\n
\n
\n

\n {{ \"removeUsers\" | i18n }}\n

\n \n ×\n \n
\n
\n \n {{ \"noSelectedUsersApplicable\" | i18n }}\n \n \n {{ error }}\n \n \n 0 && !error\">\n {{ \"removeUsersWarning\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}
\n \n \n \n {{ user.email }}\n {{ user.name }}\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}{{ \"status\" | i18n }}
\n \n \n \n {{ user.email }}\n {{ user.name }}\n \n {{ statuses.get(user.id) }}\n \n {{ \"bulkFilteredMessage\" | i18n }}\n
\n
\n
\n
\n 0\"\n [disabled]=\"loading\"\n (click)=\"submit()\"\n >\n \n {{ \"removeUsers\" | i18n }}\n \n \n
\n
\n
\n
\n","
\n
\n
\n
\n

\n {{ \"bulkConfirmStatus\" | i18n }}\n

\n \n ×\n \n
\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}{{ \"status\" | i18n }}
\n \n \n {{ item.user.email }}\n {{ item.user.name }}\n \n {{ item.message }}\n \n {{ item.message }}\n
\n
\n
\n \n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { ProviderUserStatusType } from \"jslib-common/enums/providerUserStatusType\";\n\nexport interface BulkUserDetails {\n id: string;\n name: string;\n email: string;\n status: OrganizationUserStatusType | ProviderUserStatusType;\n}\n\ntype BulkStatusEntry = {\n user: BulkUserDetails;\n error: boolean;\n message: string;\n};\n\n@Component({\n selector: \"app-bulk-status\",\n templateUrl: \"bulk-status.component.html\",\n})\nexport class BulkStatusComponent {\n users: BulkStatusEntry[];\n loading = false;\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { CollectionRequest } from \"jslib-common/models/request/collectionRequest\";\nimport { SelectionReadOnlyRequest } from \"jslib-common/models/request/selectionReadOnlyRequest\";\nimport { GroupResponse } from \"jslib-common/models/response/groupResponse\";\n\n@Component({\n selector: \"app-collection-add-edit\",\n templateUrl: \"collection-add-edit.component.html\",\n})\nexport class CollectionAddEditComponent implements OnInit {\n @Input() collectionId: string;\n @Input() organizationId: string;\n @Input() canSave: boolean;\n @Input() canDelete: boolean;\n @Output() onSavedCollection = new EventEmitter();\n @Output() onDeletedCollection = new EventEmitter();\n\n loading = true;\n editMode = false;\n accessGroups = false;\n title: string;\n name: string;\n externalId: string;\n groups: GroupResponse[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n\n private orgKey: SymmetricCryptoKey;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private logService: LogService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n const organization = await this.organizationService.get(this.organizationId);\n this.accessGroups = organization.useGroups;\n this.editMode = this.loading = this.collectionId != null;\n if (this.accessGroups) {\n const groupsResponse = await this.apiService.getGroups(this.organizationId);\n this.groups = groupsResponse.data\n .map((r) => r)\n .sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n this.orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editCollection\");\n try {\n const collection = await this.apiService.getCollectionDetails(\n this.organizationId,\n this.collectionId\n );\n this.name = await this.cryptoService.decryptToUtf8(\n new EncString(collection.name),\n this.orgKey\n );\n this.externalId = collection.externalId;\n if (collection.groups != null && this.groups.length > 0) {\n collection.groups.forEach((s) => {\n const group = this.groups.filter((g) => !g.accessAll && g.id === s.id);\n if (group != null && group.length > 0) {\n (group[0] as any).checked = true;\n (group[0] as any).readOnly = s.readOnly;\n (group[0] as any).hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"addCollection\");\n }\n\n this.groups.forEach((g) => {\n if (g.accessAll) {\n (g as any).checked = true;\n }\n });\n\n this.loading = false;\n }\n\n check(g: GroupResponse, select?: boolean) {\n if (g.accessAll) {\n return;\n }\n (g as any).checked = select == null ? !(g as any).checked : select;\n if (!(g as any).checked) {\n (g as any).readOnly = false;\n (g as any).hidePasswords = false;\n }\n }\n\n selectAll(select: boolean) {\n this.groups.forEach((g) => this.check(g, select));\n }\n\n async submit() {\n if (this.orgKey == null) {\n throw new Error(\"No encryption key for this organization.\");\n }\n\n const request = new CollectionRequest();\n request.name = (await this.cryptoService.encrypt(this.name, this.orgKey)).encryptedString;\n request.externalId = this.externalId;\n request.groups = this.groups\n .filter((g) => (g as any).checked && !g.accessAll)\n .map(\n (g) => new SelectionReadOnlyRequest(g.id, !!(g as any).readOnly, !!(g as any).hidePasswords)\n );\n\n try {\n if (this.editMode) {\n this.formPromise = this.apiService.putCollection(\n this.organizationId,\n this.collectionId,\n request\n );\n } else {\n this.formPromise = this.apiService.postCollection(this.organizationId, request);\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedCollectionId\" : \"createdCollectionId\", this.name)\n );\n this.onSavedCollection.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteCollectionConfirmation\"),\n this.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteCollection(this.organizationId, this.collectionId);\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedCollectionId\", this.name)\n );\n this.onDeletedCollection.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ title }}

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n
\n \n \n
\n
\n \n \n {{ \"externalIdDesc\" | i18n }}\n
\n \n

\n {{ \"groupAccess\" | i18n }}\n
\n \n \n
\n

\n
\n {{ \"noGroupsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 {{ \"name\" | i18n }}{{ \"hidePasswords\" | i18n }}{{ \"readOnly\" | i18n }}
\n \n \n {{ g.name }}\n \n \n {{ \"groupAccessAllItems\" | i18n }}\n \n \n \n \n \n
\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { CollectionData } from \"jslib-common/models/data/collectionData\";\nimport { Collection } from \"jslib-common/models/domain/collection\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport {\n CollectionDetailsResponse,\n CollectionResponse,\n} from \"jslib-common/models/response/collectionResponse\";\nimport { ListResponse } from \"jslib-common/models/response/listResponse\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\nimport { CollectionAddEditComponent } from \"./collection-add-edit.component\";\nimport { EntityUsersComponent } from \"./entity-users.component\";\n\n@Component({\n selector: \"app-org-manage-collections\",\n templateUrl: \"collections.component.html\",\n})\nexport class CollectionsComponent implements OnInit {\n @ViewChild(\"addEdit\", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild(\"usersTemplate\", { read: ViewContainerRef, static: true })\n usersModalRef: ViewContainerRef;\n\n loading = true;\n organization: Organization;\n canCreate = false;\n organizationId: string;\n collections: CollectionView[];\n assignedCollections: CollectionView[];\n pagedCollections: CollectionView[];\n searchText: string;\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedCollectionsCount = 0;\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n private collectionService: CollectionService,\n private modalService: ModalService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private searchService: SearchService,\n private logService: LogService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n this.searchText = qParams.search;\n });\n });\n }\n\n async load() {\n this.organization = await this.organizationService.get(this.organizationId);\n this.canCreate = this.organization.canCreateNewCollections;\n\n const decryptCollections = async (r: ListResponse) => {\n const collections = r.data\n .filter((c) => c.organizationId === this.organizationId)\n .map((d) => new Collection(new CollectionData(d as CollectionDetailsResponse)));\n return await this.collectionService.decryptMany(collections);\n };\n\n if (this.organization.canViewAssignedCollections) {\n const response = await this.apiService.getUserCollections();\n this.assignedCollections = await decryptCollections(response);\n }\n\n if (this.organization.canViewAllCollections) {\n const response = await this.apiService.getCollections(this.organizationId);\n this.collections = await decryptCollections(response);\n } else {\n this.collections = this.assignedCollections;\n }\n\n this.resetPaging();\n this.loading = false;\n }\n\n loadMore() {\n if (!this.collections || this.collections.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedCollections.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedCollectionsCount > this.pageSize) {\n pagedSize = this.pagedCollectionsCount;\n }\n if (this.collections.length > pagedLength) {\n this.pagedCollections = this.pagedCollections.concat(\n this.collections.slice(pagedLength, pagedLength + pagedSize)\n );\n }\n this.pagedCollectionsCount = this.pagedCollections.length;\n this.didScroll = this.pagedCollections.length > this.pageSize;\n }\n\n async edit(collection: CollectionView) {\n const canCreate = collection == null && this.canCreate;\n const canEdit = collection != null && this.canEdit(collection);\n const canDelete = collection != null && this.canDelete(collection);\n\n if (!(canCreate || canEdit || canDelete)) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"missingPermissions\"));\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n CollectionAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.collectionId = collection != null ? collection.id : null;\n comp.canSave = canCreate || canEdit;\n comp.canDelete = canDelete;\n comp.onSavedCollection.subscribe(() => {\n modal.close();\n this.load();\n });\n comp.onDeletedCollection.subscribe(() => {\n modal.close();\n this.removeCollection(collection);\n });\n }\n );\n }\n\n add() {\n this.edit(null);\n }\n\n async delete(collection: CollectionView) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteCollectionConfirmation\"),\n collection.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteCollection(this.organizationId, collection.id);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedCollectionId\", collection.name)\n );\n this.removeCollection(collection);\n } catch (e) {\n this.logService.error(e);\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"missingPermissions\"));\n }\n }\n\n async users(collection: CollectionView) {\n const [modal] = await this.modalService.openViewRef(\n EntityUsersComponent,\n this.usersModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.entity = \"collection\";\n comp.entityId = collection.id;\n comp.entityName = collection.name;\n\n comp.onEditedUsers.subscribe(() => {\n this.load();\n modal.close();\n });\n }\n );\n }\n\n async resetPaging() {\n this.pagedCollections = [];\n this.loadMore();\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.collections && this.collections.length > this.pageSize;\n }\n\n canEdit(collection: CollectionView) {\n if (this.organization.canEditAnyCollection) {\n return true;\n }\n\n if (\n this.organization.canEditAssignedCollections &&\n this.assignedCollections.some((c) => c.id === collection.id)\n ) {\n return true;\n }\n return false;\n }\n\n canDelete(collection: CollectionView) {\n if (this.organization.canDeleteAnyCollection) {\n return true;\n }\n\n if (\n this.organization.canDeleteAssignedCollections &&\n this.assignedCollections.some((c) => c.id === collection.id)\n ) {\n return true;\n }\n return false;\n }\n\n private removeCollection(collection: CollectionView) {\n const index = this.collections.indexOf(collection);\n if (index > -1) {\n this.collections.splice(index, 1);\n this.resetPaging();\n }\n }\n}\n","
\n

{{ \"collections\" | i18n }}

\n
\n
\n \n \n
\n \n \n {{ \"newCollection\" | i18n }}\n \n
\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

{{ \"noCollectionsInList\" | i18n }}

\n \n \n \n \n
{{ c.name }}\n \n \n
\n \n \n \n
\n \n \n {{ \"users\" | i18n }}\n \n \n \n {{ \"delete\" | i18n }}\n \n
\n
\n \n \n \n \n\n\n\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { UserNamePipe } from \"jslib-angular/pipes/user-name.pipe\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { EventResponse } from \"jslib-common/models/response/eventResponse\";\nimport { ListResponse } from \"jslib-common/models/response/listResponse\";\n\nimport { EventService } from \"../../services/event.service\";\n\n@Component({\n selector: \"app-entity-events\",\n templateUrl: \"entity-events.component.html\",\n})\nexport class EntityEventsComponent implements OnInit {\n @Input() name: string;\n @Input() entity: \"user\" | \"cipher\";\n @Input() entityId: string;\n @Input() organizationId: string;\n @Input() providerId: string;\n @Input() showUser = false;\n\n loading = true;\n loaded = false;\n events: any[];\n start: string;\n end: string;\n continuationToken: string;\n refreshPromise: Promise;\n morePromise: Promise;\n\n private orgUsersUserIdMap = new Map();\n private orgUsersIdMap = new Map();\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private eventService: EventService,\n private platformUtilsService: PlatformUtilsService,\n private userNamePipe: UserNamePipe,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n await this.load();\n }\n\n async load() {\n if (this.showUser) {\n const response = await this.apiService.getOrganizationUsers(this.organizationId);\n response.data.forEach((u) => {\n const name = this.userNamePipe.transform(u);\n this.orgUsersIdMap.set(u.id, { name: name, email: u.email });\n this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n });\n }\n await this.loadEvents(true);\n this.loaded = true;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.refreshPromise != null || this.morePromise != null) {\n return;\n }\n\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidDateRange\")\n );\n return;\n }\n\n this.loading = true;\n let response: ListResponse;\n try {\n let promise: Promise;\n if (this.entity === \"user\" && this.providerId) {\n promise = this.apiService.getEventsProviderUser(\n this.providerId,\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n } else if (this.entity === \"user\") {\n promise = this.apiService.getEventsOrganizationUser(\n this.organizationId,\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n } else {\n promise = this.apiService.getEventsCipher(\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n }\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n response = await promise;\n } catch (e) {\n this.logService.error(e);\n }\n\n this.continuationToken = response.continuationToken;\n const events = await Promise.all(\n response.data.map(async (r) => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = await this.eventService.getEventInfo(r);\n const user =\n this.showUser && userId != null && this.orgUsersUserIdMap.has(userId)\n ? this.orgUsersUserIdMap.get(userId)\n : null;\n return {\n message: eventInfo.message,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: user != null ? user.name : this.showUser ? this.i18nService.t(\"unknown\") : null,\n userEmail: user != null ? user.email : this.showUser ? \"\" : null,\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n };\n })\n );\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n}\n","
\n
\n
\n
\n

\n {{ \"eventLogs\" | i18n }}\n {{ name }}\n

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n
\n
\n \n \n -\n \n \n
\n \n \n {{ \"refresh\" | i18n }}\n \n
\n
\n
\n {{ \"noEventsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"timestamp\" | i18n }}\n {{ \"device\" | i18n }}\n {{ \"user\" | i18n }}{{ \"event\" | i18n }}
{{ e.date | date: \"medium\" }}\n \n {{ e.appName }}, {{ e.ip }}\n \n {{ e.userName }}\n
\n \n \n {{ \"loadMore\" | i18n }}\n \n
\n
\n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"jslib-common/enums/organizationUserType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { SelectionReadOnlyRequest } from \"jslib-common/models/request/selectionReadOnlyRequest\";\nimport { OrganizationUserUserDetailsResponse } from \"jslib-common/models/response/organizationUserResponse\";\n\n@Component({\n selector: \"app-entity-users\",\n templateUrl: \"entity-users.component.html\",\n})\nexport class EntityUsersComponent implements OnInit {\n @Input() entity: \"group\" | \"collection\";\n @Input() entityId: string;\n @Input() entityName: string;\n @Input() organizationId: string;\n @Output() onEditedUsers = new EventEmitter();\n\n organizationUserType = OrganizationUserType;\n organizationUserStatusType = OrganizationUserStatusType;\n\n showSelected = false;\n loading = true;\n formPromise: Promise;\n selectedCount = 0;\n searchText: string;\n\n private allUsers: OrganizationUserUserDetailsResponse[] = [];\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.loadUsers();\n this.loading = false;\n }\n\n get users() {\n if (this.showSelected) {\n return this.allUsers.filter((u) => (u as any).checked);\n } else {\n return this.allUsers;\n }\n }\n\n async loadUsers() {\n const users = await this.apiService.getOrganizationUsers(this.organizationId);\n this.allUsers = users.data.map((r) => r).sort(Utils.getSortFunction(this.i18nService, \"email\"));\n if (this.entity === \"group\") {\n const response = await this.apiService.getGroupUsers(this.organizationId, this.entityId);\n if (response != null && users.data.length > 0) {\n response.forEach((s) => {\n const user = users.data.filter((u) => u.id === s);\n if (user != null && user.length > 0) {\n (user[0] as any).checked = true;\n }\n });\n }\n } else if (this.entity === \"collection\") {\n const response = await this.apiService.getCollectionUsers(this.organizationId, this.entityId);\n if (response != null && users.data.length > 0) {\n response.forEach((s) => {\n const user = users.data.filter((u) => !u.accessAll && u.id === s.id);\n if (user != null && user.length > 0) {\n (user[0] as any).checked = true;\n (user[0] as any).readOnly = s.readOnly;\n (user[0] as any).hidePasswords = s.hidePasswords;\n }\n });\n }\n }\n\n this.allUsers.forEach((u) => {\n if (this.entity === \"collection\" && u.accessAll) {\n (u as any).checked = true;\n }\n if ((u as any).checked) {\n this.selectedCount++;\n }\n });\n }\n\n check(u: OrganizationUserUserDetailsResponse) {\n if (this.entity === \"collection\" && u.accessAll) {\n return;\n }\n (u as any).checked = !(u as any).checked;\n this.selectedChanged(u);\n }\n\n selectedChanged(u: OrganizationUserUserDetailsResponse) {\n if ((u as any).checked) {\n this.selectedCount++;\n } else {\n if (this.entity === \"collection\") {\n (u as any).readOnly = false;\n (u as any).hidePasswords = false;\n }\n this.selectedCount--;\n }\n }\n\n filterSelected(showSelected: boolean) {\n this.showSelected = showSelected;\n }\n\n async submit() {\n try {\n if (this.entity === \"group\") {\n const selections = this.users.filter((u) => (u as any).checked).map((u) => u.id);\n this.formPromise = this.apiService.putGroupUsers(\n this.organizationId,\n this.entityId,\n selections\n );\n } else {\n const selections = this.users\n .filter((u) => (u as any).checked && !u.accessAll)\n .map(\n (u) =>\n new SelectionReadOnlyRequest(u.id, !!(u as any).readOnly, !!(u as any).hidePasswords)\n );\n this.formPromise = this.apiService.putCollectionUsers(\n this.organizationId,\n this.entityId,\n selections\n );\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"updatedUsers\"));\n this.onEditedUsers.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

\n {{ \"userAccess\" | i18n }}\n {{ entityName }}\n

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n \n
\n
\n \n \n
\n
\n \n {{ \"all\" | i18n }}\n \n \n {{ \"selected\" | i18n }}\n {{\n selectedCount\n }}\n \n
\n
\n \n
\n {{ \"noUsersInList\" | i18n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
  {{ \"name\" | i18n }} {{ \"userType\" | i18n }}\n {{ \"hidePasswords\" | i18n }}\n \n {{ \"readOnly\" | i18n }}\n
\n \n \n \n \n \n {{ u.email }}\n {{ \"invited\" | i18n }}\n {{ \"accepted\" | i18n }}\n {{ u.name }}\n \n \n \n {{ \"userAccessAllItems\" | i18n }}\n \n \n {{ \"owner\" | i18n }}\n {{ \"admin\" | i18n }}\n {{\n \"manager\" | i18n\n }}\n {{ \"user\" | i18n }}\n {{ \"custom\" | i18n }}\n \n \n \n \n
\n
\n
\n
\n \n \n
\n \n
\n\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { UserNamePipe } from \"jslib-angular/pipes/user-name.pipe\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { ExportService } from \"jslib-common/abstractions/export.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"jslib-common/abstractions/provider.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { EventResponse } from \"jslib-common/models/response/eventResponse\";\n\nimport { BaseEventsComponent } from \"../../common/base.events.component\";\nimport { EventService } from \"../../services/event.service\";\n\n@Component({\n selector: \"app-org-events\",\n templateUrl: \"events.component.html\",\n})\nexport class EventsComponent extends BaseEventsComponent implements OnInit {\n exportFileName = \"org-events\";\n organizationId: string;\n organization: Organization;\n\n private orgUsersUserIdMap = new Map();\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n eventService: EventService,\n i18nService: I18nService,\n exportService: ExportService,\n platformUtilsService: PlatformUtilsService,\n private router: Router,\n logService: LogService,\n private userNamePipe: UserNamePipe,\n private organizationService: OrganizationService,\n private providerService: ProviderService\n ) {\n super(eventService, i18nService, exportService, platformUtilsService, logService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n this.organization = await this.organizationService.get(this.organizationId);\n if (this.organization == null || !this.organization.useEvents) {\n this.router.navigate([\"/organizations\", this.organizationId]);\n return;\n }\n\n await this.load();\n });\n }\n\n async load() {\n const response = await this.apiService.getOrganizationUsers(this.organizationId);\n response.data.forEach((u) => {\n const name = this.userNamePipe.transform(u);\n this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n });\n\n if (this.organization.providerId != null) {\n try {\n const provider = await this.providerService.get(this.organization.providerId);\n if (\n provider != null &&\n (await this.providerService.get(this.organization.providerId)).canManageUsers\n ) {\n const providerUsersResponse = await this.apiService.getProviderUsers(\n this.organization.providerId\n );\n providerUsersResponse.data.forEach((u) => {\n const name = this.userNamePipe.transform(u);\n this.orgUsersUserIdMap.set(u.userId, {\n name: `${name} (${this.organization.providerName})`,\n email: u.email,\n });\n });\n }\n } catch (e) {\n this.logService.warning(e);\n }\n }\n\n await this.loadEvents(true);\n this.loaded = true;\n }\n\n protected requestEvents(startDate: string, endDate: string, continuationToken: string) {\n return this.apiService.getEventsOrganization(\n this.organizationId,\n startDate,\n endDate,\n continuationToken\n );\n }\n\n protected getUserName(r: EventResponse, userId: string) {\n if (userId == null) {\n return null;\n }\n\n if (this.orgUsersUserIdMap.has(userId)) {\n return this.orgUsersUserIdMap.get(userId);\n }\n\n if (r.providerId != null && r.providerId === this.organization.providerId) {\n return {\n name: this.organization.providerName,\n };\n }\n\n return null;\n }\n}\n","
\n

{{ \"eventLogs\" | i18n }}

\n
\n
\n \n \n -\n \n \n
\n
\n \n \n {{ \"refresh\" | i18n }}\n \n \n
\n \n \n {{ \"export\" | i18n }}\n \n \n
\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

{{ \"noEventsInList\" | i18n }}

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"timestamp\" | i18n }}\n {{ \"device\" | i18n }}\n {{ \"user\" | i18n }}{{ \"event\" | i18n }}
{{ e.date | date: \"medium\" }}\n \n {{ e.appName }}, {{ e.ip }}\n \n {{ e.userName }}\n
\n \n \n {{ \"loadMore\" | i18n }}\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { CollectionData } from \"jslib-common/models/data/collectionData\";\nimport { Collection } from \"jslib-common/models/domain/collection\";\nimport { GroupRequest } from \"jslib-common/models/request/groupRequest\";\nimport { SelectionReadOnlyRequest } from \"jslib-common/models/request/selectionReadOnlyRequest\";\nimport { CollectionDetailsResponse } from \"jslib-common/models/response/collectionResponse\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Component({\n selector: \"app-group-add-edit\",\n templateUrl: \"group-add-edit.component.html\",\n})\nexport class GroupAddEditComponent implements OnInit {\n @Input() groupId: string;\n @Input() organizationId: string;\n @Output() onSavedGroup = new EventEmitter();\n @Output() onDeletedGroup = new EventEmitter();\n\n loading = true;\n editMode = false;\n title: string;\n name: string;\n externalId: string;\n access: \"all\" | \"selected\" = \"selected\";\n collections: CollectionView[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.editMode = this.loading = this.groupId != null;\n await this.loadCollections();\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editGroup\");\n try {\n const group = await this.apiService.getGroupDetails(this.organizationId, this.groupId);\n this.access = group.accessAll ? \"all\" : \"selected\";\n this.name = group.name;\n this.externalId = group.externalId;\n if (group.collections != null && this.collections != null) {\n group.collections.forEach((s) => {\n const collection = this.collections.filter((c) => c.id === s.id);\n if (collection != null && collection.length > 0) {\n (collection[0] as any).checked = true;\n collection[0].readOnly = s.readOnly;\n collection[0].hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"addGroup\");\n }\n\n this.loading = false;\n }\n\n async loadCollections() {\n const response = await this.apiService.getCollections(this.organizationId);\n const collections = response.data.map(\n (r) => new Collection(new CollectionData(r as CollectionDetailsResponse))\n );\n this.collections = await this.collectionService.decryptMany(collections);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n if (!(c as any).checked) {\n c.readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.collections.forEach((c) => this.check(c, select));\n }\n\n async submit() {\n const request = new GroupRequest();\n request.name = this.name;\n request.externalId = this.externalId;\n request.accessAll = this.access === \"all\";\n if (!request.accessAll) {\n request.collections = this.collections\n .filter((c) => (c as any).checked)\n .map((c) => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));\n }\n\n try {\n if (this.editMode) {\n this.formPromise = this.apiService.putGroup(this.organizationId, this.groupId, request);\n } else {\n this.formPromise = this.apiService.postGroup(this.organizationId, request);\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedGroupId\" : \"createdGroupId\", this.name)\n );\n this.onSavedGroup.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteGroupConfirmation\"),\n this.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteGroup(this.organizationId, this.groupId);\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedGroupId\", this.name)\n );\n this.onDeletedGroup.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ title }}

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n
\n \n \n
\n
\n \n \n {{ \"externalIdDesc\" | i18n }}\n
\n

\n
\n {{ \"accessControl\" | i18n }}\n \n \n \n
\n
\n \n \n
\n

\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n  \n {{ \"name\" | i18n }}\n {{ \"hidePasswords\" | i18n }}\n {{ \"readOnly\" | i18n }}\n \n \n \n \n \n \n \n \n {{ c.name }}\n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { GroupResponse } from \"jslib-common/models/response/groupResponse\";\n\nimport { EntityUsersComponent } from \"./entity-users.component\";\nimport { GroupAddEditComponent } from \"./group-add-edit.component\";\n\n@Component({\n selector: \"app-org-groups\",\n templateUrl: \"groups.component.html\",\n})\nexport class GroupsComponent implements OnInit {\n @ViewChild(\"addEdit\", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild(\"usersTemplate\", { read: ViewContainerRef, static: true })\n usersModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n groups: GroupResponse[];\n pagedGroups: GroupResponse[];\n searchText: string;\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedGroupsCount = 0;\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n private i18nService: I18nService,\n private modalService: ModalService,\n private platformUtilsService: PlatformUtilsService,\n private router: Router,\n private searchService: SearchService,\n private logService: LogService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n const organization = await this.organizationService.get(this.organizationId);\n if (organization == null || !organization.useGroups) {\n this.router.navigate([\"/organizations\", this.organizationId]);\n return;\n }\n await this.load();\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n this.searchText = qParams.search;\n });\n });\n }\n\n async load() {\n const response = await this.apiService.getGroups(this.organizationId);\n const groups = response.data != null && response.data.length > 0 ? response.data : [];\n groups.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n this.groups = groups;\n this.resetPaging();\n this.loading = false;\n }\n\n loadMore() {\n if (!this.groups || this.groups.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedGroups.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedGroupsCount > this.pageSize) {\n pagedSize = this.pagedGroupsCount;\n }\n if (this.groups.length > pagedLength) {\n this.pagedGroups = this.pagedGroups.concat(\n this.groups.slice(pagedLength, pagedLength + pagedSize)\n );\n }\n this.pagedGroupsCount = this.pagedGroups.length;\n this.didScroll = this.pagedGroups.length > this.pageSize;\n }\n\n async edit(group: GroupResponse) {\n const [modal] = await this.modalService.openViewRef(\n GroupAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.groupId = group != null ? group.id : null;\n comp.onSavedGroup.subscribe(() => {\n modal.close();\n this.load();\n });\n comp.onDeletedGroup.subscribe(() => {\n modal.close();\n this.removeGroup(group);\n });\n }\n );\n }\n\n add() {\n this.edit(null);\n }\n\n async delete(group: GroupResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteGroupConfirmation\"),\n group.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteGroup(this.organizationId, group.id);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedGroupId\", group.name)\n );\n this.removeGroup(group);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async users(group: GroupResponse) {\n const [modal] = await this.modalService.openViewRef(\n EntityUsersComponent,\n this.usersModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.entity = \"group\";\n comp.entityId = group.id;\n comp.entityName = group.name;\n\n comp.onEditedUsers.subscribe(() => {\n modal.close();\n });\n }\n );\n }\n\n async resetPaging() {\n this.pagedGroups = [];\n this.loadMore();\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.groups && this.groups.length > this.pageSize;\n }\n\n private removeGroup(group: GroupResponse) {\n const index = this.groups.indexOf(group);\n if (index > -1) {\n this.groups.splice(index, 1);\n this.resetPaging();\n }\n }\n}\n","
\n

{{ \"groups\" | i18n }}

\n
\n
\n \n \n
\n \n
\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

{{ \"noGroupsInList\" | i18n }}

\n \n \n \n \n {{ g.name }}\n \n \n \n \n \n \n \n\n\n\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\n@Component({\n selector: \"app-org-manage\",\n templateUrl: \"manage.component.html\",\n})\nexport class ManageComponent implements OnInit {\n organization: Organization;\n accessPolicies = false;\n accessGroups = false;\n accessEvents = false;\n accessSso = false;\n\n constructor(private route: ActivatedRoute, private organizationService: OrganizationService) {}\n\n ngOnInit() {\n this.route.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.accessPolicies = this.organization.usePolicies;\n this.accessSso = this.organization.useSso;\n this.accessEvents = this.organization.useEvents;\n this.accessGroups = this.organization.useGroups;\n });\n }\n}\n","
\n
\n
\n
\n
{{ \"manage\" | i18n }}
\n
\n \n {{ \"people\" | i18n }}\n \n \n {{ \"collections\" | i18n }}\n \n \n {{ \"groups\" | i18n }}\n \n \n {{ \"policies\" | i18n }}\n \n \n {{ \"singleSignOn\" | i18n }}\n \n \n {{ \"eventLogs\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n
\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { SearchPipe } from \"jslib-angular/pipes/search.pipe\";\nimport { UserNamePipe } from \"jslib-angular/pipes/user-name.pipe\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ValidationService } from \"jslib-angular/services/validation.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"jslib-common/enums/organizationUserType\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { OrganizationKeysRequest } from \"jslib-common/models/request/organizationKeysRequest\";\nimport { OrganizationUserBulkRequest } from \"jslib-common/models/request/organizationUserBulkRequest\";\nimport { OrganizationUserConfirmRequest } from \"jslib-common/models/request/organizationUserConfirmRequest\";\nimport { ListResponse } from \"jslib-common/models/response/listResponse\";\nimport { OrganizationUserBulkResponse } from \"jslib-common/models/response/organizationUserBulkResponse\";\nimport { OrganizationUserUserDetailsResponse } from \"jslib-common/models/response/organizationUserResponse\";\n\nimport { BasePeopleComponent } from \"../../common/base.people.component\";\n\nimport { BulkConfirmComponent } from \"./bulk/bulk-confirm.component\";\nimport { BulkRemoveComponent } from \"./bulk/bulk-remove.component\";\nimport { BulkStatusComponent } from \"./bulk/bulk-status.component\";\nimport { EntityEventsComponent } from \"./entity-events.component\";\nimport { ResetPasswordComponent } from \"./reset-password.component\";\nimport { UserAddEditComponent } from \"./user-add-edit.component\";\nimport { UserGroupsComponent } from \"./user-groups.component\";\n\n@Component({\n selector: \"app-org-people\",\n templateUrl: \"people.component.html\",\n})\nexport class PeopleComponent\n extends BasePeopleComponent\n implements OnInit\n{\n @ViewChild(\"addEdit\", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild(\"groupsTemplate\", { read: ViewContainerRef, static: true })\n groupsModalRef: ViewContainerRef;\n @ViewChild(\"eventsTemplate\", { read: ViewContainerRef, static: true })\n eventsModalRef: ViewContainerRef;\n @ViewChild(\"confirmTemplate\", { read: ViewContainerRef, static: true })\n confirmModalRef: ViewContainerRef;\n @ViewChild(\"resetPasswordTemplate\", { read: ViewContainerRef, static: true })\n resetPasswordModalRef: ViewContainerRef;\n @ViewChild(\"bulkStatusTemplate\", { read: ViewContainerRef, static: true })\n bulkStatusModalRef: ViewContainerRef;\n @ViewChild(\"bulkConfirmTemplate\", { read: ViewContainerRef, static: true })\n bulkConfirmModalRef: ViewContainerRef;\n @ViewChild(\"bulkRemoveTemplate\", { read: ViewContainerRef, static: true })\n bulkRemoveModalRef: ViewContainerRef;\n\n userType = OrganizationUserType;\n userStatusType = OrganizationUserStatusType;\n\n organizationId: string;\n status: OrganizationUserStatusType = null;\n accessEvents = false;\n accessGroups = false;\n canResetPassword = false; // User permission (admin/custom)\n orgUseResetPassword = false; // Org plan ability\n orgHasKeys = false; // Org public/private keys\n orgResetPasswordPolicyEnabled = false;\n callingUserType: OrganizationUserType = null;\n\n constructor(\n apiService: ApiService,\n private route: ActivatedRoute,\n i18nService: I18nService,\n modalService: ModalService,\n platformUtilsService: PlatformUtilsService,\n cryptoService: CryptoService,\n private router: Router,\n searchService: SearchService,\n validationService: ValidationService,\n private policyService: PolicyService,\n logService: LogService,\n searchPipe: SearchPipe,\n userNamePipe: UserNamePipe,\n private syncService: SyncService,\n stateService: StateService,\n private organizationService: OrganizationService\n ) {\n super(\n apiService,\n searchService,\n i18nService,\n platformUtilsService,\n cryptoService,\n validationService,\n modalService,\n logService,\n searchPipe,\n userNamePipe,\n stateService\n );\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n const organization = await this.organizationService.get(this.organizationId);\n if (!organization.canManageUsers) {\n this.router.navigate([\"../collections\"], { relativeTo: this.route });\n return;\n }\n this.accessEvents = organization.useEvents;\n this.accessGroups = organization.useGroups;\n this.canResetPassword = organization.canManageUsersPassword;\n this.orgUseResetPassword = organization.useResetPassword;\n this.callingUserType = organization.type;\n this.orgHasKeys = organization.hasPublicAndPrivateKeys;\n\n // Backfill pub/priv key if necessary\n if (this.canResetPassword && !this.orgHasKeys) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n const request = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n const response = await this.apiService.postOrganizationKeys(this.organizationId, request);\n if (response != null) {\n this.orgHasKeys = response.publicKey != null && response.privateKey != null;\n await this.syncService.fullSync(true); // Replace oganizations with new data\n } else {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n }\n\n await this.load();\n\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n this.searchText = qParams.search;\n if (qParams.viewEvents != null) {\n const user = this.users.filter((u) => u.id === qParams.viewEvents);\n if (user.length > 0 && user[0].status === OrganizationUserStatusType.Confirmed) {\n this.events(user[0]);\n }\n }\n });\n });\n }\n\n async load() {\n const resetPasswordPolicy = await this.policyService.getPolicyForOrganization(\n PolicyType.ResetPassword,\n this.organizationId\n );\n this.orgResetPasswordPolicyEnabled = resetPasswordPolicy?.enabled;\n super.load();\n }\n\n getUsers(): Promise> {\n return this.apiService.getOrganizationUsers(this.organizationId);\n }\n\n deleteUser(id: string): Promise {\n return this.apiService.deleteOrganizationUser(this.organizationId, id);\n }\n\n reinviteUser(id: string): Promise {\n return this.apiService.postOrganizationUserReinvite(this.organizationId, id);\n }\n\n async confirmUser(\n user: OrganizationUserUserDetailsResponse,\n publicKey: Uint8Array\n ): Promise {\n const orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey.buffer);\n const request = new OrganizationUserConfirmRequest();\n request.key = key.encryptedString;\n await this.apiService.postOrganizationUserConfirm(this.organizationId, user.id, request);\n }\n\n allowResetPassword(orgUser: OrganizationUserUserDetailsResponse): boolean {\n // Hierarchy check\n let callingUserHasPermission = false;\n\n switch (this.callingUserType) {\n case OrganizationUserType.Owner:\n callingUserHasPermission = true;\n break;\n case OrganizationUserType.Admin:\n callingUserHasPermission = orgUser.type !== OrganizationUserType.Owner;\n break;\n case OrganizationUserType.Custom:\n callingUserHasPermission =\n orgUser.type !== OrganizationUserType.Owner &&\n orgUser.type !== OrganizationUserType.Admin;\n break;\n }\n\n // Final\n return (\n this.canResetPassword &&\n callingUserHasPermission &&\n this.orgUseResetPassword &&\n this.orgHasKeys &&\n orgUser.resetPasswordEnrolled &&\n this.orgResetPasswordPolicyEnabled &&\n orgUser.status === OrganizationUserStatusType.Confirmed\n );\n }\n\n showEnrolledStatus(orgUser: OrganizationUserUserDetailsResponse): boolean {\n return (\n this.orgUseResetPassword &&\n orgUser.resetPasswordEnrolled &&\n this.orgResetPasswordPolicyEnabled\n );\n }\n\n async edit(user: OrganizationUserUserDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n UserAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.organizationId = this.organizationId;\n comp.organizationUserId = user != null ? user.id : null;\n comp.usesKeyConnector = user?.usesKeyConnector;\n comp.onSavedUser.subscribe(() => {\n modal.close();\n this.load();\n });\n comp.onDeletedUser.subscribe(() => {\n modal.close();\n this.removeUser(user);\n });\n }\n );\n }\n\n async groups(user: OrganizationUserUserDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n UserGroupsComponent,\n this.groupsModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.organizationId = this.organizationId;\n comp.organizationUserId = user != null ? user.id : null;\n comp.onSavedUser.subscribe(() => {\n modal.close();\n });\n }\n );\n }\n\n async bulkRemove() {\n if (this.actionPromise != null) {\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkRemoveComponent,\n this.bulkRemoveModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.users = this.getCheckedUsers();\n }\n );\n\n await modal.onClosedPromise();\n await this.load();\n }\n\n async bulkReinvite() {\n if (this.actionPromise != null) {\n return;\n }\n\n const users = this.getCheckedUsers();\n const filteredUsers = users.filter((u) => u.status === OrganizationUserStatusType.Invited);\n\n if (filteredUsers.length <= 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"noSelectedUsersApplicable\")\n );\n return;\n }\n\n try {\n const request = new OrganizationUserBulkRequest(filteredUsers.map((user) => user.id));\n const response = this.apiService.postManyOrganizationUserReinvite(\n this.organizationId,\n request\n );\n this.showBulkStatus(\n users,\n filteredUsers,\n response,\n this.i18nService.t(\"bulkReinviteMessage\")\n );\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async bulkConfirm() {\n if (this.actionPromise != null) {\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkConfirmComponent,\n this.bulkConfirmModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.users = this.getCheckedUsers();\n }\n );\n\n await modal.onClosedPromise();\n await this.load();\n }\n\n async events(user: OrganizationUserUserDetailsResponse) {\n await this.modalService.openViewRef(EntityEventsComponent, this.eventsModalRef, (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.organizationId = this.organizationId;\n comp.entityId = user.id;\n comp.showUser = false;\n comp.entity = \"user\";\n });\n }\n\n async resetPassword(user: OrganizationUserUserDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n ResetPasswordComponent,\n this.resetPasswordModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.email = user != null ? user.email : null;\n comp.organizationId = this.organizationId;\n comp.id = user != null ? user.id : null;\n\n comp.onPasswordReset.subscribe(() => {\n modal.close();\n this.load();\n });\n }\n );\n }\n\n protected deleteWarningMessage(user: OrganizationUserUserDetailsResponse): string {\n if (user.usesKeyConnector) {\n return this.i18nService.t(\"removeUserConfirmationKeyConnector\");\n }\n\n return super.deleteWarningMessage(user);\n }\n\n private async showBulkStatus(\n users: OrganizationUserUserDetailsResponse[],\n filteredUsers: OrganizationUserUserDetailsResponse[],\n request: Promise>,\n successfullMessage: string\n ) {\n const [modal, childComponent] = await this.modalService.openViewRef(\n BulkStatusComponent,\n this.bulkStatusModalRef,\n (comp) => {\n comp.loading = true;\n }\n );\n\n // Workaround to handle closing the modal shortly after it has been opened\n let close = false;\n modal.onShown.subscribe(() => {\n if (close) {\n modal.close();\n }\n });\n\n try {\n const response = await request;\n\n if (modal) {\n const keyedErrors: any = response.data\n .filter((r) => r.error !== \"\")\n .reduce((a, x) => ({ ...a, [x.id]: x.error }), {});\n const keyedFilteredUsers: any = filteredUsers.reduce((a, x) => ({ ...a, [x.id]: x }), {});\n\n childComponent.users = users.map((user) => {\n let message = keyedErrors[user.id] ?? successfullMessage;\n // eslint-disable-next-line\n if (!keyedFilteredUsers.hasOwnProperty(user.id)) {\n message = this.i18nService.t(\"bulkFilteredMessage\");\n }\n\n return {\n user: user,\n error: keyedErrors.hasOwnProperty(user.id), // eslint-disable-line\n message: message,\n };\n });\n childComponent.loading = false;\n }\n } catch {\n close = true;\n modal.close();\n }\n }\n}\n","
\n

{{ \"people\" | i18n }}

\n
\n
\n \n {{ \"all\" | i18n }}\n {{ allCount }}\n \n \n {{ \"invited\" | i18n }}\n {{ invitedCount }}\n \n \n {{ \"accepted\" | i18n }}\n {{\n acceptedCount\n }}\n \n
\n
\n \n \n
\n
\n \n \n \n
\n \n \n \n {{ \"confirmSelected\" | i18n }}\n \n \n
\n \n \n
\n
\n \n
\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

{{ \"noUsersInList\" | i18n }}

\n \n \n {{ \"usersNeedConfirmed\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n \n \n {{ u.email }}\n {{\n \"invited\" | i18n\n }}\n {{\n \"accepted\" | i18n\n }}\n {{ u.name }}\n \n \n \n \n {{ \"userUsingTwoStep\" | i18n }}\n \n \n \n {{ \"enrolledPasswordReset\" | i18n }}\n \n \n \n {{ \"owner\" | i18n }}\n {{ \"admin\" | i18n }}\n {{ \"manager\" | i18n }}\n {{ \"user\" | i18n }}\n {{ \"custom\" | i18n }}\n \n \n
\n \n \n \n
\n \n \n {{ \"resendInvitation\" | i18n }}\n \n \n \n {{ \"confirm\" | i18n }}\n \n \n \n {{ \"groups\" | i18n }}\n \n \n \n {{ \"eventLogs\" | i18n }}\n \n \n \n {{ \"resetPassword\" | i18n }}\n \n \n \n {{ \"remove\" | i18n }}\n \n
\n
\n \n \n \n \n
\n\n\n\n\n\n\n\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { PolicyResponse } from \"jslib-common/models/response/policyResponse\";\n\nimport { PolicyListService } from \"../../services/policy-list.service\";\nimport { BasePolicy } from \"../policies/base-policy.component\";\n\nimport { PolicyEditComponent } from \"./policy-edit.component\";\n\n@Component({\n selector: \"app-org-policies\",\n templateUrl: \"policies.component.html\",\n})\nexport class PoliciesComponent implements OnInit {\n @ViewChild(\"editTemplate\", { read: ViewContainerRef, static: true })\n editModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n policies: BasePolicy[];\n organization: Organization;\n\n private orgPolicies: PolicyResponse[];\n private policiesEnabledMap: Map = new Map();\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n private modalService: ModalService,\n private organizationService: OrganizationService,\n private policyListService: PolicyListService,\n private router: Router\n ) {}\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n this.organization = await this.organizationService.get(this.organizationId);\n if (this.organization == null || !this.organization.usePolicies) {\n this.router.navigate([\"/organizations\", this.organizationId]);\n return;\n }\n\n this.policies = this.policyListService.getPolicies();\n\n await this.load();\n\n // Handle policies component launch from Event message\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.policyId != null) {\n const policyIdFromEvents: string = qParams.policyId;\n for (const orgPolicy of this.orgPolicies) {\n if (orgPolicy.id === policyIdFromEvents) {\n for (let i = 0; i < this.policies.length; i++) {\n if (this.policies[i].type === orgPolicy.type) {\n this.edit(this.policies[i]);\n break;\n }\n }\n break;\n }\n }\n }\n });\n });\n }\n\n async load() {\n const response = await this.apiService.getPolicies(this.organizationId);\n this.orgPolicies = response.data != null && response.data.length > 0 ? response.data : [];\n this.orgPolicies.forEach((op) => {\n this.policiesEnabledMap.set(op.type, op.enabled);\n });\n\n this.loading = false;\n }\n\n async edit(policy: BasePolicy) {\n const [modal] = await this.modalService.openViewRef(\n PolicyEditComponent,\n this.editModalRef,\n (comp) => {\n comp.policy = policy;\n comp.organizationId = this.organizationId;\n comp.policiesEnabledMap = this.policiesEnabledMap;\n comp.onSavedPolicy.subscribe(() => {\n modal.close();\n this.load();\n });\n }\n );\n }\n}\n","
\n

{{ \"policies\" | i18n }}

\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n \n \n \n \n \n
\n {{ p.name | i18n }}\n {{\n \"enabled\" | i18n\n }}\n {{ p.description | i18n }}\n
\n\n","import {\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewContainerRef,\n} from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { PolicyRequest } from \"jslib-common/models/request/policyRequest\";\nimport { PolicyResponse } from \"jslib-common/models/response/policyResponse\";\n\nimport { BasePolicy, BasePolicyComponent } from \"../policies/base-policy.component\";\n\n@Component({\n selector: \"app-policy-edit\",\n templateUrl: \"policy-edit.component.html\",\n})\nexport class PolicyEditComponent {\n @Input() policy: BasePolicy;\n @Input() organizationId: string;\n @Input() policiesEnabledMap: Map = new Map();\n @Output() onSavedPolicy = new EventEmitter();\n\n @ViewChild(\"policyForm\", { read: ViewContainerRef, static: true })\n policyFormRef: ViewContainerRef;\n\n policyType = PolicyType;\n loading = true;\n enabled = false;\n formPromise: Promise;\n defaultTypes: any[];\n policyComponent: BasePolicyComponent;\n\n private policyResponse: PolicyResponse;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private componentFactoryResolver: ComponentFactoryResolver,\n private cdr: ChangeDetectorRef,\n private logService: LogService\n ) {}\n\n async ngAfterViewInit() {\n await this.load();\n this.loading = false;\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(this.policy.component);\n this.policyComponent = this.policyFormRef.createComponent(factory)\n .instance as BasePolicyComponent;\n this.policyComponent.policy = this.policy;\n this.policyComponent.policyResponse = this.policyResponse;\n\n this.cdr.detectChanges();\n }\n\n async load() {\n try {\n this.policyResponse = await this.apiService.getPolicy(this.organizationId, this.policy.type);\n } catch (e) {\n if (e.statusCode === 404) {\n this.policyResponse = new PolicyResponse({ Enabled: false });\n } else {\n throw e;\n }\n }\n }\n\n async submit() {\n let request: PolicyRequest;\n try {\n request = await this.policyComponent.buildRequest(this.policiesEnabledMap);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, e.message);\n return;\n }\n\n try {\n this.formPromise = this.apiService.putPolicy(this.organizationId, this.policy.type, request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"editedPolicyId\", this.i18nService.t(this.policy.name))\n );\n this.onSavedPolicy.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

\n {{ \"editPolicy\" | i18n }} - {{ policy.name | i18n }}\n

\n \n ×\n \n
\n\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n

{{ policy.description | i18n }}

\n \n
\n
\n
\n \n \n
\n \n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { OrganizationUserResetPasswordRequest } from \"jslib-common/models/request/organizationUserResetPasswordRequest\";\n\n@Component({\n selector: \"app-reset-password\",\n templateUrl: \"reset-password.component.html\",\n})\nexport class ResetPasswordComponent implements OnInit {\n @Input() name: string;\n @Input() email: string;\n @Input() id: string;\n @Input() organizationId: string;\n @Output() onPasswordReset = new EventEmitter();\n\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n newPassword: string = null;\n showPassword = false;\n masterPasswordScore: number;\n formPromise: Promise;\n private newPasswordStrengthTimeout: any;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private passwordGenerationService: PasswordGenerationService,\n private policyService: PolicyService,\n private cryptoService: CryptoService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n // Get Enforced Policy Options\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions();\n }\n\n get loggedOutWarningName() {\n return this.name != null ? this.name : this.i18nService.t(\"thisUser\");\n }\n\n async generatePassword() {\n const options = (await this.passwordGenerationService.getOptions())[0];\n this.newPassword = await this.passwordGenerationService.generatePassword(options);\n this.updatePasswordStrength();\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"newPassword\").focus();\n }\n\n copy(value: string) {\n if (value == null) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"password\"))\n );\n }\n\n async submit() {\n // Validation\n if (this.newPassword == null || this.newPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return false;\n }\n\n if (this.newPassword.length < 8) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassLength\")\n );\n return false;\n }\n\n if (\n this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n this.masterPasswordScore,\n this.newPassword,\n this.enforcedPolicyOptions\n )\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordPolicyRequirementsNotMet\")\n );\n return;\n }\n\n if (this.masterPasswordScore < 3) {\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"weakMasterPasswordDesc\"),\n this.i18nService.t(\"weakMasterPassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n return false;\n }\n }\n\n // Get user Information (kdf type, kdf iterations, resetPasswordKey, private key) and change password\n try {\n this.formPromise = this.apiService\n .getOrganizationUserResetPasswordDetails(this.organizationId, this.id)\n .then(async (response) => {\n if (response == null) {\n throw new Error(this.i18nService.t(\"resetPasswordDetailsError\"));\n }\n\n const kdfType = response.kdf;\n const kdfIterations = response.kdfIterations;\n const resetPasswordKey = response.resetPasswordKey;\n const encryptedPrivateKey = response.encryptedPrivateKey;\n\n // Decrypt Organization's encrypted Private Key with org key\n const orgSymKey = await this.cryptoService.getOrgKey(this.organizationId);\n const decPrivateKey = await this.cryptoService.decryptToBytes(\n new EncString(encryptedPrivateKey),\n orgSymKey\n );\n\n // Decrypt User's Reset Password Key to get EncKey\n const decValue = await this.cryptoService.rsaDecrypt(resetPasswordKey, decPrivateKey);\n const userEncKey = new SymmetricCryptoKey(decValue);\n\n // Create new key and hash new password\n const newKey = await this.cryptoService.makeKey(\n this.newPassword,\n this.email.trim().toLowerCase(),\n kdfType,\n kdfIterations\n );\n const newPasswordHash = await this.cryptoService.hashPassword(this.newPassword, newKey);\n\n // Create new encKey for the User\n const newEncKey = await this.cryptoService.remakeEncKey(newKey, userEncKey);\n\n // Create request\n const request = new OrganizationUserResetPasswordRequest();\n request.key = newEncKey[1].encryptedString;\n request.newMasterPasswordHash = newPasswordHash;\n\n // Change user's password\n return this.apiService.putOrganizationUserResetPassword(\n this.organizationId,\n this.id,\n request\n );\n });\n\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"resetPasswordSuccess\")\n );\n this.onPasswordReset.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n updatePasswordStrength() {\n if (this.newPasswordStrengthTimeout != null) {\n clearTimeout(this.newPasswordStrengthTimeout);\n }\n this.newPasswordStrengthTimeout = setTimeout(() => {\n const strengthResult = this.passwordGenerationService.passwordStrength(\n this.newPassword,\n this.getPasswordStrengthUserInput()\n );\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n }, 300);\n }\n\n private getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const atPosition = this.email.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput.concat(\n this.email\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n );\n }\n if (this.name != null && this.name !== \"\") {\n userInput = userInput.concat(this.name.trim().toLowerCase().split(\" \"));\n }\n return userInput;\n }\n}\n","
\n
\n
\n
\n

\n {{ \"resetPassword\" | i18n }}\n {{ name }}\n

\n \n ×\n \n
\n
\n {{ \"resetPasswordLoggedOutWarning\" | i18n: loggedOutWarningName }}\n \n \n \n
\n
\n
\n \n
\n \n \n \n
\n
\n
\n \n
\n \n \n \n \n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { OrganizationUserType } from \"jslib-common/enums/organizationUserType\";\nimport { PermissionsApi } from \"jslib-common/models/api/permissionsApi\";\nimport { CollectionData } from \"jslib-common/models/data/collectionData\";\nimport { Collection } from \"jslib-common/models/domain/collection\";\nimport { OrganizationUserInviteRequest } from \"jslib-common/models/request/organizationUserInviteRequest\";\nimport { OrganizationUserUpdateRequest } from \"jslib-common/models/request/organizationUserUpdateRequest\";\nimport { SelectionReadOnlyRequest } from \"jslib-common/models/request/selectionReadOnlyRequest\";\nimport { CollectionDetailsResponse } from \"jslib-common/models/response/collectionResponse\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Component({\n selector: \"app-user-add-edit\",\n templateUrl: \"user-add-edit.component.html\",\n})\nexport class UserAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() organizationUserId: string;\n @Input() organizationId: string;\n @Input() usesKeyConnector = false;\n @Output() onSavedUser = new EventEmitter();\n @Output() onDeletedUser = new EventEmitter();\n\n loading = true;\n editMode = false;\n title: string;\n emails: string;\n type: OrganizationUserType = OrganizationUserType.User;\n permissions = new PermissionsApi();\n showCustom = false;\n access: \"all\" | \"selected\" = \"selected\";\n collections: CollectionView[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n organizationUserType = OrganizationUserType;\n\n manageAllCollectionsCheckboxes = [\n {\n id: \"createNewCollections\",\n get: () => this.permissions.createNewCollections,\n set: (v: boolean) => (this.permissions.createNewCollections = v),\n },\n {\n id: \"editAnyCollection\",\n get: () => this.permissions.editAnyCollection,\n set: (v: boolean) => (this.permissions.editAnyCollection = v),\n },\n {\n id: \"deleteAnyCollection\",\n get: () => this.permissions.deleteAnyCollection,\n set: (v: boolean) => (this.permissions.deleteAnyCollection = v),\n },\n ];\n\n manageAssignedCollectionsCheckboxes = [\n {\n id: \"editAssignedCollections\",\n get: () => this.permissions.editAssignedCollections,\n set: (v: boolean) => (this.permissions.editAssignedCollections = v),\n },\n {\n id: \"deleteAssignedCollections\",\n get: () => this.permissions.deleteAssignedCollections,\n set: (v: boolean) => (this.permissions.deleteAssignedCollections = v),\n },\n ];\n\n get customUserTypeSelected(): boolean {\n return this.type === OrganizationUserType.Custom;\n }\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.editMode = this.loading = this.organizationUserId != null;\n await this.loadCollections();\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editUser\");\n try {\n const user = await this.apiService.getOrganizationUser(\n this.organizationId,\n this.organizationUserId\n );\n this.access = user.accessAll ? \"all\" : \"selected\";\n this.type = user.type;\n if (user.type === OrganizationUserType.Custom) {\n this.permissions = user.permissions;\n }\n if (user.collections != null && this.collections != null) {\n user.collections.forEach((s) => {\n const collection = this.collections.filter((c) => c.id === s.id);\n if (collection != null && collection.length > 0) {\n (collection[0] as any).checked = true;\n collection[0].readOnly = s.readOnly;\n collection[0].hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"inviteUser\");\n }\n\n this.loading = false;\n }\n\n async loadCollections() {\n const response = await this.apiService.getCollections(this.organizationId);\n const collections = response.data.map(\n (r) => new Collection(new CollectionData(r as CollectionDetailsResponse))\n );\n this.collections = await this.collectionService.decryptMany(collections);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n if (!(c as any).checked) {\n c.readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.collections.forEach((c) => this.check(c, select));\n }\n\n setRequestPermissions(p: PermissionsApi, clearPermissions: boolean) {\n Object.assign(p, clearPermissions ? new PermissionsApi() : this.permissions);\n return p;\n }\n\n handleDependentPermissions() {\n // Manage Password Reset must have Manage Users enabled\n if (this.permissions.manageResetPassword && !this.permissions.manageUsers) {\n this.permissions.manageUsers = true;\n (document.getElementById(\"manageUsers\") as HTMLInputElement).checked = true;\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"resetPasswordManageUsers\")\n );\n }\n }\n\n async submit() {\n let collections: SelectionReadOnlyRequest[] = null;\n if (this.access !== \"all\") {\n collections = this.collections\n .filter((c) => (c as any).checked)\n .map((c) => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));\n }\n\n try {\n if (this.editMode) {\n const request = new OrganizationUserUpdateRequest();\n request.accessAll = this.access === \"all\";\n request.type = this.type;\n request.collections = collections;\n request.permissions = this.setRequestPermissions(\n request.permissions ?? new PermissionsApi(),\n request.type !== OrganizationUserType.Custom\n );\n this.formPromise = this.apiService.putOrganizationUser(\n this.organizationId,\n this.organizationUserId,\n request\n );\n } else {\n const request = new OrganizationUserInviteRequest();\n request.emails = this.emails.trim().split(/\\s*,\\s*/);\n request.accessAll = this.access === \"all\";\n request.type = this.type;\n request.permissions = this.setRequestPermissions(\n request.permissions ?? new PermissionsApi(),\n request.type !== OrganizationUserType.Custom\n );\n request.collections = collections;\n this.formPromise = this.apiService.postOrganizationUserInvite(this.organizationId, request);\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedUserId\" : \"invitedUsers\", this.name)\n );\n this.onSavedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const message = this.usesKeyConnector\n ? \"removeUserConfirmationKeyConnector\"\n : \"removeUserConfirmation\";\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(message),\n this.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteOrganizationUser(\n this.organizationId,\n this.organizationUserId\n );\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedUserId\", this.name)\n );\n this.onDeletedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

\n {{ title }}\n {{ name }}\n

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n

{{ \"inviteUserDesc\" | i18n }}

\n
\n \n \n {{ \"inviteMultipleEmailDesc\" | i18n: \"20\" }}\n
\n
\n

\n {{ \"userType\" | i18n }}\n \n \n \n

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n \n

\n {{ \"permissions\" | i18n }}\n

\n
\n
\n
\n \n
\n \n \n
\n
\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n

\n
\n {{ \"accessControl\" | i18n }}\n \n \n \n
\n
\n \n \n
\n

\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n  \n {{ \"name\" | i18n }}\n {{ \"hidePasswords\" | i18n }}\n {{ \"readOnly\" | i18n }}\n \n \n \n \n \n \n \n \n {{ c.name }}\n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Component({\n selector: \"app-user-confirm\",\n templateUrl: \"user-confirm.component.html\",\n})\nexport class UserConfirmComponent implements OnInit {\n @Input() name: string;\n @Input() userId: string;\n @Input() publicKey: Uint8Array;\n @Output() onConfirmedUser = new EventEmitter();\n\n dontAskAgain = false;\n loading = true;\n fingerprint: string;\n formPromise: Promise;\n\n constructor(\n private cryptoService: CryptoService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n try {\n if (this.publicKey != null) {\n const fingerprint = await this.cryptoService.getFingerprint(\n this.userId,\n this.publicKey.buffer\n );\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join(\"-\");\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.loading = false;\n }\n\n async submit() {\n if (this.loading) {\n return;\n }\n\n if (this.dontAskAgain) {\n await this.stateService.setAutoConfirmFingerprints(true);\n }\n\n this.onConfirmedUser.emit();\n }\n}\n","
\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { OrganizationUserUpdateGroupsRequest } from \"jslib-common/models/request/organizationUserUpdateGroupsRequest\";\nimport { GroupResponse } from \"jslib-common/models/response/groupResponse\";\n\n@Component({\n selector: \"app-user-groups\",\n templateUrl: \"user-groups.component.html\",\n})\nexport class UserGroupsComponent implements OnInit {\n @Input() name: string;\n @Input() organizationUserId: string;\n @Input() organizationId: string;\n @Output() onSavedUser = new EventEmitter();\n\n loading = true;\n groups: GroupResponse[] = [];\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n const groupsResponse = await this.apiService.getGroups(this.organizationId);\n const groups = groupsResponse.data.map((r) => r);\n groups.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n this.groups = groups;\n\n try {\n const userGroups = await this.apiService.getOrganizationUserGroups(\n this.organizationId,\n this.organizationUserId\n );\n if (userGroups != null && this.groups != null) {\n userGroups.forEach((ug) => {\n const group = this.groups.filter((g) => g.id === ug);\n if (group != null && group.length > 0) {\n (group[0] as any).checked = true;\n }\n });\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n this.loading = false;\n }\n\n check(g: GroupResponse, select?: boolean) {\n (g as any).checked = select == null ? !(g as any).checked : select;\n if (!(g as any).checked) {\n (g as any).readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.groups.forEach((g) => this.check(g, select));\n }\n\n async submit() {\n const request = new OrganizationUserUpdateGroupsRequest();\n request.groupIds = this.groups.filter((g) => (g as any).checked).map((g) => g.id);\n\n try {\n this.formPromise = this.apiService.putOrganizationUserGroups(\n this.organizationId,\n this.organizationUserId,\n request\n );\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"editedGroupsForUser\", this.name)\n );\n this.onSavedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n
\n
\n

\n {{ \"groupAccess\" | i18n }}\n {{ name }}\n

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n

{{ \"groupAccessUserDesc\" | i18n }}

\n
\n {{ \"noGroupsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n
\n \n \n {{ g.name }}\n
\n
\n
\n \n \n
\n
\n
\n
\n","import { Directive, Input, OnInit } from \"@angular/core\";\nimport { FormControl, FormGroup } from \"@angular/forms\";\n\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { PolicyRequest } from \"jslib-common/models/request/policyRequest\";\nimport { PolicyResponse } from \"jslib-common/models/response/policyResponse\";\n\nexport abstract class BasePolicy {\n abstract name: string;\n abstract description: string;\n abstract type: PolicyType;\n abstract component: any;\n\n display(organization: Organization) {\n return true;\n }\n}\n\n@Directive()\nexport abstract class BasePolicyComponent implements OnInit {\n @Input() policyResponse: PolicyResponse;\n @Input() policy: BasePolicy;\n\n enabled = new FormControl(false);\n data: FormGroup = null;\n\n ngOnInit(): void {\n this.enabled.setValue(this.policyResponse.enabled);\n\n if (this.policyResponse.data != null) {\n this.loadData();\n }\n }\n\n loadData() {\n this.data.patchValue(this.policyResponse.data ?? {});\n }\n\n buildRequestData() {\n if (this.data != null) {\n return this.data.value;\n }\n\n return null;\n }\n\n buildRequest(policiesEnabledMap: Map) {\n const request = new PolicyRequest();\n request.enabled = this.enabled.value;\n request.type = this.policy.type;\n request.data = this.buildRequestData();\n\n return Promise.resolve(request);\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class DisableSendPolicy extends BasePolicy {\n name = \"disableSend\";\n description = \"disableSendPolicyDesc\";\n type = PolicyType.DisableSend;\n component = DisableSendPolicyComponent;\n}\n\n@Component({\n selector: \"policy-disable-send\",\n templateUrl: \"disable-send.component.html\",\n})\nexport class DisableSendPolicyComponent extends BasePolicyComponent {}\n","\n {{ \"disableSendExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class MasterPasswordPolicy extends BasePolicy {\n name = \"masterPass\";\n description = \"masterPassPolicyDesc\";\n type = PolicyType.MasterPassword;\n component = MasterPasswordPolicyComponent;\n}\n\n@Component({\n selector: \"policy-master-password\",\n templateUrl: \"master-password.component.html\",\n})\nexport class MasterPasswordPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n minComplexity: [null],\n minLength: [null],\n requireUpper: [null],\n requireLower: [null],\n requireNumbers: [null],\n requireSpecial: [null],\n });\n\n passwordScores: { name: string; value: number }[];\n showKeyConnectorInfo = false;\n\n constructor(\n private formBuilder: FormBuilder,\n i18nService: I18nService,\n private organizationService: OrganizationService\n ) {\n super();\n\n this.passwordScores = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: i18nService.t(\"weak\") + \" (0)\", value: 0 },\n { name: i18nService.t(\"weak\") + \" (1)\", value: 1 },\n { name: i18nService.t(\"weak\") + \" (2)\", value: 2 },\n { name: i18nService.t(\"good\") + \" (3)\", value: 3 },\n { name: i18nService.t(\"strong\") + \" (4)\", value: 4 },\n ];\n }\n\n async ngOnInit() {\n super.ngOnInit();\n const organization = await this.organizationService.get(this.policyResponse.organizationId);\n this.showKeyConnectorInfo = organization.keyConnectorEnabled;\n }\n}\n","\n {{ \"keyConnectorPolicyRestriction\" | i18n }}\n\n\n
\n
\n
\n \n \n
\n
\n\n
\n
\n \n \n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class PasswordGeneratorPolicy extends BasePolicy {\n name = \"passwordGenerator\";\n description = \"passwordGeneratorPolicyDesc\";\n type = PolicyType.PasswordGenerator;\n component = PasswordGeneratorPolicyComponent;\n}\n\n@Component({\n selector: \"policy-password-generator\",\n templateUrl: \"password-generator.component.html\",\n})\nexport class PasswordGeneratorPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n defaultType: [null],\n minLength: [null],\n useUpper: [null],\n useLower: [null],\n useNumbers: [null],\n useSpecial: [null],\n minNumbers: [null],\n minSpecial: [null],\n minNumberWords: [null],\n capitalize: [null],\n includeNumber: [null],\n });\n\n defaultTypes: { name: string; value: string }[];\n\n constructor(private formBuilder: FormBuilder, i18nService: I18nService) {\n super();\n\n this.defaultTypes = [\n { name: i18nService.t(\"userPreference\"), value: null },\n { name: i18nService.t(\"password\"), value: \"password\" },\n { name: i18nService.t(\"passphrase\"), value: \"passphrase\" },\n ];\n }\n}\n","
\n
\n
\n \n \n
\n
\n\n
\n
\n \n \n \n \n
\n
\n

{{ \"password\" | i18n }}

\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n

{{ \"passphrase\" | i18n }}

\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class PersonalOwnershipPolicy extends BasePolicy {\n name = \"personalOwnership\";\n description = \"personalOwnershipPolicyDesc\";\n type = PolicyType.PersonalOwnership;\n component = PersonalOwnershipPolicyComponent;\n}\n\n@Component({\n selector: \"policy-personal-ownership\",\n templateUrl: \"personal-ownership.component.html\",\n})\nexport class PersonalOwnershipPolicyComponent extends BasePolicyComponent {}\n","\n {{ \"personalOwnershipExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { PolicyRequest } from \"jslib-common/models/request/policyRequest\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class RequireSsoPolicy extends BasePolicy {\n name = \"requireSso\";\n description = \"requireSsoPolicyDesc\";\n type = PolicyType.RequireSso;\n component = RequireSsoPolicyComponent;\n\n display(organization: Organization) {\n return organization.useSso;\n }\n}\n\n@Component({\n selector: \"policy-require-sso\",\n templateUrl: \"require-sso.component.html\",\n})\nexport class RequireSsoPolicyComponent extends BasePolicyComponent {\n constructor(private i18nService: I18nService) {\n super();\n }\n\n buildRequest(policiesEnabledMap: Map): Promise {\n const singleOrgEnabled = policiesEnabledMap.get(PolicyType.SingleOrg) ?? false;\n if (this.enabled.value && !singleOrgEnabled) {\n throw new Error(this.i18nService.t(\"requireSsoPolicyReqError\"));\n }\n\n return super.buildRequest(policiesEnabledMap);\n }\n}\n","\n {{ \"requireSsoPolicyReq\" | i18n }}\n\n\n {{ \"requireSsoExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class ResetPasswordPolicy extends BasePolicy {\n name = \"resetPasswordPolicy\";\n description = \"resetPasswordPolicyDescription\";\n type = PolicyType.ResetPassword;\n component = ResetPasswordPolicyComponent;\n\n display(organization: Organization) {\n return organization.useResetPassword;\n }\n}\n\n@Component({\n selector: \"policy-reset-password\",\n templateUrl: \"reset-password.component.html\",\n})\nexport class ResetPasswordPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n autoEnrollEnabled: false,\n });\n\n defaultTypes: { name: string; value: string }[];\n showKeyConnectorInfo = false;\n\n constructor(private formBuilder: FormBuilder, private organizationService: OrganizationService) {\n super();\n }\n\n async ngOnInit() {\n super.ngOnInit();\n const organization = await this.organizationService.get(this.policyResponse.organizationId);\n this.showKeyConnectorInfo = organization.keyConnectorEnabled;\n }\n}\n","\n {{ \"keyConnectorPolicyRestriction\" | i18n }}\n\n\n\n {{ \"resetPasswordPolicyWarning\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n\n
\n

{{ \"resetPasswordPolicyAutoEnroll\" | i18n }}

\n

{{ \"resetPasswordPolicyAutoEnrollDescription\" | i18n }}

\n \n {{ \"resetPasswordPolicyAutoEnrollWarning\" | i18n }}\n \n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class SendOptionsPolicy extends BasePolicy {\n name = \"sendOptions\";\n description = \"sendOptionsPolicyDesc\";\n type = PolicyType.SendOptions;\n component = SendOptionsPolicyComponent;\n}\n\n@Component({\n selector: \"policy-send-options\",\n templateUrl: \"send-options.component.html\",\n})\nexport class SendOptionsPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n disableHideEmail: false,\n });\n\n constructor(private formBuilder: FormBuilder) {\n super();\n }\n}\n","\n {{ \"sendOptionsExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n\n
\n

{{ \"options\" | i18n }}

\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { PolicyRequest } from \"jslib-common/models/request/policyRequest\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class SingleOrgPolicy extends BasePolicy {\n name = \"singleOrg\";\n description = \"singleOrgDesc\";\n type = PolicyType.SingleOrg;\n component = SingleOrgPolicyComponent;\n}\n\n@Component({\n selector: \"policy-single-org\",\n templateUrl: \"single-org.component.html\",\n})\nexport class SingleOrgPolicyComponent extends BasePolicyComponent {\n constructor(private i18nService: I18nService) {\n super();\n }\n\n buildRequest(policiesEnabledMap: Map): Promise {\n if (!this.enabled.value) {\n if (policiesEnabledMap.get(PolicyType.RequireSso) ?? false) {\n throw new Error(\n this.i18nService.t(\"disableRequiredError\", this.i18nService.t(\"requireSso\"))\n );\n }\n\n if (policiesEnabledMap.get(PolicyType.MaximumVaultTimeout) ?? false) {\n throw new Error(\n this.i18nService.t(\"disableRequiredError\", this.i18nService.t(\"maximumVaultTimeoutLabel\"))\n );\n }\n }\n\n return super.buildRequest(policiesEnabledMap);\n }\n}\n","\n {{ \"singleOrgPolicyWarning\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class TwoFactorAuthenticationPolicy extends BasePolicy {\n name = \"twoStepLogin\";\n description = \"twoStepLoginPolicyDesc\";\n type = PolicyType.TwoFactorAuthentication;\n component = TwoFactorAuthenticationPolicyComponent;\n}\n\n@Component({\n selector: \"policy-two-factor-authentication\",\n templateUrl: \"two-factor-authentication.component.html\",\n})\nexport class TwoFactorAuthenticationPolicyComponent extends BasePolicyComponent {}\n","\n {{ \"twoStepLoginPolicyWarning\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { OrganizationKeysRequest } from \"jslib-common/models/request/organizationKeysRequest\";\nimport { OrganizationUpdateRequest } from \"jslib-common/models/request/organizationUpdateRequest\";\nimport { OrganizationResponse } from \"jslib-common/models/response/organizationResponse\";\n\nimport { ApiKeyComponent } from \"../../settings/api-key.component\";\nimport { PurgeVaultComponent } from \"../../settings/purge-vault.component\";\nimport { TaxInfoComponent } from \"../../settings/tax-info.component\";\n\nimport { DeleteOrganizationComponent } from \"./delete-organization.component\";\n\n@Component({\n selector: \"app-org-account\",\n templateUrl: \"account.component.html\",\n})\nexport class AccountComponent {\n @ViewChild(\"deleteOrganizationTemplate\", { read: ViewContainerRef, static: true })\n deleteModalRef: ViewContainerRef;\n @ViewChild(\"purgeOrganizationTemplate\", { read: ViewContainerRef, static: true })\n purgeModalRef: ViewContainerRef;\n @ViewChild(\"apiKeyTemplate\", { read: ViewContainerRef, static: true })\n apiKeyModalRef: ViewContainerRef;\n @ViewChild(\"rotateApiKeyTemplate\", { read: ViewContainerRef, static: true })\n rotateApiKeyModalRef: ViewContainerRef;\n @ViewChild(TaxInfoComponent) taxInfo: TaxInfoComponent;\n\n selfHosted = false;\n loading = true;\n canUseApi = false;\n org: OrganizationResponse;\n formPromise: Promise;\n taxFormPromise: Promise;\n\n private organizationId: string;\n\n constructor(\n private modalService: ModalService,\n private apiService: ApiService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private syncService: SyncService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private logService: LogService,\n private router: Router\n ) {}\n\n async ngOnInit() {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n try {\n this.org = await this.apiService.getOrganization(this.organizationId);\n this.canUseApi = this.org.useApi;\n } catch (e) {\n this.logService.error(e);\n }\n });\n this.loading = false;\n }\n\n async submit() {\n try {\n const request = new OrganizationUpdateRequest();\n request.name = this.org.name;\n request.businessName = this.org.businessName;\n request.billingEmail = this.org.billingEmail;\n request.identifier = this.org.identifier;\n\n // Backfill pub/priv key if necessary\n if (!this.org.hasPublicAndPrivateKeys) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n }\n\n this.formPromise = this.apiService.putOrganization(this.organizationId, request).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"organizationUpdated\")\n );\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async submitTaxInfo() {\n this.taxFormPromise = this.taxInfo.submitTaxInfo();\n await this.taxFormPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"taxInfoUpdated\"));\n }\n\n async deleteOrganization() {\n await this.modalService.openViewRef(\n DeleteOrganizationComponent,\n this.deleteModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.onSuccess.subscribe(() => {\n this.router.navigate([\"/\"]);\n });\n }\n );\n }\n\n async purgeVault() {\n await this.modalService.openViewRef(PurgeVaultComponent, this.purgeModalRef, (comp) => {\n comp.organizationId = this.organizationId;\n });\n }\n\n async viewApiKey() {\n await this.modalService.openViewRef(ApiKeyComponent, this.apiKeyModalRef, (comp) => {\n comp.keyType = \"organization\";\n comp.entityId = this.organizationId;\n comp.postKey = this.apiService.postOrganizationApiKey.bind(this.apiService);\n comp.scope = \"api.organization\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"apiKeyWarning\";\n comp.apiKeyDescription = \"apiKeyDesc\";\n });\n }\n\n async rotateApiKey() {\n await this.modalService.openViewRef(ApiKeyComponent, this.rotateApiKeyModalRef, (comp) => {\n comp.keyType = \"organization\";\n comp.isRotation = true;\n comp.entityId = this.organizationId;\n comp.postKey = this.apiService.postOrganizationRotateApiKey.bind(this.apiService);\n comp.scope = \"api.organization\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"apiKeyWarning\";\n comp.apiKeyDescription = \"apiKeyRotateDesc\";\n });\n }\n}\n","
\n

{{ \"myOrganization\" | i18n }}

\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n
\n \n\n\n
\n

{{ \"apiKey\" | i18n }}

\n
\n

\n {{ \"apiKeyDesc\" | i18n }}\n \n {{ \"learnMore\" | i18n }}\n \n

\n \n \n\n
\n

{{ \"taxInformation\" | i18n }}

\n
\n

{{ \"taxInformationDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n\n \n \n\n
\n

{{ \"dangerZone\" | i18n }}

\n
\n
\n
\n

{{ \"dangerZoneDesc\" | i18n }}

\n \n \n
\n
\n\n\n\n\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { OrganizationSubscriptionUpdateRequest } from \"jslib-common/models/request/organizationSubscriptionUpdateRequest\";\n\n@Component({\n selector: \"app-adjust-subscription\",\n templateUrl: \"adjust-subscription.component.html\",\n})\nexport class AdjustSubscription {\n @Input() organizationId: string;\n @Input() maxAutoscaleSeats: number;\n @Input() currentSeatCount: number;\n @Input() seatPrice = 0;\n @Input() interval = \"year\";\n @Output() onAdjusted = new EventEmitter();\n\n formPromise: Promise;\n limitSubscription: boolean;\n newSeatCount: number;\n newMaxSeats: number;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n ngOnInit() {\n this.limitSubscription = this.maxAutoscaleSeats != null;\n this.newSeatCount = this.currentSeatCount;\n this.newMaxSeats = this.maxAutoscaleSeats;\n }\n\n async submit() {\n try {\n const seatAdjustment = this.newSeatCount - this.currentSeatCount;\n const request = new OrganizationSubscriptionUpdateRequest(seatAdjustment, this.newMaxSeats);\n this.formPromise = this.apiService.postOrganizationUpdateSubscription(\n this.organizationId,\n request\n );\n\n await this.formPromise;\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"subscriptionUpdated\")\n );\n } catch (e) {\n this.logService.error(e);\n }\n this.onAdjusted.emit();\n }\n\n limitSubscriptionChanged() {\n if (!this.limitSubscription) {\n this.newMaxSeats = null;\n }\n }\n\n get adjustedSeatTotal(): number {\n return this.newSeatCount * this.seatPrice;\n }\n\n get maxSeatTotal(): number {\n return this.newMaxSeats * this.seatPrice;\n }\n}\n","
\n
\n
\n
\n \n \n \n {{ \"total\" | i18n }}: {{ newSeatCount || 0 }} ×\n {{ seatPrice | currency: \"$\" }} = {{ adjustedSeatTotal | currency: \"$\" }} /\n {{ interval | i18n }}\n \n
\n
\n
\n
\n
\n \n \n
\n {{ \"limitSubscriptionDesc\" | i18n }}\n
\n
\n
\n
\n \n \n \n {{ \"maxSeatCost\" | i18n }}: {{ newMaxSeats || 0 }} ×\n {{ seatPrice | currency: \"$\" }} = {{ maxSeatTotal | currency: \"$\" }} /\n {{ interval | i18n }}\n \n
\n
\n \n
\n
\n\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlanType } from \"jslib-common/enums/planType\";\nimport { ProductType } from \"jslib-common/enums/productType\";\n\n@Component({\n selector: \"app-change-plan\",\n templateUrl: \"change-plan.component.html\",\n})\nexport class ChangePlanComponent {\n @Input() organizationId: string;\n @Output() onChanged = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n formPromise: Promise;\n defaultUpgradePlan: PlanType = PlanType.FamiliesAnnually;\n defaultUpgradeProduct: ProductType = ProductType.Families;\n\n constructor(private logService: LogService) {}\n\n async submit() {\n try {\n this.onChanged.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","
\n
\n \n

{{ \"changeBillingPlan\" | i18n }}

\n

{{ \"changeBillingPlanUpgrade\" | i18n }}

\n \n \n
\n
\n","import { Component, EventEmitter, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\nimport { Verification } from \"jslib-common/types/verification\";\n\nclass CountBasedLocalizationKey {\n singular: string;\n plural: string;\n\n getKey(count: number) {\n return count == 1 ? this.singular : this.plural;\n }\n\n constructor(singular: string, plural: string) {\n this.singular = singular;\n this.plural = plural;\n }\n}\n\nclass OrganizationContentSummaryItem {\n count: number;\n get localizationKey(): string {\n return this.localizationKeyOptions.getKey(this.count);\n }\n private localizationKeyOptions: CountBasedLocalizationKey;\n constructor(count: number, localizationKeyOptions: CountBasedLocalizationKey) {\n this.count = count;\n this.localizationKeyOptions = localizationKeyOptions;\n }\n}\n\nclass OrganizationContentSummary {\n totalItemCount = 0;\n itemCountByType: OrganizationContentSummaryItem[] = [];\n}\n\n@Component({\n selector: \"app-delete-organization\",\n templateUrl: \"delete-organization.component.html\",\n})\nexport class DeleteOrganizationComponent implements OnInit {\n organizationId: string;\n loaded: boolean;\n deleteOrganizationRequestType: \"InvalidFamiliesForEnterprise\" | \"RegularDelete\" = \"RegularDelete\";\n organizationName: string;\n organizationContentSummary: OrganizationContentSummary = new OrganizationContentSummary();\n @Output() onSuccess: EventEmitter = new EventEmitter();\n\n masterPassword: Verification;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private userVerificationService: UserVerificationService,\n private logService: LogService,\n private cipherService: CipherService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit(): Promise {\n await this.load();\n }\n\n async submit() {\n try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword)\n .then((request) => this.apiService.deleteOrganization(this.organizationId, request));\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"organizationDeleted\"),\n this.i18nService.t(\"organizationDeletedDesc\")\n );\n this.onSuccess.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private async load() {\n this.organizationName = (await this.organizationService.get(this.organizationId)).name;\n this.organizationContentSummary = await this.buildOrganizationContentSummary();\n this.loaded = true;\n }\n\n private async buildOrganizationContentSummary(): Promise {\n const organizationContentSummary = new OrganizationContentSummary();\n const organizationItems = (\n await this.cipherService.getAllFromApiForOrganization(this.organizationId)\n ).filter((item) => item.deletedDate == null);\n\n if (organizationItems.length < 1) {\n return organizationContentSummary;\n }\n\n organizationContentSummary.totalItemCount = organizationItems.length;\n for (const cipherType of Utils.iterateEnum(CipherType)) {\n const count = this.getOrganizationItemCountByType(organizationItems, cipherType);\n if (count > 0) {\n organizationContentSummary.itemCountByType.push(\n new OrganizationContentSummaryItem(\n count,\n this.getOrganizationItemLocalizationKeysByType(CipherType[cipherType])\n )\n );\n }\n }\n\n return organizationContentSummary;\n }\n\n private getOrganizationItemCountByType(items: CipherView[], type: CipherType) {\n return items.filter((item) => item.type == type).length;\n }\n\n private getOrganizationItemLocalizationKeysByType(type: string): CountBasedLocalizationKey {\n return new CountBasedLocalizationKey(`type${type}`, `type${type}Plural`);\n }\n}\n","
\n
\n \n
\n

{{ \"deleteOrganization\" | i18n }}

\n \n ×\n \n
\n
\n {{\n \"deletingOrganizationIsPermanentWarning\" | i18n: organizationName\n }}\n

\n \n {{ \"orgCreatedSponsorshipInvalid\" | i18n }}\n \n \n 0\">\n {{ \"deletingOrganizationContentWarning\" | i18n: organizationName }}\n

    \n
  • \n {{ type.count }} {{ type.localizationKey | i18n }}\n
  • \n
\n {{ \"deletingOrganizationActiveUserAccountsWarning\" | i18n }}\n \n \n

\n \n \n
\n
\n \n \n
\n \n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-download-license\",\n templateUrl: \"download-license.component.html\",\n})\nexport class DownloadLicenseComponent {\n @Input() organizationId: string;\n @Output() onDownloaded = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n installationId: string;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async submit() {\n if (this.installationId == null || this.installationId === \"\") {\n return;\n }\n\n try {\n this.formPromise = this.apiService.getOrganizationLicense(\n this.organizationId,\n this.installationId\n );\n const license = await this.formPromise;\n const licenseString = JSON.stringify(license, null, 2);\n this.platformUtilsService.saveFile(\n window,\n licenseString,\n null,\n \"bitwarden_organization_license.json\"\n );\n this.onDownloaded.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","
\n
\n \n

{{ \"downloadLicense\" | i18n }}

\n
\n
\n
\n \n \n \n \n
\n \n
\n
\n \n \n
\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\nimport { UserBillingComponent } from \"../../settings/user-billing.component\";\n\n@Component({\n selector: \"app-org-billing\",\n templateUrl: \"../../settings/user-billing.component.html\",\n})\nexport class OrganizationBillingComponent extends UserBillingComponent implements OnInit {\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n private route: ActivatedRoute,\n platformUtilsService: PlatformUtilsService,\n logService: LogService\n ) {\n super(apiService, i18nService, platformUtilsService, logService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n this.firstLoaded = true;\n });\n }\n}\n","
\n

\n {{ \"billing\" | i18n }}\n

\n \n \n {{ \"refresh\" | i18n }}\n \n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

{{ (isCreditBalance ? \"accountCredit\" : \"accountBalance\") | i18n }}

\n

\n {{ creditOrBalance | currency: \"$\" }}\n

\n

{{ \"creditAppliedDesc\" | i18n }}

\n \n {{ \"addCredit\" | i18n }}\n \n \n \n

{{ \"paymentMethod\" | i18n }}

\n

{{ \"noPaymentMethod\" | i18n }}

\n \n \n

{{ \"verifyBankAccountDesc\" | i18n }} {{ \"verifyBankAccountFailureWarning\" | i18n }}

\n \n \n
\n
\n
$0.
\n
\n \n
\n \n
\n
\n
$0.
\n
\n \n
\n \n \n {{ \"verifyBankAccount\" | i18n }}\n \n \n \n

\n \n {{ \"inAppPurchase\" | i18n }}\n {{ paymentSource.description }}\n

\n
\n \n {{ (paymentSource ? \"changePaymentMethod\" : \"addPaymentMethod\") | i18n }}\n \n \n \n

{{ \"invoices\" | i18n }}

\n

{{ \"noInvoices\" | i18n }}

\n \n \n \n \n \n \n \n \n \n
{{ i.date | date: \"mediumDate\" }}\n \n \n \n {{ \"invoiceNumber\" | i18n: i.number }}\n {{ i.amount | currency: \"$\" }}\n \n \n {{ \"paid\" | i18n }}\n \n \n \n {{ \"unpaid\" | i18n }}\n \n
\n

{{ \"transactions\" | i18n }}

\n

{{ \"noTransactions\" | i18n }}

\n \n \n \n \n \n \n \n {{ t.amount | currency: \"$\" }}\n \n \n \n
{{ t.createdDate | date: \"mediumDate\" }}\n \n {{ \"chargeNoun\" | i18n }}\n \n {{ \"refundNoun\" | i18n }}\n \n \n {{ t.details }}\n
\n * {{ \"chargesStatement\" | i18n: \"BITWARDEN\" }}\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PlanType } from \"jslib-common/enums/planType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { OrganizationSubscriptionResponse } from \"jslib-common/models/response/organizationSubscriptionResponse\";\n\n@Component({\n selector: \"app-org-subscription\",\n templateUrl: \"organization-subscription.component.html\",\n})\nexport class OrganizationSubscriptionComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n organizationId: string;\n adjustSeatsAdd = true;\n showAdjustSeats = false;\n showAdjustSeatAutoscale = false;\n adjustStorageAdd = true;\n showAdjustStorage = false;\n showUpdateLicense = false;\n showDownloadLicense = false;\n showChangePlan = false;\n sub: OrganizationSubscriptionResponse;\n selfHosted = false;\n\n userOrg: Organization;\n\n removeSponsorshipPromise: Promise;\n cancelPromise: Promise;\n reinstatePromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private messagingService: MessagingService,\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private logService: LogService\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n this.firstLoaded = true;\n });\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n\n this.loading = true;\n this.userOrg = await this.organizationService.get(this.organizationId);\n this.sub = await this.apiService.getOrganizationSubscription(this.organizationId);\n this.loading = false;\n }\n\n async reinstate() {\n if (this.loading) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"reinstateConfirmation\"),\n this.i18nService.t(\"reinstateSubscription\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"cancel\")\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.reinstatePromise = this.apiService.postOrganizationReinstate(this.organizationId);\n await this.reinstatePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"reinstated\"));\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async cancel() {\n if (this.loading) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"cancelConfirmation\"),\n this.i18nService.t(\"cancelSubscription\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.cancelPromise = this.apiService.postOrganizationCancel(this.organizationId);\n await this.cancelPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"canceledSubscription\")\n );\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async changePlan() {\n this.showChangePlan = !this.showChangePlan;\n }\n\n closeChangePlan(changed: boolean) {\n this.showChangePlan = false;\n }\n\n downloadLicense() {\n this.showDownloadLicense = !this.showDownloadLicense;\n }\n\n closeDownloadLicense() {\n this.showDownloadLicense = false;\n }\n\n updateLicense() {\n if (this.loading) {\n return;\n }\n this.showUpdateLicense = true;\n }\n\n closeUpdateLicense(updated: boolean) {\n this.showUpdateLicense = false;\n if (updated) {\n this.load();\n this.messagingService.send(\"updatedOrgLicense\");\n }\n }\n\n subscriptionAdjusted() {\n this.load();\n }\n\n adjustStorage(add: boolean) {\n this.adjustStorageAdd = add;\n this.showAdjustStorage = true;\n }\n\n closeStorage(load: boolean) {\n this.showAdjustStorage = false;\n if (load) {\n this.load();\n }\n }\n\n async removeSponsorship() {\n const isConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removeSponsorshipConfirmation\"),\n this.i18nService.t(\"removeSponsorship\"),\n this.i18nService.t(\"remove\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n\n if (!isConfirmed) {\n return;\n }\n\n try {\n this.removeSponsorshipPromise = this.apiService.deleteRemoveSponsorship(this.organizationId);\n await this.removeSponsorshipPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removeSponsorshipSuccess\")\n );\n await this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n get isExpired() {\n return (\n this.sub != null && this.sub.expiration != null && new Date(this.sub.expiration) < new Date()\n );\n }\n\n get subscriptionMarkedForCancel() {\n return (\n this.subscription != null && !this.subscription.cancelled && this.subscription.cancelAtEndDate\n );\n }\n\n get subscription() {\n return this.sub != null ? this.sub.subscription : null;\n }\n\n get nextInvoice() {\n return this.sub != null ? this.sub.upcomingInvoice : null;\n }\n\n get storagePercentage() {\n return this.sub != null && this.sub.maxStorageGb\n ? +(100 * (this.sub.storageGb / this.sub.maxStorageGb)).toFixed(2)\n : 0;\n }\n\n get storageProgressWidth() {\n return this.storagePercentage < 5 ? 5 : 0;\n }\n\n get billingInterval() {\n const monthly = !this.sub.plan.isAnnual;\n return monthly ? \"month\" : \"year\";\n }\n\n get storageGbPrice() {\n return this.sub.plan.additionalStoragePricePerGb;\n }\n\n get seatPrice() {\n return this.sub.plan.seatPrice;\n }\n\n get seats() {\n return this.sub.seats;\n }\n\n get maxAutoscaleSeats() {\n return this.sub.maxAutoscaleSeats;\n }\n\n get canAdjustSeats() {\n return this.sub.plan.hasAdditionalSeatsOption;\n }\n\n get isSponsoredSubscription(): boolean {\n return this.sub.subscription?.items.some((i) => i.sponsoredSubscriptionItem);\n }\n\n get canDownloadLicense() {\n return (\n (this.sub.planType !== PlanType.Free && this.subscription == null) ||\n (this.subscription != null && !this.subscription.cancelled)\n );\n }\n\n get subscriptionDesc() {\n if (this.sub.planType === PlanType.Free) {\n return this.i18nService.t(\"subscriptionFreePlan\", this.sub.seats.toString());\n } else if (\n this.sub.planType === PlanType.FamiliesAnnually ||\n this.sub.planType === PlanType.FamiliesAnnually2019\n ) {\n if (this.isSponsoredSubscription) {\n return this.i18nService.t(\"subscriptionSponsoredFamiliesPlan\", this.sub.seats.toString());\n } else {\n return this.i18nService.t(\"subscriptionFamiliesPlan\", this.sub.seats.toString());\n }\n } else if (this.sub.maxAutoscaleSeats === this.sub.seats && this.sub.seats != null) {\n return this.i18nService.t(\"subscriptionMaxReached\", this.sub.seats.toString());\n } else if (this.sub.maxAutoscaleSeats == null) {\n return this.i18nService.t(\"subscriptionUserSeatsUnlimitedAutoscale\");\n } else {\n return this.i18nService.t(\n \"subscriptionUserSeatsLimitedAutoscale\",\n this.sub.maxAutoscaleSeats.toString()\n );\n }\n }\n\n get showChangePlanButton() {\n return this.subscription == null && this.sub.planType === PlanType.Free && !this.showChangePlan;\n }\n}\n","
\n

\n {{ \"subscription\" | i18n }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n\n \n {{ \"subscriptionCanceled\" | i18n }}\n \n

{{ \"subscriptionPendingCanceled\" | i18n }}

\n \n \n {{ \"reinstateSubscription\" | i18n }}\n \n \n \n
\n
\n
\n
{{ \"billingPlan\" | i18n }}
\n
{{ sub.plan.name }}
\n \n
{{ \"status\" | i18n }}
\n
\n {{\n isSponsoredSubscription ? \"sponsored\" : subscription.status || \"-\"\n }}\n {{\n \"pendingCancellation\" | i18n\n }}\n
\n
{{ \"nextCharge\" | i18n }}
\n
\n {{\n nextInvoice\n ? (nextInvoice.date | date: \"mediumDate\") +\n \", \" +\n (nextInvoice.amount | currency: \"$\")\n : \"-\"\n }}\n
\n
\n
\n
\n
\n {{ \"details\" | i18n }}\n \n \n \n \n \n \n \n
\n {{ i.name }} {{ i.quantity > 1 ? \"×\" + i.quantity : \"\" }} @\n {{ i.amount | currency: \"$\" }}\n {{ i.quantity * i.amount | currency: \"$\" }} /{{ i.interval | i18n }}
\n
\n \n
\n
\n
{{ \"provider\" | i18n }}
\n
{{ \"yourProviderIs\" | i18n: userOrg.providerName }}
\n
\n
\n
\n
\n \n \n {{ \"changeBillingPlan\" | i18n }}\n \n \n \n

{{ \"manageSubscription\" | i18n }}

\n

{{ subscriptionDesc }}

\n \n
\n \n \n
\n
\n \n \n {{ \"removeSponsorship\" | i18n }}\n \n

{{ \"storage\" | i18n }}

\n

{{ \"subscriptionStorage\" | i18n: sub.maxStorageGb || 0:sub.storageName || \"0 MB\" }}

\n
\n \n {{ storagePercentage / 100 | percent }}\n
\n \n \n
\n
\n \n \n {{ \"removeStorage\" | i18n }}\n \n
\n \n
\n
\n\n

{{ \"additionalOptions\" | i18n }}

\n

\n {{ \"additionalOptionsDesc\" | i18n }}\n

\n
\n \n {{ \"downloadLicense\" | i18n }}\n \n \n \n {{ \"cancelSubscription\" | i18n }}\n \n
\n
\n \n
\n
\n \n
\n
{{ \"billingPlan\" | i18n }}
\n
{{ sub.plan.name }}
\n
{{ \"expiration\" | i18n }}
\n
\n {{ sub.expiration | date: \"mediumDate\" }}\n \n \n {{ \"licenseIsExpired\" | i18n }}\n \n
\n
{{ \"neverExpires\" | i18n }}
\n
\n
\n \n \n {{ \"manageSubscription\" | i18n }}\n \n
\n
\n
\n \n ×\n \n

{{ \"updateLicense\" | i18n }}

\n \n
\n
\n
\n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-org-settings\",\n templateUrl: \"settings.component.html\",\n})\nexport class SettingsComponent {\n access2fa = false;\n selfHosted: boolean;\n\n constructor(\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n ngOnInit() {\n this.route.parent.params.subscribe(async (params) => {\n this.selfHosted = await this.platformUtilsService.isSelfHost();\n const organization = await this.organizationService.get(params.organizationId);\n this.access2fa = organization.use2fa;\n });\n }\n}\n","
\n
\n
\n
\n
{{ \"settings\" | i18n }}
\n
\n \n {{ \"myOrganization\" | i18n }}\n \n \n {{ \"subscription\" | i18n }}\n \n \n {{ \"billing\" | i18n }}\n \n \n {{ \"twoStepLogin\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\n\nimport { TwoFactorDuoComponent } from \"../../settings/two-factor-duo.component\";\nimport { TwoFactorSetupComponent as BaseTwoFactorSetupComponent } from \"../../settings/two-factor-setup.component\";\n\n@Component({\n selector: \"app-two-factor-setup\",\n templateUrl: \"../../settings/two-factor-setup.component.html\",\n})\nexport class TwoFactorSetupComponent extends BaseTwoFactorSetupComponent {\n constructor(\n apiService: ApiService,\n modalService: ModalService,\n messagingService: MessagingService,\n policyService: PolicyService,\n private route: ActivatedRoute,\n stateService: StateService\n ) {\n super(apiService, modalService, messagingService, policyService, stateService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await super.ngOnInit();\n });\n }\n\n async manage(type: TwoFactorProviderType) {\n switch (type) {\n case TwoFactorProviderType.OrganizationDuo: {\n const duoComp = await this.openModal(this.duoModalRef, TwoFactorDuoComponent);\n duoComp.type = TwoFactorProviderType.OrganizationDuo;\n duoComp.organizationId = this.organizationId;\n duoComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.OrganizationDuo);\n });\n break;\n }\n default:\n break;\n }\n }\n\n protected getTwoFactorProviders() {\n return this.apiService.getTwoFactorOrganizationProviders(this.organizationId);\n }\n\n protected filterProvider(type: TwoFactorProviderType) {\n return type !== TwoFactorProviderType.OrganizationDuo;\n }\n}\n","
\n

{{ \"twoStepLogin\" | i18n }}

\n
\n

{{ \"twoStepLoginDesc\" | i18n }}

\n

{{ \"twoStepLoginOrganizationDesc\" | i18n }}

\n\n

{{ \"twoStepLoginRecoveryWarning\" | i18n }}

\n \n
\n

\n {{ \"providers\" | i18n }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n\n {{ \"twoStepLoginPolicyUserWarning\" | i18n }}\n\n
    \n
  • \n
    \n \n
    \n
    \n

    \n {{ p.name }}\n \n \n {{ \"enabled\" | i18n }}\n \n \n

    \n {{ p.description }}\n
    \n
    \n \n {{ \"manage\" | i18n }}\n \n
    \n
  • \n
\n\n\n\n\n\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ValidationService } from \"jslib-angular/services/validation.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { PlanSponsorshipType } from \"jslib-common/enums/planSponsorshipType\";\nimport { PlanType } from \"jslib-common/enums/planType\";\nimport { ProductType } from \"jslib-common/enums/productType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { OrganizationSponsorshipRedeemRequest } from \"jslib-common/models/request/organization/organizationSponsorshipRedeemRequest\";\n\nimport { DeleteOrganizationComponent } from \"src/app/organizations/settings/delete-organization.component\";\nimport { OrganizationPlansComponent } from \"src/app/settings/organization-plans.component\";\n\n@Component({\n selector: \"families-for-enterprise-setup\",\n templateUrl: \"families-for-enterprise-setup.component.html\",\n})\nexport class FamiliesForEnterpriseSetupComponent implements OnInit {\n @ViewChild(OrganizationPlansComponent, { static: false })\n set organizationPlansComponent(value: OrganizationPlansComponent) {\n if (!value) {\n return;\n }\n\n value.plan = PlanType.FamiliesAnnually;\n value.product = ProductType.Families;\n value.acceptingSponsorship = true;\n value.onSuccess.subscribe(this.onOrganizationCreateSuccess.bind(this));\n }\n\n @ViewChild(\"deleteOrganizationTemplate\", { read: ViewContainerRef, static: true })\n deleteModalRef: ViewContainerRef;\n\n loading = true;\n badToken = false;\n formPromise: Promise;\n\n token: string;\n existingFamilyOrganizations: Organization[];\n\n showNewOrganization = false;\n _organizationPlansComponent: OrganizationPlansComponent;\n _selectedFamilyOrganizationId = \"\";\n\n constructor(\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private apiService: ApiService,\n private syncService: SyncService,\n private validationService: ValidationService,\n private organizationService: OrganizationService,\n private modalService: ModalService\n ) {}\n\n async ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n const error = qParams.token == null;\n if (error) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"sponsoredFamiliesAcceptFailed\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"/\"]);\n return;\n }\n\n this.token = qParams.token;\n\n await this.syncService.fullSync(true);\n this.badToken = !(await this.apiService.postPreValidateSponsorshipToken(this.token));\n this.loading = false;\n\n this.existingFamilyOrganizations = (await this.organizationService.getAll()).filter(\n (o) => o.planProductType === ProductType.Families\n );\n\n if (this.existingFamilyOrganizations.length === 0) {\n this.selectedFamilyOrganizationId = \"createNew\";\n }\n });\n }\n\n async submit() {\n this.formPromise = this.doSubmit(this._selectedFamilyOrganizationId);\n await this.formPromise;\n this.formPromise = null;\n }\n\n get selectedFamilyOrganizationId() {\n return this._selectedFamilyOrganizationId;\n }\n\n set selectedFamilyOrganizationId(value: string) {\n this._selectedFamilyOrganizationId = value;\n this.showNewOrganization = value === \"createNew\";\n }\n\n private async doSubmit(organizationId: string) {\n try {\n const request = new OrganizationSponsorshipRedeemRequest();\n request.planSponsorshipType = PlanSponsorshipType.FamiliesForEnterprise;\n request.sponsoredOrganizationId = organizationId;\n\n await this.apiService.postRedeemSponsorship(this.token, request);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"sponsoredFamiliesOfferRedeemed\")\n );\n await this.syncService.fullSync(true);\n\n this.router.navigate([\"/\"]);\n } catch (e) {\n if (this.showNewOrganization) {\n await this.modalService.openViewRef(\n DeleteOrganizationComponent,\n this.deleteModalRef,\n (comp) => {\n comp.organizationId = organizationId;\n comp.deleteOrganizationRequestType = \"InvalidFamiliesForEnterprise\";\n comp.onSuccess.subscribe(() => {\n this.router.navigate([\"/\"]);\n });\n }\n );\n }\n this.validationService.showError(this.i18nService.t(\"sponsorshipTokenHasExpired\"));\n }\n }\n\n private async onOrganizationCreateSuccess(value: any) {\n // Use newly created organization id\n await this.doSubmit(value.organizationId);\n }\n}\n","
\n
\n

{{ \"sponsoredFamiliesOffer\" | i18n }}

\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n {{ \"badToken\" | i18n }}\n
\n \n

\n {{ \"acceptBitwardenFamiliesHelp\" | i18n }}\n

\n
\n \n \n \n \n \n \n
\n
\n \n
\n
\n \n
\n \n
\n\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { ExportService } from \"jslib-common/abstractions/export.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\n\nimport { ExportComponent as BaseExportComponent } from \"../../tools/export.component\";\n\n@Component({\n selector: \"app-org-export\",\n templateUrl: \"../../tools/export.component.html\",\n})\nexport class ExportComponent extends BaseExportComponent {\n constructor(\n cryptoService: CryptoService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n exportService: ExportService,\n eventService: EventService,\n private route: ActivatedRoute,\n policyService: PolicyService,\n logService: LogService,\n userVerificationService: UserVerificationService,\n formBuilder: FormBuilder\n ) {\n super(\n cryptoService,\n i18nService,\n platformUtilsService,\n exportService,\n eventService,\n policyService,\n logService,\n userVerificationService,\n formBuilder\n );\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n });\n await super.ngOnInit();\n }\n\n async checkExportDisabled() {\n return;\n }\n\n getExportData() {\n return this.exportService.getOrganizationExport(this.organizationId, this.format);\n }\n\n getFileName() {\n return super.getFileName(\"org\");\n }\n\n async collectEvent(): Promise {\n // TODO\n // await this.eventService.collect(EventType.Organization_ClientExportedVault);\n }\n}\n","\n
\n

{{ \"exportVault\" | i18n }}

\n
\n\n \n {{ \"personalVaultExportPolicyInEffect\" | i18n }}\n \n \n\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { ExposedPasswordsReportComponent as BaseExposedPasswordsReportComponent } from \"../../reports/exposed-passwords-report.component\";\n\n@Component({\n selector: \"app-exposed-passwords-report\",\n templateUrl: \"../../reports/exposed-passwords-report.component.html\",\n})\nexport class ExposedPasswordsReportComponent extends BaseExposedPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(\n cipherService: CipherService,\n auditService: AuditService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private organizationService: OrganizationService,\n private route: ActivatedRoute,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(\n cipherService,\n auditService,\n modalService,\n messagingService,\n stateService,\n passwordRepromptService\n );\n }\n\n ngOnInit() {\n const dynamicSuper = Object.getPrototypeOf(this.constructor.prototype);\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n // TODO: We should do something about this, calling super in an async function is bad\n dynamicSuper.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some((x) => x.id === c.id);\n }\n}\n","
\n

{{ \"exposedPasswordsReport\" | i18n }}

\n
\n

{{ \"exposedPasswordsReportDesc\" | i18n }}

\n\n \n {{ \"checkExposedPasswords\" | i18n }}\n\n
\n \n {{ \"noExposedPasswords\" | i18n }}\n \n \n \n {{ \"exposedPasswordsFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n \n
\n \n \n \n {{\n c.name\n }}\n \n \n {{ c.name }}\n \n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n {{ \"exposedXTimes\" | i18n: (exposedPasswordMap.get(c.id) | number) }}\n \n
\n
\n
\n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { ImportService } from \"jslib-common/abstractions/import.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\n\nimport { ImportComponent as BaseImportComponent } from \"../../tools/import.component\";\n\n@Component({\n selector: \"app-org-import\",\n templateUrl: \"../../tools/import.component.html\",\n})\nexport class ImportComponent extends BaseImportComponent {\n organizationName: string;\n\n constructor(\n i18nService: I18nService,\n importService: ImportService,\n router: Router,\n private route: ActivatedRoute,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n private organizationService: OrganizationService,\n logService: LogService\n ) {\n super(i18nService, importService, router, platformUtilsService, policyService, logService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n this.successNavigate = [\"organizations\", this.organizationId, \"vault\"];\n await super.ngOnInit();\n this.importBlockedByPolicy = false;\n });\n const organization = await this.organizationService.get(this.organizationId);\n this.organizationName = organization.name;\n }\n\n async submit() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"importWarning\", this.organizationName),\n this.i18nService.t(\"warning\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n super.submit();\n }\n}\n","
\n

{{ \"importData\" | i18n }}

\n
\n\n {{ \"personalOwnershipPolicyInEffectImports\" | i18n }}\n\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n
\n
\n
\n \n \n See detailed instructions on our help site at\n \n https://bitwarden.com/help/export-your-data/\n \n \n See detailed instructions on our help site at\n \n https://bitwarden.com/help/import-from-lastpass/\n \n \n Using the KeePassX desktop application, navigate to \"Database\" → \"Export to CSV file\" and\n save the CSV file.\n \n \n In the Avira web vault, go to \"Settings\" → \"My Data\" → \"Export data\" and save the\n CSV file.\n \n \n In the Blur web vault, click your username at the top and go to \"Settings\" → \"Export\n Data\", then click \"Export CSV\" for your \"Accounts\".\n \n \n Using the SaveInCloud desktop application, navigate to \"File\" → \"Export\" → \"As XML\"\n and save the XML file.\n \n \n Using the Padlock desktop application, click the hamburger icon in the top left corner and\n navigate to \"Settings\" → \"Export\" button and save the file \"As CSV\".\n \n \n Using the KeePass 2 desktop application, navigate to \"File\" → \"Export\" and select the\n \"KeePass XML (2.x)\" option.\n \n \n Using the Universal Password Manager desktop application, navigate to \"Database\" →\n \"Export\" and save the CSV file.\n \n \n Using the SaferPass browser extension, click the hamburger icon in the top left corner and\n navigate to \"Settings\". Click the \"Export accounts\" button to save the CSV file.\n \n \n Using the Meldium web vault, navigate to \"Settings\". Locate the \"Export data\" function and\n click \"Show me my data\" to save the CSV file.\n \n \n Log into the Keeper web vault (keepersecurity.com/vault). Click on your \"account email\" (top\n right) and select \"Settings\". Go to \"Export\" and find the \"Export to .csv File\" option. Click\n \"Export\" to save the CSV file.\n \n \n Log into the Keeper web vault (keepersecurity.com/vault). Click on your \"account email\" (top\n right) and select \"Settings\". Go to \"Export\" and find the \"Export to .json File\" option. Click\n \"Export\" to save the JSON file.\n \n \n \n The process is exactly the same as importing from Google Chrome.\n \n See detailed instructions on our help site at\n \n https://bitwarden.com/help/import-from-chrome/\n \n \n See detailed instructions on our help site at\n \n https://bitwarden.com/help/import-from-firefox/.\n \n \n See detailed instructions on our help site at\n \n https://bitwarden.com/help/import-from-safari/.\n \n \n See detailed instructions on our help site at\n \n https://bitwarden.com/help/import-from-1password/.\n \n \n Using the Password Dragon desktop application, navigate to \"File\" → \"Export\" → \"To\n XML\". In the dialog that pops up select \"All Rows\" and check all fields. Click the \"Export\"\n button and save the XML file.\n \n \n Using the Enpass desktop application, navigate to \"File\" → \"Export\" → \"As CSV\".\n Select \"OK\" to the warning alert and save the CSV file. Note that the importer only supports\n files exported while Enpass is set to the English language, so adjust your settings\n accordingly.\n \n \n Using the Enpass 6 desktop application, click the menu button and navigate to \"File\" →\n \"Export\". Select the \".json\" file format option and save the JSON file.\n \n \n Using the Password Safe desktop application, navigate to \"File\" → \"Export To\" → \"XML\n format...\" and save the XML file.\n \n \n Log in to Dashlane, click on \"My Account\" → \"Settings\" → \"Export file\" and select\n \"Export as a CSV file\". This will download a zip archive containing various CSV files. Unzip\n the archive and import each CSV file individually.\n \n \n Dashlane no longer supports the JSON format. Only use this if you have an existing JSON for\n import. Use the CSV importer when creating new exports.\n \n \n Using the mSecure desktop application, navigate to \"File\" → \"Export\" → \"CSV File...\"\n and save the CSV file.\n \n \n Using the Sticky Password desktop application, navigate to \"Menu\" (top right) → \"Export\"\n → \"Export all\". Select the unencrypted format XML option and save the XML file.\n \n \n Using the True Key desktop application, click the gear icon (top right) and then navigate to\n \"App Settings\". Click the \"Export\" button, enter your password and save the CSV file.\n \n \n Log into the Clipperz web application (clipperz.is/app). Click the hamburger menu icon in the\n top right to expand the navigation bar. Navigate to \"Data\" → \"Export\". Click the\n \"download HTML+JSON\" button to save the HTML file.\n \n \n Using the RoboForm Editor desktop application, navigate to \"RoboForm\" (top left) →\n \"Options\" → \"Account & Data\" and click the \"Export\" button. Select all of your data,\n change the \"Format\" to \"CSV file\" and then click the \"Export\" button to save the CSV file.\n Note: RoboForm only allows you to export Logins. Other items will not be exported.\n \n \n Log into the Passbolt web vault and navigate to the \"Passwords\" listing. Select all of the\n passwords you would like to export and click the \"Export\" button at the top of the listing.\n Choose the \"csv (lastpass)\" export format and click the \"Export\" button.\n \n \n Using the Ascendo DataVault desktop application, navigate to \"Tools\" → \"Export\". In the\n dialog that pops up, select the \"All Items (DVX, CSV)\" option. Click the \"Ok\" button to save\n the CSV file.\n \n \n Using the Password Boss desktop application, navigate to \"File\" → \"Export data\" →\n \"Password Boss JSON - not encrypted\" and save the JSON file.\n \n \n Log into the Zoho web vault (vault.zoho.com). Navigate to \"Tools\" → \"Export Secrets\".\n Select \"All Secrets\" and click the \"Zoho Vault Format CSV\" button. Highlight and copy the data\n from the textarea. Open a text editor like Notepad and paste the data. Save the data from the\n text editor as\n zoho_export.csv.\n \n \n Using the SplashID Safe desktop application, click on the SplashID blue lock logo in the top\n right corner. Navigate to \"Export\" → \"Export as CSV\" and save the CSV file.\n \n \n Using the PassKeep mobile app, navigate to \"Backup/Restore\". Locate the \"CSV Backup/Restore\"\n section and click \"Backup to CSV\" to save the CSV file.\n \n \n Make sure you have python-keyring and python-gnomekeyring installed. Save the\n GNOME Keyring Import/Export\n python script to your desktop as pw_helper.py. Open terminal and run\n chmod +rx Desktop/pw_helper.py and then\n python Desktop/pw_helper.py export Desktop/my_passwords.json. Then upload the\n resulting my_passwords.json file here to Bitwarden.\n \n \n Using the Password Agent desktop application navigate to \"File\" → \"Export\", select the\n \"Fields to export\" button and check all of the fields, change the \"Output format\" to \"CSV\",\n and then click the \"Start\" button to save the CSV file.\n \n \n Log into the Passpack website vault and navigate to \"Settings\" → \"Export\", then click the\n \"Download\" button to save the CSV file.\n \n \n Open your Passman vault and click on \"Settings\" in the bottom left corner. In the \"Settings\"\n window switch to the \"Export credentials\" tab and choose \"JSON\" as the export type. Enter your\n vault's passphrase and click the \"Export\" button to save the JSON file.\n \n \n Open the Avast Passwords desktop application and navigate to \"Settings\" → \"Import/export\n data\". Select the \"Export\" button for the \"Export to CSV file\" option to save the CSV file.\n \n \n Open the Avast Passwords desktop application and navigate to \"Settings\" → \"Import/export\n data\". Select the \"Export\" button for the \"Export to JSON file\" option to save the JSON file.\n \n \n Open the F-Secure KEY desktop application and navigate to \"Settings\" → \"Export\n Passwords\". Select the \"Export\" button, enter your master password, and save the FSK file.\n \n \n Open the Kaspersky Password Manager desktop application and navigate to \"Settings\" →\n \"Import/Export\". Locate the \"Export to text file\" section and select the \"Export\" button to\n save the TXT file.\n \n \n Open the RememBear desktop application and navigate to \"Settings\" → \"Account\" →\n \"Export\". Enter your master password and select the \"Export Anyway\" button to save the CSV\n file.\n \n \n Open the PasswordWallet desktop application and navigate to \"File\" → \"Export\" →\n \"Visible entries to text file\". Enter your password and select the \"Ok\" button to save the TXT\n file.\n \n \n Open the Myki desktop browser extension and navigate to \"Advanced\" → \"Export Accounts\"\n and then scan the QR code with your mobile device. Various CSV files will then be saved to\n your computer's downloads folder.\n \n \n Export your SecureSafe password safe to a CSV file with a comma delimiter.\n \n \n Open the LogMeOnce browser extension, then navigate to \"Open Menu\" → \"Export To\" and\n select \"CSV File\" to save the CSV file.\n \n \n Open the BlackBerry Password Keeper application, then navigate to \"Settings\" →\n \"Import/Export\". Select \"Export Passwords\" and follow the instructions on screen to save the\n unencrypted CSV file.\n \n \n Open the Buttercup desktop application and unlock your vault. Right click on your vault's icon\n and select \"Export\" to save the CSV file.\n \n \n Open the Codebook desktop application and log in. Navigate to \"File\" → \"Export all\", then\n click \"Yes\" on the dialog and save the CSV file.\n \n \n Open the newest version of the Encryptr desktop application and allow all of your data to\n sync. Once syncing of your data is complete, the download icon in the top right corner will\n turn pink. Click the download icon and save the CSV file.\n \n \n From the Yoti browser extension, click on \"Settings\", then \"Export Saved Logins\" and save the\n CSV file.\n \n \n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n \n {{ \"importData\" | i18n }}\n \n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { InactiveTwoFactorReportComponent as BaseInactiveTwoFactorReportComponent } from \"../../reports/inactive-two-factor-report.component\";\n\n@Component({\n selector: \"app-inactive-two-factor-report\",\n templateUrl: \"../../reports/inactive-two-factor-report.component.html\",\n})\nexport class InactiveTwoFactorReportComponent extends BaseInactiveTwoFactorReportComponent {\n constructor(\n cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private route: ActivatedRoute,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService,\n private organizationService: OrganizationService\n ) {\n super(\n cipherService,\n modalService,\n messagingService,\n stateService,\n logService,\n passwordRepromptService\n );\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n}\n","
\n

\n {{ \"inactive2faReport\" | i18n }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n
\n

{{ \"inactive2faReportDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n {{ \"noInactive2fa\" | i18n }}\n \n \n \n {{ \"inactive2faFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n \n
\n \n \n {{\n c.name\n }}\n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n {{ \"instructions\" | i18n }}\n
\n
\n
\n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { ReusedPasswordsReportComponent as BaseReusedPasswordsReportComponent } from \"../../reports/reused-passwords-report.component\";\n\n@Component({\n selector: \"app-reused-passwords-report\",\n templateUrl: \"../../reports/reused-passwords-report.component.html\",\n})\nexport class ReusedPasswordsReportComponent extends BaseReusedPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(\n cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(cipherService, modalService, messagingService, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some((x) => x.id === c.id);\n }\n}\n","
\n

\n {{ \"reusedPasswordsReport\" | i18n }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n
\n

{{ \"reusedPasswordsReportDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n {{ \"noReusedPasswords\" | i18n }}\n \n \n \n {{ \"reusedPasswordsFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n \n
\n \n \n \n {{\n c.name\n }}\n \n \n {{ c.name }}\n \n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n {{ \"reusedXTimes\" | i18n: passwordUseMap.get(c.login.password) }}\n \n
\n
\n
\n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\n@Component({\n selector: \"app-org-tools\",\n templateUrl: \"tools.component.html\",\n})\nexport class ToolsComponent {\n organization: Organization;\n accessReports = false;\n loading = true;\n\n constructor(\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private messagingService: MessagingService\n ) {}\n\n ngOnInit() {\n this.route.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n // TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now\n // since all paid plans include useTotp\n this.accessReports = this.organization.useTotp;\n this.loading = false;\n });\n }\n\n upgradeOrganization() {\n this.messagingService.send(\"upgradeOrganization\", { organizationId: this.organization.id });\n }\n}\n","
\n \n \n {{ \"loading\" | i18n }}\n \n \n
\n
\n \n
\n
\n {{ \"reports\" | i18n }}\n
\n \n {{ \"upgrade\" | i18n }}\n \n
\n
\n
\n \n {{ \"exposedPasswordsReport\" | i18n }}\n \n \n {{ \"reusedPasswordsReport\" | i18n }}\n \n \n {{ \"weakPasswordsReport\" | i18n }}\n \n \n {{ \"unsecuredWebsitesReport\" | i18n }}\n \n \n {{ \"inactive2faReport\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n \n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { UnsecuredWebsitesReportComponent as BaseUnsecuredWebsitesReportComponent } from \"../../reports/unsecured-websites-report.component\";\n\n@Component({\n selector: \"app-unsecured-websites-report\",\n templateUrl: \"../../reports/unsecured-websites-report.component.html\",\n})\nexport class UnsecuredWebsitesReportComponent extends BaseUnsecuredWebsitesReportComponent {\n constructor(\n cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(cipherService, modalService, messagingService, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n}\n","
\n

\n {{ \"unsecuredWebsitesReport\" | i18n }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n
\n

{{ \"unsecuredWebsitesReportDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n {{ \"noUnsecuredWebsites\" | i18n }}\n \n \n \n {{ \"unsecuredWebsitesFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n
\n \n \n {{\n c.name\n }}\n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n
\n
\n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { WeakPasswordsReportComponent as BaseWeakPasswordsReportComponent } from \"../../reports/weak-passwords-report.component\";\n\n@Component({\n selector: \"app-weak-passwords-report\",\n templateUrl: \"../../reports/weak-passwords-report.component.html\",\n})\nexport class WeakPasswordsReportComponent extends BaseWeakPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(\n cipherService: CipherService,\n passwordGenerationService: PasswordGenerationService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(\n cipherService,\n passwordGenerationService,\n modalService,\n messagingService,\n stateService,\n passwordRepromptService\n );\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some((x) => x.id === c.id);\n }\n}\n","
\n

\n {{ \"weakPasswordsReport\" | i18n }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n
\n

{{ \"weakPasswordsReportDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n {{ \"noWeakPasswords\" | i18n }}\n \n \n \n {{ \"weakPasswordsFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n \n
\n \n \n \n {{\n c.name\n }}\n \n \n {{ c.name }}\n \n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n {{ passwordStrengthMap.get(c.id)[0] | i18n }}\n \n
\n
\n
\n\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TotpService } from \"jslib-common/abstractions/totp.service\";\nimport { CipherData } from \"jslib-common/models/data/cipherData\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherCreateRequest } from \"jslib-common/models/request/cipherCreateRequest\";\nimport { CipherRequest } from \"jslib-common/models/request/cipherRequest\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"../../vault/add-edit.component\";\n\n@Component({\n selector: \"app-org-vault-add-edit\",\n templateUrl: \"../../vault/add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n organization: Organization;\n originalCipher: Cipher = null;\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n totpService: TotpService,\n passwordGenerationService: PasswordGenerationService,\n private apiService: ApiService,\n messagingService: MessagingService,\n eventService: EventService,\n policyService: PolicyService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService,\n organizationService: OrganizationService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n totpService,\n passwordGenerationService,\n messagingService,\n eventService,\n policyService,\n organizationService,\n logService,\n passwordRepromptService\n );\n }\n\n protected allowOwnershipAssignment() {\n if (\n this.ownershipOptions != null &&\n (this.ownershipOptions.length > 1 || !this.allowPersonal)\n ) {\n if (this.organization != null) {\n return this.cloneMode && this.organization.canEditAnyCollection;\n } else {\n return !this.editMode || this.cloneMode;\n }\n }\n return false;\n }\n\n protected loadCollections() {\n if (!this.organization.canEditAnyCollection) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected async loadCipher() {\n if (!this.organization.canEditAnyCollection) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n const data = new CipherData(response);\n this.originalCipher = new Cipher(data);\n return new Cipher(data);\n }\n\n protected encryptCipher() {\n if (!this.organization.canEditAnyCollection) {\n return super.encryptCipher();\n }\n return this.cipherService.encrypt(this.cipher, null, this.originalCipher);\n }\n\n protected async saveCipher(cipher: Cipher) {\n if (!this.organization.canEditAnyCollection || cipher.organizationId == null) {\n return super.saveCipher(cipher);\n }\n if (this.editMode && !this.cloneMode) {\n const request = new CipherRequest(cipher);\n return this.apiService.putCipherAdmin(this.cipherId, request);\n } else {\n const request = new CipherCreateRequest(cipher);\n return this.apiService.postCipherAdmin(request);\n }\n }\n\n protected async deleteCipher() {\n if (!this.organization.canEditAnyCollection) {\n return super.deleteCipher();\n }\n return this.cipher.isDeleted\n ? this.apiService.deleteCipherAdmin(this.cipherId)\n : this.apiService.putDeleteCipherAdmin(this.cipherId);\n }\n}\n","
\n
\n \n
\n

{{ title }}

\n \n ×\n \n
\n
\n \n {{ \"personalOwnershipPolicyInEffect\" | i18n }}\n \n
\n
\n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n \n \n
\n
\n \n \n
\n
\n \n
\n \n
\n \n \n \n
\n
\n
\n
\n
\n \n
\n \n \n \n \n \n \n \n
\n
\n
\n \n
\n \n \n \n \n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n \n \n \n {{ \"upgrade\" | i18n }}\n \n
\n
\n \n {{ totpSec }}\n \n \n \n \n \n \n \n {{\n totpCodeFormatted\n }}\n \n \n \n
\n
\n
\n \n \n
\n \n
\n \n
\n \n \n \n \n \n \n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n
\n \n \n {{ \"newUri\" | i18n }}\n \n \n \n \n
\n
\n \n \n
\n
\n \n \n \n \n
\n
\n
\n
\n \n
\n \n
\n \n \n \n \n \n \n
\n
\n
\n
\n \n \n \n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n \n
\n \n \n \n \n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n \n

{{ \"ownership\" | i18n }}

\n
\n
\n \n \n \n \n
\n
\n
\n \n

{{ \"collections\" | i18n }}

\n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n
\n \n \n
\n
\n
\n \n
\n
\n {{ \"dateUpdated\" | i18n }}:\n {{ cipher.revisionDate | date: \"medium\" }}\n
\n
\n {{ \"datePasswordUpdated\" | i18n }}:\n {{ cipher.passwordRevisionDisplayDate | date: \"medium\" }}\n
\n
\n {{ \"passwordHistory\" | i18n }}:\n \n {{ cipher.passwordHistory.length }}\n \n
\n
\n
\n {{ ph.lastUsedDate | date: \"short\" }} -\n {{ ph.password }}\n
\n
\n
\n
\n \n

{{ \"options\" | i18n }}

\n
\n \n \n \n \n \n
\n
\n
\n
\n \n \n {{ (cipher?.isDeleted ? \"restore\" : \"save\") | i18n }}\n \n \n
\n \n \n \n \n \n \n \n
\n
\n \n
\n\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherData } from \"jslib-common/models/data/cipherData\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { AttachmentView } from \"jslib-common/models/view/attachmentView\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"../../vault/attachments.component\";\n\n@Component({\n selector: \"app-org-vault-attachments\",\n templateUrl: \"../../vault/attachments.component.html\",\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n organization: Organization;\n\n constructor(\n cipherService: CipherService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n logService: LogService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n stateService,\n platformUtilsService,\n apiService,\n logService\n );\n }\n\n protected async reupload(attachment: AttachmentView) {\n if (this.organization.canEditAnyCollection && this.showFixOldAttachments(attachment)) {\n await super.reuploadCipherAttachment(attachment, true);\n }\n }\n\n protected async loadCipher() {\n if (!this.organization.canEditAnyCollection) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n return new Cipher(new CipherData(response));\n }\n\n protected saveCipherAttachment(file: File) {\n return this.cipherService.saveAttachmentWithServer(\n this.cipherDomain,\n file,\n this.organization.canEditAnyCollection\n );\n }\n\n protected deleteCipherAttachment(attachmentId: string) {\n if (!this.organization.canEditAnyCollection) {\n return super.deleteCipherAttachment(attachmentId);\n }\n return this.apiService.deleteCipherAttachmentAdmin(this.cipherId, attachmentId);\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return attachment.key == null && this.organization.canEditAnyCollection;\n }\n}\n","
\n
\n \n
\n

\n {{ \"attachments\" | i18n }}\n {{ cipher.name }}\n

\n \n ×\n \n
\n
\n \n \n \n \n \n \n \n \n
\n \n \n \n
\n {{ a.fileName }}\n
\n \n \n {{ \"attachmentFixDesc\" | i18n }}\n \n {{ \"fix\" | i18n }}\n \n
\n
\n {{ a.sizeName }}\n
\n \n \n \n \n
\n
\n

{{ \"newAttachment\" | i18n }}

\n \n \n {{ \"maxFileSize\" | i18n }}\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n \n
\n
\n","import { Component, EventEmitter, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TotpService } from \"jslib-common/abstractions/totp.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { CiphersComponent as BaseCiphersComponent } from \"../../vault/ciphers.component\";\n\n@Component({\n selector: \"app-org-vault-ciphers\",\n templateUrl: \"../../vault/ciphers.component.html\",\n})\nexport class CiphersComponent extends BaseCiphersComponent {\n @Output() onEventsClicked = new EventEmitter();\n\n organization: Organization;\n accessEvents = false;\n\n protected allCiphers: CipherView[] = [];\n\n constructor(\n searchService: SearchService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n cipherService: CipherService,\n private apiService: ApiService,\n eventService: EventService,\n totpService: TotpService,\n passwordRepromptService: PasswordRepromptService,\n logService: LogService,\n stateService: StateService\n ) {\n super(\n searchService,\n i18nService,\n platformUtilsService,\n cipherService,\n eventService,\n totpService,\n stateService,\n passwordRepromptService,\n logService\n );\n }\n\n async load(filter: (cipher: CipherView) => boolean = null) {\n if (this.organization.canEditAnyCollection) {\n this.accessEvents = this.organization.useEvents;\n this.allCiphers = await this.cipherService.getAllFromApiForOrganization(this.organization.id);\n } else {\n this.allCiphers = (await this.cipherService.getAllDecrypted()).filter(\n (c) => c.organizationId === this.organization.id\n );\n }\n await this.searchService.indexCiphers(this.organization.id, this.allCiphers);\n await this.applyFilter(filter);\n this.loaded = true;\n }\n\n async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n if (this.organization.canViewAllCollections) {\n await super.applyFilter(filter);\n } else {\n const f = (c: CipherView) =>\n c.organizationId === this.organization.id && (filter == null || filter(c));\n await super.applyFilter(f);\n }\n }\n\n async search(timeout: number = null) {\n await super.search(timeout, this.allCiphers);\n }\n events(c: CipherView) {\n this.onEventsClicked.emit(c);\n }\n\n protected deleteCipher(id: string) {\n if (!this.organization.canEditAnyCollection) {\n return super.deleteCipher(id, this.deleted);\n }\n return this.deleted\n ? this.apiService.deleteCipherAdmin(id)\n : this.apiService.putDeleteCipherAdmin(id);\n }\n\n protected showFixOldAttachments(c: CipherView) {\n return this.organization.canEditAnyCollection && c.hasOldAttachments;\n }\n}\n","\n \n \n \n \n \n \n \n \n \n \n {{ c.name }}\n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n \n {{ \"attachmentsNeedFix\" | i18n }}\n \n \n
\n {{ c.subTitle }}\n \n \n
\n \n \n \n
\n \n \n \n {{ \"copyUsername\" | i18n }}\n \n \n \n {{ \"copyPassword\" | i18n }}\n \n \n \n {{ \"copyVerificationCode\" | i18n }}\n \n \n \n {{ \"launch\" | i18n }}\n \n \n \n \n {{ \"attachments\" | i18n }}\n \n \n \n {{ \"clone\" | i18n }}\n \n \n \n {{ \"moveToOrganization\" | i18n }}\n \n \n \n {{ \"collections\" | i18n }}\n \n \n \n {{ \"eventLogs\" | i18n }}\n \n \n \n {{ \"restore\" | i18n }}\n \n \n \n {{ (c.isDeleted ? \"permanentlyDelete\" : \"delete\") | i18n }}\n \n
\n
\n \n \n \n \n
\n \n \n {{ \"loading\" | i18n }}\n \n \n

{{ \"noItemsInList\" | i18n }}

\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { CipherData } from \"jslib-common/models/data/cipherData\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherCollectionsRequest } from \"jslib-common/models/request/cipherCollectionsRequest\";\n\nimport { CollectionsComponent as BaseCollectionsComponent } from \"../../vault/collections.component\";\n\n@Component({\n selector: \"app-org-vault-collections\",\n templateUrl: \"../../vault/collections.component.html\",\n})\nexport class CollectionsComponent extends BaseCollectionsComponent {\n organization: Organization;\n\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n private apiService: ApiService,\n logService: LogService\n ) {\n super(collectionService, platformUtilsService, i18nService, cipherService, logService);\n this.allowSelectNone = true;\n }\n\n protected async loadCipher() {\n if (!this.organization.canViewAllCollections) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n return new Cipher(new CipherData(response));\n }\n\n protected loadCipherCollections() {\n if (!this.organization.canViewAllCollections) {\n return super.loadCipherCollections();\n }\n return this.collectionIds;\n }\n\n protected loadCollections() {\n if (!this.organization.canViewAllCollections) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected saveCollections() {\n if (this.organization.canEditAnyCollection) {\n const request = new CipherCollectionsRequest(this.cipherDomain.collectionIds);\n return this.apiService.putCipherCollectionsAdmin(this.cipherId, request);\n } else {\n return super.saveCollections();\n }\n }\n}\n","
\n
\n
\n
\n

\n {{ \"collections\" | i18n }}\n {{ cipher.name }}\n

\n \n ×\n \n
\n
\n

{{ \"collectionsDesc\" | i18n }}

\n
\n

{{ \"collections\" | i18n }}

\n
\n \n \n
\n
\n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n
\n \n \n {{ c.name }}\n
\n
\n
\n \n \n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CollectionData } from \"jslib-common/models/data/collectionData\";\nimport { Collection } from \"jslib-common/models/domain/collection\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CollectionDetailsResponse } from \"jslib-common/models/response/collectionResponse\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\nimport { GroupingsComponent as BaseGroupingsComponent } from \"../../vault/groupings.component\";\n\n@Component({\n selector: \"app-org-vault-groupings\",\n templateUrl: \"../../vault/groupings.component.html\",\n})\nexport class GroupingsComponent extends BaseGroupingsComponent {\n organization: Organization;\n\n constructor(\n collectionService: CollectionService,\n folderService: FolderService,\n stateService: StateService,\n private apiService: ApiService,\n private i18nService: I18nService\n ) {\n super(collectionService, folderService, stateService);\n }\n\n async loadCollections() {\n if (!this.organization.canEditAnyCollection) {\n await super.loadCollections(this.organization.id);\n return;\n }\n\n const collections = await this.apiService.getCollections(this.organization.id);\n if (collections != null && collections.data != null && collections.data.length) {\n const collectionDomains = collections.data.map(\n (r) => new Collection(new CollectionData(r as CollectionDetailsResponse))\n );\n this.collections = await this.collectionService.decryptMany(collectionDomains);\n } else {\n this.collections = [];\n }\n\n const unassignedCollection = new CollectionView();\n unassignedCollection.name = this.i18nService.t(\"unassigned\");\n unassignedCollection.id = \"unassigned\";\n unassignedCollection.organizationId = this.organization.id;\n unassignedCollection.readOnly = true;\n this.collections.push(unassignedCollection);\n this.nestedCollections = await this.collectionService.getAllNested(this.collections);\n }\n\n async collapse(grouping: CollectionView) {\n await super.collapse(grouping, \"org_\");\n }\n\n isCollapsed(grouping: CollectionView) {\n return super.isCollapsed(grouping, \"org_\");\n }\n}\n","
\n
\n {{ \"filters\" | i18n }}\n \n \n \n
\n
\n \n \n

{{ \"types\" | i18n }}

\n \n

\n \n {{ \"loading\" | i18n }}\n

\n \n \n

\n {{ \"folders\" | i18n }}\n \n \n \n

\n \n
\n \n

{{ \"collections\" | i18n }}

\n \n
\n
\n
\n
\n","import {\n ChangeDetectorRef,\n Component,\n NgZone,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { EntityEventsComponent } from \"../manage/entity-events.component\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\nimport { AttachmentsComponent } from \"./attachments.component\";\nimport { CiphersComponent } from \"./ciphers.component\";\nimport { CollectionsComponent } from \"./collections.component\";\nimport { GroupingsComponent } from \"./groupings.component\";\n\nconst BroadcasterSubscriptionId = \"OrgVaultComponent\";\n\n@Component({\n selector: \"app-org-vault\",\n templateUrl: \"vault.component.html\",\n})\nexport class VaultComponent implements OnInit, OnDestroy {\n @ViewChild(GroupingsComponent, { static: true }) groupingsComponent: GroupingsComponent;\n @ViewChild(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;\n @ViewChild(\"attachments\", { read: ViewContainerRef, static: true })\n attachmentsModalRef: ViewContainerRef;\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n @ViewChild(\"collections\", { read: ViewContainerRef, static: true })\n collectionsModalRef: ViewContainerRef;\n @ViewChild(\"eventsTemplate\", { read: ViewContainerRef, static: true })\n eventsModalRef: ViewContainerRef;\n\n organization: Organization;\n collectionId: string = null;\n type: CipherType = null;\n deleted = false;\n trashCleanupWarning: string = null;\n\n constructor(\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private router: Router,\n private changeDetectorRef: ChangeDetectorRef,\n private syncService: SyncService,\n private i18nService: I18nService,\n private modalService: ModalService,\n private messagingService: MessagingService,\n private broadcasterService: BroadcasterService,\n private ngZone: NgZone,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n ngOnInit() {\n this.trashCleanupWarning = this.i18nService.t(\"trashCleanupWarningSelfHosted\");\n this.route.parent.params.pipe(first()).subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.groupingsComponent.organization = this.organization;\n this.ciphersComponent.organization = this.organization;\n\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n this.ciphersComponent.searchText = this.groupingsComponent.searchText = qParams.search;\n if (!this.organization.canViewAllCollections) {\n await this.syncService.fullSync(false);\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"syncCompleted\":\n if (message.successfully) {\n await Promise.all([\n this.groupingsComponent.load(),\n this.ciphersComponent.refresh(),\n ]);\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n }\n await this.groupingsComponent.load();\n\n if (qParams == null) {\n this.groupingsComponent.selectedAll = true;\n await this.ciphersComponent.reload();\n } else {\n if (qParams.deleted) {\n this.groupingsComponent.selectedTrash = true;\n await this.filterDeleted(true);\n } else if (qParams.type) {\n const t = parseInt(qParams.type, null);\n this.groupingsComponent.selectedType = t;\n await this.filterCipherType(t, true);\n } else if (qParams.collectionId) {\n this.groupingsComponent.selectedCollectionId = qParams.collectionId;\n await this.filterCollection(qParams.collectionId, true);\n } else {\n this.groupingsComponent.selectedAll = true;\n await this.ciphersComponent.reload();\n }\n }\n\n if (qParams.viewEvents != null) {\n const cipher = this.ciphersComponent.ciphers.filter((c) => c.id === qParams.viewEvents);\n if (cipher.length > 0) {\n this.viewEvents(cipher[0]);\n }\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async clearGroupingFilters() {\n this.ciphersComponent.showAddNew = true;\n this.ciphersComponent.deleted = false;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t(\"searchVault\");\n await this.ciphersComponent.applyFilter();\n this.clearFilters();\n this.go();\n }\n\n async filterCipherType(type: CipherType, load = false) {\n this.ciphersComponent.showAddNew = true;\n this.ciphersComponent.deleted = false;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t(\"searchType\");\n const filter = (c: CipherView) => c.type === type;\n if (load) {\n await this.ciphersComponent.reload(filter);\n } else {\n await this.ciphersComponent.applyFilter(filter);\n }\n this.clearFilters();\n this.type = type;\n this.go();\n }\n\n async filterCollection(collectionId: string, load = false) {\n this.ciphersComponent.showAddNew = true;\n this.ciphersComponent.deleted = false;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t(\"searchCollection\");\n const filter = (c: CipherView) => {\n if (collectionId === \"unassigned\") {\n return c.collectionIds == null || c.collectionIds.length === 0;\n } else {\n return c.collectionIds != null && c.collectionIds.indexOf(collectionId) > -1;\n }\n };\n if (load) {\n await this.ciphersComponent.reload(filter);\n } else {\n await this.ciphersComponent.applyFilter(filter);\n }\n this.clearFilters();\n this.collectionId = collectionId;\n this.go();\n }\n\n async filterDeleted(load = false) {\n this.ciphersComponent.showAddNew = false;\n this.ciphersComponent.deleted = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t(\"searchTrash\");\n if (load) {\n await this.ciphersComponent.reload(null, true);\n } else {\n await this.ciphersComponent.applyFilter(null);\n }\n this.clearFilters();\n this.deleted = true;\n this.go();\n }\n\n filterSearchText(searchText: string) {\n this.ciphersComponent.searchText = searchText;\n this.ciphersComponent.search(200);\n }\n\n async editCipherAttachments(cipher: CipherView) {\n if (this.organization.maxStorageGb == null || this.organization.maxStorageGb === 0) {\n this.messagingService.send(\"upgradeOrganization\", { organizationId: cipher.organizationId });\n return;\n }\n\n let madeAttachmentChanges = false;\n\n const [modal] = await this.modalService.openViewRef(\n AttachmentsComponent,\n this.attachmentsModalRef,\n (comp) => {\n comp.organization = this.organization;\n comp.cipherId = cipher.id;\n comp.onUploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n comp.onDeletedAttachment.subscribe(() => (madeAttachmentChanges = true));\n }\n );\n\n modal.onClosed.subscribe(async () => {\n if (madeAttachmentChanges) {\n await this.ciphersComponent.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n async editCipherCollections(cipher: CipherView) {\n const [modal] = await this.modalService.openViewRef(\n CollectionsComponent,\n this.collectionsModalRef,\n (comp) => {\n if (this.organization.canEditAnyCollection) {\n comp.collectionIds = cipher.collectionIds;\n comp.collections = this.groupingsComponent.collections.filter((c) => !c.readOnly);\n }\n comp.organization = this.organization;\n comp.cipherId = cipher.id;\n comp.onSavedCollections.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async addCipher() {\n const component = await this.editCipher(null);\n component.organizationId = this.organization.id;\n component.type = this.type;\n if (this.organization.canEditAnyCollection) {\n component.collections = this.groupingsComponent.collections.filter((c) => !c.readOnly);\n }\n if (this.collectionId != null) {\n component.collectionIds = [this.collectionId];\n }\n }\n\n async editCipher(cipher: CipherView) {\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.cipherAddEditModalRef,\n (comp) => {\n comp.organization = this.organization;\n comp.cipherId = cipher == null ? null : cipher.id;\n comp.onSavedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n comp.onDeletedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n comp.onRestoredCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n\n return childComponent;\n }\n\n async cloneCipher(cipher: CipherView) {\n const component = await this.editCipher(cipher);\n component.cloneMode = true;\n component.organizationId = this.organization.id;\n if (this.organization.canEditAnyCollection) {\n component.collections = this.groupingsComponent.collections.filter((c) => !c.readOnly);\n }\n // Regardless of Admin state, the collection Ids need to passed manually as they are not assigned value\n // in the add-edit componenet\n component.collectionIds = cipher.collectionIds;\n }\n\n async viewEvents(cipher: CipherView) {\n await this.modalService.openViewRef(EntityEventsComponent, this.eventsModalRef, (comp) => {\n comp.name = cipher.name;\n comp.organizationId = this.organization.id;\n comp.entityId = cipher.id;\n comp.showUser = true;\n comp.entity = \"cipher\";\n });\n }\n\n private clearFilters() {\n this.collectionId = null;\n this.type = null;\n this.deleted = false;\n }\n\n private go(queryParams: any = null) {\n if (queryParams == null) {\n queryParams = {\n type: this.type,\n collectionId: this.collectionId,\n deleted: this.deleted ? true : null,\n };\n }\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n replaceUrl: true,\n });\n }\n}\n","
\n
\n
\n \n \n
\n
\n
\n

\n {{ \"vault\" | i18n }}\n \n \n \n {{ \"loading\" | i18n }}\n \n \n

\n
\n \n \n \n {{ \"addItem\" | i18n }}\n \n
\n
\n \n {{ trashCleanupWarning }}\n \n \n \n
\n
\n
\n\n\n\n\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuardService } from \"jslib-angular/services/auth-guard.service\";\nimport { LockGuardService } from \"jslib-angular/services/lock-guard.service\";\nimport { UnauthGuardService } from \"jslib-angular/services/unauth-guard.service\";\nimport { Permissions } from \"jslib-common/enums/permissions\";\n\nimport { AcceptEmergencyComponent } from \"./accounts/accept-emergency.component\";\nimport { AcceptOrganizationComponent } from \"./accounts/accept-organization.component\";\nimport { HintComponent } from \"./accounts/hint.component\";\nimport { LockComponent } from \"./accounts/lock.component\";\nimport { LoginComponent } from \"./accounts/login.component\";\nimport { RecoverDeleteComponent } from \"./accounts/recover-delete.component\";\nimport { RecoverTwoFactorComponent } from \"./accounts/recover-two-factor.component\";\nimport { RegisterComponent } from \"./accounts/register.component\";\nimport { RemovePasswordComponent } from \"./accounts/remove-password.component\";\nimport { SetPasswordComponent } from \"./accounts/set-password.component\";\nimport { SsoComponent } from \"./accounts/sso.component\";\nimport { TwoFactorComponent } from \"./accounts/two-factor.component\";\nimport { UpdatePasswordComponent } from \"./accounts/update-password.component\";\nimport { UpdateTempPasswordComponent } from \"./accounts/update-temp-password.component\";\nimport { VerifyEmailTokenComponent } from \"./accounts/verify-email-token.component\";\nimport { VerifyRecoverDeleteComponent } from \"./accounts/verify-recover-delete.component\";\nimport { FrontendLayoutComponent } from \"./layouts/frontend-layout.component\";\nimport { OrganizationLayoutComponent } from \"./layouts/organization-layout.component\";\nimport { UserLayoutComponent } from \"./layouts/user-layout.component\";\nimport { CollectionsComponent as OrgManageCollectionsComponent } from \"./organizations/manage/collections.component\";\nimport { EventsComponent as OrgEventsComponent } from \"./organizations/manage/events.component\";\nimport { GroupsComponent as OrgGroupsComponent } from \"./organizations/manage/groups.component\";\nimport { ManageComponent as OrgManageComponent } from \"./organizations/manage/manage.component\";\nimport { PeopleComponent as OrgPeopleComponent } from \"./organizations/manage/people.component\";\nimport { PoliciesComponent as OrgPoliciesComponent } from \"./organizations/manage/policies.component\";\nimport { AccountComponent as OrgAccountComponent } from \"./organizations/settings/account.component\";\nimport { OrganizationBillingComponent } from \"./organizations/settings/organization-billing.component\";\nimport { OrganizationSubscriptionComponent } from \"./organizations/settings/organization-subscription.component\";\nimport { SettingsComponent as OrgSettingsComponent } from \"./organizations/settings/settings.component\";\nimport { TwoFactorSetupComponent as OrgTwoFactorSetupComponent } from \"./organizations/settings/two-factor-setup.component\";\nimport { FamiliesForEnterpriseSetupComponent } from \"./organizations/sponsorships/families-for-enterprise-setup.component\";\nimport { ExportComponent as OrgExportComponent } from \"./organizations/tools/export.component\";\nimport { ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent } from \"./organizations/tools/exposed-passwords-report.component\";\nimport { ImportComponent as OrgImportComponent } from \"./organizations/tools/import.component\";\nimport { InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent } from \"./organizations/tools/inactive-two-factor-report.component\";\nimport { ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent } from \"./organizations/tools/reused-passwords-report.component\";\nimport { ToolsComponent as OrgToolsComponent } from \"./organizations/tools/tools.component\";\nimport { UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent } from \"./organizations/tools/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent } from \"./organizations/tools/weak-passwords-report.component\";\nimport { VaultComponent as OrgVaultComponent } from \"./organizations/vault/vault.component\";\nimport { AccessComponent } from \"./send/access.component\";\nimport { SendComponent } from \"./send/send.component\";\nimport { OrganizationGuardService } from \"./services/organization-guard.service\";\nimport { OrganizationTypeGuardService } from \"./services/organization-type-guard.service\";\nimport { AccountComponent } from \"./settings/account.component\";\nimport { CreateOrganizationComponent } from \"./settings/create-organization.component\";\nimport { DomainRulesComponent } from \"./settings/domain-rules.component\";\nimport { EmergencyAccessViewComponent } from \"./settings/emergency-access-view.component\";\nimport { EmergencyAccessComponent } from \"./settings/emergency-access.component\";\nimport { OptionsComponent } from \"./settings/options.component\";\nimport { OrganizationsComponent } from \"./settings/organizations.component\";\nimport { PremiumComponent } from \"./settings/premium.component\";\nimport { SettingsComponent } from \"./settings/settings.component\";\nimport { SponsoredFamiliesComponent } from \"./settings/sponsored-families.component\";\nimport { TwoFactorSetupComponent } from \"./settings/two-factor-setup.component\";\nimport { UserBillingComponent } from \"./settings/user-billing.component\";\nimport { UserSubscriptionComponent } from \"./settings/user-subscription.component\";\nimport { ExportComponent } from \"./tools/export.component\";\nimport { GeneratorComponent } from \"./tools/generator.component\";\nimport { ImportComponent } from \"./tools/import.component\";\nimport { ToolsComponent } from \"./tools/tools.component\";\nimport { VaultComponent } from \"./vault/vault.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: FrontendLayoutComponent,\n children: [\n { path: \"\", pathMatch: \"full\", component: LoginComponent, canActivate: [UnauthGuardService] },\n { path: \"2fa\", component: TwoFactorComponent, canActivate: [UnauthGuardService] },\n {\n path: \"register\",\n component: RegisterComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: \"createAccount\" },\n },\n {\n path: \"sso\",\n component: SsoComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: \"enterpriseSingleSignOn\" },\n },\n {\n path: \"set-password\",\n component: SetPasswordComponent,\n data: { titleId: \"setMasterPassword\" },\n },\n {\n path: \"hint\",\n component: HintComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: \"passwordHint\" },\n },\n {\n path: \"lock\",\n component: LockComponent,\n canActivate: [LockGuardService],\n },\n { path: \"verify-email\", component: VerifyEmailTokenComponent },\n {\n path: \"accept-organization\",\n component: AcceptOrganizationComponent,\n data: { titleId: \"joinOrganization\" },\n },\n {\n path: \"accept-emergency\",\n component: AcceptEmergencyComponent,\n data: { titleId: \"acceptEmergency\" },\n },\n { path: \"recover\", pathMatch: \"full\", redirectTo: \"recover-2fa\" },\n {\n path: \"recover-2fa\",\n component: RecoverTwoFactorComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: \"recoverAccountTwoStep\" },\n },\n {\n path: \"recover-delete\",\n component: RecoverDeleteComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: \"deleteAccount\" },\n },\n {\n path: \"verify-recover-delete\",\n component: VerifyRecoverDeleteComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: \"deleteAccount\" },\n },\n {\n path: \"send/:sendId/:key\",\n component: AccessComponent,\n data: { title: \"Bitwarden Send\" },\n },\n {\n path: \"update-temp-password\",\n component: UpdateTempPasswordComponent,\n canActivate: [AuthGuardService],\n data: { titleId: \"updateTempPassword\" },\n },\n {\n path: \"update-password\",\n component: UpdatePasswordComponent,\n canActivate: [AuthGuardService],\n data: { titleId: \"updatePassword\" },\n },\n {\n path: \"remove-password\",\n component: RemovePasswordComponent,\n canActivate: [AuthGuardService],\n data: { titleId: \"removeMasterPassword\" },\n },\n ],\n },\n {\n path: \"\",\n component: UserLayoutComponent,\n canActivate: [AuthGuardService],\n children: [\n { path: \"vault\", component: VaultComponent, data: { titleId: \"myVault\" } },\n { path: \"sends\", component: SendComponent, data: { title: \"Send\" } },\n {\n path: \"settings\",\n component: SettingsComponent,\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"account\" },\n { path: \"account\", component: AccountComponent, data: { titleId: \"myAccount\" } },\n { path: \"options\", component: OptionsComponent, data: { titleId: \"options\" } },\n {\n path: \"domain-rules\",\n component: DomainRulesComponent,\n data: { titleId: \"domainRules\" },\n },\n {\n path: \"two-factor\",\n component: TwoFactorSetupComponent,\n data: { titleId: \"twoStepLogin\" },\n },\n { path: \"premium\", component: PremiumComponent, data: { titleId: \"goPremium\" } },\n { path: \"billing\", component: UserBillingComponent, data: { titleId: \"billing\" } },\n {\n path: \"subscription\",\n component: UserSubscriptionComponent,\n data: { titleId: \"premiumMembership\" },\n },\n {\n path: \"organizations\",\n component: OrganizationsComponent,\n data: { titleId: \"organizations\" },\n },\n {\n path: \"create-organization\",\n component: CreateOrganizationComponent,\n data: { titleId: \"newOrganization\" },\n },\n {\n path: \"emergency-access\",\n children: [\n {\n path: \"\",\n component: EmergencyAccessComponent,\n data: { titleId: \"emergencyAccess\" },\n },\n {\n path: \":id\",\n component: EmergencyAccessViewComponent,\n data: { titleId: \"emergencyAccess\" },\n },\n ],\n },\n {\n path: \"sponsored-families\",\n component: SponsoredFamiliesComponent,\n data: { titleId: \"sponsoredFamilies\" },\n },\n ],\n },\n {\n path: \"tools\",\n component: ToolsComponent,\n canActivate: [AuthGuardService],\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"generator\" },\n { path: \"import\", component: ImportComponent, data: { titleId: \"importData\" } },\n { path: \"export\", component: ExportComponent, data: { titleId: \"exportVault\" } },\n {\n path: \"generator\",\n component: GeneratorComponent,\n data: { titleId: \"generator\" },\n },\n ],\n },\n {\n path: \"reports\",\n loadChildren: async () => (await import(\"./reports/reports.module\")).ReportsModule,\n },\n { path: \"setup/families-for-enterprise\", component: FamiliesForEnterpriseSetupComponent },\n ],\n },\n {\n path: \"organizations/:organizationId\",\n component: OrganizationLayoutComponent,\n canActivate: [AuthGuardService, OrganizationGuardService],\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"vault\" },\n { path: \"vault\", component: OrgVaultComponent, data: { titleId: \"vault\" } },\n {\n path: \"tools\",\n component: OrgToolsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: { permissions: [Permissions.AccessImportExport, Permissions.AccessReports] },\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n redirectTo: \"import\",\n },\n {\n path: \"import\",\n component: OrgImportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: \"importData\",\n permissions: [Permissions.AccessImportExport],\n },\n },\n {\n path: \"export\",\n component: OrgExportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: \"exportVault\",\n permissions: [Permissions.AccessImportExport],\n },\n },\n {\n path: \"exposed-passwords-report\",\n component: OrgExposedPasswordsReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: \"exposedPasswordsReport\",\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: \"inactive-two-factor-report\",\n component: OrgInactiveTwoFactorReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: \"inactive2faReport\",\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: \"reused-passwords-report\",\n component: OrgReusedPasswordsReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: \"reusedPasswordsReport\",\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: \"unsecured-websites-report\",\n component: OrgUnsecuredWebsitesReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: \"unsecuredWebsitesReport\",\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: \"weak-passwords-report\",\n component: OrgWeakPasswordsReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: \"weakPasswordsReport\",\n permissions: [Permissions.AccessReports],\n },\n },\n ],\n },\n {\n path: \"manage\",\n component: OrgManageComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n permissions: [\n Permissions.CreateNewCollections,\n Permissions.EditAnyCollection,\n Permissions.DeleteAnyCollection,\n Permissions.EditAssignedCollections,\n Permissions.DeleteAssignedCollections,\n Permissions.AccessEventLogs,\n Permissions.ManageGroups,\n Permissions.ManageUsers,\n Permissions.ManagePolicies,\n ],\n },\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n redirectTo: \"people\",\n },\n {\n path: \"collections\",\n component: OrgManageCollectionsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: \"collections\",\n permissions: [\n Permissions.CreateNewCollections,\n Permissions.EditAnyCollection,\n Permissions.DeleteAnyCollection,\n Permissions.EditAssignedCollections,\n Permissions.DeleteAssignedCollections,\n ],\n },\n },\n {\n path: \"events\",\n component: OrgEventsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: \"eventLogs\",\n permissions: [Permissions.AccessEventLogs],\n },\n },\n {\n path: \"groups\",\n component: OrgGroupsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: \"groups\",\n permissions: [Permissions.ManageGroups],\n },\n },\n {\n path: \"people\",\n component: OrgPeopleComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: \"people\",\n permissions: [Permissions.ManageUsers, Permissions.ManageUsersPassword],\n },\n },\n {\n path: \"policies\",\n component: OrgPoliciesComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: \"policies\",\n permissions: [Permissions.ManagePolicies],\n },\n },\n ],\n },\n {\n path: \"settings\",\n component: OrgSettingsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: { permissions: [Permissions.ManageOrganization] },\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"account\" },\n { path: \"account\", component: OrgAccountComponent, data: { titleId: \"myOrganization\" } },\n {\n path: \"two-factor\",\n component: OrgTwoFactorSetupComponent,\n data: { titleId: \"twoStepLogin\" },\n },\n {\n path: \"billing\",\n component: OrganizationBillingComponent,\n data: { titleId: \"billing\" },\n },\n {\n path: \"subscription\",\n component: OrganizationSubscriptionComponent,\n data: { titleId: \"subscription\" },\n },\n ],\n },\n ],\n },\n];\n\n@NgModule({\n imports: [\n RouterModule.forRoot(routes, {\n useHash: true,\n paramsInheritanceStrategy: \"always\",\n /*enableTracing: true,*/\n }),\n ],\n exports: [RouterModule],\n})\nexport class OssRoutingModule {}\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { DatePipe, registerLocaleData, CommonModule } from \"@angular/common\";\nimport localeAf from \"@angular/common/locales/af\";\nimport localeAz from \"@angular/common/locales/az\";\nimport localeBe from \"@angular/common/locales/be\";\nimport localeBg from \"@angular/common/locales/bg\";\nimport localeBn from \"@angular/common/locales/bn\";\nimport localeBs from \"@angular/common/locales/bs\";\nimport localeCa from \"@angular/common/locales/ca\";\nimport localeCs from \"@angular/common/locales/cs\";\nimport localeDa from \"@angular/common/locales/da\";\nimport localeDe from \"@angular/common/locales/de\";\nimport localeEl from \"@angular/common/locales/el\";\nimport localeEnGb from \"@angular/common/locales/en-GB\";\nimport localeEnIn from \"@angular/common/locales/en-IN\";\nimport localeEo from \"@angular/common/locales/eo\";\nimport localeEs from \"@angular/common/locales/es\";\nimport localeEt from \"@angular/common/locales/et\";\nimport localeFi from \"@angular/common/locales/fi\";\nimport localeFil from \"@angular/common/locales/fil\";\nimport localeFr from \"@angular/common/locales/fr\";\nimport localeHe from \"@angular/common/locales/he\";\nimport localeHi from \"@angular/common/locales/hi\";\nimport localeHr from \"@angular/common/locales/hr\";\nimport localeHu from \"@angular/common/locales/hu\";\nimport localeId from \"@angular/common/locales/id\";\nimport localeIt from \"@angular/common/locales/it\";\nimport localeJa from \"@angular/common/locales/ja\";\nimport localeKa from \"@angular/common/locales/ka\";\nimport localeKm from \"@angular/common/locales/km\";\nimport localeKn from \"@angular/common/locales/kn\";\nimport localeKo from \"@angular/common/locales/ko\";\nimport localeLv from \"@angular/common/locales/lv\";\nimport localeMl from \"@angular/common/locales/ml\";\nimport localeNb from \"@angular/common/locales/nb\";\nimport localeNl from \"@angular/common/locales/nl\";\nimport localeNn from \"@angular/common/locales/nn\";\nimport localePl from \"@angular/common/locales/pl\";\nimport localePtBr from \"@angular/common/locales/pt\";\nimport localePtPt from \"@angular/common/locales/pt-PT\";\nimport localeRo from \"@angular/common/locales/ro\";\nimport localeRu from \"@angular/common/locales/ru\";\nimport localeSi from \"@angular/common/locales/si\";\nimport localeSk from \"@angular/common/locales/sk\";\nimport localeSl from \"@angular/common/locales/sl\";\nimport localeSr from \"@angular/common/locales/sr\";\nimport localeSv from \"@angular/common/locales/sv\";\nimport localeTr from \"@angular/common/locales/tr\";\nimport localeUk from \"@angular/common/locales/uk\";\nimport localeVi from \"@angular/common/locales/vi\";\nimport localeZhCn from \"@angular/common/locales/zh-Hans\";\nimport localeZhTw from \"@angular/common/locales/zh-Hant\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { RouterModule } from \"@angular/router\";\nimport { BadgeModule, ButtonModule } from \"@bitwarden/components\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\nimport { ToastrModule } from \"ngx-toastr\";\n\nimport { VerifyMasterPasswordComponent } from \"jslib-angular/components/verify-master-password.component\";\nimport { JslibModule } from \"jslib-angular/jslib.module\";\n\nimport { AcceptEmergencyComponent } from \"./accounts/accept-emergency.component\";\nimport { AcceptOrganizationComponent } from \"./accounts/accept-organization.component\";\nimport { HintComponent } from \"./accounts/hint.component\";\nimport { LockComponent } from \"./accounts/lock.component\";\nimport { LoginComponent } from \"./accounts/login.component\";\nimport { RecoverDeleteComponent } from \"./accounts/recover-delete.component\";\nimport { RecoverTwoFactorComponent } from \"./accounts/recover-two-factor.component\";\nimport { RegisterComponent } from \"./accounts/register.component\";\nimport { RemovePasswordComponent } from \"./accounts/remove-password.component\";\nimport { SetPasswordComponent } from \"./accounts/set-password.component\";\nimport { SsoComponent } from \"./accounts/sso.component\";\nimport { TwoFactorOptionsComponent } from \"./accounts/two-factor-options.component\";\nimport { TwoFactorComponent } from \"./accounts/two-factor.component\";\nimport { UpdatePasswordComponent } from \"./accounts/update-password.component\";\nimport { UpdateTempPasswordComponent } from \"./accounts/update-temp-password.component\";\nimport { VerifyEmailTokenComponent } from \"./accounts/verify-email-token.component\";\nimport { VerifyRecoverDeleteComponent } from \"./accounts/verify-recover-delete.component\";\nimport { NestedCheckboxComponent } from \"./components/nested-checkbox.component\";\nimport { PasswordRepromptComponent } from \"./components/password-reprompt.component\";\nimport { PasswordStrengthComponent } from \"./components/password-strength.component\";\nimport { PremiumBadgeComponent } from \"./components/premium-badge.component\";\nimport { FooterComponent } from \"./layouts/footer.component\";\nimport { FrontendLayoutComponent } from \"./layouts/frontend-layout.component\";\nimport { NavbarComponent } from \"./layouts/navbar.component\";\nimport { OrganizationLayoutComponent } from \"./layouts/organization-layout.component\";\nimport { UserLayoutComponent } from \"./layouts/user-layout.component\";\nimport { BulkConfirmComponent as OrgBulkConfirmComponent } from \"./organizations/manage/bulk/bulk-confirm.component\";\nimport { BulkRemoveComponent as OrgBulkRemoveComponent } from \"./organizations/manage/bulk/bulk-remove.component\";\nimport { BulkStatusComponent as OrgBulkStatusComponent } from \"./organizations/manage/bulk/bulk-status.component\";\nimport { CollectionAddEditComponent as OrgCollectionAddEditComponent } from \"./organizations/manage/collection-add-edit.component\";\nimport { CollectionsComponent as OrgManageCollectionsComponent } from \"./organizations/manage/collections.component\";\nimport { EntityEventsComponent as OrgEntityEventsComponent } from \"./organizations/manage/entity-events.component\";\nimport { EntityUsersComponent as OrgEntityUsersComponent } from \"./organizations/manage/entity-users.component\";\nimport { EventsComponent as OrgEventsComponent } from \"./organizations/manage/events.component\";\nimport { GroupAddEditComponent as OrgGroupAddEditComponent } from \"./organizations/manage/group-add-edit.component\";\nimport { GroupsComponent as OrgGroupsComponent } from \"./organizations/manage/groups.component\";\nimport { ManageComponent as OrgManageComponent } from \"./organizations/manage/manage.component\";\nimport { PeopleComponent as OrgPeopleComponent } from \"./organizations/manage/people.component\";\nimport { PoliciesComponent as OrgPoliciesComponent } from \"./organizations/manage/policies.component\";\nimport { PolicyEditComponent as OrgPolicyEditComponent } from \"./organizations/manage/policy-edit.component\";\nimport { ResetPasswordComponent as OrgResetPasswordComponent } from \"./organizations/manage/reset-password.component\";\nimport { UserAddEditComponent as OrgUserAddEditComponent } from \"./organizations/manage/user-add-edit.component\";\nimport { UserConfirmComponent as OrgUserConfirmComponent } from \"./organizations/manage/user-confirm.component\";\nimport { UserGroupsComponent as OrgUserGroupsComponent } from \"./organizations/manage/user-groups.component\";\nimport { DisableSendPolicyComponent } from \"./organizations/policies/disable-send.component\";\nimport { MasterPasswordPolicyComponent } from \"./organizations/policies/master-password.component\";\nimport { PasswordGeneratorPolicyComponent } from \"./organizations/policies/password-generator.component\";\nimport { PersonalOwnershipPolicyComponent } from \"./organizations/policies/personal-ownership.component\";\nimport { RequireSsoPolicyComponent } from \"./organizations/policies/require-sso.component\";\nimport { ResetPasswordPolicyComponent } from \"./organizations/policies/reset-password.component\";\nimport { SendOptionsPolicyComponent } from \"./organizations/policies/send-options.component\";\nimport { SingleOrgPolicyComponent } from \"./organizations/policies/single-org.component\";\nimport { TwoFactorAuthenticationPolicyComponent } from \"./organizations/policies/two-factor-authentication.component\";\nimport { AccountComponent as OrgAccountComponent } from \"./organizations/settings/account.component\";\nimport { AdjustSubscription } from \"./organizations/settings/adjust-subscription.component\";\nimport { ChangePlanComponent } from \"./organizations/settings/change-plan.component\";\nimport { DeleteOrganizationComponent } from \"./organizations/settings/delete-organization.component\";\nimport { DownloadLicenseComponent } from \"./organizations/settings/download-license.component\";\nimport { OrganizationBillingComponent } from \"./organizations/settings/organization-billing.component\";\nimport { OrganizationSubscriptionComponent } from \"./organizations/settings/organization-subscription.component\";\nimport { SettingsComponent as OrgSettingComponent } from \"./organizations/settings/settings.component\";\nimport { TwoFactorSetupComponent as OrgTwoFactorSetupComponent } from \"./organizations/settings/two-factor-setup.component\";\nimport { FamiliesForEnterpriseSetupComponent } from \"./organizations/sponsorships/families-for-enterprise-setup.component\";\nimport { ExportComponent as OrgExportComponent } from \"./organizations/tools/export.component\";\nimport { ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent } from \"./organizations/tools/exposed-passwords-report.component\";\nimport { ImportComponent as OrgImportComponent } from \"./organizations/tools/import.component\";\nimport { InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent } from \"./organizations/tools/inactive-two-factor-report.component\";\nimport { ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent } from \"./organizations/tools/reused-passwords-report.component\";\nimport { ToolsComponent as OrgToolsComponent } from \"./organizations/tools/tools.component\";\nimport { UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent } from \"./organizations/tools/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent } from \"./organizations/tools/weak-passwords-report.component\";\nimport { AddEditComponent as OrgAddEditComponent } from \"./organizations/vault/add-edit.component\";\nimport { AttachmentsComponent as OrgAttachmentsComponent } from \"./organizations/vault/attachments.component\";\nimport { CiphersComponent as OrgCiphersComponent } from \"./organizations/vault/ciphers.component\";\nimport { CollectionsComponent as OrgCollectionsComponent } from \"./organizations/vault/collections.component\";\nimport { GroupingsComponent as OrgGroupingsComponent } from \"./organizations/vault/groupings.component\";\nimport { VaultComponent as OrgVaultComponent } from \"./organizations/vault/vault.component\";\nimport { ProvidersComponent } from \"./providers/providers.component\";\nimport { BreachReportComponent } from \"./reports/breach-report.component\";\nimport { ExposedPasswordsReportComponent } from \"./reports/exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent } from \"./reports/inactive-two-factor-report.component\";\nimport { ReportCardComponent } from \"./reports/report-card.component\";\nimport { ReportListComponent } from \"./reports/report-list.component\";\nimport { ReportsComponent } from \"./reports/reports.component\";\nimport { ReusedPasswordsReportComponent } from \"./reports/reused-passwords-report.component\";\nimport { UnsecuredWebsitesReportComponent } from \"./reports/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent } from \"./reports/weak-passwords-report.component\";\nimport { AccessComponent } from \"./send/access.component\";\nimport { AddEditComponent as SendAddEditComponent } from \"./send/add-edit.component\";\nimport { EffluxDatesComponent as SendEffluxDatesComponent } from \"./send/efflux-dates.component\";\nimport { SendComponent } from \"./send/send.component\";\nimport { AccountComponent } from \"./settings/account.component\";\nimport { AddCreditComponent } from \"./settings/add-credit.component\";\nimport { AdjustPaymentComponent } from \"./settings/adjust-payment.component\";\nimport { AdjustStorageComponent } from \"./settings/adjust-storage.component\";\nimport { ApiKeyComponent } from \"./settings/api-key.component\";\nimport { ChangeEmailComponent } from \"./settings/change-email.component\";\nimport { ChangeKdfComponent } from \"./settings/change-kdf.component\";\nimport { ChangePasswordComponent } from \"./settings/change-password.component\";\nimport { CreateOrganizationComponent } from \"./settings/create-organization.component\";\nimport { DeauthorizeSessionsComponent } from \"./settings/deauthorize-sessions.component\";\nimport { DeleteAccountComponent } from \"./settings/delete-account.component\";\nimport { DomainRulesComponent } from \"./settings/domain-rules.component\";\nimport { EmergencyAccessAddEditComponent } from \"./settings/emergency-access-add-edit.component\";\nimport { EmergencyAccessAttachmentsComponent } from \"./settings/emergency-access-attachments.component\";\nimport { EmergencyAccessConfirmComponent } from \"./settings/emergency-access-confirm.component\";\nimport { EmergencyAccessTakeoverComponent } from \"./settings/emergency-access-takeover.component\";\nimport { EmergencyAccessViewComponent } from \"./settings/emergency-access-view.component\";\nimport { EmergencyAccessComponent } from \"./settings/emergency-access.component\";\nimport { EmergencyAddEditComponent } from \"./settings/emergency-add-edit.component\";\nimport { LinkSsoComponent } from \"./settings/link-sso.component\";\nimport { OptionsComponent } from \"./settings/options.component\";\nimport { OrganizationPlansComponent } from \"./settings/organization-plans.component\";\nimport { OrganizationsComponent } from \"./settings/organizations.component\";\nimport { PaymentComponent } from \"./settings/payment.component\";\nimport { PremiumComponent } from \"./settings/premium.component\";\nimport { ProfileComponent } from \"./settings/profile.component\";\nimport { PurgeVaultComponent } from \"./settings/purge-vault.component\";\nimport { SettingsComponent } from \"./settings/settings.component\";\nimport { SponsoredFamiliesComponent } from \"./settings/sponsored-families.component\";\nimport { SponsoringOrgRowComponent } from \"./settings/sponsoring-org-row.component\";\nimport { TaxInfoComponent } from \"./settings/tax-info.component\";\nimport { TwoFactorAuthenticatorComponent } from \"./settings/two-factor-authenticator.component\";\nimport { TwoFactorDuoComponent } from \"./settings/two-factor-duo.component\";\nimport { TwoFactorEmailComponent } from \"./settings/two-factor-email.component\";\nimport { TwoFactorRecoveryComponent } from \"./settings/two-factor-recovery.component\";\nimport { TwoFactorSetupComponent } from \"./settings/two-factor-setup.component\";\nimport { TwoFactorVerifyComponent } from \"./settings/two-factor-verify.component\";\nimport { TwoFactorWebAuthnComponent } from \"./settings/two-factor-webauthn.component\";\nimport { TwoFactorYubiKeyComponent } from \"./settings/two-factor-yubikey.component\";\nimport { UpdateKeyComponent } from \"./settings/update-key.component\";\nimport { UpdateLicenseComponent } from \"./settings/update-license.component\";\nimport { UserBillingComponent } from \"./settings/user-billing.component\";\nimport { UserSubscriptionComponent } from \"./settings/user-subscription.component\";\nimport { VaultTimeoutInputComponent } from \"./settings/vault-timeout-input.component\";\nimport { VerifyEmailComponent } from \"./settings/verify-email.component\";\nimport { ExportComponent } from \"./tools/export.component\";\nimport { GeneratorComponent } from \"./tools/generator.component\";\nimport { ImportComponent } from \"./tools/import.component\";\nimport { PasswordGeneratorHistoryComponent } from \"./tools/password-generator-history.component\";\nimport { ToolsComponent } from \"./tools/tools.component\";\nimport { AddEditCustomFieldsComponent } from \"./vault/add-edit-custom-fields.component\";\nimport { AddEditComponent } from \"./vault/add-edit.component\";\nimport { AttachmentsComponent } from \"./vault/attachments.component\";\nimport { BulkActionsComponent } from \"./vault/bulk-actions.component\";\nimport { BulkDeleteComponent } from \"./vault/bulk-delete.component\";\nimport { BulkMoveComponent } from \"./vault/bulk-move.component\";\nimport { BulkRestoreComponent } from \"./vault/bulk-restore.component\";\nimport { BulkShareComponent } from \"./vault/bulk-share.component\";\nimport { CiphersComponent } from \"./vault/ciphers.component\";\nimport { CollectionsComponent } from \"./vault/collections.component\";\nimport { FolderAddEditComponent } from \"./vault/folder-add-edit.component\";\nimport { GroupingsComponent } from \"./vault/groupings.component\";\nimport { ShareComponent } from \"./vault/share.component\";\nimport { VaultComponent } from \"./vault/vault.component\";\n\nregisterLocaleData(localeAf, \"af\");\nregisterLocaleData(localeAz, \"az\");\nregisterLocaleData(localeBe, \"be\");\nregisterLocaleData(localeBg, \"bg\");\nregisterLocaleData(localeBn, \"bn\");\nregisterLocaleData(localeBs, \"bs\");\nregisterLocaleData(localeCa, \"ca\");\nregisterLocaleData(localeCs, \"cs\");\nregisterLocaleData(localeDa, \"da\");\nregisterLocaleData(localeDe, \"de\");\nregisterLocaleData(localeEl, \"el\");\nregisterLocaleData(localeEnGb, \"en-GB\");\nregisterLocaleData(localeEnIn, \"en-IN\");\nregisterLocaleData(localeEo, \"eo\");\nregisterLocaleData(localeEs, \"es\");\nregisterLocaleData(localeEt, \"et\");\nregisterLocaleData(localeFi, \"fi\");\nregisterLocaleData(localeFil, \"fil\");\nregisterLocaleData(localeFr, \"fr\");\nregisterLocaleData(localeHe, \"he\");\nregisterLocaleData(localeHi, \"hi\");\nregisterLocaleData(localeHr, \"hr\");\nregisterLocaleData(localeHu, \"hu\");\nregisterLocaleData(localeId, \"id\");\nregisterLocaleData(localeIt, \"it\");\nregisterLocaleData(localeJa, \"ja\");\nregisterLocaleData(localeKa, \"ka\");\nregisterLocaleData(localeKm, \"km\");\nregisterLocaleData(localeKn, \"kn\");\nregisterLocaleData(localeKo, \"ko\");\nregisterLocaleData(localeLv, \"lv\");\nregisterLocaleData(localeMl, \"ml\");\nregisterLocaleData(localeNb, \"nb\");\nregisterLocaleData(localeNl, \"nl\");\nregisterLocaleData(localeNn, \"nn\");\nregisterLocaleData(localePl, \"pl\");\nregisterLocaleData(localePtBr, \"pt-BR\");\nregisterLocaleData(localePtPt, \"pt-PT\");\nregisterLocaleData(localeRo, \"ro\");\nregisterLocaleData(localeRu, \"ru\");\nregisterLocaleData(localeSi, \"si\");\nregisterLocaleData(localeSk, \"sk\");\nregisterLocaleData(localeSl, \"sl\");\nregisterLocaleData(localeSr, \"sr\");\nregisterLocaleData(localeSv, \"sv\");\nregisterLocaleData(localeTr, \"tr\");\nregisterLocaleData(localeUk, \"uk\");\nregisterLocaleData(localeVi, \"vi\");\nregisterLocaleData(localeZhCn, \"zh-CN\");\nregisterLocaleData(localeZhTw, \"zh-TW\");\n\n@NgModule({\n imports: [\n CommonModule,\n DragDropModule,\n FormsModule,\n InfiniteScrollModule,\n JslibModule,\n ReactiveFormsModule,\n RouterModule,\n ToastrModule,\n BadgeModule,\n ButtonModule,\n ],\n declarations: [\n PremiumBadgeComponent,\n AcceptEmergencyComponent,\n AcceptOrganizationComponent,\n AccessComponent,\n AccountComponent,\n AddCreditComponent,\n AddEditComponent,\n AddEditCustomFieldsComponent,\n AddEditCustomFieldsComponent,\n AdjustPaymentComponent,\n AdjustStorageComponent,\n AdjustSubscription,\n ApiKeyComponent,\n AttachmentsComponent,\n BreachReportComponent,\n BulkActionsComponent,\n BulkDeleteComponent,\n BulkMoveComponent,\n BulkRestoreComponent,\n BulkShareComponent,\n ChangeEmailComponent,\n ChangeKdfComponent,\n ChangePasswordComponent,\n ChangePlanComponent,\n CiphersComponent,\n CollectionsComponent,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DeleteOrganizationComponent,\n DisableSendPolicyComponent,\n DomainRulesComponent,\n DownloadLicenseComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n ExportComponent,\n ExposedPasswordsReportComponent,\n FamiliesForEnterpriseSetupComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n GroupingsComponent,\n HintComponent,\n ImportComponent,\n InactiveTwoFactorReportComponent,\n LinkSsoComponent,\n LockComponent,\n LoginComponent,\n MasterPasswordPolicyComponent,\n NavbarComponent,\n NestedCheckboxComponent,\n OptionsComponent,\n OrgAccountComponent,\n OrgAddEditComponent,\n OrganizationBillingComponent,\n OrganizationLayoutComponent,\n OrganizationPlansComponent,\n OrganizationsComponent,\n OrganizationSubscriptionComponent,\n OrgAttachmentsComponent,\n OrgBulkConfirmComponent,\n OrgBulkRemoveComponent,\n OrgBulkStatusComponent,\n OrgCiphersComponent,\n OrgCollectionAddEditComponent,\n OrgCollectionsComponent,\n OrgEntityEventsComponent,\n OrgEntityUsersComponent,\n OrgEventsComponent,\n OrgExportComponent,\n OrgExposedPasswordsReportComponent,\n OrgGroupAddEditComponent,\n OrgGroupingsComponent,\n OrgGroupsComponent,\n OrgImportComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgManageCollectionsComponent,\n OrgManageComponent,\n OrgPeopleComponent,\n OrgPoliciesComponent,\n OrgPolicyEditComponent,\n OrgResetPasswordComponent,\n OrgReusedPasswordsReportComponent,\n OrgSettingComponent,\n OrgToolsComponent,\n OrgTwoFactorSetupComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserAddEditComponent,\n OrgUserConfirmComponent,\n OrgUserGroupsComponent,\n OrgVaultComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordGeneratorPolicyComponent,\n PasswordRepromptComponent,\n PasswordStrengthComponent,\n PaymentComponent,\n PersonalOwnershipPolicyComponent,\n PremiumComponent,\n ProfileComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RegisterComponent,\n RemovePasswordComponent,\n ReportCardComponent,\n ReportListComponent,\n ReportsComponent,\n RequireSsoPolicyComponent,\n ResetPasswordPolicyComponent,\n ReusedPasswordsReportComponent,\n SendAddEditComponent,\n SendComponent,\n SendEffluxDatesComponent,\n SendOptionsPolicyComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SingleOrgPolicyComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n TaxInfoComponent,\n ToolsComponent,\n TwoFactorAuthenticationPolicyComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UnsecuredWebsitesReportComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n UserBillingComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n VaultComponent,\n VaultTimeoutInputComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyMasterPasswordComponent,\n VerifyRecoverDeleteComponent,\n WeakPasswordsReportComponent,\n ],\n exports: [FooterComponent, NavbarComponent, OrganizationPlansComponent],\n providers: [DatePipe],\n bootstrap: [],\n})\nexport class OssModule {}\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { ProviderService } from \"jslib-common/abstractions/provider.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { Provider } from \"jslib-common/models/domain/provider\";\n\n@Component({\n selector: \"app-providers\",\n templateUrl: \"providers.component.html\",\n})\nexport class ProvidersComponent implements OnInit {\n @Input() vault = false;\n\n providers: Provider[];\n loaded = false;\n actionPromise: Promise;\n\n constructor(private providerService: ProviderService, private i18nService: I18nService) {}\n\n async ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n await this.load();\n }\n\n async load() {\n const providers = await this.providerService.getAll();\n providers.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n this.providers = providers;\n this.loaded = true;\n }\n}\n","\n

\n \n {{ \"loading\" | i18n }}\n

\n \n \n \n
\n\n \n
\n
\n

{{ \"providers\" | i18n }}

\n
\n

\n \n {{ \"loading\" | i18n }}\n

\n \n \n \n \n \n \n \n \n
\n \n \n {{ p.name }}\n \n \n {{ \"providerIsDisabled\" | i18n }}\n \n
\n
\n
\n \n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { BreachAccountResponse } from \"jslib-common/models/response/breachAccountResponse\";\n\n@Component({\n selector: \"app-breach-report\",\n templateUrl: \"breach-report.component.html\",\n})\nexport class BreachReportComponent implements OnInit {\n error = false;\n username: string;\n checkedUsername: string;\n breachedAccounts: BreachAccountResponse[] = [];\n formPromise: Promise;\n\n constructor(private auditService: AuditService, private stateService: StateService) {}\n\n async ngOnInit() {\n this.username = await this.stateService.getEmail();\n }\n\n async submit() {\n this.error = false;\n this.username = this.username.toLowerCase();\n try {\n this.formPromise = this.auditService.breachedAccounts(this.username);\n this.breachedAccounts = await this.formPromise;\n } catch {\n this.error = true;\n }\n this.checkedUsername = this.username;\n }\n}\n","
\n

{{ \"dataBreachReport\" | i18n }}

\n
\n

{{ \"breachDesc\" | i18n }}

\n
\n
\n
\n \n \n {{ \"breachCheckUsernameEmail\" | i18n }}\n
\n
\n \n \n {{ \"checkBreaches\" | i18n }}\n \n\n
\n

{{ \"reportError\" | i18n }}...

\n \n \n {{ \"breachUsernameNotFound\" | i18n: checkedUsername }}\n \n \n {{ \"breachUsernameFound\" | i18n: checkedUsername:breachedAccounts.length }}\n \n
    \n
  • \n
    \n
    \n \"\"\n
    \n
    \n

    {{ a.title }}

    \n

    \n

    {{ \"compromisedData\" | i18n }}:

    \n
      \n
    • {{ d }}
    • \n
    \n
    \n
    \n
    \n
    {{ \"website\" | i18n }}
    \n
    {{ a.domain }}
    \n
    {{ \"affectedUsers\" | i18n }}
    \n
    {{ a.pwnCount | number }}
    \n
    {{ \"breachOccurred\" | i18n }}
    \n
    {{ a.breachDate | date: \"mediumDate\" }}
    \n
    {{ \"breachReported\" | i18n }}
    \n
    {{ a.addedDate | date: \"mediumDate\" }}
    \n
    \n
    \n
    \n
  • \n
\n
\n
\n","import { Directive, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherRepromptType } from \"jslib-common/enums/cipherRepromptType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { AddEditComponent as OrgAddEditComponent } from \"../organizations/vault/add-edit.component\";\nimport { AddEditComponent } from \"../vault/add-edit.component\";\n\n@Directive()\nexport class CipherReportComponent {\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n\n loading = false;\n hasLoaded = false;\n ciphers: CipherView[] = [];\n organization: Organization;\n\n constructor(\n private modalService: ModalService,\n protected messagingService: MessagingService,\n public requiresPaid: boolean,\n private stateService: StateService,\n protected passwordRepromptService: PasswordRepromptService\n ) {}\n\n async load() {\n this.loading = true;\n await this.setCiphers();\n this.loading = false;\n this.hasLoaded = true;\n }\n\n async selectCipher(cipher: CipherView) {\n if (!(await this.repromptCipher(cipher))) {\n return;\n }\n\n const type = this.organization != null ? OrgAddEditComponent : AddEditComponent;\n\n const [modal, childComponent] = await this.modalService.openViewRef(\n type,\n this.cipherAddEditModalRef,\n (comp: OrgAddEditComponent | AddEditComponent) => {\n if (this.organization != null) {\n (comp as OrgAddEditComponent).organization = this.organization;\n comp.organizationId = this.organization.id;\n }\n\n comp.cipherId = cipher == null ? null : cipher.id;\n comp.onSavedCipher.subscribe(async () => {\n modal.close();\n await this.load();\n });\n comp.onDeletedCipher.subscribe(async () => {\n modal.close();\n await this.load();\n });\n comp.onRestoredCipher.subscribe(async () => {\n modal.close();\n await this.load();\n });\n }\n );\n\n return childComponent;\n }\n\n protected async checkAccess(): Promise {\n if (this.organization != null) {\n // TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now\n // since all paid plans include useTotp\n if (this.requiresPaid && !this.organization.useTotp) {\n this.messagingService.send(\"upgradeOrganization\", { organizationId: this.organization.id });\n return false;\n }\n } else {\n const accessPremium = await this.stateService.getCanAccessPremium();\n if (this.requiresPaid && !accessPremium) {\n this.messagingService.send(\"premiumRequired\");\n this.loading = false;\n return false;\n }\n }\n return true;\n }\n\n protected async setCiphers() {\n this.ciphers = [];\n }\n\n protected async repromptCipher(c: CipherView) {\n return (\n c.reprompt === CipherRepromptType.None ||\n (await this.passwordRepromptService.showPasswordPrompt())\n );\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-exposed-passwords-report\",\n templateUrl: \"exposed-passwords-report.component.html\",\n})\nexport class ExposedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n exposedPasswordMap = new Map();\n\n constructor(\n protected cipherService: CipherService,\n protected auditService: AuditService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n ngOnInit() {\n this.checkAccess();\n }\n\n async load() {\n if (await this.checkAccess()) {\n super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const exposedPasswordCiphers: CipherView[] = [];\n const promises: Promise[] = [];\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n c.login.password == null ||\n c.login.password === \"\" ||\n c.isDeleted\n ) {\n return;\n }\n const promise = this.auditService.passwordLeaked(c.login.password).then((exposedCount) => {\n if (exposedCount > 0) {\n exposedPasswordCiphers.push(c);\n this.exposedPasswordMap.set(c.id, exposedCount);\n }\n });\n promises.push(promise);\n });\n await Promise.all(promises);\n this.ciphers = exposedPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from the org view;\n return true;\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-inactive-two-factor-report\",\n templateUrl: \"inactive-two-factor-report.component.html\",\n})\nexport class InactiveTwoFactorReportComponent extends CipherReportComponent implements OnInit {\n services = new Map();\n cipherDocs = new Map();\n\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private logService: LogService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n try {\n await this.load2fa();\n } catch (e) {\n this.logService.error(e);\n }\n\n if (this.services.size > 0) {\n const allCiphers = await this.getAllCiphers();\n const inactive2faCiphers: CipherView[] = [];\n const promises: Promise[] = [];\n const docs = new Map();\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n (c.login.totp != null && c.login.totp !== \"\") ||\n !c.login.hasUris ||\n c.isDeleted\n ) {\n return;\n }\n for (let i = 0; i < c.login.uris.length; i++) {\n const u = c.login.uris[i];\n if (u.uri != null && u.uri !== \"\") {\n const uri = u.uri.replace(\"www.\", \"\");\n const domain = Utils.getDomain(uri);\n if (domain != null && this.services.has(domain)) {\n if (this.services.get(domain) != null) {\n docs.set(c.id, this.services.get(domain));\n }\n inactive2faCiphers.push(c);\n }\n }\n }\n });\n await Promise.all(promises);\n this.ciphers = inactive2faCiphers;\n this.cipherDocs = docs;\n }\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n private async load2fa() {\n if (this.services.size > 0) {\n return;\n }\n const response = await fetch(new Request(\"https://2fa.directory/api/v3/totp.json\"));\n if (response.status !== 200) {\n throw new Error();\n }\n const responseJson = await response.json();\n for (const service of responseJson) {\n const serviceData = service[1];\n if (serviceData.domain == null) {\n continue;\n }\n if (serviceData.documentation == null) {\n continue;\n }\n if (serviceData[\"additional-domains\"] != null) {\n for (const additionalDomain of serviceData[\"additional-domains\"]) {\n this.services.set(additionalDomain, serviceData.documentation);\n }\n }\n this.services.set(serviceData.domain, serviceData.documentation);\n }\n }\n}\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\n\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\nexport enum ReportTypes {\n \"exposedPasswords\" = \"exposedPasswords\",\n \"reusedPasswords\" = \"reusedPasswords\",\n \"weakPasswords\" = \"weakPasswords\",\n \"unsecuredWebsites\" = \"unsecuredWebsites\",\n \"inactive2fa\" = \"inactive2fa\",\n \"dataBreach\" = \"dataBreach\",\n}\n\ntype ReportEntry = {\n title: string;\n description: string;\n route: string;\n icon: string;\n requiresPremium: boolean;\n};\n\nconst reports: Record = {\n exposedPasswords: {\n title: \"exposedPasswordsReport\",\n description: \"exposedPasswordsReportDesc\",\n route: \"exposed-passwords-report\",\n icon: `\n \n \n \n \n \n \n \n \n \n \n \n \n `,\n requiresPremium: true,\n },\n reusedPasswords: {\n title: \"reusedPasswordsReport\",\n description: \"reusedPasswordsReportDesc\",\n route: \"reused-passwords-report\",\n icon: `\n \n \n \n \n \n `,\n requiresPremium: true,\n },\n weakPasswords: {\n title: \"weakPasswordsReport\",\n description: \"weakPasswordsReportDesc\",\n route: \"weak-passwords-report\",\n icon: `\n \n \n \n \n \n \n `,\n requiresPremium: true,\n },\n unsecuredWebsites: {\n title: \"unsecuredWebsitesReport\",\n description: \"unsecuredWebsitesReportDesc\",\n route: \"unsecured-websites-report\",\n icon: `\n \n \n \n \n \n \n \n \n `,\n requiresPremium: true,\n },\n inactive2fa: {\n title: \"inactive2faReport\",\n description: \"inactive2faReportDesc\",\n route: \"inactive-two-factor-report\",\n icon: `\n \n \n \n \n \n \n `,\n requiresPremium: true,\n },\n dataBreach: {\n title: \"dataBreachReport\",\n description: \"breachDesc\",\n route: \"breach-report\",\n icon: `\n \n \n \n \n \n \n \n \n \n \n `,\n requiresPremium: false,\n },\n};\n\n@Component({\n selector: \"app-report-card\",\n templateUrl: \"report-card.component.html\",\n})\nexport class ReportCardComponent implements OnInit {\n @Input() type: ReportTypes;\n\n report: ReportEntry;\n\n hasPremium: boolean;\n\n constructor(\n private stateService: StateService,\n private messagingService: MessagingService,\n private sanitizer: DomSanitizer\n ) {}\n\n async ngOnInit() {\n this.report = reports[this.type];\n\n this.hasPremium = await this.stateService.getCanAccessPremium();\n }\n\n get premium() {\n return this.report.requiresPremium && !this.hasPremium;\n }\n\n get route() {\n if (this.premium) {\n return null;\n }\n\n return this.report.route;\n }\n\n get icon() {\n return this.sanitizer.bypassSecurityTrustHtml(this.report.icon);\n }\n\n click() {\n if (this.premium) {\n this.messagingService.send(\"premiumRequired\");\n }\n }\n}\n","\n
\n \n
\n
\n
\n

{{ report.title | i18n }}

\n

{{ report.description | i18n }}

\n
\n {{ \"premium\" | i18n }}\n \n\n","import { Component } from \"@angular/core\";\n\nimport { ReportTypes } from \"./report-card.component\";\n\n@Component({\n selector: \"app-report-list\",\n templateUrl: \"report-list.component.html\",\n})\nexport class ReportListComponent {\n reports = [\n ReportTypes.exposedPasswords,\n ReportTypes.reusedPasswords,\n ReportTypes.weakPasswords,\n ReportTypes.unsecuredWebsites,\n ReportTypes.inactive2fa,\n ReportTypes.dataBreach,\n ];\n}\n","
\n

{{ \"reports\" | i18n }}

\n
\n\n

{{ \"reportsDesc\" | i18n }}

\n\n
\n
\n \n
\n
\n","import { Component, OnDestroy } from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { Subscription } from \"rxjs\";\nimport { filter } from \"rxjs/operators\";\n\n@Component({\n selector: \"app-reports\",\n templateUrl: \"reports.component.html\",\n})\nexport class ReportsComponent implements OnDestroy {\n homepage = true;\n subscription: Subscription;\n\n constructor(router: Router) {\n this.subscription = router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((event) => {\n this.homepage = (event as NavigationEnd).url == \"/reports\";\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n}\n","\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuardService } from \"jslib-angular/services/auth-guard.service\";\n\nimport { BreachReportComponent } from \"./breach-report.component\";\nimport { ExposedPasswordsReportComponent } from \"./exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent } from \"./inactive-two-factor-report.component\";\nimport { ReportListComponent } from \"./report-list.component\";\nimport { ReportsComponent } from \"./reports.component\";\nimport { ReusedPasswordsReportComponent } from \"./reused-passwords-report.component\";\nimport { UnsecuredWebsitesReportComponent } from \"./unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent } from \"./weak-passwords-report.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: ReportsComponent,\n canActivate: [AuthGuardService],\n children: [\n { path: \"\", pathMatch: \"full\", component: ReportListComponent, data: { homepage: true } },\n {\n path: \"breach-report\",\n component: BreachReportComponent,\n data: { titleId: \"dataBreachReport\" },\n },\n {\n path: \"reused-passwords-report\",\n component: ReusedPasswordsReportComponent,\n data: { titleId: \"reusedPasswordsReport\" },\n },\n {\n path: \"unsecured-websites-report\",\n component: UnsecuredWebsitesReportComponent,\n data: { titleId: \"unsecuredWebsitesReport\" },\n },\n {\n path: \"weak-passwords-report\",\n component: WeakPasswordsReportComponent,\n data: { titleId: \"weakPasswordsReport\" },\n },\n {\n path: \"exposed-passwords-report\",\n component: ExposedPasswordsReportComponent,\n data: { titleId: \"exposedPasswordsReport\" },\n },\n {\n path: \"inactive-two-factor-report\",\n component: InactiveTwoFactorReportComponent,\n data: { titleId: \"inactive2faReport\" },\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class ReportsModule {}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-reused-passwords-report\",\n templateUrl: \"reused-passwords-report.component.html\",\n})\nexport class ReusedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n passwordUseMap: Map;\n\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const ciphersWithPasswords: CipherView[] = [];\n this.passwordUseMap = new Map();\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n c.login.password == null ||\n c.login.password === \"\" ||\n c.isDeleted\n ) {\n return;\n }\n ciphersWithPasswords.push(c);\n if (this.passwordUseMap.has(c.login.password)) {\n this.passwordUseMap.set(c.login.password, this.passwordUseMap.get(c.login.password) + 1);\n } else {\n this.passwordUseMap.set(c.login.password, 1);\n }\n });\n const reusedPasswordCiphers = ciphersWithPasswords.filter(\n (c) =>\n this.passwordUseMap.has(c.login.password) && this.passwordUseMap.get(c.login.password) > 1\n );\n this.ciphers = reusedPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from an organization view\n return true;\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-unsecured-websites-report\",\n templateUrl: \"unsecured-websites-report.component.html\",\n})\nexport class UnsecuredWebsitesReportComponent extends CipherReportComponent implements OnInit {\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const unsecuredCiphers = allCiphers.filter((c) => {\n if (c.type !== CipherType.Login || !c.login.hasUris || c.isDeleted) {\n return false;\n }\n return c.login.uris.some((u) => u.uri != null && u.uri.indexOf(\"http://\") === 0);\n });\n this.ciphers = unsecuredCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-weak-passwords-report\",\n templateUrl: \"weak-passwords-report.component.html\",\n})\nexport class WeakPasswordsReportComponent extends CipherReportComponent implements OnInit {\n passwordStrengthMap = new Map();\n\n private passwordStrengthCache = new Map();\n\n constructor(\n protected cipherService: CipherService,\n protected passwordGenerationService: PasswordGenerationService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const weakPasswordCiphers: CipherView[] = [];\n const isUserNameNotEmpty = (c: CipherView): boolean => {\n return c.login.username != null && c.login.username.trim() !== \"\";\n };\n const getCacheKey = (c: CipherView): string => {\n return c.login.password + \"_____\" + (isUserNameNotEmpty(c) ? c.login.username : \"\");\n };\n\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n c.login.password == null ||\n c.login.password === \"\" ||\n c.isDeleted\n ) {\n return;\n }\n const hasUserName = isUserNameNotEmpty(c);\n const cacheKey = getCacheKey(c);\n if (!this.passwordStrengthCache.has(cacheKey)) {\n let userInput: string[] = [];\n if (hasUserName) {\n const atPosition = c.login.username.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput\n .concat(\n c.login.username\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n )\n .filter((i) => i.length >= 3);\n } else {\n userInput = c.login.username\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n .filter((i) => i.length >= 3);\n }\n }\n const result = this.passwordGenerationService.passwordStrength(\n c.login.password,\n userInput.length > 0 ? userInput : null\n );\n this.passwordStrengthCache.set(cacheKey, result.score);\n }\n const score = this.passwordStrengthCache.get(cacheKey);\n if (score != null && score <= 2) {\n this.passwordStrengthMap.set(c.id, this.scoreKey(score));\n weakPasswordCiphers.push(c);\n }\n });\n weakPasswordCiphers.sort((a, b) => {\n return (\n this.passwordStrengthCache.get(getCacheKey(a)) -\n this.passwordStrengthCache.get(getCacheKey(b))\n );\n });\n this.ciphers = weakPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from the org view;\n return true;\n }\n\n private scoreKey(score: number): [string, string] {\n switch (score) {\n case 4:\n return [\"strong\", \"success\"];\n case 3:\n return [\"good\", \"primary\"];\n case 2:\n return [\"weak\", \"warning\"];\n default:\n return [\"veryWeak\", \"danger\"];\n }\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SEND_KDF_ITERATIONS } from \"jslib-common/enums/kdfType\";\nimport { SendType } from \"jslib-common/enums/sendType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { SendAccess } from \"jslib-common/models/domain/sendAccess\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { SendAccessRequest } from \"jslib-common/models/request/sendAccessRequest\";\nimport { ErrorResponse } from \"jslib-common/models/response/errorResponse\";\nimport { SendAccessResponse } from \"jslib-common/models/response/sendAccessResponse\";\nimport { SendAccessView } from \"jslib-common/models/view/sendAccessView\";\n\n@Component({\n selector: \"app-send-access\",\n templateUrl: \"access.component.html\",\n})\nexport class AccessComponent implements OnInit {\n send: SendAccessView;\n sendType = SendType;\n downloading = false;\n loading = true;\n passwordRequired = false;\n formPromise: Promise;\n password: string;\n showText = false;\n unavailable = false;\n error = false;\n hideEmail = false;\n\n private id: string;\n private key: string;\n private decKey: SymmetricCryptoKey;\n private accessRequest: SendAccessRequest;\n\n constructor(\n private i18nService: I18nService,\n private cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private route: ActivatedRoute,\n private cryptoService: CryptoService\n ) {}\n\n get sendText() {\n if (this.send == null || this.send.text == null) {\n return null;\n }\n return this.showText ? this.send.text.text : this.send.text.maskedText;\n }\n\n get expirationDate() {\n if (this.send == null || this.send.expirationDate == null) {\n return null;\n }\n return this.send.expirationDate;\n }\n\n get creatorIdentifier() {\n if (this.send == null || this.send.creatorIdentifier == null) {\n return null;\n }\n return this.send.creatorIdentifier;\n }\n\n ngOnInit() {\n this.route.params.subscribe(async (params) => {\n this.id = params.sendId;\n this.key = params.key;\n if (this.key == null || this.id == null) {\n return;\n }\n await this.load();\n });\n }\n\n async download() {\n if (this.send == null || this.decKey == null) {\n return;\n }\n\n if (this.downloading) {\n return;\n }\n\n const downloadData = await this.apiService.getSendFileDownloadData(\n this.send,\n this.accessRequest\n );\n\n if (Utils.isNullOrWhitespace(downloadData.url)) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"missingSendFile\"));\n return;\n }\n\n this.downloading = true;\n const response = await fetch(new Request(downloadData.url, { cache: \"no-store\" }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n this.downloading = false;\n return;\n }\n\n try {\n const buf = await response.arrayBuffer();\n const decBuf = await this.cryptoService.decryptFromBytes(buf, this.decKey);\n this.platformUtilsService.saveFile(window, decBuf, null, this.send.file.fileName);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n\n this.downloading = false;\n }\n\n copyText() {\n this.platformUtilsService.copyToClipboard(this.send.text.text);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"sendTypeText\"))\n );\n }\n\n toggleText() {\n this.showText = !this.showText;\n }\n\n async load() {\n this.unavailable = false;\n this.error = false;\n this.hideEmail = false;\n const keyArray = Utils.fromUrlB64ToArray(this.key);\n this.accessRequest = new SendAccessRequest();\n if (this.password != null) {\n const passwordHash = await this.cryptoFunctionService.pbkdf2(\n this.password,\n keyArray,\n \"sha256\",\n SEND_KDF_ITERATIONS\n );\n this.accessRequest.password = Utils.fromBufferToB64(passwordHash);\n }\n try {\n let sendResponse: SendAccessResponse = null;\n if (this.loading) {\n sendResponse = await this.apiService.postSendAccess(this.id, this.accessRequest);\n } else {\n this.formPromise = this.apiService.postSendAccess(this.id, this.accessRequest);\n sendResponse = await this.formPromise;\n }\n this.passwordRequired = false;\n const sendAccess = new SendAccess(sendResponse);\n this.decKey = await this.cryptoService.makeSendKey(keyArray);\n this.send = await sendAccess.decrypt(this.decKey);\n this.showText = this.send.text != null ? !this.send.text.hidden : true;\n } catch (e) {\n if (e instanceof ErrorResponse) {\n if (e.statusCode === 401) {\n this.passwordRequired = true;\n } else if (e.statusCode === 404) {\n this.unavailable = true;\n } else {\n this.error = true;\n }\n }\n }\n this.loading = false;\n this.hideEmail =\n this.creatorIdentifier == null &&\n !this.passwordRequired &&\n !this.loading &&\n !this.unavailable;\n }\n}\n","
\n
\n
\n

Bitwarden Send

\n
\n
\n

{{ \"sendCreatorIdentifier\" | i18n: creatorIdentifier }}

\n
\n
\n \n {{ \"viewSendHiddenEmailWarning\" | i18n }}\n {{\n \"learnMore\" | i18n\n }}.\n \n
\n
\n
\n
\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n

{{ \"sendProtectedPassword\" | i18n }}

\n

{{ \"sendProtectedPasswordDontKnow\" | i18n }}

\n
\n \n \n
\n
\n \n \n {{ \"continue\" | i18n }}\n \n \n \n
\n
\n
\n {{ \"sendAccessUnavailable\" | i18n }}\n
\n
\n {{ \"unexpectedError\" | i18n }}\n
\n
\n

\n {{ send.name }}\n

\n
\n \n \n {{\n \"sendHiddenByDefault\" | i18n\n }}\n
\n \n
\n \n \n {{ \"toggleVisibility\" | i18n }}\n \n \n
\n \n \n

{{ send.file.fileName }}

\n \n \n {{ \"downloadFile\" | i18n }} ({{ send.file.sizeName }})\n \n \n \n \n
\n

\n Expires: {{ expirationDate | date: \"medium\" }}\n

\n
\n
\n
\n
\n

\n {{ \"sendAccessTaglineProductDesc\" | i18n }}
\n

\n
\n
\n\n","import { DatePipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"jslib-angular/components/send/add-edit.component\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SendService } from \"jslib-common/abstractions/send.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Component({\n selector: \"app-send-add-edit\",\n templateUrl: \"add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n constructor(\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n datePipe: DatePipe,\n sendService: SendService,\n stateService: StateService,\n messagingService: MessagingService,\n policyService: PolicyService,\n logService: LogService\n ) {\n super(\n i18nService,\n platformUtilsService,\n environmentService,\n datePipe,\n sendService,\n messagingService,\n policyService,\n logService,\n stateService\n );\n }\n\n async copyLinkToClipboard(link: string): Promise {\n // Copy function on web depends on the modal being open or not. Since this event occurs during a transition\n // of the modal closing we need to add a small delay to make sure state of the DOM is consistent.\n return new Promise((resolve) => {\n window.setTimeout(() => resolve(super.copyLinkToClipboard(link)), 500);\n });\n }\n}\n","
\n\n","import { DatePipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\nimport { ControlContainer, NgForm } from \"@angular/forms\";\n\nimport { EffluxDatesComponent as BaseEffluxDatesComponent } from \"jslib-angular/components/send/efflux-dates.component\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-send-efflux-dates\",\n templateUrl: \"efflux-dates.component.html\",\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n})\nexport class EffluxDatesComponent extends BaseEffluxDatesComponent {\n constructor(\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected datePipe: DatePipe\n ) {\n super(i18nService, platformUtilsService, datePipe);\n }\n}\n","
\n
\n \n \n \n \n
\n \n \n
\n
\n \n
\n \n \n \n {{ o.twelveHour }}\n \n \n
\n
\n \n \n \n
\n
\n
\n \n \n \n \n \n \n
\n
\n \n
\n
{{ \"deletionDateDesc\" | i18n }}
\n
\n
\n
\n \n \n {{ \"clear\" | i18n }}\n \n
\n \n \n
\n \n \n
\n \n
\n \n \n \n {{ o.twelveHour }}\n \n \n
\n \n \n \n
\n
\n
\n \n \n \n \n \n \n
\n
\n \n
\n
{{ \"expirationDateDesc\" | i18n }}
\n
\n
\n","import { Component, NgZone, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { SendComponent as BaseSendComponent } from \"jslib-angular/components/send/send.component\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { SendService } from \"jslib-common/abstractions/send.service\";\nimport { SendView } from \"jslib-common/models/view/sendView\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\n\nconst BroadcasterSubscriptionId = \"SendComponent\";\n\n@Component({\n selector: \"app-send\",\n templateUrl: \"send.component.html\",\n})\nexport class SendComponent extends BaseSendComponent {\n @ViewChild(\"sendAddEdit\", { read: ViewContainerRef, static: true })\n sendAddEditModalRef: ViewContainerRef;\n\n constructor(\n sendService: SendService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n ngZone: NgZone,\n searchService: SearchService,\n policyService: PolicyService,\n private modalService: ModalService,\n private broadcasterService: BroadcasterService,\n logService: LogService\n ) {\n super(\n sendService,\n i18nService,\n platformUtilsService,\n environmentService,\n ngZone,\n searchService,\n policyService,\n logService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n\n // Broadcaster subscription - load if sync completes in the background\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"syncCompleted\":\n if (message.successfully) {\n await this.load();\n }\n break;\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async addSend() {\n if (this.disableSend) {\n return;\n }\n\n const component = await this.editSend(null);\n component.type = this.type;\n }\n\n async editSend(send: SendView) {\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.sendAddEditModalRef,\n (comp) => {\n comp.sendId = send == null ? null : send.id;\n comp.onSavedSend.subscribe(async () => {\n modal.close();\n await this.load();\n });\n comp.onDeletedSend.subscribe(async () => {\n modal.close();\n await this.load();\n });\n }\n );\n\n return childComponent;\n }\n}\n","
\n \n {{ \"sendDisabledWarning\" | i18n }}\n \n
\n
\n
\n
\n {{ \"filters\" | i18n }}\n
\n
\n \n \n

{{ \"types\" | i18n }}

\n \n
\n
\n
\n
\n
\n

\n {{ \"send\" | i18n }}\n \n \n \n {{ \"loading\" | i18n }}\n \n \n

\n
\n \n {{ \"createSend\" | i18n }}\n \n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n
\n {{ s.name }}\n \n \n {{ \"disabled\" | i18n }}\n \n \n \n {{ \"password\" | i18n }}\n \n \n \n {{ \"maxAccessCountReached\" | i18n }}\n \n \n \n {{ \"expired\" | i18n }}\n \n \n \n {{ \"pendingDeletion\" | i18n }}\n \n
\n {{ s.deletionDate | date: \"medium\" }}\n
\n
\n \n \n \n
\n \n \n {{ \"copySendLink\" | i18n }}\n \n \n \n {{ \"removePassword\" | i18n }}\n \n \n \n {{ \"delete\" | i18n }}\n \n
\n
\n
\n
\n \n \n {{ \"loading\" | i18n }}\n \n \n

{{ \"noSendsInList\" | i18n }}

\n \n
\n
\n
\n
\n
\n\n","import { Injectable } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { DeviceType } from \"jslib-common/enums/deviceType\";\nimport { EventType } from \"jslib-common/enums/eventType\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { EventResponse } from \"jslib-common/models/response/eventResponse\";\n\n@Injectable()\nexport class EventService {\n constructor(private i18nService: I18nService, private policyService: PolicyService) {}\n\n getDefaultDateFilters() {\n const d = new Date();\n const end = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59);\n d.setDate(d.getDate() - 30);\n const start = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0);\n return [this.toDateTimeLocalString(start), this.toDateTimeLocalString(end)];\n }\n\n formatDateFilters(filterStart: string, filterEnd: string) {\n const start: Date = new Date(filterStart);\n const end: Date = new Date(filterEnd + \":59.999\");\n if (isNaN(start.getTime()) || isNaN(end.getTime()) || end < start) {\n throw new Error(\"Invalid date range.\");\n }\n return [start.toISOString(), end.toISOString()];\n }\n\n async getEventInfo(ev: EventResponse, options = new EventOptions()): Promise {\n const appInfo = this.getAppInfo(ev.deviceType);\n const { message, humanReadableMessage } = await this.getEventMessage(ev, options);\n return {\n message: message,\n humanReadableMessage: humanReadableMessage,\n appIcon: appInfo[0],\n appName: appInfo[1],\n };\n }\n\n private async getEventMessage(ev: EventResponse, options: EventOptions) {\n let msg = \"\";\n let humanReadableMsg = \"\";\n switch (ev.type) {\n // User\n case EventType.User_LoggedIn:\n msg = humanReadableMsg = this.i18nService.t(\"loggedIn\");\n break;\n case EventType.User_ChangedPassword:\n msg = humanReadableMsg = this.i18nService.t(\"changedPassword\");\n break;\n case EventType.User_Updated2fa:\n msg = humanReadableMsg = this.i18nService.t(\"enabledUpdated2fa\");\n break;\n case EventType.User_Disabled2fa:\n msg = humanReadableMsg = this.i18nService.t(\"disabled2fa\");\n break;\n case EventType.User_Recovered2fa:\n msg = humanReadableMsg = this.i18nService.t(\"recovered2fa\");\n break;\n case EventType.User_FailedLogIn:\n msg = humanReadableMsg = this.i18nService.t(\"failedLogin\");\n break;\n case EventType.User_FailedLogIn2fa:\n msg = humanReadableMsg = this.i18nService.t(\"failedLogin2fa\");\n break;\n case EventType.User_ClientExportedVault:\n msg = humanReadableMsg = this.i18nService.t(\"exportedVault\");\n break;\n case EventType.User_UpdatedTempPassword:\n msg = humanReadableMsg = this.i18nService.t(\"updatedMasterPassword\");\n break;\n case EventType.User_MigratedKeyToKeyConnector:\n msg = humanReadableMsg = this.i18nService.t(\"migratedKeyConnector\");\n break;\n // Cipher\n case EventType.Cipher_Created:\n msg = this.i18nService.t(\"createdItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"createdItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Updated:\n msg = this.i18nService.t(\"editedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"editedItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Deleted:\n msg = this.i18nService.t(\"permanentlyDeletedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"permanentlyDeletedItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_SoftDeleted:\n msg = this.i18nService.t(\"deletedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"deletedItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Restored:\n msg = this.i18nService.t(\"restoredItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"restoredItemId\", this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_AttachmentCreated:\n msg = this.i18nService.t(\"createdAttachmentForItem\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"createdAttachmentForItem\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_AttachmentDeleted:\n msg = this.i18nService.t(\"deletedAttachmentForItem\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"deletedAttachmentForItem\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_Shared:\n msg = this.i18nService.t(\"movedItemIdToOrg\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"movedItemIdToOrg\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientViewed:\n msg = this.i18nService.t(\"viewedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"viewedItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientToggledPasswordVisible:\n msg = this.i18nService.t(\"viewedPasswordItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"viewedPasswordItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientToggledHiddenFieldVisible:\n msg = this.i18nService.t(\"viewedHiddenFieldItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"viewedHiddenFieldItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientToggledCardCodeVisible:\n msg = this.i18nService.t(\"viewedSecurityCodeItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"viewedSecurityCodeItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientCopiedHiddenField:\n msg = this.i18nService.t(\"copiedHiddenFieldItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"copiedHiddenFieldItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientCopiedPassword:\n msg = this.i18nService.t(\"copiedPasswordItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"copiedPasswordItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientCopiedCardCode:\n msg = this.i18nService.t(\"copiedSecurityCodeItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"copiedSecurityCodeItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientAutofilled:\n msg = this.i18nService.t(\"autofilledItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"autofilledItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_UpdatedCollections:\n msg = this.i18nService.t(\"editedCollectionsForItem\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"editedCollectionsForItem\",\n this.getShortId(ev.cipherId)\n );\n break;\n // Collection\n case EventType.Collection_Created:\n msg = this.i18nService.t(\"createdCollectionId\", this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t(\n \"createdCollectionId\",\n this.getShortId(ev.collectionId)\n );\n break;\n case EventType.Collection_Updated:\n msg = this.i18nService.t(\"editedCollectionId\", this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t(\n \"editedCollectionId\",\n this.getShortId(ev.collectionId)\n );\n break;\n case EventType.Collection_Deleted:\n msg = this.i18nService.t(\"deletedCollectionId\", this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t(\n \"deletedCollectionId\",\n this.getShortId(ev.collectionId)\n );\n break;\n // Group\n case EventType.Group_Created:\n msg = this.i18nService.t(\"createdGroupId\", this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t(\"createdGroupId\", this.getShortId(ev.groupId));\n break;\n case EventType.Group_Updated:\n msg = this.i18nService.t(\"editedGroupId\", this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t(\"editedGroupId\", this.getShortId(ev.groupId));\n break;\n case EventType.Group_Deleted:\n msg = this.i18nService.t(\"deletedGroupId\", this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t(\"deletedGroupId\", this.getShortId(ev.groupId));\n break;\n // Org user\n case EventType.OrganizationUser_Invited:\n msg = this.i18nService.t(\"invitedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"invitedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Confirmed:\n msg = this.i18nService.t(\"confirmedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"confirmedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Updated:\n msg = this.i18nService.t(\"editedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"editedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Removed:\n msg = this.i18nService.t(\"removedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"removedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_UpdatedGroups:\n msg = this.i18nService.t(\"editedGroupsForUser\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"editedGroupsForUser\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_UnlinkedSso:\n msg = this.i18nService.t(\"unlinkedSsoUser\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"unlinkedSsoUser\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_ResetPassword_Enroll:\n msg = this.i18nService.t(\"eventEnrollPasswordReset\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventEnrollPasswordReset\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_ResetPassword_Withdraw:\n msg = this.i18nService.t(\"eventWithdrawPasswordReset\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventWithdrawPasswordReset\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_AdminResetPassword:\n msg = this.i18nService.t(\"eventAdminPasswordReset\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventAdminPasswordReset\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_ResetSsoLink:\n msg = this.i18nService.t(\"eventResetSsoLink\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventResetSsoLink\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_FirstSsoLogin:\n msg = this.i18nService.t(\"firstSsoLogin\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"firstSsoLogin\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n // Org\n case EventType.Organization_Updated:\n msg = humanReadableMsg = this.i18nService.t(\"editedOrgSettings\");\n break;\n case EventType.Organization_PurgedVault:\n msg = humanReadableMsg = this.i18nService.t(\"purgedOrganizationVault\");\n break;\n /*\n case EventType.Organization_ClientExportedVault:\n msg = this.i18nService.t('exportedOrganizationVault');\n break;\n */\n case EventType.Organization_VaultAccessed:\n msg = humanReadableMsg = this.i18nService.t(\"vaultAccessedByProvider\");\n break;\n case EventType.Organization_EnabledSso:\n msg = humanReadableMsg = this.i18nService.t(\"enabledSso\");\n break;\n case EventType.Organization_DisabledSso:\n msg = humanReadableMsg = this.i18nService.t(\"disabledSso\");\n break;\n case EventType.Organization_EnabledKeyConnector:\n msg = humanReadableMsg = this.i18nService.t(\"enabledKeyConnector\");\n break;\n case EventType.Organization_DisabledKeyConnector:\n msg = humanReadableMsg = this.i18nService.t(\"disabledKeyConnector\");\n break;\n // Policies\n case EventType.Policy_Updated: {\n msg = this.i18nService.t(\"modifiedPolicyId\", this.formatPolicyId(ev));\n\n const policies = await this.policyService.getAll();\n const policy = policies.filter((p) => p.id === ev.policyId)[0];\n let p1 = this.getShortId(ev.policyId);\n if (policy != null) {\n p1 = PolicyType[policy.type];\n }\n\n humanReadableMsg = this.i18nService.t(\"modifiedPolicyId\", p1);\n break;\n }\n // Provider users:\n case EventType.ProviderUser_Invited:\n msg = this.i18nService.t(\"invitedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\"invitedUserId\", this.getShortId(ev.providerUserId));\n break;\n case EventType.ProviderUser_Confirmed:\n msg = this.i18nService.t(\"confirmedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"confirmedUserId\",\n this.getShortId(ev.providerUserId)\n );\n break;\n case EventType.ProviderUser_Updated:\n msg = this.i18nService.t(\"editedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\"editedUserId\", this.getShortId(ev.providerUserId));\n break;\n case EventType.ProviderUser_Removed:\n msg = this.i18nService.t(\"removedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\"removedUserId\", this.getShortId(ev.providerUserId));\n break;\n case EventType.ProviderOrganization_Created:\n msg = this.i18nService.t(\"createdOrganizationId\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"createdOrganizationId\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n case EventType.ProviderOrganization_Added:\n msg = this.i18nService.t(\"addedOrganizationId\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"addedOrganizationId\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n case EventType.ProviderOrganization_Removed:\n msg = this.i18nService.t(\"removedOrganizationId\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"removedOrganizationId\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n case EventType.ProviderOrganization_VaultAccessed:\n msg = this.i18nService.t(\"accessedClientVault\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"accessedClientVault\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n default:\n break;\n }\n return {\n message: msg === \"\" ? null : msg,\n humanReadableMessage: humanReadableMsg === \"\" ? null : humanReadableMsg,\n };\n }\n\n private getAppInfo(deviceType: DeviceType): [string, string] {\n switch (deviceType) {\n case DeviceType.Android:\n return [\"bwi-android\", this.i18nService.t(\"mobile\") + \" - Android\"];\n case DeviceType.iOS:\n return [\"bwi-apple\", this.i18nService.t(\"mobile\") + \" - iOS\"];\n case DeviceType.UWP:\n return [\"bwi-windows\", this.i18nService.t(\"mobile\") + \" - Windows\"];\n case DeviceType.ChromeExtension:\n return [\"bwi-chrome\", this.i18nService.t(\"extension\") + \" - Chrome\"];\n case DeviceType.FirefoxExtension:\n return [\"bwi-firefox\", this.i18nService.t(\"extension\") + \" - Firefox\"];\n case DeviceType.OperaExtension:\n return [\"bwi-opera\", this.i18nService.t(\"extension\") + \" - Opera\"];\n case DeviceType.EdgeExtension:\n return [\"bwi-edge\", this.i18nService.t(\"extension\") + \" - Edge\"];\n case DeviceType.VivaldiExtension:\n return [\"bwi-puzzle\", this.i18nService.t(\"extension\") + \" - Vivaldi\"];\n case DeviceType.SafariExtension:\n return [\"bwi-safari\", this.i18nService.t(\"extension\") + \" - Safari\"];\n case DeviceType.WindowsDesktop:\n return [\"bwi-windows\", this.i18nService.t(\"desktop\") + \" - Windows\"];\n case DeviceType.MacOsDesktop:\n return [\"bwi-apple\", this.i18nService.t(\"desktop\") + \" - macOS\"];\n case DeviceType.LinuxDesktop:\n return [\"bwi-linux\", this.i18nService.t(\"desktop\") + \" - Linux\"];\n case DeviceType.ChromeBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Chrome\"];\n case DeviceType.FirefoxBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Firefox\"];\n case DeviceType.OperaBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Opera\"];\n case DeviceType.SafariBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Safari\"];\n case DeviceType.VivaldiBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Vivaldi\"];\n case DeviceType.EdgeBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Edge\"];\n case DeviceType.IEBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - IE\"];\n case DeviceType.UnknownBrowser:\n return [\n \"bwi-globe\",\n this.i18nService.t(\"webVault\") + \" - \" + this.i18nService.t(\"unknown\"),\n ];\n default:\n return [\"bwi-globe\", this.i18nService.t(\"unknown\")];\n }\n }\n\n private formatCipherId(ev: EventResponse, options: EventOptions) {\n const shortId = this.getShortId(ev.cipherId);\n if (ev.organizationId == null || !options.cipherInfo) {\n return \"\" + shortId + \"\";\n }\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" +\n ev.organizationId +\n \"/vault?search=\" +\n shortId +\n \"&viewEvents=\" +\n ev.cipherId\n );\n return a.outerHTML;\n }\n\n private formatGroupId(ev: EventResponse) {\n const shortId = this.getShortId(ev.groupId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" + ev.organizationId + \"/manage/groups?search=\" + shortId\n );\n return a.outerHTML;\n }\n\n private formatCollectionId(ev: EventResponse) {\n const shortId = this.getShortId(ev.collectionId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" + ev.organizationId + \"/manage/collections?search=\" + shortId\n );\n return a.outerHTML;\n }\n\n private formatOrgUserId(ev: EventResponse) {\n const shortId = this.getShortId(ev.organizationUserId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" +\n ev.organizationId +\n \"/manage/people?search=\" +\n shortId +\n \"&viewEvents=\" +\n ev.organizationUserId\n );\n return a.outerHTML;\n }\n\n private formatProviderUserId(ev: EventResponse) {\n const shortId = this.getShortId(ev.providerUserId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/providers/\" +\n ev.providerId +\n \"/manage/people?search=\" +\n shortId +\n \"&viewEvents=\" +\n ev.providerUserId\n );\n return a.outerHTML;\n }\n\n private formatProviderOrganizationId(ev: EventResponse) {\n const shortId = this.getShortId(ev.providerOrganizationId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\"href\", \"#/providers/\" + ev.providerId + \"/clients?search=\" + shortId);\n return a.outerHTML;\n }\n\n private formatPolicyId(ev: EventResponse) {\n const shortId = this.getShortId(ev.policyId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" + ev.organizationId + \"/manage/policies?policyId=\" + ev.policyId\n );\n return a.outerHTML;\n }\n\n private makeAnchor(shortId: string) {\n const a = document.createElement(\"a\");\n a.title = this.i18nService.t(\"view\");\n a.innerHTML = \"\" + shortId + \"\";\n return a;\n }\n\n private getShortId(id: string) {\n return id?.substring(0, 8);\n }\n\n private toDateTimeLocalString(date: Date) {\n return (\n date.getFullYear() +\n \"-\" +\n this.pad(date.getMonth() + 1) +\n \"-\" +\n this.pad(date.getDate()) +\n \"T\" +\n this.pad(date.getHours()) +\n \":\" +\n this.pad(date.getMinutes())\n );\n }\n\n private pad(num: number) {\n const norm = Math.floor(Math.abs(num));\n return (norm < 10 ? \"0\" : \"\") + norm;\n }\n}\n\nexport class EventInfo {\n message: string;\n humanReadableMessage: string;\n appIcon: string;\n appName: string;\n}\n\nexport class EventOptions {\n cipherInfo = true;\n}\n","import { ApplicationRef, ComponentFactoryResolver, Injectable, Injector } from \"@angular/core\";\nimport * as jq from \"jquery\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalRef } from \"jslib-angular/components/modal/modal.ref\";\nimport { ModalService as BaseModalService } from \"jslib-angular/services/modal.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Injectable()\nexport class ModalService extends BaseModalService {\n el: any = null;\n modalOpen = false;\n\n constructor(\n componentFactoryResolver: ComponentFactoryResolver,\n applicationRef: ApplicationRef,\n injector: Injector,\n private messagingService: MessagingService\n ) {\n super(componentFactoryResolver, applicationRef, injector);\n }\n\n protected setupHandlers(modalRef: ModalRef) {\n modalRef.onCreated.pipe(first()).subscribe(() => {\n const modals = Array.from(document.querySelectorAll(\".modal\"));\n if (modals.length > 0) {\n this.el = jq(modals[0]);\n this.el.modal(\"show\");\n\n this.el.on(\"show.bs.modal\", () => {\n modalRef.show();\n this.messagingService.send(\"modalShow\");\n });\n this.el.on(\"shown.bs.modal\", () => {\n modalRef.shown();\n this.messagingService.send(\"modalShown\");\n if (!Utils.isMobileBrowser) {\n this.el.find(\"*[appAutoFocus]\").focus();\n }\n });\n this.el.on(\"hide.bs.modal\", () => {\n this.messagingService.send(\"modalClose\");\n });\n this.el.on(\"hidden.bs.modal\", () => {\n modalRef.closed();\n this.messagingService.send(\"modalClosed\");\n });\n }\n });\n\n modalRef.onClose.pipe(first()).subscribe(() => {\n if (this.el != null) {\n this.el.modal(\"hide\");\n }\n });\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router } from \"@angular/router\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Injectable()\nexport class OrganizationGuardService implements CanActivate {\n constructor(\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private organizationService: OrganizationService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const org = await this.organizationService.get(route.params.organizationId);\n if (org == null) {\n this.router.navigate([\"/\"]);\n return false;\n }\n if (!org.isOwner && !org.enabled) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"organizationIsDisabled\")\n );\n this.router.navigate([\"/\"]);\n return false;\n }\n\n return true;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router } from \"@angular/router\";\n\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { Permissions } from \"jslib-common/enums/permissions\";\n\n@Injectable()\nexport class OrganizationTypeGuardService implements CanActivate {\n constructor(private organizationService: OrganizationService, private router: Router) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const org = await this.organizationService.get(route.params.organizationId);\n const permissions = route.data == null ? null : (route.data.permissions as Permissions[]);\n\n if (\n (permissions.indexOf(Permissions.AccessEventLogs) !== -1 && org.canAccessEventLogs) ||\n (permissions.indexOf(Permissions.AccessImportExport) !== -1 && org.canAccessImportExport) ||\n (permissions.indexOf(Permissions.AccessReports) !== -1 && org.canAccessReports) ||\n (permissions.indexOf(Permissions.CreateNewCollections) !== -1 &&\n org.canCreateNewCollections) ||\n (permissions.indexOf(Permissions.EditAnyCollection) !== -1 && org.canEditAnyCollection) ||\n (permissions.indexOf(Permissions.DeleteAnyCollection) !== -1 && org.canDeleteAnyCollection) ||\n (permissions.indexOf(Permissions.EditAssignedCollections) !== -1 &&\n org.canEditAssignedCollections) ||\n (permissions.indexOf(Permissions.DeleteAssignedCollections) !== -1 &&\n org.canDeleteAssignedCollections) ||\n (permissions.indexOf(Permissions.ManageGroups) !== -1 && org.canManageGroups) ||\n (permissions.indexOf(Permissions.ManageOrganization) !== -1 && org.isOwner) ||\n (permissions.indexOf(Permissions.ManagePolicies) !== -1 && org.canManagePolicies) ||\n (permissions.indexOf(Permissions.ManageUsers) !== -1 && org.canManageUsers) ||\n (permissions.indexOf(Permissions.ManageUsersPassword) !== -1 && org.canManageUsersPassword) ||\n (permissions.indexOf(Permissions.ManageSso) !== -1 && org.canManageSso)\n ) {\n return true;\n }\n\n this.router.navigate([\"/organizations\", org.id]);\n return false;\n }\n}\n","import { BasePolicy } from \"../organizations/policies/base-policy.component\";\n\nexport class PolicyListService {\n private policies: BasePolicy[] = [];\n\n addPolicies(policies: BasePolicy[]) {\n this.policies.push(...policies);\n }\n\n getPolicies(): BasePolicy[] {\n return this.policies;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Title } from \"@angular/platform-browser\";\nimport { ActivatedRoute, NavigationEnd, Router } from \"@angular/router\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\n\n@Injectable()\nexport class RouterService {\n private previousUrl: string = undefined;\n private currentUrl: string = undefined;\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private titleService: Title,\n i18nService: I18nService\n ) {\n this.currentUrl = this.router.url;\n router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.previousUrl = this.currentUrl;\n this.currentUrl = event.url;\n\n let title = i18nService.t(\"pageTitle\", \"Bitwarden\");\n let titleId: string = null;\n let rawTitle: string = null;\n let child = this.activatedRoute.firstChild;\n while (child != null) {\n if (child.firstChild != null) {\n child = child.firstChild;\n } else if (child.snapshot.data != null && child.snapshot.data.title != null) {\n rawTitle = child.snapshot.data.title;\n break;\n } else if (child.snapshot.data != null && child.snapshot.data.titleId != null) {\n titleId = child.snapshot.data.titleId;\n break;\n } else {\n titleId = null;\n rawTitle = null;\n break;\n }\n }\n\n if (titleId != null || rawTitle != null) {\n const newTitle = rawTitle != null ? rawTitle : i18nService.t(titleId);\n if (newTitle != null && newTitle !== \"\") {\n title = newTitle + \" | \" + title;\n }\n }\n this.titleService.setTitle(title);\n }\n });\n }\n\n getPreviousUrl() {\n return this.previousUrl;\n }\n\n setPreviousUrl(url: string) {\n this.previousUrl = url;\n }\n}\n","import { APP_INITIALIZER, NgModule } from \"@angular/core\";\nimport { ToastrModule } from \"ngx-toastr\";\n\nimport { JslibServicesModule } from \"jslib-angular/services/jslib-services.module\";\nimport { ModalService as ModalServiceAbstraction } from \"jslib-angular/services/modal.service\";\nimport { ApiService as ApiServiceAbstraction } from \"jslib-common/abstractions/api.service\";\nimport { CipherService as CipherServiceAbstraction } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService as CollectionServiceAbstraction } from \"jslib-common/abstractions/collection.service\";\nimport { CryptoService as CryptoServiceAbstraction } from \"jslib-common/abstractions/crypto.service\";\nimport { CryptoFunctionService as CryptoFunctionServiceAbstraction } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport {\n EnvironmentService as EnvironmentServiceAbstraction,\n Urls,\n} from \"jslib-common/abstractions/environment.service\";\nimport { EventService as EventLoggingServiceAbstraction } from \"jslib-common/abstractions/event.service\";\nimport { FolderService as FolderServiceAbstraction } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService as I18nServiceAbstraction } from \"jslib-common/abstractions/i18n.service\";\nimport { ImportService as ImportServiceAbstraction } from \"jslib-common/abstractions/import.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService as MessagingServiceAbstraction } from \"jslib-common/abstractions/messaging.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"jslib-common/abstractions/notifications.service\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService as BaseStateServiceAbstraction } from \"jslib-common/abstractions/state.service\";\nimport { StateMigrationService as StateMigrationServiceAbstraction } from \"jslib-common/abstractions/stateMigration.service\";\nimport { StorageService as StorageServiceAbstraction } from \"jslib-common/abstractions/storage.service\";\nimport { TwoFactorService as TwoFactorServiceAbstraction } from \"jslib-common/abstractions/twoFactor.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"jslib-common/abstractions/vaultTimeout.service\";\nimport { ThemeType } from \"jslib-common/enums/themeType\";\nimport { StateFactory } from \"jslib-common/factories/stateFactory\";\nimport { ContainerService } from \"jslib-common/services/container.service\";\nimport { CryptoService } from \"jslib-common/services/crypto.service\";\nimport { EventService as EventLoggingService } from \"jslib-common/services/event.service\";\nimport { ImportService } from \"jslib-common/services/import.service\";\nimport { VaultTimeoutService } from \"jslib-common/services/vaultTimeout.service\";\n\nimport { StateService as StateServiceAbstraction } from \"../../abstractions/state.service\";\nimport { Account } from \"../../models/account\";\nimport { GlobalState } from \"../../models/globalState\";\nimport { BroadcasterMessagingService } from \"../../services/broadcasterMessaging.service\";\nimport { HtmlStorageService } from \"../../services/htmlStorage.service\";\nimport { I18nService } from \"../../services/i18n.service\";\nimport { MemoryStorageService } from \"../../services/memoryStorage.service\";\nimport { PasswordRepromptService } from \"../../services/passwordReprompt.service\";\nimport { StateService } from \"../../services/state.service\";\nimport { StateMigrationService } from \"../../services/stateMigration.service\";\nimport { WebPlatformUtilsService } from \"../../services/webPlatformUtils.service\";\n\nimport { EventService } from \"./event.service\";\nimport { ModalService } from \"./modal.service\";\nimport { OrganizationGuardService } from \"./organization-guard.service\";\nimport { OrganizationTypeGuardService } from \"./organization-type-guard.service\";\nimport { PolicyListService } from \"./policy-list.service\";\nimport { RouterService } from \"./router.service\";\n\nexport function initFactory(\n window: Window,\n environmentService: EnvironmentServiceAbstraction,\n notificationsService: NotificationsServiceAbstraction,\n vaultTimeoutService: VaultTimeoutService,\n i18nService: I18nService,\n eventLoggingService: EventLoggingService,\n twoFactorService: TwoFactorServiceAbstraction,\n stateService: StateServiceAbstraction,\n platformUtilsService: PlatformUtilsServiceAbstraction,\n cryptoService: CryptoServiceAbstraction\n): () => void {\n function getBaseUrl() {\n // If the base URL is `https://vaultwarden.example.com/base/path/`,\n // `window.location.href` should have one of the following forms:\n //\n // - `https://vaultwarden.example.com/base/path/`\n // - `https://vaultwarden.example.com/base/path/#/some/route[?queryParam=...]`\n //\n // We want to get to just `https://vaultwarden.example.com/base/path`.\n let baseUrl = window.location.href;\n baseUrl = baseUrl.replace(/#.*/, ''); // Strip off `#` and everything after.\n baseUrl = baseUrl.replace(/\\/+$/, ''); // Trim any trailing `/` chars.\n return baseUrl;\n }\n return async () => {\n await stateService.init();\n\n const urls = {base: getBaseUrl()};\n environmentService.setUrls(urls);\n\n setTimeout(() => notificationsService.init(), 3000);\n\n vaultTimeoutService.init(true);\n const locale = await stateService.getLocale();\n await i18nService.init(locale);\n eventLoggingService.init(true);\n twoFactorService.init();\n const htmlEl = window.document.documentElement;\n htmlEl.classList.add(\"locale_\" + i18nService.translationLocale);\n\n // Initial theme is set in index.html which must be updated if there are any changes to theming logic\n platformUtilsService.onDefaultSystemThemeChange(async (sysTheme) => {\n const bwTheme = await stateService.getTheme();\n if (bwTheme === ThemeType.System) {\n htmlEl.classList.remove(\"theme_\" + ThemeType.Light, \"theme_\" + ThemeType.Dark);\n htmlEl.classList.add(\"theme_\" + sysTheme);\n }\n });\n\n const containerService = new ContainerService(cryptoService);\n containerService.attachToWindow(window);\n };\n}\n\n@NgModule({\n imports: [ToastrModule, JslibServicesModule],\n declarations: [],\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: initFactory,\n deps: [\n \"WINDOW\",\n EnvironmentServiceAbstraction,\n NotificationsServiceAbstraction,\n VaultTimeoutServiceAbstraction,\n I18nServiceAbstraction,\n EventLoggingServiceAbstraction,\n TwoFactorServiceAbstraction,\n StateServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n CryptoServiceAbstraction,\n ],\n multi: true,\n },\n OrganizationGuardService,\n OrganizationTypeGuardService,\n RouterService,\n EventService,\n PolicyListService,\n {\n provide: I18nServiceAbstraction,\n useFactory: (window: Window) => new I18nService(window.navigator.language, \"locales\"),\n deps: [\"WINDOW\"],\n },\n { provide: StorageServiceAbstraction, useClass: HtmlStorageService },\n {\n provide: \"SECURE_STORAGE\",\n // TODO: platformUtilsService.isDev has a helper for this, but using that service here results in a circular dependency.\n // We have a tech debt item in the backlog to break up platformUtilsService, but in the meantime simply checking the environement here is less cumbersome.\n useClass: process.env.NODE_ENV === \"development\" ? HtmlStorageService : MemoryStorageService,\n },\n {\n provide: PlatformUtilsServiceAbstraction,\n useFactory: (\n i18nService: I18nServiceAbstraction,\n messagingService: MessagingServiceAbstraction,\n logService: LogService,\n stateService: StateServiceAbstraction\n ) => new WebPlatformUtilsService(i18nService, messagingService, logService, stateService),\n deps: [\n I18nServiceAbstraction,\n MessagingServiceAbstraction,\n LogService,\n StateServiceAbstraction,\n ],\n },\n { provide: MessagingServiceAbstraction, useClass: BroadcasterMessagingService },\n { provide: ModalServiceAbstraction, useClass: ModalService },\n {\n provide: ImportServiceAbstraction,\n useClass: ImportService,\n deps: [\n CipherServiceAbstraction,\n FolderServiceAbstraction,\n ApiServiceAbstraction,\n I18nServiceAbstraction,\n CollectionServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n CryptoServiceAbstraction,\n ],\n },\n {\n provide: CryptoServiceAbstraction,\n useClass: CryptoService,\n deps: [\n CryptoFunctionServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n LogService,\n StateServiceAbstraction,\n ],\n },\n {\n provide: StateMigrationServiceAbstraction,\n useFactory: (\n storageService: StorageServiceAbstraction,\n secureStorageService: StorageServiceAbstraction\n ) =>\n new StateMigrationService(\n storageService,\n secureStorageService,\n new StateFactory(GlobalState, Account)\n ),\n deps: [StorageServiceAbstraction, \"SECURE_STORAGE\"],\n },\n {\n provide: StateServiceAbstraction,\n useFactory: (\n storageService: StorageServiceAbstraction,\n secureStorageService: StorageServiceAbstraction,\n logService: LogService,\n stateMigrationService: StateMigrationServiceAbstraction\n ) =>\n new StateService(\n storageService,\n secureStorageService,\n logService,\n stateMigrationService,\n new StateFactory(GlobalState, Account),\n false\n ),\n deps: [\n StorageServiceAbstraction,\n \"SECURE_STORAGE\",\n LogService,\n StateMigrationServiceAbstraction,\n ],\n },\n {\n provide: BaseStateServiceAbstraction,\n useExisting: StateServiceAbstraction,\n },\n {\n provide: PasswordRepromptServiceAbstraction,\n useClass: PasswordRepromptService,\n },\n ],\n})\nexport class ServicesModule {}\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\nimport { ApiKeyComponent } from \"./api-key.component\";\nimport { DeauthorizeSessionsComponent } from \"./deauthorize-sessions.component\";\nimport { DeleteAccountComponent } from \"./delete-account.component\";\nimport { PurgeVaultComponent } from \"./purge-vault.component\";\n\n@Component({\n selector: \"app-account\",\n templateUrl: \"account.component.html\",\n})\nexport class AccountComponent {\n @ViewChild(\"deauthorizeSessionsTemplate\", { read: ViewContainerRef, static: true })\n deauthModalRef: ViewContainerRef;\n @ViewChild(\"purgeVaultTemplate\", { read: ViewContainerRef, static: true })\n purgeModalRef: ViewContainerRef;\n @ViewChild(\"deleteAccountTemplate\", { read: ViewContainerRef, static: true })\n deleteModalRef: ViewContainerRef;\n @ViewChild(\"viewUserApiKeyTemplate\", { read: ViewContainerRef, static: true })\n viewUserApiKeyModalRef: ViewContainerRef;\n @ViewChild(\"rotateUserApiKeyTemplate\", { read: ViewContainerRef, static: true })\n rotateUserApiKeyModalRef: ViewContainerRef;\n\n showChangePassword = true;\n showChangeKdf = true;\n showChangeEmail = true;\n\n constructor(\n private modalService: ModalService,\n private apiService: ApiService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.showChangeEmail =\n this.showChangeKdf =\n this.showChangePassword =\n !(await this.keyConnectorService.getUsesKeyConnector());\n }\n\n async deauthorizeSessions() {\n await this.modalService.openViewRef(DeauthorizeSessionsComponent, this.deauthModalRef);\n }\n\n async purgeVault() {\n await this.modalService.openViewRef(PurgeVaultComponent, this.purgeModalRef);\n }\n\n async deleteAccount() {\n await this.modalService.openViewRef(DeleteAccountComponent, this.deleteModalRef);\n }\n\n async viewUserApiKey() {\n const entityId = await this.stateService.getUserId();\n await this.modalService.openViewRef(ApiKeyComponent, this.viewUserApiKeyModalRef, (comp) => {\n comp.keyType = \"user\";\n comp.entityId = entityId;\n comp.postKey = this.apiService.postUserApiKey.bind(this.apiService);\n comp.scope = \"api\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"userApiKeyWarning\";\n comp.apiKeyDescription = \"userApiKeyDesc\";\n });\n }\n\n async rotateUserApiKey() {\n const entityId = await this.stateService.getUserId();\n await this.modalService.openViewRef(ApiKeyComponent, this.rotateUserApiKeyModalRef, (comp) => {\n comp.keyType = \"user\";\n comp.isRotation = true;\n comp.entityId = entityId;\n comp.postKey = this.apiService.postUserRotateApiKey.bind(this.apiService);\n comp.scope = \"api\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"userApiKeyWarning\";\n comp.apiKeyDescription = \"apiKeyRotateDesc\";\n });\n }\n}\n","
\n

{{ \"myAccount\" | i18n }}

\n
\n\n\n
\n

{{ \"changeEmail\" | i18n }}

\n
\n \n
\n\n
\n

{{ \"changeMasterPassword\" | i18n }}

\n
\n \n
\n\n
\n

{{ \"encKeySettings\" | i18n }}

\n
\n \n
\n
\n

{{ \"apiKey\" | i18n }}

\n
\n

\n {{ \"userApiKeyDesc\" | i18n }}\n

\n\n\n
\n

{{ \"dangerZone\" | i18n }}

\n
\n
\n
\n

{{ \"dangerZoneDesc\" | i18n }}

\n \n \n \n
\n
\n\n\n\n\n\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { PayPalConfig } from \"jslib-common/abstractions/environment.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { PaymentMethodType } from \"jslib-common/enums/paymentMethodType\";\nimport { BitPayInvoiceRequest } from \"jslib-common/models/request/bitPayInvoiceRequest\";\n\n@Component({\n selector: \"app-add-credit\",\n templateUrl: \"add-credit.component.html\",\n})\nexport class AddCreditComponent implements OnInit {\n @Input() creditAmount: string;\n @Input() showOptions = true;\n @Input() method = PaymentMethodType.PayPal;\n @Input() organizationId: string;\n @Output() onAdded = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n @ViewChild(\"ppButtonForm\", { read: ElementRef, static: true }) ppButtonFormRef: ElementRef;\n\n paymentMethodType = PaymentMethodType;\n ppButtonFormAction: string;\n ppButtonBusinessId: string;\n ppButtonCustomField: string;\n ppLoading = false;\n subject: string;\n returnUrl: string;\n formPromise: Promise;\n\n private userId: string;\n private name: string;\n private email: string;\n\n constructor(\n private stateService: StateService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private organizationService: OrganizationService,\n private logService: LogService\n ) {\n const payPalConfig = process.env.PAYPAL_CONFIG as PayPalConfig;\n this.ppButtonFormAction = payPalConfig.buttonAction;\n this.ppButtonBusinessId = payPalConfig.businessId;\n }\n\n async ngOnInit() {\n if (this.organizationId != null) {\n if (this.creditAmount == null) {\n this.creditAmount = \"20.00\";\n }\n this.ppButtonCustomField = \"organization_id:\" + this.organizationId;\n const org = await this.organizationService.get(this.organizationId);\n if (org != null) {\n this.subject = org.name;\n this.name = org.name;\n }\n } else {\n if (this.creditAmount == null) {\n this.creditAmount = \"10.00\";\n }\n this.userId = await this.stateService.getUserId();\n this.subject = await this.stateService.getEmail();\n this.email = this.subject;\n this.ppButtonCustomField = \"user_id:\" + this.userId;\n }\n this.ppButtonCustomField += \",account_credit:1\";\n this.returnUrl = window.location.href;\n }\n\n async submit() {\n if (this.creditAmount == null || this.creditAmount === \"\") {\n return;\n }\n\n if (this.method === PaymentMethodType.PayPal) {\n this.ppButtonFormRef.nativeElement.submit();\n this.ppLoading = true;\n return;\n }\n if (this.method === PaymentMethodType.BitPay) {\n try {\n const req = new BitPayInvoiceRequest();\n req.email = this.email;\n req.name = this.name;\n req.credit = true;\n req.amount = this.creditAmountNumber;\n req.organizationId = this.organizationId;\n req.userId = this.userId;\n req.returnUrl = this.returnUrl;\n this.formPromise = this.apiService.postBitPayInvoice(req);\n const bitPayUrl: string = await this.formPromise;\n this.platformUtilsService.launchUri(bitPayUrl);\n } catch (e) {\n this.logService.error(e);\n }\n return;\n }\n try {\n this.onAdded.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n formatAmount() {\n try {\n if (this.creditAmount != null && this.creditAmount !== \"\") {\n const floatAmount = Math.abs(parseFloat(this.creditAmount));\n if (floatAmount > 0) {\n this.creditAmount = parseFloat((Math.round(floatAmount * 100) / 100).toString())\n .toFixed(2)\n .toString();\n return;\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.creditAmount = \"\";\n }\n\n get creditAmountNumber(): number {\n if (this.creditAmount != null && this.creditAmount !== \"\") {\n try {\n return parseFloat(this.creditAmount);\n } catch (e) {\n this.logService.error(e);\n }\n }\n return null;\n }\n}\n","
\n
\n \n

{{ \"addCredit\" | i18n }}

\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
$USD
\n \n
\n
\n
\n {{ \"creditDelayed\" | i18n }}\n
\n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n","import { Component, EventEmitter, Input, Output, ViewChild } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PaymentMethodType } from \"jslib-common/enums/paymentMethodType\";\nimport { PaymentRequest } from \"jslib-common/models/request/paymentRequest\";\n\nimport { PaymentComponent } from \"./payment.component\";\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\n selector: \"app-adjust-payment\",\n templateUrl: \"adjust-payment.component.html\",\n})\nexport class AdjustPaymentComponent {\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent, { static: true }) taxInfoComponent: TaxInfoComponent;\n\n @Input() currentType?: PaymentMethodType;\n @Input() organizationId: string;\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n paymentMethodType = PaymentMethodType;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const request = new PaymentRequest();\n this.formPromise = this.paymentComponent.createPaymentToken().then((result) => {\n request.paymentToken = result[0];\n request.paymentMethodType = result[1];\n request.postalCode = this.taxInfoComponent.taxInfo.postalCode;\n request.country = this.taxInfoComponent.taxInfo.country;\n if (this.organizationId == null) {\n return this.apiService.postAccountPayment(request);\n } else {\n request.taxId = this.taxInfoComponent.taxInfo.taxId;\n request.state = this.taxInfoComponent.taxInfo.state;\n request.line1 = this.taxInfoComponent.taxInfo.line1;\n request.line2 = this.taxInfoComponent.taxInfo.line2;\n request.city = this.taxInfoComponent.taxInfo.city;\n request.state = this.taxInfoComponent.taxInfo.state;\n return this.apiService.postOrganizationPayment(this.organizationId, request);\n }\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"updatedPaymentMethod\")\n );\n this.onAdjusted.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n changeCountry() {\n if (this.taxInfoComponent.taxInfo.country === \"US\") {\n this.paymentComponent.hideBank = !this.organizationId;\n } else {\n this.paymentComponent.hideBank = true;\n if (this.paymentComponent.method === PaymentMethodType.BankAccount) {\n this.paymentComponent.method = PaymentMethodType.Card;\n this.paymentComponent.changeMethod();\n }\n }\n }\n}\n","
\n
\n \n

\n {{ (currentType != null ? \"changePaymentMethod\" : \"addPaymentMethod\") | i18n }}\n

\n \n \n \n \n
\n
\n","import { Component, EventEmitter, Input, Output, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StorageRequest } from \"jslib-common/models/request/storageRequest\";\nimport { PaymentResponse } from \"jslib-common/models/response/paymentResponse\";\n\nimport { PaymentComponent } from \"./payment.component\";\n\n@Component({\n selector: \"app-adjust-storage\",\n templateUrl: \"adjust-storage.component.html\",\n})\nexport class AdjustStorageComponent {\n @Input() storageGbPrice = 0;\n @Input() add = true;\n @Input() organizationId: string;\n @Input() interval = \"year\";\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n\n storageAdjustment = 0;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const request = new StorageRequest();\n request.storageGbAdjustment = this.storageAdjustment;\n if (!this.add) {\n request.storageGbAdjustment *= -1;\n }\n\n let paymentFailed = false;\n const action = async () => {\n let response: Promise;\n if (this.organizationId == null) {\n response = this.formPromise = this.apiService.postAccountStorage(request);\n } else {\n response = this.formPromise = this.apiService.postOrganizationStorage(\n this.organizationId,\n request\n );\n }\n const result = await response;\n if (result != null && result.paymentIntentClientSecret != null) {\n try {\n await this.paymentComponent.handleStripeCardPayment(\n result.paymentIntentClientSecret,\n null\n );\n } catch {\n paymentFailed = true;\n }\n }\n };\n this.formPromise = action();\n await this.formPromise;\n this.onAdjusted.emit(this.storageAdjustment);\n if (paymentFailed) {\n this.platformUtilsService.showToast(\n \"warning\",\n null,\n this.i18nService.t(\"couldNotChargeCardPayInvoice\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"../billing\"], { relativeTo: this.activatedRoute });\n } else {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"adjustedStorage\", request.storageGbAdjustment.toString())\n );\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n get adjustedStorageTotal(): number {\n return this.storageGbPrice * this.storageAdjustment;\n }\n}\n","
\n
\n \n

{{ (add ? \"addStorage\" : \"removeStorage\") | i18n }}

\n
\n
\n \n \n
\n
\n
\n {{ \"total\" | i18n }}: {{ storageAdjustment || 0 }} GB ×\n {{ storageGbPrice | currency: \"$\" }} = {{ adjustedStorageTotal | currency: \"$\" }} /{{\n interval | i18n\n }}\n
\n \n \n \n {{ (add ? \"storageAddNote\" : \"storageRemoveNote\") | i18n }}\n \n
\n
\n\n","import { Component } from \"@angular/core\";\n\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { SecretVerificationRequest } from \"jslib-common/models/request/secretVerificationRequest\";\nimport { ApiKeyResponse } from \"jslib-common/models/response/apiKeyResponse\";\nimport { Verification } from \"jslib-common/types/verification\";\n\n@Component({\n selector: \"app-api-key\",\n templateUrl: \"api-key.component.html\",\n})\nexport class ApiKeyComponent {\n keyType: string;\n isRotation: boolean;\n postKey: (entityId: string, request: SecretVerificationRequest) => Promise;\n entityId: string;\n scope: string;\n grantType: string;\n apiKeyTitle: string;\n apiKeyWarning: string;\n apiKeyDescription: string;\n\n masterPassword: Verification;\n formPromise: Promise;\n clientId: string;\n clientSecret: string;\n\n constructor(\n private userVerificationService: UserVerificationService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword)\n .then((request) => this.postKey(this.entityId, request));\n const response = await this.formPromise;\n this.clientSecret = response.apiKey;\n this.clientId = `${this.keyType}.${this.entityId}`;\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ apiKeyTitle | i18n }}

\n \n ×\n \n
\n
\n

{{ apiKeyDescription | i18n }}

\n \n \n\n {{ apiKeyWarning | i18n }}\n \n

\n client_id:
\n {{ clientId }}\n

\n

\n client_secret:
\n {{ clientSecret }}\n

\n

\n scope:
\n {{ scope }}\n

\n

\n grant_type:
\n {{ grantType }}\n

\n \n
\n
\n \n \n {{ (isRotation ? \"rotateApiKey\" : \"viewApiKey\") | i18n }}\n \n \n
\n \n
\n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { EmailRequest } from \"jslib-common/models/request/emailRequest\";\nimport { EmailTokenRequest } from \"jslib-common/models/request/emailTokenRequest\";\n\n@Component({\n selector: \"app-change-email\",\n templateUrl: \"change-email.component.html\",\n})\nexport class ChangeEmailComponent implements OnInit {\n masterPassword: string;\n newEmail: string;\n token: string;\n tokenSent = false;\n showTwoFactorEmailWarning = false;\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n const twoFactorProviders = await this.apiService.getTwoFactorProviders();\n this.showTwoFactorEmailWarning = twoFactorProviders.data.some(\n (p) => p.type === TwoFactorProviderType.Email && p.enabled\n );\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"updateKey\"));\n return;\n }\n\n this.newEmail = this.newEmail.trim().toLowerCase();\n if (!this.tokenSent) {\n const request = new EmailTokenRequest();\n request.newEmail = this.newEmail;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.postEmailToken(request);\n await this.formPromise;\n this.tokenSent = true;\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n const request = new EmailRequest();\n request.token = this.token;\n request.newEmail = this.newEmail;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n const kdf = await this.stateService.getKdfType();\n const kdfIterations = await this.stateService.getKdfIterations();\n const newKey = await this.cryptoService.makeKey(\n this.masterPassword,\n this.newEmail,\n kdf,\n kdfIterations\n );\n request.newMasterPasswordHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n newKey\n );\n const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n request.key = newEncKey[1].encryptedString;\n try {\n this.formPromise = this.apiService.postEmail(request);\n await this.formPromise;\n this.reset();\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"emailChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n }\n\n reset() {\n this.token = this.newEmail = this.masterPassword = null;\n this.tokenSent = false;\n }\n}\n","
\n \n {{ \"changeEmailTwoFactorWarning\" | i18n }}\n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n

{{ \"changeEmailDesc\" | i18n: newEmail }}

\n {{ \"loggedOutWarning\" | i18n }}\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { DEFAULT_KDF_ITERATIONS, KdfType } from \"jslib-common/enums/kdfType\";\nimport { KdfRequest } from \"jslib-common/models/request/kdfRequest\";\n\n@Component({\n selector: \"app-change-kdf\",\n templateUrl: \"change-kdf.component.html\",\n})\nexport class ChangeKdfComponent implements OnInit {\n masterPassword: string;\n kdfIterations: number;\n kdf = KdfType.PBKDF2_SHA256;\n kdfOptions: any[] = [];\n formPromise: Promise;\n recommendedKdfIterations = DEFAULT_KDF_ITERATIONS;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private logService: LogService,\n private stateService: StateService\n ) {\n this.kdfOptions = [{ name: \"PBKDF2 SHA-256\", value: KdfType.PBKDF2_SHA256 }];\n }\n\n async ngOnInit() {\n this.kdf = await this.stateService.getKdfType();\n this.kdfIterations = await this.stateService.getKdfIterations();\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"updateKey\"));\n return;\n }\n\n const request = new KdfRequest();\n request.kdf = this.kdf;\n request.kdfIterations = this.kdfIterations;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n const email = await this.stateService.getEmail();\n const newKey = await this.cryptoService.makeKey(\n this.masterPassword,\n email,\n this.kdf,\n this.kdfIterations\n );\n request.newMasterPasswordHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n newKey\n );\n const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n request.key = newEncKey[1].encryptedString;\n try {\n this.formPromise = this.apiService.postAccountKdf(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"encKeySettingsChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","{{ \"loggedOutWarning\" | i18n }}\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
\n

{{ \"kdfIterationsDesc\" | i18n: (recommendedKdfIterations | number) }}

\n {{ \"warning\" | i18n }}: {{ \"kdfIterationsWarning\" | i18n: (50000 | number) }}\n
\n
\n
\n
\n \n\n","import { Component } from \"@angular/core\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"jslib-angular/components/change-password.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SendService } from \"jslib-common/abstractions/send.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { EmergencyAccessStatusType } from \"jslib-common/enums/emergencyAccessStatusType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { CipherWithIdRequest } from \"jslib-common/models/request/cipherWithIdRequest\";\nimport { EmergencyAccessUpdateRequest } from \"jslib-common/models/request/emergencyAccessUpdateRequest\";\nimport { FolderWithIdRequest } from \"jslib-common/models/request/folderWithIdRequest\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest\";\nimport { PasswordRequest } from \"jslib-common/models/request/passwordRequest\";\nimport { SendWithIdRequest } from \"jslib-common/models/request/sendWithIdRequest\";\nimport { UpdateKeyRequest } from \"jslib-common/models/request/updateKeyRequest\";\n\n@Component({\n selector: \"app-change-password\",\n templateUrl: \"change-password.component.html\",\n})\nexport class ChangePasswordComponent extends BaseChangePasswordComponent {\n rotateEncKey = false;\n currentMasterPassword: string;\n\n constructor(\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n private folderService: FolderService,\n private cipherService: CipherService,\n private syncService: SyncService,\n private apiService: ApiService,\n private sendService: SendService,\n private organizationService: OrganizationService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async rotateEncKeyClicked() {\n if (this.rotateEncKey) {\n const ciphers = await this.cipherService.getAllDecrypted();\n let hasOldAttachments = false;\n if (ciphers != null) {\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId == null && ciphers[i].hasOldAttachments) {\n hasOldAttachments = true;\n break;\n }\n }\n }\n\n if (hasOldAttachments) {\n const learnMore = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"oldAttachmentsNeedFixDesc\"),\n null,\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"close\"),\n \"warning\"\n );\n if (learnMore) {\n this.platformUtilsService.launchUri(\n \"https://bitwarden.com/help/attachments/#add-storage-space\"\n );\n }\n this.rotateEncKey = false;\n return;\n }\n\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"updateEncryptionKeyWarning\") +\n \" \" +\n this.i18nService.t(\"updateEncryptionKeyExportWarning\") +\n \" \" +\n this.i18nService.t(\"rotateEncKeyConfirmation\"),\n this.i18nService.t(\"rotateEncKeyTitle\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n this.rotateEncKey = false;\n }\n }\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"updateKey\"));\n return;\n }\n\n await super.submit();\n }\n\n async setupSubmitActions() {\n if (this.currentMasterPassword == null || this.currentMasterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return false;\n }\n\n if (this.rotateEncKey) {\n await this.syncService.fullSync(true);\n }\n\n return super.setupSubmitActions();\n }\n\n async performSubmitActions(\n newMasterPasswordHash: string,\n newKey: SymmetricCryptoKey,\n newEncKey: [SymmetricCryptoKey, EncString]\n ) {\n const request = new PasswordRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(\n this.currentMasterPassword,\n null\n );\n request.newMasterPasswordHash = newMasterPasswordHash;\n request.key = newEncKey[1].encryptedString;\n\n try {\n if (this.rotateEncKey) {\n this.formPromise = this.apiService.postPassword(request).then(() => {\n return this.updateKey(newKey, request.newMasterPasswordHash);\n });\n } else {\n this.formPromise = this.apiService.postPassword(request);\n }\n\n await this.formPromise;\n\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"masterPasswordChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n }\n\n private async updateKey(key: SymmetricCryptoKey, masterPasswordHash: string) {\n const encKey = await this.cryptoService.makeEncKey(key);\n const privateKey = await this.cryptoService.getPrivateKey();\n let encPrivateKey: EncString = null;\n if (privateKey != null) {\n encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n }\n const request = new UpdateKeyRequest();\n request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHash = masterPasswordHash;\n\n const folders = await this.folderService.getAllDecrypted();\n for (let i = 0; i < folders.length; i++) {\n if (folders[i].id == null) {\n continue;\n }\n const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n request.folders.push(new FolderWithIdRequest(folder));\n }\n\n const ciphers = await this.cipherService.getAllDecrypted();\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId != null) {\n continue;\n }\n\n const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n request.ciphers.push(new CipherWithIdRequest(cipher));\n }\n\n const sends = await this.sendService.getAll();\n await Promise.all(\n sends.map(async (send) => {\n const cryptoKey = await this.cryptoService.decryptToBytes(send.key, null);\n send.key = (await this.cryptoService.encrypt(cryptoKey, encKey[0])) ?? send.key;\n request.sends.push(new SendWithIdRequest(send));\n })\n );\n\n await this.apiService.postAccountKey(request);\n\n await this.updateEmergencyAccesses(encKey[0]);\n\n await this.updateAllResetPasswordKeys(encKey[0]);\n }\n\n private async updateEmergencyAccesses(encKey: SymmetricCryptoKey) {\n const emergencyAccess = await this.apiService.getEmergencyAccessTrusted();\n const allowedStatuses = [\n EmergencyAccessStatusType.Confirmed,\n EmergencyAccessStatusType.RecoveryInitiated,\n EmergencyAccessStatusType.RecoveryApproved,\n ];\n\n const filteredAccesses = emergencyAccess.data.filter((d) => allowedStatuses.includes(d.status));\n\n for (const details of filteredAccesses) {\n const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n const updateRequest = new EmergencyAccessUpdateRequest();\n updateRequest.type = details.type;\n updateRequest.waitTimeDays = details.waitTimeDays;\n updateRequest.keyEncrypted = encryptedKey.encryptedString;\n\n await this.apiService.putEmergencyAccess(details.id, updateRequest);\n }\n }\n\n private async updateAllResetPasswordKeys(encKey: SymmetricCryptoKey) {\n const orgs = await this.organizationService.getAll();\n\n for (const org of orgs) {\n // If not already enrolled, skip\n if (!org.resetPasswordEnrolled) {\n continue;\n }\n\n // Retrieve public key\n const response = await this.apiService.getOrganizationKeys(org.id);\n const publicKey = Utils.fromB64ToArray(response?.publicKey);\n\n // Re-enroll - encrpyt user's encKey.key with organization public key\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n // Create/Execute request\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.resetPasswordKey = encryptedKey.encryptedString;\n\n await this.apiService.putOrganizationUserResetPasswordEnrollment(org.id, org.userId, request);\n }\n }\n}\n","{{ \"loggedOutWarning\" | i18n }}\n\n\n\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n \n \n \n
\n
\n \n
\n","import { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { PlanType } from \"jslib-common/enums/planType\";\nimport { ProductType } from \"jslib-common/enums/productType\";\n\nimport { OrganizationPlansComponent } from \"./organization-plans.component\";\n\n@Component({\n selector: \"app-create-organization\",\n templateUrl: \"create-organization.component.html\",\n})\nexport class CreateOrganizationComponent implements OnInit {\n @ViewChild(OrganizationPlansComponent, { static: true })\n orgPlansComponent: OrganizationPlansComponent;\n\n constructor(private route: ActivatedRoute) {}\n\n ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.plan === \"families\") {\n this.orgPlansComponent.plan = PlanType.FamiliesAnnually;\n this.orgPlansComponent.product = ProductType.Families;\n } else if (qParams.plan === \"teams\") {\n this.orgPlansComponent.plan = PlanType.TeamsAnnually;\n this.orgPlansComponent.product = ProductType.Teams;\n } else if (qParams.plan === \"enterprise\") {\n this.orgPlansComponent.plan = PlanType.EnterpriseAnnually;\n this.orgPlansComponent.product = ProductType.Enterprise;\n }\n });\n }\n}\n","
\n

{{ \"newOrganization\" | i18n }}

\n
\n

{{ \"newOrganizationDesc\" | i18n }}

\n\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { Verification } from \"jslib-common/types/verification\";\n\n@Component({\n selector: \"app-deauthorize-sessions\",\n templateUrl: \"deauthorize-sessions.component.html\",\n})\nexport class DeauthorizeSessionsComponent {\n masterPassword: Verification;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private userVerificationService: UserVerificationService,\n private messagingService: MessagingService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword)\n .then((request) => this.apiService.postSecurityStamp(request));\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"sessionsDeauthorized\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ \"deauthorizeSessions\" | i18n }}

\n \n ×\n \n
\n
\n

{{ \"deauthorizeSessionsDesc\" | i18n }}

\n {{ \"deauthorizeSessionsWarning\" | i18n }}\n \n \n
\n
\n \n \n
\n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { Verification } from \"jslib-common/types/verification\";\n\n@Component({\n selector: \"app-delete-account\",\n templateUrl: \"delete-account.component.html\",\n})\nexport class DeleteAccountComponent {\n masterPassword: Verification;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private userVerificationService: UserVerificationService,\n private messagingService: MessagingService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword)\n .then((request) => this.apiService.deleteAccount(request));\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"accountDeleted\"),\n this.i18nService.t(\"accountDeletedDesc\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ \"deleteAccount\" | i18n }}

\n \n ×\n \n
\n
\n

{{ \"deleteAccountDesc\" | i18n }}

\n {{ \"deleteAccountWarning\" | i18n }}\n \n \n
\n
\n \n \n
\n \n
\n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UpdateDomainsRequest } from \"jslib-common/models/request/updateDomainsRequest\";\n\n@Component({\n selector: \"app-domain-rules\",\n templateUrl: \"domain-rules.component.html\",\n})\nexport class DomainRulesComponent implements OnInit {\n loading = true;\n custom: string[] = [];\n global: any[] = [];\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n const response = await this.apiService.getSettingsDomains();\n this.loading = false;\n if (response.equivalentDomains != null) {\n this.custom = response.equivalentDomains.map((d) => d.join(\", \"));\n }\n if (response.globalEquivalentDomains != null) {\n this.global = response.globalEquivalentDomains.map((d) => {\n return {\n domains: d.domains.join(\", \"),\n excluded: d.excluded,\n key: d.type,\n };\n });\n }\n }\n\n toggleExcluded(globalDomain: any) {\n globalDomain.excluded = !globalDomain.excluded;\n }\n\n customize(globalDomain: any) {\n globalDomain.excluded = true;\n this.custom.push(globalDomain.domains);\n }\n\n remove(index: number) {\n this.custom.splice(index, 1);\n }\n\n add() {\n this.custom.push(\"\");\n }\n\n async submit() {\n const request = new UpdateDomainsRequest();\n request.excludedGlobalEquivalentDomains = this.global\n .filter((d) => d.excluded)\n .map((d) => d.key);\n if (request.excludedGlobalEquivalentDomains.length === 0) {\n request.excludedGlobalEquivalentDomains = null;\n }\n request.equivalentDomains = this.custom\n .filter((d) => d != null && d.trim() !== \"\")\n .map((d) => d.split(\",\").map((d2) => d2.trim()));\n if (request.equivalentDomains.length === 0) {\n request.equivalentDomains = null;\n }\n\n try {\n this.formPromise = this.apiService.putSettingsDomains(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"domainsUpdated\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n indexTrackBy(index: number, obj: any): any {\n return index;\n }\n}\n","
\n

{{ \"domainRules\" | i18n }}

\n
\n

{{ \"domainRulesDesc\" | i18n }}

\n
\n

{{ \"customEqDomains\" | i18n }}

\n

\n \n {{ \"loading\" | i18n }}\n

\n \n
\n
\n \n \n
\n \n \n \n
\n \n {{ \"newCustomDomainDesc\" | i18n }}\n
\n \n

{{ \"globalEqDomains\" | i18n }}

\n

\n \n {{ \"loading\" | i18n }}\n

\n 0\">\n \n \n \n \n \n \n
{{ d.domains }}\n
\n \n \n \n
\n \n \n {{ \"exclude\" | i18n }}\n \n \n \n {{ \"include\" | i18n }}\n \n \n \n {{ \"customize\" | i18n }}\n \n
\n
\n
\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { EmergencyAccessType } from \"jslib-common/enums/emergencyAccessType\";\nimport { EmergencyAccessInviteRequest } from \"jslib-common/models/request/emergencyAccessInviteRequest\";\nimport { EmergencyAccessUpdateRequest } from \"jslib-common/models/request/emergencyAccessUpdateRequest\";\n\n@Component({\n selector: \"emergency-access-add-edit\",\n templateUrl: \"emergency-access-add-edit.component.html\",\n})\nexport class EmergencyAccessAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() emergencyAccessId: string;\n @Output() onSaved = new EventEmitter();\n @Output() onDeleted = new EventEmitter();\n\n loading = true;\n readOnly = false;\n editMode = false;\n title: string;\n email: string;\n type: EmergencyAccessType = EmergencyAccessType.View;\n\n formPromise: Promise;\n\n emergencyAccessType = EmergencyAccessType;\n waitTimes: { name: string; value: number }[];\n waitTime: number;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.editMode = this.loading = this.emergencyAccessId != null;\n\n this.waitTimes = [\n { name: this.i18nService.t(\"oneDay\"), value: 1 },\n { name: this.i18nService.t(\"days\", \"2\"), value: 2 },\n { name: this.i18nService.t(\"days\", \"7\"), value: 7 },\n { name: this.i18nService.t(\"days\", \"14\"), value: 14 },\n { name: this.i18nService.t(\"days\", \"30\"), value: 30 },\n { name: this.i18nService.t(\"days\", \"90\"), value: 90 },\n ];\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editEmergencyContact\");\n try {\n const emergencyAccess = await this.apiService.getEmergencyAccess(this.emergencyAccessId);\n this.type = emergencyAccess.type;\n this.waitTime = emergencyAccess.waitTimeDays;\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"inviteEmergencyContact\");\n this.waitTime = this.waitTimes[2].value;\n }\n\n this.loading = false;\n }\n\n async submit() {\n try {\n if (this.editMode) {\n const request = new EmergencyAccessUpdateRequest();\n request.type = this.type;\n request.waitTimeDays = this.waitTime;\n\n this.formPromise = this.apiService.putEmergencyAccess(this.emergencyAccessId, request);\n } else {\n const request = new EmergencyAccessInviteRequest();\n request.email = this.email.trim();\n request.type = this.type;\n request.waitTimeDays = this.waitTime;\n\n this.formPromise = this.apiService.postEmergencyAccessInvite(request);\n }\n\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedUserId\" : \"invitedUsers\", this.name)\n );\n this.onSaved.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n this.onDeleted.emit();\n }\n}\n","
\n
\n \n
\n

\n \n {{ title }}\n {{ name }}\n

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n

{{ \"inviteEmergencyContactDesc\" | i18n }}

\n
\n \n \n
\n
\n

\n {{ \"userAccess\" | i18n }}\n \n \n \n

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n \n \n {{ \"waitTimeDesc\" | i18n }}\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"jslib-angular/components/attachments.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { AttachmentView } from \"jslib-common/models/view/attachmentView\";\n\n@Component({\n selector: \"emergency-access-attachments\",\n templateUrl: \"../vault/attachments.component.html\",\n})\nexport class EmergencyAccessAttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = true;\n canAccessAttachments = true;\n\n constructor(\n cipherService: CipherService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n logService: LogService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n platformUtilsService,\n apiService,\n window,\n logService,\n stateService\n );\n }\n\n protected async init() {\n // Do nothing since cipher is already decoded\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return false;\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Component({\n selector: \"emergency-access-confirm\",\n templateUrl: \"emergency-access-confirm.component.html\",\n})\nexport class EmergencyAccessConfirmComponent implements OnInit {\n @Input() name: string;\n @Input() userId: string;\n @Input() emergencyAccessId: string;\n @Input() formPromise: Promise;\n @Output() onConfirmed = new EventEmitter();\n\n dontAskAgain = false;\n loading = true;\n fingerprint: string;\n\n constructor(\n private apiService: ApiService,\n private cryptoService: CryptoService,\n private stateService: StateService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n try {\n const publicKeyResponse = await this.apiService.getUserPublicKey(this.userId);\n if (publicKeyResponse != null) {\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n const fingerprint = await this.cryptoService.getFingerprint(this.userId, publicKey.buffer);\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join(\"-\");\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.loading = false;\n }\n\n async submit() {\n if (this.loading) {\n return;\n }\n\n if (this.dontAskAgain) {\n await this.stateService.setAutoConfirmFingerprints(true);\n }\n\n try {\n this.onConfirmed.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ChangePasswordComponent } from \"jslib-angular/components/change-password.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { KdfType } from \"jslib-common/enums/kdfType\";\nimport { PolicyData } from \"jslib-common/models/data/policyData\";\nimport { Policy } from \"jslib-common/models/domain/policy\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { EmergencyAccessPasswordRequest } from \"jslib-common/models/request/emergencyAccessPasswordRequest\";\nimport { PolicyResponse } from \"jslib-common/models/response/policyResponse\";\n\n@Component({\n selector: \"emergency-access-takeover\",\n templateUrl: \"emergency-access-takeover.component.html\",\n})\nexport class EmergencyAccessTakeoverComponent extends ChangePasswordComponent implements OnInit {\n @Output() onDone = new EventEmitter();\n @Input() emergencyAccessId: string;\n @Input() name: string;\n @Input() email: string;\n @Input() kdf: KdfType;\n @Input() kdfIterations: number;\n\n formPromise: Promise;\n\n constructor(\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n private apiService: ApiService,\n private logService: LogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n const response = await this.apiService.getEmergencyGrantorPolicies(this.emergencyAccessId);\n if (response.data != null && response.data.length > 0) {\n const policies = response.data.map(\n (policyResponse: PolicyResponse) => new Policy(new PolicyData(policyResponse))\n );\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(\n policies\n );\n }\n }\n\n async submit() {\n if (!(await this.strongPassword())) {\n return;\n }\n\n const takeoverResponse = await this.apiService.postEmergencyAccessTakeover(\n this.emergencyAccessId\n );\n\n const oldKeyBuffer = await this.cryptoService.rsaDecrypt(takeoverResponse.keyEncrypted);\n const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n if (oldEncKey == null) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"unexpectedError\")\n );\n return;\n }\n\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email,\n takeoverResponse.kdf,\n takeoverResponse.kdfIterations\n );\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n const encKey = await this.cryptoService.remakeEncKey(key, oldEncKey);\n\n const request = new EmergencyAccessPasswordRequest();\n request.newMasterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n\n this.apiService.postEmergencyAccessPassword(this.emergencyAccessId, request);\n\n try {\n this.onDone.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

\n {{ \"takeover\" | i18n }}\n {{ name }}\n

\n \n ×\n \n
\n
\n {{ \"loggedOutWarning\" | i18n }}\n \n \n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n \n
\n
\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { CipherData } from \"jslib-common/models/data/cipherData\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { EmergencyAccessViewResponse } from \"jslib-common/models/response/emergencyAccessResponse\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { EmergencyAccessAttachmentsComponent } from \"./emergency-access-attachments.component\";\nimport { EmergencyAddEditComponent } from \"./emergency-add-edit.component\";\n\n@Component({\n selector: \"emergency-access-view\",\n templateUrl: \"emergency-access-view.component.html\",\n})\nexport class EmergencyAccessViewComponent implements OnInit {\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n @ViewChild(\"attachments\", { read: ViewContainerRef, static: true })\n attachmentsModalRef: ViewContainerRef;\n\n id: string;\n ciphers: CipherView[] = [];\n loaded = false;\n\n constructor(\n private cipherService: CipherService,\n private cryptoService: CryptoService,\n private modalService: ModalService,\n private router: Router,\n private route: ActivatedRoute,\n private apiService: ApiService\n ) {}\n\n ngOnInit() {\n this.route.params.subscribe((qParams) => {\n if (qParams.id == null) {\n return this.router.navigate([\"settings/emergency-access\"]);\n }\n\n this.id = qParams.id;\n\n this.load();\n });\n }\n\n async selectCipher(cipher: CipherView) {\n // eslint-disable-next-line\n const [_, childComponent] = await this.modalService.openViewRef(\n EmergencyAddEditComponent,\n this.cipherAddEditModalRef,\n (comp) => {\n comp.cipherId = cipher == null ? null : cipher.id;\n comp.cipher = cipher;\n }\n );\n\n return childComponent;\n }\n\n async load() {\n const response = await this.apiService.postEmergencyAccessView(this.id);\n this.ciphers = await this.getAllCiphers(response);\n this.loaded = true;\n }\n\n async viewAttachments(cipher: CipherView) {\n await this.modalService.openViewRef(\n EmergencyAccessAttachmentsComponent,\n this.attachmentsModalRef,\n (comp) => {\n comp.cipher = cipher;\n comp.emergencyAccessId = this.id;\n }\n );\n }\n\n protected async getAllCiphers(response: EmergencyAccessViewResponse): Promise {\n const ciphers = response.ciphers;\n\n const decCiphers: CipherView[] = [];\n const oldKeyBuffer = await this.cryptoService.rsaDecrypt(response.keyEncrypted);\n const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n const promises: any[] = [];\n ciphers.forEach((cipherResponse) => {\n const cipherData = new CipherData(cipherResponse);\n const cipher = new Cipher(cipherData);\n promises.push(cipher.decrypt(oldEncKey).then((c) => decCiphers.push(c)));\n });\n\n await Promise.all(promises);\n decCiphers.sort(this.cipherService.getLocaleSortingFunction());\n\n return decCiphers;\n }\n}\n","
\n

{{ \"vault\" | i18n }}

\n
\n
\n \n \n \n \n \n \n \n \n \n
\n \n \n {{\n c.name\n }}\n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n
\n
\n \n \n {{ \"loading\" | i18n }}\n \n
\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { UserNamePipe } from \"jslib-angular/pipes/user-name.pipe\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { EmergencyAccessStatusType } from \"jslib-common/enums/emergencyAccessStatusType\";\nimport { EmergencyAccessType } from \"jslib-common/enums/emergencyAccessType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { EmergencyAccessConfirmRequest } from \"jslib-common/models/request/emergencyAccessConfirmRequest\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n} from \"jslib-common/models/response/emergencyAccessResponse\";\n\nimport { EmergencyAccessAddEditComponent } from \"./emergency-access-add-edit.component\";\nimport { EmergencyAccessConfirmComponent } from \"./emergency-access-confirm.component\";\nimport { EmergencyAccessTakeoverComponent } from \"./emergency-access-takeover.component\";\n\n@Component({\n selector: \"emergency-access\",\n templateUrl: \"emergency-access.component.html\",\n})\nexport class EmergencyAccessComponent implements OnInit {\n @ViewChild(\"addEdit\", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild(\"takeoverTemplate\", { read: ViewContainerRef, static: true })\n takeoverModalRef: ViewContainerRef;\n @ViewChild(\"confirmTemplate\", { read: ViewContainerRef, static: true })\n confirmModalRef: ViewContainerRef;\n\n canAccessPremium: boolean;\n trustedContacts: EmergencyAccessGranteeDetailsResponse[];\n grantedContacts: EmergencyAccessGrantorDetailsResponse[];\n emergencyAccessType = EmergencyAccessType;\n emergencyAccessStatusType = EmergencyAccessStatusType;\n actionPromise: Promise;\n isOrganizationOwner: boolean;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private modalService: ModalService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private userNamePipe: UserNamePipe,\n private logService: LogService,\n private stateService: StateService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n const orgs = await this.organizationService.getAll();\n this.isOrganizationOwner = orgs.some((o) => o.isOwner);\n this.load();\n }\n\n async load() {\n this.trustedContacts = (await this.apiService.getEmergencyAccessTrusted()).data;\n this.grantedContacts = (await this.apiService.getEmergencyAccessGranted()).data;\n }\n\n async premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n\n async edit(details: EmergencyAccessGranteeDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n EmergencyAccessAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(details);\n comp.emergencyAccessId = details?.id;\n comp.readOnly = !this.canAccessPremium;\n comp.onSaved.subscribe(() => {\n modal.close();\n this.load();\n });\n comp.onDeleted.subscribe(() => {\n modal.close();\n this.remove(details);\n });\n }\n );\n }\n\n invite() {\n this.edit(null);\n }\n\n async reinvite(contact: EmergencyAccessGranteeDetailsResponse) {\n if (this.actionPromise != null) {\n return;\n }\n this.actionPromise = this.apiService.postEmergencyAccessReinvite(contact.id);\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenReinvited\", contact.email)\n );\n this.actionPromise = null;\n }\n\n async confirm(contact: EmergencyAccessGranteeDetailsResponse) {\n function updateUser() {\n contact.status = EmergencyAccessStatusType.Confirmed;\n }\n\n if (this.actionPromise != null) {\n return;\n }\n\n const autoConfirm = await this.stateService.getAutoConfirmFingerPrints();\n if (autoConfirm == null || !autoConfirm) {\n const [modal] = await this.modalService.openViewRef(\n EmergencyAccessConfirmComponent,\n this.confirmModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(contact);\n comp.emergencyAccessId = contact.id;\n comp.userId = contact?.granteeId;\n comp.onConfirmed.subscribe(async () => {\n modal.close();\n\n comp.formPromise = this.doConfirmation(contact);\n await comp.formPromise;\n\n updateUser();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenConfirmed\", this.userNamePipe.transform(contact))\n );\n });\n }\n );\n return;\n }\n\n this.actionPromise = this.doConfirmation(contact);\n await this.actionPromise;\n updateUser();\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenConfirmed\", this.userNamePipe.transform(contact))\n );\n this.actionPromise = null;\n }\n\n async remove(\n details: EmergencyAccessGranteeDetailsResponse | EmergencyAccessGrantorDetailsResponse\n ) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removeUserConfirmation\"),\n this.userNamePipe.transform(details),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteEmergencyAccess(details.id);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedUserId\", this.userNamePipe.transform(details))\n );\n\n if (details instanceof EmergencyAccessGranteeDetailsResponse) {\n this.removeGrantee(details);\n } else {\n this.removeGrantor(details);\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async requestAccess(details: EmergencyAccessGrantorDetailsResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"requestAccessConfirmation\", details.waitTimeDays.toString()),\n this.userNamePipe.transform(details),\n this.i18nService.t(\"requestAccess\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n await this.apiService.postEmergencyAccessInitiate(details.id);\n\n details.status = EmergencyAccessStatusType.RecoveryInitiated;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"requestSent\", this.userNamePipe.transform(details))\n );\n }\n\n async approve(details: EmergencyAccessGranteeDetailsResponse) {\n const type = this.i18nService.t(\n details.type === EmergencyAccessType.View ? \"view\" : \"takeover\"\n );\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"approveAccessConfirmation\", this.userNamePipe.transform(details), type),\n this.userNamePipe.transform(details),\n this.i18nService.t(\"approve\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n await this.apiService.postEmergencyAccessApprove(details.id);\n details.status = EmergencyAccessStatusType.RecoveryApproved;\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"emergencyApproved\", this.userNamePipe.transform(details))\n );\n }\n\n async reject(details: EmergencyAccessGranteeDetailsResponse) {\n await this.apiService.postEmergencyAccessReject(details.id);\n details.status = EmergencyAccessStatusType.Confirmed;\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"emergencyRejected\", this.userNamePipe.transform(details))\n );\n }\n\n async takeover(details: EmergencyAccessGrantorDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n EmergencyAccessTakeoverComponent,\n this.takeoverModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(details);\n comp.email = details.email;\n comp.emergencyAccessId = details != null ? details.id : null;\n\n comp.onDone.subscribe(() => {\n modal.close();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"passwordResetFor\", this.userNamePipe.transform(details))\n );\n });\n }\n );\n }\n\n private removeGrantee(details: EmergencyAccessGranteeDetailsResponse) {\n const index = this.trustedContacts.indexOf(details);\n if (index > -1) {\n this.trustedContacts.splice(index, 1);\n }\n }\n\n private removeGrantor(details: EmergencyAccessGrantorDetailsResponse) {\n const index = this.grantedContacts.indexOf(details);\n if (index > -1) {\n this.grantedContacts.splice(index, 1);\n }\n }\n\n // Encrypt the master password hash using the grantees public key, and send it to bitwarden for escrow.\n private async doConfirmation(details: EmergencyAccessGranteeDetailsResponse) {\n const encKey = await this.cryptoService.getEncKey();\n const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n try {\n this.logService.debug(\n \"User's fingerprint: \" +\n (await this.cryptoService.getFingerprint(details.granteeId, publicKey.buffer)).join(\"-\")\n );\n } catch {\n // Ignore errors since it's just a debug message\n }\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n const request = new EmergencyAccessConfirmRequest();\n request.key = encryptedKey.encryptedString;\n await this.apiService.postEmergencyAccessConfirm(details.id, request);\n }\n}\n","
\n

{{ \"emergencyAccess\" | i18n }}

\n
\n

\n {{ \"emergencyAccessDesc\" | i18n }}\n \n {{ \"learnMore\" | i18n }}.\n \n

\n\n

\n {{ \"warning\" | i18n }}: {{ \"emergencyAccessOwnerWarning\" | i18n }}\n

\n\n
\n

\n {{ \"trustedEmergencyContacts\" | i18n }}\n \n

\n
\n \n \n {{ \"addEmergencyContact\" | i18n }}\n \n
\n
\n\n\n \n \n \n \n \n \n \n
\n \n \n \n {{ c.email }}\n {{ \"invited\" | i18n }}\n {{\n \"accepted\" | i18n\n }}\n {{ \"emergencyAccessRecoveryInitiated\" | i18n }}\n {{ \"emergencyAccessRecoveryApproved\" | i18n }}\n\n {{\n \"view\" | i18n\n }}\n {{\n \"takeover\" | i18n\n }}\n\n {{ c.name }}\n \n
\n \n \n \n
\n \n \n {{ \"resendInvitation\" | i18n }}\n \n \n \n {{ \"confirm\" | i18n }}\n \n \n \n {{ \"approve\" | i18n }}\n \n \n \n {{ \"reject\" | i18n }}\n \n \n \n {{ \"remove\" | i18n }}\n \n
\n
\n
\n\n

{{ \"noTrustedContacts\" | i18n }}

\n\n
\n

{{ \"designatedEmergencyContacts\" | i18n }}

\n
\n\n\n \n \n \n \n \n \n \n
\n \n \n \n {{ c.email }}\n {{ \"invited\" | i18n }}\n {{\n \"accepted\" | i18n\n }}\n {{ \"emergencyAccessRecoveryInitiated\" | i18n }}\n {{ \"emergencyAccessRecoveryApproved\" | i18n }}\n\n {{\n \"view\" | i18n\n }}\n {{\n \"takeover\" | i18n\n }}\n\n {{ c.name }}\n \n
\n \n \n \n
\n \n \n {{ \"requestAccess\" | i18n }}\n \n \n \n {{ \"takeover\" | i18n }}\n \n \n \n {{ \"view\" | i18n }}\n \n \n \n {{ \"remove\" | i18n }}\n \n
\n
\n
\n\n

{{ \"noGrantedAccess\" | i18n }}

\n\n\n\n\n","import { Component } from \"@angular/core\";\n\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TotpService } from \"jslib-common/abstractions/totp.service\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"../vault/add-edit.component\";\n\n@Component({\n selector: \"app-org-vault-add-edit\",\n templateUrl: \"../vault/add-edit.component.html\",\n})\nexport class EmergencyAddEditComponent extends BaseAddEditComponent {\n originalCipher: Cipher = null;\n viewOnly = true;\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n totpService: TotpService,\n passwordGenerationService: PasswordGenerationService,\n messagingService: MessagingService,\n eventService: EventService,\n policyService: PolicyService,\n passwordRepromptService: PasswordRepromptService,\n organizationService: OrganizationService,\n logService: LogService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n totpService,\n passwordGenerationService,\n messagingService,\n eventService,\n policyService,\n organizationService,\n logService,\n passwordRepromptService\n );\n }\n\n async load() {\n this.title = this.i18nService.t(\"viewItem\");\n }\n\n protected async loadCipher() {\n return Promise.resolve(this.originalCipher);\n }\n}\n","import { AfterContentInit, Component, Input } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { SsoComponent } from \"jslib-angular/components/sso.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\n@Component({\n selector: \"app-link-sso\",\n templateUrl: \"link-sso.component.html\",\n})\nexport class LinkSsoComponent extends SsoComponent implements AfterContentInit {\n @Input() organization: Organization;\n returnUri = \"/settings/organizations\";\n\n constructor(\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n apiService: ApiService,\n authService: AuthService,\n router: Router,\n route: ActivatedRoute,\n cryptoFunctionService: CryptoFunctionService,\n passwordGenerationService: PasswordGenerationService,\n stateService: StateService,\n environmentService: EnvironmentService,\n logService: LogService\n ) {\n super(\n authService,\n router,\n i18nService,\n route,\n stateService,\n platformUtilsService,\n apiService,\n cryptoFunctionService,\n environmentService,\n passwordGenerationService,\n logService\n );\n\n this.returnUri = \"/settings/organizations\";\n this.redirectUri = window.location.origin + \"/sso-connector.html\";\n this.clientId = \"web\";\n }\n\n async ngAfterContentInit() {\n this.identifier = this.organization.identifier;\n }\n}\n","\n \n {{ \"linkSso\" | i18n }}\n\n","import { Component, OnInit } from \"@angular/core\";\nimport { FormControl } from \"@angular/forms\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"jslib-common/abstractions/vaultTimeout.service\";\nimport { ThemeType } from \"jslib-common/enums/themeType\";\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Component({\n selector: \"app-options\",\n templateUrl: \"options.component.html\",\n})\nexport class OptionsComponent implements OnInit {\n vaultTimeoutAction = \"lock\";\n disableIcons: boolean;\n enableGravatars: boolean;\n enableFullWidth: boolean;\n theme: ThemeType;\n locale: string;\n vaultTimeouts: { name: string; value: number }[];\n localeOptions: any[];\n themeOptions: any[];\n\n vaultTimeout: FormControl = new FormControl(null);\n\n private startingLocale: string;\n private startingTheme: ThemeType;\n\n constructor(\n private stateService: StateService,\n private i18nService: I18nService,\n private vaultTimeoutService: VaultTimeoutService,\n private platformUtilsService: PlatformUtilsService,\n private messagingService: MessagingService\n ) {\n this.vaultTimeouts = [\n { name: i18nService.t(\"oneMinute\"), value: 1 },\n { name: i18nService.t(\"fiveMinutes\"), value: 5 },\n { name: i18nService.t(\"fifteenMinutes\"), value: 15 },\n { name: i18nService.t(\"thirtyMinutes\"), value: 30 },\n { name: i18nService.t(\"oneHour\"), value: 60 },\n { name: i18nService.t(\"fourHours\"), value: 240 },\n { name: i18nService.t(\"onRefresh\"), value: -1 },\n ];\n if (this.platformUtilsService.isDev()) {\n this.vaultTimeouts.push({ name: i18nService.t(\"never\"), value: null });\n }\n\n const localeOptions: any[] = [];\n i18nService.supportedTranslationLocales.forEach((locale) => {\n let name = locale;\n if (i18nService.localeNames.has(locale)) {\n name += \" - \" + i18nService.localeNames.get(locale);\n }\n localeOptions.push({ name: name, value: locale });\n });\n localeOptions.sort(Utils.getSortFunction(i18nService, \"name\"));\n localeOptions.splice(0, 0, { name: i18nService.t(\"default\"), value: null });\n this.localeOptions = localeOptions;\n this.themeOptions = [\n { name: i18nService.t(\"themeLight\"), value: ThemeType.Light },\n { name: i18nService.t(\"themeDark\"), value: ThemeType.Dark },\n { name: i18nService.t(\"themeSystem\"), value: ThemeType.System },\n ];\n }\n\n async ngOnInit() {\n this.vaultTimeout.setValue(await this.vaultTimeoutService.getVaultTimeout());\n this.vaultTimeoutAction = await this.stateService.getVaultTimeoutAction();\n this.disableIcons = await this.stateService.getDisableFavicon();\n this.enableGravatars = await this.stateService.getEnableGravitars();\n this.enableFullWidth = await this.stateService.getEnableFullWidth();\n\n this.locale = await this.stateService.getLocale();\n this.startingLocale = this.locale;\n\n this.theme = await this.stateService.getTheme();\n this.startingTheme = this.theme;\n }\n\n async submit() {\n if (!this.vaultTimeout.valid) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"vaultTimeoutToLarge\"));\n return;\n }\n\n await this.vaultTimeoutService.setVaultTimeoutOptions(\n this.vaultTimeout.value,\n this.vaultTimeoutAction\n );\n await this.stateService.setDisableFavicon(this.disableIcons);\n await this.stateService.setEnableGravitars(this.enableGravatars);\n await this.stateService.setEnableFullWidth(this.enableFullWidth);\n this.messagingService.send(\"setFullWidth\");\n if (this.theme !== this.startingTheme) {\n await this.stateService.setTheme(this.theme);\n this.startingTheme = this.theme;\n const effectiveTheme = await this.platformUtilsService.getEffectiveTheme();\n const htmlEl = window.document.documentElement;\n htmlEl.classList.remove(\"theme_\" + ThemeType.Light, \"theme_\" + ThemeType.Dark);\n htmlEl.classList.add(\"theme_\" + effectiveTheme);\n }\n await this.stateService.setLocale(this.locale);\n if (this.locale !== this.startingLocale) {\n window.location.reload();\n } else {\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"optionsUpdated\"));\n }\n }\n\n async vaultTimeoutActionChanged(newValue: string) {\n if (newValue === \"logOut\") {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"vaultTimeoutLogOutConfirmation\"),\n this.i18nService.t(\"vaultTimeoutLogOutConfirmationTitle\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n if (!confirmed) {\n this.vaultTimeoutAction = \"lock\";\n return;\n }\n }\n this.vaultTimeoutAction = newValue;\n }\n}\n","
\n

{{ \"options\" | i18n }}

\n
\n

{{ \"optionsDesc\" | i18n }}

\n
\n
\n
\n \n \n
\n
\n
\n \n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n \n {{ \"languageDesc\" | i18n }}\n
\n
\n
\n
\n
\n \n \n \n \n \n
\n {{ \"disableIconsDesc\" | i18n }}\n
\n
\n
\n \n \n \n \n \n
\n {{ \"enableGravatarsDesc\" | i18n }}\n
\n
\n
\n \n \n
\n {{ \"enableFullWidthDesc\" | i18n }}\n
\n
\n
\n
\n \n \n {{ \"themeDesc\" | i18n }}\n
\n
\n
\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { PaymentMethodType } from \"jslib-common/enums/paymentMethodType\";\nimport { PlanType } from \"jslib-common/enums/planType\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { ProductType } from \"jslib-common/enums/productType\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { OrganizationCreateRequest } from \"jslib-common/models/request/organizationCreateRequest\";\nimport { OrganizationKeysRequest } from \"jslib-common/models/request/organizationKeysRequest\";\nimport { OrganizationUpgradeRequest } from \"jslib-common/models/request/organizationUpgradeRequest\";\nimport { ProviderOrganizationCreateRequest } from \"jslib-common/models/request/provider/providerOrganizationCreateRequest\";\nimport { PlanResponse } from \"jslib-common/models/response/planResponse\";\n\nimport { PaymentComponent } from \"./payment.component\";\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\n selector: \"app-organization-plans\",\n templateUrl: \"organization-plans.component.html\",\n})\nexport class OrganizationPlansComponent implements OnInit {\n @ViewChild(PaymentComponent) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent) taxComponent: TaxInfoComponent;\n\n @Input() organizationId: string;\n @Input() showFree = true;\n @Input() showCancel = false;\n @Input() acceptingSponsorship = false;\n @Input() product: ProductType = ProductType.Free;\n @Input() plan: PlanType = PlanType.Free;\n @Input() providerId: string;\n @Output() onSuccess = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n loading = true;\n selfHosted = false;\n ownedBusiness = false;\n premiumAccessAddon = false;\n additionalStorage = 0;\n additionalSeats = 0;\n name: string;\n billingEmail: string;\n clientOwnerEmail: string;\n businessName: string;\n productTypes = ProductType;\n formPromise: Promise;\n singleOrgPolicyBlock = false;\n discount = 0;\n\n plans: PlanResponse[];\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private router: Router,\n private syncService: SyncService,\n private policyService: PolicyService,\n private organizationService: OrganizationService,\n private logService: LogService\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n if (!this.selfHosted) {\n const plans = await this.apiService.getPlans();\n this.plans = plans.data;\n if (this.product === ProductType.Enterprise || this.product === ProductType.Teams) {\n this.ownedBusiness = true;\n }\n }\n\n if (this.providerId) {\n this.ownedBusiness = true;\n this.changedOwnedBusiness();\n }\n\n this.loading = false;\n }\n\n get createOrganization() {\n return this.organizationId == null;\n }\n\n get selectedPlan() {\n return this.plans.find((plan) => plan.type === this.plan);\n }\n\n get selectedPlanInterval() {\n return this.selectedPlan.isAnnual ? \"year\" : \"month\";\n }\n\n get selectableProducts() {\n let validPlans = this.plans.filter((plan) => plan.type !== PlanType.Custom);\n\n if (this.ownedBusiness) {\n validPlans = validPlans.filter((plan) => plan.canBeUsedByBusiness);\n }\n\n if (!this.showFree) {\n validPlans = validPlans.filter((plan) => plan.product !== ProductType.Free);\n }\n\n validPlans = validPlans.filter(\n (plan) =>\n !plan.legacyYear &&\n !plan.disabled &&\n (plan.isAnnual || plan.product === this.productTypes.Free)\n );\n\n if (this.acceptingSponsorship) {\n const familyPlan = this.plans.find((plan) => plan.type === PlanType.FamiliesAnnually);\n this.discount = familyPlan.basePrice;\n validPlans = [familyPlan];\n }\n\n return validPlans;\n }\n\n get selectablePlans() {\n return this.plans.filter(\n (plan) => !plan.legacyYear && !plan.disabled && plan.product === this.product\n );\n }\n\n additionalStoragePriceMonthly(selectedPlan: PlanResponse) {\n if (!selectedPlan.isAnnual) {\n return selectedPlan.additionalStoragePricePerGb;\n }\n return selectedPlan.additionalStoragePricePerGb / 12;\n }\n\n seatPriceMonthly(selectedPlan: PlanResponse) {\n if (!selectedPlan.isAnnual) {\n return selectedPlan.seatPrice;\n }\n return selectedPlan.seatPrice / 12;\n }\n\n additionalStorageTotal(plan: PlanResponse): number {\n if (!plan.hasAdditionalStorageOption) {\n return 0;\n }\n\n return plan.additionalStoragePricePerGb * Math.abs(this.additionalStorage || 0);\n }\n\n seatTotal(plan: PlanResponse): number {\n if (!plan.hasAdditionalSeatsOption) {\n return 0;\n }\n\n return plan.seatPrice * Math.abs(this.additionalSeats || 0);\n }\n\n get subtotal() {\n let subTotal = this.selectedPlan.basePrice;\n if (this.selectedPlan.hasAdditionalSeatsOption && this.additionalSeats) {\n subTotal += this.seatTotal(this.selectedPlan);\n }\n if (this.selectedPlan.hasAdditionalStorageOption && this.additionalStorage) {\n subTotal += this.additionalStorageTotal(this.selectedPlan);\n }\n if (this.selectedPlan.hasPremiumAccessOption && this.premiumAccessAddon) {\n subTotal += this.selectedPlan.premiumAccessOptionPrice;\n }\n return subTotal - this.discount;\n }\n\n get freeTrial() {\n return this.selectedPlan.trialPeriodDays != null;\n }\n\n get taxCharges() {\n return this.taxComponent != null && this.taxComponent.taxRate != null\n ? (this.taxComponent.taxRate / 100) * this.subtotal\n : 0;\n }\n\n get total() {\n return this.subtotal + this.taxCharges || 0;\n }\n\n get paymentDesc() {\n if (this.acceptingSponsorship) {\n return this.i18nService.t(\"paymentSponsored\");\n } else if (this.freeTrial && this.createOrganization) {\n return this.i18nService.t(\"paymentChargedWithTrial\");\n } else {\n return this.i18nService.t(\"paymentCharged\", this.i18nService.t(this.selectedPlanInterval));\n }\n }\n\n changedProduct() {\n this.plan = this.selectablePlans[0].type;\n if (!this.selectedPlan.hasPremiumAccessOption) {\n this.premiumAccessAddon = false;\n }\n if (!this.selectedPlan.hasAdditionalStorageOption) {\n this.additionalStorage = 0;\n }\n if (!this.selectedPlan.hasAdditionalSeatsOption) {\n this.additionalSeats = 0;\n } else if (\n !this.additionalSeats &&\n !this.selectedPlan.baseSeats &&\n this.selectedPlan.hasAdditionalSeatsOption\n ) {\n this.additionalSeats = 1;\n }\n }\n\n changedOwnedBusiness() {\n if (!this.ownedBusiness || this.selectedPlan.canBeUsedByBusiness) {\n return;\n }\n this.product = ProductType.Teams;\n this.plan = PlanType.TeamsAnnually;\n }\n\n changedCountry() {\n this.paymentComponent.hideBank = this.taxComponent.taxInfo.country !== \"US\";\n // Bank Account payments are only available for US customers\n if (\n this.paymentComponent.hideBank &&\n this.paymentComponent.method === PaymentMethodType.BankAccount\n ) {\n this.paymentComponent.method = PaymentMethodType.Card;\n this.paymentComponent.changeMethod();\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n async submit() {\n this.singleOrgPolicyBlock = await this.userHasBlockingSingleOrgPolicy();\n\n if (this.singleOrgPolicyBlock) {\n return;\n }\n\n try {\n const doSubmit = async (): Promise => {\n let orgId: string = null;\n if (this.createOrganization) {\n const shareKey = await this.cryptoService.makeShareKey();\n const key = shareKey[0].encryptedString;\n const collection = await this.cryptoService.encrypt(\n this.i18nService.t(\"defaultCollection\"),\n shareKey[1]\n );\n const collectionCt = collection.encryptedString;\n const orgKeys = await this.cryptoService.makeKeyPair(shareKey[1]);\n\n if (this.selfHosted) {\n orgId = await this.createSelfHosted(key, collectionCt, orgKeys);\n } else {\n orgId = await this.createCloudHosted(key, collectionCt, orgKeys, shareKey[1]);\n }\n\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"organizationCreated\"),\n this.i18nService.t(\"organizationReadyToGo\")\n );\n } else {\n orgId = await this.updateOrganization(orgId);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"organizationUpgraded\")\n );\n }\n\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n if (!this.acceptingSponsorship) {\n this.router.navigate([\"/organizations/\" + orgId]);\n }\n\n return orgId;\n };\n\n this.formPromise = doSubmit();\n const organizationId = await this.formPromise;\n this.onSuccess.emit({ organizationId: organizationId });\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private async userHasBlockingSingleOrgPolicy() {\n return this.policyService.policyAppliesToUser(PolicyType.SingleOrg);\n }\n\n private async updateOrganization(orgId: string) {\n const request = new OrganizationUpgradeRequest();\n request.businessName = this.ownedBusiness ? this.businessName : null;\n request.additionalSeats = this.additionalSeats;\n request.additionalStorageGb = this.additionalStorage;\n request.premiumAccessAddon =\n this.selectedPlan.hasPremiumAccessOption && this.premiumAccessAddon;\n request.planType = this.selectedPlan.type;\n request.billingAddressCountry = this.taxComponent.taxInfo.country;\n request.billingAddressPostalCode = this.taxComponent.taxInfo.postalCode;\n\n // Retrieve org info to backfill pub/priv key if necessary\n const org = await this.organizationService.get(this.organizationId);\n if (!org.hasPublicAndPrivateKeys) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n }\n\n const result = await this.apiService.postOrganizationUpgrade(this.organizationId, request);\n if (!result.success && result.paymentIntentClientSecret != null) {\n await this.paymentComponent.handleStripeCardPayment(result.paymentIntentClientSecret, null);\n }\n return this.organizationId;\n }\n\n private async createCloudHosted(\n key: string,\n collectionCt: string,\n orgKeys: [string, EncString],\n orgKey: SymmetricCryptoKey\n ) {\n const request = new OrganizationCreateRequest();\n request.key = key;\n request.collectionName = collectionCt;\n request.name = this.name;\n request.billingEmail = this.billingEmail;\n request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n\n if (this.selectedPlan.type === PlanType.Free) {\n request.planType = PlanType.Free;\n } else {\n const tokenResult = await this.paymentComponent.createPaymentToken();\n\n request.paymentToken = tokenResult[0];\n request.paymentMethodType = tokenResult[1];\n request.businessName = this.ownedBusiness ? this.businessName : null;\n request.additionalSeats = this.additionalSeats;\n request.additionalStorageGb = this.additionalStorage;\n request.premiumAccessAddon =\n this.selectedPlan.hasPremiumAccessOption && this.premiumAccessAddon;\n request.planType = this.selectedPlan.type;\n request.billingAddressPostalCode = this.taxComponent.taxInfo.postalCode;\n request.billingAddressCountry = this.taxComponent.taxInfo.country;\n if (this.taxComponent.taxInfo.includeTaxId) {\n request.taxIdNumber = this.taxComponent.taxInfo.taxId;\n request.billingAddressLine1 = this.taxComponent.taxInfo.line1;\n request.billingAddressLine2 = this.taxComponent.taxInfo.line2;\n request.billingAddressCity = this.taxComponent.taxInfo.city;\n request.billingAddressState = this.taxComponent.taxInfo.state;\n }\n }\n\n if (this.providerId) {\n const providerRequest = new ProviderOrganizationCreateRequest(this.clientOwnerEmail, request);\n const providerKey = await this.cryptoService.getProviderKey(this.providerId);\n providerRequest.organizationCreateRequest.key = (\n await this.cryptoService.encrypt(orgKey.key, providerKey)\n ).encryptedString;\n const orgId = (\n await this.apiService.postProviderCreateOrganization(this.providerId, providerRequest)\n ).organizationId;\n\n return orgId;\n } else {\n return (await this.apiService.postOrganization(request)).id;\n }\n }\n\n private async createSelfHosted(key: string, collectionCt: string, orgKeys: [string, EncString]) {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n throw new Error(this.i18nService.t(\"selectFile\"));\n }\n\n const fd = new FormData();\n fd.append(\"license\", files[0]);\n fd.append(\"key\", key);\n fd.append(\"collectionName\", collectionCt);\n const response = await this.apiService.postOrganizationLicense(fd);\n const orgId = response.id;\n\n // Org Keys live outside of the OrganizationLicense - add the keys to the org here\n const request = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n await this.apiService.postOrganizationKeys(orgId, request);\n\n return orgId;\n }\n}\n","\n \n {{ \"loading\" | i18n }}\n\n\n

{{ \"uploadLicenseFileOrg\" | i18n }}

\n
\n
\n \n \n {{\n \"licenseFileDesc\" | i18n: \"bitwarden_organization_license.json\"\n }}\n
\n \n
\n
\n\n

{{ \"generalInformation\" | i18n }}

\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n {{ \"clientOwnerDesc\" | i18n: \"20\" }}\n
\n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n

{{ \"chooseYourPlan\" | i18n }}

\n
\n \n \n
\n
\n \n

{{ \"users\" | i18n }}

\n
\n
\n \n \n {{ \"userSeatsHowManyDesc\" | i18n }}\n
\n
\n
\n

{{ \"addons\" | i18n }}

\n
\n
\n \n \n {{\n \"userSeatsAdditionalDesc\"\n | i18n: selectedPlan.baseSeats:(seatPriceMonthly(selectedPlan) | currency: \"$\")\n }}\n
\n
\n
\n
\n \n \n {{\n \"additionalStorageIntervalDesc\"\n | i18n\n : \"1 GB\"\n : (additionalStoragePriceMonthly(selectedPlan) | currency: \"$\")\n : (\"month\" | i18n)\n }}\n
\n
\n
\n
\n
\n \n \n
\n {{\n \"premiumAccessDesc\" | i18n: (3.33 | currency: \"$\"):(\"month\" | i18n)\n }}\n
\n
\n

{{ \"summary\" | i18n }}

\n
\n \n \n
\n
\n

\n {{ (createOrganization ? \"paymentInformation\" : \"billingInformation\") | i18n }}\n

\n \n {{ paymentDesc }}\n \n \n \n
\n
\n {{ \"planPrice\" | i18n }}: {{ subtotal | currency: \"USD $\" }}\n
\n \n {{ \"estimatedTax\" | i18n }}: {{ taxCharges | currency: \"USD $\" }}\n \n
\n
\n

\n {{ \"total\" | i18n }}: {{ total | currency: \"USD $\" }}/{{\n selectedPlanInterval | i18n\n }}\n

\n
\n \n \n \n
\n
\n {{ \"singleOrgBlockCreateMessage\" | i18n }}\n
\n
\n \n \n
\n\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { Policy } from \"jslib-common/models/domain/policy\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest\";\n\n@Component({\n selector: \"app-organizations\",\n templateUrl: \"organizations.component.html\",\n})\nexport class OrganizationsComponent implements OnInit {\n @Input() vault = false;\n\n organizations: Organization[];\n policies: Policy[];\n loaded = false;\n actionPromise: Promise;\n\n constructor(\n private organizationService: OrganizationService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private apiService: ApiService,\n private syncService: SyncService,\n private cryptoService: CryptoService,\n private policyService: PolicyService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n if (!this.vault) {\n await this.syncService.fullSync(true);\n await this.load();\n }\n }\n\n async load() {\n const orgs = await this.organizationService.getAll();\n orgs.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n this.organizations = orgs;\n this.policies = await this.policyService.getAll(PolicyType.ResetPassword);\n this.loaded = true;\n }\n\n allowEnrollmentChanges(org: Organization): boolean {\n if (org.usePolicies && org.useResetPassword && org.hasPublicAndPrivateKeys) {\n const policy = this.policies.find((p) => p.organizationId === org.id);\n if (policy != null && policy.enabled) {\n return org.resetPasswordEnrolled && policy.data.autoEnrollEnabled ? false : true;\n }\n }\n\n return false;\n }\n\n showEnrolledStatus(org: Organization): boolean {\n return (\n org.useResetPassword &&\n org.resetPasswordEnrolled &&\n this.policies.some((p) => p.organizationId === org.id && p.enabled)\n );\n }\n\n async unlinkSso(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"unlinkSsoConfirmation\"),\n org.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.apiService.deleteSsoUser(org.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, \"Unlinked SSO\");\n await this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async leave(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"leaveOrganizationConfirmation\"),\n org.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.apiService.postLeaveOrganization(org.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"leftOrganization\"));\n await this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async toggleResetPasswordEnrollment(org: Organization) {\n // Set variables\n let keyString: string = null;\n let toastStringRef = \"withdrawPasswordResetSuccess\";\n\n // Enrolling\n if (!org.resetPasswordEnrolled) {\n // Alert user about enrollment\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"resetPasswordEnrollmentWarning\"),\n null,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n\n // Retrieve Public Key\n this.actionPromise = this.apiService\n .getOrganizationKeys(org.id)\n .then(async (response) => {\n if (response == null) {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n\n const publicKey = Utils.fromB64ToArray(response.publicKey);\n\n // RSA Encrypt user's encKey.key with organization public key\n const encKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n keyString = encryptedKey.encryptedString;\n toastStringRef = \"enrollPasswordResetSuccess\";\n\n // Create request and execute enrollment\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.resetPasswordKey = keyString;\n return this.apiService.putOrganizationUserResetPasswordEnrollment(\n org.id,\n org.userId,\n request\n );\n })\n .then(() => {\n return this.syncService.fullSync(true);\n });\n } else {\n // Withdrawal\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.resetPasswordKey = keyString;\n this.actionPromise = this.apiService\n .putOrganizationUserResetPasswordEnrollment(org.id, org.userId, request)\n .then(() => {\n return this.syncService.fullSync(true);\n });\n }\n\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(toastStringRef));\n await this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","\n

\n \n {{ \"loading\" | i18n }}\n

\n \n \n

{{ \"noOrganizationsList\" | i18n }}

\n
\n \n \n {{ \"newOrganization\" | i18n }}\n \n
\n\n
\n

\n {{ \"organizations\" | i18n }}\n \n \n \n {{ \"loading\" | i18n }}\n \n \n

\n \n \n {{ \"newOrganization\" | i18n }}\n \n
\n \n \n {{ \"loading\" | i18n }}\n \n \n \n

{{ \"noOrganizationsList\" | i18n }}

\n \n \n {{ \"newOrganization\" | i18n }}\n \n
\n \n \n \n \n \n \n \n \n
\n \n \n {{ o.name }}\n \n \n {{ \"organizationIsDisabled\" | i18n }}\n \n \n \n {{ \"enrolledPasswordReset\" | i18n }}\n \n \n
\n \n \n \n
\n \n \n {{ \"enrollPasswordReset\" | i18n }}\n \n \n \n {{ \"withdrawPasswordReset\" | i18n }}\n \n \n \n \n {{ \"unlinkSso\" | i18n }}\n \n \n \n \n \n \n \n {{ \"leave\" | i18n }}\n \n
\n
\n
\n
\n
\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PaymentMethodType } from \"jslib-common/enums/paymentMethodType\";\nimport { ThemeType } from \"jslib-common/enums/themeType\";\n\nimport ThemeVariables from \"src/scss/export.module.scss\";\n\nconst lightInputColor = ThemeVariables.lightInputColor;\nconst lightInputPlaceholderColor = ThemeVariables.lightInputPlaceholderColor;\nconst darkInputColor = ThemeVariables.darkInputColor;\nconst darkInputPlaceholderColor = ThemeVariables.darkInputPlaceholderColor;\n\n@Component({\n selector: \"app-payment\",\n templateUrl: \"payment.component.html\",\n})\nexport class PaymentComponent implements OnInit {\n @Input() showMethods = true;\n @Input() showOptions = true;\n @Input() method = PaymentMethodType.Card;\n @Input() hideBank = false;\n @Input() hidePaypal = false;\n @Input() hideCredit = false;\n\n bank: any = {\n routing_number: null,\n account_number: null,\n account_holder_name: null,\n account_holder_type: \"\",\n currency: \"USD\",\n country: \"US\",\n };\n\n paymentMethodType = PaymentMethodType;\n\n private btScript: HTMLScriptElement;\n private btInstance: any = null;\n private stripeScript: HTMLScriptElement;\n private stripe: any = null;\n private stripeElements: any = null;\n private stripeCardNumberElement: any = null;\n private stripeCardExpiryElement: any = null;\n private stripeCardCvcElement: any = null;\n private StripeElementStyle: any;\n private StripeElementClasses: any;\n\n constructor(\n private platformUtilsService: PlatformUtilsService,\n private apiService: ApiService,\n private logService: LogService\n ) {\n this.stripeScript = window.document.createElement(\"script\");\n this.stripeScript.src = \"https://js.stripe.com/v3/\";\n this.stripeScript.async = true;\n this.stripeScript.onload = () => {\n this.stripe = (window as any).Stripe(process.env.STRIPE_KEY);\n this.stripeElements = this.stripe.elements();\n this.setStripeElement();\n };\n this.btScript = window.document.createElement(\"script\");\n this.btScript.src = `scripts/dropin.js?cache=${process.env.CACHE_TAG}`;\n this.btScript.async = true;\n this.StripeElementStyle = {\n base: {\n color: null,\n fontFamily:\n '\"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif, ' +\n '\"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n fontSize: \"14px\",\n fontSmoothing: \"antialiased\",\n \"::placeholder\": {\n color: null,\n },\n },\n invalid: {\n color: null,\n },\n };\n this.StripeElementClasses = {\n focus: \"is-focused\",\n empty: \"is-empty\",\n invalid: \"is-invalid\",\n };\n }\n\n async ngOnInit() {\n if (!this.showOptions) {\n this.hidePaypal = this.method !== PaymentMethodType.PayPal;\n this.hideBank = this.method !== PaymentMethodType.BankAccount;\n this.hideCredit = this.method !== PaymentMethodType.Credit;\n }\n await this.setTheme();\n window.document.head.appendChild(this.stripeScript);\n if (!this.hidePaypal) {\n window.document.head.appendChild(this.btScript);\n }\n }\n\n ngOnDestroy() {\n window.document.head.removeChild(this.stripeScript);\n window.setTimeout(() => {\n Array.from(window.document.querySelectorAll(\"iframe\")).forEach((el) => {\n if (el.src != null && el.src.indexOf(\"stripe\") > -1) {\n try {\n window.document.body.removeChild(el);\n } catch (e) {\n this.logService.error(e);\n }\n }\n });\n }, 500);\n if (!this.hidePaypal) {\n window.document.head.removeChild(this.btScript);\n window.setTimeout(() => {\n Array.from(window.document.head.querySelectorAll(\"script\")).forEach((el) => {\n if (el.src != null && el.src.indexOf(\"paypal\") > -1) {\n try {\n window.document.head.removeChild(el);\n } catch (e) {\n this.logService.error(e);\n }\n }\n });\n const btStylesheet = window.document.head.querySelector(\"#braintree-dropin-stylesheet\");\n if (btStylesheet != null) {\n try {\n window.document.head.removeChild(btStylesheet);\n } catch (e) {\n this.logService.error(e);\n }\n }\n }, 500);\n }\n }\n\n changeMethod() {\n this.btInstance = null;\n\n if (this.method === PaymentMethodType.PayPal) {\n window.setTimeout(() => {\n (window as any).braintree.dropin.create(\n {\n authorization: process.env.BRAINTREE_KEY,\n container: \"#bt-dropin-container\",\n paymentOptionPriority: [\"paypal\"],\n paypal: {\n flow: \"vault\",\n buttonStyle: {\n label: \"pay\",\n size: \"medium\",\n shape: \"pill\",\n color: \"blue\",\n tagline: \"false\",\n },\n },\n },\n (createErr: any, instance: any) => {\n if (createErr != null) {\n // eslint-disable-next-line\n console.error(createErr);\n return;\n }\n this.btInstance = instance;\n }\n );\n }, 250);\n } else {\n this.setStripeElement();\n }\n }\n\n createPaymentToken(): Promise<[string, PaymentMethodType]> {\n return new Promise((resolve, reject) => {\n if (this.method === PaymentMethodType.Credit) {\n resolve([null, this.method]);\n } else if (this.method === PaymentMethodType.PayPal) {\n this.btInstance\n .requestPaymentMethod()\n .then((payload: any) => {\n resolve([payload.nonce, this.method]);\n })\n .catch((err: any) => {\n reject(err.message);\n });\n } else if (\n this.method === PaymentMethodType.Card ||\n this.method === PaymentMethodType.BankAccount\n ) {\n if (this.method === PaymentMethodType.Card) {\n this.apiService\n .postSetupPayment()\n .then((clientSecret) =>\n this.stripe.handleCardSetup(clientSecret, this.stripeCardNumberElement)\n )\n .then((result: any) => {\n if (result.error) {\n reject(result.error.message);\n } else if (result.setupIntent && result.setupIntent.status === \"succeeded\") {\n resolve([result.setupIntent.payment_method, this.method]);\n } else {\n reject();\n }\n });\n } else {\n this.stripe.createToken(\"bank_account\", this.bank).then((result: any) => {\n if (result.error) {\n reject(result.error.message);\n } else if (result.token && result.token.id != null) {\n resolve([result.token.id, this.method]);\n } else {\n reject();\n }\n });\n }\n }\n });\n }\n\n handleStripeCardPayment(clientSecret: string, successCallback: () => Promise): Promise {\n return new Promise((resolve, reject) => {\n if (this.showMethods && this.stripeCardNumberElement == null) {\n reject();\n return;\n }\n const handleCardPayment = () =>\n this.showMethods\n ? this.stripe.handleCardSetup(clientSecret, this.stripeCardNumberElement)\n : this.stripe.handleCardSetup(clientSecret);\n return handleCardPayment().then(async (result: any) => {\n if (result.error) {\n reject(result.error.message);\n } else if (result.paymentIntent && result.paymentIntent.status === \"succeeded\") {\n if (successCallback != null) {\n await successCallback();\n }\n resolve();\n } else {\n reject();\n }\n });\n });\n }\n\n private setStripeElement() {\n window.setTimeout(() => {\n if (this.showMethods && this.method === PaymentMethodType.Card) {\n if (this.stripeCardNumberElement == null) {\n this.stripeCardNumberElement = this.stripeElements.create(\"cardNumber\", {\n style: this.StripeElementStyle,\n classes: this.StripeElementClasses,\n placeholder: \"\",\n });\n }\n if (this.stripeCardExpiryElement == null) {\n this.stripeCardExpiryElement = this.stripeElements.create(\"cardExpiry\", {\n style: this.StripeElementStyle,\n classes: this.StripeElementClasses,\n });\n }\n if (this.stripeCardCvcElement == null) {\n this.stripeCardCvcElement = this.stripeElements.create(\"cardCvc\", {\n style: this.StripeElementStyle,\n classes: this.StripeElementClasses,\n placeholder: \"\",\n });\n }\n this.stripeCardNumberElement.mount(\"#stripe-card-number-element\");\n this.stripeCardExpiryElement.mount(\"#stripe-card-expiry-element\");\n this.stripeCardCvcElement.mount(\"#stripe-card-cvc-element\");\n }\n }, 50);\n }\n\n private async setTheme() {\n const theme = await this.platformUtilsService.getEffectiveTheme();\n if (theme === ThemeType.Dark) {\n this.StripeElementStyle.base.color = darkInputColor;\n this.StripeElementStyle.base[\"::placeholder\"].color = darkInputPlaceholderColor;\n this.StripeElementStyle.invalid.color = darkInputColor;\n } else {\n this.StripeElementStyle.base.color = lightInputColor;\n this.StripeElementStyle.base[\"::placeholder\"].color = lightInputPlaceholderColor;\n this.StripeElementStyle.invalid.color = lightInputColor;\n }\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n\n \n {{ \"verifyBankAccountInitialDesc\" | i18n }} {{ \"verifyBankAccountFailureWarning\" | i18n }}\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n \n \n \n \n
\n
\n
\n\n
\n
\n {{ \"paypalClickSubmit\" | i18n }}\n
\n
\n\n \n {{ \"makeSureEnoughCredit\" | i18n }}\n \n\n","import { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { TokenService } from \"jslib-common/abstractions/token.service\";\n\nimport { PaymentComponent } from \"./payment.component\";\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\n selector: \"app-premium\",\n templateUrl: \"premium.component.html\",\n})\nexport class PremiumComponent implements OnInit {\n @ViewChild(PaymentComponent) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent) taxInfoComponent: TaxInfoComponent;\n\n canAccessPremium = false;\n selfHosted = false;\n premiumPrice = 10;\n storageGbPrice = 4;\n additionalStorage = 0;\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService,\n private router: Router,\n private messagingService: MessagingService,\n private syncService: SyncService,\n private logService: LogService,\n private stateService: StateService\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n const premium = await this.tokenService.getPremium();\n if (premium) {\n this.router.navigate([\"/settings/subscription\"]);\n return;\n }\n }\n\n async submit() {\n let files: FileList = null;\n if (this.selfHosted) {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n }\n\n try {\n if (this.selfHosted) {\n if (!this.tokenService.getEmailVerified()) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"verifyEmailFirst\")\n );\n return;\n }\n\n const fd = new FormData();\n fd.append(\"license\", files[0]);\n this.formPromise = this.apiService.postAccountLicense(fd).then(() => {\n return this.finalizePremium();\n });\n } else {\n this.formPromise = this.paymentComponent\n .createPaymentToken()\n .then((result) => {\n const fd = new FormData();\n fd.append(\"paymentMethodType\", result[1].toString());\n if (result[0] != null) {\n fd.append(\"paymentToken\", result[0]);\n }\n fd.append(\"additionalStorageGb\", (this.additionalStorage || 0).toString());\n fd.append(\"country\", this.taxInfoComponent.taxInfo.country);\n fd.append(\"postalCode\", this.taxInfoComponent.taxInfo.postalCode);\n return this.apiService.postPremium(fd);\n })\n .then((paymentResponse) => {\n if (!paymentResponse.success && paymentResponse.paymentIntentClientSecret != null) {\n return this.paymentComponent.handleStripeCardPayment(\n paymentResponse.paymentIntentClientSecret,\n () => this.finalizePremium()\n );\n } else {\n return this.finalizePremium();\n }\n });\n }\n await this.formPromise;\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async finalizePremium() {\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"premiumUpdated\"));\n this.messagingService.send(\"purchasedPremium\");\n this.router.navigate([\"/settings/subscription\"]);\n }\n\n get additionalStorageTotal(): number {\n return this.storageGbPrice * Math.abs(this.additionalStorage || 0);\n }\n\n get subtotal(): number {\n return this.premiumPrice + this.additionalStorageTotal;\n }\n\n get taxCharges(): number {\n return this.taxInfoComponent != null && this.taxInfoComponent.taxRate != null\n ? (this.taxInfoComponent.taxRate / 100) * this.subtotal\n : 0;\n }\n\n get total(): number {\n return this.subtotal + this.taxCharges || 0;\n }\n}\n","
\n

{{ \"goPremium\" | i18n }}

\n
\n\n {{ \"alreadyPremiumFromOrg\" | i18n }}\n\n\n

{{ \"premiumUpgradeUnlockFeatures\" | i18n }}

\n
    \n
  • \n \n {{ \"premiumSignUpStorage\" | i18n }}\n
  • \n
  • \n \n {{ \"premiumSignUpTwoStep\" | i18n }}\n
  • \n
  • \n \n {{ \"premiumSignUpEmergency\" | i18n }}\n
  • \n
  • \n \n {{ \"premiumSignUpReports\" | i18n }}\n
  • \n
  • \n \n {{ \"premiumSignUpTotp\" | i18n }}\n
  • \n
  • \n \n {{ \"premiumSignUpSupport\" | i18n }}\n
  • \n
  • \n \n {{ \"premiumSignUpFuture\" | i18n }}\n
  • \n
\n

\n {{ \"premiumPrice\" | i18n: (premiumPrice | currency: \"$\") }}\n

\n \n {{ \"purchasePremium\" | i18n }}\n \n
\n\n

{{ \"uploadLicenseFilePremium\" | i18n }}

\n
\n
\n \n \n {{\n \"licenseFileDesc\" | i18n: \"bitwarden_premium_license.json\"\n }}\n
\n \n
\n
\n
\n

{{ \"addons\" | i18n }}

\n
\n
\n \n \n {{\n \"additionalStorageIntervalDesc\"\n | i18n: \"1 GB\":(storageGbPrice | currency: \"$\"):(\"year\" | i18n)\n }}\n
\n
\n

{{ \"summary\" | i18n }}

\n {{ \"premiumMembership\" | i18n }}: {{ premiumPrice | currency: \"$\" }}
\n {{ \"additionalStorageGb\" | i18n }}: {{ additionalStorage || 0 }} GB ×\n {{ storageGbPrice | currency: \"$\" }} =\n {{ additionalStorageTotal | currency: \"$\" }}\n
\n

{{ \"paymentInformation\" | i18n }}

\n \n \n
\n
\n {{ \"planPrice\" | i18n }}: {{ subtotal | currency: \"USD $\" }}\n
\n \n {{ \"estimatedTax\" | i18n }}: {{ taxCharges | currency: \"USD $\" }}\n \n
\n
\n

\n {{ \"total\" | i18n }}: {{ total | currency: \"USD $\" }}/{{ \"year\" | i18n }}\n

\n
\n {{ \"paymentChargedAnnually\" | i18n }}\n \n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UpdateProfileRequest } from \"jslib-common/models/request/updateProfileRequest\";\nimport { ProfileResponse } from \"jslib-common/models/response/profileResponse\";\n\n@Component({\n selector: \"app-profile\",\n templateUrl: \"profile.component.html\",\n})\nexport class ProfileComponent implements OnInit {\n loading = true;\n profile: ProfileResponse;\n fingerprint: string;\n hidePasswordHint = false;\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private logService: LogService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.profile = await this.apiService.getProfile();\n this.loading = false;\n const fingerprint = await this.cryptoService.getFingerprint(\n await this.stateService.getUserId()\n );\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join(\"-\");\n }\n this.hidePasswordHint = await this.keyConnectorService.getUsesKeyConnector();\n }\n\n async submit() {\n try {\n const request = new UpdateProfileRequest(this.profile.name, this.profile.masterPasswordHint);\n this.formPromise = this.apiService.putProfile(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"accountUpdated\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n \n {{ \"loading\" | i18n }}\n
\n\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n

\n {{ \"yourAccountsFingerprint\" | i18n }}:\n \n
\n {{ fingerprint }}\n

\n
\n
\n \n\n","import { Component, Input } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { Verification } from \"jslib-common/types/verification\";\n\n@Component({\n selector: \"app-purge-vault\",\n templateUrl: \"purge-vault.component.html\",\n})\nexport class PurgeVaultComponent {\n @Input() organizationId?: string = null;\n\n masterPassword: Verification;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private userVerificationService: UserVerificationService,\n private router: Router,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword)\n .then((request) => this.apiService.postPurgeCiphers(request, this.organizationId));\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"vaultPurged\"));\n if (this.organizationId != null) {\n this.router.navigate([\"organizations\", this.organizationId, \"vault\"]);\n } else {\n this.router.navigate([\"vault\"]);\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ \"purgeVault\" | i18n }}

\n \n ×\n \n
\n
\n

{{ (organizationId ? \"purgeOrgVaultDesc\" : \"purgeVaultDesc\") | i18n }}

\n {{ \"purgeVaultWarning\" | i18n }}\n \n \n
\n
\n \n \n
\n \n
\n
\n","import { Component, NgZone, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { TokenService } from \"jslib-common/abstractions/token.service\";\n\nconst BroadcasterSubscriptionId = \"SettingsComponent\";\n\n@Component({\n selector: \"app-settings\",\n templateUrl: \"settings.component.html\",\n})\nexport class SettingsComponent implements OnInit, OnDestroy {\n premium: boolean;\n selfHosted: boolean;\n hasFamilySponsorshipAvailable: boolean;\n\n constructor(\n private tokenService: TokenService,\n private broadcasterService: BroadcasterService,\n private ngZone: NgZone,\n private platformUtilsService: PlatformUtilsService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"purchasedPremium\":\n await this.load();\n break;\n default:\n }\n });\n });\n\n this.selfHosted = await this.platformUtilsService.isSelfHost();\n await this.load();\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async load() {\n this.premium = await this.tokenService.getPremium();\n this.hasFamilySponsorshipAvailable = await this.organizationService.canManageSponsorships();\n }\n}\n","
\n
\n
\n
\n
{{ \"settings\" | i18n }}
\n
\n \n {{ \"myAccount\" | i18n }}\n \n \n {{ \"options\" | i18n }}\n \n \n {{ \"organizations\" | i18n }}\n \n \n {{ \"premiumMembership\" | i18n }}\n \n \n {{ \"goPremium\" | i18n }}\n \n \n {{ \"billing\" | i18n }}\n \n \n {{ \"twoStepLogin\" | i18n }}\n \n \n {{ \"domainRules\" | i18n }}\n \n \n {{ \"emergencyAccess\" | i18n }}\n \n \n {{ \"sponsoredFamilies\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { PlanSponsorshipType } from \"jslib-common/enums/planSponsorshipType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\n@Component({\n selector: \"app-sponsored-families\",\n templateUrl: \"sponsored-families.component.html\",\n})\nexport class SponsoredFamiliesComponent implements OnInit {\n loading = false;\n\n availableSponsorshipOrgs: Organization[] = [];\n activeSponsorshipOrgs: Organization[] = [];\n selectedSponsorshipOrgId = \"\";\n sponsorshipEmail = \"\";\n\n // Conditional display properties\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private syncService: SyncService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n async submit() {\n this.formPromise = this.apiService.postCreateSponsorship(this.selectedSponsorshipOrgId, {\n sponsoredEmail: this.sponsorshipEmail,\n planSponsorshipType: PlanSponsorshipType.FamiliesForEnterprise,\n friendlyName: this.sponsorshipEmail,\n });\n\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"sponsorshipCreated\"));\n this.formPromise = null;\n this.resetForm();\n await this.load(true);\n }\n\n async load(forceReload = false) {\n if (this.loading) {\n return;\n }\n\n this.loading = true;\n if (forceReload) {\n await this.syncService.fullSync(true);\n }\n\n const allOrgs = await this.organizationService.getAll();\n this.availableSponsorshipOrgs = allOrgs.filter((org) => org.familySponsorshipAvailable);\n\n this.activeSponsorshipOrgs = allOrgs.filter(\n (org) => org.familySponsorshipFriendlyName !== null\n );\n\n if (this.availableSponsorshipOrgs.length === 1) {\n this.selectedSponsorshipOrgId = this.availableSponsorshipOrgs[0].id;\n }\n this.loading = false;\n }\n\n private async resetForm() {\n this.sponsorshipEmail = \"\";\n this.selectedSponsorshipOrgId = \"\";\n }\n\n get anyActiveSponsorships(): boolean {\n return this.activeSponsorshipOrgs.length > 0;\n }\n\n get anyOrgsAvailable(): boolean {\n return this.availableSponsorshipOrgs.length > 0;\n }\n\n get moreThanOneOrgAvailable(): boolean {\n return this.availableSponsorshipOrgs.length > 1;\n }\n}\n","
\n

{{ \"sponsoredFamilies\" | i18n }}

\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

\n {{ \"sponsoredFamiliesEligible\" | i18n }}\n

\n
\n {{ \"sponsoredFamiliesInclude\" | i18n }}:\n
    \n
  • {{ \"sponsoredFamiliesPremiumAccess\" | i18n }}
  • \n
  • {{ \"sponsoredFamiliesSharedCollections\" | i18n }}
  • \n
\n
\n \n
\n \n \n \n \n \n
\n
\n \n \n \n
\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"recipient\" | i18n }}{{ \"sponsoringOrg\" | i18n }}
\n
\n {{ \"sponsoredFamiliesLeaveCopy\" | i18n }}\n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\n@Component({\n selector: \"[sponsoring-org-row]\",\n templateUrl: \"sponsoring-org-row.component.html\",\n})\nexport class SponsoringOrgRowComponent {\n @Input() sponsoringOrg: Organization = null;\n\n @Output() sponsorshipRemoved = new EventEmitter();\n\n revokeSponsorshipPromise: Promise;\n resendEmailPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private logService: LogService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n async revokeSponsorship() {\n try {\n this.revokeSponsorshipPromise = this.doRevokeSponsorship();\n await this.revokeSponsorshipPromise;\n } catch (e) {\n this.logService.error(e);\n }\n\n this.revokeSponsorshipPromise = null;\n }\n\n async resendEmail() {\n this.resendEmailPromise = this.apiService.postResendSponsorshipOffer(this.sponsoringOrg.id);\n await this.resendEmailPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"emailSent\"));\n this.resendEmailPromise = null;\n }\n\n private async doRevokeSponsorship() {\n const isConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"revokeSponsorshipConfirmation\"),\n `${this.i18nService.t(\"remove\")} ${this.sponsoringOrg.familySponsorshipFriendlyName}?`,\n this.i18nService.t(\"remove\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n\n if (!isConfirmed) {\n return;\n }\n\n await this.apiService.deleteRevokeSponsorship(this.sponsoringOrg.id);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"reclaimedFreePlan\"));\n this.sponsorshipRemoved.emit();\n }\n}\n","\n {{ sponsoringOrg.familySponsorshipFriendlyName }}\n\n{{ sponsoringOrg.name }}\n\n
\n \n \n \n
\n \n \n {{ \"resendEmail\" | i18n }}\n \n \n \n {{ \"remove\" | i18n }}\n \n
\n
\n\n","import { Component, EventEmitter, Output } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationTaxInfoUpdateRequest } from \"jslib-common/models/request/organizationTaxInfoUpdateRequest\";\nimport { TaxInfoUpdateRequest } from \"jslib-common/models/request/taxInfoUpdateRequest\";\nimport { TaxRateResponse } from \"jslib-common/models/response/taxRateResponse\";\n\n@Component({\n selector: \"app-tax-info\",\n templateUrl: \"tax-info.component.html\",\n})\nexport class TaxInfoComponent {\n @Output() onCountryChanged = new EventEmitter();\n\n loading = true;\n organizationId: string;\n taxInfo: any = {\n taxId: null,\n line1: null,\n line2: null,\n city: null,\n state: null,\n postalCode: null,\n country: \"US\",\n includeTaxId: false,\n };\n\n taxRates: TaxRateResponse[];\n\n private pristine: any = {\n taxId: null,\n line1: null,\n line2: null,\n city: null,\n state: null,\n postalCode: null,\n country: \"US\",\n includeTaxId: false,\n };\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n if (this.organizationId) {\n try {\n const taxInfo = await this.apiService.getOrganizationTaxInfo(this.organizationId);\n if (taxInfo) {\n this.taxInfo.taxId = taxInfo.taxId;\n this.taxInfo.state = taxInfo.state;\n this.taxInfo.line1 = taxInfo.line1;\n this.taxInfo.line2 = taxInfo.line2;\n this.taxInfo.city = taxInfo.city;\n this.taxInfo.state = taxInfo.state;\n this.taxInfo.postalCode = taxInfo.postalCode;\n this.taxInfo.country = taxInfo.country || \"US\";\n this.taxInfo.includeTaxId =\n this.taxInfo.country !== \"US\" &&\n (!!taxInfo.taxId ||\n !!taxInfo.line1 ||\n !!taxInfo.line2 ||\n !!taxInfo.city ||\n !!taxInfo.state);\n }\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n const taxInfo = await this.apiService.getTaxInfo();\n if (taxInfo) {\n this.taxInfo.postalCode = taxInfo.postalCode;\n this.taxInfo.country = taxInfo.country || \"US\";\n }\n }\n this.pristine = Object.assign({}, this.taxInfo);\n // If not the default (US) then trigger onCountryChanged\n if (this.taxInfo.country !== \"US\") {\n this.onCountryChanged.emit();\n }\n });\n\n const taxRates = await this.apiService.getTaxRates();\n this.taxRates = taxRates.data;\n this.loading = false;\n }\n\n get taxRate() {\n if (this.taxRates != null) {\n const localTaxRate = this.taxRates.find(\n (x) => x.country === this.taxInfo.country && x.postalCode === this.taxInfo.postalCode\n );\n return localTaxRate?.rate ?? null;\n }\n }\n\n getTaxInfoRequest(): TaxInfoUpdateRequest {\n if (this.organizationId) {\n const request = new OrganizationTaxInfoUpdateRequest();\n request.taxId = this.taxInfo.taxId;\n request.state = this.taxInfo.state;\n request.line1 = this.taxInfo.line1;\n request.line2 = this.taxInfo.line2;\n request.city = this.taxInfo.city;\n request.state = this.taxInfo.state;\n request.postalCode = this.taxInfo.postalCode;\n request.country = this.taxInfo.country;\n return request;\n } else {\n const request = new TaxInfoUpdateRequest();\n request.postalCode = this.taxInfo.postalCode;\n request.country = this.taxInfo.country;\n return request;\n }\n }\n\n submitTaxInfo(): Promise {\n if (!this.hasChanged()) {\n return new Promise((resolve) => {\n resolve();\n });\n }\n const request = this.getTaxInfoRequest();\n return this.organizationId\n ? this.apiService.putOrganizationTaxInfo(\n this.organizationId,\n request as OrganizationTaxInfoUpdateRequest\n )\n : this.apiService.putTaxInfo(request);\n }\n\n changeCountry() {\n if (this.taxInfo.country === \"US\") {\n this.taxInfo.includeTaxId = false;\n this.taxInfo.taxId = null;\n this.taxInfo.line1 = null;\n this.taxInfo.line2 = null;\n this.taxInfo.city = null;\n this.taxInfo.state = null;\n }\n this.onCountryChanged.emit();\n }\n\n private hasChanged(): boolean {\n for (const key in this.taxInfo) {\n // eslint-disable-next-line\n if (this.pristine.hasOwnProperty(key) && this.pristine[key] !== this.taxInfo[key]) {\n return true;\n }\n }\n return false;\n }\n}\n","
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"jslib-common/models/request/updateTwoFactorAuthenticatorRequest\";\nimport { TwoFactorAuthenticatorResponse } from \"jslib-common/models/response/twoFactorAuthenticatorResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n@Component({\n selector: \"app-two-factor-authenticator\",\n templateUrl: \"two-factor-authenticator.component.html\",\n})\nexport class TwoFactorAuthenticatorComponent\n extends TwoFactorBaseComponent\n implements OnInit, OnDestroy\n{\n type = TwoFactorProviderType.Authenticator;\n key: string;\n token: string;\n formPromise: Promise;\n\n private qrScript: HTMLScriptElement;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n userVerificationService: UserVerificationService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n private stateService: StateService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n this.qrScript = window.document.createElement(\"script\");\n this.qrScript.src = \"scripts/qrious.min.js\";\n this.qrScript.async = true;\n }\n\n ngOnInit() {\n window.document.body.appendChild(this.qrScript);\n }\n\n ngOnDestroy() {\n window.document.body.removeChild(this.qrScript);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n return this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n protected async enable() {\n const request = await this.buildRequestModel(UpdateTwoFactorAuthenticatorRequest);\n request.token = this.token;\n request.key = this.key;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorAuthenticator(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private async processResponse(response: TwoFactorAuthenticatorResponse) {\n this.token = null;\n this.enabled = response.enabled;\n this.key = response.key;\n const email = await this.stateService.getEmail();\n window.setTimeout(() => {\n new (window as any).QRious({\n element: document.getElementById(\"qr\"),\n value:\n \"otpauth://totp/Bitwarden:\" +\n encodeURIComponent(email) +\n \"?secret=\" +\n encodeURIComponent(this.key) +\n \"&issuer=Bitwarden\",\n size: 160,\n });\n }, 100);\n }\n}\n","
\n
\n
\n
\n

\n {{ \"twoStepLogin\" | i18n }}\n {{ \"authenticatorAppTitle\" | i18n }}\n

\n \n ×\n \n
\n \n \n \n
\n \n \"Authenticator\n

{{ \"twoStepAuthenticatorDesc\" | i18n }}

\n

\n 1. {{ \"twoStepAuthenticatorDownloadApp\" | i18n }}\n

\n
\n \n \n

{{ \"twoStepLoginProviderEnabled\" | i18n }}

\n {{ \"twoStepAuthenticatorReaddDesc\" | i18n }}\n
\n \"Authenticator\n

{{ \"twoStepAuthenticatorNeedApp\" | i18n }}

\n
\n
    \n
  • \n {{ \"iosDevices\" | i18n }}:\n Authy\n
  • \n
  • \n {{ \"androidDevices\" | i18n }}:\n Authy\n
  • \n
  • \n {{ \"windowsDevices\" | i18n }}:\n Microsoft Authenticator\n
  • \n
\n

{{ \"twoStepAuthenticatorAppsRecommended\" | i18n }}

\n

\n 2. {{ \"twoStepAuthenticatorScanCode\" | i18n }}\n

\n
\n

\n
\n {{ key }}\n

\n \n \n \n \n
\n
\n \n \n
\n \n
\n
\n
\n","import { Directive, EventEmitter, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { VerificationType } from \"jslib-common/enums/verificationType\";\nimport { SecretVerificationRequest } from \"jslib-common/models/request/secretVerificationRequest\";\nimport { TwoFactorProviderRequest } from \"jslib-common/models/request/twoFactorProviderRequest\";\n\n@Directive()\nexport abstract class TwoFactorBaseComponent {\n @Output() onUpdated = new EventEmitter();\n\n type: TwoFactorProviderType;\n organizationId: string;\n twoFactorProviderType = TwoFactorProviderType;\n enabled = false;\n authed = false;\n\n protected hashedSecret: string;\n protected verificationType: VerificationType;\n\n constructor(\n protected apiService: ApiService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected logService: LogService,\n protected userVerificationService: UserVerificationService\n ) {}\n\n protected auth(authResponse: any) {\n this.hashedSecret = authResponse.secret;\n this.verificationType = authResponse.verificationType;\n this.authed = true;\n }\n\n protected async enable(enableFunction: () => Promise) {\n try {\n await enableFunction();\n this.onUpdated.emit(true);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected async disable(promise: Promise) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"twoStepDisableDesc\"),\n this.i18nService.t(\"disable\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n\n try {\n const request = await this.buildRequestModel(TwoFactorProviderRequest);\n request.type = this.type;\n if (this.organizationId != null) {\n promise = this.apiService.putTwoFactorOrganizationDisable(this.organizationId, request);\n } else {\n promise = this.apiService.putTwoFactorDisable(request);\n }\n await promise;\n this.enabled = false;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"twoStepDisabled\"));\n this.onUpdated.emit(false);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected async buildRequestModel(\n requestClass: new () => T\n ) {\n return this.userVerificationService.buildRequest(\n {\n secret: this.hashedSecret,\n type: this.verificationType,\n },\n requestClass,\n true\n );\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { UpdateTwoFactorDuoRequest } from \"jslib-common/models/request/updateTwoFactorDuoRequest\";\nimport { TwoFactorDuoResponse } from \"jslib-common/models/response/twoFactorDuoResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n@Component({\n selector: \"app-two-factor-duo\",\n templateUrl: \"two-factor-duo.component.html\",\n})\nexport class TwoFactorDuoComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Duo;\n ikey: string;\n skey: string;\n host: string;\n formPromise: Promise;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n userVerificationService: UserVerificationService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n protected async enable() {\n const request = await this.buildRequestModel(UpdateTwoFactorDuoRequest);\n request.integrationKey = this.ikey;\n request.secretKey = this.skey;\n request.host = this.host;\n\n return super.enable(async () => {\n if (this.organizationId != null) {\n this.formPromise = this.apiService.putTwoFactorOrganizationDuo(\n this.organizationId,\n request\n );\n } else {\n this.formPromise = this.apiService.putTwoFactorDuo(request);\n }\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private processResponse(response: TwoFactorDuoResponse) {\n this.ikey = response.integrationKey;\n this.skey = response.secretKey;\n this.host = response.host;\n this.enabled = response.enabled;\n }\n}\n","
\n
\n
\n
\n

\n {{ \"twoStepLogin\" | i18n }}\n Duo\n

\n \n ×\n \n
\n \n \n \n
\n \n \n {{ \"twoStepLoginProviderEnabled\" | i18n }}\n \n \"Duo\n {{ \"twoFactorDuoIntegrationKey\" | i18n }}: {{ ikey }}\n
\n {{ \"twoFactorDuoSecretKey\" | i18n }}: {{ skey }}\n
\n {{ \"twoFactorDuoApiHostname\" | i18n }}: {{ host }}\n
\n \n \"Duo\n

{{ \"twoFactorDuoDesc\" | i18n }}

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { TwoFactorEmailRequest } from \"jslib-common/models/request/twoFactorEmailRequest\";\nimport { UpdateTwoFactorEmailRequest } from \"jslib-common/models/request/updateTwoFactorEmailRequest\";\nimport { TwoFactorEmailResponse } from \"jslib-common/models/response/twoFactorEmailResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n@Component({\n selector: \"app-two-factor-email\",\n templateUrl: \"two-factor-email.component.html\",\n})\nexport class TwoFactorEmailComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Email;\n email: string;\n token: string;\n sentEmail: string;\n formPromise: Promise;\n emailPromise: Promise;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n userVerificationService: UserVerificationService,\n private stateService: StateService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n return this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n async sendEmail() {\n try {\n const request = await this.buildRequestModel(TwoFactorEmailRequest);\n request.email = this.email;\n this.emailPromise = this.apiService.postTwoFactorEmailSetup(request);\n await this.emailPromise;\n this.sentEmail = this.email;\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected async enable() {\n const request = await this.buildRequestModel(UpdateTwoFactorEmailRequest);\n request.email = this.email;\n request.token = this.token;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorEmail(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private async processResponse(response: TwoFactorEmailResponse) {\n this.token = null;\n this.email = response.email;\n this.enabled = response.enabled;\n if (!this.enabled && (this.email == null || this.email === \"\")) {\n this.email = await this.stateService.getEmail();\n }\n }\n}\n","
\n
\n
\n
\n

\n {{ \"twoStepLogin\" | i18n }}\n {{ \"emailTitle\" | i18n }}\n

\n \n ×\n \n
\n \n \n \n
\n \n \n {{ \"twoStepLoginProviderEnabled\" | i18n }}\n \n {{ \"email\" | i18n }}: {{ email }}\n \n \n

\n {{ \"twoFactorEmailDesc\" | i18n }}\n \"Email\n

\n
\n \n \n
\n
\n \n \n {{ \"sendEmail\" | i18n }}\n \n \n {{ \"verificationCodeEmailSent\" | i18n: sentEmail }}\n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { TwoFactorRecoverResponse } from \"jslib-common/models/response/twoFactorRescoverResponse\";\n\n@Component({\n selector: \"app-two-factor-recovery\",\n templateUrl: \"two-factor-recovery.component.html\",\n})\nexport class TwoFactorRecoveryComponent {\n type = -1;\n code: string;\n authed: boolean;\n twoFactorProviderType = TwoFactorProviderType;\n\n constructor(private i18nService: I18nService) {}\n\n auth(authResponse: any) {\n this.authed = true;\n this.processResponse(authResponse.response);\n }\n\n print() {\n const w = window.open();\n w.document.write(\n '
' +\n \"

\" +\n this.i18nService.t(\"twoFactorRecoveryYourCode\") +\n \":

\" +\n \"\" +\n this.code +\n \"
\" +\n '

' +\n new Date() +\n \"

\"\n );\n w.onafterprint = () => w.close();\n w.print();\n }\n\n private formatString(s: string) {\n if (s == null) {\n return null;\n }\n return s\n .replace(/(.{4})/g, \"$1 \")\n .trim()\n .toUpperCase();\n }\n\n private processResponse(response: TwoFactorRecoverResponse) {\n this.code = this.formatString(response.code);\n }\n}\n","
\n
\n
\n
\n

\n {{ \"twoStepLogin\" | i18n }}\n {{ \"recoveryCodeTitle\" | i18n }}\n

\n \n ×\n \n
\n \n \n \n
\n \n

{{ \"twoFactorRecoveryYourCode\" | i18n }}:

\n {{ code }}\n
\n \n {{ \"twoFactorRecoveryNoCode\" | i18n }}\n \n
\n
\n \n \n
\n
\n
\n
\n
\n","import { Component, OnInit, Type, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalRef } from \"jslib-angular/components/modal/modal.ref\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { TwoFactorProviders } from \"jslib-common/services/twoFactor.service\";\n\nimport { TwoFactorAuthenticatorComponent } from \"./two-factor-authenticator.component\";\nimport { TwoFactorDuoComponent } from \"./two-factor-duo.component\";\nimport { TwoFactorEmailComponent } from \"./two-factor-email.component\";\nimport { TwoFactorRecoveryComponent } from \"./two-factor-recovery.component\";\nimport { TwoFactorWebAuthnComponent } from \"./two-factor-webauthn.component\";\nimport { TwoFactorYubiKeyComponent } from \"./two-factor-yubikey.component\";\n\n@Component({\n selector: \"app-two-factor-setup\",\n templateUrl: \"two-factor-setup.component.html\",\n})\nexport class TwoFactorSetupComponent implements OnInit {\n @ViewChild(\"recoveryTemplate\", { read: ViewContainerRef, static: true })\n recoveryModalRef: ViewContainerRef;\n @ViewChild(\"authenticatorTemplate\", { read: ViewContainerRef, static: true })\n authenticatorModalRef: ViewContainerRef;\n @ViewChild(\"yubikeyTemplate\", { read: ViewContainerRef, static: true })\n yubikeyModalRef: ViewContainerRef;\n @ViewChild(\"duoTemplate\", { read: ViewContainerRef, static: true }) duoModalRef: ViewContainerRef;\n @ViewChild(\"emailTemplate\", { read: ViewContainerRef, static: true })\n emailModalRef: ViewContainerRef;\n @ViewChild(\"webAuthnTemplate\", { read: ViewContainerRef, static: true })\n webAuthnModalRef: ViewContainerRef;\n\n organizationId: string;\n providers: any[] = [];\n canAccessPremium: boolean;\n showPolicyWarning = false;\n loading = true;\n modal: ModalRef;\n\n constructor(\n protected apiService: ApiService,\n protected modalService: ModalService,\n protected messagingService: MessagingService,\n protected policyService: PolicyService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n\n for (const key in TwoFactorProviders) {\n // eslint-disable-next-line\n if (!TwoFactorProviders.hasOwnProperty(key)) {\n continue;\n }\n\n const p = (TwoFactorProviders as any)[key];\n if (this.filterProvider(p.type)) {\n continue;\n }\n\n this.providers.push({\n type: p.type,\n name: p.name,\n description: p.description,\n enabled: false,\n premium: p.premium,\n sort: p.sort,\n });\n }\n\n this.providers.sort((a: any, b: any) => a.sort - b.sort);\n await this.load();\n }\n\n async load() {\n this.loading = true;\n const providerList = await this.getTwoFactorProviders();\n providerList.data.forEach((p) => {\n this.providers.forEach((p2) => {\n if (p.type === p2.type) {\n p2.enabled = p.enabled;\n }\n });\n });\n this.evaluatePolicies();\n this.loading = false;\n }\n\n async manage(type: TwoFactorProviderType) {\n switch (type) {\n case TwoFactorProviderType.Authenticator: {\n const authComp = await this.openModal(\n this.authenticatorModalRef,\n TwoFactorAuthenticatorComponent\n );\n authComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Authenticator);\n });\n break;\n }\n case TwoFactorProviderType.Yubikey: {\n const yubiComp = await this.openModal(this.yubikeyModalRef, TwoFactorYubiKeyComponent);\n yubiComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Yubikey);\n });\n break;\n }\n case TwoFactorProviderType.Duo: {\n const duoComp = await this.openModal(this.duoModalRef, TwoFactorDuoComponent);\n duoComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Duo);\n });\n break;\n }\n case TwoFactorProviderType.Email: {\n const emailComp = await this.openModal(this.emailModalRef, TwoFactorEmailComponent);\n emailComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Email);\n });\n break;\n }\n case TwoFactorProviderType.WebAuthn: {\n const webAuthnComp = await this.openModal(\n this.webAuthnModalRef,\n TwoFactorWebAuthnComponent\n );\n webAuthnComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.WebAuthn);\n });\n break;\n }\n default:\n break;\n }\n }\n\n recoveryCode() {\n this.openModal(this.recoveryModalRef, TwoFactorRecoveryComponent);\n }\n\n async premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n\n protected getTwoFactorProviders() {\n return this.apiService.getTwoFactorProviders();\n }\n\n protected filterProvider(type: TwoFactorProviderType) {\n return type === TwoFactorProviderType.OrganizationDuo;\n }\n\n protected async openModal(ref: ViewContainerRef, type: Type): Promise {\n const [modal, childComponent] = await this.modalService.openViewRef(type, ref);\n this.modal = modal;\n\n return childComponent;\n }\n\n protected updateStatus(enabled: boolean, type: TwoFactorProviderType) {\n if (!enabled && this.modal != null) {\n this.modal.close();\n }\n this.providers.forEach((p) => {\n if (p.type === type) {\n p.enabled = enabled;\n }\n });\n this.evaluatePolicies();\n }\n\n private async evaluatePolicies() {\n if (this.organizationId == null && this.providers.filter((p) => p.enabled).length === 1) {\n this.showPolicyWarning = await this.policyService.policyAppliesToUser(\n PolicyType.TwoFactorAuthentication\n );\n } else {\n this.showPolicyWarning = false;\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { VerificationType } from \"jslib-common/enums/verificationType\";\nimport { SecretVerificationRequest } from \"jslib-common/models/request/secretVerificationRequest\";\nimport { TwoFactorAuthenticatorResponse } from \"jslib-common/models/response/twoFactorAuthenticatorResponse\";\nimport { TwoFactorDuoResponse } from \"jslib-common/models/response/twoFactorDuoResponse\";\nimport { TwoFactorEmailResponse } from \"jslib-common/models/response/twoFactorEmailResponse\";\nimport { TwoFactorRecoverResponse } from \"jslib-common/models/response/twoFactorRescoverResponse\";\nimport { TwoFactorWebAuthnResponse } from \"jslib-common/models/response/twoFactorWebAuthnResponse\";\nimport { TwoFactorYubiKeyResponse } from \"jslib-common/models/response/twoFactorYubiKeyResponse\";\nimport { Verification } from \"jslib-common/types/verification\";\n\ntype TwoFactorResponse =\n | TwoFactorRecoverResponse\n | TwoFactorDuoResponse\n | TwoFactorEmailResponse\n | TwoFactorWebAuthnResponse\n | TwoFactorAuthenticatorResponse\n | TwoFactorYubiKeyResponse;\n\n@Component({\n selector: \"app-two-factor-verify\",\n templateUrl: \"two-factor-verify.component.html\",\n})\nexport class TwoFactorVerifyComponent {\n @Input() type: TwoFactorProviderType;\n @Input() organizationId: string;\n @Output() onAuthed = new EventEmitter();\n\n secret: Verification;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private logService: LogService,\n private userVerificationService: UserVerificationService\n ) {}\n\n async submit() {\n let hashedSecret: string;\n\n try {\n this.formPromise = this.userVerificationService.buildRequest(this.secret).then((request) => {\n hashedSecret =\n this.secret.type === VerificationType.MasterPassword\n ? request.masterPasswordHash\n : request.otp;\n return this.apiCall(request);\n });\n\n const response = await this.formPromise;\n this.onAuthed.emit({\n response: response,\n secret: hashedSecret,\n verificationType: this.secret.type,\n });\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private apiCall(request: SecretVerificationRequest): Promise {\n switch (this.type) {\n case -1 as TwoFactorProviderType:\n return this.apiService.getTwoFactorRecover(request);\n case TwoFactorProviderType.Duo:\n case TwoFactorProviderType.OrganizationDuo:\n if (this.organizationId != null) {\n return this.apiService.getTwoFactorOrganizationDuo(this.organizationId, request);\n } else {\n return this.apiService.getTwoFactorDuo(request);\n }\n case TwoFactorProviderType.Email:\n return this.apiService.getTwoFactorEmail(request);\n case TwoFactorProviderType.WebAuthn:\n return this.apiService.getTwoFactorWebAuthn(request);\n case TwoFactorProviderType.Authenticator:\n return this.apiService.getTwoFactorAuthenticator(request);\n case TwoFactorProviderType.Yubikey:\n return this.apiService.getTwoFactorYubiKey(request);\n }\n }\n}\n","
\n
\n

{{ \"twoStepLoginAuthDesc\" | i18n }}

\n \n \n
\n
\n \n \n
\n
\n","import { Component, NgZone } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { SecretVerificationRequest } from \"jslib-common/models/request/secretVerificationRequest\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"jslib-common/models/request/updateTwoFactorWebAuthnDeleteRequest\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"jslib-common/models/request/updateTwoFactorWebAuthnRequest\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"jslib-common/models/response/twoFactorWebAuthnResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n@Component({\n selector: \"app-two-factor-webauthn\",\n templateUrl: \"two-factor-webauthn.component.html\",\n})\nexport class TwoFactorWebAuthnComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.WebAuthn;\n name: string;\n keys: any[];\n keyIdAvailable: number = null;\n keysConfiguredCount = 0;\n webAuthnError: boolean;\n webAuthnListening: boolean;\n webAuthnResponse: PublicKeyCredential;\n challengePromise: Promise;\n formPromise: Promise;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n private ngZone: NgZone,\n logService: LogService,\n userVerificationService: UserVerificationService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n async submit() {\n if (this.webAuthnResponse == null || this.keyIdAvailable == null) {\n // Should never happen.\n return Promise.reject();\n }\n const request = await this.buildRequestModel(UpdateTwoFactorWebAuthnRequest);\n request.deviceResponse = this.webAuthnResponse;\n request.id = this.keyIdAvailable;\n request.name = this.name;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorWebAuthn(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n disable() {\n return super.disable(this.formPromise);\n }\n\n async remove(key: any) {\n if (this.keysConfiguredCount <= 1 || key.removePromise != null) {\n return;\n }\n const name = key.name != null ? key.name : this.i18nService.t(\"webAuthnkeyX\", key.id);\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removeU2fConfirmation\"),\n name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n const request = await this.buildRequestModel(UpdateTwoFactorWebAuthnDeleteRequest);\n request.id = key.id;\n try {\n key.removePromise = this.apiService.deleteTwoFactorWebAuthn(request);\n const response = await key.removePromise;\n key.removePromise = null;\n await this.processResponse(response);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async readKey() {\n if (this.keyIdAvailable == null) {\n return;\n }\n const request = await this.buildRequestModel(SecretVerificationRequest);\n try {\n this.challengePromise = this.apiService.getTwoFactorWebAuthnChallenge(request);\n const challenge = await this.challengePromise;\n this.readDevice(challenge);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private readDevice(webAuthnChallenge: ChallengeResponse) {\n // eslint-disable-next-line\n console.log(\"listening for key...\");\n this.resetWebAuthn(true);\n\n navigator.credentials\n .create({\n publicKey: webAuthnChallenge,\n })\n .then((data: PublicKeyCredential) => {\n this.ngZone.run(() => {\n this.webAuthnListening = false;\n this.webAuthnResponse = data;\n });\n })\n .catch((err) => {\n // eslint-disable-next-line\n console.error(err);\n this.resetWebAuthn(false);\n // TODO: Should we display the actual error?\n this.webAuthnError = true;\n });\n }\n\n private resetWebAuthn(listening = false) {\n this.webAuthnResponse = null;\n this.webAuthnError = false;\n this.webAuthnListening = listening;\n }\n\n private processResponse(response: TwoFactorWebAuthnResponse) {\n this.resetWebAuthn();\n this.keys = [];\n this.keyIdAvailable = null;\n this.name = null;\n this.keysConfiguredCount = 0;\n for (let i = 1; i <= 5; i++) {\n if (response.keys != null) {\n const key = response.keys.filter((k) => k.id === i);\n if (key.length > 0) {\n this.keysConfiguredCount++;\n this.keys.push({\n id: i,\n name: key[0].name,\n configured: true,\n migrated: key[0].migrated,\n removePromise: null,\n });\n continue;\n }\n }\n this.keys.push({ id: i, name: null, configured: false, removePromise: null });\n if (this.keyIdAvailable == null) {\n this.keyIdAvailable = i;\n }\n }\n this.enabled = response.enabled;\n }\n}\n","
\n
\n
\n
\n

\n {{ \"twoStepLogin\" | i18n }}\n {{ \"webAuthnTitle\" | i18n }}\n

\n \n ×\n \n
\n \n \n \n
\n \n {{ \"twoStepLoginProviderEnabled\" | i18n }}\n \n \n

{{ \"twoFactorWebAuthnWarning\" | i18n }}

\n
    \n
  • {{ \"twoFactorWebAuthnSupportWeb\" | i18n }}
  • \n
\n
\n \"FIDO2\n
    \n \n \n {{ \"webAuthnkeyX\" | i18n: i + 1 }}\n {{ k.name }}\n \n \n {{ \"webAuthnMigrated\" | i18n }}\n \n \n 1 && k.configured\">\n \n -\n {{ \"remove\" | i18n }}\n \n \n
\n
\n

{{ \"twoFactorWebAuthnAdd\" | i18n }}:

\n
    \n
  1. {{ \"twoFactorU2fGiveName\" | i18n }}
  2. \n
  3. {{ \"twoFactorU2fPlugInReadKey\" | i18n }}
  4. \n
  5. {{ \"twoFactorU2fTouchButton\" | i18n }}
  6. \n
  7. {{ \"twoFactorU2fSaveForm\" | i18n }}
  8. \n
\n
\n
\n \n \n
\n
\n \n {{ \"readKey\" | i18n }}\n \n \n \n \n \n \n \n {{ \"twoFactorU2fWaiting\" | i18n }}...\n \n \n \n {{ \"twoFactorU2fClickSave\" | i18n }}\n \n \n \n {{ \"twoFactorU2fProblemReadingTryAgain\" | i18n }}\n \n \n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n \n {{ \"disableAllKeys\" | i18n }}\n \n \n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"jslib-common/models/request/updateTwoFactorYubioOtpRequest\";\nimport { TwoFactorYubiKeyResponse } from \"jslib-common/models/response/twoFactorYubiKeyResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n@Component({\n selector: \"app-two-factor-yubikey\",\n templateUrl: \"two-factor-yubikey.component.html\",\n})\nexport class TwoFactorYubiKeyComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Yubikey;\n keys: any[];\n nfc = false;\n\n formPromise: Promise;\n disablePromise: Promise;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n userVerificationService: UserVerificationService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n async submit() {\n const request = await this.buildRequestModel(UpdateTwoFactorYubioOtpRequest);\n request.key1 = this.keys != null && this.keys.length > 0 ? this.keys[0].key : null;\n request.key2 = this.keys != null && this.keys.length > 1 ? this.keys[1].key : null;\n request.key3 = this.keys != null && this.keys.length > 2 ? this.keys[2].key : null;\n request.key4 = this.keys != null && this.keys.length > 3 ? this.keys[3].key : null;\n request.key5 = this.keys != null && this.keys.length > 4 ? this.keys[4].key : null;\n request.nfc = this.nfc;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorYubiKey(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"yubikeysUpdated\"));\n });\n }\n\n disable() {\n return super.disable(this.disablePromise);\n }\n\n remove(key: any) {\n key.existingKey = null;\n key.key = null;\n }\n\n private processResponse(response: TwoFactorYubiKeyResponse) {\n this.enabled = response.enabled;\n this.keys = [\n { key: response.key1, existingKey: this.padRight(response.key1) },\n { key: response.key2, existingKey: this.padRight(response.key2) },\n { key: response.key3, existingKey: this.padRight(response.key3) },\n { key: response.key4, existingKey: this.padRight(response.key4) },\n { key: response.key5, existingKey: this.padRight(response.key5) },\n ];\n this.nfc = response.nfc || !response.enabled;\n }\n\n private padRight(str: string, character = \"•\", size = 44) {\n if (str == null || character == null || str.length >= size) {\n return str;\n }\n const max = (size - str.length) / character.length;\n for (let i = 0; i < max; i++) {\n str += character;\n }\n return str;\n }\n}\n","
\n
\n
\n
\n

\n {{ \"twoStepLogin\" | i18n }}\n YubiKey\n

\n \n ×\n \n
\n \n \n \n
\n \n {{ \"twoStepLoginProviderEnabled\" | i18n }}\n \n \n

{{ \"twoFactorYubikeyWarning\" | i18n }}

\n
    \n
  • {{ \"twoFactorYubikeySupportUsb\" | i18n }}
  • \n
  • {{ \"twoFactorYubikeySupportMobile\" | i18n }}
  • \n
\n
\n \"YubiKey\n

{{ \"twoFactorYubikeyAdd\" | i18n }}:

\n
    \n
  1. {{ \"twoFactorYubikeyPlugIn\" | i18n }}
  2. \n
  3. {{ \"twoFactorYubikeySelectKey\" | i18n }}
  4. \n
  5. {{ \"twoFactorYubikeyTouchButton\" | i18n }}
  6. \n
  7. {{ \"twoFactorYubikeySaveForm\" | i18n }}
  8. \n
\n
\n
\n
\n \n \n
\n {{ k.existingKey }}\n \n \n \n
\n
\n
\n {{ \"nfcSupport\" | i18n }}\n
\n \n \n
\n {{ \"twoFactorYubikeySupportsNfcDesc\" | i18n }}\n
\n
\n \n \n \n {{ \"disableAllKeys\" | i18n }}\n \n \n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { CipherWithIdRequest } from \"jslib-common/models/request/cipherWithIdRequest\";\nimport { FolderWithIdRequest } from \"jslib-common/models/request/folderWithIdRequest\";\nimport { UpdateKeyRequest } from \"jslib-common/models/request/updateKeyRequest\";\n\n@Component({\n selector: \"app-update-key\",\n templateUrl: \"update-key.component.html\",\n})\nexport class UpdateKeyComponent {\n masterPassword: string;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private syncService: SyncService,\n private folderService: FolderService,\n private cipherService: CipherService,\n private logService: LogService\n ) {}\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (hasEncKey) {\n return;\n }\n\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return;\n }\n\n try {\n this.formPromise = this.makeRequest().then((request) => {\n return this.apiService.postAccountKey(request);\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"keyUpdated\"),\n this.i18nService.t(\"logBackInOthersToo\"),\n { timeout: 15000 }\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private async makeRequest(): Promise {\n const key = await this.cryptoService.getKey();\n const encKey = await this.cryptoService.makeEncKey(key);\n const privateKey = await this.cryptoService.getPrivateKey();\n let encPrivateKey: EncString = null;\n if (privateKey != null) {\n encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n }\n const request = new UpdateKeyRequest();\n request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n\n await this.syncService.fullSync(true);\n\n const folders = await this.folderService.getAllDecrypted();\n for (let i = 0; i < folders.length; i++) {\n if (folders[i].id == null) {\n continue;\n }\n const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n request.folders.push(new FolderWithIdRequest(folder));\n }\n\n const ciphers = await this.cipherService.getAllDecrypted();\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId != null) {\n continue;\n }\n const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n request.ciphers.push(new CipherWithIdRequest(cipher));\n }\n\n return request;\n }\n}\n","
\n
\n \n
\n

{{ \"updateEncryptionKey\" | i18n }}

\n \n ×\n \n
\n
\n

\n {{ \"updateEncryptionKeyShortDesc\" | i18n }} {{ \"updateEncryptionKeyDesc\" | i18n }}\n {{ \"learnMore\" | i18n }}\n

\n {{ \"updateEncryptionKeyWarning\" | i18n }}\n \n \n
\n
\n \n \n
\n \n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-update-license\",\n templateUrl: \"update-license.component.html\",\n})\nexport class UpdateLicenseComponent {\n @Input() organizationId: string;\n @Output() onUpdated = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async submit() {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n try {\n const fd = new FormData();\n fd.append(\"license\", files[0]);\n\n let updatePromise: Promise = null;\n if (this.organizationId == null) {\n updatePromise = this.apiService.postAccountLicense(fd);\n } else {\n updatePromise = this.apiService.postOrganizationLicenseUpdate(this.organizationId, fd);\n }\n\n this.formPromise = updatePromise.then(() => {\n return this.apiService.refreshIdentityToken();\n });\n\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"updatedLicense\"));\n this.onUpdated.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","
\n
\n \n \n {{\n \"licenseFileDesc\"\n | i18n\n : (!organizationId\n ? \"bitwarden_premium_license.json\"\n : \"bitwarden_organization_license.json\")\n }}\n
\n \n \n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PaymentMethodType } from \"jslib-common/enums/paymentMethodType\";\nimport { TransactionType } from \"jslib-common/enums/transactionType\";\nimport { VerifyBankRequest } from \"jslib-common/models/request/verifyBankRequest\";\nimport { BillingResponse } from \"jslib-common/models/response/billingResponse\";\n\n@Component({\n selector: \"app-user-billing\",\n templateUrl: \"user-billing.component.html\",\n})\nexport class UserBillingComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n showAdjustPayment = false;\n showAddCredit = false;\n billing: BillingResponse;\n paymentMethodType = PaymentMethodType;\n transactionType = TransactionType;\n organizationId: string;\n verifyAmount1: number;\n verifyAmount2: number;\n\n verifyBankPromise: Promise;\n\n constructor(\n protected apiService: ApiService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.load();\n this.firstLoaded = true;\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n this.loading = true;\n if (this.organizationId != null) {\n this.billing = await this.apiService.getOrganizationBilling(this.organizationId);\n } else {\n this.billing = await this.apiService.getUserBilling();\n }\n this.loading = false;\n }\n\n async verifyBank() {\n if (this.loading) {\n return;\n }\n\n try {\n const request = new VerifyBankRequest();\n request.amount1 = this.verifyAmount1;\n request.amount2 = this.verifyAmount2;\n this.verifyBankPromise = this.apiService.postOrganizationVerifyBank(\n this.organizationId,\n request\n );\n await this.verifyBankPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"verifiedBankAccount\")\n );\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n addCredit() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"cannotPerformInAppPurchase\"),\n this.i18nService.t(\"addCredit\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n this.showAddCredit = true;\n }\n\n closeAddCredit(load: boolean) {\n this.showAddCredit = false;\n if (load) {\n this.load();\n }\n }\n\n changePayment() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"cannotPerformInAppPurchase\"),\n this.i18nService.t(\"changePaymentMethod\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n this.showAdjustPayment = true;\n }\n\n closePayment(load: boolean) {\n this.showAdjustPayment = false;\n if (load) {\n this.load();\n }\n }\n\n get isCreditBalance() {\n return this.billing == null || this.billing.balance <= 0;\n }\n\n get creditOrBalance() {\n return Math.abs(this.billing != null ? this.billing.balance : 0);\n }\n\n get paymentSource() {\n return this.billing != null ? this.billing.paymentSource : null;\n }\n\n get paymentSourceInApp() {\n return (\n this.paymentSource != null &&\n (this.paymentSource.type === PaymentMethodType.AppleInApp ||\n this.paymentSource.type === PaymentMethodType.GoogleInApp)\n );\n }\n\n get invoices() {\n return this.billing != null ? this.billing.invoices : null;\n }\n\n get transactions() {\n return this.billing != null ? this.billing.transactions : null;\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { TokenService } from \"jslib-common/abstractions/token.service\";\nimport { SubscriptionResponse } from \"jslib-common/models/response/subscriptionResponse\";\n\n@Component({\n selector: \"app-user-subscription\",\n templateUrl: \"user-subscription.component.html\",\n})\nexport class UserSubscriptionComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n adjustStorageAdd = true;\n showAdjustStorage = false;\n showUpdateLicense = false;\n sub: SubscriptionResponse;\n selfHosted = false;\n\n cancelPromise: Promise;\n reinstatePromise: Promise;\n\n constructor(\n private tokenService: TokenService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private router: Router,\n private logService: LogService\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n await this.load();\n this.firstLoaded = true;\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n\n if (this.tokenService.getPremium()) {\n this.loading = true;\n this.sub = await this.apiService.getUserSubscription();\n } else {\n this.router.navigate([\"/settings/premium\"]);\n return;\n }\n\n this.loading = false;\n }\n\n async reinstate() {\n if (this.loading) {\n return;\n }\n\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"manageSubscriptionFromStore\"),\n this.i18nService.t(\"cancelSubscription\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"reinstateConfirmation\"),\n this.i18nService.t(\"reinstateSubscription\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"cancel\")\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.reinstatePromise = this.apiService.postReinstatePremium();\n await this.reinstatePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"reinstated\"));\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async cancel() {\n if (this.loading) {\n return;\n }\n\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"manageSubscriptionFromStore\"),\n this.i18nService.t(\"cancelSubscription\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"cancelConfirmation\"),\n this.i18nService.t(\"cancelSubscription\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.cancelPromise = this.apiService.postCancelPremium();\n await this.cancelPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"canceledSubscription\")\n );\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n downloadLicense() {\n if (this.loading) {\n return;\n }\n\n const licenseString = JSON.stringify(this.sub.license, null, 2);\n this.platformUtilsService.saveFile(\n window,\n licenseString,\n null,\n \"bitwarden_premium_license.json\"\n );\n }\n\n updateLicense() {\n if (this.loading) {\n return;\n }\n this.showUpdateLicense = true;\n }\n\n closeUpdateLicense(load: boolean) {\n this.showUpdateLicense = false;\n if (load) {\n this.load();\n }\n }\n\n adjustStorage(add: boolean) {\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"cannotPerformInAppPurchase\"),\n this.i18nService.t(add ? \"addStorage\" : \"removeStorage\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n this.adjustStorageAdd = add;\n this.showAdjustStorage = true;\n }\n\n closeStorage(load: boolean) {\n this.showAdjustStorage = false;\n if (load) {\n this.load();\n }\n }\n\n get subscriptionMarkedForCancel() {\n return (\n this.subscription != null && !this.subscription.cancelled && this.subscription.cancelAtEndDate\n );\n }\n\n get subscription() {\n return this.sub != null ? this.sub.subscription : null;\n }\n\n get nextInvoice() {\n return this.sub != null ? this.sub.upcomingInvoice : null;\n }\n\n get storagePercentage() {\n return this.sub != null && this.sub.maxStorageGb\n ? +(100 * (this.sub.storageGb / this.sub.maxStorageGb)).toFixed(2)\n : 0;\n }\n\n get storageProgressWidth() {\n return this.storagePercentage < 5 ? 5 : 0;\n }\n\n get usingInAppPurchase() {\n return this.sub != null ? this.sub.usingInAppPurchase : false;\n }\n}\n","
\n

\n {{ \"premiumMembership\" | i18n }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n \n {{ \"subscriptionCanceled\" | i18n }}\n \n

{{ \"subscriptionPendingCanceled\" | i18n }}

\n \n \n {{ \"reinstateSubscription\" | i18n }}\n \n \n
\n
{{ \"expiration\" | i18n }}
\n
{{ sub.expiration | date: \"mediumDate\" }}
\n
{{ \"neverExpires\" | i18n }}
\n
\n
\n
\n
\n
{{ \"status\" | i18n }}
\n
\n {{ (subscription && subscription.status) || \"-\" }}\n {{\n \"pendingCancellation\" | i18n\n }}\n
\n
{{ \"nextCharge\" | i18n }}
\n
\n {{\n nextInvoice\n ? (nextInvoice.date | date: \"mediumDate\") +\n \", \" +\n (nextInvoice.amount | currency: \"$\")\n : \"-\"\n }}\n
\n
\n
\n
\n {{ \"details\" | i18n }}\n \n \n \n \n \n \n \n
\n {{ i.name }} {{ i.quantity > 1 ? \"×\" + i.quantity : \"\" }} @\n {{ i.amount | currency: \"$\" }}\n {{ i.quantity * i.amount | currency: \"$\" }} /{{ i.interval | i18n }}
\n
\n
\n \n
\n \n \n {{ \"manageSubscription\" | i18n }}\n \n
\n
\n
\n \n ×\n \n

{{ \"updateLicense\" | i18n }}

\n \n \n
\n
\n
\n \n
\n \n {{ \"downloadLicense\" | i18n }}\n \n \n \n {{ \"cancelSubscription\" | i18n }}\n \n
\n

{{ \"storage\" | i18n }}

\n

{{ \"subscriptionStorage\" | i18n: sub.maxStorageGb || 0:sub.storageName || \"0 MB\" }}

\n
\n \n {{ storagePercentage / 100 | percent }}\n
\n \n \n
\n
\n \n \n {{ \"removeStorage\" | i18n }}\n \n
\n \n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\nimport { VaultTimeoutInputComponent as VaultTimeoutInputComponentBase } from \"jslib-angular/components/settings/vault-timeout-input.component\";\n\n@Component({\n selector: \"app-vault-timeout-input\",\n templateUrl: \"vault-timeout-input.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: VaultTimeoutInputComponent,\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: VaultTimeoutInputComponent,\n },\n ],\n})\nexport class VaultTimeoutInputComponent extends VaultTimeoutInputComponentBase {}\n","\n {{ \"vaultTimeoutPolicyInEffect\" | i18n: vaultTimeoutPolicyHours:vaultTimeoutPolicyMinutes }}\n\n\n
\n
\n \n \n \n \n {{ \"vaultTimeoutDesc\" | i18n }}\n
\n
\n \n
\n
\n \n {{ \"hours\" | i18n }}\n
\n
\n \n {{ \"minutes\" | i18n }}\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-verify-email\",\n templateUrl: \"verify-email.component.html\",\n})\nexport class VerifyEmailComponent {\n actionPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async send() {\n if (this.actionPromise != null) {\n return;\n }\n try {\n this.actionPromise = this.apiService.postAccountVerifyEmail();\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"checkInboxForVerification\")\n );\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n}\n","
\n
\n {{ \"verifyEmail\" | i18n }}\n
\n
\n

{{ \"verifyEmailDesc\" | i18n }}

\n \n \n \n {{ \"sendEmail\" | i18n }}\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { ExportComponent as BaseExportComponent } from \"jslib-angular/components/export.component\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { ExportService } from \"jslib-common/abstractions/export.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\n\n@Component({\n selector: \"app-export\",\n templateUrl: \"export.component.html\",\n})\nexport class ExportComponent extends BaseExportComponent {\n organizationId: string;\n\n constructor(\n cryptoService: CryptoService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n exportService: ExportService,\n eventService: EventService,\n policyService: PolicyService,\n logService: LogService,\n userVerificationService: UserVerificationService,\n formBuilder: FormBuilder\n ) {\n super(\n cryptoService,\n i18nService,\n platformUtilsService,\n exportService,\n eventService,\n policyService,\n window,\n logService,\n userVerificationService,\n formBuilder\n );\n }\n\n protected saved() {\n super.saved();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"exportSuccess\"));\n }\n}\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { GeneratorComponent as BaseGeneratorComponent } from \"jslib-angular/components/generator.component\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UsernameGenerationService } from \"jslib-common/abstractions/usernameGeneration.service\";\n\nimport { PasswordGeneratorHistoryComponent } from \"./password-generator-history.component\";\n\n@Component({\n selector: \"app-generator\",\n templateUrl: \"generator.component.html\",\n})\nexport class GeneratorComponent extends BaseGeneratorComponent {\n @ViewChild(\"historyTemplate\", { read: ViewContainerRef, static: true })\n historyModalRef: ViewContainerRef;\n\n constructor(\n passwordGenerationService: PasswordGenerationService,\n usernameGenerationService: UsernameGenerationService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n route: ActivatedRoute,\n private modalService: ModalService\n ) {\n super(\n passwordGenerationService,\n usernameGenerationService,\n platformUtilsService,\n stateService,\n i18nService,\n route,\n window\n );\n }\n\n async history() {\n await this.modalService.openViewRef(PasswordGeneratorHistoryComponent, this.historyModalRef);\n }\n\n lengthChanged() {\n document.getElementById(\"length\").focus();\n }\n\n minNumberChanged() {\n document.getElementById(\"min-number\").focus();\n }\n\n minSpecialChanged() {\n document.getElementById(\"min-special\").focus();\n }\n}\n","
\n

{{ \"generator\" | i18n }}

\n
\n\n {{ \"passwordGeneratorPolicyInEffect\" | i18n }}\n\n
\n
\n
\n
\n \n\n
\n \n
\n \n \n
\n
\n\n
\n \n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n \n
\n
\n
\n\n
\n
\n \n \n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n\n","import { Component, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport * as JSZip from \"jszip\";\nimport Swal, { SweetAlertIcon } from \"sweetalert2\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { ImportService } from \"jslib-common/abstractions/import.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { ImportOption, ImportType } from \"jslib-common/enums/importOptions\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\n@Component({\n selector: \"app-import\",\n templateUrl: \"import.component.html\",\n})\nexport class ImportComponent implements OnInit {\n featuredImportOptions: ImportOption[];\n importOptions: ImportOption[];\n format: ImportType = null;\n fileContents: string;\n formPromise: Promise;\n loading = false;\n importBlockedByPolicy = false;\n\n protected organizationId: string = null;\n protected successNavigate: any[] = [\"vault\"];\n\n constructor(\n protected i18nService: I18nService,\n protected importService: ImportService,\n protected router: Router,\n protected platformUtilsService: PlatformUtilsService,\n protected policyService: PolicyService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.setImportOptions();\n\n this.importBlockedByPolicy = await this.policyService.policyAppliesToUser(\n PolicyType.PersonalOwnership\n );\n }\n\n async submit() {\n if (this.importBlockedByPolicy) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"personalOwnershipPolicyInEffectImports\")\n );\n return;\n }\n\n this.loading = true;\n\n const importer = this.importService.getImporter(this.format, this.organizationId);\n if (importer === null) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFormat\")\n );\n this.loading = false;\n return;\n }\n\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (\n (files == null || files.length === 0) &&\n (this.fileContents == null || this.fileContents === \"\")\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n this.loading = false;\n return;\n }\n\n let fileContents = this.fileContents;\n if (files != null && files.length > 0) {\n try {\n const content = await this.getFileContents(files[0]);\n if (content != null) {\n fileContents = content;\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n if (fileContents == null || fileContents === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n this.loading = false;\n return;\n }\n\n try {\n this.formPromise = this.importService.import(importer, fileContents, this.organizationId);\n const error = await this.formPromise;\n if (error != null) {\n this.error(error);\n this.loading = false;\n return;\n }\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"importSuccess\"));\n this.router.navigate(this.successNavigate);\n } catch (e) {\n this.logService.error(e);\n }\n\n this.loading = false;\n }\n\n getFormatInstructionTitle() {\n if (this.format == null) {\n return null;\n }\n\n const results = this.featuredImportOptions\n .concat(this.importOptions)\n .filter((o) => o.id === this.format);\n if (results.length > 0) {\n return this.i18nService.t(\"instructionsFor\", results[0].name);\n }\n return null;\n }\n\n protected setImportOptions() {\n this.featuredImportOptions = [\n {\n id: null,\n name: \"-- \" + this.i18nService.t(\"select\") + \" --\",\n },\n ...this.importService.featuredImportOptions,\n ];\n this.importOptions = [...this.importService.regularImportOptions].sort((a, b) => {\n if (a.name == null && b.name != null) {\n return -1;\n }\n if (a.name != null && b.name == null) {\n return 1;\n }\n if (a.name == null && b.name == null) {\n return 0;\n }\n\n return this.i18nService.collator\n ? this.i18nService.collator.compare(a.name, b.name)\n : a.name.localeCompare(b.name);\n });\n }\n\n private async error(error: Error) {\n await Swal.fire({\n heightAuto: false,\n buttonsStyling: false,\n icon: \"error\" as SweetAlertIcon,\n iconHtml: ``,\n input: \"textarea\",\n inputValue: error.message,\n inputAttributes: {\n readonly: \"true\",\n },\n titleText: this.i18nService.t(\"importError\"),\n text: this.i18nService.t(\"importErrorDesc\"),\n showConfirmButton: true,\n confirmButtonText: this.i18nService.t(\"ok\"),\n onOpen: (popupEl) => {\n popupEl.querySelector(\".swal2-textarea\").scrollTo(0, 0);\n },\n });\n }\n\n private getFileContents(file: File): Promise {\n if (this.format === \"1password1pux\") {\n return this.extract1PuxContent(file);\n }\n\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsText(file, \"utf-8\");\n reader.onload = (evt) => {\n if (this.format === \"lastpasscsv\" && file.type === \"text/html\") {\n const parser = new DOMParser();\n const doc = parser.parseFromString((evt.target as any).result, \"text/html\");\n const pre = doc.querySelector(\"pre\");\n if (pre != null) {\n resolve(pre.textContent);\n return;\n }\n reject();\n return;\n }\n\n resolve((evt.target as any).result);\n };\n reader.onerror = () => {\n reject();\n };\n });\n }\n\n private extract1PuxContent(file: File): Promise {\n return new JSZip()\n .loadAsync(file)\n .then((zip) => {\n return zip.file(\"export.data\").async(\"string\");\n })\n .then(\n function success(content) {\n return content;\n },\n function error(e) {\n return \"\";\n }\n );\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { PasswordGeneratorHistoryComponent as BasePasswordGeneratorHistoryComponent } from \"jslib-angular/components/password-generator-history.component\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-password-generator-history\",\n templateUrl: \"password-generator-history.component.html\",\n})\nexport class PasswordGeneratorHistoryComponent extends BasePasswordGeneratorHistoryComponent {\n constructor(\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService\n ) {\n super(passwordGenerationService, platformUtilsService, i18nService, window);\n }\n}\n","
\n
\n
\n
\n

{{ \"passwordHistory\" | i18n }}

\n \n ×\n \n
\n
\n
    \n
  • \n
    \n
    \n {{ h.date | date: \"medium\" }}\n
\n
\n \n \n \n
\n \n \n
\n
\n {{ \"noPasswordsInList\" | i18n }}\n
\n
\n \n
\n \n \n \n
\n
\n
\n
\n\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Component({\n selector: \"app-tools\",\n templateUrl: \"tools.component.html\",\n})\nexport class ToolsComponent implements OnInit {\n canAccessPremium = false;\n\n constructor(private stateService: StateService, private messagingService: MessagingService) {}\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n}\n","
\n \n
\n","import { Component, Input } from \"@angular/core\";\n\nimport { AddEditCustomFieldsComponent as BaseAddEditCustomFieldsComponent } from \"jslib-angular/components/add-edit-custom-fields.component\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\n\n@Component({\n selector: \"app-vault-add-edit-custom-fields\",\n templateUrl: \"add-edit-custom-fields.component.html\",\n})\nexport class AddEditCustomFieldsComponent extends BaseAddEditCustomFieldsComponent {\n @Input() viewOnly: boolean;\n @Input() copy: (value: string, typeI18nKey: string, aType: string) => void;\n\n constructor(i18nService: I18nService, eventService: EventService) {\n super(i18nService, eventService);\n }\n}\n","\n

{{ \"customFields\" | i18n }}

\n
\n \n
\n
\n \n \n \n \n
\n \n
\n
\n \n
\n \n
\n \n
\n \n \n \n
\n
\n \n
\n \n
\n \n \n \n \n \n \n \n
\n
\n \n
\n \n \n \n
\n
\n \n \n
\n \n \n \n \n \n \n
\n
\n
\n \n \n \n {{ \"newCustomField\" | i18n }}\n \n
\n
\n \n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"jslib-angular/components/add-edit.component\";\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TotpService } from \"jslib-common/abstractions/totp.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { EventType } from \"jslib-common/enums/eventType\";\nimport { LoginUriView } from \"jslib-common/models/view/loginUriView\";\n\n@Component({\n selector: \"app-vault-add-edit\",\n templateUrl: \"add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n canAccessPremium: boolean;\n totpCode: string;\n totpCodeFormatted: string;\n totpDash: number;\n totpSec: number;\n totpLow: boolean;\n showRevisionDate = false;\n hasPasswordHistory = false;\n viewingPasswordHistory = false;\n viewOnly = false;\n\n protected totpInterval: number;\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n protected totpService: TotpService,\n protected passwordGenerationService: PasswordGenerationService,\n protected messagingService: MessagingService,\n eventService: EventService,\n protected policyService: PolicyService,\n organizationService: OrganizationService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n messagingService,\n eventService,\n policyService,\n logService,\n passwordRepromptService,\n organizationService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n this.showRevisionDate = this.cipher.passwordRevisionDisplayDate != null;\n this.hasPasswordHistory = this.cipher.hasPasswordHistory;\n this.cleanUp();\n\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n if (\n this.cipher.type === CipherType.Login &&\n this.cipher.login.totp &&\n (this.cipher.organizationUseTotp || this.canAccessPremium)\n ) {\n await this.totpUpdateCode();\n const interval = this.totpService.getTimeInterval(this.cipher.login.totp);\n await this.totpTick(interval);\n\n this.totpInterval = window.setInterval(async () => {\n await this.totpTick(interval);\n }, 1000);\n }\n }\n\n toggleFavorite() {\n this.cipher.favorite = !this.cipher.favorite;\n }\n\n launch(uri: LoginUriView) {\n if (!uri.canLaunch) {\n return;\n }\n\n this.platformUtilsService.launchUri(uri.launchUri);\n }\n\n copy(value: string, typeI18nKey: string, aType: string) {\n if (value == null) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(typeI18nKey))\n );\n\n if (this.editMode) {\n if (typeI18nKey === \"password\") {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipherId);\n } else if (typeI18nKey === \"securityCode\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId);\n } else if (aType === \"H_Field\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedHiddenField, this.cipherId);\n }\n }\n }\n\n async generatePassword(): Promise {\n const confirmed = await super.generatePassword();\n if (confirmed) {\n const options = (await this.passwordGenerationService.getOptions())[0];\n this.cipher.login.password = await this.passwordGenerationService.generatePassword(options);\n }\n return confirmed;\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n\n upgradeOrganization() {\n this.messagingService.send(\"upgradeOrganization\", {\n organizationId: this.cipher.organizationId,\n });\n }\n\n viewHistory() {\n this.viewingPasswordHistory = !this.viewingPasswordHistory;\n }\n\n protected cleanUp() {\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n }\n\n protected async totpUpdateCode() {\n if (\n this.cipher == null ||\n this.cipher.type !== CipherType.Login ||\n this.cipher.login.totp == null\n ) {\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n return;\n }\n\n this.totpCode = await this.totpService.getCode(this.cipher.login.totp);\n if (this.totpCode != null) {\n if (this.totpCode.length > 4) {\n const half = Math.floor(this.totpCode.length / 2);\n this.totpCodeFormatted =\n this.totpCode.substring(0, half) + \" \" + this.totpCode.substring(half);\n } else {\n this.totpCodeFormatted = this.totpCode;\n }\n } else {\n this.totpCodeFormatted = null;\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n }\n }\n\n protected allowOwnershipAssignment() {\n return (\n (!this.editMode || this.cloneMode) &&\n this.ownershipOptions != null &&\n (this.ownershipOptions.length > 1 || !this.allowPersonal)\n );\n }\n\n private async totpTick(intervalSeconds: number) {\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const mod = epoch % intervalSeconds;\n\n this.totpSec = intervalSeconds - mod;\n this.totpDash = +(Math.round(((78.6 / intervalSeconds) * mod + \"e+2\") as any) + \"e-2\");\n this.totpLow = this.totpSec <= 7;\n if (mod === 0) {\n await this.totpUpdateCode();\n }\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"jslib-angular/components/attachments.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { AttachmentView } from \"jslib-common/models/view/attachmentView\";\n\n@Component({\n selector: \"app-vault-attachments\",\n templateUrl: \"attachments.component.html\",\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n\n constructor(\n cipherService: CipherService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n logService: LogService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n platformUtilsService,\n apiService,\n window,\n logService,\n stateService\n );\n }\n\n protected async reupload(attachment: AttachmentView) {\n if (this.showFixOldAttachments(attachment)) {\n await this.reuploadCipherAttachment(attachment, false);\n }\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return attachment.key == null && this.cipher.organizationId == null;\n }\n}\n","import { Component, Input, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { CipherRepromptType } from \"jslib-common/enums/cipherRepromptType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\nimport { BulkDeleteComponent } from \"./bulk-delete.component\";\nimport { BulkMoveComponent } from \"./bulk-move.component\";\nimport { BulkRestoreComponent } from \"./bulk-restore.component\";\nimport { BulkShareComponent } from \"./bulk-share.component\";\nimport { CiphersComponent } from \"./ciphers.component\";\n\n@Component({\n selector: \"app-vault-bulk-actions\",\n templateUrl: \"bulk-actions.component.html\",\n})\nexport class BulkActionsComponent {\n @Input() ciphersComponent: CiphersComponent;\n @Input() deleted: boolean;\n @Input() organization: Organization;\n\n @ViewChild(\"bulkDeleteTemplate\", { read: ViewContainerRef, static: true })\n bulkDeleteModalRef: ViewContainerRef;\n @ViewChild(\"bulkRestoreTemplate\", { read: ViewContainerRef, static: true })\n bulkRestoreModalRef: ViewContainerRef;\n @ViewChild(\"bulkMoveTemplate\", { read: ViewContainerRef, static: true })\n bulkMoveModalRef: ViewContainerRef;\n @ViewChild(\"bulkShareTemplate\", { read: ViewContainerRef, static: true })\n bulkShareModalRef: ViewContainerRef;\n\n constructor(\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private modalService: ModalService,\n private passwordRepromptService: PasswordRepromptService\n ) {}\n\n async bulkDelete() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkDeleteComponent,\n this.bulkDeleteModalRef,\n (comp) => {\n comp.permanent = this.deleted;\n comp.cipherIds = selectedIds;\n comp.organization = this.organization;\n comp.onDeleted.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async bulkRestore() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkRestoreComponent,\n this.bulkRestoreModalRef,\n (comp) => {\n comp.cipherIds = selectedIds;\n comp.onRestored.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async bulkShare() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedCiphers = this.ciphersComponent.getSelected();\n if (selectedCiphers.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkShareComponent,\n this.bulkShareModalRef,\n (comp) => {\n comp.ciphers = selectedCiphers;\n comp.onShared.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async bulkMove() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkMoveComponent,\n this.bulkMoveModalRef,\n (comp) => {\n comp.cipherIds = selectedIds;\n comp.onMoved.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n selectAll(select: boolean) {\n this.ciphersComponent.selectAll(select);\n }\n\n private async promptPassword() {\n const selectedCiphers = this.ciphersComponent.getSelected();\n const notProtected = !selectedCiphers.find(\n (cipher) => cipher.reprompt !== CipherRepromptType.None\n );\n\n return notProtected || (await this.passwordRepromptService.showPasswordPrompt());\n }\n}\n","
\n \n \n \n
\n \n \n {{ \"moveSelected\" | i18n }}\n \n \n \n {{ \"moveSelectedToOrg\" | i18n }}\n \n \n \n
\n \n \n
\n
\n\n\n\n\n\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherBulkDeleteRequest } from \"jslib-common/models/request/cipherBulkDeleteRequest\";\n\n@Component({\n selector: \"app-vault-bulk-delete\",\n templateUrl: \"bulk-delete.component.html\",\n})\nexport class BulkDeleteComponent {\n @Input() cipherIds: string[] = [];\n @Input() permanent = false;\n @Input() organization: Organization;\n @Output() onDeleted = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private apiService: ApiService\n ) {}\n\n async submit() {\n if (!this.organization || !this.organization.canEditAnyCollection) {\n await this.deleteCiphers();\n } else {\n await this.deleteCiphersAdmin();\n }\n\n await this.formPromise;\n\n this.onDeleted.emit();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.permanent ? \"permanentlyDeletedItems\" : \"deletedItems\")\n );\n }\n\n private async deleteCiphers() {\n if (this.permanent) {\n this.formPromise = await this.cipherService.deleteManyWithServer(this.cipherIds);\n } else {\n this.formPromise = await this.cipherService.softDeleteManyWithServer(this.cipherIds);\n }\n }\n\n private async deleteCiphersAdmin() {\n const deleteRequest = new CipherBulkDeleteRequest(this.cipherIds, this.organization.id);\n if (this.permanent) {\n this.formPromise = await this.apiService.deleteManyCiphersAdmin(deleteRequest);\n } else {\n this.formPromise = await this.apiService.putDeleteManyCiphersAdmin(deleteRequest);\n }\n }\n}\n","
\n
\n
\n
\n

\n {{ (permanent ? \"permanentlyDeleteSelected\" : \"deleteSelected\") | i18n }}\n

\n \n ×\n \n
\n
\n {{\n (permanent ? \"permanentlyDeleteSelectedItemsDesc\" : \"deleteSelectedItemsDesc\")\n | i18n: cipherIds.length\n }}\n
\n
\n \n \n {{ (permanent ? \"permanentlyDelete\" : \"delete\") | i18n }}\n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { FolderView } from \"jslib-common/models/view/folderView\";\n\n@Component({\n selector: \"app-vault-bulk-move\",\n templateUrl: \"bulk-move.component.html\",\n})\nexport class BulkMoveComponent implements OnInit {\n @Input() cipherIds: string[] = [];\n @Output() onMoved = new EventEmitter();\n\n folderId: string = null;\n folders: FolderView[] = [];\n formPromise: Promise;\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private folderService: FolderService\n ) {}\n\n async ngOnInit() {\n this.folders = await this.folderService.getAllDecrypted();\n this.folderId = this.folders[0].id;\n }\n\n async submit() {\n this.formPromise = this.cipherService.moveManyWithServer(this.cipherIds, this.folderId);\n await this.formPromise;\n this.onMoved.emit();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"movedItems\"));\n }\n}\n","
\n
\n
\n
\n

\n {{ \"moveSelected\" | i18n }}\n

\n \n ×\n \n
\n
\n

{{ \"moveSelectedItemsDesc\" | i18n: cipherIds.length }}

\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-vault-bulk-restore\",\n templateUrl: \"bulk-restore.component.html\",\n})\nexport class BulkRestoreComponent {\n @Input() cipherIds: string[] = [];\n @Output() onRestored = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {}\n\n async submit() {\n this.formPromise = this.cipherService.restoreManyWithServer(this.cipherIds);\n await this.formPromise;\n this.onRestored.emit();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItems\"));\n }\n}\n","
\n
\n
\n
\n

\n {{ \"restoreSelected\" | i18n }}\n

\n \n ×\n \n
\n
\n {{ \"restoreSelectedItemsDesc\" | i18n: cipherIds.length }}\n
\n
\n \n \n {{ \"restore\" | i18n }}\n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Component({\n selector: \"app-vault-bulk-share\",\n templateUrl: \"bulk-share.component.html\",\n})\nexport class BulkShareComponent implements OnInit {\n @Input() ciphers: CipherView[] = [];\n @Input() organizationId: string;\n @Output() onShared = new EventEmitter();\n\n nonShareableCount = 0;\n collections: CollectionView[] = [];\n organizations: Organization[] = [];\n shareableCiphers: CipherView[] = [];\n formPromise: Promise;\n\n private writeableCollections: CollectionView[] = [];\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private organizationService: OrganizationService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.shareableCiphers = this.ciphers.filter(\n (c) => !c.hasOldAttachments && c.organizationId == null\n );\n this.nonShareableCount = this.ciphers.length - this.shareableCiphers.length;\n const allCollections = await this.collectionService.getAllDecrypted();\n this.writeableCollections = allCollections.filter((c) => !c.readOnly);\n this.organizations = await this.organizationService.getAll();\n if (this.organizationId == null && this.organizations.length > 0) {\n this.organizationId = this.organizations[0].id;\n }\n this.filterCollections();\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n filterCollections() {\n this.selectAll(false);\n if (this.organizationId == null || this.writeableCollections.length === 0) {\n this.collections = [];\n } else {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.organizationId\n );\n }\n }\n\n async submit() {\n const checkedCollectionIds = this.collections\n .filter((c) => (c as any).checked)\n .map((c) => c.id);\n try {\n this.formPromise = this.cipherService.shareManyWithServer(\n this.shareableCiphers,\n this.organizationId,\n checkedCollectionIds\n );\n await this.formPromise;\n this.onShared.emit();\n const orgName =\n this.organizations.find((o) => o.id === this.organizationId)?.name ??\n this.i18nService.t(\"organization\");\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"movedItemsToOrg\", orgName)\n );\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n const collections = select ? this.collections : this.writeableCollections;\n collections.forEach((c) => this.check(c, select));\n }\n\n get canSave() {\n if (\n this.shareableCiphers != null &&\n this.shareableCiphers.length > 0 &&\n this.collections != null\n ) {\n for (let i = 0; i < this.collections.length; i++) {\n if ((this.collections[i] as any).checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","
\n
\n
\n
\n

\n {{ \"moveSelectedToOrg\" | i18n }}\n

\n \n ×\n \n
\n
\n

{{ \"moveManyToOrgDesc\" | i18n }}

\n

\n {{\n \"moveSelectedItemsCountDesc\"\n | i18n: this.ciphers.length:shareableCiphers.length:nonShareableCount\n }}\n

\n
\n \n \n \n \n
\n
\n

{{ \"collections\" | i18n }}

\n
\n \n \n
\n
\n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n
\n \n \n {{ c.name }}\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnDestroy, Output } from \"@angular/core\";\n\nimport { CiphersComponent as BaseCiphersComponent } from \"jslib-angular/components/ciphers.component\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TotpService } from \"jslib-common/abstractions/totp.service\";\nimport { CipherRepromptType } from \"jslib-common/enums/cipherRepromptType\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { EventType } from \"jslib-common/enums/eventType\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nconst MaxCheckedCount = 500;\n\n@Component({\n selector: \"app-vault-ciphers\",\n templateUrl: \"ciphers.component.html\",\n})\nexport class CiphersComponent extends BaseCiphersComponent implements OnDestroy {\n @Input() showAddNew = true;\n @Output() onAttachmentsClicked = new EventEmitter();\n @Output() onShareClicked = new EventEmitter();\n @Output() onCollectionsClicked = new EventEmitter();\n @Output() onCloneClicked = new EventEmitter();\n\n pagedCiphers: CipherView[] = [];\n pageSize = 200;\n cipherType = CipherType;\n actionPromise: Promise;\n userHasPremiumAccess = false;\n\n private didScroll = false;\n private pagedCiphersCount = 0;\n private refreshing = false;\n\n constructor(\n searchService: SearchService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected cipherService: CipherService,\n protected eventService: EventService,\n protected totpService: TotpService,\n protected stateService: StateService,\n protected passwordRepromptService: PasswordRepromptService,\n private logService: LogService\n ) {\n super(searchService);\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n // load() is called after the page loads and the first sync has completed.\n // Do not use ngOnInit() for anything that requires sync data.\n async load(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n await super.load(filter, deleted);\n this.userHasPremiumAccess = await this.stateService.getCanAccessPremium();\n }\n\n loadMore() {\n if (this.ciphers.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedCiphers.length;\n let pagedSize = this.pageSize;\n if (this.refreshing && pagedLength === 0 && this.pagedCiphersCount > this.pageSize) {\n pagedSize = this.pagedCiphersCount;\n }\n if (this.ciphers.length > pagedLength) {\n this.pagedCiphers = this.pagedCiphers.concat(\n this.ciphers.slice(pagedLength, pagedLength + pagedSize)\n );\n }\n this.pagedCiphersCount = this.pagedCiphers.length;\n this.didScroll = this.pagedCiphers.length > this.pageSize;\n }\n\n async refresh() {\n try {\n this.refreshing = true;\n await this.reload(this.filter, this.deleted);\n } finally {\n this.refreshing = false;\n }\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.ciphers.length > this.pageSize;\n }\n\n async resetPaging() {\n this.pagedCiphers = [];\n this.loadMore();\n }\n\n async doSearch(indexedCiphers?: CipherView[]) {\n this.ciphers = await this.searchService.searchCiphers(\n this.searchText,\n [this.filter, this.deletedFilter],\n indexedCiphers\n );\n this.resetPaging();\n }\n\n launch(uri: string) {\n this.platformUtilsService.launchUri(uri);\n }\n\n async attachments(c: CipherView) {\n if (!(await this.repromptCipher(c))) {\n return;\n }\n this.onAttachmentsClicked.emit(c);\n }\n\n async share(c: CipherView) {\n if (!(await this.repromptCipher(c))) {\n return;\n }\n this.onShareClicked.emit(c);\n }\n\n collections(c: CipherView) {\n this.onCollectionsClicked.emit(c);\n }\n\n async clone(c: CipherView) {\n if (!(await this.repromptCipher(c))) {\n return;\n }\n this.onCloneClicked.emit(c);\n }\n\n async delete(c: CipherView): Promise {\n if (!(await this.repromptCipher(c))) {\n return;\n }\n if (this.actionPromise != null) {\n return;\n }\n const permanent = c.isDeleted;\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\n permanent ? \"permanentlyDeleteItemConfirmation\" : \"deleteItemConfirmation\"\n ),\n this.i18nService.t(permanent ? \"permanentlyDeleteItem\" : \"deleteItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.deleteCipher(c.id, permanent);\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(permanent ? \"permanentlyDeletedItem\" : \"deletedItem\")\n );\n this.refresh();\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n\n async restore(c: CipherView): Promise {\n if (this.actionPromise != null || !c.isDeleted) {\n return;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"restoreItemConfirmation\"),\n this.i18nService.t(\"restoreItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.cipherService.restoreWithServer(c.id);\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItem\"));\n this.refresh();\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n\n async copy(cipher: CipherView, value: string, typeI18nKey: string, aType: string) {\n if (\n this.passwordRepromptService.protectedFields().includes(aType) &&\n !(await this.repromptCipher(cipher))\n ) {\n return;\n }\n\n if (value == null || (aType === \"TOTP\" && !this.displayTotpCopyButton(cipher))) {\n return;\n } else if (value === cipher.login.totp) {\n value = await this.totpService.getCode(value);\n }\n\n if (!cipher.viewPassword) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(typeI18nKey))\n );\n\n if (typeI18nKey === \"password\" || typeI18nKey === \"verificationCodeTotp\") {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, cipher.id);\n } else if (typeI18nKey === \"securityCode\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id);\n }\n }\n\n selectAll(select: boolean) {\n if (select) {\n this.selectAll(false);\n }\n const selectCount =\n select && this.ciphers.length > MaxCheckedCount ? MaxCheckedCount : this.ciphers.length;\n for (let i = 0; i < selectCount; i++) {\n this.checkCipher(this.ciphers[i], select);\n }\n }\n\n checkCipher(c: CipherView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n getSelected(): CipherView[] {\n if (this.ciphers == null) {\n return [];\n }\n return this.ciphers.filter((c) => !!(c as any).checked);\n }\n\n getSelectedIds(): string[] {\n return this.getSelected().map((c) => c.id);\n }\n\n displayTotpCopyButton(cipher: CipherView) {\n return (\n (cipher?.login?.hasTotp ?? false) && (cipher.organizationUseTotp || this.userHasPremiumAccess)\n );\n }\n\n async selectCipher(cipher: CipherView) {\n if (await this.repromptCipher(cipher)) {\n super.selectCipher(cipher);\n }\n }\n\n protected deleteCipher(id: string, permanent: boolean) {\n return permanent\n ? this.cipherService.deleteWithServer(id)\n : this.cipherService.softDeleteWithServer(id);\n }\n\n protected showFixOldAttachments(c: CipherView) {\n return c.hasOldAttachments && c.organizationId == null;\n }\n\n protected async repromptCipher(c: CipherView) {\n return (\n c.reprompt === CipherRepromptType.None ||\n (await this.passwordRepromptService.showPasswordPrompt())\n );\n }\n}\n","import { Component, OnDestroy } from \"@angular/core\";\n\nimport { CollectionsComponent as BaseCollectionsComponent } from \"jslib-angular/components/collections.component\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Component({\n selector: \"app-vault-collections\",\n templateUrl: \"collections.component.html\",\n})\nexport class CollectionsComponent extends BaseCollectionsComponent implements OnDestroy {\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n logService: LogService\n ) {\n super(collectionService, platformUtilsService, i18nService, cipherService, logService);\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n this.collections.forEach((c) => this.check(c, select));\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { FolderAddEditComponent as BaseFolderAddEditComponent } from \"jslib-angular/components/folder-add-edit.component\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-folder-add-edit\",\n templateUrl: \"folder-add-edit.component.html\",\n})\nexport class FolderAddEditComponent extends BaseFolderAddEditComponent {\n constructor(\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService\n ) {\n super(folderService, i18nService, platformUtilsService, logService);\n }\n}\n","
\n
\n \n
\n

{{ title }}

\n \n ×\n \n
\n
\n \n \n
\n
\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { Component, EventEmitter, Output } from \"@angular/core\";\n\nimport { GroupingsComponent as BaseGroupingsComponent } from \"jslib-angular/components/groupings.component\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Component({\n selector: \"app-vault-groupings\",\n templateUrl: \"groupings.component.html\",\n})\nexport class GroupingsComponent extends BaseGroupingsComponent {\n @Output() onSearchTextChanged = new EventEmitter();\n\n searchText = \"\";\n searchPlaceholder: string = null;\n\n constructor(\n collectionService: CollectionService,\n folderService: FolderService,\n stateService: StateService\n ) {\n super(collectionService, folderService, stateService);\n }\n\n searchTextChanged() {\n this.onSearchTextChanged.emit(this.searchText);\n }\n}\n","import { Component, OnDestroy } from \"@angular/core\";\n\nimport { ShareComponent as BaseShareComponent } from \"jslib-angular/components/share.component\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Component({\n selector: \"app-vault-share\",\n templateUrl: \"share.component.html\",\n})\nexport class ShareComponent extends BaseShareComponent implements OnDestroy {\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n organizationService: OrganizationService,\n logService: LogService\n ) {\n super(\n collectionService,\n platformUtilsService,\n i18nService,\n cipherService,\n logService,\n organizationService\n );\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n const collections = select ? this.collections : this.writeableCollections;\n collections.forEach((c) => this.check(c, select));\n }\n}\n","
\n
\n
\n
\n

\n {{ \"moveToOrganization\" | i18n }}\n {{ cipher.name }}\n

\n \n ×\n \n
\n
\n {{ \"noOrganizationsList\" | i18n }}\n
\n
\n

{{ \"moveToOrgDesc\" | i18n }}

\n
\n \n \n \n \n
\n
\n

{{ \"collections\" | i18n }}

\n
\n \n \n
\n
\n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n
\n \n \n {{ c.name }}\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n {{ \"newOrganization\" | i18n }}\n \n \n
\n
\n
\n
\n","import {\n ChangeDetectorRef,\n Component,\n NgZone,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"jslib-common/abstractions/provider.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { TokenService } from \"jslib-common/abstractions/token.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { OrganizationsComponent } from \"../settings/organizations.component\";\nimport { UpdateKeyComponent } from \"../settings/update-key.component\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\nimport { AttachmentsComponent } from \"./attachments.component\";\nimport { CiphersComponent } from \"./ciphers.component\";\nimport { CollectionsComponent } from \"./collections.component\";\nimport { FolderAddEditComponent } from \"./folder-add-edit.component\";\nimport { GroupingsComponent } from \"./groupings.component\";\nimport { ShareComponent } from \"./share.component\";\n\nconst BroadcasterSubscriptionId = \"VaultComponent\";\n\n@Component({\n selector: \"app-vault\",\n templateUrl: \"vault.component.html\",\n})\nexport class VaultComponent implements OnInit, OnDestroy {\n @ViewChild(GroupingsComponent, { static: true }) groupingsComponent: GroupingsComponent;\n @ViewChild(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;\n @ViewChild(OrganizationsComponent, { static: true })\n organizationsComponent: OrganizationsComponent;\n @ViewChild(\"attachments\", { read: ViewContainerRef, static: true })\n attachmentsModalRef: ViewContainerRef;\n @ViewChild(\"folderAddEdit\", { read: ViewContainerRef, static: true })\n folderAddEditModalRef: ViewContainerRef;\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n @ViewChild(\"share\", { read: ViewContainerRef, static: true }) shareModalRef: ViewContainerRef;\n @ViewChild(\"collections\", { read: ViewContainerRef, static: true })\n collectionsModalRef: ViewContainerRef;\n @ViewChild(\"updateKeyTemplate\", { read: ViewContainerRef, static: true })\n updateKeyModalRef: ViewContainerRef;\n\n favorites = false;\n type: CipherType = null;\n folderId: string = null;\n collectionId: string = null;\n showVerifyEmail = false;\n showBrowserOutdated = false;\n showUpdateKey = false;\n showPremiumCallout = false;\n showProviders = false;\n deleted = false;\n trashCleanupWarning: string = null;\n\n constructor(\n private syncService: SyncService,\n private route: ActivatedRoute,\n private router: Router,\n private changeDetectorRef: ChangeDetectorRef,\n private i18nService: I18nService,\n private modalService: ModalService,\n private tokenService: TokenService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private platformUtilsService: PlatformUtilsService,\n private broadcasterService: BroadcasterService,\n private ngZone: NgZone,\n private stateService: StateService,\n private organizationService: OrganizationService,\n private providerService: ProviderService\n ) {}\n\n async ngOnInit() {\n this.showVerifyEmail = !(await this.tokenService.getEmailVerified());\n this.showBrowserOutdated = window.navigator.userAgent.indexOf(\"MSIE\") !== -1;\n this.trashCleanupWarning = this.i18nService.t('trashCleanupWarningSelfHosted');\n\n this.route.queryParams.pipe(first()).subscribe(async (params) => {\n await this.syncService.fullSync(false);\n\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n this.showPremiumCallout =\n !this.showVerifyEmail && !canAccessPremium && !this.platformUtilsService.isSelfHost();\n\n this.showProviders = (await this.providerService.getAll()).length > 0;\n\n await Promise.all([this.groupingsComponent.load(), this.organizationsComponent.load()]);\n this.showUpdateKey = !(await this.cryptoService.hasEncKey());\n\n if (params == null) {\n this.groupingsComponent.selectedAll = true;\n await this.ciphersComponent.reload();\n } else {\n if (params.deleted) {\n this.groupingsComponent.selectedTrash = true;\n await this.filterDeleted();\n } else if (params.favorites) {\n this.groupingsComponent.selectedFavorites = true;\n await this.filterFavorites();\n } else if (params.type) {\n const t = parseInt(params.type, null);\n this.groupingsComponent.selectedType = t;\n await this.filterCipherType(t);\n } else if (params.folderId) {\n this.groupingsComponent.selectedFolder = true;\n this.groupingsComponent.selectedFolderId = params.folderId;\n await this.filterFolder(params.folderId);\n } else if (params.collectionId) {\n this.groupingsComponent.selectedCollectionId = params.collectionId;\n await this.filterCollection(params.collectionId);\n } else {\n this.groupingsComponent.selectedAll = true;\n await this.ciphersComponent.reload();\n }\n }\n\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"syncCompleted\":\n if (message.successfully) {\n await Promise.all([\n this.groupingsComponent.load(),\n this.organizationsComponent.load(),\n this.ciphersComponent.load(this.ciphersComponent.filter),\n ]);\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async clearGroupingFilters() {\n this.ciphersComponent.showAddNew = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t(\"searchVault\");\n await this.ciphersComponent.reload();\n this.clearFilters();\n this.go();\n }\n\n async filterFavorites() {\n this.ciphersComponent.showAddNew = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t(\"searchFavorites\");\n await this.ciphersComponent.reload((c) => c.favorite);\n this.clearFilters();\n this.favorites = true;\n this.go();\n }\n\n async filterDeleted() {\n this.ciphersComponent.showAddNew = false;\n this.ciphersComponent.deleted = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t(\"searchTrash\");\n await this.ciphersComponent.reload(null, true);\n this.clearFilters();\n this.deleted = true;\n this.go();\n }\n\n async filterCipherType(type: CipherType) {\n this.ciphersComponent.showAddNew = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t(\"searchType\");\n await this.ciphersComponent.reload((c) => c.type === type);\n this.clearFilters();\n this.type = type;\n this.go();\n }\n\n async filterFolder(folderId: string) {\n this.ciphersComponent.showAddNew = true;\n folderId = folderId === \"none\" ? null : folderId;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t(\"searchFolder\");\n await this.ciphersComponent.reload((c) => c.folderId === folderId);\n this.clearFilters();\n this.folderId = folderId == null ? \"none\" : folderId;\n this.go();\n }\n\n async filterCollection(collectionId: string) {\n this.ciphersComponent.showAddNew = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t(\"searchCollection\");\n await this.ciphersComponent.reload(\n (c) => c.collectionIds != null && c.collectionIds.indexOf(collectionId) > -1\n );\n this.clearFilters();\n this.collectionId = collectionId;\n this.go();\n }\n\n filterSearchText(searchText: string) {\n this.ciphersComponent.searchText = searchText;\n this.ciphersComponent.search(200);\n }\n\n async editCipherAttachments(cipher: CipherView) {\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n if (cipher.organizationId == null && !canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n } else if (cipher.organizationId != null) {\n const org = await this.organizationService.get(cipher.organizationId);\n if (org != null && (org.maxStorageGb == null || org.maxStorageGb === 0)) {\n this.messagingService.send(\"upgradeOrganization\", {\n organizationId: cipher.organizationId,\n });\n return;\n }\n }\n\n let madeAttachmentChanges = false;\n const [modal] = await this.modalService.openViewRef(\n AttachmentsComponent,\n this.attachmentsModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n comp.onUploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n comp.onDeletedAttachment.subscribe(() => (madeAttachmentChanges = true));\n comp.onReuploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n }\n );\n\n modal.onClosed.subscribe(async () => {\n if (madeAttachmentChanges) {\n await this.ciphersComponent.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n async shareCipher(cipher: CipherView) {\n const [modal] = await this.modalService.openViewRef(\n ShareComponent,\n this.shareModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n comp.onSharedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async editCipherCollections(cipher: CipherView) {\n const [modal] = await this.modalService.openViewRef(\n CollectionsComponent,\n this.collectionsModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n comp.onSavedCollections.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async addFolder() {\n const [modal] = await this.modalService.openViewRef(\n FolderAddEditComponent,\n this.folderAddEditModalRef,\n (comp) => {\n comp.folderId = null;\n comp.onSavedFolder.subscribe(async () => {\n modal.close();\n await this.groupingsComponent.loadFolders();\n });\n }\n );\n }\n\n async editFolder(folderId: string) {\n const [modal] = await this.modalService.openViewRef(\n FolderAddEditComponent,\n this.folderAddEditModalRef,\n (comp) => {\n comp.folderId = folderId;\n comp.onSavedFolder.subscribe(async () => {\n modal.close();\n await this.groupingsComponent.loadFolders();\n });\n comp.onDeletedFolder.subscribe(async () => {\n modal.close();\n await this.groupingsComponent.loadFolders();\n await this.filterFolder(\"none\");\n this.groupingsComponent.selectedFolderId = null;\n });\n }\n );\n }\n\n async addCipher() {\n const component = await this.editCipher(null);\n component.type = this.type;\n component.folderId = this.folderId === \"none\" ? null : this.folderId;\n if (this.collectionId != null) {\n const collection = this.groupingsComponent.collections.filter(\n (c) => c.id === this.collectionId\n );\n if (collection.length > 0) {\n component.organizationId = collection[0].organizationId;\n component.collectionIds = [this.collectionId];\n }\n }\n }\n\n async editCipher(cipher: CipherView) {\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.cipherAddEditModalRef,\n (comp) => {\n comp.cipherId = cipher == null ? null : cipher.id;\n comp.onSavedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n comp.onDeletedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n comp.onRestoredCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n\n return childComponent;\n }\n\n async cloneCipher(cipher: CipherView) {\n const component = await this.editCipher(cipher);\n component.cloneMode = true;\n }\n\n async updateKey() {\n await this.modalService.openViewRef(UpdateKeyComponent, this.updateKeyModalRef);\n }\n\n private clearFilters() {\n this.folderId = null;\n this.collectionId = null;\n this.favorites = false;\n this.type = null;\n this.deleted = false;\n }\n\n private go(queryParams: any = null) {\n if (queryParams == null) {\n queryParams = {\n favorites: this.favorites ? true : null,\n type: this.type,\n folderId: this.folderId,\n collectionId: this.collectionId,\n deleted: this.deleted ? true : null,\n };\n }\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n replaceUrl: true,\n });\n }\n}\n","
\n
\n
\n \n \n
\n
\n
\n

\n {{ \"myVault\" | i18n }}\n \n \n \n {{ \"loading\" | i18n }}\n \n \n

\n
\n \n \n \n {{ \"addItem\" | i18n }}\n \n
\n
\n \n {{ trashCleanupWarning }}\n \n \n \n
\n
\n
\n
\n \n {{ \"updateKeyTitle\" | i18n }}\n
\n
\n

{{ \"updateEncryptionKeyShortDesc\" | i18n }}

\n \n
\n
\n \n
\n
\n \n {{ \"updateBrowser\" | i18n }}\n
\n
\n

{{ \"updateBrowserDesc\" | i18n }}

\n \n {{ \"updateBrowser\" | i18n }}\n \n
\n
\n
\n
\n {{ \"goPremium\" | i18n }}\n
\n
\n

{{ \"premiumUpgradeUnlockFeatures\" | i18n }}

\n \n {{ \"goPremium\" | i18n }}\n \n
\n
\n
\n
\n {{ \"organizations\" | i18n }}\n \n \n \n
\n
\n \n
\n
\n
\n
\n {{ \"providers\" | i18n }}\n \n \n \n
\n
\n \n
\n
\n
\n
\n
\n\n\n\n\n\n\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nconst routes: Routes = [{ path: \"**\", redirectTo: \"\" }];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class WildcardRoutingModule {}\n","import {\n Account as BaseAccount,\n AccountSettings as BaseAccountSettings,\n} from \"jslib-common/models/domain/account\";\n\nexport class AccountSettings extends BaseAccountSettings {\n vaultTimeout: number = process.env.NODE_ENV === \"development\" ? null : 15;\n}\n\nexport class Account extends BaseAccount {\n settings?: AccountSettings = new AccountSettings();\n\n constructor(init: Partial) {\n super(init);\n Object.assign(this.settings, {\n ...new AccountSettings(),\n ...this.settings,\n });\n }\n}\n","import { ThemeType } from \"jslib-common/enums/themeType\";\nimport { GlobalState as BaseGlobalState } from \"jslib-common/models/domain/globalState\";\n\nexport class GlobalState extends BaseGlobalState {\n theme?: ThemeType = ThemeType.Light;\n rememberEmail = true;\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\n\n@Injectable()\nexport class BroadcasterMessagingService implements MessagingService {\n constructor(private broadcasterService: BroadcasterService) {}\n\n send(subscriber: string, arg: any = {}) {\n const message = Object.assign({}, { command: subscriber }, arg);\n this.broadcasterService.send(message);\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { StorageService } from \"jslib-common/abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"jslib-common/enums/htmlStorageLocation\";\nimport { StorageOptions } from \"jslib-common/models/domain/storageOptions\";\n\n@Injectable()\nexport class HtmlStorageService implements StorageService {\n get defaultOptions(): StorageOptions {\n return { htmlStorageLocation: HtmlStorageLocation.Session };\n }\n\n get(key: string, options: StorageOptions = this.defaultOptions): Promise {\n let json: string = null;\n switch (options.htmlStorageLocation) {\n case HtmlStorageLocation.Local:\n json = window.localStorage.getItem(key);\n break;\n case HtmlStorageLocation.Session:\n default:\n json = window.sessionStorage.getItem(key);\n break;\n }\n\n if (json != null) {\n const obj = JSON.parse(json);\n return Promise.resolve(obj as T);\n }\n return Promise.resolve(null);\n }\n\n async has(key: string, options: StorageOptions = this.defaultOptions): Promise {\n return (await this.get(key, options)) != null;\n }\n\n save(key: string, obj: any, options: StorageOptions = this.defaultOptions): Promise {\n if (obj == null) {\n return this.remove(key, options);\n }\n\n if (obj instanceof Set) {\n obj = Array.from(obj);\n }\n\n const json = JSON.stringify(obj);\n switch (options.htmlStorageLocation) {\n case HtmlStorageLocation.Local:\n window.localStorage.setItem(key, json);\n break;\n case HtmlStorageLocation.Session:\n default:\n window.sessionStorage.setItem(key, json);\n break;\n }\n return Promise.resolve();\n }\n\n remove(key: string, options: StorageOptions = this.defaultOptions): Promise {\n switch (options.htmlStorageLocation) {\n case HtmlStorageLocation.Local:\n window.localStorage.removeItem(key);\n break;\n case HtmlStorageLocation.Session:\n default:\n window.sessionStorage.removeItem(key);\n break;\n }\n return Promise.resolve();\n }\n}\n","import { I18nService as BaseI18nService } from \"jslib-common/services/i18n.service\";\n\nexport class I18nService extends BaseI18nService {\n constructor(systemLanguage: string, localesDirectory: string) {\n super(systemLanguage || \"en-US\", localesDirectory, async (formattedLocale: string) => {\n const filePath =\n this.localesDirectory +\n \"/\" +\n formattedLocale +\n \"/messages.json?cache=\" +\n process.env.CACHE_TAG;\n const localesResult = await fetch(filePath);\n const locales = await localesResult.json();\n return locales;\n });\n\n // Please leave 'en' where it is, as it's our fallback language in case no translation can be found\n this.supportedTranslationLocales = [\n \"en\",\n \"af\",\n \"az\",\n \"be\",\n \"bg\",\n \"bn\",\n \"bs\",\n \"ca\",\n \"cs\",\n \"da\",\n \"de\",\n \"el\",\n \"en-GB\",\n \"en-IN\",\n \"eo\",\n \"es\",\n \"et\",\n \"fi\",\n \"fil\",\n \"fr\",\n \"he\",\n \"hi\",\n \"hr\",\n \"hu\",\n \"id\",\n \"it\",\n \"ja\",\n \"ka\",\n \"km\",\n \"kn\",\n \"ko\",\n \"lv\",\n \"ml\",\n \"nb\",\n \"nl\",\n \"nn\",\n \"pl\",\n \"pt-PT\",\n \"pt-BR\",\n \"ro\",\n \"ru\",\n \"si\",\n \"sk\",\n \"sl\",\n \"sr\",\n \"sv\",\n \"tr\",\n \"uk\",\n \"vi\",\n \"zh-CN\",\n \"zh-TW\",\n ];\n }\n}\n","import { StorageService } from \"jslib-common/abstractions/storage.service\";\n\nexport class MemoryStorageService implements StorageService {\n private store = new Map();\n\n get(key: string): Promise {\n if (this.store.has(key)) {\n const obj = this.store.get(key);\n return Promise.resolve(obj as T);\n }\n return Promise.resolve(null);\n }\n\n async has(key: string): Promise {\n return this.get(key) != null;\n }\n\n save(key: string, obj: any): Promise {\n if (obj == null) {\n return this.remove(key);\n }\n this.store.set(key, obj);\n return Promise.resolve();\n }\n\n remove(key: string): Promise {\n this.store.delete(key);\n return Promise.resolve();\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { PasswordRepromptService as BasePasswordRepromptService } from \"jslib-angular/services/passwordReprompt.service\";\n\nimport { PasswordRepromptComponent } from \"../app/components/password-reprompt.component\";\n\n@Injectable()\nexport class PasswordRepromptService extends BasePasswordRepromptService {\n component = PasswordRepromptComponent;\n}\n","import { CipherData } from \"jslib-common/models/data/cipherData\";\nimport { CollectionData } from \"jslib-common/models/data/collectionData\";\nimport { FolderData } from \"jslib-common/models/data/folderData\";\nimport { SendData } from \"jslib-common/models/data/sendData\";\nimport { StorageOptions } from \"jslib-common/models/domain/storageOptions\";\nimport { StateService as BaseStateService } from \"jslib-common/services/state.service\";\n\nimport { StateService as StateServiceAbstraction } from \"../abstractions/state.service\";\nimport { Account } from \"../models/account\";\nimport { GlobalState } from \"../models/globalState\";\n\nexport class StateService\n extends BaseStateService\n implements StateServiceAbstraction\n{\n async addAccount(account: Account) {\n // Apply web overides to default account values\n account = new Account(account);\n await super.addAccount(account);\n }\n\n async getRememberEmail(options?: StorageOptions) {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.rememberEmail;\n }\n\n async setRememberEmail(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.rememberEmail = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEncryptedCiphers(options?: StorageOptions): Promise<{ [id: string]: CipherData }> {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.getEncryptedCiphers(options);\n }\n\n async setEncryptedCiphers(\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.setEncryptedCiphers(value, options);\n }\n\n async getEncryptedCollections(\n options?: StorageOptions\n ): Promise<{ [id: string]: CollectionData }> {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.getEncryptedCollections(options);\n }\n\n async setEncryptedCollections(\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.setEncryptedCollections(value, options);\n }\n\n async getEncryptedFolders(options?: StorageOptions): Promise<{ [id: string]: FolderData }> {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.getEncryptedFolders(options);\n }\n\n async setEncryptedFolders(\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.setEncryptedFolders(value, options);\n }\n\n async getEncryptedSends(options?: StorageOptions): Promise<{ [id: string]: SendData }> {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.getEncryptedSends(options);\n }\n\n async setEncryptedSends(\n value: { [id: string]: SendData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.setEncryptedSends(value, options);\n }\n\n override async getLastSync(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.getLastSync(options);\n }\n\n override async setLastSync(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.setLastSync(value, options);\n }\n}\n","import { StateMigrationService as BaseStateMigrationService } from \"jslib-common/services/stateMigration.service\";\n\nimport { Account } from \"../models/account\";\nimport { GlobalState } from \"../models/globalState\";\n\nexport class StateMigrationService extends BaseStateMigrationService {\n protected async migrationStateFrom1To2(): Promise {\n await super.migrateStateFrom1To2();\n const globals = (await this.get(\"global\")) ?? this.stateFactory.createGlobal(null);\n globals.rememberEmail = (await this.get(\"rememberEmail\")) ?? globals.rememberEmail;\n await this.set(\"global\", globals);\n }\n}\n","import Swal, { SweetAlertIcon } from \"sweetalert2\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { ClientType } from \"jslib-common/enums/clientType\";\nimport { DeviceType } from \"jslib-common/enums/deviceType\";\nimport { ThemeType } from \"jslib-common/enums/themeType\";\n\nexport class WebPlatformUtilsService implements PlatformUtilsService {\n private browserCache: DeviceType = null;\n private prefersColorSchemeDark = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\n constructor(\n private i18nService: I18nService,\n private messagingService: MessagingService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n getDevice(): DeviceType {\n if (this.browserCache != null) {\n return this.browserCache;\n }\n\n if (\n navigator.userAgent.indexOf(\" Firefox/\") !== -1 ||\n navigator.userAgent.indexOf(\" Gecko/\") !== -1\n ) {\n this.browserCache = DeviceType.FirefoxBrowser;\n } else if (navigator.userAgent.indexOf(\" OPR/\") >= 0) {\n this.browserCache = DeviceType.OperaBrowser;\n } else if (navigator.userAgent.indexOf(\" Edg/\") !== -1) {\n this.browserCache = DeviceType.EdgeBrowser;\n } else if (navigator.userAgent.indexOf(\" Vivaldi/\") !== -1) {\n this.browserCache = DeviceType.VivaldiBrowser;\n } else if (\n navigator.userAgent.indexOf(\" Safari/\") !== -1 &&\n navigator.userAgent.indexOf(\"Chrome\") === -1\n ) {\n this.browserCache = DeviceType.SafariBrowser;\n } else if ((window as any).chrome && navigator.userAgent.indexOf(\" Chrome/\") !== -1) {\n this.browserCache = DeviceType.ChromeBrowser;\n } else if (navigator.userAgent.indexOf(\" Trident/\") !== -1) {\n this.browserCache = DeviceType.IEBrowser;\n } else {\n this.browserCache = DeviceType.UnknownBrowser;\n }\n\n return this.browserCache;\n }\n\n getDeviceString(): string {\n const device = DeviceType[this.getDevice()].toLowerCase();\n return device.replace(\"browser\", \"\");\n }\n\n getClientType() {\n return ClientType.Web;\n }\n\n isFirefox(): boolean {\n return this.getDevice() === DeviceType.FirefoxBrowser;\n }\n\n isChrome(): boolean {\n return this.getDevice() === DeviceType.ChromeBrowser;\n }\n\n isEdge(): boolean {\n return this.getDevice() === DeviceType.EdgeBrowser;\n }\n\n isOpera(): boolean {\n return this.getDevice() === DeviceType.OperaBrowser;\n }\n\n isVivaldi(): boolean {\n return this.getDevice() === DeviceType.VivaldiBrowser;\n }\n\n isSafari(): boolean {\n return this.getDevice() === DeviceType.SafariBrowser;\n }\n\n isMacAppStore(): boolean {\n return false;\n }\n\n isViewOpen(): Promise {\n return Promise.resolve(false);\n }\n\n launchUri(uri: string, options?: any): void {\n const a = document.createElement(\"a\");\n a.href = uri;\n if (options == null || !options.sameWindow) {\n a.target = \"_blank\";\n a.rel = \"noreferrer noopener\";\n }\n a.classList.add(\"d-none\");\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n\n saveFile(win: Window, blobData: any, blobOptions: any, fileName: string): void {\n let blob: Blob = null;\n let type: string = null;\n const fileNameLower = fileName.toLowerCase();\n let doDownload = true;\n if (fileNameLower.endsWith(\".pdf\")) {\n type = \"application/pdf\";\n doDownload = false;\n } else if (fileNameLower.endsWith(\".xlsx\")) {\n type = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n } else if (fileNameLower.endsWith(\".docx\")) {\n type = \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\n } else if (fileNameLower.endsWith(\".pptx\")) {\n type = \"application/vnd.openxmlformats-officedocument.presentationml.presentation\";\n } else if (fileNameLower.endsWith(\".csv\")) {\n type = \"text/csv\";\n } else if (fileNameLower.endsWith(\".png\")) {\n type = \"image/png\";\n } else if (fileNameLower.endsWith(\".jpg\") || fileNameLower.endsWith(\".jpeg\")) {\n type = \"image/jpeg\";\n } else if (fileNameLower.endsWith(\".gif\")) {\n type = \"image/gif\";\n }\n if (type != null) {\n blobOptions = blobOptions || {};\n if (blobOptions.type == null) {\n blobOptions.type = type;\n }\n }\n if (blobOptions != null) {\n blob = new Blob([blobData], blobOptions);\n } else {\n blob = new Blob([blobData]);\n }\n\n const a = win.document.createElement(\"a\");\n if (doDownload) {\n a.download = fileName;\n } else if (!this.isSafari()) {\n a.target = \"_blank\";\n }\n a.href = URL.createObjectURL(blob);\n a.style.position = \"fixed\";\n win.document.body.appendChild(a);\n a.click();\n win.document.body.removeChild(a);\n }\n\n getApplicationVersion(): Promise {\n return Promise.resolve(process.env.APPLICATION_VERSION || \"-\");\n }\n\n supportsWebAuthn(win: Window): boolean {\n return typeof PublicKeyCredential !== \"undefined\";\n }\n\n supportsDuo(): boolean {\n return true;\n }\n\n showToast(\n type: \"error\" | \"success\" | \"warning\" | \"info\",\n title: string,\n text: string | string[],\n options?: any\n ): void {\n this.messagingService.send(\"showToast\", {\n text: text,\n title: title,\n type: type,\n options: options,\n });\n }\n\n async showDialog(\n body: string,\n title?: string,\n confirmText?: string,\n cancelText?: string,\n type?: string,\n bodyIsHtml = false\n ) {\n let iconClasses: string = null;\n if (type != null) {\n // If you add custom types to this part, the type to SweetAlertIcon cast below needs to be changed.\n switch (type) {\n case \"success\":\n iconClasses = \"bwi-check text-success\";\n break;\n case \"warning\":\n iconClasses = \"bwi-exclamation-triangle text-warning\";\n break;\n case \"error\":\n iconClasses = \"bwi-error text-danger\";\n break;\n case \"info\":\n iconClasses = \"bwi-info-circle text-info\";\n break;\n default:\n break;\n }\n }\n\n const bootstrapModal = document.querySelector(\"div.modal\");\n if (bootstrapModal != null) {\n bootstrapModal.removeAttribute(\"tabindex\");\n }\n\n const iconHtmlStr =\n iconClasses != null ? `` : undefined;\n const confirmed = await Swal.fire({\n heightAuto: false,\n buttonsStyling: false,\n icon: type as SweetAlertIcon, // required to be any of the SweetAlertIcons to output the iconHtml.\n iconHtml: iconHtmlStr,\n text: bodyIsHtml ? null : body,\n html: bodyIsHtml ? body : null,\n titleText: title,\n showCancelButton: cancelText != null,\n cancelButtonText: cancelText,\n showConfirmButton: true,\n confirmButtonText: confirmText == null ? this.i18nService.t(\"ok\") : confirmText,\n });\n\n if (bootstrapModal != null) {\n bootstrapModal.setAttribute(\"tabindex\", \"-1\");\n }\n\n return confirmed.value;\n }\n\n isDev(): boolean {\n return false;\n }\n\n isSelfHost(): boolean {\n return false;\n }\n\n copyToClipboard(text: string, options?: any): void | boolean {\n let win = window;\n let doc = window.document;\n if (options && (options.window || options.win)) {\n win = options.window || options.win;\n doc = win.document;\n } else if (options && options.doc) {\n doc = options.doc;\n }\n if ((win as any).clipboardData && (win as any).clipboardData.setData) {\n // IE specific code path to prevent textarea being shown while dialog is visible.\n (win as any).clipboardData.setData(\"Text\", text);\n } else if (doc.queryCommandSupported && doc.queryCommandSupported(\"copy\")) {\n const textarea = doc.createElement(\"textarea\");\n textarea.textContent = text;\n // Prevent scrolling to bottom of page in MS Edge.\n textarea.style.position = \"fixed\";\n let copyEl = doc.body;\n // For some reason copy command won't work when modal is open if appending to body\n if (doc.body.classList.contains(\"modal-open\")) {\n copyEl = doc.body.querySelector(\".modal\");\n }\n copyEl.appendChild(textarea);\n textarea.select();\n let success = false;\n try {\n // Security exception may be thrown by some browsers.\n success = doc.execCommand(\"copy\");\n if (!success) {\n this.logService.debug(\"Copy command unsupported or disabled.\");\n }\n } catch (e) {\n // eslint-disable-next-line\n console.warn(\"Copy to clipboard failed.\", e);\n } finally {\n copyEl.removeChild(textarea);\n }\n return success;\n }\n }\n\n readFromClipboard(options?: any): Promise {\n throw new Error(\"Cannot read from clipboard on web.\");\n }\n\n supportsBiometric() {\n return Promise.resolve(false);\n }\n\n authenticateBiometric() {\n return Promise.resolve(false);\n }\n\n supportsSecureStorage() {\n return false;\n }\n\n getDefaultSystemTheme(): Promise {\n return Promise.resolve(this.prefersColorSchemeDark.matches ? ThemeType.Dark : ThemeType.Light);\n }\n\n async getEffectiveTheme(): Promise {\n const theme = await this.stateService.getTheme();\n if (theme === ThemeType.Dark) {\n return ThemeType.Dark;\n } else if (theme === ThemeType.System) {\n return this.getDefaultSystemTheme();\n } else {\n return ThemeType.Light;\n }\n }\n\n onDefaultSystemThemeChange(callback: (theme: ThemeType.Light | ThemeType.Dark) => unknown) {\n try {\n this.prefersColorSchemeDark.addEventListener(\"change\", ({ matches }) => {\n callback(matches ? ThemeType.Dark : ThemeType.Light);\n });\n } catch (e) {\n // Safari older than v14\n this.prefersColorSchemeDark.addListener((ev) => {\n callback(ev.matches ? ThemeType.Dark : ThemeType.Light);\n });\n }\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"darkInputColor\":\"#fff\",\"darkInputPlaceholderColor\":\"#bac0ce\",\"lightInputColor\":\"#465057\",\"lightInputPlaceholderColor\":\"#b6b8b8\"};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t148: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_bitwarden_web_vault\"] = self[\"webpackChunk_bitwarden_web_vault\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [734], () => (__webpack_require__(90330)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","AddEditCustomFieldsComponent","constructor","i18nService","eventService","addFieldType","FieldType","Text","linkedFieldOptions","cipherType","CipherType","fieldType","eventType","EventType","this","addFieldTypeOptions","name","t","value","Hidden","Boolean","addFieldLinkedTypeOption","Linked","ngOnChanges","changes","thisCipherType","setLinkedFieldOptions","firstChange","resetCipherLinkedFields","addField","cipher","fields","f","FieldView","type","newField","linkedId","push","removeField","field","i","indexOf","splice","toggleFieldValue","showValue","editMode","collect","Cipher_ClientToggledHiddenFieldVisible","id","trackByFunction","index","item","drop","event","moveItemInArray","previousIndex","currentIndex","options","forEach","linkedFieldOption","i18nKey","sort","Utils","getSortFunction","length","filter","AddEditComponent","cipherService","folderService","platformUtilsService","auditService","stateService","collectionService","messagingService","policyService","logService","passwordRepromptService","organizationService","cloneMode","folderId","organizationId","onSavedCipher","EventEmitter","onDeletedCipher","onRestoredCipher","onCancelled","onEditAttachments","onShareCipher","onEditCollections","onGeneratePassword","onGenerateUsername","collections","showPassword","showCardNumber","showCardCode","ownershipOptions","currentDate","Date","allowPersonal","reprompt","canUseReprompt","typeOptions","Login","Card","Identity","SecureNote","cardBrandOptions","cardExpMonthOptions","identityTitleOptions","uriMatchOptions","UriMatchType","Domain","Host","StartsWith","RegularExpression","Exact","Never","autofillOnPageLoadOptions","ngOnInit","init","policyAppliesToUser","PolicyType","PersonalOwnership","myEmail","getEmail","getAll","o","enabled","status","OrganizationUserStatusType","Confirmed","writeableCollections","loadCollections","load","cipherId","title","addEditCipherInfo","getAddEditCipherInfo","collectionIds","setAddEditCipherInfo","loadCipher","decrypt","CipherView","login","LoginView","uris","LoginUriView","card","CardView","identity","IdentityView","secureNote","SecureNoteView","SecureNoteType","Generic","CipherRepromptType","None","organizationChanged","c","checked","folders","getAllDecrypted","previousCipherId","Cipher_ClientViewed","submit","isDeleted","restore","showToast","uri","map","encryptCipher","formPromise","saveCipher","emit","send","e","error","addUri","removeUri","cancel","attachments","share","editCollections","delete","showDialog","deletePromise","deleteCipher","restorePromise","restoreCipher","generateUsername","username","generatePassword","password","togglePassword","document","getElementById","focus","Cipher_ClientToggledPasswordVisible","toggleCardNumber","Cipher_ClientToggledCardNumberVisible","toggleCardCode","Cipher_ClientToggledCardCodeVisible","toggleUriOptions","u","showOptions","match","loginUriMatchChanged","org","get","organizationUseTotp","useTotp","checkPassword","checkPasswordPromise","passwordLeaked","matches","toString","repromptChanged","Password","readOnly","encrypt","saveWithServer","deleteWithServer","softDeleteWithServer","restoreWithServer","AttachmentsComponent","cryptoService","apiService","win","onUploadedAttachment","onDeletedAttachment","onReuploadedAttachment","deletePromises","reuploadPromises","emergencyAccessId","hasUpdatedKey","fileEl","files","size","saveCipherAttachment","cipherDomain","attachment","deleteCipherAttachment","download","a","downloading","canAccessAttachments","url","getAttachmentData","ErrorResponse","statusCode","Error","getSingleMessage","response","fetch","Request","cache","buf","arrayBuffer","key","getOrgKey","decBuf","decryptFromBytes","saveFile","fileName","hasEncKey","canAccessPremium","getCanAccessPremium","launchUri","reuploadCipherAttachment","admin","Promise","resolve","then","saveAttachmentRawWithServer","foundAttachment","a2","file","saveAttachmentWithServer","attachmentId","deleteAttachmentWithServer","Window","AvatarComponent","sanitizer","cryptoFunctionService","charCount","textColor","fontSize","fontWeight","dynamic","circle","generate","getEnableGravitars","email","hashBytes","hash","toLowerCase","trim","fromBufferToHex","src","chars","upperData","data","toUpperCase","getFirstLetters","unicodeSafeSubstring","regexpEmojiPresentation","charObj","getCharText","color","stringToColor","svg","getSvg","appendChild","html","window","createElement","outerHTML","svgHtml","btoa","unescape","encodeURIComponent","str","charCodeAt","substr","count","parts","split","text","svgTag","setAttribute","style","backgroundColor","width","height","character","textTag","textContent","characters","slice","join","CalloutComponent","useAlertRole","calloutStyle","undefined","enforcedPolicyMessage","icon","getPasswordScoreAlertDisplay","enforcedPolicyOptions","minComplexity","CaptchaProtectedComponent","environmentService","captchaSiteKey","captchaToken","setupCaptcha","webVaultUrl","getWebVaultUrl","captcha","CaptchaIFrame","token","info","showCaptcha","isNullOrWhitespace","handleCaptchaRequired","ChangePasswordComponent","passwordGenerationService","getMasterPasswordPolicyOptions","strongPassword","setupSubmitActions","kdf","getKdfType","kdfIterations","getKdfIterations","makeKey","masterPassword","masterPasswordHash","hashPassword","encKey","getEncKey","makeEncKey","remakeEncKey","performSubmitActions","masterPasswordRetype","strengthResult","passwordStrength","getPasswordStrengthUserInput","evaluateMasterPassword","score","updatePasswordStrength","masterPasswordStrengthTimeout","clearTimeout","setTimeout","masterPasswordScore","logOut","userInput","atPosition","concat","CiphersComponent","searchService","activeCipherId","onCipherClicked","onCipherRightClicked","onAddCipher","onAddCipherOptions","loaded","ciphers","searchPlaceholder","deleted","searchPending","searchTimeout","deletedFilter","applyFilter","reload","refresh","search","timeout","indexedCiphers","doSearch","selectCipher","rightClickCipher","addCipher","addCipherOptions","isSearching","isSearchable","searchText","searchCiphers","CollectionsComponent","allowSelectNone","onSavedCollections","loadCipherCollections","selectedCollectionIds","saveCollections","saveCollectionsWithServer","ExportScopeCalloutComponent","show","hasOrganizations","scopeConfig","description","scopeIdentifier","ExportComponent","exportService","userVerificationService","formBuilder","onSaved","disabledByPolicy","exportForm","group","format","secret","formatOptions","checkExportDisabled","DisablePersonalVaultExport","disable","encryptedFormat","warningDialog","verifyUser","message","getExportData","downloadFile","saved","collectEvent","setValue","getExport","getFileName","prefix","extension","User_ClientExportedVault","csv","FolderAddEditComponent","onSavedFolder","onDeletedFolder","folder","FolderView","GeneratorComponent","usernameGenerationService","route","comingFromAddEdit","onSelected","usernameOptions","passwordOptions","avoidAmbiguous","usernameWebsite","passTypeOptions","usernameTypeOptions","desc","subaddressOptions","catchallOptions","forwardOptions","queryParams","pipe","first","subscribe","qParams","passwordOptionsResponse","getOptions","enforcedPasswordPolicyOptions","ambiguous","subaddressEmail","subaddressType","catchallType","website","websiteOption","generatorOptions","getGeneratorOptions","regenerate","typeChanged","setGeneratorOptions","regeneratePassword","regenerateUsername","sliderChanged","savePasswordOptions","addHistory","sliderInput","normalizePasswordOptions","saveOptions","saveUsernameOptions","copy","copyOptions","copyToClipboard","select","toggleOptions","uppercase","lowercase","number","special","querySelector","normalizeOptions","GroupingsComponent","showFolders","showCollections","showFavorites","showTrash","onAllClicked","onFavoritesClicked","onTrashClicked","onCipherTypeClicked","onFolderClicked","onAddFolder","onEditFolder","onCollectionClicked","selectedAll","selectedFavorites","selectedTrash","selectedType","selectedFolder","selectedFolderId","selectedCollectionId","setLoaded","collapsedGroupings","getCollapsedGroupings","Set","loadFolders","nestedCollections","getAllNested","nestedFolders","selectAll","clearSelections","selectFavorites","selectTrash","selectType","selectFolder","addFolder","editFolder","selectCollection","collection","collapse","grouping","idPrefix","isCollapsed","add","setCollapsedGroupings","Array","from","has","router","successRoute","postPasswordHint","PasswordHintRequest","onSuccessfulSubmit","navigate","cardIcons","Visa","Mastercard","Amex","Discover","JCB","Maestro","UnionPay","IconComponent","iconsUrl","getIconsUrl","image","fallbackImage","imageEnabled","getDisableFavicon","setLoginIcon","setCardIcon","hostnameUri","isWebsite","getHostname","brand","LockComponent","vaultTimeoutService","keyConnectorService","ngZone","pin","pinLock","webVaultHostname","invalidPinAttempts","activeAccount","failed","pinSet","makeKeyFromPin","getDecryptedPinProtected","protectedPin","getProtectedPin","decryptToUtf8","EncString","setKeyAndContinue","passwordValid","getKeyHash","compareAndUpdateKeyHash","request","SecretVerificationRequest","serverKeyHash","HashPurpose","ServerAuthorization","postAccountVerifyPassword","localKeyHash","LocalAuthorization","setKeyHash","decPin","pinKey","makePinKey","setDecryptedPinProtected","unlockBiometric","biometricLock","success","getKey","KeySuffixOptions","Biometric","doContinue","input","isStable","onStable","take","setKey","setBiometricLocked","setEverBeenUnlocked","disableFavicon","setDisableFavicon","isPinLockSet","supportsBiometric","isBiometricLockSet","hasKeyStored","supportsSecureStorage","biometricText","getBiometricText","usesKeyConnector","getUsesKeyConnector","hideInput","vaultUrl","LoginComponent","authService","super","rememberEmail","twoFactorRoute","forcePasswordResetRoute","alwaysRememberEmail","getRememberedEmail","isBrowser","isNode","focusInput","credentials","PasswordLogInCredentials","logIn","setRememberedEmail","requiresTwoFactor","onSuccessfulLoginTwoFactorNavigate","forcePasswordReset","onSuccessfulLoginForceResetNavigate","onSuccessfulLogin","onSuccessfulLoginNavigate","launchSsoBrowser","clientId","ssoRedirectUri","numbers","state","ssoCodeVerifier","codeVerifierHash","codeChallenge","fromBufferToUrlB64","setSsoState","setSsoCodeVerifier","webUrl","DynamicModalComponent","modalService","cd","el","focusTrapFactory","modalRef","ngAfterViewInit","loadChildComponent","childComponentType","setComponentParameters","componentRef","instance","detectChanges","created","nativeElement","focusTrap","create","focusFirstTabbableElementWhenReady","componentType","componentFactory","resolveComponentFactory","modalContentRef","clear","createComponent","ngOnDestroy","destroy","close","getFocus","autoFocusEl","ViewContainerRef","_parentInjector","_additionalTokens","notFoundValue","flags","_onCreated","Subject","_onClose","_onClosed","_onShow","_onShown","onCreated","asObservable","onClose","onClosed","onShow","onShown","next","shown","result","lastResult","closed","onClosedPromise","toPromise","PasswordGeneratorHistoryComponent","history","getHistory","PasswordRepromptComponent","RegisterComponent","confirmMasterPassword","hint","showTerms","acceptPolicies","masterPasswordScoreWidth","masterPasswordScoreColor","masterPasswordScoreText","crypto","subtle","DEFAULT_KDF_TYPE","DEFAULT_KDF_ITERATIONS","hashedPassword","keys","makeKeyPair","RegisterRequest","encryptedString","referenceData","KeysRequest","orgInvite","getOrganizationInvitation","organizationUserId","postRegister","confirmField","RemovePasswordComponent","syncService","continuing","leaving","loading","organization","getManagingOrganization","fullSync","convert","actionPromise","migrateUser","removeConvertAccountRequired","leave","postLeaveOrganization","datePipe","sendService","onSavedSend","onDeletedSend","copyLink","disableSend","disableHideEmail","sendType","SendType","emailVerified","alertShown","File","sendLinkBaseUrl","getSendUrl","link","accessId","urlB64Key","isSafari","isDateTimeLocalSupported","isFirefox","sendId","setDates","deletionDate","expirationDate","DisableSend","SendOptions","p","getEmailVerified","loadSend","SendView","SendFileView","SendTextView","setDate","getDate","hasPassword","encryptSend","encSend","uploadPromise","copySuccess","copyLinkToClipboard","sendData","togglePasswordVisible","BrowserPath","DateField","DatePreset","EffluxDatesComponent","datesChanged","datesForm","FormGroup","selectedDeletionDatePreset","FormControl","selectedExpirationDatePreset","defaultDeletionDateTime","defaultExpirationDateTime","fallbackDeletionDate","fallbackDeletionTime","fallbackExpirationDate","fallbackExpirationTime","deletionDatePresets","OneHour","OneDay","TwoDays","ThreeDays","SevenDays","ThirtyDays","Custom","expirationDatePresets","browserPath","Firefox","Safari","Default","formattedDeletionDate","now","miliseconds","setTime","getTime","formattedExpirationDate","safariDeletionTimePresetOptions","safariTimePresetOptions","DeletionDate","safariExpirationTimePresetOptions","ExpriationDate","nextWeek","setInitialFormValues","emitDates","valueChanges","onDeletionDatePresetSelect","clearExpiration","initialDeletionDate","toISOString","toTimeString","initialExpirationDate","transform","twentyFourHour","noon","midnight","ams","pms","h","m","hour","minutes","midnightOption","twelveHour","noonOption","amOption","pmOption","validTimes","SendComponent","refreshing","expired","sends","filteredSends","hasSearched","onSuccessfulLoad","s","applyTextSearch","removePassword","removePasswordWithServer","onSuccessfulRemovePassword","onSuccessfulDelete","searchTextChanged","searchSends","SetPasswordComponent","syncLoading","identifier","resetPasswordAutoEnroll","getOrganizationAutoEnrollStatus","orgId","resetPasswordEnabled","getMasterPasswordPoliciesForInvitedUsers","SetPasswordRequest","setPassword","onSetPasswordSuccess","getOrganizationKeys","userId","getUserId","publicKey","fromB64ToArray","userEncKey","encryptedKey","rsaEncrypt","buffer","resetRequest","OrganizationUserResetPasswordEnrollmentRequest","resetPasswordKey","putOrganizationUserResetPasswordEnrollment","onSuccessfulChangePassword","setKdfType","setKdfIterations","setEncKey","setEncPrivateKey","VaultTimeoutInputComponent","form","vaultTimeout","custom","hours","showCustom","CUSTOM_VALUE","MaximumVaultTimeout","vaultTimeoutPolicy","vaultTimeoutPolicyHours","Math","floor","vaultTimeoutPolicyMinutes","vaultTimeouts","validatorChange","onChange","getVaultTimeout","current","max","patchValue","writeValue","every","registerOnChange","registerOnTouched","onTouched","setDisabledState","isDisabled","validate","control","policyError","registerOnValidatorChange","fn","ShareComponent","onSharedCipher","organizations","allCollections","orgs","filterCollections","cipherView","orgName","find","shareWithServer","canSave","SsoComponent","loggingIn","changePasswordRoute","code","codeVerifier","getSsoCodeVerifier","getSsoState","checkState","getOrgIdentifierFromState","redirectUri","returnUri","includeUserIdentifier","initiateSsoFormPromise","preValidate","authorizeUrl","buildAuthorizeUrl","sameWindow","preValidateSso","getIdentityUrl","userIdentifier","getSsoUserIdentifier","orgIdFromState","SsoLogInCredentials","sso","resetMasterPassword","onSuccessfulLoginChangePasswordNavigate","stateSplit","checkStateSplit","BitwardenToast","toastrService","toastPackage","trigger","opacity","transition","animate","BitwardenToastGlobalConfig","DefaultNoComponentGlobalConfig","toastComponent","BitwardenToastModule","static","config","ngModule","providers","provide","TOAST_CONFIG","useValue","default","CommonModule","TwoFactorOptionsComponent","twoFactorService","onProviderSelected","onRecoverSelected","getSupportedProviders","choose","recover","TwoFactorComponent","remember","webAuthnReady","webAuthnNewTab","TwoFactorProviders","providerType","TwoFactorProviderType","selectedProviderType","Authenticator","webAuthnSupported","webAuthn","twoFactorEmail","loginRoute","supportsWebAuthn","webAuthnAllow","authing","getProviders","needsLock","WebAuthnIFrame","getDefaultProvider","cleanupWebAuthn","providerData","WebAuthn","authWebAuthn","Duo","OrganizationDuo","DuoWebSDK","iframe","host","sig_request","Signature","submit_callback","sig","Email","sendEmail","stop","replace","doSubmit","start","logInTwoFactor","TokenRequestTwoFactor","doToast","emailPromise","TwoFactorEmailRequest","postTwoFactorEmail","cleanup","authingWithPassword","authingWithSso","authingWithApiKey","UpdatePasswordComponent","setOrganizationInvitation","setLoginRedirect","currentMasterPassword","VerificationType","MasterPassword","PasswordRequest","newMasterPasswordHash","postPassword","UpdateTempPasswordComponent","newKey","newPasswordHash","newEncKey","UpdateTempPasswordRequest","masterPasswordHint","putUpdateTempPassword","VerifyMasterPasswordComponent","disableRequestOTP","sentCode","processChanges","requestOTP","obj","enable","OTP","NG_VALUE_ACCESSOR","multi","useExisting","A11yTitleDirective","renderer","appA11yTitle","hasAttribute","ApiActionDirective","validationService","appApiAction","captchaRequired","showError","AutofocusDirective","appAutofocus","condition","autofocus","isMobileBrowser","BlurClickDirective","onClick","blur","FallbackSrcDirective","onError","appFallbackSrc","InputVerbatimDirective","appInputVerbatim","disableComplete","NotPremiumDirective","templateRef","viewContainer","createEmbeddedView","SelectCopyDirective","onCopy","copyText","selection","getSelection","rangeCount","getRangeAt","stringEndPos","newLinePos","substring","StopClickDirective","$event","preventDefault","StopPropDirective","stopPropagation","TrueFalseValueDirective","elementRef","trueValue","falseValue","propagateChange","_","onHostChange","ev","target","setProperty","forwardRef","JslibModule","UserNamePipe","SearchPipe","I18nPipe","DatePipe","forRoot","maxOpened","autoDismiss","closeButton","FormsModule","ReactiveFormsModule","ColorPasswordPipe","generateTemplate","templateGenerator","passwordArray","colorizedPassword","isSpecial","p1","p2","p3","items","prop1","prop2","prop3","user","AuthGuardService","canActivate","routerState","getIsAuthenticated","isLocked","promptBiometric","includes","getConvertAccountRequired","BroadcasterService","JslibServicesModule","LOCALE_ID","useFactory","translationLocale","deps","I18nService","ValidationService","UnauthGuardService","LockGuardService","ModalService","AppIdService","useClass","StorageService","AuditService","CryptoFunctionService","ApiService","AuthService","CryptoService","TokenService","PlatformUtilsService","MessagingService","LogService","KeyConnectorService","EnvironmentService","StateService","TwoFactorService","CipherService","settingsService","fileUploadService","injector","SearchService","SettingsService","FileUploadService","Injector","FolderService","ConsoleLogService","CollectionService","TotpService","PasswordGenerationService","PolicyService","UsernameGenerationService","tokenService","appIdService","SyncService","providerService","SendService","OrganizationService","ProviderService","VaultTimeoutService","storageService","secureStorageService","stateMigrationService","StateFactory","GlobalState","Account","StateMigrationService","ExportService","NotificationsService","WebCryptoFunctionService","EventService","UserVerificationService","PasswordRepromptService","homepage","loginpage","redirectUrl","ModalConfig","allowMultipleModals","componentFactoryResolver","applicationRef","modalList","factoryResolvers","Map","addEventListener","modalCount","topModal","openViewRef","viewContainerRef","modalComponentRef","openInternal","insert","hostView","open","registerComponentFactoryResolver","set","attachToDom","createModalComponent","attachView","domElem","rootNodes","body","detachView","pop","setupHandlers","backdrop","classList","modalEl","dialogEl","className","zIndex","prepend","modals","querySelectorAll","closeElement","remove","ModalRef","WeakMap","ModalInjector","component","protectedFields","showPasswordPrompt","ref","defaultErrorMessage","errors","validationErrors","getAllMessages","indexedEntityId","AuthenticationType","ClientType","DeviceType","EmergencyAccessStatusType","EmergencyAccessType","EncryptionType","FileUploadType","HtmlStorageLocation","featuredImportOptions","regularImportOptions","KdfType","PBKDF2_SHA256","SEND_KDF_ITERATIONS","LoginLinkedId","CardLinkedId","IdentityLinkedId","LogLevelType","NotificationType","OrganizationUserType","PaymentMethodType","Permissions","PlanSponsorshipType","PlanType","ProductType","ProviderUserStatusType","ProviderUserType","SsoType","OpenIdConnectRedirectBehavior","Saml2BindingType","Saml2NameIdFormat","Saml2SigningBehavior","StateVersion","StorageLocation","ThemeType","TransactionType","accountConstructor","args","globalStateConstructor","globalStateFactory","GlobalStateFactory","accountFactory","AccountFactory","createGlobal","createAccount","AscendoCsvImporter","BaseImporter","parse","ImportResult","results","parseCsv","initLoginCipher","notes","getValueOrDefault","val","fieldLower","passwordFieldNames","usernameFieldNames","uriFieldNames","makeUriArray","processKvp","convertToNoteIfNeeded","cleanupCipher","AvastCsvImporter","web","AvastJsonImporter","JSON","logins","custName","note","pwd","loginName","label","cards","cardholderName","holderName","cardNumber","cvv","getCardBrand","month","expMonth","year","expYear","AviraCsvImporter","nameFromUrl","secondary_username","newLineRegex","notesFieldNames","parseCsvOptions","encoding","skipEmptyLines","parseXml","doc","DOMParser","parseFromString","header","parseOptions","Object","assign","splitNewLine","papa","row","warning","parseSingleRowCsv","rowData","parsedRow","loginUri","fixUri","returnArr","hostname","startsWith","defaultValue","cardNum","re","RegExp","test","setCardExpiration","expiration","moveFoldersToCollections","folderRelationships","r","collectionRelationships","CollectionView","querySelectorDirectChild","parentEl","query","els","querySelectorAllDirectChild","parentNode","favorite","processFolder","folderName","folderIndex","hasFolder","processFullName","fullName","nameParts","firstName","lastName","middleName","BitwardenCsvImporter","col","addCollection","collectionIndex","parseInt","console","delimPosition","lastIndexOf","totp","login_totp","login_username","login_password","login_uri","BitwardenJsonImporter","passwordProtected","missingPassword","errorMessage","encrypted","parseEncrypted","parseDecrypted","encKeyValidation_DO_NOT_EDIT","orgKey","encKeyValidation","groupingsMap","CollectionWithId","toDomain","view","FolderWithId","CipherWithIds","passwordHistory","cId","toView","BitwardenPasswordProtectedImporter","parsedData","cannotParseFile","encData","clearTextData","jdoc","salt","kdfType","BlackBerryCsvImporter","fav","extra","BlurCsvImporter","domain","OfficialProps","ButtercupCsvImporter","URL","processingCustomFields","prop","hasOwnProperty","ChromeCsvImporter","ClipperzHtmlImporter","textarea","entry","currentVersion","property","actionType","labelLower","CodebookCsvImporter","Category","Favorite","Entry","Note","Username","TOTP","Website","Phone","PIN","_mappedCredentialsColums","_mappedPersonalInfoAsIdentiyColumns","_mappedSecureNoteColumns","DashlaneCsvImporter","x","parsePersonalInformationRecordAsIdentity","rowKeys","category","parseCredentialsRecord","parsePaymentRecord","parseIdRecord","parsePersonalInformationRecord","parseSecureNoteRecords","otpSecret","importUnmappedFields","account_name","mappedValues","cc_number","expiration_month","expiration_year","account_holder","account_number","licenseNumber","passportNumber","ssn","first_name","middle_name","last_name","item_name","dataRow","phone","phone_number","address1","address","city","postalCode","zip","country","HandledResults","DashlaneJsonImporter","ADDRESS","processAddress","AUTHENTIFIANT","processAuth","BANKSTATEMENT","processNote","IDCARD","PAYMENTMEANS_CREDITCARD","processCard","IDENTITY","processIdentity","credential","secondaryLogin","pseudo","addressName","addressFull","zipcode","bank","owner","nameProperty","EncryptrCsvImporter","Label","Notes","CVV","expiry","Expiry","expParts","EnpassCsvImporter","firstRow","containsField","fieldValue","fieldName","fieldNameLower","EnpassJsonImporter","foldersMap","foldersIndexMap","folderTree","buildFolderTree","flattenFolderTree","template_type","processLogin","some","urls","sensitive","uuid","children","parent_uuid","titlePrefix","tree","FirefoxCsvImporter","FSecureFskImporter","service","creditNumber","creditCvv","creditExpiry","GnomeJsonImporter","keyRing","display_name","attributes","username_value","attr","ImportError","passwordRequired","NotesHeader","ApplicationsHeader","WebsitesHeader","Delimiter","KasperskyTxtImporter","notesData","applicationsData","websitesData","workingData","parseDataCategory","applications","websites","n","w","nameKey","itemComment","itemCommentKey","l","colonIndex","KeePass2XmlImporter","rootGroup","traverse","node","isRootNode","groupPrefixName","groupName","nameEl","cipherIndex","entryString","valueEl","keyEl","attrs","ProtectInMemory","KeePassXCsvImporter","Title","Group","KeeperCsvImporter","LastPassCsvImporter","buildBaseCipher","parseSecureNote","parseCard","parseIdentity","ccnum","cardCipher","profilename","firstname","lastname","ccname","cccsc","ccexp","ccexpParts","middlename","company","address2","address3","charAt","extraParts","processedNote","typeParts","mappedData","parseSecureNoteMapping","Number","monthString","getMonth","isNaN","Company","State","Country","dataObj","processingNotes","extraPart","LogMeOnceCsvImporter","MeldiumCsvImporter","DisplayName","UserName","Url","MSecureCsvImporter","mappedBaseColumns","_mappedUserAccountColumns","_mappedCreditCardColumns","_mappedIdentityColumns","_mappedIdCardColumns","_mappedTwoFaColumns","_mappedUserNoteColumns","MykiCsvImporter","nickname","additionalInfo","twofaSecret","authToken","cardName","exp_month","exp_year","firstAddressLine","secondAddressLine","zipCode","idType","idName","idCountry","idNumber","content","NordPassCsvImporter","record","recordType","evaluateType","cardholdername","cardnumber","cvc","expirydate","full_name","importRecord","lowerProperty","OnePassword1PifImporter","line","trashed","hmac","processStandardItem","processWinOpVaultItem","overview","URLs","details","parsePasswordHistory","notesPlain","parseFields","sections","section","openContents","faveIndex","typeName","location","secureContents","maxSize","time","b","ph","PasswordHistoryView","lastUsedDate","designationKey","valueKey","k","toUTCString","fieldDesignation","street","OnePassword1PuxImporter","accounts","vaults","vault","categoryUuid","CategoryEnum","Database","WirelessRouter","Server","API_Credential","CreditCard","BankAccount","SoftwareLicense","EmailAccount","MedicalRecord","DriversLicense","OutdoorLicense","Membership","Passport","RewardsProgram","SocialSecurityNumber","favIndex","processOverview","processLoginFields","processDetails","processSections","tags","capitalize","inputString","loginFields","loginField","designation","LoginFieldTypeEnum","CheckBox","parseSectionFields","anyField","getFieldName","extractValue","fillLogin","fillApiCredentials","fillCreditCard","fillBankAccount","fillIdentity","fillDriversLicense","fillOutdoorLicense","fillMembership","fillPassport","fillRewardsProgram","fillSSN","guarded","date","monthYear","historyItems","IgnoredProperties","OnePasswordCsvImporter","loginPropertyParsers","setLoginUsername","setLoginPassword","setLoginUris","creditCardPropertyParsers","setCreditCardNumber","setCreditCardVerification","setCreditCardCardholderName","setCreditCardExpiry","identityPropertyParsers","setIdentityFirstName","setIdentityInitial","setIdentityLastName","setIdentityUserName","setIdentityEmail","setIdentityPhone","setIdentityCompany","quoteChar","escapeChar","getProp","setNotes","setCipherType","altUsername","context","CipherImportContext","setKnownLoginValue","setKnownCreditCardValue","setKnownIdentityValue","setUnknownValue","entries","reduce","agg","getPropByRegexp","regexp","matchingKeys","getPropIncluding","includesMap","func","bind","readableDate","OnePasswordMacCsvImporter","OnePasswordWinCsvImporter","setIdentityAddress","expSplit","PadlockCsvImporter","headers","v","tag","PassKeepCsvImporter","getValue","PassmanJsonImporter","otp","custom_fields","customField","field_type","PasspackCsvImporter","tagsJson","Tags","tagJson","__parsed_extra","fieldsJson","extraFields","fieldJson","PasswordAgentCsvImporter","newVersion","altFormat","PasswordBossJsonImporter","login_url","identifiers","valObj","expDate","getFullYear","cf","PasswordDragonXmlImporter","records","categoryText","accountName","tagName","PasswordSafeXmlImporter","passwordSafe","notesDelimiter","getAttribute","groupText","PasswordWalletTxtImporter","RememBearCsvImporter","trash","cardholder","verification","expiryMonth","expMonthNumber","expiryYear","expYearNumber","RoboFormCsvImporter","Folder","Name","Pwd","Rf_fields","SafariCsvImporter","OTPAuth","SafeInCloudXmlImporter","labelEl","cardEl","labelIdEl","labelId","fieldEl","notesEl","candidates","choice","SaferPassCsvImporter","SecureSafeCsvImporter","Comment","SplashIdCsvImporter","parseFieldsToNotes","startIndex","StickyPasswordXmlImporter","loginNodes","loginNode","accountId","usernameText","passwordText","titleText","linkText","notesText","groupId","accountLogin","account","parentElement","buildGroupText","PropertiesToIgnore","TrueKeyCsvImporter","memo","kind","expiryDate","document_content","UpmCsvImporter","YotiCsvImporter","ZohoVaultCsvImporter","ChamberName","parseData","SecretData","CustomData","IFrameComponent","successCallback","errorCallback","infoCallback","parsedMessage","siteKey","initComponent","createParams","locale","path","iframeId","parseFunction","parseMessage","connectorLink","sendMessage","contentWindow","postMessage","base64Encode","String","fromCharCode","removeEventListener","version","URLSearchParams","stringify","parent","href","params","validMessage","origin","LinkedMetadata","propertyKey","_i18nKey","prototype","ApiLogInStrategy","LogInStrategy","tokenResponse","apiUseKeyConnector","keyConnectorUrl","getKeyConnectorUrl","getAndSetKey","tokenRequest","ApiTokenRequest","clientSecret","buildTwoFactor","buildDeviceRequest","startLogIn","saveAccountInformation","setApiKeyClientId","setApiKeyClientSecret","captchaBypassToken","twoFactor","captchaResponse","setTwoFactor","clearSelectedProvider","postIdentityToken","IdentityTwoFactorResponse","processTwoFactorResponse","IdentityCaptchaResponse","processCaptchaResponse","IdentityTokenResponse","processTokenResponse","appId","getAppId","DeviceRequest","userProvidedTwoFactor","storedTwoFactorToken","getTwoFactorToken","Remember","accountInformation","decodeToken","accessToken","addAccount","profile","AccountProfile","sub","hasPremiumPersonally","premium","tokens","AccountTokens","refreshToken","AuthResult","twoFactorToken","setTwoFactorToken","privateKey","createKeyPairForOldAccount","twoFactorProviders","twoFactorProviders2","setProviders","postAccountKeys","PasswordLogInStrategy","localHashedPassword","makePreloginKey","PasswordTokenRequest","SsoLogInStrategy","newSsoUser","convertNewSsoUserToKeyConnector","SsoTokenRequest","cacheKey","descriptor","originalMethod","caches","getCache","argsCacheKey","onFinally","apply","catch","err","ServiceUtils","nodeTree","partIndex","delimiter","end","partName","TreeNode","nestedTraverse","newPartName","getTreeNodeObject","limit","throttleKey","allThrottles","throttles","getThrottles","argsThrottleKey","queue","reject","exec","nodeURL","inited","process","release","isMobile","isAppleMobileBrowser","isAppleMobile","global","g","Uint8Array","Buffer","binaryString","atob","bytes","fromUrlB64ToB64","strUtf8","arr","binary","byteLength","fromB64toUrlB64","fromBufferToB64","b64Str","encodedString","decodeURIComponent","escape","call","urlB64Str","output","fromB64ToUtf8","utfStr","fromUtf8ToArray","random","uriString","getUrl","httpUrl","tldEndingRegex","getUrlObject","tldjs","isValid","validIpAddress","urlDomain","getDomain","pair","collator","compare","localeCompare","source","ipString","mobile","navigator","userAgent","vendor","opera","hasProtocol","anchor","btnText","append","allow","EEFLongWordList","CardApi","BaseResponse","getResponseProperty","FieldApi","IdentityApi","LoginApi","passwordRevisionDate","autofillOnPageLoad","LoginUriApi","PermissionsApi","accessEventLogs","accessImportExport","accessReports","manageAllCollections","manageAssignedCollections","createNewCollections","editAnyCollection","deleteAnyCollection","editAssignedCollections","deleteAssignedCollections","manageCiphers","manageGroups","manageSso","managePolicies","manageUsers","manageResetPassword","SecureNoteApi","SendFileApi","sizeName","SendTextApi","hidden","SsoConfigApi","configType","keyConnectorEnabled","authority","metadataAddress","redirectBehavior","getClaimsFromUserInfoEndpoint","additionalScopes","additionalUserIdClaimTypes","additionalEmailClaimTypes","additionalNameClaimTypes","acrValues","expectedReturnAcrValue","spNameIdFormat","spOutboundSigningAlgorithm","spSigningBehavior","spMinIncomingSigningAlgorithm","spWantAssertionsSigned","spValidateCertificates","idpEntityId","idpBindingType","idpSingleSignOnServiceUrl","idpSingleLogoutServiceUrl","idpX509PublicCert","idpOutboundSigningAlgorithm","idpAllowUnsolicitedAuthnResponse","idpDisableOutboundLogoutRequests","idpWantAuthnRequestsSigned","api","OpenIdConnect","openId","Saml2","saml","idpAllowOutboundLogoutRequests","edit","viewPassword","revisionDate","deletedDate","LoginData","SecureNoteData","CardData","IdentityData","FieldData","AttachmentData","PasswordHistoryData","externalId","LoginUriData","usePolicies","useGroups","useDirectory","useEvents","use2fa","useApi","useSso","useKeyConnector","useResetPassword","selfHost","usersGetPremium","seats","maxCollections","maxStorageGb","ssoBound","permissions","resetPasswordEnrolled","hasPublicAndPrivateKeys","providerId","providerName","familySponsorshipFriendlyName","familySponsorshipAvailable","planProductType","maxAccessCount","accessCount","disabled","hideEmail","SendTextData","SendFileData","EncryptionPair","DataEncryptionPair","AccountData","policies","passwordGenerationHistory","AccountKeys","cryptoSymmetricKey","organizationKeys","providerKeys","AccountSettings","environmentUrls","EnvironmentUrls","pinProtected","vaultTimeoutAction","settings","Attachment","alreadyEncrypted","buildDomainModel","decryptObj","AttachmentView","containerService","bitwardenContainerService","getCryptoService","decValue","decryptToBytes","SymmetricCryptoKey","toAttachmentData","buildDataModel","requiresCaptcha","toCardData","Cipher","localData","Field","model","promise","decAttachment","decField","decPh","toCipherData","CipherData","toLoginData","toSecureNoteData","toIdentityData","toFieldData","toPasswordHistoryData","Collection","hidePasswords","notEncList","objProp","notEncStringList","viewModel","promises","self","theProp","mapProp","all","encryptedStringOrType","iv","mac","encType","encryptionType","headerPieces","encPieces","AesCbc128_HmacSha256_B64","AesCbc256_B64","AesCbc256_HmacSha256_B64","Rsa2048_OaepSha256_B64","Rsa2048_OaepSha1_B64","decryptedValue","base","icons","notifications","events","webVault","keyConnector","theme","System","WindowState","stateVersion","One","Sso","Api","LoginUri","toLoginUriData","MasterPasswordPolicyOptions","minLength","requireUpper","requireLower","requireNumbers","requireSpecial","isProviderUser","canAccess","Owner","isManager","Manager","Admin","isAdmin","isOwner","canAccessEventLogs","canAccessImportExport","canAccessReports","canCreateNewCollections","canEditAnyCollection","canDeleteAnyCollection","canViewAllCollections","canEditAssignedCollections","canDeleteAssignedCollections","canViewAssignedCollections","canManageGroups","canManageSso","canManagePolicies","canManageUsers","canManageUsersPassword","isExemptFromPolicies","PasswordGeneratorPolicyOptions","defaultType","useUppercase","useLowercase","useNumbers","numberCount","useSpecial","specialCount","minNumberWords","includeNumber","inEffect","Policy","isProviderAdmin","canCreateOrganizations","ProviderAdmin","ResetPasswordPolicyOptions","autoEnrollEnabled","Send","SendText","SendFile","cryptoKey","makeSendKey","SendAccess","creatorIdentifier","SendAccessView","comparator","sortedCiphersByUrl","timeouts","isCached","addCiphers","Ciphers","resetTimer","getLastUsed","getLastLaunched","getNext","updateLastUsedIndex","lastUsedIndex","lastLaunched","y","valueOf","getNextIndex","globals","authenticatedAccounts","accountActivity","macKey","keyB64","encKeyB64","macKeyB64","req","values","build","humanReadableMessage","appIcon","appName","userName","userEmail","ip","orgIdentifier","ids","CipherWithIdRequest","CipherRequest","lastKnownRevisionDate","attachments2","attachmentRequest","AttachmentRequest","groups","getDevice","getDeviceString","pushToken","EmailRequest","EmailTokenRequest","FolderWithIdRequest","FolderRequest","TokenRequest","device","toIdentityToken","scope","grant_type","client_secret","alterIdentityTokenHeaders","fromUtf8ToUrlB64","code_verifier","redirect_uri","client_id","deviceType","deviceIdentifier","deviceName","provider","twoFactorProvider","twoFactorRemember","KdfRequest","encryptedPrivateKey","OrganizationKeysRequest","seatAdjustment","maxAutoscaleSeats","OrganizationTaxInfoUpdateRequest","TaxInfoUpdateRequest","emails","groupIds","PaymentRequest","clientOwnerEmail","organizationCreateRequest","fileLength","SendWithIdRequest","SendRequest","TwoFactorProviderRequest","TwoFactorRecoveryRequest","culture","OrganizationUserResetPasswordRequest","UpdateTwoFactorAuthenticatorRequest","UpdateTwoFactorDuoRequest","UpdateTwoFactorEmailRequest","UpdateTwoFactorWebAuthnDeleteRequest","UpdateTwoFactorWebAuthnRequest","UpdateTwoFactorYubioOtpRequest","ApiKeyResponse","apiKey","AttachmentResponse","AttachmentUploadDataResponse","fileUploadType","cipherResponse","cipherMiniResponse","CipherResponse","propertyName","exactName","otherCasePropertyName","BillingResponse","invoices","transactions","balance","paymentSource","BillingSourceResponse","BillingTransactionResponse","BillingInvoiceResponse","cardBrand","needsVerification","pdfUrl","paid","amount","createdDate","refunded","partiallyRefunded","refundedAmount","paymentMethodType","BreachAccountResponse","addedDate","breachDate","dataClasses","isActive","isVerified","logoPath","modifiedDate","pwnCount","PasswordHistoryResponse","CollectionResponse","SelectionReadOnlyResponse","DomainsResponse","globalEquivalentDomains","equivalentDomains","d","GlobalDomainResponse","EmergencyAccessGranteeDetailsResponse","granteeId","waitTimeDays","creationDate","EmergencyAccessGrantorDetailsResponse","grantorId","EmergencyAccessTakeoverResponse","keyEncrypted","EmergencyAccessViewResponse","identityResponse","errorModel","responseErrorModel","HCaptcha_SiteKey","messages","lastSep","EventResponse","collectionId","policyId","providerUserId","providerOrganizationId","actingUserId","ipAddress","FolderResponse","domains","excluded","GroupResponse","accessAll","access_token","expiresIn","expires_in","refresh_token","tokenType","token_type","KeyConnectorUserKeyResponse","KeysResponse","ListResponse","dr","continuationToken","NotificationResponse","contextId","payload","SyncCipherCreate","SyncCipherDelete","SyncCipherUpdate","SyncLoginDelete","SyncCipherNotification","SyncFolderCreate","SyncFolderDelete","SyncFolderUpdate","SyncFolderNotification","SyncVault","SyncCiphers","SyncOrgKeys","SyncSettings","LogOut","UserNotification","SyncSendCreate","SyncSendUpdate","SyncSendDelete","SyncSendNotification","OrganizationSsoResponse","SsoUrls","callbackPath","signedOutCallbackPath","spEntityId","spMetadataUrl","spAcsUrl","OrganizationAutoEnrollStatusResponse","OrganizationKeysResponse","OrganizationResponse","businessName","businessAddress1","businessAddress2","businessAddress3","businessCountry","businessTaxNumber","billingEmail","plan","PlanResponse","planType","OrganizationSubscriptionResponse","storageName","storageGb","subscription","BillingSubscriptionResponse","upcomingInvoice","BillingSubscriptionUpcomingInvoiceResponse","OrganizationUserBulkPublicKeyResponse","OrganizationUserBulkResponse","OrganizationUserResponse","twoFactorEnabled","OrganizationUserResetPasswordDetailsReponse","PaymentResponse","userProfile","ProfileResponse","paymentIntentClientSecret","product","isAnnual","nameLocalizationKey","descriptionLocalizationKey","canBeUsedByBusiness","baseSeats","baseStorageGb","maxUsers","hasAdditionalSeatsOption","maxAdditionalSeats","hasAdditionalStorageOption","maxAdditionalStorage","hasPremiumAccessOption","trialPeriodDays","hasSelfHost","hasPolicies","hasGroups","hasDirectory","hasEvents","hasTotp","has2fa","hasApi","hasSso","hasResetPassword","upgradeSortOrder","displaySortOrder","legacyYear","stripePlanId","stripeSeatPlanId","stripeStoragePlanId","stripePremiumAccessPlanId","basePrice","seatPrice","additionalStoragePricePerGb","premiumAccessOptionPrice","PolicyResponse","PreloginResponse","ProfileOrganizationResponse","ProfileProviderOrganizationResponse","ProfileProviderResponse","providerOrganizations","securityStamp","ProviderOrganizationResponse","organizationName","ProviderResponse","ProviderUserBulkPublicKeyResponse","ProviderUserBulkResponse","ProviderUserResponse","SendAccessResponse","SendFileDownloadDataResponse","SendFileUploadDataResponse","sendResponse","SendResponse","SubscriptionResponse","license","usingInAppPurchase","trialEndDate","periodStartDate","periodEndDate","cancelledDate","cancelAtEndDate","cancelled","BillingSubscriptionItemResponse","quantity","interval","sponsoredSubscriptionItem","SyncResponse","CollectionDetailsResponse","TaxInfoResponse","taxId","taxIdType","line1","line2","TaxRateResponse","rate","TwoFactorAuthenticatorResponse","TwoFactorDuoResponse","secretKey","integrationKey","TwoFactorEmailResponse","TwoFactorProviderResponse","TwoFactorRecoverResponse","TwoFactorWebAuthnResponse","KeyResponse","migrated","ChallengeResponse","attestation","authenticatorSelection","challenge","fromUrlB64ToArray","excludeCredentials","extensions","pubKeyCredParams","rp","TwoFactorYubiKeyResponse","key1","key2","key3","key4","key5","nfc","UserKeyResponse","fileSize","ItemView","_brand","_number","_subTitle","maskedCode","repeat","maskedNumber","subTitle","exp","formatYear","CardholderName","ExpMonth","ExpYear","Code","Brand","hasPasswordHistory","hasAttachments","hasOldAttachments","hasFields","passwordRevisionDisplayDate","linkedFieldValue","linkedFieldI18nKey","showCount","maskedValue","_firstName","_lastName","fullAddress","fullAddressPart2","addressPart2","MiddleName","Address1","Address2","Address3","City","PostalCode","Ssn","PassportNumber","LicenseNumber","FirstName","LastName","FullName","CanLaunchWhitelist","_uri","_domain","_hostname","_host","_canLaunch","getHost","hostnameOrUri","hostOrUri","canLaunch","hasUris","maskedPassword","maskedText","maxAccessCountReached","pendingDelete","logoutCallback","customUserAgent","isWebClient","isDesktopClient","IEBrowser","ChromeBrowser","EdgeBrowser","FirefoxBrowser","OperaBrowser","SafariBrowser","UnknownBrowser","VivaldiBrowser","WindowsDesktop","MacOsDesktop","LinuxDesktop","Headers","Accept","identityToken","getClientType","qsStringify","getCredentials","method","responseJson","isJsonResponse","json","TwoFactorProviders2","clearTwoFactorToken","refreshIdentityToken","doAuthRefresh","getProfile","getUserBilling","getUserSubscription","getTaxInfo","putProfile","putTaxInfo","postPrelogin","isDev","getApiUrl","postEmailToken","postEmail","postSetKeyConnectorKey","postSecurityStamp","deleteAccount","getAccountRevisionDate","postPremium","postIapCheck","postReinstatePremium","postCancelPremium","postAccountStorage","postAccountPayment","postAccountLicense","postAccountKey","postAccountVerifyEmail","postAccountVerifyEmailToken","postAccountRecoverDelete","postAccountRecoverDeleteToken","postAccountKdf","deleteSsoUser","postUserApiKey","postUserRotateApiKey","postAccountRequestOTP","postAccountVerifyOTP","postConvertToKeyConnector","getFolder","postFolder","putFolder","deleteFolder","getSend","postSendAccess","apiUrl","getSendFileDownloadData","getSends","postSend","postFileTypeSend","renewSendFileUploadUrl","fileId","postSendFile","postSendFileLegacy","putSend","putSendRemovePassword","deleteSend","getCipher","getCipherAdmin","getCiphersOrganization","postCipher","postCipherCreate","postCipherAdmin","putCipher","putCipherAdmin","deleteCipherAdmin","deleteManyCiphers","deleteManyCiphersAdmin","putMoveCiphers","putShareCipher","putShareCiphers","putCipherCollections","putCipherCollectionsAdmin","postPurgeCiphers","postImportCiphers","postImportOrganizationCiphers","putDeleteCipher","putDeleteCipherAdmin","putDeleteManyCiphers","putDeleteManyCiphersAdmin","putRestoreCipher","putRestoreCipherAdmin","putRestoreManyCiphers","postCipherAttachment","postCipherAttachmentLegacy","postCipherAttachmentAdminLegacy","deleteCipherAttachmentAdmin","postShareCipherAttachment","renewAttachmentUploadUrl","postAttachmentFile","getCollectionDetails","CollectionGroupDetailsResponse","getUserCollections","getCollections","getCollectionUsers","postCollection","putCollection","putCollectionUsers","deleteCollection","deleteCollectionUser","getGroupDetails","GroupDetailsResponse","getGroups","getGroupUsers","postGroup","putGroup","putGroupUsers","deleteGroup","deleteGroupUser","getPolicy","getPolicies","getPoliciesByToken","getPoliciesByInvitedUser","putPolicy","getOrganizationUser","OrganizationUserDetailsResponse","getOrganizationUserGroups","getOrganizationUsers","OrganizationUserUserDetailsResponse","getOrganizationUserResetPasswordDetails","postOrganizationUserInvite","postOrganizationUserReinvite","postManyOrganizationUserReinvite","postOrganizationUserAccept","postOrganizationUserConfirm","postOrganizationUsersPublicKey","postOrganizationUserBulkConfirm","putOrganizationUser","putOrganizationUserGroups","putOrganizationUserResetPassword","deleteOrganizationUser","deleteManyOrganizationUsers","getPlans","postImportDirectory","postPublicImportDirectory","getTaxRates","getSettingsDomains","putSettingsDomains","getSync","getTwoFactorProviders","getTwoFactorOrganizationProviders","getTwoFactorAuthenticator","getTwoFactorEmail","getTwoFactorDuo","getTwoFactorOrganizationDuo","getTwoFactorYubiKey","getTwoFactorWebAuthn","getTwoFactorWebAuthnChallenge","getTwoFactorRecover","putTwoFactorAuthenticator","putTwoFactorEmail","putTwoFactorDuo","putTwoFactorOrganizationDuo","putTwoFactorYubiKey","putTwoFactorWebAuthn","deviceResponse","rawId","getClientExtensionResults","AttestationObject","attestationObject","clientDataJson","clientDataJSON","deleteTwoFactorWebAuthn","putTwoFactorDisable","putTwoFactorOrganizationDisable","postTwoFactorRecover","postTwoFactorEmailSetup","getEmergencyAccessTrusted","getEmergencyAccessGranted","getEmergencyAccess","getEmergencyGrantorPolicies","putEmergencyAccess","deleteEmergencyAccess","postEmergencyAccessInvite","postEmergencyAccessReinvite","postEmergencyAccessAccept","postEmergencyAccessConfirm","postEmergencyAccessInitiate","postEmergencyAccessApprove","postEmergencyAccessReject","postEmergencyAccessTakeover","postEmergencyAccessPassword","postEmergencyAccessView","getOrganization","getOrganizationBilling","getOrganizationSubscription","getOrganizationLicense","installationId","getOrganizationTaxInfo","getOrganizationSso","postOrganization","putOrganization","putOrganizationTaxInfo","postOrganizationLicense","postOrganizationLicenseUpdate","postOrganizationApiKey","postOrganizationRotateApiKey","postOrganizationSso","postOrganizationUpgrade","postOrganizationUpdateSubscription","postOrganizationSeat","postOrganizationStorage","postOrganizationPayment","postOrganizationVerifyBank","postOrganizationCancel","postOrganizationReinstate","deleteOrganization","postOrganizationKeys","postProviderSetup","getProvider","putProvider","getProviderUsers","ProviderUserUserDetailsResponse","getProviderUser","postProviderUserInvite","postProviderUserReinvite","postManyProviderUserReinvite","postProviderUserBulkConfirm","deleteManyProviderUsers","postProviderUserAccept","postProviderUserConfirm","postProviderUsersPublicKey","putProviderUser","deleteProviderUser","getProviderClients","ProviderOrganizationOrganizationDetailsResponse","postProviderAddOrganization","postProviderCreateOrganization","deleteProviderOrganization","getEvents","addEventParameters","getEventsCipher","getEventsOrganization","getEventsOrganizationUser","getEventsProvider","getEventsProviderUser","postEventsCollect","authHeader","getActiveBearerToken","Authorization","getEventsUrl","getUserPublicKey","getHibpBreach","postBitPayInvoice","postSetupPayment","getUserKeyFromKeyConnector","handleError","postUserKeyToKeyConnector","getKeyConnectorAlive","getToken","tokenNeedsRefresh","getApplicationVersion","nativeFetch","postCreateSponsorship","sponsoredOrgId","deleteRevokeSponsorship","sponsoringOrganizationId","deleteRemoveSponsorship","sponsoringOrgId","postPreValidateSponsorshipToken","sponsorshipToken","postRedeemSponsorship","postResendSponsorshipOffer","getRefreshToken","doRefreshToken","getClientId","getClientSecret","doApiTokenRefresh","decodedToken","setTokens","deviceRequest","setToken","authed","hasResponse","alterHeaders","requestUrl","requestInit","FormData","tokenError","isTextResponse","Message","hasBaseUrl","typeHeader","makeAndGetAppId","getAnonymousAppId","existingId","htmlStorageLocation","Local","guid","newGuid","save","hashStart","hashEnding","breachedAccounts","throttle","logInStrategy","strategy","clearState","saveState","callback","preloginResponse","PreloginRequest","startSessionTimeout","clearSessionTimeout","sessionTimeout","upload","renewalCallback","azureUploadBlob","azureUploadBlocks","urlObject","searchParams","blobResponse","baseUrl","blockSize","getMaxBlockSize","blockIndex","numBlocks","ceil","blocksStaged","renewUrlIfNecessary","blockUrl","blockId","encodedBlockId","blockData","blockHeaders","blockRequest","blockResponse","blockListUrl","blockListXml","utfBlockId","fromUtf8ToB64","blockIdList","xml","Version","day","compareTo","encryptedFileName","encryptedFileData","apiCall","fd","blob","Blob","filepath","contentType","subscribers","messageCallback","unsubscribe","DomainMatchBlacklist","sortedCiphersCache","SortedCiphersCache","sortCiphersByLastUsed","getDecryptedCipherCache","getDecryptedCiphers","setDecryptedCipherCache","setDecryptedCiphers","clearIndex","indexCiphers","clearCache","clearDecryptedCiphersState","originalCipher","existingCipher","existingHiddenFields","hiddenFields","ef","matchedField","encryptObjProperty","encryptCipherData","encryptFields","encryptPasswordHistories","encryptAttachments","attachmentsModel","encAttachments","fieldsModel","encFields","encField","encryptField","fieldModel","phModels","encPhs","encPh","encryptPasswordHistory","phModel","getEncryptedCiphers","getLocalData","decCiphers","hasKey","getLocaleSortingFunction","getAllDecryptedForGrouping","groupingId","getAllDecryptedForUrl","includeOtherTypes","defaultMatch","eqDomainsPromise","getEquivalentDomains","eqDomains","eqDomain","matchingDomains","getDefaultUriMatch","domainUrlHost","urlHost","getAllFromApiForOrganization","getLastUsedForUrl","getCipherForUrl","getLastLaunchedForUrl","getNextCipherForUrl","updateLastUsedIndexForUrl","updateLastUsedDate","ciphersLocalData","setLocalData","decryptedCipherCache","cached","updateLastLaunchedDate","saveNeverDomain","getNeverDomains","setNeverDomains","CipherCreateRequest","upsert","attachmentPromises","shareAttachmentWithServer","encCipher","CipherShareRequest","shareManyWithServer","encCiphers","CipherBulkShareRequest","unencryptedFile","reader","FileReader","readAsArrayBuffer","onload","evt","cData","onerror","filename","encFileName","dataEncKey","encryptToBytes","adminRequest","uploadDataResponse","uploadCipherAttachment","legacyServerAttachmentFileUpload","CipherCollectionsRequest","setEncryptedCiphers","clearEncryptedCiphersState","moveManyWithServer","CipherBulkMoveRequest","deleteManyWithServer","CipherBulkDeleteRequest","deleteAttachment","aLastUsed","bLastUsed","bothNotNull","sortCiphersByLastUsedThenName","aName","bName","softDelete","setDeletedDate","softDeleteManyWithServer","clearDeletedDate","restoreManyWithServer","CipherBulkRestoreRequest","restores","attachmentView","attachmentResponse","theObj","modelProp","lastUsed","autofillOnPageLoadDefault","getAutoFillOnPageLoadDefault","clearSortedCiphers","sequentialize","setDecryptedCollections","decryptMany","decCollections","getEncryptedCollections","decryptedCollections","getDecryptedCollections","nodes","collectionCopy","getNested","CollectionData","setEncryptedCollections","timersMap","debug","write","Debug","Info","Warning","level","log","warn","hrtime","timeEnd","elapsed","attachToWindow","attachToGlobal","platformUtilService","setCryptoMasterKey","storeKey","keyHash","setDecryptedCryptoSymmetricKey","setEncryptedCryptoSymmetricKey","encPrivateKey","setDecryptedPrivateKey","setEncryptedPrivateKey","setOrgKeys","providerOrgs","orgKeys","providerOrg","providerKey","getProviderKey","setDecryptedOrganizationKeys","setEncryptedOrganizationKeys","setProviderKeys","setDecryptedProviderKeys","setEncryptedProviderKeys","keySuffix","inMemoryKey","getCryptoMasterKey","Auto","symmetricKey","getKeyFromStorage","retrieveKeyFromStorage","validateKey","clearSecretKeyStore","storedKeyHash","getEncKeyHelper","getPublicKey","inMemoryPublicKey","getPrivateKey","rsaExtractPublicKey","setPublicKey","decryptedPrivateKey","getDecryptedPrivateKey","getEncryptedPrivateKey","getFingerprint","keyFingerprint","userFingerprint","hkdfExpand","hashPhrase","getOrgKeys","decryptedOrganizationKeys","getDecryptedOrganizationKeys","encOrgKeys","getEncryptedOrganizationKeys","rsaDecrypt","getProviderKeys","decryptedProviderKeys","getDecryptedProviderKeys","encProviderKeys","getEncryptedProviderKeys","hasKeyInMemory","getCryptoMasterKeyAuto","hasCryptoMasterKeyBiometric","getEncryptedCryptoSymmetricKey","clearKey","clearSecretStorage","setLegacyEtmKey","clearStoredKey","setCryptoMasterKeyAuto","setCryptoMasterKeyBiometric","clearKeyHash","clearEncKey","memoryOnly","clearKeyPair","keysToClear","clearOrgKeys","clearProviderKeys","clearPinProtectedKey","setEncryptedPinProtected","clearKeys","toggleKey","pbkdf2","protectedKeyCs","pinProtectedKey","getEncryptedPinProtected","decKey","makeShareKey","shareKey","randomBytes","keyPair","rsaGenerateKeyPair","stretchKey","keyMaterial","sendKey","hkdf","hashPurpose","iterations","theKey","getKeyForEncryption","buildEncKey","plainValue","plainBuf","encObj","aesEncrypt","encValue","macLen","encBytes","EncArrayBuffer","privateKeyValue","Rsa2048_OaepSha256_HmacSha256_B64","Rsa2048_OaepSha1_HmacSha256_B64","alg","encString","decipher","aesDecryptToBytes","aesDecryptToUtf8","encBuf","ctBytes","ivBytes","macBytes","randomNumber","min","rval","range","bitsNeeded","log2","bytesNeeded","mask","pow","byteArray","shouldStoreKey","getBiometricUnlock","getCryptoMasterKeyBiometric","EncryptedObject","macData","keyForEnc","resolveLegacyKey","fastParams","aesDecryptFastParameters","computedMac","hmacFast","compareFast","aesDecryptFast","aesDecrypt","legacyKey","getLegacyEtmKey","minimumEntropy","entropyPerWord","numWords","hashArr","phrase","hashNumber","bigInt","fromArray","remainder","mod","divide","encKeyEnc","getDecryptedCryptoSymmetricKey","decEncKey","encKeyCipher","symmetricCryptoKey","urlsSubject","setUrlsFromStorage","getNotificationsUrl","notificationsUrl","identityUrl","eventsUrl","getEnvironmentUrls","envUrls","setUrls","formatUrl","setEnvironmentUrls","getUrls","checkOnInterval","uploadEvents","setInterval","uploadImmediately","orgIds","eventCollection","getEventCollection","EventData","setEventCollection","EventRequest","clearEvents","getOrganizationExport","getEncryptedExport","getDecryptedExport","getPasswordProtectedExport","clearText","encText","jsonDoc","getOrganizationEncryptedExport","getOrganizationDecryptedExport","getEventExport","unparse","Event","padNumber","getHours","getMinutes","getSeconds","decFolders","exportCiphers","buildCommonCipher","collectionPromises","decCol","cipherPromises","decCipher","collectionsMap","num","padCharacter","numString","azureFileUploadService","AzureFileUploadService","bitwardenFileUploadService","BitwardenFileUploadService","uploadSendFile","uploadData","Direct","Azure","setDecryptedFolders","getEncryptedFolders","decryptedFolders","getDecryptedFolders","noneFolder","folderCopy","FolderData","setEncryptedFolders","updates","systemLanguage","localesDirectory","getLocalesJson","supportedTranslationLocales","localeNames","defaultMessages","localeMessages","Intl","Collator","numeric","sensitivity","loadMessages","translate","messagesObj","formattedLocale","locales","placeholders","placeProp","replaceToken","replaceContent","getImportOptions","import","importer","fileContents","importResult","halfway","last","badData","postImport","errorResponse","handleServerError","getImporter","getImporterInstance","ImportCiphersRequest","KvpRequest","ImportOrganizationCiphersRequest","CollectionRequest","itemType","setUsesKeyConnector","userNeedsMigration","loggedInUsingSso","getIsExternal","requiredByOrganization","userIsNotUsingKeyConnector","keyConnectorRequest","KeyConnectorUserKeyRequest","userKeyResponse","keyArr","pubKey","privKey","setPasswordRequest","SetKeyConnectorKeyRequest","setConvertAccountRequired","setConvertAccountToKeyConnector","getConvertAccountToKeyConnector","connected","inactive","reconnectTimer","signalrConnection","off","signalR","HubConnectionBuilder","withUrl","accessTokenFactory","skipNegotiation","transport","HttpTransportType","WebSockets","withHubProtocol","signalRMsgPack","MessagePackHubProtocol","on","processNotification","onclose","reconnect","isAuthedAndUnlocked","updateConnection","sync","reconnectFromActivity","disconnectFromInactivity","notification","isAuthenticated","payloadUserId","UserId","myUserId","syncUpsertCipher","syncDeleteCipher","syncUpsertFolder","syncDeleteFolder","syncUpsertSend","syncDeleteSend","getOrganizations","Organization","getByIdentifier","setOrganizations","canManageSponsorships","DefaultOptions","minNumber","minUppercase","minLowercase","minSpecial","wordSeparator","generatePassphrase","sanitizePasswordLength","positions","shuffleArray","allCharSet","lowercaseCharSet","uppercaseCharSet","numberCharSet","specialCharSet","positionChars","randomCharIndex","listLength","wordList","wordIndex","appendRandomNumberToRandomWord","getPasswordGenerationOptions","setPasswordGenerationOptions","enforcedOptions","enforcePasswordGeneratorPoliciesOnOptions","getPasswordGeneratorPolicyOptions","PasswordGenerator","currentPolicy","useUpper","useLower","minNumbers","getDecryptedPasswordGenerationHistory","getEncryptedPasswordGenerationHistory","decrypted","decryptHistory","setDecryptedPasswordGenerationHistory","currentHistory","matchesPrevious","unshift","GeneratedPasswordHistory","newHistory","encryptHistory","setEncryptedPasswordGenerationHistory","userInputs","globalUserInputs","finalUserInputs","zxcvbn","array","j","forGeneration","minUppercaseCalc","minLowercaseCalc","minNumberCalc","minSpecialCalc","setDecryptedPolicies","decryptedPolicies","getDecryptedPolicies","diskPolicies","getEncryptedPolicies","policy","getPolicyForOrganization","policyType","PolicyData","setEncryptedPolicies","mapPoliciesFromToken","newPassword","toLocaleLowerCase","toLocaleUpperCase","getResetPasswordPolicyOptions","resetPasswordPolicyOptions","ResetPassword","policiesResponse","policyFilter","filteredPolicies","policySet","Accepted","isExcemptFromPolicies","Provider","indexing","searchableMinLength","builder","lunr","Builder","boost","extractor","uriExtractor","fieldExtractor","attachmentExtractor","isArray","getIndexForSearch","searchCiphersBasic","ciphersMap","searchResults","soWild","Query","wildcard","LEADING","TRAILING","q","tokenizer","term","joined","protocolIndex","queryIndex","setDecryptedSends","fileData","passwordHash","ArrayBuffer","encryptFileData","parseFile","getEncryptedSends","decSends","getDecryptedSends","legacyServerSendFileUpload","SendData","setEncryptedSends","Keys","setSettings","getSettingsKey","setEquivalentDomains","setSettingsKey","getSettings","partialKeys","stateFactory","useAccountCache","BehaviorSubject","createGlobals","hasBeenInited","accountDiskCache","needsMigration","migrate","initAccountState","syncAccountFromDisk","storedActiveUser","activeUserId","pushAccounts","diskAccount","getAccountFromDisk","setAccountEnvironmentUrls","scaffoldNewAccountStorage","setLastActive","setActiveUser","clearDecryptedDataForActiveUser","clean","reconcileOptions","defaultInMemoryOptions","deAuthenticateAccount","dynamicallySetActiveUser","removeAccountFromDisk","removeAccountFromMemory","getAccessToken","getTimeoutBasedStorageOptions","getAccount","setAccessToken","saveAccount","getAlwaysShowDock","getGlobals","defaultOnDiskOptions","alwaysShowDock","setAlwaysShowDock","saveGlobals","getApiKeyClientId","apiKeyClientId","getApiKeyClientSecret","apiKeyClientSecret","getAutoConfirmFingerPrints","autoConfirmFingerPrints","setAutoConfirmFingerprints","autoFillOnPageLoadDefault","setAutoFillOnPageLoadDefault","getBiometricAwaitingAcceptance","biometricAwaitingAcceptance","setBiometricAwaitingAcceptance","getBiometricFingerprintValidated","biometricFingerprintValidated","setBiometricFingerprintValidated","getBiometricLocked","biometricLocked","setBiometricText","biometricUnlock","setBiometricUnlock","getClearClipboard","defaultOnDiskLocalOptions","clearClipboard","setClearClipboard","convertAccountToKeyConnector","cryptoMasterKey","defaultSecureStorageOptions","saveSecureStorageKey","getCryptoMasterKeyB64","setCryptoMasterKeyB64","getDecodedToken","setDecodedToken","defaultUriMatch","setDefaultUriMatch","getDisableAddLoginNotification","disableAddLoginNotification","setDisableAddLoginNotification","getDisableAutoBiometricsPrompt","disableAutoBiometricsPrompt","setDisableAutoBiometricsPrompt","getDisableAutoTotpCopy","disableAutoTotpCopy","setDisableAutoTotpCopy","getDisableBadgeCounter","disableBadgeCounter","setDisableBadgeCounter","getDisableChangedPasswordNotification","disableChangedPasswordNotification","setDisableChangedPasswordNotification","getDisableContextMenuItem","disableContextMenuItem","setDisableContextMenuItem","getDisableGa","disableGa","setDisableGa","getDontShowCardsCurrentTab","dontShowCardsCurrentTab","setDontShowCardsCurrentTab","getDontShowIdentitiesCurrentTab","dontShowIdentitiesCurrentTab","setDontShowIdentitiesCurrentTab","setEmail","setEmailVerified","getEnableAlwaysOnTop","accountPreference","enableAlwaysOnTop","globalPreference","setEnableAlwaysOnTop","getEnableAutoFillOnPageLoad","enableAutoFillOnPageLoad","setEnableAutoFillOnPageLoad","getEnableBiometric","enableBiometrics","setEnableBiometric","getEnableBrowserIntegration","enableBrowserIntegration","setEnableBrowserIntegration","getEnableBrowserIntegrationFingerprint","enableBrowserIntegrationFingerprint","setEnableBrowserIntegrationFingerprint","getEnableCloseToTray","enableCloseToTray","setEnableCloseToTray","getEnableFullWidth","enableFullWidth","setEnableFullWidth","enableGravitars","setEnableGravitars","getEnableMinimizeToTray","enableMinimizeToTray","setEnableMinimizeToTray","getEnableStartToTray","enableStartToTray","setEnableStartToTray","getEnableTray","enableTray","setEnableTray","defaultOnDiskMemoryOptions","getEntityId","entityId","setEntityId","getEntityType","entityType","setEntityType","getGlobalEnvironmentUrls","getEverBeenUnlocked","everBeenUnlocked","getForcePasswordReset","setForcePasswordReset","getInstalledVersion","installedVersion","setInstalledVersion","getLastActive","getLastSync","lastSync","setLastSync","legacyEtmKey","getLocale","setLocale","getLoginRedirect","loginRedirect","getMainWindowSize","mainWindowSize","setMainWindowSize","getMinimizeOnCopyToClipboard","minimizeOnCopyToClipboard","setMinimizeOnCopyToClipboard","neverDomains","getNoAutoPromptBiometrics","noAutoPromptBiometrics","setNoAutoPromptBiometrics","getNoAutoPromptBiometricsText","noAutoPromptBiometricsText","setNoAutoPromptBiometricsText","getOpenAtLogin","openAtLogin","setOpenAtLogin","organizationInvitation","passwordGenerationOptions","getUsernameGenerationOptions","usernameGenerationOptions","setUsernameGenerationOptions","setProtectedPin","setRefreshToken","rememberedEmail","getSecurityStamp","setSecurityStamp","getSsoOrgIdentifier","ssoOrganizationIdentifier","setSsoOrganizationIdentifier","ssoState","getTheme","setTheme","setVaultTimeout","getVaultTimeoutAction","accountVaultTimeoutAction","globalVaultTimeoutAction","setVaultTimeoutAction","getStateVersion","setStateVersion","getWindow","setWindow","useMemory","storageLocation","getGlobalsFromMemory","useDisk","getGlobalsFromDisk","saveGlobalsToMemory","saveGlobalsToDisk","useSecureStorage","getAccountFromMemory","getUserIdFromMemory","cachedAccount","Memory","Both","Disk","saveAccountToMemory","saveAccountToDisk","deepClone","scaffoldNewAccountLocalStorage","scaffoldNewAccountSessionStorage","scaffoldNewAccountMemoryStorage","storedAccount","pruneInMemoryAccounts","requestedOptions","defaultOptions","Session","getActiveUserIdFromStorage","removeAccountFromLocalStorage","resetAccount","removeAccountFromSessionStorage","removeAccountFromSecureStorage","persistentAccountInformation","timeoutAction","v1Keys","autoConfirmFingerprints","enableBiometric","enableGravatars","encPrivate","lastActive","ssoIdentifier","stamp","usesConnector","v1KeyPrefixes","currentStateVersion","getCurrentStateVersion","Latest","migrateStateFrom1To2","Two","migrateStateFrom2To3","Three","migrateStateFrom3To4","clearV1Keys","clearingUserId","keyPrefix","defaultAccount","accountSettings","cryptoMasterKeyAuto","cryptoMasterKeyB64","cryptoMasterKeyBiometric","authenticationStatus","authenticatedUserIds","Four","syncInProgress","toJSON","forceSync","allowThrowOnError","syncStarted","syncCompleted","needsSync","needsSyncing","syncProfile","syncFolders","syncCollections","syncCiphers","syncSends","syncSettings","syncPolicies","isEdit","localFolder","remoteFolder","shouldUpdate","localCipher","checkCollections","remoteCipher","localSend","remoteSend","successfully","OrganizationData","ProviderData","decoded","fromUrlB64ToUtf8","clientIdClientSecret","setClientId","setClientSecret","clearToken","storedToken","getTokenExpirationDate","setUTCSeconds","tokenSecondsRemaining","offsetSeconds","msRemaining","round","email_verified","getName","getPremium","getIssuer","iss","amr","B32Chars","SteamChars","getCode","period","digits","keyB32","isOtpAuth","isSteamAuth","getQueryParams","digitParams","periodParam","algParam","epoch","timeHex","leftPad","decToHex","timeBytes","fromHexToArray","keyBytes","b32ToBytes","sign","offset","fullCode","trunc","getTimeInterval","isAutoCopyEnabled","b32ToHex","cleanedInput","bits","hex","byteIndex","chunk","signature","priority","Yubikey","selectedTwoFactorProviderType","twoFactorProvidersData","supportsDuo","providerPriority","_value","setSelectedProvider","clearProviders","buildRequest","requestClass","alreadyHashed","validateInput","VerifyOTPRequest","wordCapitalize","wordIncludeNumber","generateCatchall","generateSubaddress","generateWord","word","zeroPad","atIndex","emailBeginning","emailEnding","subaddressString","randomString","catchallDomain","startString","charSet","lockedCallback","loggedOutCallback","startCheck","checkVaultTimeout","isViewOpen","shouldLock","executeTimeoutAction","lock","allowSoftLock","setVaultTimeoutOptions","action","currentAction","isLoggedOut","vaultTimeoutSeconds","algorithm","wcLen","passwordBuf","toBuf","pbkdf2Params","toWebCryptoAlgorithm","impKey","importKey","deriveBits","ikm","outputByteSize","hkdfParams","prk","hashLen","infoBuf","infoArr","runningOkmLength","previousT","okm","md","forge","md5","sha1","valueBytes","toByteString","update","fromByteStringToArray","digest","valueBuf","signingAlgorithm","mac1","mac2","arr1","arr2","getBytes","rand","Uint32Array","util","createBuffer","putInt32","DecryptParameters","meta","encKeyByteString","macKeyByteString","decode64","parameters","dataBuffer","createDecipher","finish","rsaParams","impPrivateKey","jwkPrivateKey","exportKey","jwkPublicKeyParams","kty","ext","impPublicKey","modulusLength","publicExponent","generateKey","getRandomValues","encodeUtf8","fromBufferToByteString","styles","primary","secondary","danger","hoverStyles","BadgeComponent","badgeType","isSpan","nodeName","classes","BadgeModule","buttonStyles","ButtonComponent","buttonType","block","ButtonModule","defaultIcon","defaultI18n","calloutClass","headerClass","CalloutModule","AcceptEmergencyComponent","BaseAcceptComponent","requiredParameters","failedShortMessage","failedMessage","authedHandler","EmergencyAccessAcceptRequest","unauthedHandler","AcceptOrganizationComponent","OrganizationUserAcceptRequest","performResetPasswordAutoEnroll","policyList","HintComponent","routerService","previousUrl","getPreviousUrl","showResetPasswordAutoEnrollWarning","goAfterLogIn","getRememberEmail","invite","resetPasswordPolicy","policiesData","setRememberEmail","RecoverDeleteComponent","DeleteRecoverRequest","RecoverTwoFactorComponent","recoveryCode","showCreateOrgMessage","layout","ReferenceEventRequest","flow","reference","cookie","shift","storedIdentifier","anotherMethod","modal","twoFactorOptionsModal","comp","VerifyEmailTokenComponent","VerifyEmailRequest","VerifyRecoverDeleteComponent","VerifyDeleteRecoverRequest","BroadcasterSubscriptionId","AppComponent","broadcasterService","notificationsService","policyListService","lastActivity","idleTimer","isIdle","runOutsideAngular","onmousemove","recordActivity","onmousedown","ontouchstart","onclick","onscroll","onkeypress","run","command","setPreviousUrl","setFullWidth","NavigationEnd","jq","addPolicies","TwoFactorAuthenticationPolicy","MasterPasswordPolicy","PasswordGeneratorPolicy","SingleOrgPolicy","RequireSsoPolicy","PersonalOwnershipPolicy","DisableSendPolicy","SendOptionsPolicy","ResetPasswordPolicy","idleStateChanged","msg","sanitize","SecurityContext","HTML","enableHtml","trustedHtml","timeOut","AppModule","OssModule","BrowserAnimationsModule","ServicesModule","InfiniteScrollModule","DragDropModule","OssRoutingModule","WildcardRoutingModule","getRedirectRoute","urlTree","parseUrl","BaseEventsComponent","dirtyDates","defaultDates","getDefaultDateFilters","exportEvents","appApiPromiseUnfulfilled","dates","parseDates","exportPromise","export","loadEvents","clearExisting","loadAndParseEvents","refreshPromise","morePromise","startDate","endDate","requestEvents","eventInfo","getEventInfo","getUserName","EventView","formatDateFilters","exportFileName","BasePeopleComponent","searchPipe","userNamePipe","statusMap","users","pagedUsers","allUsers","didScroll","pageSize","pagedUsersCount","allCount","invitedCount","userStatusType","Invited","acceptedCount","confirmedCount","showConfirmUsers","showBulkConfirmUsers","getUsers","iterateEnum","resetPaging","loadMore","pagedLength","pagedSize","checkUser","filteredUsers","selectCount","deleteWarningMessage","deleteUser","removeUser","reinvite","reinviteUser","confirm","confirmUser","mapIndex","updateUser","publicKeyResponse","autoConfirm","UserConfirmComponent","confirmModalRef","onConfirmedUser","fingerprint","isPaging","searching","getCheckedUsers","NestedCheckboxComponent","onSavedUser","onDeletedUser","parentIndeterminate","parentChecked","checkboxes","pascalize","camelToPascalCase","PasswordStrengthComponent","showText","scoreWidth","PremiumBadgeComponent","premiumRequired","FooterComponent","FrontendLayoutComponent","NavbarComponent","selfHosted","isSelfHost","OrganizationLayoutComponent","showMenuBar","showManageTab","showToolsTab","toolsRoute","manageRoute","UserLayoutComponent","enableProdMode","platformBrowser","bootstrapModule","preserveWhitespaces","BulkConfirmComponent","publicKeys","fingerprints","statuses","done","excludedUsers","isAccepted","getPublicKeys","getCryptoKey","userIdsWithKeys","postConfirmRequest","OrganizationUserBulkRequest","OrganizationUserBulkConfirmRequest","BulkRemoveComponent","deleteUsers","BulkStatusComponent","CollectionAddEditComponent","onSavedCollection","onDeletedCollection","accessGroups","groupsResponse","check","SelectionReadOnlyRequest","canCreate","pagedCollectionsCount","decryptCollections","assignedCollections","pagedCollections","canEdit","canDelete","addEditModalRef","removeCollection","EntityUsersComponent","usersModalRef","entity","entityName","onEditedUsers","EntityEventsComponent","showUser","orgUsersUserIdMap","orgUsersIdMap","organizationUserType","organizationUserStatusType","showSelected","selectedCount","loadUsers","selectedChanged","filterSelected","selections","EventsComponent","GroupAddEditComponent","onSavedGroup","onDeletedGroup","access","GroupRequest","GroupsComponent","pagedGroupsCount","pagedGroups","removeGroup","ManageComponent","accessPolicies","accessEvents","accessSso","PeopleComponent","userType","canResetPassword","orgUseResetPassword","orgHasKeys","orgResetPasswordPolicyEnabled","callingUserType","orgShareKey","viewEvents","relativeTo","OrganizationUserConfirmRequest","allowResetPassword","orgUser","callingUserHasPermission","showEnrolledStatus","UserAddEditComponent","UserGroupsComponent","groupsModalRef","bulkRemove","bulkRemoveModalRef","bulkReinvite","showBulkStatus","bulkConfirm","bulkConfirmModalRef","eventsModalRef","resetPassword","ResetPasswordComponent","resetPasswordModalRef","onPasswordReset","successfullMessage","childComponent","bulkStatusModalRef","keyedErrors","keyedFilteredUsers","PoliciesComponent","policiesEnabledMap","policyIdFromEvents","orgPolicy","orgPolicies","op","PolicyEditComponent","editModalRef","onSavedPolicy","cdr","factory","policyComponent","policyFormRef","policyResponse","Enabled","loggedOutWarningName","orgSymKey","decPrivateKey","newPasswordStrengthTimeout","User","manageAllCollectionsCheckboxes","manageAssignedCollectionsCheckboxes","customUserTypeSelected","setRequestPermissions","clearPermissions","handleDependentPermissions","OrganizationUserUpdateRequest","OrganizationUserInviteRequest","dontAskAgain","userGroups","ug","OrganizationUserUpdateGroupsRequest","display","BasePolicyComponent","loadData","buildRequestData","PolicyRequest","BasePolicy","DisableSendPolicyComponent","MasterPasswordPolicyComponent","showKeyConnectorInfo","passwordScores","PasswordGeneratorPolicyComponent","defaultTypes","PersonalOwnershipPolicyComponent","RequireSso","RequireSsoPolicyComponent","singleOrgEnabled","SingleOrg","ResetPasswordPolicyComponent","SendOptionsPolicyComponent","SingleOrgPolicyComponent","TwoFactorAuthentication","TwoFactorAuthenticationPolicyComponent","AccountComponent","canUseApi","OrganizationUpdateRequest","submitTaxInfo","taxFormPromise","taxInfo","DeleteOrganizationComponent","deleteModalRef","onSuccess","purgeVault","PurgeVaultComponent","purgeModalRef","viewApiKey","ApiKeyComponent","apiKeyModalRef","keyType","postKey","grantType","apiKeyTitle","apiKeyWarning","apiKeyDescription","rotateApiKey","rotateApiKeyModalRef","isRotation","TaxInfoComponent","AdjustSubscription","onAdjusted","limitSubscription","newSeatCount","currentSeatCount","newMaxSeats","OrganizationSubscriptionUpdateRequest","limitSubscriptionChanged","adjustedSeatTotal","maxSeatTotal","ChangePlanComponent","onChanged","onCanceled","defaultUpgradePlan","FamiliesAnnually","defaultUpgradeProduct","Families","CountBasedLocalizationKey","singular","plural","OrganizationContentSummaryItem","localizationKeyOptions","localizationKey","OrganizationContentSummary","totalItemCount","itemCountByType","deleteOrganizationRequestType","organizationContentSummary","buildOrganizationContentSummary","organizationItems","getOrganizationItemCountByType","getOrganizationItemLocalizationKeysByType","DownloadLicenseComponent","onDownloaded","licenseString","OrganizationBillingComponent","UserBillingComponent","firstLoaded","OrganizationSubscriptionComponent","adjustSeatsAdd","showAdjustSeats","showAdjustSeatAutoscale","adjustStorageAdd","showAdjustStorage","showUpdateLicense","showDownloadLicense","showChangePlan","userOrg","reinstate","reinstatePromise","cancelPromise","changePlan","closeChangePlan","changed","downloadLicense","closeDownloadLicense","updateLicense","closeUpdateLicense","updated","subscriptionAdjusted","adjustStorage","closeStorage","removeSponsorship","removeSponsorshipPromise","isExpired","subscriptionMarkedForCancel","nextInvoice","storagePercentage","toFixed","storageProgressWidth","billingInterval","storageGbPrice","canAdjustSeats","isSponsoredSubscription","canDownloadLicense","Free","subscriptionDesc","FamiliesAnnually2019","showChangePlanButton","SettingsComponent","access2fa","TwoFactorSetupComponent","manage","duoComp","openModal","duoModalRef","TwoFactorDuoComponent","onUpdated","updateStatus","filterProvider","FamiliesForEnterpriseSetupComponent","badToken","showNewOrganization","_selectedFamilyOrganizationId","organizationPlansComponent","acceptingSponsorship","onOrganizationCreateSuccess","existingFamilyOrganizations","selectedFamilyOrganizationId","OrganizationSponsorshipRedeemRequest","planSponsorshipType","FamiliesForEnterprise","sponsoredOrganizationId","OrganizationPlansComponent","ExposedPasswordsReportComponent","dynamicSuper","getPrototypeOf","manageableCiphers","getAllCiphers","canManageCipher","ImportComponent","importService","successNavigate","importBlockedByPolicy","InactiveTwoFactorReportComponent","ReusedPasswordsReportComponent","ToolsComponent","upgradeOrganization","UnsecuredWebsitesReportComponent","WeakPasswordsReportComponent","totpService","allowOwnershipAssignment","viewOnly","reupload","showFixOldAttachments","onEventsClicked","allCiphers","collectionDomains","unassignedCollection","VaultComponent","changeDetectorRef","trashCleanupWarning","groupingsComponent","ciphersComponent","filterDeleted","filterCipherType","filterCollection","clearGroupingFilters","showAddNew","clearFilters","go","filterSearchText","editCipherAttachments","madeAttachmentChanges","attachmentsModalRef","editCipherCollections","collectionsModalRef","editCipher","cipherAddEditModalRef","cloneCipher","replaceUrl","routes","pathMatch","titleId","redirectTo","AccessComponent","OptionsComponent","DomainRulesComponent","PremiumComponent","UserSubscriptionComponent","OrganizationsComponent","CreateOrganizationComponent","EmergencyAccessComponent","EmergencyAccessViewComponent","SponsoredFamiliesComponent","loadChildren","ReportsModule","OrganizationGuardService","OrganizationTypeGuardService","AccessImportExport","AccessReports","CreateNewCollections","EditAnyCollection","DeleteAnyCollection","EditAssignedCollections","DeleteAssignedCollections","AccessEventLogs","ManageGroups","ManageUsers","ManagePolicies","ManageUsersPassword","ManageOrganization","RouterModule","useHash","paramsInheritanceStrategy","registerLocaleData","ToastrModule","ProvidersComponent","BreachReportComponent","checkedUsername","CipherReportComponent","requiresPaid","hasLoaded","setCiphers","repromptCipher","checkAccess","accessPremium","exposedPasswordMap","exposedPasswordCiphers","exposedCount","services","cipherDocs","load2fa","inactive2faCiphers","docs","serviceData","documentation","additionalDomain","ReportTypes","reports","exposedPasswords","requiresPremium","reusedPasswords","weakPasswords","unsecuredWebsites","inactive2fa","dataBreach","ReportCardComponent","report","hasPremium","bypassSecurityTrustHtml","click","ReportListComponent","ReportsComponent","forChild","ciphersWithPasswords","passwordUseMap","reusedPasswordCiphers","unsecuredCiphers","passwordStrengthMap","passwordStrengthCache","weakPasswordCiphers","isUserNameNotEmpty","getCacheKey","hasUserName","scoreKey","unavailable","sendText","downloadData","accessRequest","toggleText","keyArray","SendAccessRequest","sendAccess","ControlContainer","NgForm","addSend","editSend","sendAddEditModalRef","toDateTimeLocalString","filterStart","filterEnd","EventOptions","appInfo","getAppInfo","getEventMessage","humanReadableMsg","User_LoggedIn","User_ChangedPassword","User_Updated2fa","User_Disabled2fa","User_Recovered2fa","User_FailedLogIn","User_FailedLogIn2fa","User_UpdatedTempPassword","User_MigratedKeyToKeyConnector","Cipher_Created","formatCipherId","getShortId","Cipher_Updated","Cipher_Deleted","Cipher_SoftDeleted","Cipher_Restored","Cipher_AttachmentCreated","Cipher_AttachmentDeleted","Cipher_Shared","Cipher_ClientCopiedHiddenField","Cipher_ClientCopiedPassword","Cipher_ClientCopiedCardCode","Cipher_ClientAutofilled","Cipher_UpdatedCollections","Collection_Created","formatCollectionId","Collection_Updated","Collection_Deleted","Group_Created","formatGroupId","Group_Updated","Group_Deleted","OrganizationUser_Invited","formatOrgUserId","OrganizationUser_Confirmed","OrganizationUser_Updated","OrganizationUser_Removed","OrganizationUser_UpdatedGroups","OrganizationUser_UnlinkedSso","OrganizationUser_ResetPassword_Enroll","OrganizationUser_ResetPassword_Withdraw","OrganizationUser_AdminResetPassword","OrganizationUser_ResetSsoLink","OrganizationUser_FirstSsoLogin","Organization_Updated","Organization_PurgedVault","Organization_VaultAccessed","Organization_EnabledSso","Organization_DisabledSso","Organization_EnabledKeyConnector","Organization_DisabledKeyConnector","Policy_Updated","formatPolicyId","ProviderUser_Invited","formatProviderUserId","ProviderUser_Confirmed","ProviderUser_Updated","ProviderUser_Removed","ProviderOrganization_Created","formatProviderOrganizationId","ProviderOrganization_Added","ProviderOrganization_Removed","ProviderOrganization_VaultAccessed","Android","iOS","UWP","ChromeExtension","FirefoxExtension","OperaExtension","EdgeExtension","VivaldiExtension","SafariExtension","shortId","cipherInfo","makeAnchor","innerHTML","pad","norm","abs","modalOpen","ManageSso","RouterService","activatedRoute","titleService","currentUrl","rawTitle","child","firstChild","snapshot","newTitle","setTitle","initFactory","eventLoggingService","getBaseUrl","htmlEl","documentElement","onDefaultSystemThemeChange","sysTheme","Light","Dark","ContainerService","APP_INITIALIZER","PolicyListService","language","HtmlStorageService","MemoryStorageService","WebPlatformUtilsService","BroadcasterMessagingService","ImportService","showChangePassword","showChangeKdf","showChangeEmail","deauthorizeSessions","DeauthorizeSessionsComponent","deauthModalRef","DeleteAccountComponent","viewUserApiKey","viewUserApiKeyModalRef","rotateUserApiKey","rotateUserApiKeyModalRef","AddCreditComponent","PayPal","onAdded","ppLoading","payPalConfig","ppButtonFormAction","ppButtonBusinessId","creditAmount","ppButtonCustomField","subject","returnUrl","ppButtonFormRef","BitPay","BitPayInvoiceRequest","credit","creditAmountNumber","bitPayUrl","formatAmount","floatAmount","parseFloat","ElementRef","AdjustPaymentComponent","paymentComponent","createPaymentToken","paymentToken","taxInfoComponent","changeCountry","hideBank","changeMethod","PaymentComponent","AdjustStorageComponent","storageAdjustment","StorageRequest","storageGbAdjustment","paymentFailed","handleStripeCardPayment","adjustedStorageTotal","ChangeEmailComponent","tokenSent","showTwoFactorEmailWarning","newEmail","reset","ChangeKdfComponent","kdfOptions","recommendedKdfIterations","rotateEncKey","rotateEncKeyClicked","updateKey","UpdateKeyRequest","updateEmergencyAccesses","updateAllResetPasswordKeys","emergencyAccess","allowedStatuses","RecoveryInitiated","RecoveryApproved","filteredAccesses","updateRequest","EmergencyAccessUpdateRequest","orgPlansComponent","TeamsAnnually","Teams","EnterpriseAnnually","Enterprise","toggleExcluded","globalDomain","customize","UpdateDomainsRequest","excludedGlobalEquivalentDomains","d2","indexTrackBy","EmergencyAccessAddEditComponent","onDeleted","View","emergencyAccessType","waitTimes","waitTime","EmergencyAccessInviteRequest","EmergencyAccessAttachmentsComponent","EmergencyAccessConfirmComponent","onConfirmed","EmergencyAccessTakeoverComponent","onDone","takeoverResponse","oldKeyBuffer","oldEncKey","EmergencyAccessPasswordRequest","EmergencyAddEditComponent","viewAttachments","cipherData","emergencyAccessStatusType","isOrganizationOwner","trustedContacts","grantedContacts","contact","doConfirmation","removeGrantee","removeGrantor","requestAccess","approve","takeover","takeoverModalRef","EmergencyAccessConfirmRequest","LinkSsoComponent","ngAfterContentInit","localeOptions","themeOptions","disableIcons","startingLocale","startingTheme","valid","effectiveTheme","getEffectiveTheme","vaultTimeoutActionChanged","newValue","showFree","showCancel","ownedBusiness","premiumAccessAddon","additionalStorage","additionalSeats","productTypes","singleOrgPolicyBlock","discount","plans","changedOwnedBusiness","createOrganization","selectedPlan","selectedPlanInterval","selectableProducts","validPlans","familyPlan","selectablePlans","additionalStoragePriceMonthly","seatPriceMonthly","additionalStorageTotal","seatTotal","subtotal","subTotal","freeTrial","taxCharges","taxComponent","taxRate","total","paymentDesc","changedProduct","changedCountry","userHasBlockingSingleOrgPolicy","collectionCt","createSelfHosted","createCloudHosted","updateOrganization","OrganizationUpgradeRequest","additionalStorageGb","billingAddressCountry","billingAddressPostalCode","OrganizationCreateRequest","collectionName","tokenResult","includeTaxId","taxIdNumber","billingAddressLine1","billingAddressLine2","billingAddressCity","billingAddressState","providerRequest","ProviderOrganizationCreateRequest","allowEnrollmentChanges","unlinkSso","toggleResetPasswordEnrollment","keyString","toastStringRef","lightInputColor","lightInputPlaceholderColor","darkInputColor","darkInputPlaceholderColor","showMethods","hidePaypal","hideCredit","routing_number","account_holder_name","account_holder_type","currency","btInstance","stripe","stripeElements","stripeCardNumberElement","stripeCardExpiryElement","stripeCardCvcElement","stripeScript","async","Stripe","elements","setStripeElement","btScript","StripeElementStyle","fontFamily","fontSmoothing","invalid","StripeElementClasses","empty","Credit","head","removeChild","btStylesheet","braintree","dropin","authorization","container","paymentOptionPriority","paypal","buttonStyle","shape","tagline","createErr","requestPaymentMethod","nonce","handleCardSetup","setupIntent","payment_method","createToken","handleCardPayment","paymentIntent","placeholder","mount","premiumPrice","finalizePremium","paymentResponse","ProfileComponent","hidePasswordHint","UpdateProfileRequest","hasFamilySponsorshipAvailable","availableSponsorshipOrgs","activeSponsorshipOrgs","selectedSponsorshipOrgId","sponsorshipEmail","sponsoredEmail","friendlyName","resetForm","forceReload","allOrgs","anyActiveSponsorships","anyOrgsAvailable","moreThanOneOrgAvailable","SponsoringOrgRowComponent","sponsoringOrg","sponsorshipRemoved","revokeSponsorship","revokeSponsorshipPromise","doRevokeSponsorship","resendEmail","resendEmailPromise","onCountryChanged","pristine","taxRates","localTaxRate","getTaxInfoRequest","hasChanged","TwoFactorAuthenticatorComponent","TwoFactorBaseComponent","qrScript","auth","authResponse","processResponse","buildRequestModel","QRious","element","twoFactorProviderType","hashedSecret","verificationType","enableFunction","ikey","skey","TwoFactorEmailComponent","sentEmail","TwoFactorRecoveryComponent","print","onafterprint","formatString","showPolicyWarning","evaluatePolicies","authenticatorModalRef","yubikeyModalRef","TwoFactorYubiKeyComponent","emailModalRef","webAuthnModalRef","TwoFactorWebAuthnComponent","recoveryModalRef","TwoFactorVerifyComponent","onAuthed","keyIdAvailable","keysConfiguredCount","webAuthnResponse","removePromise","readKey","challengePromise","readDevice","webAuthnChallenge","resetWebAuthn","webAuthnListening","webAuthnError","listening","configured","disablePromise","existingKey","padRight","UpdateKeyComponent","makeRequest","UpdateLicenseComponent","updatePromise","showAdjustPayment","showAddCredit","transactionType","billing","verifyBank","VerifyBankRequest","amount1","verifyAmount1","amount2","verifyAmount2","verifyBankPromise","addCredit","paymentSourceInApp","closeAddCredit","changePayment","closePayment","isCreditBalance","creditOrBalance","AppleInApp","GoogleInApp","NG_VALIDATORS","VerifyEmailComponent","historyModalRef","lengthChanged","minNumberChanged","minSpecialChanged","setImportOptions","getFileContents","getFormatInstructionTitle","importOptions","fire","heightAuto","buttonsStyling","iconHtml","inputValue","inputAttributes","readonly","showConfirmButton","confirmButtonText","onOpen","popupEl","scrollTo","extract1PuxContent","readAsText","pre","JSZip","loadAsync","showRevisionDate","viewingPasswordHistory","cleanUp","totpUpdateCode","totpTick","totpInterval","toggleFavorite","launch","typeI18nKey","aType","confirmed","viewHistory","clearInterval","totpCode","half","totpCodeFormatted","intervalSeconds","totpSec","totpDash","totpLow","BulkActionsComponent","bulkDelete","promptPassword","selectedIds","getSelectedIds","BulkDeleteComponent","bulkDeleteModalRef","permanent","cipherIds","bulkRestore","BulkRestoreComponent","bulkRestoreModalRef","onRestored","bulkShare","selectedCiphers","getSelected","BulkShareComponent","bulkShareModalRef","onShared","bulkMove","BulkMoveComponent","bulkMoveModalRef","onMoved","deleteCiphersAdmin","deleteCiphers","deleteRequest","nonShareableCount","shareableCiphers","checkedCollectionIds","onAttachmentsClicked","onShareClicked","onCollectionsClicked","onCloneClicked","pagedCiphers","userHasPremiumAccess","pagedCiphersCount","clone","displayTotpCopyButton","checkCipher","onSearchTextChanged","favorites","showVerifyEmail","showBrowserOutdated","showUpdateKey","showPremiumCallout","showProviders","organizationsComponent","filterFavorites","filterFolder","shareCipher","shareModalRef","folderAddEditModalRef","updateKeyModalRef","subscriber","arg","localStorage","getItem","sessionStorage","setItem","removeItem","filePath","localesResult","store","migrationStateFrom1To2","browserCache","prefersColorSchemeDark","matchMedia","chrome","Web","isChrome","isEdge","isOpera","isVivaldi","isMacAppStore","rel","blobData","blobOptions","fileNameLower","doDownload","endsWith","createObjectURL","position","PublicKeyCredential","confirmText","cancelText","bodyIsHtml","iconClasses","bootstrapModal","removeAttribute","iconHtmlStr","showCancelButton","cancelButtonText","clipboardData","setData","queryCommandSupported","copyEl","contains","execCommand","readFromClipboard","authenticateBiometric","getDefaultSystemTheme","addListener","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","O","chunkIds","notFulfilled","Infinity","fulfilled","getter","__esModule","definition","defineProperty","enumerable","globalThis","Function","Symbol","toStringTag","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}