{"version":3,"file":"app/main.c7294c28fc1349f2e487.js","mappings":"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CAA,+B,uGCAA,SAAYC,GACV,2BACA,iBACA,iBAHF,CAAY,EAAAA,qBAAA,EAAAA,mBAAkB,M,wGCA9B,SAAY3gC,GACV,mBACA,2BAFF,CAAY,EAAAA,qBAAA,EAAAA,mBAAkB,M,gGCA9B,SAAYrH,GACV,qBACA,+BACA,mBACA,2BAJF,CAAY,EAAAA,aAAA,EAAAA,WAAU,M,gGCAtB,SAAYioC,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,SAAYloC,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,SAAY0oC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AKzCtG,UACEl8C,KAAKwsB,IAAIimD,oBAAoB,UAAWzyE,KAAKgyE,eAAe,GAGtDC,aAAahuD,GACnB,IAAKjkB,KAAK8yE,aAAa7uD,GACrB,OAGF,MAAM4N,EAAkB5N,EAAM/Y,KAAKkT,MAAM,KACxB,YAAbyT,EAAM,IAAoB7xB,KAAKuxE,gBACjCvxE,KAAKuxE,gBAAgB1/C,EAAM,IACL,UAAbA,EAAM,IAAkB7xB,KAAKwxE,cACtCxxE,KAAKwxE,cAAc3/C,EAAM,IACH,SAAbA,EAAM,IAAiB7xB,KAAKyxE,cACrCzxE,KAAKyxE,aAAa5/C,EAAM,IAIpBihD,aAAa7uD,GACnB,OACkB,MAAhBA,EAAM8uD,QACW,KAAjB9uD,EAAM8uD,QACN9uD,EAAM8uD,SAAY/yE,KAAKkyE,cAAsBa,QAC/B,MAAd9uD,EAAM/Y,MACgB,iBAAf+Y,EAAM/Y,OAMsB,IAAnC+Y,EAAM/Y,KAAK8U,QAAQ,aACc,IAAjCiE,EAAM/Y,KAAK8U,QAAQ,WACa,IAAhCiE,EAAM/Y,KAAK8U,QAAQ,a,qGCrGZ,EAAAu8D,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,aAQ3Bn7E,YAAY4J,EAAY,MACtBnL,MAAMmL,GACM,MAARA,IAGJlL,KAAK8tD,eAAiB9tD,KAA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","sources":["webpack://@bitwarden/web-vault/webpack/runtime/chunk loaded","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/app-routing.module.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/app.component.ts","webpack://@bitwarden/web-vault/./src/app/app.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/app.module.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/main.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/organizations/components/base-cva.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/organizations/components/input-checkbox.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/organizations/components/input-checkbox.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/organizations/components/input-text-readonly.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/organizations/components/input-text-readonly.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/organizations/components/input-text.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/organizations/components/input-text.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/organizations/components/select.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/organizations/components/select.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/organizations/manage/sso.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/organizations/manage/sso.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/organizations/organizations-routing.module.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/organizations/organizations.module.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/policies/disable-personal-vault-export.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/policies/disable-personal-vault-export.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/policies/maximum-vault-timeout.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/policies/maximum-vault-timeout.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/clients/add-organization.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/clients/add-organization.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/clients/clients.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/clients/clients.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/clients/create-organization.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/clients/create-organization.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/manage/accept-provider.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/manage/accept-provider.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/manage/bulk/bulk-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-confirm.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/manage/bulk/bulk-remove.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-remove.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/manage/events.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/manage/events.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/manage/manage.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/manage/manage.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/manage/people.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/manage/people.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/manage/user-add-edit.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/manage/user-add-edit.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/providers-layout.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/providers-layout.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/providers-routing.module.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/providers.module.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/services/provider-guard.service.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/services/provider-type-guard.service.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/services/webProvider.service.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/settings/account.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/settings/account.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/settings/settings.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/settings/settings.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/setup/setup-provider.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/setup/setup-provider.component.html","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/setup/setup.component.ts","webpack://@bitwarden/web-vault/./bitwarden_license/src/app/providers/setup/setup.component.html","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-invalid.directive.ts","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-strip-spaces.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/angular/src/validators/dirty.validator.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/organization/organizationSsoRequest.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/providerAddOrganizationRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/provider/providerOrganizationCreateRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/provider/providerSetupRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/provider/providerUpdateRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/provider/providerUserAcceptRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/provider/providerUserBulkConfirmRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/provider/providerUserBulkRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/provider/providerUserConfirmRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/provider/providerUserInviteRequest.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/request/provider/providerUserUpdateRequest.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/models/view/ssoConfigView.ts","webpack://@bitwarden/web-vault/./jslib/common/src/models/view/view.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/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/organizations/manage/bulk/bulk-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-remove.component.ts","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 { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nconst routes: Routes = [\n {\n path: \"providers\",\n loadChildren: async () => (await import(\"./providers/providers.module\")).ProvidersModule,\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class AppRoutingModule {}\n","import { Component } from \"@angular/core\";\n\nimport { AppComponent as BaseAppComponent } from \"src/app/app.component\";\n\nimport { DisablePersonalVaultExportPolicy } from \"./policies/disable-personal-vault-export.component\";\nimport { MaximumVaultTimeoutPolicy } from \"./policies/maximum-vault-timeout.component\";\n\n@Component({\n selector: \"app-root\",\n templateUrl: \"../../../src/app/app.component.html\",\n})\nexport class AppComponent extends BaseAppComponent {\n ngOnInit() {\n super.ngOnInit();\n\n this.policyListService.addPolicies([\n new MaximumVaultTimeoutPolicy(),\n new DisablePersonalVaultExportPolicy(),\n ]);\n }\n}\n","\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { BrowserAnimationsModule } from \"@angular/platform-browser/animations\";\nimport { RouterModule } from \"@angular/router\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\n\nimport { JslibModule } from \"jslib-angular/jslib.module\";\n\nimport { OssRoutingModule } from \"src/app/oss-routing.module\";\nimport { OssModule } from \"src/app/oss.module\";\nimport { ServicesModule } from \"src/app/services/services.module\";\nimport { WildcardRoutingModule } from \"src/app/wildcard-routing.module\";\n\nimport { AppRoutingModule } from \"./app-routing.module\";\nimport { AppComponent } from \"./app.component\";\nimport { OrganizationsModule } from \"./organizations/organizations.module\";\nimport { DisablePersonalVaultExportPolicyComponent } from \"./policies/disable-personal-vault-export.component\";\nimport { MaximumVaultTimeoutPolicyComponent } from \"./policies/maximum-vault-timeout.component\";\n\n@NgModule({\n imports: [\n OssModule,\n JslibModule,\n BrowserAnimationsModule,\n FormsModule,\n ReactiveFormsModule,\n ServicesModule,\n InfiniteScrollModule,\n DragDropModule,\n AppRoutingModule,\n OssRoutingModule,\n OrganizationsModule, // Must be after OssRoutingModule for competing routes to resolve properly\n RouterModule,\n WildcardRoutingModule, // Needs to be last to catch all non-existing routes\n ],\n declarations: [\n AppComponent,\n DisablePersonalVaultExportPolicyComponent,\n MaximumVaultTimeoutPolicyComponent,\n ],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n","import { enableProdMode } from \"@angular/core\";\nimport { platformBrowserDynamic } from \"@angular/platform-browser-dynamic\";\n\nimport \"bootstrap\";\nimport \"jquery\";\nimport \"popper.js\";\n\nrequire(\"src/scss/styles.scss\");\nrequire(\"src/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 { Directive, Input, OnInit, Self } from \"@angular/core\";\nimport { ControlValueAccessor, FormControl, NgControl, Validators } from \"@angular/forms\";\n\nimport { dirtyRequired } from \"jslib-angular/validators/dirty.validator\";\n\n/** For use in the SSO Config Form only - will be deprecated by the Component Library */\n@Directive()\nexport abstract class BaseCvaComponent implements ControlValueAccessor, OnInit {\n get describedById() {\n return this.showDescribedBy ? this.controlId + \"Desc\" : null;\n }\n\n get showDescribedBy() {\n return this.helperText != null || this.controlDir.control.hasError(\"required\");\n }\n\n get isRequired() {\n return (\n this.controlDir.control.hasValidator(Validators.required) ||\n this.controlDir.control.hasValidator(dirtyRequired)\n );\n }\n\n @Input() label: string;\n @Input() controlId: string;\n @Input() helperText: string;\n\n internalControl = new FormControl(\"\");\n\n protected onChange: any;\n protected onTouched: any;\n\n constructor(@Self() public controlDir: NgControl) {\n this.controlDir.valueAccessor = this;\n }\n\n ngOnInit() {\n this.internalControl.valueChanges.subscribe(this.onValueChangesInternal);\n }\n\n onBlurInternal() {\n this.onTouched();\n }\n\n // CVA interfaces\n writeValue(value: string) {\n this.internalControl.setValue(value);\n }\n\n registerOnChange(fn: any) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n if (isDisabled) {\n this.internalControl.disable();\n } else {\n this.internalControl.enable();\n }\n }\n\n protected onValueChangesInternal: any = (value: string) => this.onChange(value);\n // End CVA interfaces\n}\n","import { Component } from \"@angular/core\";\n\nimport { BaseCvaComponent } from \"./base-cva.component\";\n\n/** For use in the SSO Config Form only - will be deprecated by the Component Library */\n@Component({\n selector: \"app-input-checkbox\",\n templateUrl: \"input-checkbox.component.html\",\n})\nexport class InputCheckboxComponent extends BaseCvaComponent {}\n","
\n
\n \n \n
\n {{\n helperText\n }}\n
\n","import { Component, Input } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n/** For use in the SSO Config Form only - will be deprecated by the Component Library */\n@Component({\n selector: \"app-input-text-readonly\",\n templateUrl: \"input-text-readonly.component.html\",\n})\nexport class InputTextReadOnlyComponent {\n @Input() controlValue: string;\n @Input() label: string;\n @Input() showCopy = true;\n @Input() showLaunch = false;\n\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n copy(value: string) {\n this.platformUtilsService.copyToClipboard(value);\n }\n\n launchUri(url: string) {\n this.platformUtilsService.launchUri(url);\n }\n}\n","
\n \n
\n \n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { BaseCvaComponent } from \"./base-cva.component\";\n\n/** For use in the SSO Config Form only - will be deprecated by the Component Library */\n@Component({\n selector: \"app-input-text[label][controlId]\",\n templateUrl: \"input-text.component.html\",\n})\nexport class InputTextComponent extends BaseCvaComponent implements OnInit {\n @Input() helperTextSameAsError: string;\n @Input() requiredErrorMessage: string;\n @Input() stripSpaces = false;\n\n transformValue: (value: string) => string = null;\n\n ngOnInit() {\n super.ngOnInit();\n if (this.stripSpaces) {\n this.transformValue = this.doStripSpaces;\n }\n }\n\n writeValue(value: string) {\n this.internalControl.setValue(value == null ? \"\" : value);\n }\n\n protected onValueChangesInternal: any = (value: string) => {\n let newValue = value;\n if (this.transformValue != null) {\n newValue = this.transformValue(value);\n this.internalControl.setValue(newValue, { emitEvent: false });\n }\n this.onChange(newValue);\n };\n\n protected onValueChangeInternal(value: string) {\n let newValue = value;\n if (this.transformValue != null) {\n newValue = this.transformValue(value);\n this.internalControl.setValue(newValue, { emitEvent: false });\n }\n }\n\n private doStripSpaces(value: string) {\n return value.replace(/ /g, \"\");\n }\n}\n","
\n \n \n
\n \n {{ helperText }}\n \n \n \n {{ \"error\" | i18n }}:\n {{\n controlDir.control.hasError(helperTextSameAsError)\n ? helperText\n : (\"fieldRequiredError\" | i18n: label)\n }}\n \n
\n
\n","import { Component, Input } from \"@angular/core\";\n\nimport { SelectOptions } from \"jslib-angular/interfaces/selectOptions\";\n\nimport { BaseCvaComponent } from \"./base-cva.component\";\n\n/** For use in the SSO Config Form only - will be deprecated by the Component Library */\n@Component({\n selector: \"app-select\",\n templateUrl: \"select.component.html\",\n})\nexport class SelectComponent extends BaseCvaComponent {\n @Input() selectOptions: SelectOptions[];\n}\n","
\n \n \n \n \n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { AbstractControl, FormBuilder, FormGroup } from \"@angular/forms\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { SelectOptions } from \"jslib-angular/interfaces/selectOptions\";\nimport { dirtyRequired } from \"jslib-angular/validators/dirty.validator\";\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 {\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"jslib-common/enums/ssoEnums\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { SsoConfigApi } from \"jslib-common/models/api/ssoConfigApi\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { OrganizationSsoRequest } from \"jslib-common/models/request/organization/organizationSsoRequest\";\nimport { OrganizationSsoResponse } from \"jslib-common/models/response/organization/organizationSsoResponse\";\nimport { SsoConfigView } from \"jslib-common/models/view/ssoConfigView\";\n\nconst defaultSigningAlgorithm = \"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\";\n\n@Component({\n selector: \"app-org-manage-sso\",\n templateUrl: \"sso.component.html\",\n})\nexport class SsoComponent implements OnInit {\n readonly ssoType = SsoType;\n\n readonly ssoTypeOptions: SelectOptions[] = [\n { name: this.i18nService.t(\"selectType\"), value: SsoType.None, disabled: true },\n { name: \"OpenID Connect\", value: SsoType.OpenIdConnect },\n { name: \"SAML 2.0\", value: SsoType.Saml2 },\n ];\n\n readonly samlSigningAlgorithms = [\n \"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\",\n \"http://www.w3.org/2000/09/xmldsig#rsa-sha384\",\n \"http://www.w3.org/2000/09/xmldsig#rsa-sha512\",\n \"http://www.w3.org/2000/09/xmldsig#rsa-sha1\",\n ];\n\n readonly saml2SigningBehaviourOptions: SelectOptions[] = [\n {\n name: \"If IdP Wants Authn Requests Signed\",\n value: Saml2SigningBehavior.IfIdpWantAuthnRequestsSigned,\n },\n { name: \"Always\", value: Saml2SigningBehavior.Always },\n { name: \"Never\", value: Saml2SigningBehavior.Never },\n ];\n readonly saml2BindingTypeOptions: SelectOptions[] = [\n { name: \"Redirect\", value: Saml2BindingType.HttpRedirect },\n { name: \"HTTP POST\", value: Saml2BindingType.HttpPost },\n ];\n readonly saml2NameIdFormatOptions: SelectOptions[] = [\n { name: \"Not Configured\", value: Saml2NameIdFormat.NotConfigured },\n { name: \"Unspecified\", value: Saml2NameIdFormat.Unspecified },\n { name: \"Email Address\", value: Saml2NameIdFormat.EmailAddress },\n { name: \"X.509 Subject Name\", value: Saml2NameIdFormat.X509SubjectName },\n { name: \"Windows Domain Qualified Name\", value: Saml2NameIdFormat.WindowsDomainQualifiedName },\n { name: \"Kerberos Principal Name\", value: Saml2NameIdFormat.KerberosPrincipalName },\n { name: \"Entity Identifier\", value: Saml2NameIdFormat.EntityIdentifier },\n { name: \"Persistent\", value: Saml2NameIdFormat.Persistent },\n { name: \"Transient\", value: Saml2NameIdFormat.Transient },\n ];\n\n readonly connectRedirectOptions: SelectOptions[] = [\n { name: \"Redirect GET\", value: OpenIdConnectRedirectBehavior.RedirectGet },\n { name: \"Form POST\", value: OpenIdConnectRedirectBehavior.FormPost },\n ];\n\n showOpenIdCustomizations = false;\n\n loading = true;\n haveTestedKeyConnector = false;\n organizationId: string;\n organization: Organization;\n formPromise: Promise;\n\n callbackPath: string;\n signedOutCallbackPath: string;\n spEntityId: string;\n spMetadataUrl: string;\n spAcsUrl: string;\n\n enabled = this.formBuilder.control(false);\n\n openIdForm = this.formBuilder.group(\n {\n authority: [\"\", dirtyRequired],\n clientId: [\"\", dirtyRequired],\n clientSecret: [\"\", dirtyRequired],\n metadataAddress: [],\n redirectBehavior: [OpenIdConnectRedirectBehavior.RedirectGet, dirtyRequired],\n getClaimsFromUserInfoEndpoint: [],\n additionalScopes: [],\n additionalUserIdClaimTypes: [],\n additionalEmailClaimTypes: [],\n additionalNameClaimTypes: [],\n acrValues: [],\n expectedReturnAcrValue: [],\n },\n {\n updateOn: \"blur\",\n }\n );\n\n samlForm = this.formBuilder.group(\n {\n spNameIdFormat: [Saml2NameIdFormat.NotConfigured],\n spOutboundSigningAlgorithm: [defaultSigningAlgorithm],\n spSigningBehavior: [Saml2SigningBehavior.IfIdpWantAuthnRequestsSigned],\n spMinIncomingSigningAlgorithm: [defaultSigningAlgorithm],\n spWantAssertionsSigned: [],\n spValidateCertificates: [],\n\n idpEntityId: [\"\", dirtyRequired],\n idpBindingType: [Saml2BindingType.HttpRedirect],\n idpSingleSignOnServiceUrl: [],\n idpSingleLogoutServiceUrl: [],\n idpX509PublicCert: [\"\", dirtyRequired],\n idpOutboundSigningAlgorithm: [defaultSigningAlgorithm],\n idpAllowUnsolicitedAuthnResponse: [],\n idpAllowOutboundLogoutRequests: [true],\n idpWantAuthnRequestsSigned: [],\n },\n {\n updateOn: \"blur\",\n }\n );\n\n ssoConfigForm = this.formBuilder.group({\n configType: [SsoType.None],\n keyConnectorEnabled: [false],\n keyConnectorUrl: [\"\"],\n openId: this.openIdForm,\n saml: this.samlForm,\n });\n\n constructor(\n private formBuilder: FormBuilder,\n private route: ActivatedRoute,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n this.ssoConfigForm.get(\"configType\").valueChanges.subscribe((newType: SsoType) => {\n if (newType === SsoType.OpenIdConnect) {\n this.openIdForm.enable();\n this.samlForm.disable();\n } else if (newType === SsoType.Saml2) {\n this.openIdForm.disable();\n this.samlForm.enable();\n } else {\n this.openIdForm.disable();\n this.samlForm.disable();\n }\n });\n\n this.samlForm\n .get(\"spSigningBehavior\")\n .valueChanges.subscribe(() =>\n this.samlForm.get(\"idpX509PublicCert\").updateValueAndValidity()\n );\n\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n });\n }\n\n async load() {\n this.organization = await this.organizationService.get(this.organizationId);\n const ssoSettings = await this.apiService.getOrganizationSso(this.organizationId);\n this.populateForm(ssoSettings);\n\n this.callbackPath = ssoSettings.urls.callbackPath;\n this.signedOutCallbackPath = ssoSettings.urls.signedOutCallbackPath;\n this.spEntityId = ssoSettings.urls.spEntityId;\n this.spMetadataUrl = ssoSettings.urls.spMetadataUrl;\n this.spAcsUrl = ssoSettings.urls.spAcsUrl;\n\n this.loading = false;\n }\n\n async submit() {\n this.validateForm(this.ssoConfigForm);\n\n if (this.ssoConfigForm.get(\"keyConnectorEnabled\").value) {\n await this.validateKeyConnectorUrl();\n }\n\n if (!this.ssoConfigForm.valid) {\n this.readOutErrors();\n return;\n }\n\n const request = new OrganizationSsoRequest();\n request.enabled = this.enabled.value;\n request.data = SsoConfigApi.fromView(this.ssoConfigForm.value as SsoConfigView);\n\n this.formPromise = this.apiService.postOrganizationSso(this.organizationId, request);\n\n try {\n const response = await this.formPromise;\n this.populateForm(response);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"ssoSettingsSaved\"));\n } catch {\n // Logged by appApiAction, do nothing\n }\n\n this.formPromise = null;\n }\n\n async validateKeyConnectorUrl() {\n if (this.haveTestedKeyConnector) {\n return;\n }\n\n this.keyConnectorUrl.markAsPending();\n\n try {\n await this.apiService.getKeyConnectorAlive(this.keyConnectorUrl.value);\n this.keyConnectorUrl.updateValueAndValidity();\n } catch {\n this.keyConnectorUrl.setErrors({\n invalidUrl: true,\n });\n }\n\n this.haveTestedKeyConnector = true;\n }\n\n toggleOpenIdCustomizations() {\n this.showOpenIdCustomizations = !this.showOpenIdCustomizations;\n }\n\n getErrorCount(form: FormGroup): number {\n return Object.values(form.controls).reduce((acc: number, control: AbstractControl) => {\n if (control instanceof FormGroup) {\n return acc + this.getErrorCount(control);\n }\n\n if (control.errors == null) {\n return acc;\n }\n return acc + Object.keys(control.errors).length;\n }, 0);\n }\n\n get enableTestKeyConnector() {\n return (\n this.ssoConfigForm.get(\"keyConnectorEnabled\").value &&\n !Utils.isNullOrWhitespace(this.keyConnectorUrl?.value)\n );\n }\n\n get keyConnectorUrl() {\n return this.ssoConfigForm.get(\"keyConnectorUrl\");\n }\n\n get samlSigningAlgorithmOptions(): SelectOptions[] {\n return this.samlSigningAlgorithms.map((algorithm) => ({ name: algorithm, value: algorithm }));\n }\n\n private validateForm(form: FormGroup) {\n Object.values(form.controls).forEach((control: AbstractControl) => {\n if (control.disabled) {\n return;\n }\n\n if (control instanceof FormGroup) {\n this.validateForm(control);\n } else {\n control.markAsDirty();\n control.markAsTouched();\n control.updateValueAndValidity();\n }\n });\n }\n\n private populateForm(ssoSettings: OrganizationSsoResponse) {\n this.enabled.setValue(ssoSettings.enabled);\n if (ssoSettings.data != null) {\n const ssoConfigView = new SsoConfigView(ssoSettings.data);\n this.ssoConfigForm.patchValue(ssoConfigView);\n }\n }\n\n private readOutErrors() {\n const errorText = this.i18nService.t(\"error\");\n const errorCount = this.getErrorCount(this.ssoConfigForm);\n const errorCountText = this.i18nService.t(\n errorCount === 1 ? \"formErrorSummarySingle\" : \"formErrorSummaryPlural\",\n errorCount.toString()\n );\n\n const div = document.createElement(\"div\");\n div.className = \"sr-only\";\n div.id = \"srErrorCount\";\n div.setAttribute(\"aria-live\", \"polite\");\n div.innerText = errorText + \": \" + errorCountText;\n\n const existing = document.getElementById(\"srErrorCount\");\n if (existing != null) {\n existing.remove();\n }\n\n document.body.append(div);\n }\n}\n","
\n

{{ \"singleSignOn\" | i18n }}

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

\n {{ \"ssoPolicyHelpStart\" | i18n }}\n {{ \"ssoPolicyHelpLink\" | i18n }}\n {{ \"ssoPolicyHelpEnd\" | i18n }}\n
\n {{ \"ssoPolicyHelpKeyConnector\" | i18n }}\n

\n\n \n \n \n\n
\n \n
\n \n \n
\n
\n \n \n
\n
\n\n \n \n \n {{ \"keyConnectorWarning\" | i18n }}\n \n\n
\n \n
\n \n
\n \n \n \n {{ \"keyConnectorTest\" | i18n }}\n \n \n
\n
\n
\n \n \n {{ \"error\" | i18n }}:\n {{ \"keyConnectorTestFail\" | i18n }}\n \n \n \n \n {{ \"keyConnectorTestSuccess\" | i18n }}\n \n \n
\n
\n \n\n \n \n \n\n \n \n
\n

{{ \"openIdConnectConfig\" | i18n }}

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

\n {{ \"openIdOptionalCustomizations\" | 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

{{ \"samlSpConfig\" | 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

{{ \"samlIdpConfig\" | i18n }}

\n\n \n\n \n \n\n \n\n \n\n
\n \n \n \n \n {{ \"error\" | i18n }}:\n {{ \"fieldRequiredError\" | i18n: (\"idpX509PublicCert\" | i18n) }}\n \n
\n\n \n \n\n \n \n\n \n\n \n
\n
\n\n \n \n \n {{ \"error\" | i18n }}:\n {{\n (errorCount === 1 ? \"formErrorSummarySingle\" : \"formErrorSummaryPlural\") | i18n: errorCount\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 { Permissions } from \"jslib-common/enums/permissions\";\n\nimport { OrganizationLayoutComponent } from \"src/app/layouts/organization-layout.component\";\nimport { ManageComponent } from \"src/app/organizations/manage/manage.component\";\nimport { OrganizationGuardService } from \"src/app/services/organization-guard.service\";\nimport { OrganizationTypeGuardService } from \"src/app/services/organization-type-guard.service\";\n\nimport { SsoComponent } from \"./manage/sso.component\";\n\nconst routes: Routes = [\n {\n path: \"organizations/:organizationId\",\n component: OrganizationLayoutComponent,\n canActivate: [AuthGuardService, OrganizationGuardService],\n children: [\n {\n path: \"manage\",\n component: ManageComponent,\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 Permissions.ManageSso,\n ],\n },\n children: [\n {\n path: \"sso\",\n component: SsoComponent,\n },\n ],\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class OrganizationsRoutingModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\n\nimport { JslibModule } from \"jslib-angular/jslib.module\";\n\nimport { InputCheckboxComponent } from \"./components/input-checkbox.component\";\nimport { InputTextReadOnlyComponent } from \"./components/input-text-readonly.component\";\nimport { InputTextComponent } from \"./components/input-text.component\";\nimport { SelectComponent } from \"./components/select.component\";\nimport { SsoComponent } from \"./manage/sso.component\";\nimport { OrganizationsRoutingModule } from \"./organizations-routing.module\";\n\n// Form components are for use in the SSO Configuration Form only and should not be exported for use elsewhere.\n// They will be deprecated by the Component Library.\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n JslibModule,\n OrganizationsRoutingModule,\n ],\n declarations: [\n InputCheckboxComponent,\n InputTextComponent,\n InputTextReadOnlyComponent,\n SelectComponent,\n SsoComponent,\n ],\n})\nexport class OrganizationsModule {}\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\nimport {\n BasePolicy,\n BasePolicyComponent,\n} from \"src/app/organizations/policies/base-policy.component\";\n\nexport class DisablePersonalVaultExportPolicy extends BasePolicy {\n name = \"disablePersonalVaultExport\";\n description = \"disablePersonalVaultExportDesc\";\n type = PolicyType.DisablePersonalVaultExport;\n component = DisablePersonalVaultExportPolicyComponent;\n}\n\n@Component({\n selector: \"policy-disable-personal-vault-export\",\n templateUrl: \"disable-personal-vault-export.component.html\",\n})\nexport class DisablePersonalVaultExportPolicyComponent extends BasePolicyComponent {}\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\";\nimport { PolicyRequest } from \"jslib-common/models/request/policyRequest\";\n\nimport {\n BasePolicy,\n BasePolicyComponent,\n} from \"src/app/organizations/policies/base-policy.component\";\n\nexport class MaximumVaultTimeoutPolicy extends BasePolicy {\n name = \"maximumVaultTimeout\";\n description = \"maximumVaultTimeoutDesc\";\n type = PolicyType.MaximumVaultTimeout;\n component = MaximumVaultTimeoutPolicyComponent;\n}\n\n@Component({\n selector: \"policy-maximum-timeout\",\n templateUrl: \"maximum-vault-timeout.component.html\",\n})\nexport class MaximumVaultTimeoutPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n hours: [null],\n minutes: [null],\n });\n\n constructor(private formBuilder: FormBuilder, private i18nService: I18nService) {\n super();\n }\n\n loadData() {\n const minutes = this.policyResponse.data?.minutes;\n\n if (minutes == null) {\n return;\n }\n\n this.data.patchValue({\n hours: Math.floor(minutes / 60),\n minutes: minutes % 60,\n });\n }\n\n buildRequestData() {\n if (this.data.value.hours == null && this.data.value.minutes == null) {\n return null;\n }\n\n return {\n minutes: this.data.value.hours * 60 + this.data.value.minutes,\n };\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 const data = this.buildRequestData();\n if (data?.minutes == null || data?.minutes <= 0) {\n throw new Error(this.i18nService.t(\"invalidMaximumVaultTimeout\"));\n }\n\n return super.buildRequest(policiesEnabledMap);\n }\n}\n","\n {{ \"requireSsoPolicyReq\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n\n
\n
\n \n
\n
\n \n {{ \"hours\" | i18n }}\n
\n
\n \n {{ \"minutes\" | i18n }}\n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ValidationService } from \"jslib-angular/services/validation.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.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 { Provider } from \"jslib-common/models/domain/provider\";\n\nimport { WebProviderService } from \"../services/webProvider.service\";\n\n@Component({\n selector: \"provider-add-organization\",\n templateUrl: \"add-organization.component.html\",\n})\nexport class AddOrganizationComponent implements OnInit {\n @Input() providerId: string;\n @Input() organizations: Organization[];\n @Output() onAddedOrganization = new EventEmitter();\n\n provider: Provider;\n formPromise: Promise;\n loading = true;\n\n constructor(\n private providerService: ProviderService,\n private webProviderService: WebProviderService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private validationService: ValidationService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n if (this.providerId == null) {\n return;\n }\n\n this.provider = await this.providerService.get(this.providerId);\n\n this.loading = false;\n }\n\n async add(organization: Organization) {\n if (this.formPromise) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"addOrganizationConfirmation\", organization.name, this.provider.name),\n organization.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n try {\n this.formPromise = this.webProviderService.addOrganizationToProvider(\n this.providerId,\n organization.id\n );\n await this.formPromise;\n } catch (e) {\n this.validationService.showError(e);\n return;\n } finally {\n this.formPromise = null;\n }\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"organizationJoinedProvider\")\n );\n this.onAddedOrganization.emit();\n }\n}\n","
\n
\n
\n
\n

\n {{ \"addExistingOrganization\" | i18n }}\n

\n \n ×\n \n
\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n \n \n \n \n \n \n \n
\n \n \n {{ o.name }}\n \n \n Add\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 { ValidationService } from \"jslib-angular/services/validation.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 { ProviderService } from \"jslib-common/abstractions/provider.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { PlanType } from \"jslib-common/enums/planType\";\nimport { ProviderUserType } from \"jslib-common/enums/providerUserType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { ProviderOrganizationOrganizationDetailsResponse } from \"jslib-common/models/response/provider/providerOrganizationResponse\";\n\nimport { WebProviderService } from \"../services/webProvider.service\";\n\nimport { AddOrganizationComponent } from \"./add-organization.component\";\n\nconst DisallowedPlanTypes = [\n PlanType.Free,\n PlanType.FamiliesAnnually2019,\n PlanType.FamiliesAnnually,\n];\n\n@Component({\n templateUrl: \"clients.component.html\",\n})\nexport class ClientsComponent implements OnInit {\n @ViewChild(\"add\", { read: ViewContainerRef, static: true }) addModalRef: ViewContainerRef;\n\n providerId: any;\n searchText: string;\n addableOrganizations: Organization[];\n loading = true;\n manageOrganizations = false;\n showAddExisting = false;\n\n clients: ProviderOrganizationOrganizationDetailsResponse[];\n pagedClients: ProviderOrganizationOrganizationDetailsResponse[];\n\n protected didScroll = false;\n protected pageSize = 100;\n protected actionPromise: Promise;\n private pagedClientsCount = 0;\n\n constructor(\n private route: ActivatedRoute,\n private providerService: ProviderService,\n private apiService: ApiService,\n private searchService: SearchService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private validationService: ValidationService,\n private webProviderService: WebProviderService,\n private logService: LogService,\n private modalService: ModalService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n this.route.parent.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n\n await this.load();\n\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.getProviderClients(this.providerId);\n this.clients = response.data != null && response.data.length > 0 ? response.data : [];\n this.manageOrganizations =\n (await this.providerService.get(this.providerId)).type === ProviderUserType.ProviderAdmin;\n const candidateOrgs = (await this.organizationService.getAll()).filter(\n (o) => o.isOwner && o.providerId == null\n );\n const allowedOrgsIds = await Promise.all(\n candidateOrgs.map((o) => this.apiService.getOrganization(o.id))\n ).then((orgs) =>\n orgs.filter((o) => !DisallowedPlanTypes.includes(o.planType)).map((o) => o.id)\n );\n this.addableOrganizations = candidateOrgs.filter((o) => allowedOrgsIds.includes(o.id));\n\n this.showAddExisting = this.addableOrganizations.length !== 0;\n this.loading = false;\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.clients && this.clients.length > this.pageSize;\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n async resetPaging() {\n this.pagedClients = [];\n this.loadMore();\n }\n\n loadMore() {\n if (!this.clients || this.clients.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedClients.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedClientsCount > this.pageSize) {\n pagedSize = this.pagedClientsCount;\n }\n if (this.clients.length > pagedLength) {\n this.pagedClients = this.pagedClients.concat(\n this.clients.slice(pagedLength, pagedLength + pagedSize)\n );\n }\n this.pagedClientsCount = this.pagedClients.length;\n this.didScroll = this.pagedClients.length > this.pageSize;\n }\n\n async addExistingOrganization() {\n const [modal] = await this.modalService.openViewRef(\n AddOrganizationComponent,\n this.addModalRef,\n (comp) => {\n comp.providerId = this.providerId;\n comp.organizations = this.addableOrganizations;\n comp.onAddedOrganization.subscribe(async () => {\n try {\n await this.load();\n modal.close();\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n });\n }\n );\n }\n\n async remove(organization: ProviderOrganizationOrganizationDetailsResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"detachOrganizationConfirmation\"),\n organization.organizationName,\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.webProviderService.detachOrganizastion(\n this.providerId,\n organization.id\n );\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"detachedOrganization\", organization.organizationName)\n );\n await this.load();\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n}\n","
\n

{{ \"clients\" | i18n }}

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

{{ \"noClientsInList\" | i18n }}

\n \n \n \n \n \n \n \n \n {{ o.organizationName }}\n \n \n \n \n \n \n \n \n\n\n\n","import { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { OrganizationPlansComponent } from \"src/app/settings/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 providerId: string;\n\n constructor(private route: ActivatedRoute) {}\n\n ngOnInit() {\n this.route.parent.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n });\n }\n}\n","
\n

{{ \"newClientOrganization\" | i18n }}

\n
\n

{{ \"newClientOrganizationDesc\" | i18n }}

\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 { ProviderUserAcceptRequest } from \"jslib-common/models/request/provider/providerUserAcceptRequest\";\n\nimport { BaseAcceptComponent } from \"src/app/common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-provider\",\n templateUrl: \"accept-provider.component.html\",\n})\nexport class AcceptProviderComponent extends BaseAcceptComponent {\n providerName: string;\n\n failedMessage = \"providerInviteAcceptFailed\";\n\n requiredParameters = [\"providerId\", \"providerUserId\", \"token\"];\n\n constructor(\n router: Router,\n i18nService: I18nService,\n route: ActivatedRoute,\n stateService: StateService,\n private apiService: ApiService,\n platformUtilService: PlatformUtilsService\n ) {\n super(router, platformUtilService, i18nService, route, stateService);\n }\n\n async authedHandler(qParams: any) {\n const request = new ProviderUserAcceptRequest();\n request.token = qParams.token;\n\n await this.apiService.postProviderUserAccept(\n qParams.providerId,\n qParams.providerUserId,\n request\n );\n this.platformUtilService.showToast(\n \"success\",\n this.i18nService.t(\"inviteAccepted\"),\n this.i18nService.t(\"providerInviteAcceptedDesc\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"/vault\"]);\n }\n\n async unauthedHandler(qParams: any) {\n this.providerName = qParams.providerName;\n }\n}\n","
\n
\n \"Bitwarden\"\n

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

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

{{ \"joinProvider\" | i18n }}

\n
\n
\n

\n {{ providerName }}\n {{ email }}\n

\n

{{ \"joinProviderDesc\" | i18n }}

\n
\n
\n \n {{ \"logIn\" | i18n }}\n \n \n {{ \"createAccount\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component, Input } from \"@angular/core\";\n\nimport { ProviderUserStatusType } from \"jslib-common/enums/providerUserStatusType\";\nimport { ProviderUserBulkConfirmRequest } from \"jslib-common/models/request/provider/providerUserBulkConfirmRequest\";\nimport { ProviderUserBulkRequest } from \"jslib-common/models/request/provider/providerUserBulkRequest\";\n\nimport { BulkConfirmComponent as OrganizationBulkConfirmComponent } from \"src/app/organizations/manage/bulk/bulk-confirm.component\";\nimport { BulkUserDetails } from \"src/app/organizations/manage/bulk/bulk-status.component\";\n\n@Component({\n templateUrl: \"../../../../../../src/app/organizations/manage/bulk/bulk-confirm.component.html\",\n})\nexport class BulkConfirmComponent extends OrganizationBulkConfirmComponent {\n @Input() providerId: string;\n\n protected isAccepted(user: BulkUserDetails) {\n return user.status === ProviderUserStatusType.Accepted;\n }\n\n protected async getPublicKeys() {\n const request = new ProviderUserBulkRequest(this.filteredUsers.map((user) => user.id));\n return await this.apiService.postProviderUsersPublicKey(this.providerId, request);\n }\n\n protected getCryptoKey() {\n return this.cryptoService.getProviderKey(this.providerId);\n }\n\n protected async postConfirmRequest(userIdsWithKeys: any[]) {\n const request = new ProviderUserBulkConfirmRequest(userIdsWithKeys);\n return await this.apiService.postProviderUserBulkConfirm(this.providerId, request);\n }\n}\n","\n","import { Component, Input } from \"@angular/core\";\n\nimport { ProviderUserBulkRequest } from \"jslib-common/models/request/provider/providerUserBulkRequest\";\n\nimport { BulkRemoveComponent as OrganizationBulkRemoveComponent } from \"src/app/organizations/manage/bulk/bulk-remove.component\";\n\n@Component({\n templateUrl: \"../../../../../../src/app/organizations/manage/bulk/bulk-remove.component.html\",\n})\nexport class BulkRemoveComponent extends OrganizationBulkRemoveComponent {\n @Input() providerId: string;\n\n async deleteUsers() {\n const request = new ProviderUserBulkRequest(this.users.map((user) => user.id));\n return await this.apiService.deleteManyProviderUsers(this.providerId, 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","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 { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"jslib-common/abstractions/provider.service\";\nimport { EventResponse } from \"jslib-common/models/response/eventResponse\";\n\nimport { BaseEventsComponent } from \"src/app/common/base.events.component\";\nimport { EventService } from \"src/app/services/event.service\";\n\n@Component({\n selector: \"provider-events\",\n templateUrl: \"events.component.html\",\n})\nexport class EventsComponent extends BaseEventsComponent implements OnInit {\n exportFileName = \"provider-events\";\n providerId: string;\n\n private providerUsersUserIdMap = new Map();\n private providerUsersIdMap = new Map();\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n eventService: EventService,\n i18nService: I18nService,\n private providerService: ProviderService,\n exportService: ExportService,\n platformUtilsService: PlatformUtilsService,\n private router: Router,\n logService: LogService,\n private userNamePipe: UserNamePipe\n ) {\n super(eventService, i18nService, exportService, platformUtilsService, logService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n const provider = await this.providerService.get(this.providerId);\n if (provider == null || !provider.useEvents) {\n this.router.navigate([\"/providers\", this.providerId]);\n return;\n }\n await this.load();\n });\n }\n\n async load() {\n const response = await this.apiService.getProviderUsers(this.providerId);\n response.data.forEach((u) => {\n const name = this.userNamePipe.transform(u);\n this.providerUsersIdMap.set(u.id, { name: name, email: u.email });\n this.providerUsersUserIdMap.set(u.userId, { name: name, email: u.email });\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.getEventsProvider(\n this.providerId,\n startDate,\n endDate,\n continuationToken\n );\n }\n\n protected getUserName(r: EventResponse, userId: string) {\n return userId != null && this.providerUsersUserIdMap.has(userId)\n ? this.providerUsersUserIdMap.get(userId)\n : 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, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ProviderService } from \"jslib-common/abstractions/provider.service\";\nimport { Provider } from \"jslib-common/models/domain/provider\";\n\n@Component({\n selector: \"provider-manage\",\n templateUrl: \"manage.component.html\",\n})\nexport class ManageComponent implements OnInit {\n provider: Provider;\n accessEvents = false;\n\n constructor(private route: ActivatedRoute, private providerService: ProviderService) {}\n\n ngOnInit() {\n this.route.parent.params.subscribe(async (params) => {\n this.provider = await this.providerService.get(params.providerId);\n this.accessEvents = this.provider.useEvents;\n });\n }\n}\n","
\n
\n
\n
\n
{{ \"manage\" | i18n }}
\n
\n \n {{ \"people\" | 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 { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"jslib-common/abstractions/provider.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { ProviderUserStatusType } from \"jslib-common/enums/providerUserStatusType\";\nimport { ProviderUserType } from \"jslib-common/enums/providerUserType\";\nimport { ProviderUserBulkRequest } from \"jslib-common/models/request/provider/providerUserBulkRequest\";\nimport { ProviderUserConfirmRequest } from \"jslib-common/models/request/provider/providerUserConfirmRequest\";\nimport { ListResponse } from \"jslib-common/models/response/listResponse\";\nimport { ProviderUserBulkResponse } from \"jslib-common/models/response/provider/providerUserBulkResponse\";\nimport { ProviderUserUserDetailsResponse } from \"jslib-common/models/response/provider/providerUserResponse\";\n\nimport { BasePeopleComponent } from \"src/app/common/base.people.component\";\nimport { BulkStatusComponent } from \"src/app/organizations/manage/bulk/bulk-status.component\";\nimport { EntityEventsComponent } from \"src/app/organizations/manage/entity-events.component\";\n\nimport { BulkConfirmComponent } from \"./bulk/bulk-confirm.component\";\nimport { BulkRemoveComponent } from \"./bulk/bulk-remove.component\";\nimport { UserAddEditComponent } from \"./user-add-edit.component\";\n\n@Component({\n selector: \"provider-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(\"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 = ProviderUserType;\n userStatusType = ProviderUserStatusType;\n providerId: string;\n accessEvents = false;\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 logService: LogService,\n searchPipe: SearchPipe,\n userNamePipe: UserNamePipe,\n stateService: StateService,\n private providerService: ProviderService\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 ngOnInit() {\n this.route.parent.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n const provider = await this.providerService.get(this.providerId);\n\n if (!provider.canManageUsers) {\n this.router.navigate([\"../\"], { relativeTo: this.route });\n return;\n }\n\n this.accessEvents = provider.useEvents;\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 === ProviderUserStatusType.Confirmed) {\n this.events(user[0]);\n }\n }\n });\n });\n }\n\n getUsers(): Promise> {\n return this.apiService.getProviderUsers(this.providerId);\n }\n\n deleteUser(id: string): Promise {\n return this.apiService.deleteProviderUser(this.providerId, id);\n }\n\n reinviteUser(id: string): Promise {\n return this.apiService.postProviderUserReinvite(this.providerId, id);\n }\n\n async confirmUser(user: ProviderUserUserDetailsResponse, publicKey: Uint8Array): Promise {\n const providerKey = await this.cryptoService.getProviderKey(this.providerId);\n const key = await this.cryptoService.rsaEncrypt(providerKey.key, publicKey.buffer);\n const request = new ProviderUserConfirmRequest();\n request.key = key.encryptedString;\n await this.apiService.postProviderUserConfirm(this.providerId, user.id, request);\n }\n\n async edit(user: ProviderUserUserDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n UserAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.providerId = this.providerId;\n comp.providerUserId = user != null ? user.id : null;\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 events(user: ProviderUserUserDetailsResponse) {\n await this.modalService.openViewRef(EntityEventsComponent, this.eventsModalRef, (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.providerId = this.providerId;\n comp.entityId = user.id;\n comp.showUser = false;\n comp.entity = \"user\";\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.providerId = this.providerId;\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 === ProviderUserStatusType.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 ProviderUserBulkRequest(filteredUsers.map((user) => user.id));\n const response = this.apiService.postManyProviderUserReinvite(this.providerId, request);\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.providerId = this.providerId;\n comp.users = this.getCheckedUsers();\n }\n );\n\n await modal.onClosedPromise();\n await this.load();\n }\n\n private async showBulkStatus(\n users: ProviderUserUserDetailsResponse[],\n filteredUsers: ProviderUserUserDetailsResponse[],\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 {{ \"providerUsersNeedConfirmed\" | 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 {{ \"providerAdmin\" | i18n }}\n {{ \"serviceUser\" | 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 {{ \"remove\" | i18n }}\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 { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { ProviderUserType } from \"jslib-common/enums/providerUserType\";\nimport { PermissionsApi } from \"jslib-common/models/api/permissionsApi\";\nimport { ProviderUserInviteRequest } from \"jslib-common/models/request/provider/providerUserInviteRequest\";\nimport { ProviderUserUpdateRequest } from \"jslib-common/models/request/provider/providerUserUpdateRequest\";\n\n@Component({\n selector: \"provider-user-add-edit\",\n templateUrl: \"user-add-edit.component.html\",\n})\nexport class UserAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() providerUserId: string;\n @Input() providerId: string;\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: ProviderUserType = ProviderUserType.ServiceUser;\n permissions = new PermissionsApi();\n showCustom = false;\n access: \"all\" | \"selected\" = \"selected\";\n formPromise: Promise;\n deletePromise: Promise;\n userType = ProviderUserType;\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.providerUserId != null;\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editUser\");\n try {\n const user = await this.apiService.getProviderUser(this.providerId, this.providerUserId);\n this.type = user.type;\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 submit() {\n try {\n if (this.editMode) {\n const request = new ProviderUserUpdateRequest();\n request.type = this.type;\n this.formPromise = this.apiService.putProviderUser(\n this.providerId,\n this.providerUserId,\n request\n );\n } else {\n const request = new ProviderUserInviteRequest();\n request.emails = this.emails.trim().split(/\\s*,\\s*/);\n request.type = this.type;\n this.formPromise = this.apiService.postProviderUserInvite(this.providerId, 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 confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removeUserConfirmation\"),\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.deleteProviderUser(this.providerId, this.providerUserId);\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

{{ \"providerInviteUserDesc\" | 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","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ProviderService } from \"jslib-common/abstractions/provider.service\";\nimport { Provider } from \"jslib-common/models/domain/provider\";\n\n@Component({\n selector: \"providers-layout\",\n templateUrl: \"providers-layout.component.html\",\n})\nexport class ProvidersLayoutComponent {\n provider: Provider;\n private providerId: string;\n\n constructor(private route: ActivatedRoute, private providerService: ProviderService) {}\n\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n this.route.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n await this.load();\n });\n }\n\n async load() {\n this.provider = await this.providerService.get(this.providerId);\n }\n\n get showMenuBar() {\n return this.showManageTab || this.showSettingsTab;\n }\n\n get showManageTab() {\n return this.provider.canManageUsers || this.provider.canAccessEventLogs;\n }\n\n get showSettingsTab() {\n return this.provider.isProviderAdmin;\n }\n\n get manageRoute(): string {\n switch (true) {\n case this.provider.canManageUsers:\n return \"manage/people\";\n case this.provider.canAccessEventLogs:\n return \"manage/events\";\n }\n }\n}\n","\n
\n
\n
\n
\n \n
\n {{ provider.name }}\n {{ \"provider\" | i18n }}\n
\n
\n
\n \n {{ \"providerIsDisabled\" | i18n }}\n
\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 { Permissions } from \"jslib-common/enums/permissions\";\n\nimport { FrontendLayoutComponent } from \"src/app/layouts/frontend-layout.component\";\nimport { ProvidersComponent } from \"src/app/providers/providers.component\";\n\nimport { ClientsComponent } from \"./clients/clients.component\";\nimport { CreateOrganizationComponent } from \"./clients/create-organization.component\";\nimport { AcceptProviderComponent } from \"./manage/accept-provider.component\";\nimport { EventsComponent } from \"./manage/events.component\";\nimport { ManageComponent } from \"./manage/manage.component\";\nimport { PeopleComponent } from \"./manage/people.component\";\nimport { ProvidersLayoutComponent } from \"./providers-layout.component\";\nimport { ProviderGuardService } from \"./services/provider-guard.service\";\nimport { ProviderTypeGuardService } from \"./services/provider-type-guard.service\";\nimport { AccountComponent } from \"./settings/account.component\";\nimport { SettingsComponent } from \"./settings/settings.component\";\nimport { SetupProviderComponent } from \"./setup/setup-provider.component\";\nimport { SetupComponent } from \"./setup/setup.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n canActivate: [AuthGuardService],\n component: ProvidersComponent,\n },\n {\n path: \"\",\n component: FrontendLayoutComponent,\n children: [\n {\n path: \"setup-provider\",\n component: SetupProviderComponent,\n data: { titleId: \"setupProvider\" },\n },\n {\n path: \"accept-provider\",\n component: AcceptProviderComponent,\n data: { titleId: \"acceptProvider\" },\n },\n ],\n },\n {\n path: \"\",\n canActivate: [AuthGuardService],\n children: [\n {\n path: \"setup\",\n component: SetupComponent,\n },\n {\n path: \":providerId\",\n component: ProvidersLayoutComponent,\n canActivate: [ProviderGuardService],\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"clients\" },\n { path: \"clients/create\", component: CreateOrganizationComponent },\n { path: \"clients\", component: ClientsComponent, data: { titleId: \"clients\" } },\n {\n path: \"manage\",\n component: ManageComponent,\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n redirectTo: \"people\",\n },\n {\n path: \"people\",\n component: PeopleComponent,\n canActivate: [ProviderTypeGuardService],\n data: {\n titleId: \"people\",\n permissions: [Permissions.ManageUsers],\n },\n },\n {\n path: \"events\",\n component: EventsComponent,\n canActivate: [ProviderTypeGuardService],\n data: {\n titleId: \"eventLogs\",\n permissions: [Permissions.AccessEventLogs],\n },\n },\n ],\n },\n {\n path: \"settings\",\n component: SettingsComponent,\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n redirectTo: \"account\",\n },\n {\n path: \"account\",\n component: AccountComponent,\n canActivate: [ProviderTypeGuardService],\n data: {\n titleId: \"myProvider\",\n permissions: [Permissions.ManageProvider],\n },\n },\n ],\n },\n ],\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class ProvidersRoutingModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { ComponentFactoryResolver, NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport { JslibModule } from \"jslib-angular/jslib.module\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\n\nimport { OssModule } from \"src/app/oss.module\";\n\nimport { AddOrganizationComponent } from \"./clients/add-organization.component\";\nimport { ClientsComponent } from \"./clients/clients.component\";\nimport { CreateOrganizationComponent } from \"./clients/create-organization.component\";\nimport { AcceptProviderComponent } from \"./manage/accept-provider.component\";\nimport { BulkConfirmComponent } from \"./manage/bulk/bulk-confirm.component\";\nimport { BulkRemoveComponent } from \"./manage/bulk/bulk-remove.component\";\nimport { EventsComponent } from \"./manage/events.component\";\nimport { ManageComponent } from \"./manage/manage.component\";\nimport { PeopleComponent } from \"./manage/people.component\";\nimport { UserAddEditComponent } from \"./manage/user-add-edit.component\";\nimport { ProvidersLayoutComponent } from \"./providers-layout.component\";\nimport { ProvidersRoutingModule } from \"./providers-routing.module\";\nimport { ProviderGuardService } from \"./services/provider-guard.service\";\nimport { ProviderTypeGuardService } from \"./services/provider-type-guard.service\";\nimport { WebProviderService } from \"./services/webProvider.service\";\nimport { AccountComponent } from \"./settings/account.component\";\nimport { SettingsComponent } from \"./settings/settings.component\";\nimport { SetupProviderComponent } from \"./setup/setup-provider.component\";\nimport { SetupComponent } from \"./setup/setup.component\";\n\n@NgModule({\n imports: [CommonModule, FormsModule, OssModule, JslibModule, ProvidersRoutingModule],\n declarations: [\n AcceptProviderComponent,\n AccountComponent,\n AddOrganizationComponent,\n BulkConfirmComponent,\n BulkRemoveComponent,\n ClientsComponent,\n CreateOrganizationComponent,\n EventsComponent,\n ManageComponent,\n PeopleComponent,\n ProvidersLayoutComponent,\n SettingsComponent,\n SetupComponent,\n SetupProviderComponent,\n UserAddEditComponent,\n ],\n providers: [WebProviderService, ProviderGuardService, ProviderTypeGuardService],\n})\nexport class ProvidersModule {\n constructor(modalService: ModalService, componentFactoryResolver: ComponentFactoryResolver) {\n modalService.registerComponentFactoryResolver(\n AddOrganizationComponent,\n componentFactoryResolver\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 { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"jslib-common/abstractions/provider.service\";\n\n@Injectable()\nexport class ProviderGuardService implements CanActivate {\n constructor(\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private providerService: ProviderService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const provider = await this.providerService.get(route.params.providerId);\n if (provider == null) {\n this.router.navigate([\"/\"]);\n return false;\n }\n if (!provider.isProviderAdmin && !provider.enabled) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"providerIsDisabled\"));\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 { ProviderService } from \"jslib-common/abstractions/provider.service\";\nimport { Permissions } from \"jslib-common/enums/permissions\";\n\n@Injectable()\nexport class ProviderTypeGuardService implements CanActivate {\n constructor(private providerService: ProviderService, private router: Router) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const provider = await this.providerService.get(route.params.providerId);\n const permissions = route.data == null ? null : (route.data.permissions as Permissions[]);\n\n if (\n (permissions.indexOf(Permissions.AccessEventLogs) !== -1 && provider.canAccessEventLogs) ||\n (permissions.indexOf(Permissions.ManageProvider) !== -1 && provider.isProviderAdmin) ||\n (permissions.indexOf(Permissions.ManageUsers) !== -1 && provider.canManageUsers)\n ) {\n return true;\n }\n\n this.router.navigate([\"/providers\", provider.id]);\n return false;\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { ProviderAddOrganizationRequest } from \"jslib-common/models/request/provider/providerAddOrganizationRequest\";\n\n@Injectable()\nexport class WebProviderService {\n constructor(\n private cryptoService: CryptoService,\n private syncService: SyncService,\n private apiService: ApiService\n ) {}\n\n async addOrganizationToProvider(providerId: string, organizationId: string) {\n const orgKey = await this.cryptoService.getOrgKey(organizationId);\n const providerKey = await this.cryptoService.getProviderKey(providerId);\n\n const encryptedOrgKey = await this.cryptoService.encrypt(orgKey.key, providerKey);\n\n const request = new ProviderAddOrganizationRequest();\n request.organizationId = organizationId;\n request.key = encryptedOrgKey.encryptedString;\n\n const response = await this.apiService.postProviderAddOrganization(providerId, request);\n await this.syncService.fullSync(true);\n return response;\n }\n\n async detachOrganizastion(providerId: string, organizationId: string): Promise {\n await this.apiService.deleteProviderOrganization(providerId, organizationId);\n await this.syncService.fullSync(true);\n }\n}\n","import { Component } 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\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { ProviderUpdateRequest } from \"jslib-common/models/request/provider/providerUpdateRequest\";\nimport { ProviderResponse } from \"jslib-common/models/response/provider/providerResponse\";\n\n@Component({\n selector: \"provider-account\",\n templateUrl: \"account.component.html\",\n})\nexport class AccountComponent {\n selfHosted = false;\n loading = true;\n provider: ProviderResponse;\n formPromise: Promise;\n taxFormPromise: Promise;\n\n private providerId: string;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private syncService: SyncService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n this.route.parent.parent.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n try {\n this.provider = await this.apiService.getProvider(this.providerId);\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n });\n this.loading = false;\n }\n\n async submit() {\n try {\n const request = new ProviderUpdateRequest();\n request.name = this.provider.name;\n request.businessName = this.provider.businessName;\n request.billingEmail = this.provider.billingEmail;\n\n this.formPromise = this.apiService.putProvider(this.providerId, request).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"providerUpdated\"));\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n }\n}\n","
\n

{{ \"myProvider\" | 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","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ProviderService } from \"jslib-common/abstractions/provider.service\";\n\n@Component({\n selector: \"provider-settings\",\n templateUrl: \"settings.component.html\",\n})\nexport class SettingsComponent {\n constructor(private route: ActivatedRoute, private providerService: ProviderService) {}\n\n ngOnInit() {\n this.route.parent.params.subscribe(async (params) => {\n await this.providerService.get(params.providerId);\n });\n }\n}\n","
\n
\n
\n
\n
{{ \"settings\" | i18n }}
\n \n
\n
\n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { BaseAcceptComponent } from \"src/app/common/base.accept.component\";\n\n@Component({\n selector: \"app-setup-provider\",\n templateUrl: \"setup-provider.component.html\",\n})\nexport class SetupProviderComponent extends BaseAcceptComponent {\n failedShortMessage = \"inviteAcceptFailedShort\";\n failedMessage = \"inviteAcceptFailed\";\n\n requiredParameters = [\"providerId\", \"email\", \"token\"];\n\n async authedHandler(qParams: any) {\n this.router.navigate([\"/providers/setup\"], { queryParams: qParams });\n }\n\n async unauthedHandler(qParams: any) {\n // Empty\n }\n}\n","
\n
\n \"Bitwarden\"\n

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

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

{{ \"setupProvider\" | i18n }}

\n
\n
\n

{{ \"setupProviderLoginDesc\" | 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 { 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 { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { ProviderSetupRequest } from \"jslib-common/models/request/provider/providerSetupRequest\";\n\n@Component({\n selector: \"provider-setup\",\n templateUrl: \"setup.component.html\",\n})\nexport class SetupComponent implements OnInit {\n loading = true;\n authed = false;\n email: string;\n formPromise: Promise;\n\n providerId: string;\n token: string;\n name: string;\n billingEmail: string;\n\n constructor(\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private cryptoService: CryptoService,\n private apiService: ApiService,\n private syncService: SyncService,\n private validationService: ValidationService\n ) {}\n\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n const error = qParams.providerId == null || qParams.email == null || qParams.token == null;\n\n if (error) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"emergencyInviteAcceptFailed\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"/\"]);\n return;\n }\n\n this.providerId = qParams.providerId;\n this.token = qParams.token;\n\n // Check if provider exists, redirect if it does\n try {\n const provider = await this.apiService.getProvider(this.providerId);\n if (provider.name != null) {\n this.router.navigate([\"/providers\", provider.id], { replaceUrl: true });\n }\n } catch (e) {\n this.validationService.showError(e);\n this.router.navigate([\"/\"]);\n }\n });\n }\n\n async submit() {\n this.formPromise = this.doSubmit();\n await this.formPromise;\n this.formPromise = null;\n }\n\n async doSubmit() {\n try {\n const shareKey = await this.cryptoService.makeShareKey();\n const key = shareKey[0].encryptedString;\n\n const request = new ProviderSetupRequest();\n request.name = this.name;\n request.billingEmail = this.billingEmail;\n request.token = this.token;\n request.key = key;\n\n const provider = await this.apiService.postProviderSetup(this.providerId, request);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"providerSetup\"));\n await this.syncService.fullSync(true);\n\n this.router.navigate([\"/providers\", provider.id]);\n } catch (e) {\n this.validationService.showError(e);\n }\n }\n}\n","\n
\n
\n

{{ \"setupProvider\" | i18n }}

\n
\n

{{ \"setupProviderDesc\" | i18n }}

\n\n
\n

{{ \"generalInformation\" | i18n }}

\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n \n \n
\n
\n
\n\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 = true;\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 = !platformUtilsService.isSelfHost();\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 (!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, OnDestroy, OnInit } from \"@angular/core\";\nimport { NgControl } from \"@angular/forms\";\nimport { Subscription } from \"rxjs\";\n\n@Directive({\n selector: \"[appA11yInvalid]\",\n})\nexport class A11yInvalidDirective implements OnDestroy, OnInit {\n private sub: Subscription;\n\n constructor(private el: ElementRef, private formControlDirective: NgControl) {}\n\n ngOnInit() {\n this.sub = this.formControlDirective.control.statusChanges.subscribe((status) => {\n if (status === \"INVALID\") {\n this.el.nativeElement.setAttribute(\"aria-invalid\", \"true\");\n } else if (status === \"VALID\") {\n this.el.nativeElement.setAttribute(\"aria-invalid\", \"false\");\n }\n });\n }\n\n ngOnDestroy() {\n this.sub?.unsubscribe();\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, HostListener } from \"@angular/core\";\n\n@Directive({\n selector: \"input[appInputStripSpaces]\",\n})\nexport class InputStripSpacesDirective {\n constructor(private el: ElementRef) {}\n\n @HostListener(\"input\") onInput() {\n this.el.nativeElement.value = this.el.nativeElement.value.replace(/ /g, \"\");\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 { AbstractControl, ValidationErrors, Validators } from \"@angular/forms\";\n\n/**\n * Runs Validators.required on a field only if it's dirty. This prevents error messages from being displayed\n * to the user prematurely.\n */\nexport function dirtyRequired(control: AbstractControl): ValidationErrors | null {\n return control.dirty ? Validators.required(control) : null;\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 { SsoConfigApi } from \"../../api/ssoConfigApi\";\n\nexport class OrganizationSsoRequest {\n enabled = false;\n data: SsoConfigApi;\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","export class ProviderAddOrganizationRequest {\n organizationId: string;\n key: string;\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 ProviderSetupRequest {\n name: string;\n businessName: string;\n billingEmail: string;\n token: string;\n key: string;\n}\n","export class ProviderUpdateRequest {\n name: string;\n businessName: string;\n billingEmail: string;\n}\n","export class ProviderUserAcceptRequest {\n token: string;\n}\n","type ProviderUserBulkRequestEntry = {\n id: string;\n key: string;\n};\n\nexport class ProviderUserBulkConfirmRequest {\n keys: ProviderUserBulkRequestEntry[];\n\n constructor(keys: ProviderUserBulkRequestEntry[]) {\n this.keys = keys;\n }\n}\n","export class ProviderUserBulkRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","export class ProviderUserConfirmRequest {\n key: string;\n}\n","import { ProviderUserType } from \"../../../enums/providerUserType\";\n\nexport class ProviderUserInviteRequest {\n emails: string[] = [];\n type: ProviderUserType;\n}\n","import { ProviderUserType } from \"../../../enums/providerUserType\";\n\nexport class ProviderUserUpdateRequest {\n type: ProviderUserType;\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 {\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"../../enums/ssoEnums\";\nimport { SsoConfigApi } from \"../api/ssoConfigApi\";\n\nimport { View } from \"./view\";\n\nexport class SsoConfigView extends View {\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\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 idpAllowOutboundLogoutRequests: boolean;\n idpWantAuthnRequestsSigned: boolean;\n };\n\n constructor(api: SsoConfigApi) {\n super();\n if (api == null) {\n return;\n }\n\n this.configType = api.configType;\n\n this.keyConnectorEnabled = api.keyConnectorEnabled;\n this.keyConnectorUrl = api.keyConnectorUrl;\n\n if (this.configType === SsoType.OpenIdConnect) {\n this.openId = {\n authority: api.authority,\n clientId: api.clientId,\n clientSecret: api.clientSecret,\n metadataAddress: api.metadataAddress,\n redirectBehavior: api.redirectBehavior,\n getClaimsFromUserInfoEndpoint: api.getClaimsFromUserInfoEndpoint,\n additionalScopes: api.additionalScopes,\n additionalUserIdClaimTypes: api.additionalUserIdClaimTypes,\n additionalEmailClaimTypes: api.additionalEmailClaimTypes,\n additionalNameClaimTypes: api.additionalNameClaimTypes,\n acrValues: api.acrValues,\n expectedReturnAcrValue: api.expectedReturnAcrValue,\n };\n } else if (this.configType === SsoType.Saml2) {\n this.saml = {\n spNameIdFormat: api.spNameIdFormat,\n spOutboundSigningAlgorithm: api.spOutboundSigningAlgorithm,\n spSigningBehavior: api.spSigningBehavior,\n spMinIncomingSigningAlgorithm: api.spMinIncomingSigningAlgorithm,\n spWantAssertionsSigned: api.spWantAssertionsSigned,\n spValidateCertificates: api.spValidateCertificates,\n\n idpEntityId: api.idpEntityId,\n idpBindingType: api.idpBindingType,\n idpSingleSignOnServiceUrl: api.idpSingleSignOnServiceUrl,\n idpSingleLogoutServiceUrl: api.idpSingleLogoutServiceUrl,\n idpX509PublicCert: api.idpX509PublicCert,\n idpOutboundSigningAlgorithm: api.idpOutboundSigningAlgorithm,\n idpAllowUnsolicitedAuthnResponse: api.idpAllowUnsolicitedAuthnResponse,\n idpWantAuthnRequestsSigned: api.idpWantAuthnRequestsSigned,\n\n // Value is inverted in the view model (allow instead of disable)\n idpAllowOutboundLogoutRequests:\n api.idpDisableOutboundLogoutRequests == null\n ? null\n : !api.idpDisableOutboundLogoutRequests,\n };\n }\n }\n}\n","export class View {}\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 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","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.
\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.
\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 { 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","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 {{ \"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(\n this.platformUtilsService.isSelfHost()\n ? \"trashCleanupWarningSelfHosted\"\n : \"trashCleanupWarning\"\n );\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","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 \n
\n

{{ title }}

\n \n ×\n \n
\n
\n \n {{ \"sendDisabledWarning\" | i18n }}\n \n \n {{ \"sendOptionsPolicyInEffect\" | i18n }}\n
    \n
  • {{ \"sendDisableHideEmailInEffect\" | i18n }}
  • \n
\n
\n
\n
\n \n \n {{ \"sendNameDesc\" | i18n }}\n
\n
\n
\n
\n \n
\n \n \n
\n
\n
\n \n \n
\n \n \n {{ \"sendTextDesc\" | i18n }}\n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n {{ \"file\" | i18n }}\n {{ send.file.fileName }} ({{ send.file.sizeName }})\n
\n
\n \n \n {{ \"sendFileDesc\" | i18n }} {{ \"maxFileSize\" | i18n }}\n
\n
\n
\n

{{ \"share\" | i18n }}

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

{{ \"options\" | i18n }}

\n \n \n \n
\n
\n \n \n
\n
\n \n \n
{{ \"maxAccessCountDesc\" | i18n }}
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n
\n \n \n \n
\n
\n
{{ \"sendPasswordDesc\" | i18n }}
\n
\n
\n
\n \n \n
{{ \"sendNotesDesc\" | i18n }}
\n
\n
\n
\n \n \n
\n
\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 { 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 return async () => {\n await stateService.init();\n\n const urls = process.env.URLS as Urls;\n urls.base ??= window.location.origin;\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(\n this.platformUtilsService.isSelfHost()\n ? \"trashCleanupWarningSelfHosted\"\n : \"trashCleanupWarning\"\n );\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 process.env.NODE_ENV === \"development\";\n }\n\n isSelfHost(): boolean {\n return process.env.ENV.toString() === \"selfhosted\";\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__(22977)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","routes","path","loadChildren","ProvidersModule","AppRoutingModule","RouterModule","forChild","AppComponent","ngOnInit","super","this","policyListService","addPolicies","MaximumVaultTimeoutPolicy","DisablePersonalVaultExportPolicy","AppModule","OssModule","JslibModule","BrowserAnimationsModule","FormsModule","ReactiveFormsModule","ServicesModule","InfiniteScrollModule","DragDropModule","OssRoutingModule","OrganizationsModule","WildcardRoutingModule","enableProdMode","platformBrowser","bootstrapModule","preserveWhitespaces","BaseCvaComponent","constructor","controlDir","internalControl","FormControl","onValueChangesInternal","value","onChange","valueAccessor","describedById","showDescribedBy","controlId","helperText","control","hasError","isRequired","hasValidator","Validators","required","dirtyRequired","valueChanges","subscribe","onBlurInternal","onTouched","writeValue","setValue","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","disable","enable","InputCheckboxComponent","InputTextReadOnlyComponent","platformUtilsService","showCopy","showLaunch","copy","copyToClipboard","launchUri","url","InputTextComponent","stripSpaces","transformValue","newValue","emitEvent","doStripSpaces","onValueChangeInternal","replace","disabled","SelectComponent","defaultSigningAlgorithm","SsoComponent","formBuilder","route","apiService","i18nService","organizationService","ssoType","SsoType","ssoTypeOptions","name","t","None","OpenIdConnect","Saml2","samlSigningAlgorithms","saml2SigningBehaviourOptions","Saml2SigningBehavior","IfIdpWantAuthnRequestsSigned","Always","Never","saml2BindingTypeOptions","Saml2BindingType","HttpRedirect","HttpPost","saml2NameIdFormatOptions","Saml2NameIdFormat","NotConfigured","Unspecified","EmailAddress","X509SubjectName","WindowsDomainQualifiedName","KerberosPrincipalName","EntityIdentifier","Persistent","Transient","connectRedirectOptions","OpenIdConnectRedirectBehavior","RedirectGet","FormPost","showOpenIdCustomizations","loading","haveTestedKeyConnector","enabled","openIdForm","group","authority","clientId","clientSecret","metadataAddress","redirectBehavior","getClaimsFromUserInfoEndpoint","additionalScopes","additionalUserIdClaimTypes","additionalEmailClaimTypes","additionalNameClaimTypes","acrValues","expectedReturnAcrValue","updateOn","samlForm","spNameIdFormat","spOutboundSigningAlgorithm","spSigningBehavior","spMinIncomingSigningAlgorithm","spWantAssertionsSigned","spValidateCertificates","idpEntityId","idpBindingType","idpSingleSignOnServiceUrl","idpSingleLogoutServiceUrl","idpX509PublicCert","idpOutboundSigningAlgorithm","idpAllowUnsolicitedAuthnResponse","idpAllowOutboundLogoutRequests","idpWantAuthnRequestsSigned","ssoConfigForm","configType","keyConnectorEnabled","keyConnectorUrl","openId","saml","get","newType","updateValueAndValidity","parent","params","organizationId","load","organization","ssoSettings","getOrganizationSso","populateForm","callbackPath","urls","signedOutCallbackPath","spEntityId","spMetadataUrl","spAcsUrl","submit","validateForm","validateKeyConnectorUrl","valid","readOutErrors","request","OrganizationSsoRequest","data","SsoConfigApi","fromView","formPromise","postOrganizationSso","response","showToast","markAsPending","getKeyConnectorAlive","setErrors","invalidUrl","toggleOpenIdCustomizations","getErrorCount","form","Object","values","controls","reduce","acc","FormGroup","errors","keys","length","enableTestKeyConnector","Utils","isNullOrWhitespace","samlSigningAlgorithmOptions","map","algorithm","forEach","markAsDirty","markAsTouched","ssoConfigView","SsoConfigView","patchValue","errorText","errorCount","errorCountText","toString","div","document","createElement","className","id","setAttribute","innerText","existing","getElementById","remove","body","append","component","OrganizationLayoutComponent","canActivate","AuthGuardService","OrganizationGuardService","children","ManageComponent","OrganizationTypeGuardService","permissions","Permissions","CreateNewCollections","EditAnyCollection","DeleteAnyCollection","EditAssignedCollections","DeleteAssignedCollections","AccessEventLogs","ManageGroups","ManageUsers","ManagePolicies","ManageSso","OrganizationsRoutingModule","CommonModule","BasePolicy","description","type","PolicyType","DisablePersonalVaultExport","DisablePersonalVaultExportPolicyComponent","BasePolicyComponent","MaximumVaultTimeout","MaximumVaultTimeoutPolicyComponent","hours","minutes","loadData","policyResponse","Math","floor","buildRequestData","buildRequest","policiesEnabledMap","singleOrgEnabled","SingleOrg","Error","AddOrganizationComponent","providerService","webProviderService","validationService","onAddedOrganization","EventEmitter","providerId","provider","add","showDialog","addOrganizationToProvider","e","showError","emit","DisallowedPlanTypes","PlanType","Free","FamiliesAnnually2019","FamiliesAnnually","ClientsComponent","searchService","logService","modalService","manageOrganizations","showAddExisting","didScroll","pageSize","pagedClientsCount","queryParams","pipe","first","qParams","searchText","search","getProviderClients","clients","ProviderUserType","ProviderAdmin","candidateOrgs","getAll","filter","o","isOwner","allowedOrgsIds","Promise","all","getOrganization","then","orgs","includes","planType","addableOrganizations","isPaging","searching","isSearching","resetPaging","isSearchable","pagedClients","loadMore","pagedLength","pagedSize","concat","slice","addExistingOrganization","modal","openViewRef","addModalRef","comp","organizations","close","error","organizationName","actionPromise","detachOrganizastion","ViewContainerRef","CreateOrganizationComponent","OrganizationPlansComponent","AcceptProviderComponent","BaseAcceptComponent","router","stateService","platformUtilService","failedMessage","requiredParameters","authedHandler","ProviderUserAcceptRequest","token","postProviderUserAccept","providerUserId","timeout","navigate","unauthedHandler","providerName","BulkConfirmComponent","isAccepted","user","status","ProviderUserStatusType","Accepted","getPublicKeys","ProviderUserBulkRequest","filteredUsers","postProviderUsersPublicKey","getCryptoKey","cryptoService","getProviderKey","postConfirmRequest","userIdsWithKeys","ProviderUserBulkConfirmRequest","postProviderUserBulkConfirm","BulkRemoveComponent","deleteUsers","users","deleteManyProviderUsers","EventsComponent","BaseEventsComponent","eventService","exportService","userNamePipe","exportFileName","providerUsersUserIdMap","Map","providerUsersIdMap","useEvents","getProviderUsers","u","transform","set","email","userId","loadEvents","loaded","requestEvents","startDate","endDate","continuationToken","getEventsProvider","getUserName","r","has","exportEvents","accessEvents","PeopleComponent","BasePeopleComponent","searchPipe","userType","userStatusType","canManageUsers","viewEvents","Confirmed","events","relativeTo","getUsers","deleteUser","deleteProviderUser","reinviteUser","postProviderUserReinvite","confirmUser","publicKey","providerKey","key","rsaEncrypt","buffer","ProviderUserConfirmRequest","encryptedString","postProviderUserConfirm","edit","UserAddEditComponent","addEditModalRef","onSavedUser","onDeletedUser","removeUser","EntityEventsComponent","eventsModalRef","entityId","showUser","entity","bulkRemove","bulkRemoveModalRef","getCheckedUsers","onClosedPromise","bulkReinvite","Invited","postManyProviderUserReinvite","showBulkStatus","bulkConfirm","bulkConfirmModalRef","successfullMessage","childComponent","BulkStatusComponent","bulkStatusModalRef","onShown","keyedErrors","a","x","keyedFilteredUsers","message","hasOwnProperty","selectAll","invite","editMode","ServiceUser","PermissionsApi","showCustom","access","title","getProviderUser","ProviderUserUpdateRequest","putProviderUser","ProviderUserInviteRequest","emails","trim","split","postProviderUserInvite","delete","deletePromise","ProvidersLayoutComponent","classList","showMenuBar","showManageTab","showSettingsTab","canAccessEventLogs","isProviderAdmin","manageRoute","ProvidersComponent","FrontendLayoutComponent","SetupProviderComponent","titleId","SetupComponent","ProviderGuardService","pathMatch","redirectTo","ProviderTypeGuardService","SettingsComponent","AccountComponent","ManageProvider","ProvidersRoutingModule","componentFactoryResolver","registerComponentFactoryResolver","WebProviderService","indexOf","syncService","orgKey","getOrgKey","encryptedOrgKey","encrypt","ProviderAddOrganizationRequest","postProviderAddOrganization","fullSync","deleteProviderOrganization","selfHosted","isSelfHost","getProvider","ProviderUpdateRequest","businessName","billingEmail","putProvider","failedShortMessage","authed","replaceUrl","doSubmit","makeShareKey","ProviderSetupRequest","postProviderSetup","AddEditCustomFieldsComponent","addFieldType","FieldType","Text","linkedFieldOptions","cipherType","CipherType","fieldType","eventType","EventType","addFieldTypeOptions","Hidden","Boolean","addFieldLinkedTypeOption","Linked","ngOnChanges","changes","thisCipherType","setLinkedFieldOptions","firstChange","resetCipherLinkedFields","addField","cipher","fields","f","FieldView","newField","linkedId","push","removeField","field","i","splice","toggleFieldValue","showValue","collect","Cipher_ClientToggledHiddenFieldVisible","trackByFunction","index","item","drop","event","moveItemInArray","previousIndex","currentIndex","options","linkedFieldOption","i18nKey","sort","getSortFunction","AddEditComponent","cipherService","folderService","auditService","collectionService","messagingService","policyService","passwordRepromptService","cloneMode","folderId","onSavedCipher","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","autofillOnPageLoadOptions","init","policyAppliesToUser","PersonalOwnership","myEmail","getEmail","OrganizationUserStatusType","writeableCollections","loadCollections","cipherId","addEditCipherInfo","getAddEditCipherInfo","collectionIds","setAddEditCipherInfo","loadCipher","decrypt","CipherView","login","LoginView","uris","LoginUriView","card","CardView","identity","IdentityView","secureNote","SecureNoteView","SecureNoteType","Generic","CipherRepromptType","organizationChanged","c","checked","folders","getAllDecrypted","previousCipherId","Cipher_ClientViewed","isDeleted","restore","uri","encryptCipher","saveCipher","send","addUri","removeUri","cancel","attachments","share","editCollections","deleteCipher","restorePromise","restoreCipher","generateUsername","username","generatePassword","password","togglePassword","focus","Cipher_ClientToggledPasswordVisible","toggleCardNumber","Cipher_ClientToggledCardNumberVisible","toggleCardCode","Cipher_ClientToggledCardCodeVisible","toggleUriOptions","showOptions","match","loginUriMatchChanged","org","organizationUseTotp","useTotp","checkPassword","checkPasswordPromise","passwordLeaked","matches","repromptChanged","Password","readOnly","saveWithServer","deleteWithServer","softDeleteWithServer","restoreWithServer","AttachmentsComponent","win","onUploadedAttachment","onDeletedAttachment","onReuploadedAttachment","deletePromises","reuploadPromises","emergencyAccessId","hasUpdatedKey","fileEl","files","size","saveCipherAttachment","cipherDomain","attachment","deleteCipherAttachment","download","downloading","canAccessAttachments","getAttachmentData","ErrorResponse","statusCode","getSingleMessage","fetch","Request","cache","buf","arrayBuffer","decBuf","decryptFromBytes","saveFile","fileName","hasEncKey","canAccessPremium","getCanAccessPremium","reuploadCipherAttachment","admin","resolve","saveAttachmentRawWithServer","foundAttachment","a2","file","saveAttachmentWithServer","attachmentId","deleteAttachmentWithServer","Window","AvatarComponent","sanitizer","cryptoFunctionService","charCount","textColor","fontSize","fontWeight","dynamic","circle","generate","getEnableGravitars","hashBytes","hash","toLowerCase","fromBufferToHex","src","chars","upperData","toUpperCase","getFirstLetters","unicodeSafeSubstring","regexpEmojiPresentation","charObj","getCharText","color","stringToColor","svg","getSvg","appendChild","html","window","outerHTML","svgHtml","btoa","unescape","encodeURIComponent","str","charCodeAt","substr","count","parts","text","svgTag","style","backgroundColor","width","height","character","textTag","textContent","characters","join","CalloutComponent","useAlertRole","calloutStyle","undefined","enforcedPolicyMessage","icon","getPasswordScoreAlertDisplay","enforcedPolicyOptions","minComplexity","CaptchaProtectedComponent","environmentService","captchaSiteKey","captchaToken","setupCaptcha","webVaultUrl","getWebVaultUrl","captcha","CaptchaIFrame","info","showCaptcha","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","CiphersComponent","activeCipherId","onCipherClicked","onCipherRightClicked","onAddCipher","onAddCipherOptions","ciphers","searchPlaceholder","deleted","searchPending","searchTimeout","deletedFilter","applyFilter","reload","refresh","indexedCiphers","doSearch","selectCipher","rightClickCipher","addCipher","addCipherOptions","searchCiphers","CollectionsComponent","allowSelectNone","onSavedCollections","loadCipherCollections","selectedCollectionIds","saveCollections","saveCollectionsWithServer","ExportScopeCalloutComponent","show","hasOrganizations","scopeConfig","scopeIdentifier","ExportComponent","userVerificationService","onSaved","disabledByPolicy","exportForm","format","secret","formatOptions","checkExportDisabled","encryptedFormat","warningDialog","verifyUser","getExportData","downloadFile","saved","collectEvent","getExport","getFileName","prefix","extension","User_ClientExportedVault","csv","FolderAddEditComponent","onSavedFolder","onDeletedFolder","folder","FolderView","GeneratorComponent","usernameGenerationService","comingFromAddEdit","onSelected","usernameOptions","passwordOptions","avoidAmbiguous","usernameWebsite","passTypeOptions","usernameTypeOptions","desc","subaddressOptions","catchallOptions","forwardOptions","passwordOptionsResponse","getOptions","enforcedPasswordPolicyOptions","ambiguous","subaddressEmail","subaddressType","catchallType","website","websiteOption","generatorOptions","getGeneratorOptions","regenerate","typeChanged","setGeneratorOptions","regeneratePassword","regenerateUsername","sliderChanged","savePasswordOptions","addHistory","sliderInput","normalizePasswordOptions","saveOptions","saveUsernameOptions","copyOptions","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","clearSelections","selectFavorites","selectTrash","selectType","selectFolder","addFolder","editFolder","selectCollection","collection","collapse","grouping","idPrefix","isCollapsed","setCollapsedGroupings","Array","from","successRoute","postPasswordHint","PasswordHintRequest","onSuccessfulSubmit","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","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","rememberEmail","twoFactorRoute","forcePasswordResetRoute","alwaysRememberEmail","getRememberedEmail","isBrowser","isNode","focusInput","credentials","PasswordLogInCredentials","logIn","setRememberedEmail","requiresTwoFactor","onSuccessfulLoginTwoFactorNavigate","forcePasswordReset","onSuccessfulLoginForceResetNavigate","onSuccessfulLogin","onSuccessfulLoginNavigate","launchSsoBrowser","ssoRedirectUri","numbers","state","ssoCodeVerifier","codeVerifierHash","codeChallenge","fromBufferToUrlB64","setSsoState","setSsoCodeVerifier","webUrl","DynamicModalComponent","cd","el","focusTrapFactory","modalRef","ngAfterViewInit","loadChildComponent","childComponentType","setComponentParameters","componentRef","instance","detectChanges","created","nativeElement","focusTrap","create","focusFirstTabbableElementWhenReady","componentType","componentFactory","resolveComponentFactory","modalContentRef","clear","createComponent","ngOnDestroy","destroy","getFocus","autoFocusEl","_parentInjector","_additionalTokens","notFoundValue","flags","_onCreated","Subject","_onClose","_onClosed","_onShow","_onShown","onCreated","asObservable","onClose","onClosed","onShow","next","shown","result","lastResult","closed","toPromise","PasswordGeneratorHistoryComponent","history","getHistory","PasswordRepromptComponent","RegisterComponent","confirmMasterPassword","hint","showTerms","acceptPolicies","masterPasswordScoreWidth","masterPasswordScoreColor","masterPasswordScoreText","DEFAULT_KDF_TYPE","DEFAULT_KDF_ITERATIONS","hashedPassword","makeKeyPair","RegisterRequest","referenceData","KeysRequest","orgInvite","getOrganizationInvitation","organizationUserId","postRegister","confirmField","RemovePasswordComponent","continuing","leaving","getManagingOrganization","convert","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","selectedDeletionDatePreset","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","onDeletionDatePresetSelect","clearExpiration","initialDeletionDate","toISOString","toTimeString","initialExpirationDate","twentyFourHour","noon","midnight","ams","pms","h","m","hour","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","getUserId","fromB64ToArray","userEncKey","encryptedKey","resetRequest","OrganizationUserResetPasswordEnrollmentRequest","resetPasswordKey","putOrganizationUserResetPasswordEnrollment","onSuccessfulChangePassword","setKdfType","setKdfIterations","setEncKey","setEncPrivateKey","VaultTimeoutInputComponent","vaultTimeout","custom","CUSTOM_VALUE","vaultTimeoutPolicy","vaultTimeoutPolicyHours","vaultTimeoutPolicyMinutes","vaultTimeouts","validatorChange","getVaultTimeout","current","max","every","validate","policyError","registerOnValidatorChange","ShareComponent","onSharedCipher","allCollections","filterCollections","cipherView","orgName","find","shareWithServer","canSave","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","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","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","OTP","NG_VALUE_ACCESSOR","multi","useExisting","A11yInvalidDirective","formControlDirective","sub","statusChanges","unsubscribe","A11yTitleDirective","renderer","appA11yTitle","hasAttribute","ApiActionDirective","appApiAction","captchaRequired","AutofocusDirective","appAutofocus","condition","autofocus","isMobileBrowser","BlurClickDirective","onClick","blur","FallbackSrcDirective","onError","appFallbackSrc","InputStripSpacesDirective","onInput","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","UserNamePipe","SearchPipe","I18nPipe","DatePipe","forRoot","maxOpened","autoDismiss","closeButton","ColorPasswordPipe","generateTemplate","templateGenerator","passwordArray","colorizedPassword","isSpecial","p1","p2","p3","items","prop1","prop2","prop3","routerState","getIsAuthenticated","isLocked","promptBiometric","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","SendService","OrganizationService","ProviderService","VaultTimeoutService","storageService","secureStorageService","stateMigrationService","StateFactory","GlobalState","Account","StateMigrationService","ExportService","NotificationsService","WebCryptoFunctionService","EventService","UserVerificationService","PasswordRepromptService","homepage","loginpage","redirectUrl","ModalConfig","allowMultipleModals","applicationRef","modalList","factoryResolvers","addEventListener","modalCount","topModal","viewContainerRef","modalComponentRef","openInternal","insert","hostView","open","attachToDom","createModalComponent","attachView","domElem","rootNodes","detachView","pop","setupHandlers","backdrop","modalEl","dialogEl","zIndex","prepend","modals","querySelectorAll","closeElement","ModalRef","WeakMap","ModalInjector","protectedFields","showPasswordPrompt","ref","defaultErrorMessage","validationErrors","getAllMessages","dirty","indexedEntityId","AuthenticationType","ClientType","DeviceType","EmergencyAccessStatusType","EmergencyAccessType","EncryptionType","FileUploadType","HtmlStorageLocation","featuredImportOptions","regularImportOptions","KdfType","PBKDF2_SHA256","SEND_KDF_ITERATIONS","LoginLinkedId","CardLinkedId","IdentityLinkedId","LogLevelType","NotificationType","OrganizationUserType","PaymentMethodType","PlanSponsorshipType","ProductType","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","assign","splitNewLine","papa","row","warning","parseSingleRowCsv","rowData","parsedRow","loginUri","fixUri","returnArr","hostname","startsWith","defaultValue","cardNum","re","RegExp","test","setCardExpiration","expiration","moveFoldersToCollections","folderRelationships","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","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","ChromeCsvImporter","ClipperzHtmlImporter","textarea","entry","currentVersion","property","actionType","labelLower","CodebookCsvImporter","Category","Favorite","Entry","Note","Username","TOTP","Website","Phone","PIN","_mappedCredentialsColums","_mappedPersonalInfoAsIdentiyColumns","_mappedSecureNoteColumns","DashlaneCsvImporter","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","sensitive","uuid","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","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","iframeId","parseFunction","parseMessage","connectorLink","sendMessage","contentWindow","postMessage","base64Encode","String","fromCharCode","removeEventListener","version","URLSearchParams","stringify","href","validMessage","origin","LinkedMetadata","propertyKey","_i18nKey","prototype","ApiLogInStrategy","LogInStrategy","tokenResponse","apiUseKeyConnector","getKeyConnectorUrl","getAndSetKey","tokenRequest","ApiTokenRequest","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","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","allow","EEFLongWordList","CardApi","BaseResponse","getResponseProperty","FieldApi","IdentityApi","LoginApi","passwordRevisionDate","autofillOnPageLoad","LoginUriApi","accessEventLogs","accessImportExport","accessReports","manageAllCollections","manageAssignedCollections","createNewCollections","editAnyCollection","deleteAnyCollection","editAssignedCollections","deleteAssignedCollections","manageCiphers","manageGroups","manageSso","managePolicies","manageUsers","manageResetPassword","SecureNoteApi","SendFileApi","sizeName","SendTextApi","hidden","idpDisableOutboundLogoutRequests","api","viewPassword","revisionDate","deletedDate","LoginData","SecureNoteData","CardData","IdentityData","FieldData","AttachmentData","PasswordHistoryData","externalId","LoginUriData","usePolicies","useGroups","useDirectory","use2fa","useApi","useSso","useKeyConnector","useResetPassword","selfHost","usersGetPremium","seats","maxCollections","maxStorageGb","ssoBound","resetPasswordEnrolled","hasPublicAndPrivateKeys","familySponsorshipFriendlyName","familySponsorshipAvailable","planProductType","maxAccessCount","accessCount","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","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","webVault","keyConnector","theme","System","WindowState","stateVersion","One","Sso","Api","LoginUri","toLoginUriData","MasterPasswordPolicyOptions","minLength","requireUpper","requireLower","requireNumbers","requireSpecial","isProviderUser","canAccess","Owner","isManager","Manager","Admin","isAdmin","canAccessImportExport","canAccessReports","canCreateNewCollections","canEditAnyCollection","canDeleteAnyCollection","canViewAllCollections","canEditAssignedCollections","canDeleteAssignedCollections","canViewAssignedCollections","canManageGroups","canManageSso","canManagePolicies","canManageUsersPassword","isExemptFromPolicies","PasswordGeneratorPolicyOptions","defaultType","useUppercase","useLowercase","useNumbers","numberCount","useSpecial","specialCount","minNumberWords","includeNumber","inEffect","Policy","canCreateOrganizations","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","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","twoFactorProvider","twoFactorRemember","KdfRequest","encryptedPrivateKey","OrganizationKeysRequest","seatAdjustment","maxAutoscaleSeats","OrganizationTaxInfoUpdateRequest","TaxInfoUpdateRequest","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","providerOrganizationId","actingUserId","ipAddress","FolderResponse","domains","excluded","GroupResponse","accessAll","access_token","expiresIn","expires_in","refresh_token","tokenType","token_type","KeyConnectorUserKeyResponse","KeysResponse","ListResponse","dr","NotificationResponse","contextId","payload","SyncCipherCreate","SyncCipherDelete","SyncCipherUpdate","SyncLoginDelete","SyncCipherNotification","SyncFolderCreate","SyncFolderDelete","SyncFolderUpdate","SyncFolderNotification","SyncVault","SyncCiphers","SyncOrgKeys","SyncSettings","LogOut","UserNotification","SyncSendCreate","SyncSendUpdate","SyncSendDelete","SyncSendNotification","OrganizationSsoResponse","SsoUrls","OrganizationAutoEnrollStatusResponse","OrganizationKeysResponse","OrganizationResponse","businessAddress1","businessAddress2","businessAddress3","businessCountry","businessTaxNumber","plan","PlanResponse","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","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","View","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","getOrganizationBilling","getOrganizationSubscription","getOrganizationLicense","installationId","getOrganizationTaxInfo","postOrganization","putOrganization","putOrganizationTaxInfo","postOrganizationLicense","postOrganizationLicenseUpdate","postOrganizationApiKey","postOrganizationRotateApiKey","postOrganizationUpgrade","postOrganizationUpdateSubscription","postOrganizationSeat","postOrganizationStorage","postOrganizationPayment","postOrganizationVerifyBank","postOrganizationCancel","postOrganizationReinstate","deleteOrganization","postOrganizationKeys","ProviderUserUserDetailsResponse","ProviderOrganizationOrganizationDetailsResponse","postProviderCreateOrganization","getEvents","addEventParameters","getEventsCipher","getEventsOrganization","getEventsOrganizationUser","getEventsProviderUser","postEventsCollect","authHeader","getActiveBearerToken","Authorization","getEventsUrl","getUserPublicKey","getHibpBreach","postBitPayInvoice","postSetupPayment","getUserKeyFromKeyConnector","handleError","postUserKeyToKeyConnector","getToken","tokenNeedsRefresh","getApplicationVersion","nativeFetch","postCreateSponsorship","sponsoredOrgId","deleteRevokeSponsorship","sponsoringOrganizationId","deleteRemoveSponsorship","sponsoringOrgId","postPreValidateSponsorshipToken","sponsorshipToken","postRedeemSponsorship","postResendSponsorshipOffer","getRefreshToken","doRefreshToken","getClientId","getClientSecret","doApiTokenRefresh","decodedToken","setTokens","deviceRequest","setToken","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","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","setCryptoMasterKey","storeKey","keyHash","setDecryptedCryptoSymmetricKey","setEncryptedCryptoSymmetricKey","encPrivateKey","setDecryptedPrivateKey","setEncryptedPrivateKey","setOrgKeys","providerOrgs","orgKeys","providerOrg","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","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","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","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","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","crypto","subtle","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","EmergencyAccessAcceptRequest","AcceptOrganizationComponent","OrganizationUserAcceptRequest","performResetPasswordAutoEnroll","policyList","HintComponent","routerService","previousUrl","getPreviousUrl","showResetPasswordAutoEnrollWarning","goAfterLogIn","getRememberEmail","resetPasswordPolicy","policiesData","setRememberEmail","RecoverDeleteComponent","DeleteRecoverRequest","RecoverTwoFactorComponent","recoveryCode","showCreateOrgMessage","layout","ReferenceEventRequest","flow","reference","cookie","shift","storedIdentifier","anotherMethod","twoFactorOptionsModal","VerifyEmailTokenComponent","VerifyEmailRequest","VerifyRecoverDeleteComponent","VerifyDeleteRecoverRequest","BroadcasterSubscriptionId","broadcasterService","notificationsService","lastActivity","idleTimer","isIdle","runOutsideAngular","onmousemove","recordActivity","onmousedown","ontouchstart","onclick","onscroll","onkeypress","run","command","setPreviousUrl","setFullWidth","NavigationEnd","jq","TwoFactorAuthenticationPolicy","MasterPasswordPolicy","PasswordGeneratorPolicy","SingleOrgPolicy","RequireSsoPolicy","PersonalOwnershipPolicy","DisableSendPolicy","SendOptionsPolicy","ResetPasswordPolicy","idleStateChanged","msg","sanitize","SecurityContext","HTML","enableHtml","trustedHtml","timeOut","getRedirectRoute","urlTree","parseUrl","dirtyDates","defaultDates","getDefaultDateFilters","appApiPromiseUnfulfilled","dates","parseDates","exportPromise","export","clearExisting","loadAndParseEvents","refreshPromise","morePromise","eventInfo","getEventInfo","EventView","formatDateFilters","statusMap","pagedUsers","allUsers","pagedUsersCount","allCount","invitedCount","acceptedCount","confirmedCount","showConfirmUsers","showBulkConfirmUsers","iterateEnum","checkUser","selectCount","deleteWarningMessage","reinvite","confirm","mapIndex","updateUser","publicKeyResponse","autoConfirm","UserConfirmComponent","confirmModalRef","onConfirmedUser","fingerprint","NestedCheckboxComponent","parentIndeterminate","parentChecked","checkboxes","pascalize","camelToPascalCase","PasswordStrengthComponent","showText","scoreWidth","PremiumBadgeComponent","premiumRequired","FooterComponent","NavbarComponent","showToolsTab","toolsRoute","UserLayoutComponent","publicKeys","fingerprints","statuses","done","excludedUsers","OrganizationUserBulkRequest","OrganizationUserBulkConfirmRequest","CollectionAddEditComponent","onSavedCollection","onDeletedCollection","accessGroups","groupsResponse","check","SelectionReadOnlyRequest","canCreate","pagedCollectionsCount","decryptCollections","assignedCollections","pagedCollections","canEdit","canDelete","removeCollection","EntityUsersComponent","usersModalRef","entityName","onEditedUsers","orgUsersUserIdMap","orgUsersIdMap","organizationUserType","organizationUserStatusType","showSelected","selectedCount","loadUsers","selectedChanged","filterSelected","selections","GroupAddEditComponent","onSavedGroup","onDeletedGroup","GroupRequest","GroupsComponent","pagedGroupsCount","pagedGroups","removeGroup","accessPolicies","accessSso","canResetPassword","orgUseResetPassword","orgHasKeys","orgResetPasswordPolicyEnabled","callingUserType","orgShareKey","OrganizationUserConfirmRequest","allowResetPassword","orgUser","callingUserHasPermission","showEnrolledStatus","UserGroupsComponent","groupsModalRef","resetPassword","ResetPasswordComponent","resetPasswordModalRef","onPasswordReset","PoliciesComponent","policyIdFromEvents","orgPolicy","orgPolicies","op","PolicyEditComponent","editModalRef","onSavedPolicy","cdr","factory","policyComponent","policyFormRef","Enabled","loggedOutWarningName","orgSymKey","decPrivateKey","newPasswordStrengthTimeout","User","manageAllCollectionsCheckboxes","manageAssignedCollectionsCheckboxes","customUserTypeSelected","setRequestPermissions","clearPermissions","handleDependentPermissions","OrganizationUserUpdateRequest","OrganizationUserInviteRequest","dontAskAgain","userGroups","ug","OrganizationUserUpdateGroupsRequest","display","PolicyRequest","DisableSendPolicyComponent","MasterPasswordPolicyComponent","showKeyConnectorInfo","passwordScores","PasswordGeneratorPolicyComponent","defaultTypes","PersonalOwnershipPolicyComponent","RequireSso","RequireSsoPolicyComponent","ResetPasswordPolicyComponent","SendOptionsPolicyComponent","SingleOrgPolicyComponent","TwoFactorAuthentication","TwoFactorAuthenticationPolicyComponent","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","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","subscriptionDesc","showChangePlanButton","access2fa","TwoFactorSetupComponent","manage","duoComp","openModal","duoModalRef","TwoFactorDuoComponent","onUpdated","updateStatus","filterProvider","FamiliesForEnterpriseSetupComponent","badToken","showNewOrganization","_selectedFamilyOrganizationId","organizationPlansComponent","acceptingSponsorship","onOrganizationCreateSuccess","existingFamilyOrganizations","selectedFamilyOrganizationId","OrganizationSponsorshipRedeemRequest","planSponsorshipType","FamiliesForEnterprise","sponsoredOrganizationId","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","AccessComponent","OptionsComponent","DomainRulesComponent","PremiumComponent","UserSubscriptionComponent","OrganizationsComponent","EmergencyAccessComponent","EmergencyAccessViewComponent","SponsoredFamiliesComponent","ReportsModule","AccessImportExport","AccessReports","ManageUsersPassword","ManageOrganization","useHash","paramsInheritanceStrategy","registerLocaleData","ToastrModule","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","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","RouterService","activatedRoute","titleService","currentUrl","rawTitle","child","firstChild","snapshot","newTitle","setTitle","initFactory","eventLoggingService","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","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","effectiveTheme","getEffectiveTheme","vaultTimeoutActionChanged","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":""}