{"version":3,"file":"app/main.1bd06dadb3ec2a128299.js","mappings":"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,KAAK03F,SAAW13F,KAAKq8F,oBAAoB,YACzCr8F,KAAKy6G,cAAgBz6G,KAAKq8F,oBAAoB,iBAC9Cr8F,KAAKqiC,IAAMriC,KAAKq8F,oBAAoB,OACtC,EAGK,MAAM+d,WAAuC,KAIlDh7G,YAAY+B,EAAY,MACtBsT,MAAMtT,GAEM,MAARA,IAIJnB,KAAKyE,KAAOzE,KAAKq8F,oBAAoB,QACrCr8F,KAAKwT,IAAMxT,KAAKq8F,oBAAoB,OACtC,E,2WChDK,MAAMqe,GAOXt7G,YAAYu7G,G,QACV36G,KAAKqW,QAAUskG,EAAiBtkG,QAChCrW,KAAKk6G,QAAUS,EAAiBT,QAChCl6G,KAAKm6G,OAASQ,EAAiBR,OAC/Bn6G,KAAK46G,QAAU,IAAIzrG,KAAKwrG,EAAiBC,SACzC56G,KAAKq6G,YAAcM,EAAiBN,YAEX,OAAV,QAAX,EAAAr6G,KAAKm6G,cAAM,eAAE11G,OAAoC,OAAT,QAAX,EAAAzE,KAAKm6G,cAAM,eAAE3mG,OAC5CxT,KAAKm6G,OAAS,KAElB,CAEQU,uB,MACN,OAAO,IAAI1rG,MAAOS,WAAwB,QAAZ,EAAA5P,KAAK46G,eAAO,eAAEhrG,UAC9C,CAEAw2B,UACE,OAAOpmC,KAAK66G,wBA3BU,KA4BxB,CAEAC,cACE,OAAO96G,KAAK66G,wBA9BoB,KA+BlC,E,2WCrCK,MAAME,GAAkB,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,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","sources":["webpack://@bitwarden/web-vault/webpack/runtime/chunk loaded","webpack://@bitwarden/web-vault/webpack/runtime/load script","webpack://@bitwarden/web-vault/./src/app/accounts/register-form/register-form.module.ts","webpack://@bitwarden/web-vault/./src/app/common/base.accept.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/event.view.ts","webpack://@bitwarden/web-vault/./src/app/common/base.events.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/common/base.people.component.ts","webpack://@bitwarden/web-vault/./src/app/components/dynamic-avatar.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/not-premium.directive.ts","webpack://@bitwarden/web-vault/./src/app/components/premium-badge.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/user-verification.component.ts","webpack://@bitwarden/web-vault/./src/app/components/user-verification.component.html","webpack://@bitwarden/web-vault/./src/app/components/user-verification.component.ts","webpack://@bitwarden/web-vault/./src/app/core/event.service.ts","webpack://@bitwarden/web-vault/./src/app/core/policy-list.service.ts","webpack://@bitwarden/web-vault/./src/app/core/router.service.ts","webpack://@bitwarden/web-vault/./src/app/core/state/account.ts","webpack://@bitwarden/web-vault/./src/app/core/state/state.service.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.html","webpack://@bitwarden/web-vault/./src/app/layouts/navbar.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/product-switcher/product-switcher-content.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/product-switcher/product-switcher-content.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/product-switcher/product-switcher.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/product-switcher/product-switcher.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/product-switcher/product-switcher.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/create/organization-create.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/create/organization-information.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/create/organization-information.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/guards/org-permissions.guard.ts","webpack://@bitwarden/web-vault/./src/app/organizations/guards/org-redirect.guard.ts","webpack://@bitwarden/web-vault/./src/app/components/organization-switcher.component.html","webpack://@bitwarden/web-vault/./src/app/components/organization-switcher.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/layouts/organization-layout.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/layouts/organization-layout.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-bulk-confirm.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-confirm.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.html","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/entity-events.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-events.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/policy.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/base-policy.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policies.module.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.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/master-password.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/password-generator.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/password-generator.component.ts","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.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/reset-password.component.ts","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/policies/policy-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policy-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policies.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policies.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-update.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/delete-organization.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/delete-organization.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/account.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/account.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-setup.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/two-factor-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-settings-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-settings.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/settings.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/settings.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/add-edit.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-accept.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/accept-emergency.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/accept-emergency.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-accept.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/accept-organization.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/accept-organization.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/password-hint.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/hint.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/hint.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/hint.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/lock.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/lock.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/lock.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/misc/captcha_iframe.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/iframe_component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/authRequestType.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/captchaProtected.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/log-in-credentials.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/passwordless-create-auth.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/login/login-with-device.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/login/login-with-device.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/login.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/login/login.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/login/login.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/delete-recover.request.ts","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/../../libs/common/src/models/request/two-factor-recovery.request.ts","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/../../libs/angular/src/components/remove-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/remove-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/remove-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-reset-password-enrollment.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/set-password.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/change-password.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/set-password.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/shared/components/password-strength/password-strength.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/shared/components/password-strength/password-strength.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/set-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/set-password.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/sso.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/sso.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/sso.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/reference-event.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-step.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-step.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-step-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-step-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-stepper.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-stepper.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/register.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/validators/inputsFieldMatch.validator.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/register.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/register-form/register-form.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/register-form/register-form.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-forbes.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-forbes.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-us-news.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-us-news.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/confirmation-details.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/confirmation-details.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/billing.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/billing.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/default-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/default-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise1-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise1-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise2-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise2-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams1-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams1-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams2-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams2-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-cnet.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-cnet.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-enterprise-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-enterprise-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-individual-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-individual-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-teams-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-teams-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/abm-enterprise-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/abm-enterprise-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/abm-teams-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/abm-teams-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/trial-initiation.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/trial-initiation.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/webauthn_iframe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/two-factor.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/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-options.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/password.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/update-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/update-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/update-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-reset-password.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-temp-password.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/update-temp-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/update-temp-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/update-temp-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/verify-email.request.ts","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/../../libs/common/src/models/request/verify-delete-recover.request.ts","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/guards/home.guard.ts","webpack://@bitwarden/web-vault/./src/app/organizations/components/access-selector/access-selector.models.ts","webpack://@bitwarden/web-vault/./src/app/layouts/user-layout.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/utils/form-selection-list.ts","webpack://@bitwarden/web-vault/./src/app/layouts/user-layout.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/multi-select/multi-select.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/multi-select/multi-select.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/components/access-selector/user-type.pipe.ts","webpack://@bitwarden/web-vault/./src/app/organizations/components/access-selector/access-selector.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/components/access-selector/access-selector.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/components/access-selector/access-selector.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/selection-read-only.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collection-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collection-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-users.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-users.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/org-upgrade-dialog/org-upgrade-dialog.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/org-upgrade-dialog/org-upgrade-dialog.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collections.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collections.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/group.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/group-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/group-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/groups.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/groups.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/manage.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/manage.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-confirm.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-restore-revoke.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-restore-revoke.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/reset-password.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/reset-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-update.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-invite.request.ts","webpack://@bitwarden/web-vault/./src/app/components/nested-checkbox.component.html","webpack://@bitwarden/web-vault/./src/app/components/nested-checkbox.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-add-edit.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-update-groups.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-groups.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-groups.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/people.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/people.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/shared/pipes/pipes.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/shared/vault.service.ts","webpack://@bitwarden/web-vault/./src/app/vault/shared/vault-shared.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault-filter/vault-filter.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/models/vault-filter.model.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/attachments.component.html","webpack://@bitwarden/web-vault/./src/app/vault/attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/attachments.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/collections.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/collections.component.html","webpack://@bitwarden/web-vault/./src/app/vault/collections.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/collections.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/components/vault-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/components/collection-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/collection-filter/collection-filter.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/collection-filter/collection-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/components/folder-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/folder-filter/folder-filter.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/folder-filter/folder-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/components/status-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/status-filter/status-filter.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/status-filter/status-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/components/type-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/type-filter/type-filter.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/type-filter/type-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/components/organization-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/users/enroll-master-password-reset.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/users/enroll-master-password-reset.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/organization-filter/link-sso.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/organization-filter/link-sso.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/organization-filter/organization-options.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/organization-filter/organization-options.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/organization-filter/organization-filter.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/organization-filter/organization-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/vault-filter.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/vault-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault-filter/vault-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/vault-items.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/ellipsis.pipe.ts","webpack://@bitwarden/web-vault/./src/app/vault/organization-badge/organization-name-badge.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/organization-badge/organization-name-badge.component.html","webpack://@bitwarden/web-vault/./src/app/vault/shared/pipes/get-organization-name.pipe.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-items.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-items.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault-items.component.ts","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.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-move.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-restore.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/types/checkable.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-restore.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-share.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-share.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-actions.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-actions.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/organization-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/shared/shared-organization.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/organization.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/planSponsorshipType.ts","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/accept-family-sponsorship.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/accept-family-sponsorship.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization/organization-sponsorship-redeem.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/families-for-enterprise-setup.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/families-for-enterprise-setup.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/send-access.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send-access.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/send-access.request.ts","webpack://@bitwarden/web-vault/./src/app/send/access.component.html","webpack://@bitwarden/web-vault/./src/app/send/access.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/send/send.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/send/efflux-dates.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/send/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/send/efflux-dates.component.html","webpack://@bitwarden/web-vault/./src/app/send/efflux-dates.component.ts","webpack://@bitwarden/web-vault/./src/app/send/add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/send/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/send/send.component.html","webpack://@bitwarden/web-vault/./src/app/send/send.component.ts","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/../../libs/common/src/models/request/email-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/email.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-email.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-email.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-profile.request.ts","webpack://@bitwarden/web-vault/./src/app/components/selectable-avatar.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-avatar.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-avatar.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/profile.component.html","webpack://@bitwarden/web-vault/./src/app/settings/profile.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/account.component.html","webpack://@bitwarden/web-vault/./src/app/settings/account.component.ts","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/../../libs/common/src/models/request/update-domains.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/domain-rules.component.html","webpack://@bitwarden/web-vault/./src/app/settings/domain-rules.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-view.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-view.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/emergencyAccessStatusType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/emergencyAccessType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-confirm.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-invite.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-update.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-confirm.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-password.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-takeover.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-takeover.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/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/vault-timeout-input.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/preferences.component.html","webpack://@bitwarden/web-vault/./src/app/settings/preferences.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/folder-with-id.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/send-with-id.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-key.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-password.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/kdf.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/security-keys.component.html","webpack://@bitwarden/web-vault/./src/app/settings/security-keys.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/security.component.html","webpack://@bitwarden/web-vault/./src/app/settings/security.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/security-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/settings/settings.component.html","webpack://@bitwarden/web-vault/./src/app/settings/settings.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/validators/notAllowedValueAsync.validator.ts","webpack://@bitwarden/web-vault/./src/app/settings/sponsoring-org-row.component.html","webpack://@bitwarden/web-vault/./src/app/settings/sponsoring-org-row.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/sponsored-families.component.html","webpack://@bitwarden/web-vault/./src/app/settings/sponsored-families.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/billing-history-view.component.html","webpack://@bitwarden/web-vault/./src/app/settings/billing-history-view.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/premium.component.html","webpack://@bitwarden/web-vault/./src/app/settings/premium.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/subscription.component.html","webpack://@bitwarden/web-vault/./src/app/settings/subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/user-subscription.component.html","webpack://@bitwarden/web-vault/./src/app/settings/user-subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/subscription-routing.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/generator.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/password-generator-history.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/select-copy.directive.ts","webpack://@bitwarden/web-vault/./src/app/tools/password-generator-history.component.html","webpack://@bitwarden/web-vault/./src/app/tools/password-generator-history.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/generator.component.html","webpack://@bitwarden/web-vault/./src/app/tools/generator.component.ts","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/settings/update-key.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/update-key.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/folder-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/folder-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/vault/folder-add-edit.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/share.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/share.component.html","webpack://@bitwarden/web-vault/./src/app/vault/share.component.ts","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/vault/vault.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault.module.ts","webpack://@bitwarden/web-vault/./src/app/oss-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/shared/guards/has-premium.guard.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/breach-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/breach-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-breach.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-exposed-passwords.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-inactive-two-factor.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-reused-passwords.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-unsecured-websites.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-weak-passwords.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/reports.ts","webpack://@bitwarden/web-vault/./src/app/reports/shared/reports-shared.module.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/reports-home.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/reports-home.component.html","webpack://@bitwarden/web-vault/./src/app/reports/reports-layout.component.html","webpack://@bitwarden/web-vault/./src/app/reports/reports-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/reports-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/reports/reports.module.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/cipher-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/exposed-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/exposed-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/inactive-two-factor-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/inactive-two-factor-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/reused-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/reused-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/unsecured-websites-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/unsecured-websites-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/weak-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/weak-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/shared/models/report-variant.ts","webpack://@bitwarden/web-vault/./src/app/reports/shared/report-card/report-card.component.html","webpack://@bitwarden/web-vault/./src/app/reports/shared/report-card/report-card.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/shared/report-list/report-list.component.html","webpack://@bitwarden/web-vault/./src/app/reports/shared/report-list/report-list.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/storage.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/adjust-storage.component.html","webpack://@bitwarden/web-vault/./src/app/settings/adjust-storage.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/api-key.component.html","webpack://@bitwarden/web-vault/./src/app/settings/api-key.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/transactionType.ts","webpack://@bitwarden/web-vault/./src/app/settings/billing-history.component.html","webpack://@bitwarden/web-vault/./src/app/settings/billing-history.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-create.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-upgrade.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-organization-create.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/organization-plans.component.html","webpack://@bitwarden/web-vault/./src/app/settings/organization-plans.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/verify-bank.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/bit-pay-invoice.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/add-credit.component.html","webpack://@bitwarden/web-vault/./src/app/settings/add-credit.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/payment.request.ts","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/payment-method.component.html","webpack://@bitwarden/web-vault/./src/app/settings/payment-method.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/payment.component.html","webpack://@bitwarden/web-vault/./src/app/settings/payment.component.ts","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/tax-info.component.html","webpack://@bitwarden/web-vault/./src/app/settings/tax-info.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/two-factor-provider.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-base.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-duo.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-duo.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-duo.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-authenticator.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-authenticator.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-authenticator.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-email.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-email.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-email.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-recovery.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-recovery.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-web-authn-delete.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-web-authn.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-webauthn.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-webauthn.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-yubio-otp.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-yubikey.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-yubikey.component.ts","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/update-license.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/update-license.component.html","webpack://@bitwarden/web-vault/./src/app/shared/loose-components.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/async-actions/async-actions.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/avatar/avatar.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/button/button.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon-button/icon-button.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/dialog.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon/icon.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/link/link.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/navigation/navigation.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/table/table.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tabs.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/color-password/color-password.module.ts","webpack://@bitwarden/web-vault/./src/app/shared/locales.ts","webpack://@bitwarden/web-vault/./src/app/shared/shared.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/add-edit-custom-fields.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/true-false-value.directive.ts","webpack://@bitwarden/web-vault/./src/app/vault/add-edit-custom-fields.component.html","webpack://@bitwarden/web-vault/./src/app/vault/add-edit-custom-fields.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/organization-badge/organization-badge.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/vault-filter-shared.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/vault-filter.service.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/vault-filter.module.ts","webpack://@bitwarden/web-vault/./src/utils/flags.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/account/account.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/config/config-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/event/event-upload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/fileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/notifications.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/settings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/sync/syncNotifier.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/userVerification/userVerification-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/factories/accountFactory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/factories/globalStateFactory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/factories/stateFactory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/stateVersion.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/global-state.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-avatar.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/notificationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/notification.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/anonymousHub.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/device.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/user-api-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/api-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/attachment-upload-data.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/auth-request.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/authentication/register.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/billing.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/billing-history.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/billing-payment.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/breach-account.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/selection-read-only.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/collection.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/device-verification.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/global-domain.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/domains.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/event.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/group.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identity-captcha.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identity-token.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identity-two-factor.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/key-connector-user-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-connection.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-export.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-sponsorship-sync-status.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profile-organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profile-provider-organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profile-provider.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profile.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/payment.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/plan.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/prelogin.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider-organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/responses/organization-user-bulk-public-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider-user-bulk-public-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider-user-bulk.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider-user.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/send-access.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/send-file-download-data.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/send.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/send-file-upload-data.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/sso-pre-validate.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/subscription.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/folder.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/sync.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/tax-info.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/tax-rate.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-authenticator.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-duo.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-email.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-provider.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-recover.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-web-authn.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-yubi-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/user-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/audit.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/throttle.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/password-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/auth-result.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/logIn.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/passwordLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/passwordlessLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/sso-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/ssoLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/user-api-login.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/prelogin.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/sequentialize.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/sorted-ciphers-cache.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-bulk-move.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-bulk-restore.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-bulk-share.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-partial.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-share.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cipher.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/server-config.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/config/server-config.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/wordlist.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/encrypted-organization-key.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/crypto.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/encrypted-object.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cryptography/encrypt.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cryptography/get-class-initializer.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cryptography/multithread-encrypt.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/event.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/event.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/fileUploadType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/azureFileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/bitwardenFileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/account/set-key-connector-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/key-connector-user-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/login.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/responses/organization-user.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/responses/organization-user-bulk.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization-user/requests/organization-user-bulk.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/ssoEnums.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-api-key-information.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-auto-enroll-status.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/keys.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-keys.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-subscription.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/sso-config.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization/organization-sso.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/password-generator-policy-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/passwordGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/reset-password-policy-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/providerUserStatusType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/providerUserType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/provider.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/search.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/token.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/stateMigration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/organization.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/sync/sync.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/totp.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/account/verify-otp.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/email-forwarders/anon-addy-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/email-forwarders/duck-duck-go-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/email-forwarders/fastmail-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/email-forwarders/firefox-relay-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/email-forwarders/forwarder-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/email-forwarders/simple-login-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/usernameGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/decrypt-parameters.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/broadcaster.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/broadcaster.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/password-reprompt.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/passwordReprompt.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/theming/themeBuilder.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/theming/theming.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/jslib-services.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/appId.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/auth.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/folder/folder.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/folder/folder-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/account/account-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/account/account.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/account/avatar-update.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/collection.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/environment.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/fileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/settings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/vaultTimeout/vaultTimeoutSettings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/vaultTimeout/vaultTimeout.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/export.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/notifications.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/webCryptoFunction.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/event/event-upload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/event/event-collection.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/policy/policy.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/policy/policy-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/send.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/keyConnector.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/userVerification/userVerification.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization/organization.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization-user/organization-user.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/provider.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/formValidationErrors.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/userVerification/userVerification-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization/organization-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/sync/syncNotifier.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/config/config.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/config/config.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/config/config-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/validation.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/memoryStorage.service.ts","webpack://@bitwarden/web-vault/./src/app/core/broadcaster-messaging.service.ts","webpack://@bitwarden/web-vault/./src/app/core/html-storage.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/container.service.ts","webpack://@bitwarden/web-vault/./src/app/core/init.service.ts","webpack://@bitwarden/web-vault/./src/app/core/modal.service.ts","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/core/password-reprompt.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/fileDownload/fileDownloadBuilder.ts","webpack://@bitwarden/web-vault/./src/app/core/web-file-download.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/clientType.ts","webpack://@bitwarden/web-vault/./src/app/core/web-platform-utils.service.ts","webpack://@bitwarden/web-vault/./src/app/core/core.module.ts","webpack://@bitwarden/web-vault/./src/app/core/state/global-state.ts","webpack://@bitwarden/web-vault/./src/app/core/i18n.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/i18n.service.ts","webpack://@bitwarden/web-vault/./src/app/core/state-migration.service.ts","webpack://@bitwarden/web-vault/./src/app/accounts/login/login.module.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-stepper.module.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/trial-initiation.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/organization-manage.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/users/organization-user.module.ts","webpack://@bitwarden/web-vault/./src/app/oss.module.ts","webpack://@bitwarden/web-vault/./src/app/wildcard-routing.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-add-organization.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/services/webProvider.service.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/clients/add-organization.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/clients/add-organization.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/guards/provider-permissions.guard.ts","webpack://@bitwarden/web-vault/./src/app/providers/providers.component.html","webpack://@bitwarden/web-vault/./src/app/providers/providers.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/clients/clients.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/clients/clients.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/clients/create-organization.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/clients/create-organization.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-user-accept.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/accept-provider.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/accept-provider.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/events.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/events.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/manage.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/manage.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-user-bulk.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-user-confirm.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-user-bulk-confirm.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/bulk/bulk-confirm.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/bulk/bulk-remove.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-user-invite.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-user-update.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/user-add-edit.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/user-add-edit.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/people.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/people.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/providers-layout.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/providers-layout.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-update.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/settings/account.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/settings/account.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/settings/settings.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/settings/settings.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/setup/setup-provider.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/setup/setup-provider.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-setup.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/setup/setup.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/setup/setup.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/providers-routing.module.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/providers.module.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/app-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/app.component.ts","webpack://@bitwarden/web-vault/./src/app/app.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/policies/disable-personal-vault-export.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/policies/disable-personal-vault-export.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/policies/maximum-vault-timeout.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/policies/maximum-vault-timeout.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/app.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/scim-config.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/scim-config.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/manage/scim.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/manage/scim.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization/organization-sso.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/sso-config.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/view.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/input-strip-spaces.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/copy-click.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/launch-click.directive.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/components/base-cva.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/components/input-checkbox.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/components/input-checkbox.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/manage/sso.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/manage/sso.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/organizations-routing.module.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/organizations.module.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/app.module.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/main.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/callout.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/callout.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/fallback-src.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/icon.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/icon.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/modal/modal.ref.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/a11y-title.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/api-action.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/autofocus.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/input-verbatim.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/stop-click.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/stop-prop.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/auth.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/lock.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/unauth.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/toastr.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/credit-card-number.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/jslib.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/i18n.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/search.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/user-name.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/injection-tokens.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/modal/dynamic-modal.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/modal/modal-injector.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/modal.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/theming/theming.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/models/dynamic-tree-node.model.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/services/vault-filter.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/account/account-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/account/avatar-update.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/anonymousHub.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/appId.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/audit.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/auth.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/broadcaster.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/cipher.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/collection.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/crypto.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/cryptoFunction.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/encrypt.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/environment.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/event/event-collection.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/export.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/fileDownload/fileDownload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/folder/folder-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/folder/folder.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/formValidationErrors.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/i18n.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/keyConnector.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/log.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/login.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/messaging.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/organization-user.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization/organization-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization/organization.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/passwordGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/passwordReprompt.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/platformUtils.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/policy/policy-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/policy/policy.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/provider.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/search.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/send.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/state.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/stateMigration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/storage.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/sync/sync.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/token.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/totp.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/twoFactor.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/userVerification/userVerification.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/usernameGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/validation.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/vaultTimeout/vaultTimeout.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/vaultTimeout/vaultTimeoutSettings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/authenticationStatus.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/authenticationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/cipherRepromptType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/cipherType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/deviceType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/encryptionType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/eventType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/fieldType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/hashPurpose.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/htmlStorageLocation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/kdfType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/keySuffixOptions.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/linkedIdType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/logLevelType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationApiKeyType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationConnectionType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationUserStatusType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationUserType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/paymentMethodType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/planType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/policyType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/productType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/secureNoteType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/sendType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/themeType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/twoFactorProviderType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/uriMatchType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/verificationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/flags.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/linkedFieldOption.decorator.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/tree-node.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/serviceUtils.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/utils.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/card.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/field.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/identity.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/login-uri.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/login.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/permissions.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/secure-note.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/send-file.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/send-text.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/attachment.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/card.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/cipher.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/collection.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/event.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/field.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/folder.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/identity.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/login-uri.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/login.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/password-history.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/policy.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/provider.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/secure-note.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/send-file.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/send-text.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/send.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/server-config.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/account.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/attachment.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/card.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/cipher.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/collection.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/domain-base.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/enc-array-buffer.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/enc-string.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/environment-urls.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/field.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/folder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/generated-password-history.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/identity.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/login-uri.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/login.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/master-password-policy-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/organization.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/password.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/policy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/secure-note.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send-file.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send-text.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/symmetric-crypto-key.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/window-state.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/card.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/field.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/identity.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/login-uri.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/login.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/secure-note.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/cipher.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/cipher-with-ids.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/collection.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/collection-with-id.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/folder.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/folder-with-id.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-bulk-delete.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-collections.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-create.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-with-id.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/attachment.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/collection.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/folder.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/token-two-factor.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/keys.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-api-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-connection.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-keys.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-tax-info-update.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/secret-verification.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/send.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/tax-info-update.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/two-factor-email.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/attachment.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/base.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/password-history.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/cipher.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/emergency-access.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/error.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/list.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/policy.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/attachment.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/card.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/cipher.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/collection.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/field.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/folder.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/identity.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/item.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/login-uri.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/login.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/password-history.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/secure-note.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/send-file.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/send-text.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/send.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/consoleLog.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cryptography/initializer-key.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/storageLocation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/state.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/state.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/twoFactor.service.ts","webpack://@bitwarden/web-vault/../../libs/components/src/avatar/avatar.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/badge/badge.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/badge/badge.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/button/button.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/button/button.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/color-password/color-password.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/dialog.service.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/directives/dialog-title-container.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/simple-dialog/simple-dialog.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/simple-dialog/simple-dialog.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-control/hint.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-control/label.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/error-summary.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field-control.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/error.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-control/form-control.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/input/input.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/multi-select/multi-select.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/password-input-toggle.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/prefix.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/suffix.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon-button/icon-button.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon-button/icon-button.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/icon/icon.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon/icon.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon/icons/search.ts","webpack://@bitwarden/web-vault/../../libs/components/src/input/input.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/link/link.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-divider.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-divider.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-item.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-trigger-for.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/shared/button-like.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/components/src/shared/i18n.pipe.ts","webpack://@bitwarden/web-vault/../../libs/components/src/shared/shared.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/table/cell.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/table/row.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/table/table.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/table/table.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/shared/tab-header.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/shared/tab-list-container.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/shared/tab-list-item.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-nav-bar/tab-link.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-nav-bar/tab-link.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-nav-bar/tab-nav-bar.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-nav-bar/tab-nav-bar.component.html","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/ensure chunk","webpack://@bitwarden/web-vault/webpack/runtime/get javascript chunk filename","webpack://@bitwarden/web-vault/webpack/runtime/get mini-css chunk filename","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/publicPath","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};","var inProgress = {};\nvar dataWebpackPrefix = \"@bitwarden/web-vault:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { RegisterFormComponent } from \"./register-form.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [RegisterFormComponent],\n exports: [RegisterFormComponent],\n})\nexport class RegisterFormModule {}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/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: Params): Promise;\n abstract unauthedHandler(qParams: Params): Promise;\n\n ngOnInit() {\n // eslint-disable-next-line rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\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 this.email = qParams.email;\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.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","import { EventSystemUser } from \"../../enums/event-system-user\";\nimport { 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 installationId: string;\n systemUser: EventSystemUser;\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 this.installationId = data.installationId;\n this.systemUser = data.systemUser;\n }\n}\n","import { Directive } from \"@angular/core\";\n\nimport { ExportService } from \"@bitwarden/common/abstractions/export.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { EventResponse } from \"@bitwarden/common/models/response/event.response\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { EventView } from \"@bitwarden/common/models/view/event.view\";\n\nimport { EventService } from \"../core\";\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 protected fileDownloadService: FileDownloadService\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 const userName = user != null ? user.name : this.i18nService.t(\"unknown\");\n\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: userName,\n userEmail: user != null ? user.email : \"\",\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n installationId: r.installationId,\n systemUser: r.systemUser,\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.fileDownloadService.download({\n fileName,\n blobData: data,\n blobOptions: { type: \"text/plain\" },\n });\n }\n}\n","
\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { StateService } from \"@bitwarden/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","import { Directive, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationUserUserDetailsResponse } from \"@bitwarden/common/abstractions/organization-user/responses\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\nimport { ProviderUserStatusType } from \"@bitwarden/common/enums/providerUserStatusType\";\nimport { ProviderUserType } from \"@bitwarden/common/enums/providerUserType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { ProviderUserUserDetailsResponse } from \"@bitwarden/common/models/response/provider/provider-user.response\";\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.activeUsers != null ? this.activeUsers.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 revokedCount() {\n return this.statusMap.has(this.userStatusType.Revoked)\n ? this.statusMap.get(this.userStatusType.Revoked).length\n : 0;\n }\n\n get showConfirmUsers(): boolean {\n return (\n this.activeUsers != null &&\n this.statusMap != null &&\n this.activeUsers.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 protected activeUsers: 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 revokeUser(id: string): Promise;\n abstract restoreUser(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 this.activeUsers = [];\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(\n Utils.getSortFunction(\n this.i18nService,\n \"email\"\n )\n );\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 if (u.status !== this.userStatusType.Revoked) {\n this.activeUsers.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.activeUsers;\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 protected async removeUserConfirmationDialog(user: UserType) {\n return this.platformUtilsService.showDialog(\n this.i18nService.t(\"removeUserConfirmation\"),\n this.userNamePipe.transform(user),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n }\n\n async remove(user: UserType) {\n const confirmed = await this.removeUserConfirmationDialog(user);\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 revoke(user: UserType) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.revokeWarningMessage(),\n this.i18nService.t(\"revokeUserId\", this.userNamePipe.transform(user)),\n this.i18nService.t(\"revokeAccess\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n this.actionPromise = this.revokeUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"revokedUserId\", this.userNamePipe.transform(user))\n );\n await this.load();\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async restore(user: UserType) {\n this.actionPromise = this.restoreUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"restoredUserId\", this.userNamePipe.transform(user))\n );\n await this.load();\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 // eslint-disable-next-line rxjs/no-async-subscribe\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 revokeWarningMessage(): string {\n return this.i18nService.t(\"revokeUserConfirmation\");\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\n index = this.allUsers.indexOf(user);\n if (index > -1) {\n this.allUsers.splice(index, 1);\n }\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, Input, OnDestroy } from \"@angular/core\";\nimport { Observable, Subject } from \"rxjs\";\n\nimport { AvatarUpdateService } from \"@bitwarden/common/abstractions/account/avatar-update.service\";\ntype SizeTypes = \"xlarge\" | \"large\" | \"default\" | \"small\" | \"xsmall\";\n@Component({\n selector: \"dynamic-avatar\",\n template: `\n \n \n `,\n})\nexport class DynamicAvatarComponent implements OnDestroy {\n @Input() border = false;\n @Input() id: string;\n @Input() text: string;\n @Input() title: string;\n @Input() size: SizeTypes = \"default\";\n color$: Observable;\n private destroy$ = new Subject();\n\n constructor(private accountUpdateService: AvatarUpdateService) {\n if (this.text) {\n this.text = this.text.toUpperCase();\n }\n this.color$ = this.accountUpdateService.avatarUpdate$;\n }\n\n async ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { Directive, OnInit, TemplateRef, ViewContainerRef } from \"@angular/core\";\n\nimport { StateService } from \"@bitwarden/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 { Component } from \"@angular/core\";\n\nimport { MessagingService } from \"@bitwarden/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 { Directive, OnInit } from \"@angular/core\";\nimport { ControlValueAccessor, FormControl } from \"@angular/forms\";\n\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { VerificationType } from \"@bitwarden/common/enums/verificationType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\n/**\n * Used for general-purpose user verification throughout the app.\n * Collects the user's master password, or if they are using Key Connector, prompts for an OTP via email.\n * This is exposed to the parent component via the ControlValueAccessor interface (e.g. bind it to a FormControl).\n * Use UserVerificationService to verify the user's input.\n */\n@Directive({\n selector: \"app-user-verification\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class UserVerificationComponent 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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n this.secret.valueChanges.subscribe((secret: string) => 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: Utils.isNullOrWhitespace(secret) ? null : 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 { animate, style, transition, trigger } from \"@angular/animations\";\nimport { Component } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\nimport { UserVerificationComponent as BaseComponent } from \"@bitwarden/angular/components/user-verification.component\";\n\n@Component({\n selector: \"app-user-verification\",\n templateUrl: \"user-verification.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: UserVerificationComponent,\n },\n ],\n animations: [\n trigger(\"sent\", [\n transition(\":enter\", [style({ opacity: 0 }), animate(\"100ms\", style({ opacity: 1 }))]),\n ]),\n ],\n})\nexport class UserVerificationComponent extends BaseComponent {}\n","import { Injectable } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { DeviceType } from \"@bitwarden/common/enums/deviceType\";\nimport { EventType } from \"@bitwarden/common/enums/eventType\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { EventResponse } from \"@bitwarden/common/models/response/event.response\";\n\n@Injectable()\nexport class EventService {\n private policies: Policy[];\n\n constructor(private i18nService: I18nService, policyService: PolicyService) {\n policyService.policies$.subscribe((policies) => {\n this.policies = policies;\n });\n }\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_ClientToggledCardNumberVisible:\n msg = this.i18nService.t(\"viewedCardNumberItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"viewedCardNumberItemId\",\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 case EventType.OrganizationUser_Revoked:\n msg = this.i18nService.t(\"revokedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"revokedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Restored:\n msg = this.i18nService.t(\"restoredUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"restoredUserId\",\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 case EventType.Organization_ClientExportedVault:\n msg = humanReadableMsg = this.i18nService.t(\"exportedOrganizationVault\");\n break;\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 case EventType.Organization_SponsorshipsSynced:\n msg = humanReadableMsg = this.i18nService.t(\"sponsorshipsSynced\");\n break;\n // Policies\n case EventType.Policy_Updated: {\n msg = this.i18nService.t(\"modifiedPolicyId\", this.formatPolicyId(ev));\n\n const policy = this.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(\"href\", \"#/organizations/\" + ev.organizationId + \"/groups?search=\" + shortId);\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 // TODO: Update view/edit collection link after EC-14 is completed\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 \"/members?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 { BasePolicy } from \"../organizations/policies\";\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\";\nimport { filter } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/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\n router.events\n .pipe(filter((e) => e instanceof NavigationEnd))\n .subscribe((event: NavigationEnd) => {\n this.currentUrl = event.url;\n\n let title = i18nService.t(\"pageTitle\", \"Bitwarden\");\n let child = this.activatedRoute.firstChild;\n while (child.firstChild) {\n child = child.firstChild;\n }\n\n const titleId: string = child?.snapshot?.data?.titleId;\n const rawTitle: string = child?.snapshot?.data?.title;\n const updateUrl = !child?.snapshot?.data?.doNotSaveUrl ?? true;\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 if (updateUrl) {\n this.setPreviousUrl(this.currentUrl);\n }\n });\n }\n\n getPreviousUrl() {\n return this.previousUrl;\n }\n\n setPreviousUrl(url: string) {\n this.previousUrl = url;\n }\n}\n","import {\n Account as BaseAccount,\n AccountSettings as BaseAccountSettings,\n} from \"@bitwarden/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 { Inject, Injectable } from \"@angular/core\";\n\nimport {\n MEMORY_STORAGE,\n SECURE_STORAGE,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n} from \"@bitwarden/angular/services/injection-tokens\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { StateMigrationService } from \"@bitwarden/common/abstractions/stateMigration.service\";\nimport { AbstractStorageService } from \"@bitwarden/common/abstractions/storage.service\";\nimport { StateFactory } from \"@bitwarden/common/factories/stateFactory\";\nimport { CipherData } from \"@bitwarden/common/models/data/cipher.data\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collection.data\";\nimport { FolderData } from \"@bitwarden/common/models/data/folder.data\";\nimport { SendData } from \"@bitwarden/common/models/data/send.data\";\nimport { StorageOptions } from \"@bitwarden/common/models/domain/storage-options\";\nimport { StateService as BaseStateService } from \"@bitwarden/common/services/state.service\";\n\nimport { Account } from \"./account\";\nimport { GlobalState } from \"./global-state\";\n\n@Injectable()\nexport class StateService extends BaseStateService {\n constructor(\n storageService: AbstractStorageService,\n @Inject(SECURE_STORAGE) secureStorageService: AbstractStorageService,\n @Inject(MEMORY_STORAGE) memoryStorageService: AbstractStorageService,\n logService: LogService,\n stateMigrationService: StateMigrationService,\n @Inject(STATE_FACTORY) stateFactory: StateFactory,\n @Inject(STATE_SERVICE_USE_CACHE) useAccountCache = true\n ) {\n super(\n storageService,\n secureStorageService,\n memoryStorageService,\n logService,\n stateMigrationService,\n stateFactory,\n useAccountCache\n );\n }\n\n async addAccount(account: Account) {\n // Apply web overrides to default account values\n account = new Account(account);\n await super.addAccount(account);\n }\n\n async getEncryptedCiphers(options?: StorageOptions): Promise<{ [id: string]: CipherData }> {\n options = this.reconcileOptions(options, await 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, await 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, await 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, await 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, await 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, await 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, await 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, await this.defaultInMemoryOptions());\n return await super.setEncryptedSends(value, options);\n }\n\n override async getLastSync(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getLastSync(options);\n }\n\n override async setLastSync(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setLastSync(value, options);\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/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 \"@bitwarden/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","
\n","import { Component, OnInit } from \"@angular/core\";\nimport { map, Observable } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport {\n canAccessAdmin,\n isNotProviderUser,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\n\n@Component({\n selector: \"app-navbar\",\n templateUrl: \"navbar.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class NavbarComponent implements OnInit {\n selfHosted = false;\n name: string;\n email: string;\n providers: Provider[] = [];\n userId: string;\n organizations$: Observable;\n\n constructor(\n private messagingService: MessagingService,\n private platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService,\n private providerService: ProviderService,\n private syncService: SyncService,\n private organizationService: OrganizationService,\n private i18nService: I18nService\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 this.userId = await this.tokenService.getUserId();\n if (this.name == null || this.name.trim() === \"\") {\n this.name = this.email;\n }\n\n // Ensure providers and organizations 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 this.organizations$ = this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter(isNotProviderUser)),\n canAccessAdmin(this.i18nService)\n );\n }\n\n lock() {\n this.messagingService.send(\"lockVault\");\n }\n\n logOut() {\n this.messagingService.send(\"logout\");\n }\n}\n","\n
\n \n \n \n \n \n {{\n product.name\n }}\n \n \n\n \n 0\"\n class=\"tw-mt-4 tw-flex tw-w-full tw-flex-col tw-border-0 tw-border-t tw-border-solid tw-border-t-text-muted tw-p-2 tw-pb-0\"\n >\n {{ \"moreFromBitwarden\" | i18n }}\n \n \n {{ product.name }}\n \n \n \n
\n
\n","import { Component, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { combineLatest, map } from \"rxjs\";\n\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { MenuComponent } from \"@bitwarden/components\";\n\ntype ProductSwitcherItem = {\n /**\n * Displayed name\n */\n name: string;\n\n /**\n * Displayed icon\n */\n icon: string;\n\n /**\n * Route for items in the `bentoProducts$` section\n */\n appRoute?: string | any[];\n\n /**\n * Route for items in the `otherProducts$` section\n */\n marketingRoute?: string | any[];\n};\n\n@Component({\n selector: \"product-switcher-content\",\n templateUrl: \"./product-switcher-content.component.html\",\n})\nexport class ProductSwitcherContentComponent {\n @ViewChild(\"menu\")\n menu: MenuComponent;\n\n protected products$ = combineLatest([\n this.organizationService.organizations$,\n this.route.paramMap,\n ]).pipe(\n map(([orgs, paramMap]) => {\n const routeOrg = orgs.find((o) => o.id === paramMap.get(\"organizationId\"));\n // If the active route org doesn't have access to SM, find the first org that does.\n const smOrg = routeOrg?.canAccessSecretsManager\n ? routeOrg\n : orgs.find((o) => o.canAccessSecretsManager);\n\n /**\n * We can update this to the \"satisfies\" type upon upgrading to TypeScript 4.9\n * https://devblogs.microsoft.com/typescript/announcing-typescript-4-9/#satisfies\n */\n const products: Record<\"pm\" | \"sm\" | \"orgs\", ProductSwitcherItem> = {\n pm: {\n name: \"Password Manager\",\n icon: \"bwi-lock\",\n appRoute: \"/vault\",\n marketingRoute: \"https://bitwarden.com/products/personal/\",\n },\n sm: {\n name: \"Secrets Manager Beta\",\n icon: \"bwi-cli\",\n appRoute: [\"/sm\", smOrg?.id],\n // TODO: update marketing link\n marketingRoute: \"#\",\n },\n orgs: {\n name: \"Organizations\",\n icon: \"bwi-business\",\n marketingRoute: \"https://bitwarden.com/products/business/\",\n },\n };\n\n const bento: ProductSwitcherItem[] = [products.pm];\n const other: ProductSwitcherItem[] = [];\n\n if (smOrg) {\n bento.push(products.sm);\n }\n\n if (orgs.length === 0) {\n other.push(products.orgs);\n }\n\n return {\n bento,\n other,\n };\n })\n );\n\n constructor(private organizationService: OrganizationService, private route: ActivatedRoute) {}\n}\n","\n \n \n\n","import { AfterViewInit, ChangeDetectorRef, Component, Input } from \"@angular/core\";\n\nimport { IconButtonType } from \"@bitwarden/components/src/icon-button/icon-button.component\";\n\nimport { flagEnabled } from \"../../../utils/flags\";\n\n@Component({\n selector: \"product-switcher\",\n templateUrl: \"./product-switcher.component.html\",\n})\nexport class ProductSwitcherComponent implements AfterViewInit {\n protected isEnabled = flagEnabled(\"secretsManager\");\n\n /**\n * Passed to the product switcher's `bitIconButton`\n */\n @Input()\n buttonType: IconButtonType = \"main\";\n\n ngAfterViewInit() {\n /**\n * Resolves https://angular.io/errors/NG0100 [SM-403]\n *\n * Caused by `[bitMenuTriggerFor]=\"content?.menu\"` in template\n */\n this.changeDetector.detectChanges();\n }\n\n constructor(private changeDetector: ChangeDetectorRef) {}\n}\n","import { A11yModule } from \"@angular/cdk/a11y\";\nimport { NgModule } from \"@angular/core\";\nimport { RouterModule } from \"@angular/router\";\n\nimport { I18nPipe } from \"@bitwarden/angular/pipes/i18n.pipe\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { ProductSwitcherContentComponent } from \"./product-switcher-content.component\";\nimport { ProductSwitcherComponent } from \"./product-switcher.component\";\n\n@NgModule({\n imports: [SharedModule, A11yModule, RouterModule],\n declarations: [ProductSwitcherComponent, ProductSwitcherContentComponent],\n exports: [ProductSwitcherComponent],\n providers: [I18nPipe],\n})\nexport class ProductSwitcherModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { OrganizationInformationComponent } from \"./organization-information.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [OrganizationInformationComponent],\n exports: [OrganizationInformationComponent],\n})\nexport class OrganizationCreateModule {}\n","
\n \n {{ \"organizationName\" | i18n }}\n \n \n
\n
\n

{{ \"generalInformation\" | i18n }}

\n
\n \n {{ \"organizationName\" | i18n }}\n \n \n \n {{ \"billingEmail\" | i18n }}\n \n \n \n {{ \"clientOwnerEmail\" | i18n }}\n \n \n
\n
\n \n {{ \"accountOwnedBusiness\" | i18n }}\n
\n \n {{ \"businessName\" | i18n }}\n \n \n
\n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { UntypedFormGroup } from \"@angular/forms\";\n\n@Component({\n selector: \"app-org-info\",\n templateUrl: \"organization-information.component.html\",\n})\nexport class OrganizationInformationComponent {\n @Input() nameOnly = false;\n @Input() createOrganization = true;\n @Input() isProvider = false;\n @Input() acceptingSponsorship = false;\n @Input() formGroup: UntypedFormGroup;\n @Output() changedBusinessOwned = new EventEmitter();\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport {\n canAccessOrgAdmin,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class OrganizationPermissionsGuard implements CanActivate {\n constructor(\n private router: Router,\n private organizationService: OrganizationService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private syncService: SyncService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n // TODO: We need to fix this issue once and for all.\n if ((await this.syncService.getLastSync()) == null) {\n await this.syncService.fullSync(false);\n }\n\n const org = this.organizationService.get(route.params.organizationId);\n if (org == null) {\n return this.router.createUrlTree([\"/\"]);\n }\n\n if (!org.isOwner && !org.enabled) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"organizationIsDisabled\")\n );\n return this.router.createUrlTree([\"/\"]);\n }\n\n const permissionsCallback: (organization: Organization) => boolean =\n route.data?.organizationPermissions;\n const hasPermissions = permissionsCallback == null || permissionsCallback(org);\n\n if (!hasPermissions) {\n // Handle linkable ciphers for organizations the user only has view access to\n // https://bitwarden.atlassian.net/browse/EC-203\n const cipherId =\n state.root.queryParamMap.get(\"itemId\") || state.root.queryParamMap.get(\"cipherId\");\n if (cipherId) {\n return this.router.createUrlTree([\"/vault\"], {\n queryParams: {\n itemId: cipherId,\n },\n });\n }\n\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"accessDenied\"));\n return canAccessOrgAdmin(org)\n ? this.router.createUrlTree([\"/organizations\", org.id])\n : this.router.createUrlTree([\"/\"]);\n }\n\n return true;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport {\n canAccessOrgAdmin,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class OrganizationRedirectGuard implements CanActivate {\n constructor(private router: Router, private organizationService: OrganizationService) {}\n\n async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n const org = this.organizationService.get(route.params.organizationId);\n\n const customRedirect = route.data?.autoRedirectCallback;\n if (customRedirect) {\n let redirectPath = customRedirect(org);\n if (typeof redirectPath === \"string\") {\n redirectPath = [redirectPath];\n }\n return this.router.createUrlTree([state.url, ...redirectPath]);\n }\n\n if (canAccessOrgAdmin(org)) {\n return this.router.createUrlTree([\"/organizations\", org.id]);\n }\n return this.router.createUrlTree([\"/\"]);\n }\n}\n","
\n \n \n
\n
\n {{ activeOrganization.name }}\n {{ \"organization\" | i18n }}\n
\n
\n \n
\n
\n \n
\n \n
\n \n {{ \"organizationIsDisabled\" | i18n }}\n
\n
\n \n
\n \n {{ \"accessingUsingProvider\" | i18n: activeOrganization.providerName }}\n
\n
\n \n\n \n \n \n\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { map, Observable } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport {\n canAccessAdmin,\n isNotProviderUser,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-organization-switcher\",\n templateUrl: \"organization-switcher.component.html\",\n})\nexport class OrganizationSwitcherComponent implements OnInit {\n constructor(private organizationService: OrganizationService, private i18nService: I18nService) {}\n\n @Input() activeOrganization: Organization = null;\n organizations$: Observable;\n\n loaded = false;\n\n async ngOnInit() {\n this.organizations$ = this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter(isNotProviderUser)),\n canAccessAdmin(this.i18nService),\n map((orgs) => orgs.sort(Utils.getSortFunction(this.i18nService, \"name\")))\n );\n\n this.loaded = true;\n }\n}\n","\n
\n
\n
\n \n \n {{ \"vault\" | i18n }}\n \n {{ \"manage\" | i18n }}\n \n \n {{ getReportTabLabel(organization) | i18n }}\n \n {{\n \"billing\" | i18n\n }}\n {{\n \"settings\" | i18n\n }}\n \n
\n
\n
\n\n\n\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { map, mergeMap, Observable, Subject, takeUntil } from \"rxjs\";\n\nimport {\n canAccessBillingTab,\n canAccessGroupsTab,\n canAccessManageTab,\n canAccessMembersTab,\n canAccessReportingTab,\n canAccessSettingsTab,\n getOrganizationById,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-organization-layout\",\n templateUrl: \"organization-layout.component.html\",\n})\nexport class OrganizationLayoutComponent implements OnInit, OnDestroy {\n organization$: Observable;\n\n private _destroy = new Subject();\n\n constructor(private route: ActivatedRoute, private organizationService: OrganizationService) {}\n\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n\n this.organization$ = this.route.params\n .pipe(takeUntil(this._destroy))\n .pipe(map((p) => p.organizationId))\n .pipe(\n mergeMap((id) => {\n return this.organizationService.organizations$\n .pipe(takeUntil(this._destroy))\n .pipe(getOrganizationById(id));\n })\n );\n }\n\n ngOnDestroy() {\n this._destroy.next();\n this._destroy.complete();\n }\n\n canShowSettingsTab(organization: Organization): boolean {\n return canAccessSettingsTab(organization);\n }\n\n canShowManageTab(organization: Organization): boolean {\n return canAccessManageTab(organization);\n }\n\n canShowMembersTab(organization: Organization): boolean {\n return canAccessMembersTab(organization);\n }\n\n canShowGroupsTab(organization: Organization): boolean {\n return canAccessGroupsTab(organization);\n }\n\n canShowReportsTab(organization: Organization): boolean {\n return canAccessReportingTab(organization);\n }\n\n canShowBillingTab(organization: Organization): boolean {\n return canAccessBillingTab(organization);\n }\n\n getReportTabLabel(organization: Organization): string {\n return organization.useEvents ? \"reporting\" : \"reports\";\n }\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","
\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserBulkConfirmRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\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 organizationUserService: OrganizationUserService,\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 return await this.organizationUserService.postOrganizationUsersPublicKey(\n this.organizationId,\n this.filteredUsers.map((user) => user.id)\n );\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.organizationUserService.postOrganizationUserBulkConfirm(\n this.organizationId,\n request\n );\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 }}\n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}
\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 {{ 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, Input } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\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(\n protected apiService: ApiService,\n protected i18nService: I18nService,\n private organizationUserService: OrganizationUserService\n ) {}\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 return await this.organizationUserService.deleteManyOrganizationUsers(\n this.organizationId,\n this.users.map((user) => user.id)\n );\n }\n\n protected get removeUsersWarning() {\n return this.i18nService.t(\"removeOrgUsersConfirmation\");\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 \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { ProviderUserStatusType } from \"@bitwarden/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","
\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, Input, OnInit } from \"@angular/core\";\n\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { EventResponse } from \"@bitwarden/common/models/response/event.response\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\n\nimport { EventService } from \"../../core\";\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 private organizationUserService: OrganizationUserService\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.organizationUserService.getAllUsers(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","import { PolicyType } from \"../../enums/policyType\";\n\nexport class PolicyRequest {\n type: PolicyType;\n enabled: boolean;\n data: any;\n}\n","import { Directive, Input, OnInit } from \"@angular/core\";\nimport { UntypedFormControl, UntypedFormGroup } from \"@angular/forms\";\n\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { PolicyRequest } from \"@bitwarden/common/models/request/policy.request\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policy.response\";\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 UntypedFormControl(false);\n data: UntypedFormGroup = 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 { NgModule } from \"@angular/core\";\n\nimport { LooseComponentsModule, SharedModule } from \"../../shared\";\n\nimport { DisableSendPolicyComponent } from \"./disable-send.component\";\nimport { MasterPasswordPolicyComponent } from \"./master-password.component\";\nimport { PasswordGeneratorPolicyComponent } from \"./password-generator.component\";\nimport { PersonalOwnershipPolicyComponent } from \"./personal-ownership.component\";\nimport { PoliciesComponent } from \"./policies.component\";\nimport { PolicyEditComponent } from \"./policy-edit.component\";\nimport { RequireSsoPolicyComponent } from \"./require-sso.component\";\nimport { ResetPasswordPolicyComponent } from \"./reset-password.component\";\nimport { SendOptionsPolicyComponent } from \"./send-options.component\";\nimport { SingleOrgPolicyComponent } from \"./single-org.component\";\nimport { TwoFactorAuthenticationPolicyComponent } from \"./two-factor-authentication.component\";\n\n@NgModule({\n imports: [SharedModule, LooseComponentsModule],\n declarations: [\n DisableSendPolicyComponent,\n MasterPasswordPolicyComponent,\n PasswordGeneratorPolicyComponent,\n PersonalOwnershipPolicyComponent,\n RequireSsoPolicyComponent,\n ResetPasswordPolicyComponent,\n SendOptionsPolicyComponent,\n SingleOrgPolicyComponent,\n TwoFactorAuthenticationPolicyComponent,\n PoliciesComponent,\n PolicyEditComponent,\n ],\n exports: [\n DisableSendPolicyComponent,\n MasterPasswordPolicyComponent,\n PasswordGeneratorPolicyComponent,\n PersonalOwnershipPolicyComponent,\n RequireSsoPolicyComponent,\n ResetPasswordPolicyComponent,\n SendOptionsPolicyComponent,\n SingleOrgPolicyComponent,\n TwoFactorAuthenticationPolicyComponent,\n PoliciesComponent,\n PolicyEditComponent,\n ],\n})\nexport class PoliciesModule {}\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"@bitwarden/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","\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 { UntypedFormBuilder } from \"@angular/forms\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class MasterPasswordPolicy extends BasePolicy {\n name = \"masterPassPolicyTitle\";\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: UntypedFormBuilder,\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
\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\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PolicyType } from \"@bitwarden/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: UntypedFormBuilder, 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","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"@bitwarden/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 \"@bitwarden/common/abstractions/i18n.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { PolicyRequest } from \"@bitwarden/common/models/request/policy.request\";\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","\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 { UntypedFormBuilder } from \"@angular/forms\";\n\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Organization } from \"@bitwarden/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(\n private formBuilder: UntypedFormBuilder,\n private organizationService: OrganizationService\n ) {\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","import { Component } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\n\nimport { PolicyType } from \"@bitwarden/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: UntypedFormBuilder) {\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 \"@bitwarden/common/abstractions/i18n.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { PolicyRequest } from \"@bitwarden/common/models/request/policy.request\";\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 \"@bitwarden/common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class TwoFactorAuthenticationPolicy extends BasePolicy {\n name = \"twoStepLoginPolicyTitle\";\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","
\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 {\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewContainerRef,\n} from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { PolicyRequest } from \"@bitwarden/common/models/request/policy.request\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policy.response\";\n\nimport { BasePolicy, BasePolicyComponent } from \"../policies\";\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 policyApiService: PolicyApiServiceAbstraction,\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.policyApiService.getPolicy(\n this.organizationId,\n this.policy.type\n );\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.policyApiService.putPolicy(\n this.organizationId,\n this.policy.type,\n request\n );\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

{{ \"policies\" | i18n }}

\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n \n \n \n \n \n
\n {{ p.name | i18n }}\n {{\n \"on\" | i18n\n }}\n {{ p.description | i18n }}\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 \"@bitwarden/angular/services/modal.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policy.response\";\n\nimport { PolicyListService } from \"../../core\";\nimport { BasePolicy } from \"../policies\";\n\nimport { PolicyEditComponent } from \"./policy-edit.component\";\n\n@Component({\n selector: \"app-org-policies\",\n templateUrl: \"policies.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 protected policiesEnabledMap: Map = new Map();\n\n constructor(\n private route: ActivatedRoute,\n private modalService: ModalService,\n private organizationService: OrganizationService,\n private policyApiService: PolicyApiServiceAbstraction,\n private policyListService: PolicyListService,\n private router: Router\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n this.organization = await this.organizationService.get(this.organizationId);\n this.policies = this.policyListService.getPolicies();\n\n await this.load();\n\n // Handle policies component launch from Event message\n /* eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe */\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.policyApiService.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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onSavedPolicy.subscribe(() => {\n modal.close();\n this.load();\n });\n }\n );\n }\n}\n","import { OrganizationKeysRequest } from \"./organization-keys.request\";\n\nexport class OrganizationUpdateRequest {\n name: string;\n /**\n * @deprecated 2022-08-03 Moved to OrganizationSsoRequest, left for backwards compatability.\n * https://bitwarden.atlassian.net/browse/EC-489\n */\n identifier: string;\n businessName: string;\n billingEmail: string;\n keys: OrganizationKeysRequest;\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, OnInit, Output } from \"@angular/core\";\n\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { Verification } from \"@bitwarden/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 i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private userVerificationService: UserVerificationService,\n private logService: LogService,\n private cipherService: CipherService,\n private organizationService: OrganizationService,\n private organizationApiService: OrganizationApiServiceAbstraction\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.organizationApiService.delete(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

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

{{ \"apiKey\" | i18n }}

\n
\n

\n {{ \"apiKeyDesc\" | i18n }}\n \n {{ \"learnMore\" | 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, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { OrganizationKeysRequest } from \"@bitwarden/common/models/request/organization-keys.request\";\nimport { OrganizationUpdateRequest } from \"@bitwarden/common/models/request/organization-update.request\";\nimport { OrganizationResponse } from \"@bitwarden/common/models/response/organization.response\";\n\nimport { ApiKeyComponent } from \"../../settings/api-key.component\";\nimport { PurgeVaultComponent } from \"../../settings/purge-vault.component\";\n\nimport { DeleteOrganizationComponent } from \"./delete-organization.component\";\n\n@Component({\n selector: \"app-org-account\",\n templateUrl: \"account.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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\n selfHosted = false;\n canManageBilling = true;\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 i18nService: I18nService,\n private route: ActivatedRoute,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private logService: LogService,\n private router: Router,\n private organizationService: OrganizationService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n this.canManageBilling = this.organizationService.get(this.organizationId).canManageBilling;\n try {\n this.org = await this.organizationApiService.get(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.organizationApiService.save(this.organizationId, request);\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 deleteOrganization() {\n await this.modalService.openViewRef(\n DeleteOrganizationComponent,\n this.deleteModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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.organizationApiService.getOrCreateApiKey.bind(\n this.organizationApiService\n );\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.organizationApiService.rotateApiKey.bind(this.organizationApiService);\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

{{ \"twoStepLogin\" | i18n }}

\n

{{ \"twoStepLoginEnforcement\" | i18n }}

\n
\n

{{ \"twoStepLoginDesc\" | i18n }}

\n\n

\n {{ \"twoStepLoginOrganizationDescStart\" | i18n }}\n {{ \"twoStepLoginPolicy\" | i18n }}.\n
\n {{ \"twoStepLoginOrganizationDuoDesc\" | i18n }}\n

\n

{{ \"twoStepLoginOrganizationSsoDesc\" | i18n }}

\n
\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 } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TwoFactorProviderType } from \"@bitwarden/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})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { canAccessSettingsTab } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\nimport { OrganizationPermissionsGuard } from \"../guards/org-permissions.guard\";\nimport { OrganizationRedirectGuard } from \"../guards/org-redirect.guard\";\nimport { PoliciesComponent } from \"../policies\";\n\nimport { AccountComponent } from \"./account.component\";\nimport { SettingsComponent } from \"./settings.component\";\nimport { TwoFactorSetupComponent } from \"./two-factor-setup.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: SettingsComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: { organizationPermissions: canAccessSettingsTab },\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n canActivate: [OrganizationRedirectGuard],\n data: {\n autoRedirectCallback: getSettingsRoute,\n },\n children: [], // This is required to make the auto redirect work,\n },\n { path: \"account\", component: AccountComponent, data: { titleId: \"organizationInfo\" } },\n {\n path: \"two-factor\",\n component: TwoFactorSetupComponent,\n data: { titleId: \"twoStepLogin\" },\n },\n {\n path: \"policies\",\n component: PoliciesComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: (org: Organization) => org.canManagePolicies,\n titleId: \"policies\",\n },\n },\n {\n path: \"tools\",\n loadChildren: () =>\n import(\"../tools/import-export/org-import-export.module\").then(\n (m) => m.OrganizationImportExportModule\n ),\n },\n ],\n },\n];\n\nfunction getSettingsRoute(organization: Organization) {\n if (organization.isOwner) {\n return \"account\";\n }\n if (organization.canManagePolicies) {\n return \"policies\";\n }\n if (organization.canAccessImportExport) {\n return [\"tools\", \"import\"];\n }\n if (organization.canManageSso) {\n return \"sso\";\n }\n if (organization.canManageScim) {\n return \"scim\";\n }\n return undefined;\n}\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class OrganizationSettingsRoutingModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { LooseComponentsModule, SharedModule } from \"../../shared\";\nimport { PoliciesModule } from \"../policies\";\n\nimport { AccountComponent } from \"./account.component\";\nimport { DeleteOrganizationComponent } from \"./delete-organization.component\";\nimport { OrganizationSettingsRoutingModule } from \"./organization-settings-routing.module\";\nimport { SettingsComponent } from \"./settings.component\";\nimport { TwoFactorSetupComponent } from \"./two-factor-setup.component\";\n\n@NgModule({\n imports: [SharedModule, LooseComponentsModule, PoliciesModule, OrganizationSettingsRoutingModule],\n declarations: [\n SettingsComponent,\n AccountComponent,\n DeleteOrganizationComponent,\n TwoFactorSetupComponent,\n ],\n})\nexport class OrganizationSettingsModule {}\n","
\n
\n
\n
\n
{{ \"settings\" | i18n }}
\n
\n \n {{ \"organizationInfo\" | i18n }}\n \n \n {{ \"policies\" | i18n }}\n \n \n {{ \"twoStepLogin\" | i18n }}\n \n \n {{ \"importData\" | i18n }}\n \n \n {{ \"exportVault\" | i18n }}\n \n \n {{ \"singleSignOn\" | i18n }}\n \n \n {{ \"scim\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n
\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { Subject, switchMap, takeUntil } from \"rxjs\";\n\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-org-settings\",\n templateUrl: \"settings.component.html\",\n})\nexport class SettingsComponent implements OnInit, OnDestroy {\n organization: Organization;\n\n private destroy$ = new Subject();\n\n constructor(private route: ActivatedRoute, private organizationService: OrganizationService) {}\n\n ngOnInit() {\n this.route.params\n .pipe(\n switchMap(async (params) => await this.organizationService.get(params.organizationId)),\n takeUntil(this.destroy$)\n )\n .subscribe((organization) => {\n this.organization = organization;\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\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
\n
\n \n \n
\n
\n \n \n 15\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 {{ 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 {{ \"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
\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 {{ \"dateCreated\" | i18n }}:\n {{ cipher.creationDate | 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 \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 \"@bitwarden/common/abstractions/api.service\";\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { CipherData } from \"@bitwarden/common/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { CipherCreateRequest } from \"@bitwarden/common/models/request/cipher-create.request\";\nimport { CipherRequest } from \"@bitwarden/common/models/request/cipher.request\";\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 originalCipher: Cipher = null;\n protected override componentName = \"app-org-vault-add-edit\";\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 eventCollectionService: EventCollectionService,\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 eventCollectionService,\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\n data.edit = true;\n const cipher = new Cipher(data);\n this.originalCipher = cipher;\n return cipher;\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","export class EmergencyAccessAcceptRequest {\n token: string;\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, Params, Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { EmergencyAccessAcceptRequest } from \"@bitwarden/common/models/request/emergency-access-accept.request\";\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: Params): 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: Params): 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","export class OrganizationUserAcceptRequest {\n token: string;\n // Used to auto-enroll in master password reset\n resetPasswordKey: string;\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 { ActivatedRoute, Params, Router } from \"@angular/router\";\n\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserAcceptRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\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 stateService: StateService,\n private cryptoService: CryptoService,\n private policyApiService: PolicyApiServiceAbstraction,\n private policyService: PolicyService,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction,\n private organizationUserService: OrganizationUserService,\n private messagingService: MessagingService\n ) {\n super(router, platformUtilsService, i18nService, route, stateService);\n }\n\n async authedHandler(qParams: Params): Promise {\n const needsReAuth = (await this.stateService.getOrganizationInvitation()) != null;\n if (!needsReAuth) {\n // Accepting an org invite requires authentication from a logged out state\n this.messagingService.send(\"logout\", { redirect: false });\n await this.prepareOrganizationInvitation(qParams);\n return;\n }\n\n // User has already logged in and passed the Master Password policy check\n this.actionPromise = this.prepareAcceptRequest(qParams).then(async (request) => {\n await this.organizationUserService.postOrganizationUserAccept(\n qParams.organizationId,\n qParams.organizationUserId,\n request\n );\n });\n\n await this.stateService.setOrganizationInvitation(null);\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 this.router.navigate([\"/vault\"]);\n }\n\n async unauthedHandler(qParams: Params): Promise {\n await this.prepareOrganizationInvitation(qParams);\n }\n\n private async prepareAcceptRequest(qParams: Params): Promise {\n const request = new OrganizationUserAcceptRequest();\n request.token = qParams.token;\n\n if (await this.performResetPasswordAutoEnroll(qParams)) {\n const response = await this.organizationApiService.getKeys(qParams.organizationId);\n\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 // Add reset password key to accept request\n request.resetPasswordKey = encryptedKey.encryptedString;\n }\n return request;\n }\n\n private async performResetPasswordAutoEnroll(qParams: Params): Promise {\n let policyList: Policy[] = null;\n try {\n const policies = await this.policyApiService.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 private async prepareOrganizationInvitation(qParams: Params): 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","export class PasswordHintRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PasswordHintRequest } from \"@bitwarden/common/models/request/password-hint.request\";\n\n@Directive()\nexport class HintComponent implements OnInit {\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 private loginService: LoginService\n ) {}\n\n ngOnInit(): void {\n this.email = this.loginService.getEmail() ?? \"\";\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 } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { HintComponent as BaseHintComponent } from \"@bitwarden/angular/components/hint.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { PlatformUtilsService } from \"@bitwarden/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 loginService: LoginService\n ) {\n super(router, i18nService, apiService, platformUtilsService, logService, loginService);\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 { Directive, NgZone, OnDestroy, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { Subject } from \"rxjs\";\nimport { concatMap, take, takeUntil } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { HashPurpose } from \"@bitwarden/common/enums/hashPurpose\";\nimport { KeySuffixOptions } from \"@bitwarden/common/enums/keySuffixOptions\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/models/request/secret-verification.request\";\n\n@Directive()\nexport class LockComponent implements OnInit, OnDestroy {\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 private destroy$ = new Subject();\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 vaultTimeoutSettingsService: VaultTimeoutSettingsService,\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 this.stateService.activeAccount$\n .pipe(\n concatMap(async () => {\n await this.load();\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async submit() {\n if (this.pinLock) {\n return await this.handlePinRequiredUnlock();\n }\n\n await this.handleMasterPasswordRequiredUnlock();\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 handlePinRequiredUnlock() {\n if (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\n return await this.doUnlockWithPin();\n }\n\n private async doUnlockWithPin() {\n let failed = true;\n try {\n const kdf = await this.stateService.getKdfType();\n const kdfIterations = await this.stateService.getKdfIterations();\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(new EncString(protectedPin), encKey);\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 }\n\n private async handleMasterPasswordRequiredUnlock() {\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordRequired\")\n );\n return;\n }\n await this.doUnlockWithMasterPassword();\n }\n\n private async doUnlockWithMasterPassword() {\n const kdf = await this.stateService.getKdfType();\n const kdfIterations = await this.stateService.getKdfIterations();\n\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 this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidMasterPassword\")\n );\n return;\n }\n\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(new EncString(protectedPin), encKey);\n const pinKey = await this.cryptoService.makePinKey(decPin, this.email, kdf, kdfIterations);\n await this.stateService.setDecryptedPinProtected(\n await this.cryptoService.encrypt(key.key, pinKey)\n );\n }\n await this.setKeyAndContinue(key);\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.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.vaultTimeoutSettingsService.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.vaultTimeoutSettingsService.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 { Component, NgZone } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { LockComponent as BaseLockComponent } from \"@bitwarden/angular/components/lock.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service\";\n\nimport { RouterService } from \"../core\";\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 vaultTimeoutSettingsService: VaultTimeoutSettingsService,\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 vaultTimeoutSettingsService,\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 !== \"/\" && previousUrl.indexOf(\"lock\") === -1) {\n this.successRoute = previousUrl;\n }\n this.router.navigateByUrl(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 { 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","export enum AuthRequestType {\n AuthenticateAndUnlock = 0,\n Unlock = 1,\n}\n","import { Directive, Input } from \"@angular/core\";\n\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CaptchaIFrame } from \"@bitwarden/common/misc/captcha_iframe\";\nimport { Utils } from \"@bitwarden/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 { AuthenticationType } from \"../../enums/authenticationType\";\nimport { TokenTwoFactorRequest } from \"../request/identity-token/token-two-factor.request\";\n\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\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?: TokenTwoFactorRequest\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?: TokenTwoFactorRequest\n ) {}\n}\n\nexport class UserApiLogInCredentials {\n readonly type = AuthenticationType.UserApi;\n\n constructor(public clientId: string, public clientSecret: string) {}\n}\n\nexport class PasswordlessLogInCredentials {\n readonly type = AuthenticationType.Passwordless;\n\n constructor(\n public email: string,\n public accessCode: string,\n public authRequestId: string,\n public decKey: SymmetricCryptoKey,\n public localPasswordHash: string,\n public twoFactor?: TokenTwoFactorRequest\n ) {}\n}\n","import { AuthRequestType } from \"../../enums/authRequestType\";\n\nexport class PasswordlessCreateAuthRequest {\n constructor(\n readonly email: string,\n readonly deviceIdentifier: string,\n readonly publicKey: string,\n readonly type: AuthRequestType,\n readonly accessCode: string,\n readonly fingerprintPhrase: string\n ) {}\n}\n","\n
\n \n

\n {{ \"loginOrCreateNewAccount\" | i18n }}\n

\n\n \n

{{ \"logInInitiated\" | i18n }}

\n\n
\n

{{ \"notificationSentDevice\" | i18n }}

\n\n

\n {{ \"fingerprintMatchInfo\" | i18n }}\n

\n
\n\n
\n

{{ \"fingerprintPhraseHeader\" | i18n }}

\n

\n {{ passwordlessRequest?.fingerprintPhrase }}\n

\n
\n\n \n\n
\n\n
\n {{ \"loginWithDeviceEnabledInfo\" | i18n }}\n {{ \"viewAllLoginOptions\" | i18n }}\n
\n
\n \n\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { CaptchaProtectedComponent } from \"@bitwarden/angular/components/captchaProtected.component\";\nimport { AnonymousHubService } from \"@bitwarden/common/abstractions/anonymousHub.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AppIdService } from \"@bitwarden/common/abstractions/appId.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { AuthRequestType } from \"@bitwarden/common/enums/authRequestType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { PasswordlessLogInCredentials } from \"@bitwarden/common/models/domain/log-in-credentials\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { PasswordlessCreateAuthRequest } from \"@bitwarden/common/models/request/passwordless-create-auth.request\";\nimport { AuthRequestResponse } from \"@bitwarden/common/models/response/auth-request.response\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\n\nimport { StateService } from \"../../core/state/state.service\";\n\n@Component({\n selector: \"app-login-with-device\",\n templateUrl: \"login-with-device.component.html\",\n})\nexport class LoginWithDeviceComponent\n extends CaptchaProtectedComponent\n implements OnInit, OnDestroy\n{\n private destroy$ = new Subject();\n email: string;\n showResendNotification = false;\n passwordlessRequest: PasswordlessCreateAuthRequest;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginForceResetNavigate: () => Promise;\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"vault\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n private authRequestKeyPair: [publicKey: ArrayBuffer, privateKey: ArrayBuffer];\n\n constructor(\n private router: Router,\n private cryptoService: CryptoService,\n private cryptoFunctionService: CryptoFunctionService,\n private appIdService: AppIdService,\n private passwordGenerationService: PasswordGenerationService,\n private apiService: ApiService,\n private authService: AuthService,\n private logService: LogService,\n environmentService: EnvironmentService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n private anonymousHubService: AnonymousHubService,\n private validationService: ValidationService,\n private stateService: StateService,\n private loginService: LoginService\n ) {\n super(environmentService, i18nService, platformUtilsService);\n\n const navigation = this.router.getCurrentNavigation();\n if (navigation) {\n this.email = this.loginService.getEmail();\n }\n\n //gets signalR push notification\n this.authService\n .getPushNotifcationObs$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((id) => {\n this.confirmResponse(id);\n });\n }\n\n async ngOnInit() {\n if (!this.email) {\n this.router.navigate([\"/login\"]);\n return;\n }\n\n this.startPasswordlessLogin();\n }\n\n async startPasswordlessLogin() {\n this.showResendNotification = false;\n\n try {\n await this.buildAuthRequest();\n const reqResponse = await this.apiService.postAuthRequest(this.passwordlessRequest);\n\n if (reqResponse.id) {\n this.anonymousHubService.createHubConnection(reqResponse.id);\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n setTimeout(() => {\n this.showResendNotification = true;\n }, 12000);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.anonymousHubService.stopHubConnection();\n }\n\n private async confirmResponse(requestId: string) {\n try {\n const response = await this.apiService.getAuthResponse(\n requestId,\n this.passwordlessRequest.accessCode\n );\n\n if (!response.requestApproved) {\n return;\n }\n\n const credentials = await this.buildLoginCredntials(requestId, response);\n const loginResponse = await this.authService.logIn(credentials);\n\n if (loginResponse.requiresTwoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute]);\n }\n } else if (loginResponse.forcePasswordReset) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n await this.loginService.saveEmailSettings();\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 (error) {\n if (error instanceof ErrorResponse) {\n this.router.navigate([\"/login\"]);\n this.validationService.showError(error);\n return;\n }\n\n this.logService.error(error);\n }\n }\n\n private async buildAuthRequest() {\n this.authRequestKeyPair = await this.cryptoFunctionService.rsaGenerateKeyPair(2048);\n const fingerprint = await (\n await this.cryptoService.getFingerprint(this.email, this.authRequestKeyPair[0])\n ).join(\"-\");\n const deviceIdentifier = await this.appIdService.getAppId();\n const publicKey = Utils.fromBufferToB64(this.authRequestKeyPair[0]);\n const accessCode = await this.passwordGenerationService.generatePassword({ length: 25 });\n\n this.passwordlessRequest = new PasswordlessCreateAuthRequest(\n this.email,\n deviceIdentifier,\n publicKey,\n AuthRequestType.AuthenticateAndUnlock,\n accessCode,\n fingerprint\n );\n }\n\n private async buildLoginCredntials(\n requestId: string,\n response: AuthRequestResponse\n ): Promise {\n const decKey = await this.cryptoService.rsaDecrypt(response.key, this.authRequestKeyPair[1]);\n const decMasterPasswordHash = await this.cryptoService.rsaDecrypt(\n response.masterPasswordHash,\n this.authRequestKeyPair[1]\n );\n const key = new SymmetricCryptoKey(decKey);\n const localHashedPassword = Utils.fromBufferToUtf8(decMasterPasswordHash);\n\n return new PasswordlessLogInCredentials(\n this.email,\n this.passwordlessRequest.accessCode,\n requestId,\n key,\n localHashedPassword\n );\n }\n}\n","import { Directive, NgZone, OnInit } from \"@angular/core\";\nimport { FormBuilder, Validators } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { take } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AppIdService } from \"@bitwarden/common/abstractions/appId.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport {\n AllValidationErrors,\n FormValidationErrorsService,\n} from \"@bitwarden/common/abstractions/formValidationErrors.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { AuthResult } from \"@bitwarden/common/models/domain/auth-result\";\nimport { PasswordLogInCredentials } from \"@bitwarden/common/models/domain/log-in-credentials\";\n\nimport { CaptchaProtectedComponent } from \"./captchaProtected.component\";\n\n@Directive()\nexport class LoginComponent extends CaptchaProtectedComponent implements OnInit {\n showPassword = false;\n formPromise: Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n onSuccessfulLoginForceResetNavigate: () => Promise;\n private selfHosted = false;\n showLoginWithDevice: boolean;\n validatedEmail = false;\n paramEmailSet = false;\n\n formGroup = this.formBuilder.group({\n email: [\"\", [Validators.required, Validators.email]],\n masterPassword: [\"\", [Validators.required, Validators.minLength(8)]],\n rememberEmail: [false],\n });\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"vault\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n\n get loggedEmail() {\n return this.formGroup.value.email;\n }\n\n constructor(\n protected apiService: ApiService,\n protected appIdService: AppIdService,\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 protected formBuilder: FormBuilder,\n protected formValidationErrorService: FormValidationErrorsService,\n protected route: ActivatedRoute,\n protected loginService: LoginService\n ) {\n super(environmentService, i18nService, platformUtilsService);\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n get selfHostedDomain() {\n return this.environmentService.hasBaseUrl() ? this.environmentService.getWebVaultUrl() : null;\n }\n\n async ngOnInit() {\n this.route?.queryParams.subscribe((params) => {\n if (params != null) {\n const queryParamsEmail = params[\"email\"];\n if (queryParamsEmail != null && queryParamsEmail.indexOf(\"@\") > -1) {\n this.formGroup.get(\"email\").setValue(queryParamsEmail);\n this.loginService.setEmail(queryParamsEmail);\n this.paramEmailSet = true;\n }\n }\n });\n let email = this.loginService.getEmail();\n\n if (email == null || email === \"\") {\n email = await this.stateService.getRememberedEmail();\n }\n\n if (!this.paramEmailSet) {\n this.formGroup.get(\"email\")?.setValue(email ?? \"\");\n }\n let rememberEmail = this.loginService.getRememberEmail();\n if (rememberEmail == null) {\n rememberEmail = (await this.stateService.getRememberedEmail()) != null;\n }\n this.formGroup.get(\"rememberEmail\")?.setValue(rememberEmail);\n }\n\n async submit(showToast = true) {\n const data = this.formGroup.value;\n\n await this.setupCaptcha();\n\n this.formGroup.markAllAsTouched();\n\n //web\n if (this.formGroup.invalid && !showToast) {\n return;\n }\n\n //desktop, browser; This should be removed once all clients use reactive forms\n if (this.formGroup.invalid && showToast) {\n const errorText = this.getErrorToastMessage();\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), errorText);\n return;\n }\n\n try {\n const credentials = new PasswordLogInCredentials(\n data.email,\n data.masterPassword,\n this.captchaToken,\n null\n );\n this.formPromise = this.authService.logIn(credentials);\n const response = await this.formPromise;\n this.setFormValues();\n await this.loginService.saveEmailSettings();\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 await this.saveEmailSettings();\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 async validateEmail() {\n this.formGroup.controls.email.markAsTouched();\n const emailInvalid = this.formGroup.get(\"email\").invalid;\n if (!emailInvalid) {\n this.toggleValidateEmail(true);\n await this.getLoginWithDevice(this.loggedEmail);\n }\n }\n\n toggleValidateEmail(value: boolean) {\n this.validatedEmail = value;\n this.formGroup.controls.masterPassword.reset();\n }\n\n setFormValues() {\n this.loginService.setEmail(this.formGroup.value.email);\n this.loginService.setRememberEmail(this.formGroup.value.rememberEmail);\n }\n\n async saveEmailSettings() {\n this.setFormValues();\n await this.loginService.saveEmailSettings();\n }\n\n private getErrorToastMessage() {\n const error: AllValidationErrors = this.formValidationErrorService\n .getFormValidationErrors(this.formGroup.controls)\n .shift();\n\n if (error) {\n switch (error.errorName) {\n case \"email\":\n return this.i18nService.t(\"invalidEmail\");\n default:\n return this.i18nService.t(this.errorTag(error));\n }\n }\n\n return;\n }\n\n private errorTag(error: AllValidationErrors): string {\n const name = error.errorName.charAt(0).toUpperCase() + error.errorName.slice(1);\n return `${error.controlName}${name}`;\n }\n\n private async getLoginWithDevice(email: string) {\n try {\n const deviceIdentifier = await this.appIdService.getAppId();\n const res = await this.apiService.getKnownDevice(email, deviceIdentifier);\n //ensure the application is not self-hosted\n this.showLoginWithDevice = res && !this.selfHosted;\n } catch (e) {\n this.showLoginWithDevice = false;\n }\n }\n}\n","\n \n
\n \n

\n {{ \"loginOrCreateNewAccount\" | i18n }}\n

\n \n \n
\n \n {{ \"emailAddress\" | i18n }}\n \n \n
\n\n
\n
\n \n
\n \n {{ \"rememberEmail\" | i18n }}\n \n
\n\n
\n \n {{ \"continue\" | i18n }} \n \n
\n\n
\n\n

\n {{ \"newAroundHere\" | i18n }}\n {{ \"createAccount\" | i18n }}\n

\n
\n
\n \n \n\n\n\n
\n \n {{ \"masterPass\" | i18n }}\n \n \n \n {{\n \"getMasterPasswordHint\" | i18n\n }}\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n {{ \"loginWithDevice\" | i18n }} \n \n
\n\n
\n \n \n {{ \"enterpriseSingleSignOn\" | i18n }}\n \n
\n\n
\n\n
\n

{{ \"loggingInAs\" | i18n }} {{ loggedEmail }}

\n {{ \"notYou\" | i18n }}\n
\n
\n","import { Component, NgZone, OnDestroy, OnInit } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nimport { LoginComponent as BaseLoginComponent } from \"@bitwarden/angular/components/login.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AppIdService } from \"@bitwarden/common/abstractions/appId.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { FormValidationErrorsService } from \"@bitwarden/common/abstractions/formValidationErrors.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { InternalPolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { PolicyData } from \"@bitwarden/common/models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policy.response\";\n\nimport { flagEnabled } from \"../../../utils/flags\";\nimport { RouterService, StateService } from \"../../core\";\n\n@Component({\n selector: \"app-login\",\n templateUrl: \"login.component.html\",\n})\nexport class LoginComponent extends BaseLoginComponent implements OnInit, OnDestroy {\n showResetPasswordAutoEnrollWarning = false;\n enforcedPasswordPolicyOptions: MasterPasswordPolicyOptions;\n policies: ListResponse;\n showPasswordless = false;\n\n private destroy$ = new Subject();\n\n constructor(\n apiService: ApiService,\n appIdService: AppIdService,\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n route: ActivatedRoute,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n passwordGenerationService: PasswordGenerationService,\n cryptoFunctionService: CryptoFunctionService,\n private policyApiService: PolicyApiServiceAbstraction,\n private policyService: InternalPolicyService,\n logService: LogService,\n ngZone: NgZone,\n protected stateService: StateService,\n private messagingService: MessagingService,\n private routerService: RouterService,\n formBuilder: FormBuilder,\n formValidationErrorService: FormValidationErrorsService,\n loginService: LoginService\n ) {\n super(\n apiService,\n appIdService,\n authService,\n router,\n platformUtilsService,\n i18nService,\n stateService,\n environmentService,\n passwordGenerationService,\n cryptoFunctionService,\n logService,\n ngZone,\n formBuilder,\n formValidationErrorService,\n route,\n loginService\n );\n this.onSuccessfulLogin = async () => {\n this.messagingService.send(\"setFullWidth\");\n };\n this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n this.showPasswordless = flagEnabled(\"showPasswordless\");\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.premium != null) {\n this.routerService.setPreviousUrl(\"/settings/premium\");\n } else if (qParams.org != null) {\n const route = this.router.createUrlTree([\"create-organization\"], {\n queryParams: { plan: qParams.org },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n\n // Are they coming from an email for sponsoring a families organization\n if (qParams.sponsorshipToken != null) {\n const route = this.router.createUrlTree([\"setup/families-for-enterprise\"], {\n queryParams: { token: qParams.sponsorshipToken },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n await super.ngOnInit();\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.policyApiService.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.policyService\n .masterPasswordPolicyOptions$(policyList)\n .pipe(takeUntil(this.destroy$))\n .subscribe((enforcedPasswordPolicyOptions) => {\n this.enforcedPasswordPolicyOptions = enforcedPasswordPolicyOptions;\n });\n }\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async goAfterLogIn() {\n const masterPassword = this.formGroup.value.masterPassword;\n\n // Check master password against policy\n if (this.enforcedPasswordPolicyOptions != null) {\n const strengthResult = this.passwordGenerationService.passwordStrength(\n 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 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 previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl) {\n this.router.navigateByUrl(previousUrl);\n } else {\n this.loginService.clearValues();\n this.router.navigate([this.successRoute]);\n }\n }\n\n goToHint() {\n this.setFormValues();\n this.router.navigateByUrl(\"/hint\");\n }\n\n async submit() {\n const rememberEmail = this.formGroup.value.rememberEmail;\n\n if (!rememberEmail) {\n await this.stateService.setRememberedEmail(null);\n }\n await super.submit(false);\n }\n\n async startPasswordlessLogin() {\n this.formGroup.get(\"masterPassword\")?.clearValidators();\n this.formGroup.get(\"masterPassword\")?.updateValueAndValidity();\n\n if (!this.formGroup.valid) {\n return;\n }\n\n this.setFormValues();\n this.router.navigate([\"/login-with-device\"]);\n }\n\n private getPasswordStrengthUserInput() {\n const email = this.formGroup.value.email;\n let userInput: string[] = [];\n const atPosition = email.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput.concat(\n email\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n );\n }\n return userInput;\n }\n}\n","export class DeleteRecoverRequest {\n email: string;\n}\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { DeleteRecoverRequest } from \"@bitwarden/common/models/request/delete-recover.request\";\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 { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class TwoFactorRecoveryRequest extends SecretVerificationRequest {\n recoveryCode: string;\n email: string;\n}\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { TwoFactorRecoveryRequest } from \"@bitwarden/common/models/request/two-factor-recovery.request\";\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 { Directive, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { Organization } from \"@bitwarden/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 syncService: SyncService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private keyConnectorService: KeyConnectorService,\n private organizationApiService: OrganizationApiServiceAbstraction\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.organizationApiService.leave(this.organization.id);\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","
\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\";\n\nimport { RemovePasswordComponent as BaseRemovePasswordComponent } from \"@bitwarden/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","import { SecretVerificationRequest } from \"../../../models/request/secret-verification.request\";\n\nexport class OrganizationUserResetPasswordEnrollmentRequest extends SecretVerificationRequest {\n resetPasswordKey: string;\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { KeysRequest } from \"./keys.request\";\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","import { Directive, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { KdfType } from \"@bitwarden/common/enums/kdfType\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\n\nimport { PasswordColorText } from \"../shared/components/password-strength/password-strength.component\";\n\n@Directive()\nexport class ChangePasswordComponent implements OnInit, OnDestroy {\n masterPassword: string;\n masterPasswordRetype: string;\n formPromise: Promise;\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n passwordStrengthResult: any;\n color: string;\n text: string;\n\n protected email: string;\n protected kdf: KdfType;\n protected kdfIterations: number;\n\n protected destroy$ = new Subject();\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.policyService\n .masterPasswordPolicyOptions$()\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (enforcedPasswordPolicyOptions) =>\n (this.enforcedPolicyOptions ??= enforcedPasswordPolicyOptions)\n );\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\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(\"masterPasswordRequired\")\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(\"masterPasswordMinlength\")\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.passwordStrengthResult;\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 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 getStrengthResult(result: any) {\n this.passwordStrengthResult = result;\n }\n\n getPasswordScoreText(event: PasswordColorText) {\n this.color = event.color;\n this.text = event.text;\n }\n}\n","import { Directive } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { HashPurpose } from \"@bitwarden/common/enums/hashPurpose\";\nimport { DEFAULT_KDF_ITERATIONS, DEFAULT_KDF_TYPE } from \"@bitwarden/common/enums/kdfType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { KeysRequest } from \"@bitwarden/common/models/request/keys.request\";\nimport { SetPasswordRequest } from \"@bitwarden/common/models/request/set-password.request\";\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 private policyApiService: PolicyApiServiceAbstraction,\n policyService: PolicyService,\n protected router: Router,\n private apiService: ApiService,\n private syncService: SyncService,\n private route: ActivatedRoute,\n stateService: StateService,\n private organizationApiService: OrganizationApiServiceAbstraction,\n private organizationUserService: OrganizationUserService\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 // eslint-disable-next-line rxjs/no-async-subscribe\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.organizationApiService.getAutoEnrollStatus(this.identifier);\n this.orgId = response.id;\n this.resetPasswordAutoEnroll = response.resetPasswordEnabled;\n this.enforcedPolicyOptions =\n await this.policyApiService.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.organizationApiService.getKeys(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.masterPasswordHash = masterPasswordHash;\n resetRequest.resetPasswordKey = encryptedKey.encryptedString;\n\n return this.organizationUserService.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","
\n \n \n {{ text }}\n \n
\n\n","import { Component, EventEmitter, Input, OnChanges, Output } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\n\nexport interface PasswordColorText {\n color: string;\n text: string;\n}\n\n@Component({\n selector: \"app-password-strength\",\n templateUrl: \"password-strength.component.html\",\n})\nexport class PasswordStrengthComponent implements OnChanges {\n @Input() showText = false;\n @Input() email: string;\n @Input() name: string;\n @Input() set password(value: string) {\n this.updatePasswordStrength(value);\n }\n @Output() passwordStrengthResult = new EventEmitter();\n @Output() passwordScoreColor = new EventEmitter();\n\n masterPasswordScore: number;\n scoreWidth = 0;\n color = \"bg-danger\";\n text: string;\n\n private masterPasswordStrengthTimeout: any;\n\n //used by desktop and browser to display strength text color\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 //used by desktop and browser to display strength text\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 constructor(\n private i18nService: I18nService,\n private passwordGenerationService: PasswordGenerationService\n ) {}\n\n ngOnChanges(): void {\n this.masterPasswordStrengthTimeout = setTimeout(() => {\n this.scoreWidth = this.masterPasswordScore == null ? 0 : (this.masterPasswordScore + 1) * 20;\n\n switch (this.masterPasswordScore) {\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.masterPasswordScore != null ? this.i18nService.t(\"weak\") : null;\n break;\n }\n\n this.setPasswordScoreText(this.color, this.text);\n }, 300);\n }\n\n updatePasswordStrength(password: string) {\n const masterPassword = password;\n\n if (this.masterPasswordStrengthTimeout != null) {\n clearTimeout(this.masterPasswordStrengthTimeout);\n }\n\n const strengthResult = this.passwordGenerationService.passwordStrength(\n masterPassword,\n this.getPasswordStrengthUserInput()\n );\n this.passwordStrengthResult.emit(strengthResult);\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n }\n\n getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const email = this.email;\n const name = this.name;\n const atPosition = email?.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput.concat(\n email\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n );\n }\n if (name != null && name !== \"\") {\n userInput = userInput.concat(name.trim().toLowerCase().split(\" \"));\n }\n return userInput;\n }\n\n setPasswordScoreText(color: string, text: string) {\n color = color.slice(3);\n this.passwordScoreColor.emit({ color: color, text: text });\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\";\n\nimport { SetPasswordComponent as BaseSetPasswordComponent } from \"@bitwarden/angular/components/set-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\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 policyApiService: PolicyApiServiceAbstraction,\n policyService: PolicyService,\n router: Router,\n syncService: SyncService,\n route: ActivatedRoute,\n stateService: StateService,\n organizationApiService: OrganizationApiServiceAbstraction,\n organizationUserService: OrganizationUserService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyApiService,\n policyService,\n router,\n apiService,\n syncService,\n route,\n stateService,\n organizationApiService,\n organizationUserService\n );\n }\n}\n","import { Directive } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { AuthResult } from \"@bitwarden/common/models/domain/auth-result\";\nimport { SsoLogInCredentials } from \"@bitwarden/common/models/domain/log-in-credentials\";\nimport { SsoPreValidateResponse } from \"@bitwarden/common/models/response/sso-pre-validate.response\";\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 // eslint-disable-next-line rxjs/no-async-subscribe\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 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;\n }\n\n this.initiateSsoFormPromise = this.apiService.preValidateSso(this.identifier);\n const response = await this.initiateSsoFormPromise;\n\n const authorizeUrl = await this.buildAuthorizeUrl(\n returnUri,\n includeUserIdentifier,\n response.token\n );\n this.platformUtilsService.launchUri(authorizeUrl, { sameWindow: true });\n }\n\n protected async buildAuthorizeUrl(\n returnUri?: string,\n includeUserIdentifier?: boolean,\n token?: string\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 \"&ssoToken=\" +\n encodeURIComponent(token);\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\n // TODO: Key Connector Service should pass this error message to the logout callback instead of displaying here\n if (e.message === \"Key Connector error\") {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"ssoKeyConnectorError\")\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","\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 { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { SsoComponent as BaseSsoComponent } from \"@bitwarden/angular/components/sso.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Component({\n selector: \"app-sso\",\n templateUrl: \"sso.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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","export class ReferenceEventRequest {\n id: string;\n layout: string;\n flow: string;\n}\n","\n \n \n \n\n","import { CdkStep } from \"@angular/cdk/stepper\";\nimport { Component, Input } from \"@angular/core\";\n\n@Component({\n selector: \"app-vertical-step\",\n templateUrl: \"vertical-step.component.html\",\n providers: [{ provide: CdkStep, useExisting: VerticalStep }],\n})\nexport class VerticalStep extends CdkStep {\n @Input() subLabel = \"\";\n @Input() applyBorder = true;\n}\n","
\n \n \n {{ stepNumber }}\n \n \n \n \n \n \n {{ step.label }}\n

\n

{{ step.subLabel }}

\n
\n \n\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { VerticalStep } from \"./vertical-step.component\";\n\n@Component({\n selector: \"app-vertical-step-content\",\n templateUrl: \"vertical-step-content.component.html\",\n})\nexport class VerticalStepContentComponent {\n @Output() onSelectStep = new EventEmitter();\n\n @Input() disabled = false;\n @Input() selected = false;\n @Input() step: VerticalStep;\n @Input() stepNumber: number;\n\n selectStep() {\n this.onSelectStep.emit();\n }\n}\n","
\n
    \n
  • \n \n
\n \n \n \n\n","import { CdkStepper } from \"@angular/cdk/stepper\";\nimport { Component, Input, QueryList } from \"@angular/core\";\n\nimport { VerticalStep } from \"./vertical-step.component\";\n\n@Component({\n selector: \"app-vertical-stepper\",\n templateUrl: \"vertical-stepper.component.html\",\n providers: [{ provide: CdkStepper, useExisting: VerticalStepperComponent }],\n})\nexport class VerticalStepperComponent extends CdkStepper {\n readonly steps: QueryList;\n\n @Input()\n activeClass = \"active\";\n\n isNextButtonHidden() {\n return !(this.steps.length === this.selectedIndex + 1);\n }\n\n isStepDisabled(index: number) {\n if (this.selectedIndex !== index) {\n return this.selectedIndex === index - 1\n ? !this.steps.find((_, i) => i == index - 1)?.completed\n : true;\n }\n return false;\n }\n\n selectStepByIndex(index: number): void {\n this.selectedIndex = index;\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { CaptchaProtectedRequest } from \"./captcha-protected.request\";\nimport { KeysRequest } from \"./keys.request\";\nimport { ReferenceEventRequest } from \"./reference-event.request\";\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","import { AbstractControl, UntypedFormGroup, ValidatorFn } from \"@angular/forms\";\n\nimport { FormGroupControls } from \"@bitwarden/common/abstractions/formValidationErrors.service\";\n\nexport class InputsFieldMatch {\n //check to ensure two fields do not have the same value\n static validateInputsDoesntMatch(matchTo: string, errorMessage: string): ValidatorFn {\n return (control: AbstractControl) => {\n if (control.parent && control.parent.controls) {\n return control?.value === (control?.parent?.controls as FormGroupControls)[matchTo].value\n ? {\n inputsMatchError: {\n message: errorMessage,\n },\n }\n : null;\n }\n\n return null;\n };\n }\n\n //check to ensure two fields have the same value\n static validateInputsMatch(matchTo: string, errorMessage: string): ValidatorFn {\n return (control: AbstractControl) => {\n if (control.parent && control.parent.controls) {\n return control?.value === (control?.parent?.controls as FormGroupControls)[matchTo].value\n ? null\n : {\n inputsDoesntMatchError: {\n message: errorMessage,\n },\n };\n }\n\n return null;\n };\n }\n\n //checks the formGroup if two fields have the same value and validation is controlled from either field\n static validateFormInputsMatch(field: string, fieldMatchTo: string, errorMessage: string) {\n return (formGroup: UntypedFormGroup) => {\n const fieldCtrl = formGroup.controls[field];\n const fieldMatchToCtrl = formGroup.controls[fieldMatchTo];\n\n if (fieldCtrl.value !== fieldMatchToCtrl.value) {\n fieldMatchToCtrl.setErrors({\n inputsDoesntMatchError: {\n message: errorMessage,\n },\n });\n } else {\n fieldMatchToCtrl.setErrors(null);\n }\n };\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { AbstractControl, UntypedFormBuilder, ValidatorFn, Validators } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport {\n AllValidationErrors,\n FormValidationErrorsService,\n} from \"@bitwarden/common/abstractions/formValidationErrors.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { DEFAULT_KDF_ITERATIONS, DEFAULT_KDF_TYPE } from \"@bitwarden/common/enums/kdfType\";\nimport { PasswordLogInCredentials } from \"@bitwarden/common/models/domain/log-in-credentials\";\nimport { KeysRequest } from \"@bitwarden/common/models/request/keys.request\";\nimport { ReferenceEventRequest } from \"@bitwarden/common/models/request/reference-event.request\";\nimport { RegisterRequest } from \"@bitwarden/common/models/request/register.request\";\nimport { RegisterResponse } from \"@bitwarden/common/models/response/authentication/register.response\";\n\nimport { PasswordColorText } from \"../shared/components/password-strength/password-strength.component\";\nimport { InputsFieldMatch } from \"../validators/inputsFieldMatch.validator\";\n\nimport { CaptchaProtectedComponent } from \"./captchaProtected.component\";\n\n@Directive()\nexport class RegisterComponent extends CaptchaProtectedComponent implements OnInit {\n @Input() isInTrialFlow = false;\n @Output() createdAccount = new EventEmitter();\n\n showPassword = false;\n formPromise: Promise;\n referenceData: ReferenceEventRequest;\n showTerms = true;\n showErrorSummary = false;\n passwordStrengthResult: any;\n color: string;\n text: string;\n\n formGroup = this.formBuilder.group(\n {\n email: [\"\", [Validators.required, Validators.email]],\n name: [\"\"],\n masterPassword: [\"\", [Validators.required, Validators.minLength(8)]],\n confirmMasterPassword: [\"\", [Validators.required, Validators.minLength(8)]],\n hint: [\n null,\n [\n InputsFieldMatch.validateInputsDoesntMatch(\n \"masterPassword\",\n this.i18nService.t(\"hintEqualsPassword\")\n ),\n ],\n ],\n acceptPolicies: [false, [this.acceptPoliciesValidation()]],\n },\n {\n validator: InputsFieldMatch.validateFormInputsMatch(\n \"masterPassword\",\n \"confirmMasterPassword\",\n this.i18nService.t(\"masterPassDoesntMatch\")\n ),\n }\n );\n\n protected successRoute = \"login\";\n\n protected accountCreated = false;\n\n protected captchaBypassToken: string = null;\n\n constructor(\n protected formValidationErrorService: FormValidationErrorsService,\n protected formBuilder: UntypedFormBuilder,\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 async submit(showToast = true) {\n let email = this.formGroup.value.email;\n email = email.trim().toLowerCase();\n let name = this.formGroup.value.name;\n name = name === \"\" ? null : name; // Why do we do this?\n const masterPassword = this.formGroup.value.masterPassword;\n try {\n if (!this.accountCreated) {\n const registerResponse = await this.registerAccount(\n await this.buildRegisterRequest(email, masterPassword, name),\n showToast\n );\n if (!registerResponse.successful) {\n return;\n }\n this.captchaBypassToken = registerResponse.captchaBypassToken;\n this.accountCreated = true;\n }\n if (this.isInTrialFlow) {\n if (!this.accountCreated) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"trialAccountCreated\")\n );\n }\n const loginResponse = await this.logIn(email, masterPassword, this.captchaBypassToken);\n if (loginResponse.captchaRequired) {\n return;\n }\n this.createdAccount.emit(this.formGroup.value.email);\n } else {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"newAccountCreated\")\n );\n this.router.navigate([this.successRoute], { queryParams: { email: email } });\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n }\n\n getStrengthResult(result: any) {\n this.passwordStrengthResult = result;\n }\n\n getPasswordScoreText(event: PasswordColorText) {\n this.color = event.color;\n this.text = event.text;\n }\n\n private getErrorToastMessage() {\n const error: AllValidationErrors = this.formValidationErrorService\n .getFormValidationErrors(this.formGroup.controls)\n .shift();\n\n if (error) {\n switch (error.errorName) {\n case \"email\":\n return this.i18nService.t(\"invalidEmail\");\n case \"inputsDoesntMatchError\":\n return this.i18nService.t(\"masterPassDoesntMatch\");\n case \"inputsMatchError\":\n return this.i18nService.t(\"hintEqualsPassword\");\n default:\n return this.i18nService.t(this.errorTag(error));\n }\n }\n\n return;\n }\n\n private errorTag(error: AllValidationErrors): string {\n const name = error.errorName.charAt(0).toUpperCase() + error.errorName.slice(1);\n return `${error.controlName}${name}`;\n }\n\n //validation would be ignored on selfhosted\n private acceptPoliciesValidation(): ValidatorFn {\n return (control: AbstractControl) => {\n const ctrlValue = control.value;\n\n return !ctrlValue && this.showTerms ? { required: true } : null;\n };\n }\n\n private async validateRegistration(showToast: boolean): Promise<{ isValid: boolean }> {\n this.formGroup.markAllAsTouched();\n this.showErrorSummary = true;\n\n if (this.formGroup.get(\"acceptPolicies\").hasError(\"required\")) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"acceptPoliciesRequired\")\n );\n return { isValid: false };\n }\n\n //web\n if (this.formGroup.invalid && !showToast) {\n return { isValid: false };\n }\n\n //desktop, browser\n if (this.formGroup.invalid && showToast) {\n const errorText = this.getErrorToastMessage();\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), errorText);\n return { isValid: false };\n }\n\n if (this.passwordStrengthResult != null && this.passwordStrengthResult.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 { isValid: false };\n }\n }\n return { isValid: true };\n }\n\n private async buildRegisterRequest(\n email: string,\n masterPassword: string,\n name: string\n ): Promise {\n const hint = this.formGroup.value.hint;\n const kdf = DEFAULT_KDF_TYPE;\n const kdfIterations = DEFAULT_KDF_ITERATIONS;\n const key = await this.cryptoService.makeKey(masterPassword, email, kdf, kdfIterations);\n const encKey = await this.cryptoService.makeEncKey(key);\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, key);\n const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n const request = new RegisterRequest(\n email,\n name,\n hashedPassword,\n 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 return request;\n }\n\n private async registerAccount(\n request: RegisterRequest,\n showToast: boolean\n ): Promise<{ successful: boolean; captchaBypassToken?: string }> {\n if (!(await this.validateRegistration(showToast)).isValid) {\n return { successful: false };\n }\n this.formPromise = this.apiService.postRegister(request);\n try {\n const response = await this.formPromise;\n return { successful: true, captchaBypassToken: response.captchaBypassToken };\n } catch (e) {\n if (this.handleCaptchaRequired(e)) {\n return { successful: false };\n } else {\n throw e;\n }\n }\n }\n\n private async logIn(\n email: string,\n masterPassword: string,\n captchaBypassToken: string\n ): Promise<{ captchaRequired: boolean }> {\n const credentials = new PasswordLogInCredentials(\n email,\n masterPassword,\n captchaBypassToken,\n null\n );\n const loginResponse = await this.authService.logIn(credentials);\n if (this.handleCaptchaRequired(loginResponse)) {\n return { captchaRequired: true };\n }\n return { captchaRequired: false };\n }\n}\n","\n
\n
\n \n {{ \"emailAddress\" | i18n }}\n \n {{ \"emailAddressDesc\" | i18n }}\n \n
\n\n
\n \n {{ \"name\" | i18n }}\n \n {{ \"yourNameDesc\" | i18n }}\n \n
\n\n
\n \n \n \n {{ \"masterPass\" | i18n }}\n \n \n \n Important:\n {{ \"masterPassImportant\" | i18n }}\n \n \n \n \n
\n\n
\n \n {{ \"reTypeMasterPass\" | i18n }}\n \n \n \n
\n\n
\n \n {{ \"masterPassHint\" | i18n }}\n \n {{ \"masterPassHintDesc\" | i18n }}\n \n
\n\n
\n \n
\n\n
\n
\n \n
\n \n {{ \"acceptPolicies\" | i18n }}
\n {{\n \"termsOfService\" | i18n\n }},\n {{\n \"privacyPolicy\" | i18n\n }}\n
\n
\n\n
\n \n \n \n \n {{ \"logIn\" | i18n }}\n \n \n \n \n \n
\n \n
\n\n","import { Component, Input } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\n\nimport { RegisterComponent as BaseRegisterComponent } from \"@bitwarden/angular/components/register.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { FormValidationErrorsService } from \"@bitwarden/common/abstractions/formValidationErrors.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { ReferenceEventRequest } from \"@bitwarden/common/models/request/reference-event.request\";\n\n@Component({\n selector: \"app-register-form\",\n templateUrl: \"./register-form.component.html\",\n})\nexport class RegisterFormComponent extends BaseRegisterComponent {\n @Input() queryParamEmail: string;\n @Input() enforcedPolicyOptions: MasterPasswordPolicyOptions;\n @Input() referenceDataValue: ReferenceEventRequest;\n\n showErrorSummary = false;\n\n constructor(\n formValidationErrorService: FormValidationErrorsService,\n formBuilder: UntypedFormBuilder,\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n cryptoService: CryptoService,\n apiService: ApiService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n private policyService: PolicyService,\n environmentService: EnvironmentService,\n logService: LogService\n ) {\n super(\n formValidationErrorService,\n formBuilder,\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 await super.ngOnInit();\n this.referenceData = this.referenceDataValue;\n\n if (this.queryParamEmail) {\n this.formGroup.get(\"email\")?.setValue(this.queryParamEmail);\n }\n }\n\n async submit() {\n if (\n this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n this.passwordStrengthResult.score,\n this.formGroup.value.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(false);\n }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-logo-forbes\",\n templateUrl: \"logo-forbes.component.html\",\n})\nexport class LogoForbesComponent {}\n","
\n
\n \n \n \n
\n
\n “Bitwarden boasts the backing of some of the world's best security experts and an attractive,\n easy-to-use interface”\n
\n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-logo-us-news\",\n templateUrl: \"logo-us-news.component.html\",\n})\nexport class LogoUSNewsComponent {}\n","\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-enterprise-content\",\n templateUrl: \"enterprise-content.component.html\",\n})\nexport class EnterpriseContentComponent {}\n","

The Bitwarden Password Manager

\n
\n

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

\n
\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","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-teams-content\",\n templateUrl: \"teams-content.component.html\",\n})\nexport class TeamsContentComponent {}\n","

The Bitwarden Password Manager

\n
\n

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

\n
\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","import { Component, Input } from \"@angular/core\";\n\n@Component({\n selector: \"app-trial-confirmation-details\",\n templateUrl: \"confirmation-details.component.html\",\n})\nexport class ConfirmationDetailsComponent {\n @Input() email: string;\n @Input() orgLabel: string;\n}\n","
\n

{{ \"trialThankYou\" | i18n: orgLabel }}

\n
    \n
  • \n

    \n {{ \"trialConfirmationEmail\" | i18n }}\n {{ email }}.\n

    \n
  • \n
  • \n

    \n {{ \"trialPaidInfoMessage\" | i18n: orgLabel }}\n

    \n
  • \n
\n
\n","
\n
\n
\n

{{ \"billingPlanLabel\" | i18n }}

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

{{ \"paymentType\" | i18n }}

\n \n \n
\n\n
\n \n\n \n
\n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { UntypedFormBuilder, FormGroup } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\n\nimport { OrganizationPlansComponent } from \"../../settings/organization-plans.component\";\n\n@Component({\n selector: \"app-billing\",\n templateUrl: \"./billing.component.html\",\n})\nexport class BillingComponent extends OrganizationPlansComponent {\n @Input() orgInfoForm: FormGroup;\n @Output() previousStep = new EventEmitter();\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n cryptoService: CryptoService,\n router: Router,\n syncService: SyncService,\n policyService: PolicyService,\n organizationService: OrganizationService,\n logService: LogService,\n messagingService: MessagingService,\n formBuilder: UntypedFormBuilder,\n organizationApiService: OrganizationApiServiceAbstraction\n ) {\n super(\n apiService,\n i18nService,\n platformUtilsService,\n cryptoService,\n router,\n syncService,\n policyService,\n organizationService,\n logService,\n messagingService,\n formBuilder,\n organizationApiService\n );\n }\n\n async ngOnInit() {\n const additionalSeats = this.product == ProductType.Families ? 0 : 1;\n this.formGroup.patchValue({\n name: this.orgInfoForm.value.name,\n billingEmail: this.orgInfoForm.value.email,\n additionalSeats: additionalSeats,\n plan: this.plan,\n product: this.product,\n });\n this.isInTrialFlow = true;\n await super.ngOnInit();\n }\n\n stepBack() {\n this.previousStep.emit();\n }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-default-content\",\n templateUrl: \"default-content.component.html\",\n})\nexport class DefaultContentComponent {}\n","

The Bitwarden Password Manager

\n
\n

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

\n
\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","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-enterprise1-content\",\n templateUrl: \"enterprise1-content.component.html\",\n})\nexport class Enterprise1ContentComponent {}\n","

The Bitwarden Password Manager

\n
\n

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

\n
\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","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-enterprise2-content\",\n templateUrl: \"enterprise2-content.component.html\",\n})\nexport class Enterprise2ContentComponent {}\n","

Start Your Enterprise Free Trial Now

\n
\n

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

\n
\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","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-teams1-content\",\n templateUrl: \"teams1-content.component.html\",\n})\nexport class Teams1ContentComponent {}\n","

Start Your Teams Free Trial Now

\n
\n

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

\n
\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","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-teams2-content\",\n templateUrl: \"teams2-content.component.html\",\n})\nexport class Teams2ContentComponent {}\n","

Start Your Free Trial Now

\n
\n

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

\n
\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","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-logo-cnet\",\n templateUrl: \"logo-cnet.component.html\",\n})\nexport class LogoCnetComponent {}\n","
\n
\n \n \n \n
\n
\n \"No more excuses; start using Bitwarden today. The identity you save could be your own. The\n money definitely will be.\"\n
\n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-cnet-enterprise-content\",\n templateUrl: \"cnet-enterprise-content.component.html\",\n})\nexport class CnetEnterpriseContentComponent {}\n","

Start Your Enterprise Free Trial Now

\n
\n

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

\n
\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","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-cnet-individual-content\",\n templateUrl: \"cnet-individual-content.component.html\",\n})\nexport class CnetIndividualContentComponent {}\n","

Start Your Premium Account Now

\n
\n

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

\n
\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","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-cnet-teams-content\",\n templateUrl: \"cnet-teams-content.component.html\",\n})\nexport class CnetTeamsContentComponent {}\n","

Start Your Teams Free Trial Now

\n
\n

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

\n
\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","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-abm-enterprise-content\",\n templateUrl: \"abm-enterprise-content.component.html\",\n})\nexport class AbmEnterpriseContentComponent {}\n","

The Bitwarden Password Manager

\n
\n

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

\n
\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","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-abm-teams-content\",\n templateUrl: \"abm-teams-content.component.html\",\n})\nexport class AbmTeamsContentComponent {}\n","

The Bitwarden Password Manager

\n
\n

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

\n
\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","
\n

{{ \"createAccount\" | 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 Start your 7-Day free trial of Bitwarden for {{ org }}\n

\n
\n \n \n \n \n \n \n \n Next\n \n \n \n \n \n \n \n
\n \n \n Invite Users\n \n
\n
\n
\n
\n
\n
\n
\n\n","import { StepperSelectionEvent } from \"@angular/cdk/stepper\";\nimport { TitleCasePipe } from \"@angular/common\";\nimport { Component, OnDestroy, OnInit, ViewChild } from \"@angular/core\";\nimport { UntypedFormBuilder, Validators } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first, Subject, takeUntil } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { PlanType } from \"@bitwarden/common/enums/planType\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\nimport { PolicyData } from \"@bitwarden/common/models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { ReferenceEventRequest } from \"@bitwarden/common/models/request/reference-event.request\";\n\nimport { RouterService } from \"./../../core/router.service\";\nimport { VerticalStepperComponent } from \"./vertical-stepper/vertical-stepper.component\";\n\nenum ValidOrgParams {\n families = \"families\",\n enterprise = \"enterprise\",\n teams = \"teams\",\n individual = \"individual\",\n premium = \"premium\",\n free = \"free\",\n}\n\nenum ValidLayoutParams {\n default = \"default\",\n teams = \"teams\",\n teams1 = \"teams1\",\n teams2 = \"teams2\",\n enterprise = \"enterprise\",\n enterprise1 = \"enterprise1\",\n enterprise2 = \"enterprise2\",\n cnetcmpgnent = \"cnetcmpgnent\",\n cnetcmpgnind = \"cnetcmpgnind\",\n cnetcmpgnteams = \"cnetcmpgnteams\",\n abmenterprise = \"abmenterprise\",\n abmteams = \"abmteams\",\n}\n\n@Component({\n selector: \"app-trial\",\n templateUrl: \"trial-initiation.component.html\",\n})\nexport class TrialInitiationComponent implements OnInit, OnDestroy {\n email = \"\";\n org = \"\";\n orgInfoSubLabel = \"\";\n orgId = \"\";\n orgLabel = \"\";\n billingSubLabel = \"\";\n layout = \"default\";\n plan: PlanType;\n product: ProductType;\n accountCreateOnly = true;\n useTrialStepper = false;\n policies: Policy[];\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n trialFlowOrgs: string[] = [\n ValidOrgParams.teams,\n ValidOrgParams.enterprise,\n ValidOrgParams.families,\n ];\n routeFlowOrgs: string[] = [\n ValidOrgParams.free,\n ValidOrgParams.premium,\n ValidOrgParams.individual,\n ];\n layouts = ValidLayoutParams;\n referenceData: ReferenceEventRequest;\n @ViewChild(\"stepper\", { static: false }) verticalStepper: VerticalStepperComponent;\n\n orgInfoFormGroup = this.formBuilder.group({\n name: [\"\", { validators: [Validators.required, Validators.maxLength(50)], updateOn: \"change\" }],\n email: [\"\"],\n });\n\n private set referenceDataId(referenceId: string) {\n if (referenceId != null) {\n this.referenceData.id = referenceId;\n } else {\n this.referenceData.id = (\"; \" + document.cookie)\n .split(\"; reference=\")\n .pop()\n .split(\";\")\n .shift();\n }\n\n if (this.referenceData.id === \"\") {\n this.referenceData.id = null;\n }\n }\n\n private destroy$ = new Subject();\n\n constructor(\n private route: ActivatedRoute,\n protected router: Router,\n private formBuilder: UntypedFormBuilder,\n private titleCasePipe: TitleCasePipe,\n private stateService: StateService,\n private logService: LogService,\n private policyApiService: PolicyApiServiceAbstraction,\n private policyService: PolicyService,\n private i18nService: I18nService,\n private routerService: RouterService\n ) {}\n\n async ngOnInit(): Promise {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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\n this.referenceDataId = qParams.reference;\n\n if (Object.values(ValidLayoutParams).includes(qParams.layout)) {\n this.layout = qParams.layout;\n this.accountCreateOnly = false;\n }\n\n if (this.trialFlowOrgs.includes(qParams.org)) {\n this.org = qParams.org;\n this.orgLabel = this.titleCasePipe.transform(this.org);\n this.useTrialStepper = true;\n this.referenceData.flow = qParams.org;\n\n if (this.org === ValidOrgParams.families) {\n this.plan = PlanType.FamiliesAnnually;\n this.product = ProductType.Families;\n } else if (this.org === ValidOrgParams.teams) {\n this.plan = PlanType.TeamsAnnually;\n this.product = ProductType.Teams;\n } else if (this.org === ValidOrgParams.enterprise) {\n this.plan = PlanType.EnterpriseAnnually;\n this.product = ProductType.Enterprise;\n }\n } else if (this.routeFlowOrgs.includes(qParams.org)) {\n this.referenceData.flow = qParams.org;\n const route = this.router.createUrlTree([\"create-organization\"], {\n queryParams: { plan: qParams.org },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n\n // Are they coming from an email for sponsoring a families organization\n // After logging in redirect them to setup the families sponsorship\n this.setupFamilySponsorship(qParams.sponsorshipToken);\n });\n\n const invite = await this.stateService.getOrganizationInvitation();\n if (invite != null) {\n try {\n const policies = await this.policyApiService.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.policyService\n .masterPasswordPolicyOptions$(this.policies)\n .pipe(takeUntil(this.destroy$))\n .subscribe((enforcedPasswordPolicyOptions) => {\n this.enforcedPolicyOptions = enforcedPasswordPolicyOptions;\n });\n }\n\n this.orgInfoFormGroup.controls.name.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.orgInfoFormGroup.controls.name.markAsTouched();\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n stepSelectionChange(event: StepperSelectionEvent) {\n // Set org info sub label\n if (event.selectedIndex === 1 && this.orgInfoFormGroup.controls.name.value === \"\") {\n this.orgInfoSubLabel =\n \"Enter your \" + this.titleCasePipe.transform(this.org) + \" organization information\";\n } else if (event.previouslySelectedIndex === 1) {\n this.orgInfoSubLabel = this.orgInfoFormGroup.controls.name.value;\n }\n\n //set billing sub label\n if (event.selectedIndex === 2) {\n this.billingSubLabel = this.i18nService.t(\"billingTrialSubLabel\");\n }\n }\n\n createdAccount(email: string) {\n this.email = email;\n this.orgInfoFormGroup.get(\"email\")?.setValue(email);\n this.verticalStepper.next();\n }\n\n billingSuccess(event: any) {\n this.orgId = event?.orgId;\n this.billingSubLabel = event?.subLabelText;\n this.verticalStepper.next();\n }\n\n navigateToOrgVault() {\n this.router.navigate([\"organizations\", this.orgId, \"vault\"]);\n }\n\n navigateToOrgInvite() {\n this.router.navigate([\"organizations\", this.orgId, \"manage\", \"members\"]);\n }\n\n previousStep() {\n this.verticalStepper.previous();\n }\n\n private setupFamilySponsorship(sponsorshipToken: string) {\n if (sponsorshipToken != null) {\n const route = this.router.createUrlTree([\"setup/families-for-enterprise\"], {\n queryParams: { plan: sponsorshipToken },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n }\n}\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","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 \"@bitwarden/common/abstractions/api.service\";\nimport { AppIdService } from \"@bitwarden/common/abstractions/appId.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TwoFactorService } from \"@bitwarden/common/abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { WebAuthnIFrame } from \"@bitwarden/common/misc/webauthn_iframe\";\nimport { AuthResult } from \"@bitwarden/common/models/domain/auth-result\";\nimport { TokenTwoFactorRequest } from \"@bitwarden/common/models/request/identity-token/token-two-factor.request\";\nimport { TwoFactorEmailRequest } from \"@bitwarden/common/models/request/two-factor-email.request\";\nimport { TwoFactorProviders } from \"@bitwarden/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 protected appIdService: AppIdService,\n protected loginService: LoginService\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 TokenTwoFactorRequest(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.loginService.clearValues();\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.loginService.clearValues();\n this.onSuccessfulLoginNavigate();\n } else {\n this.loginService.clearValues();\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 request.deviceIdentifier = await this.appIdService.getAppId();\n request.authRequestAccessCode = this.authService.accessCode;\n request.authRequestId = this.authService.authRequestId;\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.authingWithUserApiKey() ||\n this.authService.authingWithPasswordless()\n );\n }\n\n get needsLock(): boolean {\n return this.authService.authingWithSso() || this.authService.authingWithUserApiKey();\n }\n}\n","import { Directive, EventEmitter, OnInit, Output } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { TwoFactorService } from \"@bitwarden/common/abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"@bitwarden/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","
\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 } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { TwoFactorOptionsComponent as BaseTwoFactorOptionsComponent } from \"@bitwarden/angular/components/two-factor-options.component\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { TwoFactorService } from \"@bitwarden/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

{{ 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, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { TwoFactorComponent as BaseTwoFactorComponent } from \"@bitwarden/angular/components/two-factor.component\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AppIdService } from \"@bitwarden/common/abstractions/appId.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TwoFactorService } from \"@bitwarden/common/abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\n\nimport { RouterService } from \"../core\";\n\nimport { TwoFactorOptionsComponent } from \"./two-factor-options.component\";\n\n@Component({\n selector: \"app-two-factor\",\n templateUrl: \"two-factor.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 appIdService: AppIdService,\n private routerService: RouterService,\n loginService: LoginService\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 appIdService,\n loginService\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onProviderSelected.subscribe(async (provider: TwoFactorProviderType) => {\n modal.close();\n this.selectedProviderType = provider;\n await this.init();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onRecoverSelected.subscribe(() => {\n modal.close();\n });\n }\n );\n }\n\n async goAfterLogIn() {\n this.loginService.clearValues();\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl) {\n this.router.navigateByUrl(previousUrl);\n } else {\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.identifier,\n },\n });\n }\n }\n}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class PasswordRequest extends SecretVerificationRequest {\n newMasterPasswordHash: string;\n masterPasswordHint: string;\n key: string;\n}\n","import { Directive } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { VerificationType } from \"@bitwarden/common/enums/verificationType\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { PasswordRequest } from \"@bitwarden/common/models/request/password.request\";\nimport { Verification } from \"@bitwarden/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 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(\"masterPasswordRequired\")\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","
\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\";\nimport { Router } from \"@angular/router\";\n\nimport { UpdatePasswordComponent as BaseUpdatePasswordComponent } from \"@bitwarden/angular/components/update-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\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","export class OrganizationUserResetPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","import { OrganizationUserResetPasswordRequest } from \"../../abstractions/organization-user/requests\";\n\nexport class UpdateTempPasswordRequest extends OrganizationUserResetPasswordRequest {\n masterPasswordHint: string;\n}\n","import { Directive } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { UpdateTempPasswordRequest } from \"@bitwarden/common/models/request/update-temp-password.request\";\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.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","
\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 } from \"@angular/core\";\n\nimport { UpdateTempPasswordComponent as BaseUpdateTempPasswordComponent } from \"@bitwarden/angular/components/update-temp-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\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","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 { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { VerifyEmailRequest } from \"@bitwarden/common/models/request/verify-email.request\";\n\n@Component({\n selector: \"app-verify-email-token\",\n templateUrl: \"verify-email-token.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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","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","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { VerifyDeleteRecoverRequest } from \"@bitwarden/common/models/request/verify-delete-recover.request\";\n\n@Component({\n selector: \"app-verify-recover-delete\",\n templateUrl: \"verify-recover-delete.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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 { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class HomeGuard implements CanActivate {\n constructor(private router: Router, private authService: AuthService) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n return this.router.createUrlTree([\"/login\"], { queryParams: route.queryParams });\n }\n if (authStatus === AuthenticationStatus.Locked) {\n return this.router.createUrlTree([\"/lock\"], { queryParams: route.queryParams });\n }\n return this.router.createUrlTree([\"/vault\"], { queryParams: route.queryParams });\n }\n}\n","import { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selection-read-only.request\";\nimport { SelectionReadOnlyResponse } from \"@bitwarden/common/models/response/selection-read-only.response\";\nimport { SelectItemView } from \"@bitwarden/components/src/multi-select/models/select-item-view\";\n\n/**\n * Permission options that replace/correspond with readOnly and hidePassword server fields.\n */\nexport enum CollectionPermission {\n View = \"view\",\n ViewExceptPass = \"viewExceptPass\",\n Edit = \"edit\",\n EditExceptPass = \"editExceptPass\",\n}\n\nexport enum AccessItemType {\n Collection,\n Group,\n Member,\n}\n\n/**\n * A \"generic\" type that describes an item that can be selected from a\n * ng-select list and have its collection permission modified.\n *\n * Currently, it supports Collections, Groups, and Members. Members require some additional\n * details to render in the AccessSelectorComponent so their type is defined separately\n * and then joined back with the base type.\n *\n */\nexport type AccessItemView =\n | SelectItemView & {\n /**\n * Flag that this group/member can access all items.\n * This will disable the permission editor for this item.\n */\n accessAllItems?: boolean;\n\n /**\n * Flag that this item cannot be modified.\n * This will disable the permission editor and will keep\n * the item always selected.\n */\n readonly?: boolean;\n\n /**\n * Optional permission that will be rendered for this\n * item if it set to readonly.\n */\n readonlyPermission?: CollectionPermission;\n } & (\n | {\n type: AccessItemType.Collection;\n viaGroupName?: string;\n }\n | {\n type: AccessItemType.Group;\n }\n | {\n type: AccessItemType.Member; // Members have a few extra details required to display, so they're added here\n email: string;\n role: OrganizationUserType;\n status: OrganizationUserStatusType;\n }\n );\n\n/**\n * A type that is emitted as a value for the ngControl\n */\nexport type AccessItemValue = {\n id: string;\n permission?: CollectionPermission;\n type: AccessItemType;\n};\n\n/**\n * Converts the older SelectionReadOnly interface to one of the new CollectionPermission values\n * for the dropdown in the AccessSelectorComponent\n * @param value\n */\nexport const convertToPermission = (value: SelectionReadOnlyResponse) => {\n if (value.readOnly) {\n return value.hidePasswords ? CollectionPermission.ViewExceptPass : CollectionPermission.View;\n } else {\n return value.hidePasswords ? CollectionPermission.EditExceptPass : CollectionPermission.Edit;\n }\n};\n\n/**\n * Converts an AccessItemValue back into a SelectionReadOnly class using the CollectionPermission\n * to determine the values for `readOnly` and `hidePassword`\n * @param value\n */\nexport const convertToSelectionReadOnly = (value: AccessItemValue) => {\n return new SelectionReadOnlyRequest(\n value.id,\n readOnly(value.permission),\n hidePassword(value.permission)\n );\n};\n\nconst readOnly = (perm: CollectionPermission) =>\n [CollectionPermission.View, CollectionPermission.ViewExceptPass].includes(perm);\n\nconst hidePassword = (perm: CollectionPermission) =>\n [CollectionPermission.ViewExceptPass, CollectionPermission.EditExceptPass].includes(perm);\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","import { AbstractControl, FormArray } from \"@angular/forms\";\n\nexport type SelectionItemId = {\n id: string;\n};\n\nfunction findSortedIndex(sortedArray: T[], val: T, compareFn: (a: T, b: T) => number) {\n let low = 0;\n let high = sortedArray.length || 0;\n let mid = -1,\n c = 0;\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n c = compareFn(sortedArray[mid], val);\n if (c < 0) {\n low = mid + 1;\n } else if (c > 0) {\n high = mid;\n } else {\n return mid;\n }\n }\n return low;\n}\n\n/**\n * Utility to help manage a list of selectable items for use with Reactive Angular forms and FormArrays.\n *\n * It supports selecting/deselecting items, keeping items sorted, and synchronizing the selected items\n * with an array of FormControl.\n *\n * The first type parameter TItem represents the item being selected/deselected, it must have an `id`\n * property for identification/comparison. The second type parameter TControlValue represents the value\n * type of the form control.\n */\nexport class FormSelectionList<\n TItem extends SelectionItemId,\n TControlValue extends SelectionItemId\n> {\n allItems: TItem[] = [];\n /**\n * Sorted list of selected items\n * Immutable and should be recreated whenever a modification is made\n */\n selectedItems: TItem[] = [];\n\n /**\n * Sorted list of deselected items\n * Immutable and should be recreated whenever a modification is made\n */\n deselectedItems: TItem[] = [];\n\n /**\n * Sorted FormArray that corresponds and stays in sync with the selectedItems\n */\n formArray: FormArray, TControlValue>> = new FormArray([]);\n\n /**\n * Construct a new FormSelectionList\n * @param controlFactory - Factory responsible for creating initial form controls for each selected item. It is\n * provided a copy of the selected item for any form control initialization logic. Specify any additional form\n * control options or validators here.\n * @param compareFn - Comparison function used for sorting the items.\n */\n constructor(\n private controlFactory: (item: TItem) => AbstractControl, TControlValue>,\n private compareFn: (a: TItem, b: TItem) => number\n ) {}\n\n /**\n * Select multiple items by their ids at once. Optionally provide an initial form control value.\n * @param ids - List of ids to select\n * @param initialValue - Value that will be applied to the corresponding form controls\n * The provided `id` arguments will be automatically assigned to each form control value\n */\n selectItems(ids: string[], initialValue?: Partial | undefined) {\n for (const id of ids) {\n this.selectItem(id, initialValue);\n }\n }\n\n /**\n * Deselect multiple items by their ids at once\n * @param ids - List of ids to deselect\n */\n deselectItems(ids: string[]) {\n for (const id of ids) {\n this.deselectItem(id);\n }\n }\n\n deselectAll() {\n this.formArray.clear();\n this.selectedItems = [];\n this.deselectedItems = [...this.allItems];\n }\n\n /**\n * Select a single item by id.\n *\n * Maintains list order for both selected items, deselected items, and the FormArray.\n *\n * @param id - Id of the item to select\n * @param initialValue - Value that will be applied to the corresponding form control for the selected item.\n * The provided `id` argument will be automatically assigned unless explicitly set in the initialValue.\n */\n selectItem(id: string, initialValue?: Partial) {\n const index = this.deselectedItems.findIndex((o) => o.id === id);\n\n if (index === -1) {\n return;\n }\n\n const selectedOption = this.deselectedItems[index];\n\n // Note: Changes to the deselected/selected arrays must create a new copy of the array\n // in order for Angular's Change Detection to pick up the modification (i.e. treat the arrays as immutable)\n\n // Remove from the list of deselected options\n this.deselectedItems = [\n ...this.deselectedItems.slice(0, index),\n ...this.deselectedItems.slice(index + 1),\n ];\n\n // Insert into the sorted selected options list\n const sortedInsertIndex = findSortedIndex(this.selectedItems, selectedOption, this.compareFn);\n\n this.selectedItems = [\n ...this.selectedItems.slice(0, sortedInsertIndex),\n selectedOption,\n ...this.selectedItems.slice(sortedInsertIndex),\n ];\n\n const newControl = this.controlFactory(selectedOption);\n\n // Patch the value and ensure the `id` is set\n newControl.patchValue({\n id,\n ...initialValue,\n });\n\n this.formArray.insert(sortedInsertIndex, newControl);\n }\n\n /**\n * Deselect a single item by id.\n *\n * Maintains list order for both selected items, deselected items, and the FormArray.\n *\n * @param id - Id of the item to deselect\n */\n deselectItem(id: string) {\n const index = this.selectedItems.findIndex((o) => o.id === id);\n\n if (index === -1) {\n return;\n }\n\n const deselectedOption = this.selectedItems[index];\n\n // Note: Changes to the deselected/selected arrays must create a new copy of the array\n // in order for Angular's Change Detection to pick up the modification (i.e. treat the arrays as immutable)\n\n // Remove from the list of selected items (and FormArray)\n this.selectedItems = [\n ...this.selectedItems.slice(0, index),\n ...this.selectedItems.slice(index + 1),\n ];\n this.formArray.removeAt(index);\n\n // Insert into the sorted deselected array\n const sortedInsertIndex = findSortedIndex(\n this.deselectedItems,\n deselectedOption,\n this.compareFn\n );\n\n this.deselectedItems = [\n ...this.deselectedItems.slice(0, sortedInsertIndex),\n deselectedOption,\n ...this.deselectedItems.slice(sortedInsertIndex),\n ];\n }\n\n /**\n * Populate the list of deselected items, and optional specify which items should be selected and with what initial\n * value for their Form Control\n * @param items - A list of all items. (Will be sorted internally)\n * @param selectedItems - The items to select initially\n */\n populateItems(items: TItem[], selectedItems: TControlValue[] = []) {\n this.formArray.clear();\n this.allItems = [...items].sort(this.compareFn);\n this.selectedItems = [];\n this.deselectedItems = [...this.allItems];\n\n for (const selectedItem of selectedItems) {\n this.selectItem(selectedItem.id, selectedItem);\n }\n }\n}\n","\n\n\n","\n \n \n \n \n \n \n {{ item.labelName }}\n \n \n \n \n
\n
\n \n
\n
\n \n
\n
\n {{ item.listName }}\n
\n
\n
\n\n","import {\n Component,\n Input,\n OnInit,\n Output,\n ViewChild,\n EventEmitter,\n HostBinding,\n Optional,\n Self,\n} from \"@angular/core\";\nimport { ControlValueAccessor, NgControl, Validators } from \"@angular/forms\";\nimport { NgSelectComponent } from \"@ng-select/ng-select\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\nimport { BitFormFieldControl } from \"../form-field/form-field-control\";\n\nimport { SelectItemView } from \"./models/select-item-view\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Component({\n selector: \"bit-multi-select\",\n templateUrl: \"./multi-select.component.html\",\n providers: [{ provide: BitFormFieldControl, useExisting: MultiSelectComponent }],\n})\n/**\n * This component has been implemented to only support Multi-select list events\n */\nexport class MultiSelectComponent implements OnInit, BitFormFieldControl, ControlValueAccessor {\n @ViewChild(NgSelectComponent) select: NgSelectComponent;\n\n // Parent component should only pass selectable items (complete list - selected items = baseItems)\n @Input() baseItems: SelectItemView[];\n // Defaults to native ng-select behavior - set to \"true\" to clear selected items on dropdown close\n @Input() removeSelectedItems = false;\n @Input() placeholder: string;\n @Input() loading = false;\n @Input() disabled = false;\n\n // Internal tracking of selected items\n @Input() selectedItems: SelectItemView[];\n\n // Default values for our implementation\n loadingText: string;\n\n protected searchInputId = `search-input-${nextId++}`;\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n private notifyOnChange?: (value: SelectItemView[]) => void;\n /**Implemented as part of NG_VALUE_ACCESSOR */\n private notifyOnTouched?: () => void;\n\n @Output() onItemsConfirmed = new EventEmitter();\n\n constructor(private i18nService: I18nService, @Optional() @Self() private ngControl?: NgControl) {\n if (ngControl != null) {\n ngControl.valueAccessor = this;\n }\n }\n\n ngOnInit(): void {\n // Default Text Values\n this.placeholder = this.placeholder ?? this.i18nService.t(\"multiSelectPlaceholder\");\n this.loadingText = this.i18nService.t(\"multiSelectLoading\");\n }\n\n /** Helper method for showing selected state in custom template */\n isSelected(item: any): boolean {\n return this.selectedItems?.find((selected) => selected.id === item.id) != undefined;\n }\n\n /**\n * The `close` callback will act as the only trigger for signifying the user's intent of completing the selection\n * of items. Selected items will be emitted to the parent component in order to allow for separate data handling.\n */\n onDropdownClosed(): void {\n // Early exit\n if (this.selectedItems == null || this.selectedItems.length == 0) {\n return;\n }\n\n // Emit results to parent component\n this.onItemsConfirmed.emit(this.selectedItems);\n\n // Remove selected items from base list based on input property\n if (this.removeSelectedItems) {\n let updatedBaseItems = this.baseItems;\n this.selectedItems.forEach((selectedItem) => {\n updatedBaseItems = updatedBaseItems.filter((item) => selectedItem.id !== item.id);\n });\n\n // Reset Lists\n this.selectedItems = null;\n this.baseItems = updatedBaseItems;\n }\n }\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n writeValue(obj: SelectItemView[]): void {\n this.selectedItems = obj;\n }\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n registerOnChange(fn: (value: SelectItemView[]) => void): void {\n this.notifyOnChange = fn;\n }\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n registerOnTouched(fn: any): void {\n this.notifyOnTouched = fn;\n }\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n protected onChange(items: SelectItemView[]) {\n if (!this.notifyOnChange) {\n return;\n }\n\n this.notifyOnChange(items);\n }\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n protected onBlur() {\n if (!this.notifyOnTouched) {\n return;\n }\n\n this.notifyOnTouched();\n }\n\n /**Implemented as part of BitFormFieldControl */\n @HostBinding(\"attr.aria-describedby\")\n get ariaDescribedBy() {\n return this._ariaDescribedBy;\n }\n set ariaDescribedBy(value: string) {\n this._ariaDescribedBy = value;\n this.select?.searchInput.nativeElement.setAttribute(\"aria-describedby\", value);\n }\n private _ariaDescribedBy: string;\n\n /**Implemented as part of BitFormFieldControl */\n get labelForId() {\n return this.searchInputId;\n }\n\n /**Implemented as part of BitFormFieldControl */\n @HostBinding() @Input() id = `bit-multi-select-${nextId++}`;\n\n /**Implemented as part of BitFormFieldControl */\n @HostBinding(\"attr.required\")\n @Input()\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value: any) {\n this._required = value != null && value !== false;\n }\n private _required: boolean;\n\n /**Implemented as part of BitFormFieldControl */\n get hasError() {\n return this.ngControl?.status === \"INVALID\" && this.ngControl?.touched;\n }\n\n /**Implemented as part of BitFormFieldControl */\n get error(): [string, any] {\n const key = Object.keys(this.ngControl?.errors)[0];\n return [key, this.ngControl?.errors[key]];\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\n\n@Pipe({\n name: \"userType\",\n})\nexport class UserTypePipe implements PipeTransform {\n constructor(private i18nService: I18nService) {}\n\n transform(value?: OrganizationUserType, unknownText?: string): string {\n if (value == null) {\n return unknownText ?? this.i18nService.t(\"unknown\");\n }\n switch (value) {\n case OrganizationUserType.Owner:\n return this.i18nService.t(\"owner\");\n case OrganizationUserType.Admin:\n return this.i18nService.t(\"admin\");\n case OrganizationUserType.User:\n return this.i18nService.t(\"user\");\n case OrganizationUserType.Manager:\n return this.i18nService.t(\"manager\");\n case OrganizationUserType.Custom:\n return this.i18nService.t(\"custom\");\n }\n }\n}\n","
\n \n {{ \"permission\" | i18n }}\n \n \n \n \n\n \n {{ selectorLabelText }}\n \n {{ selectorHelpText }}\n \n
\n\n\n \n \n {{ columnHeader }}\n \n {{ \"permission\" | i18n }}\n \n {{ \"role\" | i18n }}\n {{ \"group\" | i18n }}\n \n \n \n \n \n \n
\n \n
\n
\n {{ item.labelName }}\n \n {{ \"invited\" | i18n }}\n \n
\n
\n {{ $any(item).email }}\n
\n
\n
\n\n
\n \n {{ item.labelName }}\n
\n \n\n \n \n \n\n \n \n {{ \"canEdit\" | i18n }}\n \n \n\n \n {{ permissionLabelId(item.readonlyPermission) | i18n }}\n \n \n \n\n \n {{ $any(item).role | userType: \"-\" }}\n \n\n \n {{ $any(item).viaGroupName ?? \"-\" }}\n \n\n \n \n \n \n \n {{ emptySelectionText }}\n \n
\n
\n","import { Component, forwardRef, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { ControlValueAccessor, FormBuilder, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { FormSelectionList } from \"@bitwarden/angular/utils/form-selection-list\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { SelectItemView } from \"@bitwarden/components/src/multi-select/models/select-item-view\";\n\nimport {\n AccessItemType,\n AccessItemValue,\n AccessItemView,\n CollectionPermission,\n} from \"./access-selector.models\";\n\nexport enum PermissionMode {\n /**\n * No permission controls or column present. No permission values are emitted.\n */\n Hidden = \"hidden\",\n\n /**\n * No permission controls. Column rendered an if available on an item. No permission values are emitted\n */\n Readonly = \"readonly\",\n\n /**\n * Permission Controls and column present. Permission values are emitted.\n */\n Edit = \"edit\",\n}\n\n@Component({\n selector: \"bit-access-selector\",\n templateUrl: \"access-selector.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AccessSelectorComponent),\n multi: true,\n },\n ],\n})\nexport class AccessSelectorComponent implements ControlValueAccessor, OnInit, OnDestroy {\n private destroy$ = new Subject();\n private notifyOnChange: (v: unknown) => void;\n private notifyOnTouch: () => void;\n private pauseChangeNotification: boolean;\n\n /**\n * The internal selection list that tracks the value of this form control / component.\n * It's responsible for keeping items sorted and synced with the rendered form controls\n * @protected\n */\n protected selectionList = new FormSelectionList((item) => {\n const permissionControl = this.formBuilder.control(this.initialPermission);\n\n const fg = this.formBuilder.group({\n id: item.id,\n type: item.type,\n permission: permissionControl,\n });\n\n // Disable entire row form group if readonly\n if (item.readonly) {\n fg.disable();\n }\n\n // Disable permission control if accessAllItems is enabled\n if (item.accessAllItems || this.permissionMode != PermissionMode.Edit) {\n permissionControl.disable();\n }\n\n return fg;\n }, this._itemComparator.bind(this));\n\n /**\n * Internal form group for this component.\n * @protected\n */\n protected formGroup = this.formBuilder.group({\n items: this.selectionList.formArray,\n });\n\n protected itemType = AccessItemType;\n protected permissionList = [\n { perm: CollectionPermission.View, labelId: \"canView\" },\n { perm: CollectionPermission.ViewExceptPass, labelId: \"canViewExceptPass\" },\n { perm: CollectionPermission.Edit, labelId: \"canEdit\" },\n { perm: CollectionPermission.EditExceptPass, labelId: \"canEditExceptPass\" },\n ];\n protected initialPermission = CollectionPermission.View;\n\n disabled: boolean;\n\n /**\n * List of all selectable items that. Sorted internally.\n */\n @Input()\n get items(): AccessItemView[] {\n return this.selectionList.allItems;\n }\n\n set items(val: AccessItemView[]) {\n const selected = (this.selectionList.formArray.getRawValue() ?? []).concat(\n val.filter((m) => m.readonly)\n );\n this.selectionList.populateItems(\n val.map((m) => {\n m.icon = m.icon ?? this.itemIcon(m); // Ensure an icon is set\n return m;\n }),\n selected\n );\n }\n\n /**\n * Permission mode that controls if the permission form controls and column should be present.\n */\n @Input()\n get permissionMode(): PermissionMode {\n return this._permissionMode;\n }\n\n set permissionMode(value: PermissionMode) {\n this._permissionMode = value;\n // Toggle any internal permission controls\n for (const control of this.selectionList.formArray.controls) {\n if (value == PermissionMode.Edit) {\n control.get(\"permission\").enable();\n } else {\n control.get(\"permission\").disable();\n }\n }\n }\n private _permissionMode: PermissionMode = PermissionMode.Hidden;\n\n /**\n * Column header for the selected items table\n */\n @Input() columnHeader: string;\n\n /**\n * Label used for the ng selector\n */\n @Input() selectorLabelText: string;\n\n /**\n * Helper text displayed under the ng selector\n */\n @Input() selectorHelpText: string;\n\n /**\n * Text that is shown in the table when no items are selected\n */\n @Input() emptySelectionText: string;\n\n /**\n * Flag for if the member roles column should be present\n */\n @Input() showMemberRoles: boolean;\n\n /**\n * Flag for if the group column should be present\n */\n @Input() showGroupColumn: boolean;\n\n constructor(\n private readonly formBuilder: FormBuilder,\n private readonly i18nService: I18nService\n ) {}\n\n /** Required for NG_VALUE_ACCESSOR */\n registerOnChange(fn: any): void {\n this.notifyOnChange = fn;\n }\n\n /** Required for NG_VALUE_ACCESSOR */\n registerOnTouched(fn: any): void {\n this.notifyOnTouch = fn;\n }\n\n /** Required for NG_VALUE_ACCESSOR */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n\n // Keep the internal FormGroup in sync\n if (this.disabled) {\n this.formGroup.disable();\n } else {\n this.formGroup.enable();\n }\n }\n\n /** Required for NG_VALUE_ACCESSOR */\n writeValue(selectedItems: AccessItemValue[]): void {\n // Modifying the selection list, mistakenly fires valueChanges in the\n // internal form array, so we need to know to pause external notification\n this.pauseChangeNotification = true;\n\n // Always clear the internal selection list on a new value\n this.selectionList.deselectAll();\n\n // We need to also select any read only items to appear in the table\n this.selectionList.selectItems(this.items.filter((m) => m.readonly).map((m) => m.id));\n\n // If the new value is null, then we're done\n if (selectedItems == null) {\n this.pauseChangeNotification = false;\n return;\n }\n\n // Unable to handle other value types, throw\n if (!Array.isArray(selectedItems)) {\n throw new Error(\"The access selector component only supports Array form values!\");\n }\n\n // Iterate and internally select each item\n for (const value of selectedItems) {\n this.selectionList.selectItem(value.id, value);\n }\n\n this.pauseChangeNotification = false;\n }\n\n ngOnInit() {\n // Watch the internal formArray for changes and propagate them\n this.selectionList.formArray.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((v) => {\n if (!this.notifyOnChange || this.pauseChangeNotification) {\n return;\n }\n this.notifyOnChange(v);\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected handleBlur() {\n if (!this.notifyOnTouch) {\n return;\n }\n\n this.notifyOnTouch();\n }\n\n protected selectItems(items: SelectItemView[]) {\n this.pauseChangeNotification = true;\n this.selectionList.selectItems(items.map((i) => i.id));\n this.pauseChangeNotification = false;\n if (this.notifyOnChange != undefined) {\n this.notifyOnChange(this.selectionList.formArray.value);\n }\n }\n\n protected itemIcon(item: AccessItemView) {\n switch (item.type) {\n case AccessItemType.Collection:\n return \"bwi-collection\";\n case AccessItemType.Group:\n return \"bwi-users\";\n case AccessItemType.Member:\n return \"bwi-user\";\n }\n }\n\n protected permissionLabelId(perm: CollectionPermission) {\n return this.permissionList.find((p) => p.perm == perm)?.labelId;\n }\n\n protected accessAllLabelId(item: AccessItemView) {\n return item.type == AccessItemType.Group ? \"groupAccessAll\" : \"memberAccessAll\";\n }\n\n protected canEditItemPermission(item: AccessItemView) {\n return this.permissionMode == PermissionMode.Edit && !item.readonly && !item.accessAllItems;\n }\n\n private _itemComparator(a: AccessItemView, b: AccessItemView) {\n if (a.type != b.type) {\n return a.type - b.type;\n }\n return this.i18nService.collator.compare(\n a.listName + a.labelName + a.readonly,\n b.listName + b.labelName + b.readonly\n );\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../shared\";\n\nimport { AccessSelectorComponent } from \"./access-selector.component\";\nimport { UserTypePipe } from \"./user-type.pipe\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [AccessSelectorComponent, UserTypePipe],\n exports: [AccessSelectorComponent],\n})\nexport class AccessSelectorModule {}\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","
\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, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { CollectionRequest } from \"@bitwarden/common/models/request/collection.request\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selection-read-only.request\";\nimport { GroupResponse } from \"@bitwarden/common/models/response/group.response\";\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 false,\n \"app-collection-add-edit .modal-content\"\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

\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 \n {{ \"all\" | i18n }}\n \n \n {{ \"selected\" | i18n }}\n {{ selectedCount }}\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
  {{ \"name\" | i18n }} {{ \"userType\" | i18n }}\n {{ \"hidePasswords\" | i18n }}\n \n {{ \"readOnly\" | i18n }}\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, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserUserDetailsResponse } from \"@bitwarden/common/abstractions/organization-user/responses\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selection-read-only.request\";\n\n@Component({\n selector: \"app-entity-users\",\n templateUrl: \"entity-users.component.html\",\n providers: [SearchPipe],\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 search: SearchPipe,\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private organizationUserService: OrganizationUserService,\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 get searchedUsers() {\n return this.search.transform(this.users, this.searchText, \"name\", \"email\", \"id\");\n }\n\n get scrollViewportStyle() {\n return `min-height: 120px; height: ${120 + this.searchedUsers.length * 46}px`;\n }\n\n async loadUsers() {\n const users = await this.organizationUserService.getAllUsers(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 {{ \"upgradeOrganization\" | i18n }}\n \n {{ data.dialogBodyText }}\n \n
\n \n \n {{ \"upgrade\" | i18n }}\n \n \n \n\n \n \n \n
\n
\n","import { DialogRef, DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject } from \"@angular/core\";\n\nexport interface OrgUpgradeDialogData {\n orgId: string;\n orgCanManageBilling: boolean;\n dialogBodyText: string;\n}\n\n@Component({\n selector: \"app-org-upgrade-dialog\",\n templateUrl: \"org-upgrade-dialog.component.html\",\n})\nexport class OrgUpgradeDialogComponent {\n constructor(\n public dialogRef: DialogRef,\n @Inject(DIALOG_DATA) public data: OrgUpgradeDialogData\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, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collection.data\";\nimport { Collection } from \"@bitwarden/common/models/domain/collection\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport {\n CollectionDetailsResponse,\n CollectionResponse,\n} from \"@bitwarden/common/models/response/collection.response\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { CollectionAddEditComponent } from \"./collection-add-edit.component\";\nimport { EntityUsersComponent } from \"./entity-users.component\";\nimport { OrgUpgradeDialogComponent } from \"./org-upgrade-dialog/org-upgrade-dialog.component\";\n\n@Component({\n selector: \"app-org-manage-collections\",\n templateUrl: \"collections.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 private dialogService: DialogService\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe\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 if (\n !collection &&\n this.organization.planProductType === ProductType.Free &&\n this.collections.length === this.organization.maxCollections\n ) {\n // Show org upgrade modal\n const dialogBodyText = this.organization.canManageBilling\n ? this.i18nService.t(\n \"freeOrgMaxCollectionReachedManageBilling\",\n this.organization.maxCollections.toString()\n )\n : this.i18nService.t(\n \"freeOrgMaxCollectionReachedNoManageBilling\",\n this.organization.maxCollections.toString()\n );\n\n this.dialogService.open(OrgUpgradeDialogComponent, {\n data: {\n orgId: this.organization.id,\n dialogBodyText: dialogBodyText,\n orgCanManageBilling: this.organization.canManageBilling,\n },\n });\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onSavedCollection.subscribe(() => {\n modal.close();\n this.load();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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","import { SelectionReadOnlyRequest } from \"./selection-read-only.request\";\n\nexport class GroupRequest {\n name: string;\n accessAll: boolean;\n externalId: string;\n collections: SelectionReadOnlyRequest[] = [];\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, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collection.data\";\nimport { Collection } from \"@bitwarden/common/models/domain/collection\";\nimport { GroupRequest } from \"@bitwarden/common/models/request/group.request\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selection-read-only.request\";\nimport { CollectionDetailsResponse } from \"@bitwarden/common/models/response/collection.response\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\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 false,\n \"app-group-add-edit .modal-content\"\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

{{ \"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, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { GroupResponse } from \"@bitwarden/common/models/response/group.response\";\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})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 searchService: SearchService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n /* eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe */\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onSavedGroup.subscribe(() => {\n modal.close();\n this.load();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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
\n
\n
\n
{{ \"manage\" | i18n }}
\n
\n \n {{ \"members\" | i18n }}\n \n \n {{ \"collections\" | i18n }}\n \n \n {{ \"groups\" | i18n }}\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 \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-org-manage\",\n templateUrl: \"manage.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class ManageComponent implements OnInit {\n organization: Organization;\n\n constructor(private route: ActivatedRoute, private organizationService: OrganizationService) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n });\n }\n}\n","export class OrganizationUserConfirmRequest {\n key: string;\n}\n","
\n
\n
\n
\n

\n {{ bulkTitle }}\n

\n \n ×\n \n
\n
\n \n {{ \"noSelectedUsersApplicable\" | i18n }}\n \n \n {{ error }}\n \n \n 0 && !error && isRevoking\">\n {{ \"revokeUsersWarning\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}
\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 {{ 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 {{ bulkTitle }}\n \n \n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ModalConfig } from \"@bitwarden/angular/services/modal.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\n\nimport { BulkUserDetails } from \"./bulk-status.component\";\n\n@Component({\n selector: \"app-bulk-restore-revoke\",\n templateUrl: \"bulk-restore-revoke.component.html\",\n})\nexport class BulkRestoreRevokeComponent {\n isRevoking: boolean;\n organizationId: string;\n users: BulkUserDetails[];\n\n statuses: Map = new Map();\n\n loading = false;\n done = false;\n error: string;\n\n constructor(\n protected i18nService: I18nService,\n private organizationUserService: OrganizationUserService,\n config: ModalConfig\n ) {\n this.isRevoking = config.data.isRevoking;\n this.organizationId = config.data.organizationId;\n this.users = config.data.users;\n }\n\n get bulkTitle() {\n const titleKey = this.isRevoking ? \"revokeUsers\" : \"restoreUsers\";\n return this.i18nService.t(titleKey);\n }\n\n async submit() {\n this.loading = true;\n try {\n const response = await this.performBulkUserAction();\n\n const bulkMessage = this.isRevoking ? \"bulkRevokedMessage\" : \"bulkRestoredMessage\";\n response.data.forEach((entry) => {\n const error = entry.error !== \"\" ? entry.error : this.i18nService.t(bulkMessage);\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 performBulkUserAction() {\n const userIds = this.users.map((user) => user.id);\n if (this.isRevoking) {\n return await this.organizationUserService.revokeManyOrganizationUsers(\n this.organizationId,\n userIds\n );\n } else {\n return await this.organizationUserService.restoreManyOrganizationUsers(\n this.organizationId,\n userIds\n );\n }\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 {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport zxcvbn from \"zxcvbn\";\n\nimport { PasswordStrengthComponent } from \"@bitwarden/angular/shared/components/password-strength/password-strength.component\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserResetPasswordRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\n\n@Component({\n selector: \"app-reset-password\",\n templateUrl: \"reset-password.component.html\",\n})\nexport class ResetPasswordComponent implements OnInit, OnDestroy {\n @Input() name: string;\n @Input() email: string;\n @Input() id: string;\n @Input() organizationId: string;\n @Output() onPasswordReset = new EventEmitter();\n @ViewChild(PasswordStrengthComponent) passwordStrengthComponent: PasswordStrengthComponent;\n\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n newPassword: string = null;\n showPassword = false;\n passwordStrengthResult: zxcvbn.ZXCVBNResult;\n formPromise: Promise;\n\n private destroy$ = new Subject();\n\n constructor(\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 private organizationUserService: OrganizationUserService\n ) {}\n\n async ngOnInit() {\n this.policyService\n .masterPasswordPolicyOptions$()\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (enforcedPasswordPolicyOptions) =>\n (this.enforcedPolicyOptions = enforcedPasswordPolicyOptions)\n );\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\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.passwordStrengthComponent.updatePasswordStrength(this.newPassword);\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(\"masterPasswordRequired\")\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(\"masterPasswordMinlength\")\n );\n return false;\n }\n\n if (\n this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n this.passwordStrengthResult.score,\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.passwordStrengthResult.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 // Get user Information (kdf type, kdf iterations, resetPasswordKey, private key) and change password\n try {\n this.formPromise = this.organizationUserService\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.organizationUserService.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 getStrengthResult(result: zxcvbn.ZXCVBNResult) {\n this.passwordStrengthResult = result;\n }\n}\n","import { OrganizationUserType } from \"../../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../../../models/api/permissions.api\";\nimport { SelectionReadOnlyRequest } from \"../../../models/request/selection-read-only.request\";\n\nexport class OrganizationUserUpdateRequest {\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","import { OrganizationUserType } from \"../../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../../../models/api/permissions.api\";\nimport { SelectionReadOnlyRequest } from \"../../../models/request/selection-read-only.request\";\n\nexport class OrganizationUserInviteRequest {\n emails: string[] = [];\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","
\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { Utils } from \"@bitwarden/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 {{ title }}\n {{ name }}\n {{ \"revoked\" | i18n }}\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 {{ \"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
\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 {{ \"restoreAccess\" | i18n }}\n \n \n \n {{ \"revokeAccess\" | 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 \"@bitwarden/common/abstractions/api.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport {\n OrganizationUserInviteRequest,\n OrganizationUserUpdateRequest,\n} from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\nimport { PermissionsApi } from \"@bitwarden/common/models/api/permissions.api\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collection.data\";\nimport { Collection } from \"@bitwarden/common/models/domain/collection\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selection-read-only.request\";\nimport { CollectionDetailsResponse } from \"@bitwarden/common/models/response/collection.response\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\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 @Output() onRevokedUser = new EventEmitter();\n @Output() onRestoredUser = new EventEmitter();\n\n loading = true;\n editMode = false;\n isRevoked = 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 canUseCustomPermissions: boolean;\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 organizationService: OrganizationService,\n private logService: LogService,\n private organizationUserService: OrganizationUserService\n ) {}\n\n async ngOnInit() {\n this.editMode = this.loading = this.organizationUserId != null;\n const organization = this.organizationService.get(this.organizationId);\n this.canUseCustomPermissions = organization.useCustomPermissions;\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.organizationUserService.getOrganizationUser(\n this.organizationId,\n this.organizationUserId\n );\n this.access = user.accessAll ? \"all\" : \"selected\";\n this.type = user.type;\n this.isRevoked = user.status === OrganizationUserStatusType.Revoked;\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 if (!this.canUseCustomPermissions && this.type === OrganizationUserType.Custom) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"customNonEnterpriseError\")\n );\n return;\n }\n\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 this.updateUser(collections);\n } else {\n this.inviteUser(collections);\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 : \"removeOrgUserConfirmation\";\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(message),\n this.i18nService.t(\"removeUserIdAccess\", this.name),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\",\n false,\n \"app-user-add-edit .modal-content\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.organizationUserService.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 async revoke() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"revokeUserConfirmation\"),\n this.i18nService.t(\"revokeUserId\", this.name),\n this.i18nService.t(\"revokeAccess\"),\n this.i18nService.t(\"cancel\"),\n \"warning\",\n false,\n \"app-user-add-edit .modal-content\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.formPromise = this.organizationUserService.revokeOrganizationUser(\n this.organizationId,\n this.organizationUserId\n );\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"revokedUserId\", this.name)\n );\n this.isRevoked = true;\n this.onRevokedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async restore() {\n if (!this.editMode) {\n return;\n }\n\n try {\n this.formPromise = this.organizationUserService.restoreOrganizationUser(\n this.organizationId,\n this.organizationUserId\n );\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"restoredUserId\", this.name)\n );\n this.isRevoked = false;\n this.onRestoredUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n updateUser(collections: SelectionReadOnlyRequest[]) {\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.organizationUserService.putOrganizationUser(\n this.organizationId,\n this.organizationUserId,\n request\n );\n }\n\n inviteUser(collections: SelectionReadOnlyRequest[]) {\n const request = new OrganizationUserInviteRequest();\n request.emails = [...new Set(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.organizationUserService.postOrganizationUserInvite(\n this.organizationId,\n request\n );\n }\n}\n","export class OrganizationUserUpdateGroupsRequest {\n groupIds: string[] = [];\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 { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserUpdateGroupsRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { GroupResponse } from \"@bitwarden/common/models/response/group.response\";\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 private organizationUserService: OrganizationUserService\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.organizationUserService.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.organizationUserService.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

{{ \"members\" | i18n }}

\n
\n
\n \n {{ \"all\" | i18n }}\n {{ allCount }}\n \n \n {{ \"invited\" | i18n }}\n {{ invitedCount }}\n \n \n {{ \"accepted\" | i18n }}\n {{ acceptedCount }}\n \n \n {{ \"revoked\" | i18n }}\n {{ revokedCount }}\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\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 {{ u.email }}\n {{\n \"invited\" | i18n\n }}\n {{\n \"accepted\" | i18n\n }}\n {{\n \"revoked\" | 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 {{ \"restoreAccess\" | i18n }}\n \n \n \n {{ \"revokeAccess\" | 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, OnDestroy, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { combineLatest, concatMap, Subject, takeUntil } from \"rxjs\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserConfirmRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport {\n OrganizationUserBulkResponse,\n OrganizationUserUserDetailsResponse,\n} from \"@bitwarden/common/abstractions/organization-user/responses\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { OrganizationKeysRequest } from \"@bitwarden/common/models/request/organization-keys.request\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { BasePeopleComponent } from \"../../common/base.people.component\";\n\nimport { BulkConfirmComponent } from \"./bulk/bulk-confirm.component\";\nimport { BulkRemoveComponent } from \"./bulk/bulk-remove.component\";\nimport { BulkRestoreRevokeComponent } from \"./bulk/bulk-restore-revoke.component\";\nimport { BulkStatusComponent } from \"./bulk/bulk-status.component\";\nimport { EntityEventsComponent } from \"./entity-events.component\";\nimport { OrgUpgradeDialogComponent } from \"./org-upgrade-dialog/org-upgrade-dialog.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, OnDestroy\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 organization: Organization;\n status: OrganizationUserStatusType = null;\n orgResetPasswordPolicyEnabled = false;\n\n private destroy$ = new Subject();\n\n constructor(\n apiService: ApiService,\n private route: ActivatedRoute,\n i18nService: I18nService,\n modalService: ModalService,\n platformUtilsService: PlatformUtilsService,\n cryptoService: CryptoService,\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 private organizationApiService: OrganizationApiServiceAbstraction,\n private organizationUserService: OrganizationUserService,\n private dialogService: DialogService\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 combineLatest([this.route.params, this.route.queryParams, this.policyService.policies$])\n .pipe(\n concatMap(async ([params, qParams, policies]) => {\n this.organization = await this.organizationService.get(params.organizationId);\n\n // Backfill pub/priv key if necessary\n if (\n this.organization.canManageUsersPassword &&\n !this.organization.hasPublicAndPrivateKeys\n ) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organization.id);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n const request = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n const response = await this.organizationApiService.updateKeys(\n this.organization.id,\n request\n );\n if (response != null) {\n this.organization.hasPublicAndPrivateKeys =\n 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 const resetPasswordPolicy = policies\n .filter((policy) => policy.type === PolicyType.ResetPassword)\n .find((p) => p.organizationId === this.organization.id);\n this.orgResetPasswordPolicyEnabled = resetPasswordPolicy?.enabled;\n\n await this.load();\n\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 takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async load() {\n super.load();\n await super.load();\n }\n\n getUsers(): Promise> {\n return this.organizationUserService.getAllUsers(this.organization.id);\n }\n\n deleteUser(id: string): Promise {\n return this.organizationUserService.deleteOrganizationUser(this.organization.id, id);\n }\n\n revokeUser(id: string): Promise {\n return this.organizationUserService.revokeOrganizationUser(this.organization.id, id);\n }\n\n restoreUser(id: string): Promise {\n return this.organizationUserService.restoreOrganizationUser(this.organization.id, id);\n }\n\n reinviteUser(id: string): Promise {\n return this.organizationUserService.postOrganizationUserReinvite(this.organization.id, id);\n }\n\n async confirmUser(\n user: OrganizationUserUserDetailsResponse,\n publicKey: Uint8Array\n ): Promise {\n const orgKey = await this.cryptoService.getOrgKey(this.organization.id);\n const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey.buffer);\n const request = new OrganizationUserConfirmRequest();\n request.key = key.encryptedString;\n await this.organizationUserService.postOrganizationUserConfirm(\n this.organization.id,\n user.id,\n request\n );\n }\n\n allowResetPassword(orgUser: OrganizationUserUserDetailsResponse): boolean {\n // Hierarchy check\n let callingUserHasPermission = false;\n\n switch (this.organization.type) {\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.organization.canManageUsersPassword &&\n callingUserHasPermission &&\n this.organization.useResetPassword &&\n this.organization.hasPublicAndPrivateKeys &&\n orgUser.resetPasswordEnrolled &&\n this.orgResetPasswordPolicyEnabled &&\n orgUser.status === OrganizationUserStatusType.Confirmed\n );\n }\n\n showEnrolledStatus(orgUser: OrganizationUserUserDetailsResponse): boolean {\n return (\n this.organization.useResetPassword &&\n orgUser.resetPasswordEnrolled &&\n this.orgResetPasswordPolicyEnabled\n );\n }\n\n async edit(user: OrganizationUserUserDetailsResponse) {\n // Invite User: Add Flow\n // Click on user email: Edit Flow\n\n // User attempting to invite new users in a free org with max users\n if (\n !user &&\n this.organization.planProductType === ProductType.Free &&\n this.allUsers.length === this.organization.seats\n ) {\n // Show org upgrade modal\n\n const dialogBodyText = this.organization.canManageBilling\n ? this.i18nService.t(\n \"freeOrgInvLimitReachedManageBilling\",\n this.organization.seats.toString()\n )\n : this.i18nService.t(\n \"freeOrgInvLimitReachedNoManageBilling\",\n this.organization.seats.toString()\n );\n\n this.dialogService.open(OrgUpgradeDialogComponent, {\n data: {\n orgId: this.organization.id,\n orgCanManageBilling: this.organization.canManageBilling,\n dialogBodyText: dialogBodyText,\n },\n });\n return;\n }\n\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.organization.id;\n comp.organizationUserId = user?.id || null;\n comp.usesKeyConnector = user?.usesKeyConnector;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onSavedUser.subscribe(() => {\n modal.close();\n this.load();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onDeletedUser.subscribe(() => {\n modal.close();\n this.removeUser(user);\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onRevokedUser.subscribe(() => {\n modal.close();\n this.load();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onRestoredUser.subscribe(() => {\n modal.close();\n this.load();\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.organization.id;\n comp.organizationUserId = user != null ? user.id : null;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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.organization.id;\n comp.users = this.getCheckedUsers();\n }\n );\n\n await modal.onClosedPromise();\n await this.load();\n }\n\n async bulkRevoke() {\n await this.bulkRevokeOrRestore(true);\n }\n\n async bulkRestore() {\n await this.bulkRevokeOrRestore(false);\n }\n\n async bulkRevokeOrRestore(isRevoking: boolean) {\n if (this.actionPromise != null) {\n return;\n }\n\n const ref = this.modalService.open(BulkRestoreRevokeComponent, {\n allowMultipleModals: true,\n data: {\n organizationId: this.organization.id,\n users: this.getCheckedUsers(),\n isRevoking: isRevoking,\n },\n });\n\n await ref.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 response = this.organizationUserService.postManyOrganizationUserReinvite(\n this.organization.id,\n filteredUsers.map((user) => user.id)\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.organization.id;\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.organization.id;\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.organization.id;\n comp.id = user != null ? user.id : null;\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onPasswordReset.subscribe(() => {\n modal.close();\n this.load();\n });\n }\n );\n }\n\n protected async removeUserConfirmationDialog(user: OrganizationUserUserDetailsResponse) {\n const warningMessage = user.usesKeyConnector\n ? this.i18nService.t(\"removeUserConfirmationKeyConnector\")\n : this.i18nService.t(\"removeOrgUserConfirmation\");\n\n return this.platformUtilsService.showDialog(\n warningMessage,\n this.i18nService.t(\"removeUserIdAccess\", this.userNamePipe.transform(user)),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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","import { NgModule } from \"@angular/core\";\n\nimport { GetOrgNameFromIdPipe } from \"./get-organization-name.pipe\";\n\n@NgModule({\n declarations: [GetOrgNameFromIdPipe],\n exports: [GetOrgNameFromIdPipe],\n})\nexport class PipesModule {}\n","import { VaultFilter } from \"@bitwarden/angular/vault/vault-filter/models/vault-filter.model\";\n\nexport class VaultService {\n calculateSearchBarLocalizationString(vaultFilter: VaultFilter): string {\n if (vaultFilter.status === \"favorites\") {\n return \"searchFavorites\";\n }\n if (vaultFilter.status === \"trash\") {\n return \"searchTrash\";\n }\n if (vaultFilter.cipherType != null) {\n return \"searchType\";\n }\n if (vaultFilter.selectedFolderId != null && vaultFilter.selectedFolderId != \"none\") {\n return \"searchFolder\";\n }\n if (vaultFilter.selectedCollection) {\n return \"searchCollection\";\n }\n if (vaultFilter.selectedOrganizationId != null) {\n return \"searchOrganization\";\n }\n if (vaultFilter.myVaultOnly) {\n return \"searchMyVault\";\n }\n\n return \"searchVault\";\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\nimport { LooseComponentsModule } from \"../../shared/loose-components.module\";\nimport { VaultFilterModule } from \"../vault-filter/vault-filter.module\";\n\nimport { PipesModule } from \"./pipes/pipes.module\";\nimport { VaultService } from \"./vault.service\";\n\n@NgModule({\n imports: [SharedModule, VaultFilterModule, LooseComponentsModule, PipesModule],\n exports: [SharedModule, VaultFilterModule, LooseComponentsModule, PipesModule],\n providers: [\n {\n provide: VaultService,\n useClass: VaultService,\n },\n ],\n})\nexport class VaultSharedModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { VaultFilterSharedModule } from \"../../../vault/vault-filter/shared/vault-filter-shared.module\";\n\nimport { VaultFilterComponent } from \"./vault-filter.component\";\n\n@NgModule({\n imports: [VaultFilterSharedModule],\n declarations: [VaultFilterComponent],\n exports: [VaultFilterComponent],\n})\nexport class VaultFilterModule {}\n","import { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { CipherStatus } from \"./cipher-status.model\";\n\nexport type VaultFilterFunction = (cipher: CipherView) => boolean;\n\nexport class VaultFilter {\n cipherType?: CipherType;\n selectedCollection = false; // This is needed because of how the \"Unassigned\" collection works. It has a null id.\n selectedCollectionId?: string;\n status?: CipherStatus;\n selectedFolder = false; // This is needed because of how the \"No Folder\" folder works. It has a null id.\n selectedFolderId?: string;\n selectedOrganizationId?: string;\n myVaultOnly = false;\n refreshCollectionsAndFolders = false;\n\n constructor(init?: Partial) {\n Object.assign(this, init);\n }\n\n resetFilter() {\n this.cipherType = null;\n this.status = null;\n this.selectedCollection = false;\n this.selectedCollectionId = null;\n this.selectedFolder = false;\n this.selectedFolderId = null;\n }\n\n resetOrganization() {\n this.myVaultOnly = false;\n this.selectedOrganizationId = null;\n this.resetFilter();\n }\n\n buildFilter(): VaultFilterFunction {\n return (cipher) => {\n let cipherPassesFilter = true;\n if (this.status === \"favorites\" && cipherPassesFilter) {\n cipherPassesFilter = cipher.favorite;\n }\n if (this.status === \"trash\" && cipherPassesFilter) {\n cipherPassesFilter = cipher.isDeleted;\n }\n if (this.cipherType != null && cipherPassesFilter) {\n cipherPassesFilter = cipher.type === this.cipherType;\n }\n if (this.selectedFolder && this.selectedFolderId == null && cipherPassesFilter) {\n cipherPassesFilter = cipher.folderId == null;\n }\n if (this.selectedFolder && this.selectedFolderId != null && cipherPassesFilter) {\n cipherPassesFilter = cipher.folderId === this.selectedFolderId;\n }\n if (this.selectedCollection && this.selectedCollectionId == null && cipherPassesFilter) {\n cipherPassesFilter =\n cipher.organizationId != null &&\n (cipher.collectionIds == null || cipher.collectionIds.length === 0);\n }\n if (this.selectedCollection && this.selectedCollectionId != null && cipherPassesFilter) {\n cipherPassesFilter =\n cipher.collectionIds != null && cipher.collectionIds.includes(this.selectedCollectionId);\n }\n if (this.selectedOrganizationId != null && cipherPassesFilter) {\n cipherPassesFilter = cipher.organizationId === this.selectedOrganizationId;\n }\n if (this.myVaultOnly && cipherPassesFilter) {\n cipherPassesFilter = cipher.organizationId === null;\n }\n return cipherPassesFilter;\n };\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { EncArrayBuffer } from \"@bitwarden/common/models/domain/enc-array-buffer\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { AttachmentView } from \"@bitwarden/common/models/view/attachment.view\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\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 protected componentName = \"\";\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 protected fileDownloadService: FileDownloadService\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 false,\n this.componentName != \"\" ? this.componentName + \" .modal-content\" : null\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 encBuf = await EncArrayBuffer.fromResponse(response);\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(encBuf, key);\n this.fileDownloadService.download({\n fileName: attachment.fileName,\n blobData: decBuf,\n });\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 encBuf = await EncArrayBuffer.fromResponse(response);\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(encBuf, 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 protected async reupload(attachment: AttachmentView) {\n // TODO: This should be removed but is needed since we re-use the same template\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 } from \"@angular/core\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"@bitwarden/angular/components/attachments.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { AttachmentView } from \"@bitwarden/common/models/view/attachment.view\";\n\n@Component({\n selector: \"app-vault-attachments\",\n templateUrl: \"attachments.component.html\",\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n protected override componentName = \"app-vault-attachments\";\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 fileDownloadService: FileDownloadService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n platformUtilsService,\n apiService,\n window,\n logService,\n stateService,\n fileDownloadService\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 } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherData } from \"@bitwarden/common/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { AttachmentView } from \"@bitwarden/common/models/view/attachment.view\";\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 fileDownloadService: FileDownloadService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n stateService,\n platformUtilsService,\n apiService,\n logService,\n fileDownloadService\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","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\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","
\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, OnDestroy } from \"@angular/core\";\n\nimport { CollectionsComponent as BaseCollectionsComponent } from \"@bitwarden/angular/components/collections.component\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\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 { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CipherData } from \"@bitwarden/common/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherCollectionsRequest } from \"@bitwarden/common/models/request/cipher-collections.request\";\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","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { firstValueFrom, Observable } from \"rxjs\";\n\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { ITreeNodeObject } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { FolderView } from \"@bitwarden/common/models/view/folder.view\";\n\nimport { DynamicTreeNode } from \"../models/dynamic-tree-node.model\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\nimport { VaultFilterService } from \"../services/vault-filter.service\";\n\n@Directive()\nexport class VaultFilterComponent implements OnInit {\n @Input() activeFilter: VaultFilter = new VaultFilter();\n @Input() hideFolders = false;\n @Input() hideCollections = false;\n @Input() hideFavorites = false;\n @Input() hideTrash = false;\n @Input() hideOrganizations = false;\n\n @Output() onFilterChange = new EventEmitter();\n @Output() onAddFolder = new EventEmitter();\n @Output() onEditFolder = new EventEmitter();\n\n isLoaded = false;\n collapsedFilterNodes: Set;\n organizations: Organization[];\n activePersonalOwnershipPolicy: boolean;\n activeSingleOrganizationPolicy: boolean;\n collections: DynamicTreeNode;\n folders$: Observable>;\n\n constructor(protected vaultFilterService: VaultFilterService) {}\n\n get displayCollections() {\n return this.collections?.fullList != null && this.collections.fullList.length > 0;\n }\n\n async ngOnInit(): Promise {\n this.collapsedFilterNodes = await this.vaultFilterService.buildCollapsedFilterNodes();\n this.organizations = await this.vaultFilterService.buildOrganizations();\n if (this.organizations != null && this.organizations.length > 0) {\n this.activePersonalOwnershipPolicy =\n await this.vaultFilterService.checkForPersonalOwnershipPolicy();\n this.activeSingleOrganizationPolicy =\n await this.vaultFilterService.checkForSingleOrganizationPolicy();\n }\n this.folders$ = await this.vaultFilterService.buildNestedFolders();\n this.collections = await this.initCollections();\n this.isLoaded = true;\n }\n\n // overwritten in web for organization vaults\n async initCollections() {\n return await this.vaultFilterService.buildCollections();\n }\n\n async toggleFilterNodeCollapseState(node: ITreeNodeObject) {\n if (this.collapsedFilterNodes.has(node.id)) {\n this.collapsedFilterNodes.delete(node.id);\n } else {\n this.collapsedFilterNodes.add(node.id);\n }\n await this.vaultFilterService.storeCollapsedFilterNodes(this.collapsedFilterNodes);\n }\n\n async applyFilter(filter: VaultFilter) {\n if (filter.refreshCollectionsAndFolders) {\n await this.reloadCollectionsAndFolders(filter);\n filter = await this.pruneInvalidatedFilterSelections(filter);\n }\n this.onFilterChange.emit(filter);\n }\n\n async reloadCollectionsAndFolders(filter: VaultFilter) {\n this.folders$ = await this.vaultFilterService.buildNestedFolders(filter.selectedOrganizationId);\n this.collections = filter.myVaultOnly\n ? null\n : await this.vaultFilterService.buildCollections(filter.selectedOrganizationId);\n }\n\n async reloadOrganizations() {\n this.organizations = await this.vaultFilterService.buildOrganizations();\n this.activePersonalOwnershipPolicy =\n await this.vaultFilterService.checkForPersonalOwnershipPolicy();\n this.activeSingleOrganizationPolicy =\n await this.vaultFilterService.checkForSingleOrganizationPolicy();\n }\n\n addFolder() {\n this.onAddFolder.emit();\n }\n\n editFolder(folder: FolderView) {\n this.onEditFolder.emit(folder);\n }\n\n protected async pruneInvalidatedFilterSelections(filter: VaultFilter): Promise {\n filter = await this.pruneInvalidFolderSelection(filter);\n filter = this.pruneInvalidCollectionSelection(filter);\n return filter;\n }\n\n protected async pruneInvalidFolderSelection(filter: VaultFilter): Promise {\n if (\n filter.selectedFolder &&\n !(await firstValueFrom(this.folders$))?.hasId(filter.selectedFolderId)\n ) {\n filter.selectedFolder = false;\n filter.selectedFolderId = null;\n }\n return filter;\n }\n\n protected pruneInvalidCollectionSelection(filter: VaultFilter): VaultFilter {\n if (\n filter.myVaultOnly ||\n (filter.selectedCollection &&\n filter.selectedCollectionId != null &&\n !this.collections?.hasId(filter.selectedCollectionId))\n ) {\n filter.selectedCollection = false;\n filter.selectedCollectionId = null;\n }\n return filter;\n }\n}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ITreeNodeObject } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\n\nimport { DynamicTreeNode } from \"../models/dynamic-tree-node.model\";\nimport { TopLevelTreeNode } from \"../models/top-level-tree-node.model\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\n\n@Directive()\nexport class CollectionFilterComponent {\n @Input() hide = false;\n @Input() collapsedFilterNodes: Set;\n @Input() collectionNodes: DynamicTreeNode;\n @Input() activeFilter: VaultFilter;\n\n @Output() onNodeCollapseStateChange: EventEmitter =\n new EventEmitter();\n @Output() onFilterChange: EventEmitter = new EventEmitter();\n\n readonly collectionsGrouping: TopLevelTreeNode = {\n id: \"collections\",\n name: \"collections\",\n };\n\n get collections() {\n return this.collectionNodes?.fullList;\n }\n\n get nestedCollections() {\n return this.collectionNodes?.nestedList;\n }\n\n get show() {\n return !this.hide && this.collections != null && this.collections.length > 0;\n }\n\n isCollapsed(node: ITreeNodeObject) {\n return this.collapsedFilterNodes.has(node.id);\n }\n\n applyFilter(collection: CollectionView) {\n this.activeFilter.resetFilter();\n this.activeFilter.selectedCollection = true;\n this.activeFilter.selectedCollectionId = collection.id;\n this.onFilterChange.emit(this.activeFilter);\n }\n\n async toggleCollapse(node: ITreeNodeObject) {\n this.onNodeCollapseStateChange.emit(node);\n }\n}\n","\n
\n \n \n \n

 {{ collectionsGrouping.name | i18n }}

\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 { CollectionFilterComponent as BaseCollectionFilterComponent } from \"@bitwarden/angular/vault/vault-filter/components/collection-filter.component\";\n\n@Component({\n selector: \"app-collection-filter\",\n templateUrl: \"collection-filter.component.html\",\n})\nexport class CollectionFilterComponent extends BaseCollectionFilterComponent {}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ITreeNodeObject } from \"@bitwarden/common/models/domain/tree-node\";\nimport { FolderView } from \"@bitwarden/common/models/view/folder.view\";\n\nimport { DynamicTreeNode } from \"../models/dynamic-tree-node.model\";\nimport { TopLevelTreeNode } from \"../models/top-level-tree-node.model\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\n\n@Directive()\nexport class FolderFilterComponent {\n @Input() hide = false;\n @Input() collapsedFilterNodes: Set;\n @Input() folderNodes: DynamicTreeNode;\n @Input() activeFilter: VaultFilter;\n\n @Output() onNodeCollapseStateChange: EventEmitter =\n new EventEmitter();\n @Output() onFilterChange: EventEmitter = new EventEmitter();\n @Output() onAddFolder = new EventEmitter();\n @Output() onEditFolder = new EventEmitter();\n\n get folders() {\n return this.folderNodes?.fullList;\n }\n\n get nestedFolders() {\n return this.folderNodes?.nestedList;\n }\n\n readonly foldersGrouping: TopLevelTreeNode = {\n id: \"folders\",\n name: \"folders\",\n };\n\n applyFilter(folder: FolderView) {\n this.activeFilter.resetFilter();\n this.activeFilter.selectedFolder = true;\n this.activeFilter.selectedFolderId = folder.id;\n this.onFilterChange.emit(this.activeFilter);\n }\n\n addFolder() {\n this.onAddFolder.emit();\n }\n\n editFolder(folder: FolderView) {\n this.onEditFolder.emit(folder);\n }\n\n isCollapsed(node: ITreeNodeObject) {\n return this.collapsedFilterNodes.has(node.id);\n }\n\n async toggleCollapse(node: ITreeNodeObject) {\n this.onNodeCollapseStateChange.emit(node);\n }\n}\n","\n
\n \n \n \n

 {{ \"folders\" | 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","import { Component } from \"@angular/core\";\n\nimport { FolderFilterComponent as BaseFolderFilterComponent } from \"@bitwarden/angular/vault/vault-filter/components/folder-filter.component\";\n\n@Component({\n selector: \"app-folder-filter\",\n templateUrl: \"folder-filter.component.html\",\n})\nexport class FolderFilterComponent extends BaseFolderFilterComponent {}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { CipherStatus } from \"../models/cipher-status.model\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\n\n@Directive()\nexport class StatusFilterComponent {\n @Input() hideFavorites = false;\n @Input() hideTrash = false;\n @Output() onFilterChange: EventEmitter = new EventEmitter();\n @Input() activeFilter: VaultFilter;\n\n get show() {\n return !(this.hideFavorites && this.hideTrash);\n }\n\n applyFilter(cipherStatus: CipherStatus) {\n this.activeFilter.resetFilter();\n this.activeFilter.status = cipherStatus;\n this.onFilterChange.emit(this.activeFilter);\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 { StatusFilterComponent as BaseStatusFilterComponent } from \"@bitwarden/angular/vault/vault-filter/components/status-filter.component\";\n\n@Component({\n selector: \"app-status-filter\",\n templateUrl: \"status-filter.component.html\",\n})\nexport class StatusFilterComponent extends BaseStatusFilterComponent {}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { ITreeNodeObject } from \"@bitwarden/common/models/domain/tree-node\";\n\nimport { TopLevelTreeNode } from \"../models/top-level-tree-node.model\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\n\n@Directive()\nexport class TypeFilterComponent {\n @Input() hide = false;\n @Input() collapsedFilterNodes: Set;\n @Input() selectedCipherType: CipherType = null;\n @Input() activeFilter: VaultFilter;\n\n @Output() onNodeCollapseStateChange: EventEmitter =\n new EventEmitter();\n @Output() onFilterChange: EventEmitter = new EventEmitter();\n\n readonly typesNode: TopLevelTreeNode = {\n id: \"types\",\n name: \"types\",\n };\n\n cipherTypeEnum = CipherType; // used in the template\n\n get isCollapsed() {\n return this.collapsedFilterNodes.has(this.typesNode.id);\n }\n\n applyFilter(cipherType: CipherType) {\n this.activeFilter.resetFilter();\n this.activeFilter.cipherType = cipherType;\n this.onFilterChange.emit(this.activeFilter);\n }\n\n async toggleCollapse() {\n this.onNodeCollapseStateChange.emit(this.typesNode);\n }\n}\n","
\n \n \n \n

 {{ \"types\" | 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","import { Component } from \"@angular/core\";\n\nimport { TypeFilterComponent as BaseTypeFilterComponent } from \"@bitwarden/angular/vault/vault-filter/components/type-filter.component\";\n\n@Component({\n selector: \"app-type-filter\",\n templateUrl: \"type-filter.component.html\",\n})\nexport class TypeFilterComponent extends BaseTypeFilterComponent {}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { ITreeNodeObject } from \"@bitwarden/common/models/domain/tree-node\";\n\nimport { DisplayMode } from \"../models/display-mode\";\nimport { TopLevelTreeNode } from \"../models/top-level-tree-node.model\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\n\n@Directive()\nexport class OrganizationFilterComponent {\n @Input() hide = false;\n @Input() collapsedFilterNodes: Set;\n @Input() organizations: Organization[];\n @Input() activeFilter: VaultFilter;\n @Input() activePersonalOwnershipPolicy: boolean;\n @Input() activeSingleOrganizationPolicy: boolean;\n\n @Output() onNodeCollapseStateChange: EventEmitter =\n new EventEmitter();\n @Output() onFilterChange: EventEmitter = new EventEmitter();\n\n get displayMode(): DisplayMode {\n let displayMode: DisplayMode = \"organizationMember\";\n if (this.organizations == null || this.organizations.length < 1) {\n displayMode = \"noOrganizations\";\n } else if (this.activePersonalOwnershipPolicy && !this.activeSingleOrganizationPolicy) {\n displayMode = \"personalOwnershipPolicy\";\n } else if (!this.activePersonalOwnershipPolicy && this.activeSingleOrganizationPolicy) {\n displayMode = \"singleOrganizationPolicy\";\n } else if (this.activePersonalOwnershipPolicy && this.activeSingleOrganizationPolicy) {\n displayMode = \"singleOrganizationAndPersonalOwnershipPolicies\";\n }\n\n return displayMode;\n }\n\n get hasActiveFilter() {\n return this.activeFilter.myVaultOnly || this.activeFilter.selectedOrganizationId != null;\n }\n\n readonly organizationGrouping: TopLevelTreeNode = {\n id: \"vaults\",\n name: \"allVaults\",\n };\n\n async applyOrganizationFilter(organization: Organization) {\n this.activeFilter.selectedOrganizationId = organization.id;\n this.activeFilter.myVaultOnly = false;\n this.activeFilter.refreshCollectionsAndFolders = true;\n this.applyFilter(this.activeFilter);\n }\n\n async applyMyVaultFilter() {\n this.activeFilter.selectedOrganizationId = null;\n this.activeFilter.myVaultOnly = true;\n this.activeFilter.refreshCollectionsAndFolders = true;\n this.applyFilter(this.activeFilter);\n }\n\n clearFilter() {\n this.activeFilter.myVaultOnly = false;\n this.activeFilter.selectedOrganizationId = null;\n this.applyFilter(new VaultFilter(this.activeFilter));\n }\n\n private applyFilter(filter: VaultFilter) {\n this.onFilterChange.emit(filter);\n }\n\n async toggleCollapse() {\n this.onNodeCollapseStateChange.emit(this.organizationGrouping);\n }\n\n get isCollapsed() {\n return this.collapsedFilterNodes.has(this.organizationGrouping.id);\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { ModalRef } from \"@bitwarden/angular/components/modal/modal.ref\";\nimport { ModalConfig } from \"@bitwarden/angular/services/modal.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\n@Component({\n selector: \"app-enroll-master-password-reset\",\n templateUrl: \"enroll-master-password-reset.component.html\",\n})\nexport class EnrollMasterPasswordReset {\n organization: Organization;\n\n verification: Verification;\n formPromise: Promise;\n\n constructor(\n private userVerificationService: UserVerificationService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private cryptoService: CryptoService,\n private syncService: SyncService,\n private logService: LogService,\n private modalRef: ModalRef,\n config: ModalConfig,\n private organizationApiService: OrganizationApiServiceAbstraction,\n private organizationUserService: OrganizationUserService\n ) {\n this.organization = config.data.organization;\n }\n\n async submit() {\n let toastStringRef = \"withdrawPasswordResetSuccess\";\n\n this.formPromise = this.userVerificationService\n .buildRequest(this.verification, OrganizationUserResetPasswordEnrollmentRequest)\n .then(async (request) => {\n // Set variables\n let keyString: string = null;\n\n // Retrieve Public Key\n const orgKeys = await this.organizationApiService.getKeys(this.organization.id);\n if (orgKeys == null) {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n\n const publicKey = Utils.fromB64ToArray(orgKeys.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 request.resetPasswordKey = keyString;\n await this.organizationUserService.putOrganizationUserResetPasswordEnrollment(\n this.organization.id,\n this.organization.userId,\n request\n );\n\n await this.syncService.fullSync(true);\n });\n try {\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(toastStringRef));\n this.modalRef.close();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","\n
\n \n
\n

\n {{ \"enrollPasswordReset\" | i18n }}\n

\n \n ×\n \n
\n
\n \n {{ \"resetPasswordEnrollmentWarning\" | i18n }}\n \n \n
\n
\n \n \n \n {{ \"cancel\" | i18n }}\n \n \n
\n \n
\n\n","import { AfterContentInit, Component, Input } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { SsoComponent } from \"@bitwarden/angular/components/sso.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Organization } from \"@bitwarden/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","\n \n {{ \"loading\" | i18n }}\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","import { Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { map, Subject, takeUntil } from \"rxjs\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\n\nimport { EnrollMasterPasswordReset } from \"../../../organizations/users/enroll-master-password-reset.component\";\n\n@Component({\n selector: \"app-organization-options\",\n templateUrl: \"organization-options.component.html\",\n})\nexport class OrganizationOptionsComponent implements OnInit, OnDestroy {\n actionPromise: Promise;\n policies: Policy[];\n loaded = false;\n\n @Input() organization: Organization;\n\n private destroy$ = new Subject();\n\n constructor(\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private apiService: ApiService,\n private syncService: SyncService,\n private policyService: PolicyService,\n private modalService: ModalService,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction,\n private organizationUserService: OrganizationUserService\n ) {}\n\n async ngOnInit() {\n this.policyService.policies$\n .pipe(\n map((policies) => policies.filter((policy) => policy.type === PolicyType.ResetPassword)),\n takeUntil(this.destroy$)\n )\n .subscribe((policies) => {\n this.policies = policies;\n this.loaded = true;\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\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 } 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.organizationApiService.leave(org.id);\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"leftOrganization\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async toggleResetPasswordEnrollment(org: Organization) {\n if (!this.organization.resetPasswordEnrolled) {\n this.modalService.open(EnrollMasterPasswordReset, {\n allowMultipleModals: true,\n data: {\n organization: org,\n },\n });\n } else {\n // Remove reset password\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.masterPasswordHash = \"ignored\";\n request.resetPasswordKey = null;\n this.actionPromise = this.organizationUserService.putOrganizationUserResetPasswordEnrollment(\n this.organization.id,\n this.organization.userId,\n request\n );\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"withdrawPasswordResetSuccess\")\n );\n this.syncService.fullSync(true);\n } catch (e) {\n this.logService.error(e);\n }\n }\n }\n}\n","\n \n \n \n \n \n
\n \n \n \n \n  {{ organizationGrouping.name | i18n }}\n \n
\n \n
\n \n
\n \n \n {{ organizations[0].name }}\n \n \n \n \n \n \n \n
\n
\n \n
\n \n \n \n \n  {{ organizationGrouping.name | i18n }}\n \n
\n \n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { OrganizationFilterComponent as BaseOrganizationFilterComponent } from \"@bitwarden/angular/vault/vault-filter/components/organization-filter.component\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-organization-filter\",\n templateUrl: \"organization-filter.component.html\",\n})\nexport class OrganizationFilterComponent extends BaseOrganizationFilterComponent {\n displayText = \"allVaults\";\n\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {\n super();\n }\n\n async applyOrganizationFilter(organization: Organization) {\n if (organization.enabled) {\n //proceed with default behaviour for enabled organizations\n super.applyOrganizationFilter(organization);\n } else {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"disabledOrganizationFilterError\")\n );\n }\n }\n}\n","
\n
\n \n
\n
\n
\n {{ \"filters\" | 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, Output } from \"@angular/core\";\n\nimport { VaultFilterComponent as BaseVaultFilterComponent } from \"@bitwarden/angular/vault/vault-filter/components/vault-filter.component\";\n\nimport { VaultFilterService } from \"./shared/vault-filter.service\";\n\n@Component({\n selector: \"./app-vault-filter\",\n templateUrl: \"vault-filter.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class VaultFilterComponent extends BaseVaultFilterComponent {\n @Output() onSearchTextChanged = new EventEmitter();\n\n searchPlaceholder: string;\n searchText = \"\";\n\n constructor(protected vaultFilterService: VaultFilterService) {\n // This empty constructor is required to provide the web vaultFilterService subclass to super()\n // TODO: refactor this to use proper dependency injection\n super(vaultFilterService);\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n this.vaultFilterService.collapsedFilterNodes$.subscribe((nodes) => {\n this.collapsedFilterNodes = nodes;\n });\n }\n\n searchTextChanged() {\n this.onSearchTextChanged.emit(this.searchText);\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\nimport { VaultFilterComponent as BaseVaultFilterComponent } from \"../../../vault/vault-filter/vault-filter.component\";\n\n@Component({\n selector: \"app-organization-vault-filter\",\n templateUrl: \"../../../vault/vault-filter/vault-filter.component.html\",\n})\nexport class VaultFilterComponent extends BaseVaultFilterComponent {\n hideOrganizations = true;\n hideFavorites = true;\n hideFolders = true;\n\n organization: Organization;\n\n async initCollections() {\n if (this.organization.canEditAnyCollection) {\n return await this.vaultFilterService.buildAdminCollections(this.organization.id);\n }\n return await this.vaultFilterService.buildCollections(this.organization.id);\n }\n\n async reloadCollectionsAndFolders() {\n this.collections = await this.initCollections();\n }\n}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\n@Directive()\nexport class VaultItemsComponent {\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 organization: Organization;\n accessEvents = 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 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 { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: \"ellipsis\",\n})\nexport class EllipsisPipe implements PipeTransform {\n transform(value: string, limit = 25, completeWords = false, ellipsis = \"...\") {\n if (value.length <= limit) {\n return value;\n }\n limit -= ellipsis.length;\n if (completeWords && value.length > limit && value.indexOf(\" \") > 0) {\n limit = value.substring(0, limit).lastIndexOf(\" \");\n }\n return value.substring(0, limit) + ellipsis;\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { AvatarUpdateService } from \"@bitwarden/common/abstractions/account/avatar-update.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Component({\n selector: \"app-org-badge\",\n templateUrl: \"organization-name-badge.component.html\",\n})\nexport class OrganizationNameBadgeComponent implements OnInit {\n @Input() organizationName: string;\n @Input() profileName: string;\n\n @Output() onOrganizationClicked = new EventEmitter();\n\n color: string;\n textColor: string;\n isMe: boolean;\n\n constructor(\n private i18nService: I18nService,\n private avatarService: AvatarUpdateService,\n private tokenService: TokenService\n ) {}\n\n async ngOnInit(): Promise {\n if (this.organizationName == null || this.organizationName === \"\") {\n this.organizationName = this.i18nService.t(\"me\");\n this.isMe = true;\n }\n if (this.isMe) {\n this.color = await this.avatarService.loadColorFromState();\n if (this.color == null) {\n const userName = await this.tokenService.getName();\n this.color = Utils.stringToColor(userName.toUpperCase());\n }\n } else {\n this.color = Utils.stringToColor(this.organizationName);\n }\n this.textColor = Utils.pickTextColorBasedOnBgColor(this.color, 135, true) + \"!important\";\n }\n\n emitOnOrganizationClicked() {\n this.onOrganizationClicked.emit();\n }\n}\n","\n {{ organizationName | ellipsis: 13 }}\n\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Pipe({\n name: \"orgNameFromId\",\n pure: true,\n})\nexport class GetOrgNameFromIdPipe implements PipeTransform {\n transform(value: string, organizations: Organization[]) {\n const orgName = organizations.find((o) => o.id === value)?.name;\n return orgName;\n }\n}\n","\n \n \n \n \n \n \n \n \n \n \n {{ c.name }}\n \n \n {{ \"attachments\" | i18n }}\n \n \n {{ \"attachmentsNeedFix\" | i18n }}\n \n \n
\n {{ c.subTitle }}\n \n 0 && !organization\" class=\"tw-w-28\">\n \n \n \n \n \n \n \n \n \n \n \n \n {{ \"copyPassword\" | i18n }}\n \n \n \n {{ \"copyVerificationCode\" | i18n }}\n \n \n \n \n \n \n {{ \"clone\" | i18n }}\n \n \n \n {{ \"moveToOrganization\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n
\n \n \n {{ \"loading\" | i18n }}\n \n \n \n

{{ \"noItemsInList\" | i18n }}

\n \n
\n
\n
\n","import { Component, EventEmitter, Input, OnDestroy, Output } from \"@angular/core\";\n\nimport { VaultItemsComponent as BaseVaultItemsComponent } from \"@bitwarden/angular/components/vault-items.component\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/enums/cipherRepromptType\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { EventType } from \"@bitwarden/common/enums/eventType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { Icons } from \"@bitwarden/components\";\n\nconst MaxCheckedCount = 500;\n\n@Component({\n selector: \"app-vault-items\",\n templateUrl: \"vault-items.component.html\",\n})\nexport class VaultItemsComponent extends BaseVaultItemsComponent 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 @Output() onOrganzationBadgeClicked = new EventEmitter();\n\n pagedCiphers: CipherView[] = [];\n pageSize = 200;\n cipherType = CipherType;\n actionPromise: Promise;\n userHasPremiumAccess = false;\n organizations: Organization[] = [];\n profileName: string;\n noItemIcon = Icons.Search;\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 eventCollectionService: EventCollectionService,\n protected totpService: TotpService,\n protected stateService: StateService,\n protected passwordRepromptService: PasswordRepromptService,\n private logService: LogService,\n private organizationService: OrganizationService,\n private tokenService: TokenService\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.profileName = await this.tokenService.getName();\n this.organizations = await this.organizationService.getAll();\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.eventCollectionService.collect(\n EventType.Cipher_ClientToggledHiddenFieldVisible,\n cipher.id\n );\n } else if (typeI18nKey === \"securityCode\") {\n this.eventCollectionService.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 onOrganizationClicked(organizationId: string) {\n this.onOrganzationBadgeClicked.emit(organizationId);\n }\n\n events(c: CipherView) {\n // TODO: This should be removed but is needed since we reuse the same template\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, EventEmitter, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { VaultItemsComponent as BaseVaultItemsComponent } from \"../../vault/vault-items.component\";\n\n@Component({\n selector: \"app-org-vault-items\",\n templateUrl: \"../../vault/vault-items.component.html\",\n})\nexport class VaultItemsComponent extends BaseVaultItemsComponent {\n @Output() onEventsClicked = new EventEmitter();\n\n protected allCiphers: CipherView[] = [];\n\n constructor(\n searchService: SearchService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n cipherService: CipherService,\n eventCollectionService: EventCollectionService,\n totpService: TotpService,\n passwordRepromptService: PasswordRepromptService,\n logService: LogService,\n stateService: StateService,\n organizationService: OrganizationService,\n tokenService: TokenService,\n private apiService: ApiService\n ) {\n super(\n searchService,\n i18nService,\n platformUtilsService,\n cipherService,\n eventCollectionService,\n totpService,\n stateService,\n passwordRepromptService,\n logService,\n organizationService,\n tokenService\n );\n }\n\n async load(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n this.deleted = deleted || false;\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\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","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherBulkDeleteRequest } from \"@bitwarden/common/models/request/cipher-bulk-delete.request\";\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","
\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, OnInit, Output } from \"@angular/core\";\nimport { firstValueFrom, Observable } from \"rxjs\";\n\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { FolderView } from \"@bitwarden/common/models/view/folder.view\";\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$: Observable;\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$ = this.folderService.folderViews$;\n this.folderId = (await firstValueFrom(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","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/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","type CheckableBase = {\n checked?: boolean;\n};\n\nexport type Checkable = T & CheckableBase;\n\nexport function isChecked(item: CheckableBase): boolean {\n return !!item.checked;\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","
\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, OnInit, Output } from \"@angular/core\";\n\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { Checkable, isChecked } from \"@bitwarden/common/types/checkable\";\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: Checkable[] = [];\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.filter(isChecked).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: Checkable, select?: boolean) {\n c.checked = select == null ? !c.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].checked) {\n return true;\n }\n }\n }\n return false;\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, Input, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/enums/cipherRepromptType\";\nimport { Organization } from \"@bitwarden/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 { VaultItemsComponent } from \"./vault-items.component\";\n\n@Component({\n selector: \"app-vault-bulk-actions\",\n templateUrl: \"bulk-actions.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class BulkActionsComponent {\n @Input() vaultItemsComponent: VaultItemsComponent;\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.vaultItemsComponent.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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeleted.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n }\n );\n }\n\n async bulkRestore() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.vaultItemsComponent.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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onRestored.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n }\n );\n }\n\n async bulkShare() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedCiphers = this.vaultItemsComponent.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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onShared.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n }\n );\n }\n\n async bulkMove() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.vaultItemsComponent.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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onMoved.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n }\n );\n }\n\n selectAll(select: boolean) {\n this.vaultItemsComponent.selectAll(select);\n }\n\n private async promptPassword() {\n const selectedCiphers = this.vaultItemsComponent.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
\n
\n
\n
\n
\n
\n

\n {{ \"vaultItems\" | 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 {\n ChangeDetectorRef,\n Component,\n NgZone,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { VaultFilter } from \"@bitwarden/angular/vault/vault-filter/models/vault-filter.model\";\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { VaultService } from \"../../vault/shared/vault.service\";\nimport { EntityEventsComponent } from \"../manage/entity-events.component\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\nimport { AttachmentsComponent } from \"./attachments.component\";\nimport { CollectionsComponent } from \"./collections.component\";\nimport { VaultFilterComponent } from \"./vault-filter/vault-filter.component\";\nimport { VaultItemsComponent } from \"./vault-items.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(\"vaultFilter\", { static: true })\n vaultFilterComponent: VaultFilterComponent;\n @ViewChild(VaultItemsComponent, { static: true }) vaultItemsComponent: VaultItemsComponent;\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 trashCleanupWarning: string = null;\n activeFilter: VaultFilter = new VaultFilter();\n\n // This is a hack to avoid redundant api calls that fetch OrganizationVaultFilterComponent collections\n // When it makes sense to do so we should leverage some other communication method for change events that isn't directly tied to the query param for organizationId\n // i.e. exposing the VaultFiltersService to the OrganizationSwitcherComponent to make relevant updates from a change event instead of just depending on the router\n firstLoaded = true;\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 private vaultService: VaultService,\n private cipherService: CipherService,\n private passwordRepromptService: PasswordRepromptService\n ) {}\n\n ngOnInit() {\n this.trashCleanupWarning = this.i18nService.t(\n this.platformUtilsService.isSelfHost()\n ? \"trashCleanupWarningSelfHosted\"\n : \"trashCleanupWarning\"\n );\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.params.subscribe(async (params: any) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.vaultFilterComponent.organization = this.organization;\n this.vaultItemsComponent.organization = this.organization;\n\n /* eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe */\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n this.vaultItemsComponent.searchText = this.vaultFilterComponent.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.vaultFilterComponent.reloadCollectionsAndFolders(),\n this.vaultItemsComponent.refresh(),\n ]);\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n }\n\n if (this.firstLoaded) {\n await this.vaultFilterComponent.reloadCollectionsAndFolders();\n }\n this.firstLoaded = true;\n\n await this.vaultItemsComponent.reload();\n\n if (qParams.viewEvents != null) {\n const cipher = this.vaultItemsComponent.ciphers.filter(\n (c) => c.id === qParams.viewEvents\n );\n if (cipher.length > 0) {\n this.viewEvents(cipher[0]);\n }\n }\n\n /* eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe */\n this.route.queryParams.subscribe(async (params) => {\n const cipherId = getCipherIdFromParams(params);\n if (cipherId) {\n if (\n // Handle users with implicit collection access since they use the admin endpoint\n this.organization.canEditAnyCollection ||\n (await this.cipherService.get(cipherId)) != null\n ) {\n this.editCipherId(cipherId);\n } else {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"unknownCipher\")\n );\n this.router.navigate([], {\n queryParams: { cipherId: null, itemId: null },\n queryParamsHandling: \"merge\",\n });\n }\n }\n });\n });\n });\n }\n\n get deleted(): boolean {\n return this.activeFilter.status === \"trash\";\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async applyVaultFilter(vaultFilter: VaultFilter) {\n this.vaultItemsComponent.showAddNew = vaultFilter.status !== \"trash\";\n this.activeFilter = vaultFilter;\n\n // Hack to avoid calling cipherService.getAllFromApiForOrganization every time the vault filter changes.\n // Call VaultItemsComponent.applyFilter directly instead of going through VaultItemsComponent.reload, which\n // reloads all the ciphers unnecessarily. Will be fixed properly by EC-14.\n this.vaultItemsComponent.loaded = false;\n this.vaultItemsComponent.deleted = vaultFilter.status === \"trash\" || false;\n await this.vaultItemsComponent.applyFilter(this.activeFilter.buildFilter());\n this.vaultItemsComponent.loaded = true;\n // End hack\n\n this.vaultFilterComponent.searchPlaceholder =\n this.vaultService.calculateSearchBarLocalizationString(this.activeFilter);\n this.go();\n }\n\n filterSearchText(searchText: string) {\n this.vaultItemsComponent.searchText = searchText;\n this.vaultItemsComponent.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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onUploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onDeletedAttachment.subscribe(() => (madeAttachmentChanges = true));\n }\n );\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n modal.onClosed.subscribe(async () => {\n if (madeAttachmentChanges) {\n await this.vaultItemsComponent.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.vaultFilterComponent.collections.fullList.filter(\n (c) => !c.readOnly && c.id != null\n );\n }\n comp.organization = this.organization;\n comp.cipherId = cipher.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedCollections.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.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.vaultFilterComponent.collections.fullList.filter(\n (c) => !c.readOnly && c.id != null\n );\n }\n if (this.collectionId != null) {\n component.collectionIds = [this.collectionId];\n }\n }\n\n async editCipher(cipher: CipherView) {\n return this.editCipherId(cipher?.id);\n }\n\n async editCipherId(cipherId: string) {\n const cipher = await this.cipherService.get(cipherId);\n if (cipher != null && cipher.reprompt != 0) {\n if (!(await this.passwordRepromptService.showPasswordPrompt())) {\n this.go({ cipherId: null, itemId: null });\n return;\n }\n }\n\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.cipherAddEditModalRef,\n (comp) => {\n comp.organization = this.organization;\n comp.cipherId = cipherId;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeletedCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onRestoredCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n }\n );\n\n modal.onClosedPromise().then(() => {\n this.go({ cipherId: null, itemId: null });\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.vaultFilterComponent.collections.fullList.filter(\n (c) => !c.readOnly && c.id != null\n );\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 go(queryParams: any = null) {\n if (queryParams == null) {\n queryParams = {\n type: this.activeFilter.cipherType,\n collectionId: this.activeFilter.selectedCollectionId,\n deleted: this.deleted ? true : null,\n };\n }\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n queryParamsHandling: \"merge\",\n replaceUrl: true,\n });\n }\n}\n\n/**\n * Allows backwards compatibility with\n * old links that used the original `cipherId` param\n */\nconst getCipherIdFromParams = (params: Params): string => {\n return params[\"itemId\"] || params[\"cipherId\"];\n};\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { VaultComponent } from \"./vault.component\";\nconst routes: Routes = [\n {\n path: \"\",\n component: VaultComponent,\n data: { titleId: \"vaults\" },\n },\n];\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class VaultRoutingModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { OrganizationBadgeModule } from \"../../vault/organization-badge/organization-badge.module\";\nimport { VaultSharedModule } from \"../../vault/shared/vault-shared.module\";\n\nimport { VaultFilterModule } from \"./vault-filter/vault-filter.module\";\nimport { VaultItemsComponent } from \"./vault-items.component\";\nimport { VaultRoutingModule } from \"./vault-routing.module\";\nimport { VaultComponent } from \"./vault.component\";\n\n@NgModule({\n imports: [VaultSharedModule, VaultRoutingModule, VaultFilterModule, OrganizationBadgeModule],\n declarations: [VaultComponent, VaultItemsComponent],\n exports: [VaultComponent],\n})\nexport class VaultModule {}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"@bitwarden/angular/guards/auth.guard\";\nimport {\n canAccessGroupsTab,\n canAccessManageTab,\n canAccessMembersTab,\n canAccessOrgAdmin,\n canManageCollections,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\nimport { OrganizationPermissionsGuard } from \"./guards/org-permissions.guard\";\nimport { OrganizationRedirectGuard } from \"./guards/org-redirect.guard\";\nimport { OrganizationLayoutComponent } from \"./layouts/organization-layout.component\";\nimport { CollectionsComponent } from \"./manage/collections.component\";\nimport { GroupsComponent } from \"./manage/groups.component\";\nimport { ManageComponent } from \"./manage/manage.component\";\nimport { PeopleComponent } from \"./manage/people.component\";\nimport { VaultModule } from \"./vault/vault.module\";\n\nconst routes: Routes = [\n {\n path: \":organizationId\",\n component: OrganizationLayoutComponent,\n canActivate: [AuthGuard, OrganizationPermissionsGuard],\n data: {\n organizationPermissions: canAccessOrgAdmin,\n },\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"vault\" },\n {\n path: \"vault\",\n loadChildren: () => VaultModule,\n },\n {\n path: \"settings\",\n loadChildren: () => import(\"./settings\").then((m) => m.OrganizationSettingsModule),\n },\n {\n path: \"manage\",\n component: ManageComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: canAccessManageTab,\n },\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n canActivate: [OrganizationRedirectGuard],\n data: {\n autoRedirectCallback: getManageRoute,\n },\n children: [], // This is required to make the auto redirect work\n },\n {\n path: \"collections\",\n component: CollectionsComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"collections\",\n organizationPermissions: canManageCollections,\n },\n },\n {\n path: \"groups\",\n component: GroupsComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"groups\",\n organizationPermissions: canAccessGroupsTab,\n },\n },\n {\n path: \"members\",\n component: PeopleComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"members\",\n organizationPermissions: canAccessMembersTab,\n },\n },\n ],\n },\n {\n path: \"reporting\",\n loadChildren: () =>\n import(\"./reporting/organization-reporting.module\").then(\n (m) => m.OrganizationReportingModule\n ),\n },\n {\n path: \"billing\",\n loadChildren: () =>\n import(\"./billing/organization-billing.module\").then((m) => m.OrganizationBillingModule),\n },\n ],\n },\n];\n\nfunction getManageRoute(organization: Organization): string {\n if (organization.canManageUsers) {\n return \"members\";\n }\n if (organization.canViewAssignedCollections || organization.canViewAllCollections) {\n return \"collections\";\n }\n if (organization.canManageGroups) {\n return \"groups\";\n }\n return undefined;\n}\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class OrganizationsRoutingModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { SearchInputComponent } from \"./components/search-input/search-input.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [SearchInputComponent],\n exports: [SharedModule, SearchInputComponent],\n})\nexport class SharedOrganizationModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { AccessSelectorModule } from \"./components/access-selector\";\nimport { OrgUpgradeDialogComponent } from \"./manage/org-upgrade-dialog/org-upgrade-dialog.component\";\nimport { OrganizationsRoutingModule } from \"./organization-routing.module\";\nimport { SharedOrganizationModule } from \"./shared\";\n\n@NgModule({\n imports: [SharedOrganizationModule, AccessSelectorModule, OrganizationsRoutingModule],\n declarations: [OrgUpgradeDialogComponent],\n})\nexport class OrganizationModule {}\n","export enum PlanSponsorshipType {\n FamiliesForEnterprise = 0,\n}\n","
\n
\n \"Bitwarden\"\n

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

\n
\n
\n","import { Component } from \"@angular/core\";\nimport { Params } from \"@angular/router\";\n\nimport { BaseAcceptComponent } from \"../../common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-family-sponsorship\",\n templateUrl: \"accept-family-sponsorship.component.html\",\n})\nexport class AcceptFamilySponsorshipComponent extends BaseAcceptComponent {\n failedShortMessage = \"inviteAcceptFailedShort\";\n failedMessage = \"inviteAcceptFailed\";\n\n requiredParameters = [\"email\", \"token\"];\n\n async authedHandler(qParams: Params) {\n this.router.navigate([\"/setup/families-for-enterprise\"], { queryParams: qParams });\n }\n\n async unauthedHandler(qParams: Params) {\n if (!qParams.register) {\n this.router.navigate([\"/login\"], { queryParams: { email: qParams.email } });\n } else {\n this.router.navigate([\"/register\"], { queryParams: { email: qParams.email } });\n }\n }\n}\n","import { PlanSponsorshipType } from \"../../../enums/planSponsorshipType\";\n\nexport class OrganizationSponsorshipRedeemRequest {\n planSponsorshipType: PlanSponsorshipType;\n sponsoredOrganizationId: string;\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, OnDestroy, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { Observable, Subject } from \"rxjs\";\nimport { first, map, takeUntil } from \"rxjs/operators\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { PlanSponsorshipType } from \"@bitwarden/common/enums/planSponsorshipType\";\nimport { PlanType } from \"@bitwarden/common/enums/planType\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { OrganizationSponsorshipRedeemRequest } from \"@bitwarden/common/models/request/organization/organization-sponsorship-redeem.request\";\n\nimport { DeleteOrganizationComponent } from \"../../organizations/settings\";\nimport { OrganizationPlansComponent } from \"../../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, OnDestroy {\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 existingFamilyOrganizations$: Observable;\n\n showNewOrganization = false;\n _organizationPlansComponent: OrganizationPlansComponent;\n _selectedFamilyOrganizationId = \"\";\n\n private _destroy = new Subject();\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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\n this.existingFamilyOrganizations$ = this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter((o) => o.planProductType === ProductType.Families))\n );\n\n this.existingFamilyOrganizations$.pipe(takeUntil(this._destroy)).subscribe((orgs) => {\n if (orgs.length === 0) {\n this.selectedFamilyOrganizationId = \"createNew\";\n }\n });\n }\n\n ngOnDestroy(): void {\n this._destroy.next();\n this._destroy.complete();\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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","import { SendType } from \"../../enums/sendType\";\nimport { SendAccess } from \"../domain/send-access\";\n\nimport { SendFileView } from \"./send-file.view\";\nimport { SendTextView } from \"./send-text.view\";\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 { SendType } from \"../../enums/sendType\";\nimport { SendAccessResponse } from \"../response/send-access.response\";\nimport { SendAccessView } from \"../view/send-access.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SendFile } from \"./send-file\";\nimport { SendText } from \"./send-text\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\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) {\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 [\"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);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file);\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","export class SendAccessRequest {\n password: string;\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 { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SEND_KDF_ITERATIONS } from \"@bitwarden/common/enums/kdfType\";\nimport { SendType } from \"@bitwarden/common/enums/sendType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EncArrayBuffer } from \"@bitwarden/common/models/domain/enc-array-buffer\";\nimport { SendAccess } from \"@bitwarden/common/models/domain/send-access\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { SendAccessRequest } from \"@bitwarden/common/models/request/send-access.request\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { SendAccessResponse } from \"@bitwarden/common/models/response/send-access.response\";\nimport { SendAccessView } from \"@bitwarden/common/models/view/send-access.view\";\n\n@Component({\n selector: \"app-send-access\",\n templateUrl: \"access.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 private fileDownloadService: FileDownloadService\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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 encBuf = await EncArrayBuffer.fromResponse(response);\n const decBuf = await this.cryptoService.decryptFromBytes(encBuf, this.decKey);\n this.fileDownloadService.download({\n fileName: this.send.file.fileName,\n blobData: decBuf,\n downloadMethod: \"save\",\n });\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","import { Directive, NgZone, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { SendService } from \"@bitwarden/common/abstractions/send.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { SendType } from \"@bitwarden/common/enums/sendType\";\nimport { SendView } from \"@bitwarden/common/models/view/send.view\";\n\n@Directive()\nexport class SendComponent implements OnInit, OnDestroy {\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 private destroy$ = new Subject();\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.policyService\n .policyAppliesToActiveUser$(PolicyType.DisableSend)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n this.disableSend = policyAppliesToActiveUser;\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\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 { DatePipe } from \"@angular/common\";\nimport { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { UntypedFormControl, UntypedFormGroup } from \"@angular/forms\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/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 UntypedFormGroup({\n selectedDeletionDatePreset: new UntypedFormControl(),\n selectedExpirationDatePreset: new UntypedFormControl(),\n defaultDeletionDateTime: new UntypedFormControl(),\n defaultExpirationDateTime: new UntypedFormControl(),\n fallbackDeletionDate: new UntypedFormControl(),\n fallbackDeletionTime: new UntypedFormControl(),\n fallbackExpirationDate: new UntypedFormControl(),\n fallbackExpirationTime: new UntypedFormControl(),\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(): UntypedFormControl {\n return this.datesForm.get(\"selectedDeletionDatePreset\") as UntypedFormControl;\n }\n\n get selectedExpirationDatePreset(): UntypedFormControl {\n return this.datesForm.get(\"selectedExpirationDatePreset\") as UntypedFormControl;\n }\n\n get defaultDeletionDateTime(): UntypedFormControl {\n return this.datesForm.get(\"defaultDeletionDateTime\") as UntypedFormControl;\n }\n\n get defaultExpirationDateTime(): UntypedFormControl {\n return this.datesForm.get(\"defaultExpirationDateTime\") as UntypedFormControl;\n }\n\n get fallbackDeletionDate(): UntypedFormControl {\n return this.datesForm.get(\"fallbackDeletionDate\") as UntypedFormControl;\n }\n\n get fallbackDeletionTime(): UntypedFormControl {\n return this.datesForm.get(\"fallbackDeletionTime\") as UntypedFormControl;\n }\n\n get fallbackExpirationDate(): UntypedFormControl {\n return this.datesForm.get(\"fallbackExpirationDate\") as UntypedFormControl;\n }\n\n get fallbackExpirationTime(): UntypedFormControl {\n return this.datesForm.get(\"fallbackExpirationTime\") as UntypedFormControl;\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 { DatePipe } from \"@angular/common\";\nimport { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SendService } from \"@bitwarden/common/abstractions/send.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { SendType } from \"@bitwarden/common/enums/sendType\";\nimport { EncArrayBuffer } from \"@bitwarden/common/models/domain/enc-array-buffer\";\nimport { Send } from \"@bitwarden/common/models/domain/send\";\nimport { SendFileView } from \"@bitwarden/common/models/view/send-file.view\";\nimport { SendTextView } from \"@bitwarden/common/models/view/send-text.view\";\nimport { SendView } from \"@bitwarden/common/models/view/send.view\";\n\n@Directive()\nexport class AddEditComponent implements OnInit, OnDestroy {\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 protected componentName = \"\";\n private sendLinkBaseUrl: string;\n private destroy$ = new Subject();\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 this.policyService\n .policyAppliesToActiveUser$(PolicyType.DisableSend)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n this.disableSend = policyAppliesToActiveUser;\n });\n\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.SendOptions, (p) => p.data.disableHideEmail)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n this.disableHideEmail = policyAppliesToActiveUser;\n });\n\n await this.load();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\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.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 false,\n this.componentName != \"\" ? this.componentName + \" .modal-content\" : null\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","
\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 { DatePipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\nimport { ControlContainer, NgForm } from \"@angular/forms\";\n\nimport { EffluxDatesComponent as BaseEffluxDatesComponent } from \"@bitwarden/angular/components/send/efflux-dates.component\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/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

{{ 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

\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\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"@bitwarden/angular/components/send/add-edit.component\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SendService } from \"@bitwarden/common/abstractions/send.service\";\nimport { StateService } from \"@bitwarden/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 override componentName = \"app-send-add-edit\";\n\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 {{ \"sendDisabledWarning\" | i18n }}\n \n
\n
\n
\n
\n {{ \"filters\" | i18n }}\n
\n
\n \n
\n
    \n
  • \n \n \n \n
  • \n
\n
\n
\n
\n

{{ \"types\" | i18n }}

\n
\n
    \n
  • \n \n \n \n
  • \n
  • \n \n \n \n
  • \n
\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 \n
\n
\n \n \n {{ \"loading\" | i18n }}\n \n \n \n

{{ \"noSendsInList\" | i18n }}

\n \n
\n
\n
\n
\n
\n\n","import { Component, NgZone, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { SendComponent as BaseSendComponent } from \"@bitwarden/angular/components/send/send.component\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { SendService } from \"@bitwarden/common/abstractions/send.service\";\nimport { SendView } from \"@bitwarden/common/models/view/send.view\";\nimport { Icons } from \"@bitwarden/components\";\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 noItemIcon = Icons.Search;\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedSend.subscribe(async () => {\n modal.close();\n await this.load();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeletedSend.subscribe(async () => {\n modal.close();\n await this.load();\n });\n }\n );\n\n return childComponent;\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { Verification } from \"@bitwarden/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\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { AccountApiService } from \"@bitwarden/common/abstractions/account/account-api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\n@Component({\n selector: \"app-delete-account\",\n templateUrl: \"delete-account.component.html\",\n})\nexport class DeleteAccountComponent {\n formPromise: Promise;\n\n deleteForm = this.formBuilder.group({\n verification: undefined as Verification | undefined,\n });\n\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private formBuilder: FormBuilder,\n private accountApiService: AccountApiService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const verification = this.deleteForm.get(\"verification\").value;\n this.formPromise = this.accountApiService.deleteAccount(verification);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"accountDeleted\"),\n this.i18nService.t(\"accountDeletedDesc\")\n );\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 { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class EmailTokenRequest extends SecretVerificationRequest {\n newEmail: string;\n masterPasswordHash: string;\n}\n","import { EmailTokenRequest } from \"./email-token.request\";\n\nexport class EmailRequest extends EmailTokenRequest {\n newMasterPasswordHash: string;\n token: string;\n key: string;\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 \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { EmailTokenRequest } from \"@bitwarden/common/models/request/email-token.request\";\nimport { EmailRequest } from \"@bitwarden/common/models/request/email.request\";\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","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 { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\n@Component({\n selector: \"selectable-avatar\",\n template: `\n \n \n `,\n})\nexport class SelectableAvatarComponent {\n @Input() id: string;\n @Input() text: string;\n @Input() title: string;\n @Input() color: string;\n @Input() border = false;\n @Input() selected = false;\n @Output() select = new EventEmitter();\n\n onFire() {\n this.select.emit(this.color);\n }\n\n get classList() {\n return [\"tw-rounded-full tw-inline-block\"]\n .concat([\"tw-cursor-pointer\", \"tw-outline\", \"tw-outline-solid\", \"tw-outline-offset-1\"])\n .concat(\n this.selected\n ? [\"tw-outline-[3px]\", \"tw-outline-primary-500\"]\n : [\n \"tw-outline-0\",\n \"hover:tw-outline-1\",\n \"hover:tw-outline-primary-300\",\n \"focus:tw-outline-2\",\n \"focus:tw-outline-primary-500\",\n ]\n );\n }\n}\n","
\n
\n
\n
\n

{{ \"customizeAvatar\" | i18n }}

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

{{ \"pickAnAvatarColor\" | i18n }}

\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","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport { BehaviorSubject, debounceTime, Subject, takeUntil } from \"rxjs\";\n\nimport { AvatarUpdateService } from \"@bitwarden/common/abstractions/account/avatar-update.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { ProfileResponse } from \"@bitwarden/common/models/response/profile.response\";\n\n@Component({\n selector: \"app-change-avatar\",\n templateUrl: \"change-avatar.component.html\",\n encapsulation: ViewEncapsulation.None,\n})\nexport class ChangeAvatarComponent implements OnInit, OnDestroy {\n @Input() profile: ProfileResponse;\n\n @Output() changeColor: EventEmitter = new EventEmitter();\n @Output() onSaved = new EventEmitter();\n\n @ViewChild(\"colorPicker\") colorPickerElement: ElementRef;\n\n loading = false;\n error: string;\n defaultColorPalette: NamedAvatarColor[] = [\n { name: \"brightBlue\", color: \"#16cbfc\" },\n { name: \"green\", color: \"#94cc4b\" },\n { name: \"orange\", color: \"#ffb520\" },\n { name: \"lavender\", color: \"#e5beed\" },\n { name: \"yellow\", color: \"#fcff41\" },\n { name: \"indigo\", color: \"#acbdf7\" },\n { name: \"teal\", color: \"#8ecdc5\" },\n { name: \"salmon\", color: \"#ffa3a3\" },\n { name: \"pink\", color: \"#ffa2d4\" },\n ];\n customColorSelected = false;\n currentSelection: string;\n\n protected customColor$ = new BehaviorSubject(null);\n protected customTextColor$ = new BehaviorSubject(\"#000000\");\n private destroy$ = new Subject();\n\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService,\n private accountUpdateService: AvatarUpdateService\n ) {}\n\n async ngOnInit() {\n //localize the default colors\n this.defaultColorPalette.forEach((c) => (c.name = this.i18nService.t(c.name)));\n\n this.customColor$\n .pipe(debounceTime(200), takeUntil(this.destroy$))\n .subscribe((color: string | null) => {\n if (color == null) {\n return;\n }\n this.customTextColor$.next(Utils.pickTextColorBasedOnBgColor(color));\n this.customColorSelected = true;\n this.currentSelection = color;\n });\n\n this.setSelection(await this.accountUpdateService.loadColorFromState());\n }\n\n async showCustomPicker() {\n this.customColorSelected = true;\n this.colorPickerElement.nativeElement.click();\n this.setSelection(this.customColor$.value);\n }\n\n async generateAvatarColor() {\n Utils.stringToColor(this.profile.name.toString());\n }\n\n async submit() {\n try {\n if (Utils.validateHexColor(this.currentSelection) || this.currentSelection == null) {\n await this.accountUpdateService.pushUpdate(this.currentSelection);\n this.changeColor.emit(this.currentSelection);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"avatarUpdated\"));\n } else {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n } catch (e) {\n this.logService.error(e);\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n }\n\n async ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async setSelection(color: string | null) {\n this.defaultColorPalette.filter((x) => x.selected).forEach((c) => (c.selected = false));\n\n if (color == null) {\n return;\n }\n\n color = color.toLowerCase();\n\n this.customColorSelected = false;\n //Allow for toggle\n if (this.currentSelection === color) {\n this.currentSelection = null;\n } else {\n const selectedColorIndex = this.defaultColorPalette.findIndex((c) => c.color === color);\n if (selectedColorIndex !== -1) {\n this.defaultColorPalette[selectedColorIndex].selected = true;\n this.currentSelection = color;\n } else {\n this.customColor$.next(color);\n }\n }\n }\n}\n\nexport class NamedAvatarColor {\n name: string;\n color: string;\n selected? = false;\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 Customize\n \n
\n
\n

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

\n
\n
\n \n\n\n","import { ViewChild, ViewContainerRef, Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UpdateProfileRequest } from \"@bitwarden/common/models/request/update-profile.request\";\nimport { ProfileResponse } from \"@bitwarden/common/models/response/profile.response\";\n\nimport { ChangeAvatarComponent } from \"./change-avatar.component\";\n\n@Component({\n selector: \"app-profile\",\n templateUrl: \"profile.component.html\",\n})\nexport class ProfileComponent implements OnInit, OnDestroy {\n loading = true;\n profile: ProfileResponse;\n fingerprint: string;\n\n formPromise: Promise;\n @ViewChild(\"avatarModalTemplate\", { read: ViewContainerRef, static: true })\n avatarModalRef: ViewContainerRef;\n private destroy$ = new Subject();\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 private modalService: ModalService\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 }\n\n async ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async openChangeAvatar() {\n const modalOpened = await this.modalService.openViewRef(\n ChangeAvatarComponent,\n this.avatarModalRef,\n (modal) => {\n modal.profile = this.profile;\n modal.changeColor.pipe(takeUntil(this.destroy$)).subscribe(() => {\n modalOpened[0].close();\n });\n }\n );\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

{{ \"myAccount\" | i18n }}

\n
\n\n\n
\n

{{ \"changeEmail\" | 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 { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\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\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 = !(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","import { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { PlanType } from \"@bitwarden/common/enums/planType\";\nimport { ProductType } from \"@bitwarden/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})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class CreateOrganizationComponent implements OnInit {\n @ViewChild(OrganizationPlansComponent, { static: true })\n orgPlansComponent: OrganizationPlansComponent;\n\n constructor(private route: ActivatedRoute) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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
\n
\n
\n

{{ \"newOrganization\" | i18n }}

\n
\n

{{ \"newOrganizationDesc\" | i18n }}

\n \n
\n
\n
\n","export class UpdateDomainsRequest {\n equivalentDomains: string[][];\n excludedGlobalEquivalentDomains: number[];\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, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UpdateDomainsRequest } from \"@bitwarden/common/models/request/update-domains.request\";\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","import { Component } from \"@angular/core\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"@bitwarden/angular/components/attachments.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { AttachmentView } from \"@bitwarden/common/models/view/attachment.view\";\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 fileDownloadService: FileDownloadService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n platformUtilsService,\n apiService,\n window,\n logService,\n stateService,\n fileDownloadService\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 } from \"@angular/core\";\n\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { Cipher } from \"@bitwarden/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 protected override componentName = \"app-org-vault-add-edit\";\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 eventCollectionService: EventCollectionService,\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 eventCollectionService,\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","
\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\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { CipherData } from \"@bitwarden/common/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { EmergencyAccessViewResponse } from \"@bitwarden/common/models/response/emergency-access.response\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\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})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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","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 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","import { EmergencyAccessType } from \"../../enums/emergencyAccessType\";\n\nexport class EmergencyAccessUpdateRequest {\n type: EmergencyAccessType;\n waitTimeDays: number;\n keyEncrypted?: string;\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 {{ \"save\" | i18n }}\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 \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { EmergencyAccessType } from \"@bitwarden/common/enums/emergencyAccessType\";\nimport { EmergencyAccessInviteRequest } from \"@bitwarden/common/models/request/emergency-access-invite.request\";\nimport { EmergencyAccessUpdateRequest } from \"@bitwarden/common/models/request/emergency-access-update.request\";\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","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/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","export class EmergencyAccessPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\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, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { takeUntil } from \"rxjs\";\n\nimport { ChangePasswordComponent } from \"@bitwarden/angular/components/change-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { KdfType } from \"@bitwarden/common/enums/kdfType\";\nimport { PolicyData } from \"@bitwarden/common/models/data/policy.data\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { EmergencyAccessPasswordRequest } from \"@bitwarden/common/models/request/emergency-access-password.request\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policy.response\";\n\n@Component({\n selector: \"emergency-access-takeover\",\n templateUrl: \"emergency-access-takeover.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class EmergencyAccessTakeoverComponent\n extends ChangePasswordComponent\n implements OnInit, OnDestroy\n{\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\n this.policyService\n .masterPasswordPolicyOptions$(policies)\n .pipe(takeUntil(this.destroy$))\n .subscribe((enforcedPolicyOptions) => (this.enforcedPolicyOptions = enforcedPolicyOptions));\n }\n }\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n ngOnDestroy(): void {\n super.ngOnDestroy();\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

{{ \"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 {{ c.email }}\n {{ \"invited\" | i18n }}\n {{ \"accepted\" | i18n }}\n {{ \"emergencyAccessRecoveryInitiated\" | i18n }}\n {{\n \"emergencyAccessRecoveryApproved\" | i18n\n }}\n\n {{ \"view\" | i18n }}\n {{\n \"takeover\" | i18n\n }}\n\n {{ c.name }}\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
\n\n\n

{{ \"noTrustedContacts\" | i18n }}

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

{{ \"designatedEmergencyContacts\" | i18n }}

\n
\n\n\n \n \n \n \n \n \n \n
\n \n \n {{ c.email }}\n {{\n \"invited\" | i18n\n }}\n {{ \"accepted\" | i18n }}\n {{ \"emergencyAccessRecoveryInitiated\" | i18n }}\n {{ \"emergencyAccessRecoveryApproved\" | i18n }}\n\n {{ \"view\" | i18n }}\n {{\n \"takeover\" | i18n\n }}\n\n {{ c.name }}\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
\n\n\n

{{ \"noGrantedAccess\" | i18n }}

\n \n \n {{ \"loading\" | i18n }}\n \n
\n\n\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { EmergencyAccessStatusType } from \"@bitwarden/common/enums/emergencyAccessStatusType\";\nimport { EmergencyAccessType } from \"@bitwarden/common/enums/emergencyAccessType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EmergencyAccessConfirmRequest } from \"@bitwarden/common/models/request/emergency-access-confirm.request\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n} from \"@bitwarden/common/models/response/emergency-access.response\";\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})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 loaded = false;\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 this.loaded = true;\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onSaved.subscribe(() => {\n modal.close();\n this.load();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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","import { Directive, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n ValidationErrors,\n Validator,\n} from \"@angular/forms\";\nimport { combineLatestWith, Subject, takeUntil } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\n\n@Directive()\nexport class VaultTimeoutInputComponent\n implements ControlValueAccessor, Validator, OnInit, OnDestroy\n{\n get showCustom() {\n return this.form.get(\"vaultTimeout\").value === VaultTimeoutInputComponent.CUSTOM_VALUE;\n }\n\n get exceedsMinimumTimout(): boolean {\n return (\n !this.showCustom || this.customTimeInMinutes() > VaultTimeoutInputComponent.MIN_CUSTOM_MINUTES\n );\n }\n\n static CUSTOM_VALUE = -100;\n static MIN_CUSTOM_MINUTES = 0;\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 private destroy$ = new Subject();\n\n constructor(\n private formBuilder: FormBuilder,\n private policyService: PolicyService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.MaximumVaultTimeout)\n .pipe(combineLatestWith(this.policyService.policies$), takeUntil(this.destroy$))\n .subscribe(([policyAppliesToActiveUser, policies]) => {\n if (policyAppliesToActiveUser) {\n const vaultTimeoutPolicy = policies.find(\n (policy) => policy.type === PolicyType.MaximumVaultTimeout && policy.enabled\n );\n\n this.vaultTimeoutPolicy = vaultTimeoutPolicy;\n this.applyVaultTimeoutPolicy();\n }\n });\n\n // eslint-disable-next-line rxjs/no-async-subscribe\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 ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\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 if (!this.exceedsMinimumTimout) {\n return { minTimeoutError: true };\n }\n\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange = fn;\n }\n\n private customTimeInMinutes() {\n return this.form.value.custom.hours * 60 + this.form.value.custom.minutes;\n }\n\n private applyVaultTimeoutPolicy() {\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","\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 {{ \"vaultCustomTimeoutMinimum\" | i18n }}\n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\nimport { VaultTimeoutInputComponent as VaultTimeoutInputComponentBase } from \"@bitwarden/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

{{ \"preferences\" | i18n }}

\n
\n

{{ \"preferencesDesc\" | 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 {{ \"faviconDesc\" | 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, OnInit } from \"@angular/core\";\nimport { UntypedFormControl } from \"@angular/forms\";\n\nimport { AbstractThemingService } from \"@bitwarden/angular/services/theming/theming.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { ThemeType } from \"@bitwarden/common/enums/themeType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Component({\n selector: \"app-preferences\",\n templateUrl: \"preferences.component.html\",\n})\nexport class PreferencesComponent implements OnInit {\n vaultTimeoutAction = \"lock\";\n enableFavicons: 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: UntypedFormControl = new UntypedFormControl(null);\n\n private startingLocale: string;\n private startingTheme: ThemeType;\n\n constructor(\n private stateService: StateService,\n private i18nService: I18nService,\n private vaultTimeoutSettingsService: VaultTimeoutSettingsService,\n private platformUtilsService: PlatformUtilsService,\n private messagingService: MessagingService,\n private themingService: AbstractThemingService\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.vaultTimeoutSettingsService.getVaultTimeout());\n this.vaultTimeoutAction = await this.stateService.getVaultTimeoutAction();\n this.enableFavicons = !(await this.stateService.getDisableFavicon());\n this.enableFullWidth = await this.stateService.getEnableFullWidth();\n\n this.locale = (await this.stateService.getLocale()) ?? null;\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(\n \"error\",\n null,\n this.i18nService.t(\"vaultTimeoutRangeError\")\n );\n return;\n }\n\n await this.vaultTimeoutSettingsService.setVaultTimeoutOptions(\n this.vaultTimeout.value,\n this.vaultTimeoutAction\n );\n await this.stateService.setDisableFavicon(!this.enableFavicons);\n await this.stateService.setEnableFullWidth(this.enableFullWidth);\n this.messagingService.send(\"setFullWidth\");\n if (this.theme !== this.startingTheme) {\n await this.themingService.updateConfiguredTheme(this.theme);\n this.startingTheme = this.theme;\n }\n await this.stateService.setLocale(this.locale);\n if (this.locale !== this.startingLocale) {\n window.location.reload();\n } else {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"preferencesUpdated\")\n );\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","import { Folder } from \"../domain/folder\";\n\nimport { FolderRequest } from \"./folder.request\";\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 { Send } from \"../domain/send\";\n\nimport { SendRequest } from \"./send.request\";\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 { CipherWithIdRequest } from \"./cipher-with-id.request\";\nimport { FolderWithIdRequest } from \"./folder-with-id.request\";\nimport { SendWithIdRequest } from \"./send-with-id.request\";\n\nexport class UpdateKeyRequest {\n ciphers: CipherWithIdRequest[] = [];\n folders: FolderWithIdRequest[] = [];\n sends: SendWithIdRequest[] = [];\n masterPasswordHash: string;\n privateKey: string;\n key: string;\n}\n","
\n

{{ \"changeMasterPassword\" | i18n }}

\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 \n
\n
\n \n
\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"@bitwarden/angular/components/change-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SendService } from \"@bitwarden/common/abstractions/send.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { EmergencyAccessStatusType } from \"@bitwarden/common/enums/emergencyAccessStatusType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { CipherWithIdRequest } from \"@bitwarden/common/models/request/cipher-with-id.request\";\nimport { EmergencyAccessUpdateRequest } from \"@bitwarden/common/models/request/emergency-access-update.request\";\nimport { FolderWithIdRequest } from \"@bitwarden/common/models/request/folder-with-id.request\";\nimport { PasswordRequest } from \"@bitwarden/common/models/request/password.request\";\nimport { SendWithIdRequest } from \"@bitwarden/common/models/request/send-with-id.request\";\nimport { UpdateKeyRequest } from \"@bitwarden/common/models/request/update-key.request\";\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 masterPasswordHint: 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 private keyConnectorService: KeyConnectorService,\n private router: Router,\n private organizationApiService: OrganizationApiServiceAbstraction,\n private organizationUserService: OrganizationUserService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n if (await this.keyConnectorService.getUsesKeyConnector()) {\n this.router.navigate([\"/settings/security/two-factor\"]);\n }\n\n this.masterPasswordHint = (await this.apiService.getProfile()).masterPasswordHint;\n await super.ngOnInit();\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(\"masterPasswordRequired\")\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.masterPasswordHint = this.masterPasswordHint;\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 firstValueFrom(this.folderService.folderViews$);\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], masterPasswordHash);\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, masterPasswordHash: string) {\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.organizationApiService.getKeys(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.masterPasswordHash = masterPasswordHash;\n request.resetPasswordKey = encryptedKey.encryptedString;\n\n await this.organizationUserService.putOrganizationUserResetPasswordEnrollment(\n org.id,\n org.userId,\n request\n );\n }\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { PasswordRequest } from \"./password.request\";\n\nexport class KdfRequest extends PasswordRequest {\n kdf: KdfType;\n kdfIterations: number;\n}\n","
\n

{{ \"encKeySettings\" | i18n }}

\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, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { DEFAULT_KDF_ITERATIONS, KdfType } from \"@bitwarden/common/enums/kdfType\";\nimport { KdfRequest } from \"@bitwarden/common/models/request/kdf.request\";\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","\n\n

{{ \"apiKey\" | i18n }}

\n\n

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

\n\n\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\nimport { ApiKeyComponent } from \"./api-key.component\";\n\n@Component({\n selector: \"app-security-keys\",\n templateUrl: \"security-keys.component.html\",\n})\nexport class SecurityKeysComponent implements OnInit {\n @ViewChild(\"viewUserApiKeyTemplate\", { read: ViewContainerRef, static: true })\n viewUserApiKeyModalRef: ViewContainerRef;\n @ViewChild(\"rotateUserApiKeyTemplate\", { read: ViewContainerRef, static: true })\n rotateUserApiKeyModalRef: ViewContainerRef;\n\n showChangeKdf = true;\n\n constructor(\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private modalService: ModalService,\n private apiService: ApiService\n ) {}\n\n async ngOnInit() {\n this.showChangeKdf = !(await this.keyConnectorService.getUsesKeyConnector());\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\n","import { Component } from \"@angular/core\";\n\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\n\n@Component({\n selector: \"app-security\",\n templateUrl: \"security.component.html\",\n})\nexport class SecurityComponent {\n showChangePassword = true;\n\n constructor(private keyConnectorService: KeyConnectorService) {}\n\n async ngOnInit() {\n this.showChangePassword = !(await this.keyConnectorService.getUsesKeyConnector());\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { ChangePasswordComponent } from \"./change-password.component\";\nimport { SecurityKeysComponent } from \"./security-keys.component\";\nimport { SecurityComponent } from \"./security.component\";\nimport { TwoFactorSetupComponent } from \"./two-factor-setup.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: SecurityComponent,\n data: { titleId: \"security\" },\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"change-password\" },\n {\n path: \"change-password\",\n component: ChangePasswordComponent,\n data: { titleId: \"masterPassword\" },\n },\n {\n path: \"two-factor\",\n component: TwoFactorSetupComponent,\n data: { titleId: \"twoStepLogin\" },\n },\n {\n path: \"security-keys\",\n component: SecurityKeysComponent,\n data: { titleId: \"keys\" },\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class SecurityRoutingModule {}\n","
\n
\n
\n
\n
{{ \"accountSettings\" | i18n }}
\n \n
\n
\n
\n \n
\n
\n
\n","import { Component, NgZone, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\n\nimport { StateService } from \"../core\";\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 hideSubscription: 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 private stateService: StateService,\n private apiService: ApiService\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.stateService.getHasPremiumPersonally();\n this.hasFamilySponsorshipAvailable = await this.organizationService.canManageSponsorships();\n const hasPremiumFromOrg = await this.stateService.getHasPremiumFromOrganization();\n let billing = null;\n if (!this.selfHosted) {\n billing = await this.apiService.getUserBillingHistory();\n }\n this.hideSubscription =\n !this.premium && hasPremiumFromOrg && (this.selfHosted || billing?.hasNoHistory);\n }\n}\n","import { AbstractControl, AsyncValidatorFn, ValidationErrors } from \"@angular/forms\";\n\nexport function notAllowedValueAsync(\n valueGetter: () => Promise,\n caseInsensitive = false\n): AsyncValidatorFn {\n return async (control: AbstractControl): Promise => {\n let notAllowedValue = await valueGetter();\n let controlValue = control.value;\n if (caseInsensitive) {\n notAllowedValue = notAllowedValue.toLowerCase();\n controlValue = controlValue.toLowerCase();\n }\n\n if (controlValue === notAllowedValue) {\n return {\n notAllowedValue: true,\n };\n }\n };\n}\n","\n {{ sponsoringOrg.familySponsorshipFriendlyName }}\n\n{{ sponsoringOrg.name }}\n\n {{ statusMessage }}\n\n\n
\n \n \n \n
\n \n \n {{ \"resendEmail\" | i18n }}\n \n \n \n {{ \"remove\" | i18n }}\n \n
\n
\n\n","import { formatDate } from \"@angular/common\";\nimport { Component, EventEmitter, Input, Output, OnInit } from \"@angular/core\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"[sponsoring-org-row]\",\n templateUrl: \"sponsoring-org-row.component.html\",\n})\nexport class SponsoringOrgRowComponent implements OnInit {\n @Input() sponsoringOrg: Organization = null;\n @Input() isSelfHosted = false;\n\n @Output() sponsorshipRemoved = new EventEmitter();\n\n statusMessage = \"loading\";\n statusClass: \"text-success\" | \"text-danger\" = \"text-success\";\n\n revokeSponsorshipPromise: Promise;\n resendEmailPromise: Promise;\n\n private locale = \"\";\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private logService: LogService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n async ngOnInit() {\n this.locale = await firstValueFrom(this.i18nService.locale$);\n\n this.setStatus(\n this.isSelfHosted,\n this.sponsoringOrg.familySponsorshipToDelete,\n this.sponsoringOrg.familySponsorshipValidUntil,\n this.sponsoringOrg.familySponsorshipLastSyncDate\n );\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 get isSentAwaitingSync() {\n return this.isSelfHosted && !this.sponsoringOrg.familySponsorshipLastSyncDate;\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 private setStatus(\n selfHosted: boolean,\n toDelete?: boolean,\n validUntil?: Date,\n lastSyncDate?: Date\n ) {\n /*\n * Possible Statuses:\n * Requested (self-hosted only)\n * Sent\n * Active\n * RequestRevoke\n * RevokeWhenExpired\n */\n\n if (toDelete && validUntil) {\n // They want to delete but there is a valid until date which means there is an active sponsorship\n this.statusMessage = this.i18nService.t(\n \"revokeWhenExpired\",\n formatDate(validUntil, \"MM/dd/yyyy\", this.locale)\n );\n this.statusClass = \"text-danger\";\n } else if (toDelete) {\n // They want to delete and we don't have a valid until date so we can\n // this should only happen on a self-hosted install\n this.statusMessage = this.i18nService.t(\"requestRemoved\");\n this.statusClass = \"text-danger\";\n } else if (validUntil) {\n // They don't want to delete and they have a valid until date\n // that means they are actively sponsoring someone\n this.statusMessage = this.i18nService.t(\"active\");\n this.statusClass = \"text-success\";\n } else if (selfHosted && lastSyncDate) {\n // We are on a self-hosted install and it has been synced but we have not gotten\n // a valid until date so we can't know if they are actively sponsoring someone\n this.statusMessage = this.i18nService.t(\"sent\");\n this.statusClass = \"text-success\";\n } else if (!selfHosted) {\n // We are in cloud and all other status checks have been false therefore we have\n // sent the request but it hasn't been accepted yet\n this.statusMessage = this.i18nService.t(\"sent\");\n this.statusClass = \"text-success\";\n } else {\n // We are on a self-hosted install and we have not synced yet\n this.statusMessage = this.i18nService.t(\"requested\");\n this.statusClass = \"text-success\";\n }\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 }}{{ \"status\" | i18n }}
\n
\n {{ \"sponsoredFamiliesLeaveCopy\" | i18n }}\n
\n\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { FormBuilder, FormControl, FormGroup, Validators } from \"@angular/forms\";\nimport { map, Observable, Subject, takeUntil } from \"rxjs\";\n\nimport { notAllowedValueAsync } from \"@bitwarden/angular/validators/notAllowedValueAsync.validator\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { PlanSponsorshipType } from \"@bitwarden/common/enums/planSponsorshipType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\ninterface RequestSponsorshipForm {\n selectedSponsorshipOrgId: FormControl;\n sponsorshipEmail: FormControl;\n}\n\n@Component({\n selector: \"app-sponsored-families\",\n templateUrl: \"sponsored-families.component.html\",\n})\nexport class SponsoredFamiliesComponent implements OnInit, OnDestroy {\n loading = false;\n\n availableSponsorshipOrgs$: Observable;\n activeSponsorshipOrgs$: Observable;\n anyOrgsAvailable$: Observable;\n anyActiveSponsorships$: Observable;\n\n // Conditional display properties\n formPromise: Promise;\n\n sponsorshipForm: FormGroup;\n\n private _destroy = new Subject();\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private syncService: SyncService,\n private organizationService: OrganizationService,\n private formBuilder: FormBuilder,\n private stateService: StateService\n ) {\n this.sponsorshipForm = this.formBuilder.group({\n selectedSponsorshipOrgId: new FormControl(\"\", {\n validators: [Validators.required],\n }),\n sponsorshipEmail: new FormControl(\"\", {\n validators: [Validators.email],\n asyncValidators: [\n notAllowedValueAsync(async () => await this.stateService.getEmail(), true),\n ],\n updateOn: \"blur\",\n }),\n });\n }\n\n async ngOnInit() {\n this.availableSponsorshipOrgs$ = this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter((o) => o.familySponsorshipAvailable))\n );\n\n this.availableSponsorshipOrgs$.pipe(takeUntil(this._destroy)).subscribe((orgs) => {\n if (orgs.length === 1) {\n this.sponsorshipForm.patchValue({\n selectedSponsorshipOrgId: orgs[0].id,\n });\n }\n });\n\n this.anyOrgsAvailable$ = this.availableSponsorshipOrgs$.pipe(map((orgs) => orgs.length > 0));\n\n this.activeSponsorshipOrgs$ = this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter((o) => o.familySponsorshipFriendlyName !== null))\n );\n\n this.anyActiveSponsorships$ = this.activeSponsorshipOrgs$.pipe(map((orgs) => orgs.length > 0));\n\n this.loading = false;\n }\n\n ngOnDestroy(): void {\n this._destroy.next();\n this._destroy.complete();\n }\n\n async submit() {\n this.formPromise = this.apiService.postCreateSponsorship(\n this.sponsorshipForm.value.selectedSponsorshipOrgId,\n {\n sponsoredEmail: this.sponsorshipForm.value.sponsorshipEmail,\n planSponsorshipType: PlanSponsorshipType.FamiliesForEnterprise,\n friendlyName: this.sponsorshipForm.value.sponsorshipEmail,\n }\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.forceReload();\n }\n\n async forceReload() {\n this.loading = true;\n await this.syncService.fullSync(true);\n this.loading = false;\n }\n\n get sponsorshipEmailControl() {\n return this.sponsorshipForm.controls.sponsorshipEmail;\n }\n\n private async resetForm() {\n this.sponsorshipForm.reset();\n }\n\n get isSelfHosted(): boolean {\n return this.platformUtilsService.isSelfHost();\n }\n}\n","
\n

\n {{ \"billingHistory\" | i18n }}\n

\n \n \n {{ \"refresh\" | i18n }}\n \n
\n\n \n {{ \"loading\" | i18n }}\n\n\n \n\n","import { Component, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { BillingHistoryResponse } from \"@bitwarden/common/models/response/billing-history.response\";\n\n@Component({\n selector: \"app-billing-history-view\",\n templateUrl: \"billing-history-view.component.html\",\n})\nexport class BillingHistoryViewComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n billing: BillingHistoryResponse;\n\n constructor(\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private router: Router\n ) {}\n\n async ngOnInit() {\n if (this.platformUtilsService.isSelfHost()) {\n this.router.navigate([\"/settings/subscription\"]);\n return;\n }\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 this.billing = await this.apiService.getUserBillingHistory();\n this.loading = false;\n }\n}\n","
\n

{{ \"subscription\" | i18n }}

\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 {{ \"premiumPriceWithFamilyPlan\" | i18n: (premiumPrice | currency: \"$\"):familyPlanMaxUserCount }}\n {{\n \"bitwardenFamiliesPlan\" | i18n\n }}\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, ViewChild } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { TokenService } from \"@bitwarden/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 familyPlanMaxUserCount = 6;\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 premiumPersonally = await this.stateService.getHasPremiumPersonally();\n if (premiumPersonally) {\n this.router.navigate([\"/settings/subscription/user-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/user-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\n","import { Component } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Component({\n selector: \"app-subscription\",\n templateUrl: \"subscription.component.html\",\n})\nexport class SubscriptionComponent {\n hasPremium: boolean;\n selfHosted: boolean;\n\n constructor(\n private stateService: StateService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n async ngOnInit() {\n this.hasPremium = await this.stateService.getHasPremiumPersonally();\n this.selfHosted = this.platformUtilsService.isSelfHost();\n }\n\n get subscriptionRoute(): string {\n return this.hasPremium ? \"user-subscription\" : \"premium\";\n }\n}\n","\n

\n {{ title }}\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, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SubscriptionResponse } from \"@bitwarden/common/models/response/subscription.response\";\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 stateService: StateService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private router: Router,\n private logService: LogService,\n private fileDownloadService: FileDownloadService\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.stateService.getHasPremiumPersonally()) {\n this.loading = true;\n this.sub = await this.apiService.getUserSubscription();\n } else {\n this.router.navigate([\"/settings/subscription/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.fileDownloadService.download({\n fileName: \"bitwarden_premium_license.json\",\n blobData: licenseString,\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 get title(): string {\n return this.i18nService.t(this.selfHosted ? \"subscription\" : \"premiumMembership\");\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { BillingHistoryViewComponent } from \"./billing-history-view.component\";\nimport { PaymentMethodComponent } from \"./payment-method.component\";\nimport { PremiumComponent } from \"./premium.component\";\nimport { SubscriptionComponent } from \"./subscription.component\";\nimport { UserSubscriptionComponent } from \"./user-subscription.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: SubscriptionComponent,\n data: { titleId: \"subscription\" },\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"premium\" },\n {\n path: \"user-subscription\",\n component: UserSubscriptionComponent,\n data: { titleId: \"premiumMembership\" },\n },\n {\n path: \"premium\",\n component: PremiumComponent,\n data: { titleId: \"goPremium\" },\n },\n {\n path: \"payment-method\",\n component: PaymentMethodComponent,\n data: { titleId: \"paymentMethod\" },\n },\n {\n path: \"billing-history\",\n component: BillingHistoryViewComponent,\n data: { titleId: \"billingHistory\" },\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class SubscriptionRoutingModule {}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UsernameGenerationService } from \"@bitwarden/common/abstractions/usernameGeneration.service\";\nimport { PasswordGeneratorPolicyOptions } from \"@bitwarden/common/models/domain/password-generator-policy-options\";\n\n@Directive()\nexport class GeneratorComponent implements OnInit {\n @Input() comingFromAddEdit = false;\n @Input() type: string;\n @Output() onSelected = new EventEmitter();\n\n usernameGeneratingPromise: Promise;\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 logService: LogService,\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 {\n name: i18nService.t(\"forwardedEmail\"),\n value: \"forwarded\",\n desc: i18nService.t(\"forwardedEmailDesc\"),\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.initForwardOptions();\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs/no-async-subscribe\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 if (this.regenerateWithoutButtonPress()) {\n await this.regenerate();\n }\n });\n }\n\n async typeChanged() {\n await this.stateService.setGeneratorOptions({ type: this.type });\n if (this.regenerateWithoutButtonPress()) {\n await this.regenerate();\n }\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 && this.regenerateWithoutButtonPress()) {\n await this.regeneratePassword();\n }\n }\n\n async saveUsernameOptions(regenerate = true) {\n await this.usernameGenerationService.saveOptions(this.usernameOptions);\n if (this.usernameOptions.type === \"forwarded\") {\n this.username = \"-\";\n }\n if (regenerate && this.regenerateWithoutButtonPress()) {\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 try {\n this.usernameGeneratingPromise = this.usernameGenerationService.generateUsername(\n this.usernameOptions\n );\n this.username = await this.usernameGeneratingPromise;\n if (this.username === \"\" || this.username === null) {\n this.username = \"-\";\n }\n } catch (e) {\n this.logService.error(e);\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 regenerateWithoutButtonPress() {\n return this.type !== \"username\" || this.usernameOptions.type !== \"forwarded\";\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 private async initForwardOptions() {\n this.forwardOptions = [\n { name: \"AnonAddy\", value: \"anonaddy\" },\n { name: \"DuckDuckGo\", value: \"duckduckgo\" },\n { name: \"Fastmail\", value: \"fastmail\" },\n { name: \"Firefox Relay\", value: \"firefoxrelay\" },\n { name: \"SimpleLogin\", value: \"simplelogin\" },\n ];\n\n this.usernameOptions = await this.usernameGenerationService.getOptions();\n if (\n this.usernameOptions.forwardedService == null ||\n this.usernameOptions.forwardedService === \"\"\n ) {\n this.forwardOptions.push({ name: \"\", value: null });\n }\n\n this.forwardOptions = this.forwardOptions.sort((a, b) => a.name.localeCompare(b.name));\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { GeneratedPasswordHistory } from \"@bitwarden/common/models/domain/generated-password-history\";\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, ElementRef, HostListener } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/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","
\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 } from \"@angular/core\";\n\nimport { PasswordGeneratorHistoryComponent as BasePasswordGeneratorHistoryComponent } from \"@bitwarden/angular/components/password-generator-history.component\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/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

{{ \"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
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n {{ \"regenerateUsername\" | i18n }}\n \n \n
\n
\n\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { GeneratorComponent as BaseGeneratorComponent } from \"@bitwarden/angular/components/generator.component\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UsernameGenerationService } from \"@bitwarden/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 logService: LogService,\n route: ActivatedRoute,\n private modalService: ModalService\n ) {\n super(\n passwordGenerationService,\n usernameGenerationService,\n platformUtilsService,\n stateService,\n i18nService,\n logService,\n route,\n window\n );\n if (platformUtilsService.isSelfHost()) {\n // Cannot use Firefox Relay on self hosted web vaults due to CORS issues with Firefox Relay API\n this.forwardOptions.splice(\n this.forwardOptions.findIndex((o) => o.value === \"firefoxrelay\"),\n 1\n );\n // Also cannot use Duck Duck Go on self hosted web vaults due to CORS issues\n this.forwardOptions.splice(\n this.forwardOptions.findIndex((o) => o.value === \"duckduckgo\"),\n 1\n );\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","import { Component, OnInit } from \"@angular/core\";\n\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { StateService } from \"@bitwarden/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 } from \"@angular/core\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { CipherWithIdRequest } from \"@bitwarden/common/models/request/cipher-with-id.request\";\nimport { FolderWithIdRequest } from \"@bitwarden/common/models/request/folder-with-id.request\";\nimport { UpdateKeyRequest } from \"@bitwarden/common/models/request/update-key.request\";\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(\"masterPasswordRequired\")\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 firstValueFrom(this.folderService.folderViews$);\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 { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { FolderApiServiceAbstraction } from \"@bitwarden/common/abstractions/folder/folder-api.service.abstraction\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { FolderView } from \"@bitwarden/common/models/view/folder.view\";\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 protected componentName = \"\";\n\n constructor(\n protected folderService: FolderService,\n protected folderApiService: FolderApiServiceAbstraction,\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.folderApiService.save(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 false,\n this.componentName != \"\" ? this.componentName + \" .modal-content\" : null\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.folderApiService.delete(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","
\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 } from \"@angular/core\";\n\nimport { FolderAddEditComponent as BaseFolderAddEditComponent } from \"@bitwarden/angular/components/folder-add-edit.component\";\nimport { FolderApiServiceAbstraction } from \"@bitwarden/common/abstractions/folder/folder-api.service.abstraction\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/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 protected override componentName = \"app-folder-add-edit\";\n constructor(\n folderService: FolderService,\n folderApiService: FolderApiServiceAbstraction,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService\n ) {\n super(folderService, folderApiService, i18nService, platformUtilsService, logService);\n }\n}\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { firstValueFrom, map, Observable, Subject, takeUntil } from \"rxjs\";\n\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport {\n isNotProviderUser,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { Checkable, isChecked } from \"@bitwarden/common/types/checkable\";\n\n@Directive()\nexport class ShareComponent implements OnInit, OnDestroy {\n @Input() cipherId: string;\n @Input() organizationId: string;\n @Output() onSharedCipher = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collections: Checkable[] = [];\n organizations$: Observable;\n\n protected writeableCollections: Checkable[] = [];\n\n private _destroy = new Subject();\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 ngOnDestroy(): void {\n this._destroy.next();\n this._destroy.complete();\n }\n\n async load() {\n const allCollections = await this.collectionService.getAllDecrypted();\n this.writeableCollections = allCollections.map((c) => c).filter((c) => !c.readOnly);\n\n this.organizations$ = this.organizationService.organizations$.pipe(\n map((orgs) => {\n return orgs\n .filter(\n (o) =>\n o.enabled && o.status === OrganizationUserStatusType.Confirmed && isNotProviderUser(o)\n )\n .sort(Utils.getSortFunction(this.i18nService, \"name\"));\n })\n );\n\n this.organizations$.pipe(takeUntil(this._destroy)).subscribe((orgs) => {\n if (this.organizationId == null && orgs.length > 0) {\n this.organizationId = orgs[0].id;\n }\n });\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n this.cipher = await cipherDomain.decrypt();\n\n this.filterCollections();\n }\n\n filterCollections() {\n this.writeableCollections.forEach((c) => (c.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.filter(isChecked).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 orgs = await firstValueFrom(this.organizations$);\n const orgName =\n orgs.find((o) => o.id === this.organizationId)?.name ?? 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].checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","
\n
\n
\n
\n

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

\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 {{ c.name }}\n \n \n \n \n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n {{ \"newOrganization\" | i18n }}\n \n \n
\n
\n
\n
\n
\n","import { Component, OnDestroy } from \"@angular/core\";\n\nimport { ShareComponent as BaseShareComponent } from \"@bitwarden/angular/components/share.component\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\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","import { Component, EventEmitter, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\n\n@Component({\n selector: \"app-verify-email\",\n templateUrl: \"verify-email.component.html\",\n})\nexport class VerifyEmailComponent {\n actionPromise: Promise;\n\n @Output() onVerified = new EventEmitter();\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService,\n private tokenService: TokenService\n ) {}\n\n async verifyEmail(): Promise {\n await this.apiService.refreshIdentityToken();\n if (await this.tokenService.getEmailVerified()) {\n this.onVerified.emit(true);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"emailVerified\"));\n return;\n }\n\n await this.apiService.postAccountVerifyEmail();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"checkInboxForVerification\")\n );\n }\n\n async send() {\n if (this.actionPromise != null) {\n return;\n }\n\n try {\n this.actionPromise = this.verifyEmail();\n await this.actionPromise;\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","
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n

\n {{ \"vaultItems\" | 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 \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
\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, Params, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { VaultFilter } from \"@bitwarden/angular/vault/vault-filter/models/vault-filter.model\";\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { UpdateKeyComponent } from \"../settings/update-key.component\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\nimport { AttachmentsComponent } from \"./attachments.component\";\nimport { CollectionsComponent } from \"./collections.component\";\nimport { FolderAddEditComponent } from \"./folder-add-edit.component\";\nimport { ShareComponent } from \"./share.component\";\nimport { VaultService } from \"./shared/vault.service\";\nimport { VaultFilterService } from \"./vault-filter/shared/vault-filter.service\";\nimport { VaultFilterComponent } from \"./vault-filter/vault-filter.component\";\nimport { VaultItemsComponent } from \"./vault-items.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(\"vaultFilter\", { static: true }) filterComponent: VaultFilterComponent;\n @ViewChild(VaultItemsComponent, { static: true }) vaultItemsComponent: VaultItemsComponent;\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 folderId: string = null;\n myVaultOnly = false;\n showVerifyEmail = false;\n showBrowserOutdated = false;\n showUpdateKey = false;\n showPremiumCallout = false;\n trashCleanupWarning: string = null;\n activeFilter: VaultFilter = new VaultFilter();\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 vaultService: VaultService,\n private cipherService: CipherService,\n private passwordRepromptService: PasswordRepromptService,\n private vaultFilterService: VaultFilterService\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (params) => {\n await this.syncService.fullSync(false);\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n this.showPremiumCallout =\n !this.showVerifyEmail && !canAccessPremium && !this.platformUtilsService.isSelfHost();\n\n this.filterComponent.reloadCollectionsAndFolders(this.activeFilter);\n this.filterComponent.reloadOrganizations();\n this.showUpdateKey = !(await this.cryptoService.hasEncKey());\n\n const cipherId = getCipherIdFromParams(params);\n\n if (cipherId) {\n const cipherView = new CipherView();\n cipherView.id = cipherId;\n if (params.action === \"clone\") {\n await this.cloneCipher(cipherView);\n } else if (params.action === \"edit\") {\n await this.editCipher(cipherView);\n }\n }\n await this.vaultItemsComponent.reload();\n\n /* eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe */\n this.route.queryParams.subscribe(async (params) => {\n const cipherId = getCipherIdFromParams(params);\n if (cipherId) {\n if ((await this.cipherService.get(cipherId)) != null) {\n this.editCipherId(cipherId);\n } else {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"unknownCipher\")\n );\n this.router.navigate([], {\n queryParams: { itemId: null, cipherId: null },\n queryParamsHandling: \"merge\",\n });\n }\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.filterComponent.reloadCollectionsAndFolders(this.activeFilter),\n this.filterComponent.reloadOrganizations(),\n this.vaultItemsComponent.load(this.vaultItemsComponent.filter),\n ]);\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n });\n }\n\n get isShowingCards() {\n return (\n this.showBrowserOutdated ||\n this.showPremiumCallout ||\n this.showUpdateKey ||\n this.showVerifyEmail\n );\n }\n\n emailVerified(verified: boolean) {\n this.showVerifyEmail = !verified;\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async applyVaultFilter(vaultFilter: VaultFilter) {\n this.vaultItemsComponent.showAddNew = vaultFilter.status !== \"trash\";\n this.activeFilter = vaultFilter;\n await this.vaultItemsComponent.reload(\n this.activeFilter.buildFilter(),\n vaultFilter.status === \"trash\"\n );\n this.filterComponent.searchPlaceholder = this.vaultService.calculateSearchBarLocalizationString(\n this.activeFilter\n );\n this.go();\n }\n\n async applyOrganizationFilter(orgId: string) {\n if (orgId == null) {\n this.activeFilter.resetOrganization();\n this.activeFilter.myVaultOnly = true;\n } else {\n this.activeFilter.selectedOrganizationId = orgId;\n }\n await this.vaultFilterService.ensureVaultFiltersAreExpanded();\n await this.applyVaultFilter(this.activeFilter);\n }\n\n filterSearchText(searchText: string) {\n this.vaultItemsComponent.searchText = searchText;\n this.vaultItemsComponent.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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onUploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onDeletedAttachment.subscribe(() => (madeAttachmentChanges = true));\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onReuploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n }\n );\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n modal.onClosed.subscribe(async () => {\n if (madeAttachmentChanges) {\n await this.vaultItemsComponent.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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSharedCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedCollections.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedFolder.subscribe(async () => {\n modal.close();\n await this.filterComponent.reloadCollectionsAndFolders(this.activeFilter);\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedFolder.subscribe(async () => {\n modal.close();\n await this.filterComponent.reloadCollectionsAndFolders(this.activeFilter);\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeletedFolder.subscribe(async () => {\n modal.close();\n await this.filterComponent.reloadCollectionsAndFolders(this.activeFilter);\n });\n }\n );\n }\n\n async addCipher() {\n const component = await this.editCipher(null);\n component.type = this.activeFilter.cipherType;\n component.folderId = this.folderId === \"none\" ? null : this.folderId;\n if (this.activeFilter.selectedCollectionId != null) {\n const collection = this.filterComponent.collections.fullList.filter(\n (c) => c.id === this.activeFilter.selectedCollectionId\n );\n if (collection.length > 0) {\n component.organizationId = collection[0].organizationId;\n component.collectionIds = [this.activeFilter.selectedCollectionId];\n }\n }\n if (this.activeFilter.selectedFolderId && this.activeFilter.selectedFolder) {\n component.folderId = this.activeFilter.selectedFolderId;\n }\n if (this.activeFilter.selectedOrganizationId) {\n component.organizationId = this.activeFilter.selectedOrganizationId;\n }\n }\n\n async editCipher(cipher: CipherView) {\n return this.editCipherId(cipher?.id);\n }\n\n async editCipherId(id: string) {\n const cipher = await this.cipherService.get(id);\n if (cipher != null && cipher.reprompt != 0) {\n if (!(await this.passwordRepromptService.showPasswordPrompt())) {\n this.go({ cipherId: null, itemId: null });\n return;\n }\n }\n\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.cipherAddEditModalRef,\n (comp) => {\n comp.cipherId = id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeletedCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onRestoredCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n }\n );\n\n modal.onClosedPromise().then(() => {\n this.go({ cipherId: null, itemId: null });\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 go(queryParams: any = null) {\n if (queryParams == null) {\n queryParams = {\n favorites: this.activeFilter.status === \"favorites\" ? true : null,\n type: this.activeFilter.cipherType,\n folderId: this.activeFilter.selectedFolderId,\n collectionId: this.activeFilter.selectedCollectionId,\n deleted: this.activeFilter.status === \"trash\" ? true : null,\n };\n }\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n queryParamsHandling: \"merge\",\n replaceUrl: true,\n });\n }\n}\n\n/**\n * Allows backwards compatibility with\n * old links that used the original `cipherId` param\n */\nconst getCipherIdFromParams = (params: Params): string => {\n return params[\"itemId\"] || params[\"cipherId\"];\n};\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { VaultComponent } from \"./vault.component\";\nconst routes: Routes = [\n {\n path: \"\",\n component: VaultComponent,\n data: { titleId: \"vaults\" },\n },\n];\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class VaultRoutingModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { OrganizationBadgeModule } from \"./organization-badge/organization-badge.module\";\nimport { VaultSharedModule } from \"./shared/vault-shared.module\";\nimport { VaultItemsComponent } from \"./vault-items.component\";\nimport { VaultRoutingModule } from \"./vault-routing.module\";\nimport { VaultComponent } from \"./vault.component\";\n\n@NgModule({\n imports: [VaultSharedModule, VaultRoutingModule, OrganizationBadgeModule],\n declarations: [VaultComponent, VaultItemsComponent],\n exports: [VaultComponent],\n})\nexport class VaultModule {}\n","import { NgModule } from \"@angular/core\";\nimport { Route, RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"@bitwarden/angular/guards/auth.guard\";\nimport { LockGuard } from \"@bitwarden/angular/guards/lock.guard\";\nimport { UnauthGuard } from \"@bitwarden/angular/guards/unauth.guard\";\n\nimport { flagEnabled, Flags } from \"../utils/flags\";\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 { LoginWithDeviceComponent } from \"./accounts/login/login-with-device.component\";\nimport { LoginComponent } from \"./accounts/login/login.component\";\nimport { RecoverDeleteComponent } from \"./accounts/recover-delete.component\";\nimport { RecoverTwoFactorComponent } from \"./accounts/recover-two-factor.component\";\nimport { RemovePasswordComponent } from \"./accounts/remove-password.component\";\nimport { SetPasswordComponent } from \"./accounts/set-password.component\";\nimport { SsoComponent } from \"./accounts/sso.component\";\nimport { TrialInitiationComponent } from \"./accounts/trial-initiation/trial-initiation.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 { HomeGuard } from \"./guards/home.guard\";\nimport { FrontendLayoutComponent } from \"./layouts/frontend-layout.component\";\nimport { UserLayoutComponent } from \"./layouts/user-layout.component\";\nimport { OrganizationModule } from \"./organizations/organization.module\";\nimport { AcceptFamilySponsorshipComponent } from \"./organizations/sponsorships/accept-family-sponsorship.component\";\nimport { FamiliesForEnterpriseSetupComponent } from \"./organizations/sponsorships/families-for-enterprise-setup.component\";\nimport { ReportsModule } from \"./reports\";\nimport { AccessComponent } from \"./send/access.component\";\nimport { SendComponent } from \"./send/send.component\";\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 { PreferencesComponent } from \"./settings/preferences.component\";\nimport { SecurityRoutingModule } from \"./settings/security-routing.module\";\nimport { SettingsComponent } from \"./settings/settings.component\";\nimport { SponsoredFamiliesComponent } from \"./settings/sponsored-families.component\";\nimport { SubscriptionRoutingModule } from \"./settings/subscription-routing.module\";\nimport { GeneratorComponent } from \"./tools/generator.component\";\nimport { ToolsComponent } from \"./tools/tools.component\";\nimport { VaultModule } from \"./vault/vault.module\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: FrontendLayoutComponent,\n data: { doNotSaveUrl: true },\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n children: [], // Children lets us have an empty component.\n canActivate: [HomeGuard], // Redirects either to vault, login or lock page.\n },\n { path: \"login\", component: LoginComponent, canActivate: [UnauthGuard] },\n {\n path: \"login-with-device\",\n component: LoginWithDeviceComponent,\n data: { titleId: \"loginWithDevice\" },\n },\n { path: \"2fa\", component: TwoFactorComponent, canActivate: [UnauthGuard] },\n {\n path: \"register\",\n component: TrialInitiationComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"createAccount\" },\n },\n {\n path: \"trial\",\n redirectTo: \"register\",\n pathMatch: \"full\",\n },\n {\n path: \"sso\",\n component: SsoComponent,\n canActivate: [UnauthGuard],\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: [UnauthGuard],\n data: { titleId: \"passwordHint\" },\n },\n {\n path: \"lock\",\n component: LockComponent,\n canActivate: [LockGuard],\n },\n { path: \"verify-email\", component: VerifyEmailTokenComponent },\n {\n path: \"accept-organization\",\n component: AcceptOrganizationComponent,\n data: { titleId: \"joinOrganization\", doNotSaveUrl: false },\n },\n {\n path: \"accept-emergency\",\n component: AcceptEmergencyComponent,\n data: { titleId: \"acceptEmergency\", doNotSaveUrl: false },\n },\n {\n path: \"accept-families-for-enterprise\",\n component: AcceptFamilySponsorshipComponent,\n data: { titleId: \"acceptFamilySponsorship\", doNotSaveUrl: false },\n },\n { path: \"recover\", pathMatch: \"full\", redirectTo: \"recover-2fa\" },\n {\n path: \"recover-2fa\",\n component: RecoverTwoFactorComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"recoverAccountTwoStep\" },\n },\n {\n path: \"recover-delete\",\n component: RecoverDeleteComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"deleteAccount\" },\n },\n {\n path: \"verify-recover-delete\",\n component: VerifyRecoverDeleteComponent,\n canActivate: [UnauthGuard],\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: [AuthGuard],\n data: { titleId: \"updateTempPassword\" },\n },\n {\n path: \"update-password\",\n component: UpdatePasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"updatePassword\" },\n },\n {\n path: \"remove-password\",\n component: RemovePasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"removeMasterPassword\" },\n },\n ],\n },\n {\n path: \"\",\n component: UserLayoutComponent,\n canActivate: [AuthGuard],\n children: [\n {\n path: \"vault\",\n loadChildren: () => VaultModule,\n },\n { path: \"sends\", component: SendComponent, data: { title: \"Send\" } },\n {\n path: \"create-organization\",\n component: CreateOrganizationComponent,\n data: { titleId: \"newOrganization\" },\n },\n {\n path: \"settings\",\n component: SettingsComponent,\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"account\" },\n { path: \"account\", component: AccountComponent, data: { titleId: \"myAccount\" } },\n {\n path: \"preferences\",\n component: PreferencesComponent,\n data: { titleId: \"preferences\" },\n },\n {\n path: \"security\",\n loadChildren: () => SecurityRoutingModule,\n },\n {\n path: \"domain-rules\",\n component: DomainRulesComponent,\n data: { titleId: \"domainRules\" },\n },\n {\n path: \"subscription\",\n loadChildren: () => SubscriptionRoutingModule,\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: [AuthGuard],\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"generator\" },\n {\n path: \"\",\n loadChildren: () =>\n import(\"./tools/import-export/import-export.module\").then(\n (m) => m.ImportExportModule\n ),\n },\n {\n path: \"generator\",\n component: GeneratorComponent,\n data: { titleId: \"generator\" },\n },\n ],\n },\n {\n path: \"reports\",\n loadChildren: () => ReportsModule,\n },\n { path: \"setup/families-for-enterprise\", component: FamiliesForEnterpriseSetupComponent },\n ],\n },\n {\n path: \"organizations\",\n loadChildren: () => OrganizationModule,\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\nexport function buildFlaggedRoute(flagName: keyof Flags, route: Route): Route {\n return flagEnabled(flagName)\n ? route\n : {\n path: route.path,\n redirectTo: \"/\",\n };\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from \"@angular/router\";\n\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class HasPremiumGuard implements CanActivate {\n constructor(\n private router: Router,\n private stateService: StateService,\n private messagingService: MessagingService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {\n const userHasPremium = await this.stateService.getCanAccessPremium();\n\n if (!userHasPremium) {\n this.messagingService.send(\"premiumRequired\");\n }\n\n // Prevent trapping the user on the login page, since that's an awful UX flow\n if (!userHasPremium && this.router.url === \"/login\") {\n return this.router.createUrlTree([\"/\"]);\n }\n\n return userHasPremium;\n }\n}\n","
\n

{{ \"dataBreachReport\" | i18n }}

\n
\n

{{ \"breachDesc\" | i18n }}

\n
\n
\n
\n \n \n {{ \"breachCheckUsernameEmail\" | i18n }}\n
\n
\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 { Component, OnInit } from \"@angular/core\";\n\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { BreachAccountResponse } from \"@bitwarden/common/models/response/breach-account.response\";\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","import { svgIcon } from \"@bitwarden/components\";\n\nexport const ReportBreach = svgIcon`\n \n \n \n \n \n \n \n \n \n \n`;\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const ReportExposedPasswords = svgIcon`\n \n \n \n \n \n \n \n \n \n \n \n \n`;\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const ReportInactiveTwoFactor = svgIcon`\n \n \n \n \n \n \n`;\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const ReportReusedPasswords = svgIcon`\n \n \n \n \n \n`;\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const ReportUnsecuredWebsites = svgIcon`\n \n \n \n \n \n \n \n \n`;\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const ReportWeakPasswords = svgIcon`\n \n \n \n \n \n \n`;\n","import { ReportBreach } from \"./icons/report-breach.icon\";\nimport { ReportExposedPasswords } from \"./icons/report-exposed-passwords.icon\";\nimport { ReportInactiveTwoFactor } from \"./icons/report-inactive-two-factor.icon\";\nimport { ReportReusedPasswords } from \"./icons/report-reused-passwords.icon\";\nimport { ReportUnsecuredWebsites } from \"./icons/report-unsecured-websites.icon\";\nimport { ReportWeakPasswords } from \"./icons/report-weak-passwords.icon\";\nimport { ReportEntry } from \"./shared\";\n\nexport enum ReportType {\n ExposedPasswords = \"exposedPasswords\",\n ReusedPasswords = \"reusedPasswords\",\n WeakPasswords = \"weakPasswords\",\n UnsecuredWebsites = \"unsecuredWebsites\",\n Inactive2fa = \"inactive2fa\",\n DataBreach = \"dataBreach\",\n}\n\ntype ReportWithoutVariant = Omit;\n\nexport const reports: Record = {\n [ReportType.ExposedPasswords]: {\n title: \"exposedPasswordsReport\",\n description: \"exposedPasswordsReportDesc\",\n route: \"exposed-passwords-report\",\n icon: ReportExposedPasswords,\n },\n [ReportType.ReusedPasswords]: {\n title: \"reusedPasswordsReport\",\n description: \"reusedPasswordsReportDesc\",\n route: \"reused-passwords-report\",\n icon: ReportReusedPasswords,\n },\n [ReportType.WeakPasswords]: {\n title: \"weakPasswordsReport\",\n description: \"weakPasswordsReportDesc\",\n route: \"weak-passwords-report\",\n icon: ReportWeakPasswords,\n },\n [ReportType.UnsecuredWebsites]: {\n title: \"unsecuredWebsitesReport\",\n description: \"unsecuredWebsitesReportDesc\",\n route: \"unsecured-websites-report\",\n icon: ReportUnsecuredWebsites,\n },\n [ReportType.Inactive2fa]: {\n title: \"inactive2faReport\",\n description: \"inactive2faReportDesc\",\n route: \"inactive-two-factor-report\",\n icon: ReportInactiveTwoFactor,\n },\n [ReportType.DataBreach]: {\n title: \"dataBreachReport\",\n description: \"breachDesc\",\n route: \"breach-report\",\n icon: ReportBreach,\n },\n};\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared/shared.module\";\n\nimport { ReportCardComponent } from \"./report-card/report-card.component\";\nimport { ReportListComponent } from \"./report-list/report-list.component\";\n\n@NgModule({\n imports: [CommonModule, SharedModule],\n declarations: [ReportCardComponent, ReportListComponent],\n exports: [ReportCardComponent, ReportListComponent],\n})\nexport class ReportsSharedModule {}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\nimport { reports, ReportType } from \"../reports\";\nimport { ReportEntry, ReportVariant } from \"../shared\";\n\n@Component({\n selector: \"app-reports-home\",\n templateUrl: \"reports-home.component.html\",\n})\nexport class ReportsHomeComponent implements OnInit {\n reports: ReportEntry[];\n\n constructor(private stateService: StateService) {}\n\n async ngOnInit(): Promise {\n const userHasPremium = await this.stateService.getCanAccessPremium();\n\n const reportRequiresPremium = userHasPremium\n ? ReportVariant.Enabled\n : ReportVariant.RequiresPremium;\n\n this.reports = [\n {\n ...reports[ReportType.ExposedPasswords],\n variant: reportRequiresPremium,\n },\n {\n ...reports[ReportType.ReusedPasswords],\n variant: reportRequiresPremium,\n },\n {\n ...reports[ReportType.WeakPasswords],\n variant: reportRequiresPremium,\n },\n {\n ...reports[ReportType.UnsecuredWebsites],\n variant: reportRequiresPremium,\n },\n {\n ...reports[ReportType.Inactive2fa],\n variant: reportRequiresPremium,\n },\n {\n ...reports[ReportType.DataBreach],\n variant: ReportVariant.Enabled,\n },\n ];\n }\n}\n","
\n

{{ \"reports\" | i18n }}

\n
\n\n

{{ \"reportsDesc\" | i18n }}

\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-layout\",\n templateUrl: \"reports-layout.component.html\",\n})\nexport class ReportsLayoutComponent 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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n .subscribe((event) => {\n this.homepage = (event as NavigationEnd).url == \"/reports\";\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"@bitwarden/angular/guards/auth.guard\";\n\nimport { HasPremiumGuard } from \"../shared/guards/has-premium.guard\";\n\nimport { BreachReportComponent } from \"./pages/breach-report.component\";\nimport { ExposedPasswordsReportComponent } from \"./pages/exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent } from \"./pages/inactive-two-factor-report.component\";\nimport { ReportsHomeComponent } from \"./pages/reports-home.component\";\nimport { ReusedPasswordsReportComponent } from \"./pages/reused-passwords-report.component\";\nimport { UnsecuredWebsitesReportComponent } from \"./pages/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent } from \"./pages/weak-passwords-report.component\";\nimport { ReportsLayoutComponent } from \"./reports-layout.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: ReportsLayoutComponent,\n canActivate: [AuthGuard],\n children: [\n { path: \"\", pathMatch: \"full\", component: ReportsHomeComponent, 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 canActivate: [HasPremiumGuard],\n },\n {\n path: \"unsecured-websites-report\",\n component: UnsecuredWebsitesReportComponent,\n data: { titleId: \"unsecuredWebsitesReport\" },\n canActivate: [HasPremiumGuard],\n },\n {\n path: \"weak-passwords-report\",\n component: WeakPasswordsReportComponent,\n data: { titleId: \"weakPasswordsReport\" },\n canActivate: [HasPremiumGuard],\n },\n {\n path: \"exposed-passwords-report\",\n component: ExposedPasswordsReportComponent,\n data: { titleId: \"exposedPasswordsReport\" },\n canActivate: [HasPremiumGuard],\n },\n {\n path: \"inactive-two-factor-report\",\n component: InactiveTwoFactorReportComponent,\n data: { titleId: \"inactive2faReport\" },\n canActivate: [HasPremiumGuard],\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class ReportsRoutingModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../shared\";\n\nimport { BreachReportComponent } from \"./pages/breach-report.component\";\nimport { ExposedPasswordsReportComponent } from \"./pages/exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent } from \"./pages/inactive-two-factor-report.component\";\nimport { ReportsHomeComponent } from \"./pages/reports-home.component\";\nimport { ReusedPasswordsReportComponent } from \"./pages/reused-passwords-report.component\";\nimport { UnsecuredWebsitesReportComponent } from \"./pages/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent } from \"./pages/weak-passwords-report.component\";\nimport { ReportsLayoutComponent } from \"./reports-layout.component\";\nimport { ReportsRoutingModule } from \"./reports-routing.module\";\nimport { ReportsSharedModule } from \"./shared\";\n\n@NgModule({\n imports: [CommonModule, SharedModule, ReportsSharedModule, ReportsRoutingModule],\n declarations: [\n BreachReportComponent,\n ExposedPasswordsReportComponent,\n InactiveTwoFactorReportComponent,\n ReportsLayoutComponent,\n ReportsHomeComponent,\n ReusedPasswordsReportComponent,\n UnsecuredWebsitesReportComponent,\n WeakPasswordsReportComponent,\n WeakPasswordsReportComponent,\n ],\n})\nexport class ReportsModule {}\n","import { Directive, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/enums/cipherRepromptType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\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 // eslint-disable-next-line rxjs/no-async-subscribe\n comp.onSavedCipher.subscribe(async () => {\n modal.close();\n await this.load();\n });\n // eslint-disable-next-line rxjs/no-async-subscribe\n comp.onDeletedCipher.subscribe(async () => {\n modal.close();\n await this.load();\n });\n // eslint-disable-next-line rxjs/no-async-subscribe\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 }\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","
\n

{{ \"exposedPasswordsReport\" | i18n }}

\n
\n

{{ \"exposedPasswordsReportDesc\" | 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, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\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","
\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, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\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://api.2fa.directory/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","
\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, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\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","
\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, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\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","
\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, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { BadgeTypes } from \"@bitwarden/components\";\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, BadgeTypes] {\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","export enum ReportVariant {\n Enabled = \"Enabled\",\n RequiresPremium = \"RequiresPremium\",\n RequiresUpgrade = \"RequiresUpgrade\",\n}\n","\n
\n \n
\n
\n
\n

{{ title }}

\n

{{ description }}

\n
\n \n {{ \"premium\" | i18n }}\n {{ \"upgrade\" | i18n }}\n \n \n\n","import { Component, Input } from \"@angular/core\";\n\nimport { Icon } from \"@bitwarden/components\";\n\nimport { ReportVariant } from \"../models/report-variant\";\n\n@Component({\n selector: \"app-report-card\",\n templateUrl: \"report-card.component.html\",\n})\nexport class ReportCardComponent {\n @Input() title: string;\n @Input() description: string;\n @Input() route: string;\n @Input() icon: Icon;\n @Input() variant: ReportVariant;\n\n protected get disabled() {\n return this.variant != ReportVariant.Enabled;\n }\n\n protected get requiresPremium() {\n return this.variant == ReportVariant.RequiresPremium;\n }\n}\n","
\n
\n \n
\n
\n","import { Component, Input } from \"@angular/core\";\n\nimport { ReportEntry } from \"../models/report-entry\";\n\n@Component({\n selector: \"app-report-list\",\n templateUrl: \"report-list.component.html\",\n})\nexport class ReportListComponent {\n @Input() reports: ReportEntry[];\n}\n","export class StorageRequest {\n storageGbAdjustment: number;\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, EventEmitter, Input, Output, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StorageRequest } from \"@bitwarden/common/models/request/storage.request\";\nimport { PaymentResponse } from \"@bitwarden/common/models/response/payment.response\";\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 private organizationApiService: OrganizationApiServiceAbstraction\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.organizationApiService.updateStorage(\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
\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 } from \"@angular/core\";\n\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/models/request/secret-verification.request\";\nimport { ApiKeyResponse } from \"@bitwarden/common/models/response/api-key.response\";\nimport { Verification } from \"@bitwarden/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","export enum TransactionType {\n Charge = 0,\n Credit = 1,\n PromotionalCredit = 2,\n ReferralCredit = 3,\n Refund = 4,\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","import { Component, Input } from \"@angular/core\";\n\nimport { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\nimport { TransactionType } from \"@bitwarden/common/enums/transactionType\";\nimport { BillingHistoryResponse } from \"@bitwarden/common/models/response/billing-history.response\";\n\n@Component({\n selector: \"app-billing-history\",\n templateUrl: \"billing-history.component.html\",\n})\nexport class BillingHistoryComponent {\n @Input()\n billing: BillingHistoryResponse;\n\n paymentMethodType = PaymentMethodType;\n transactionType = TransactionType;\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 paymentMethodClasses(type: PaymentMethodType) {\n switch (type) {\n case PaymentMethodType.Card:\n return [\"bwi-credit-card\"];\n case PaymentMethodType.BankAccount:\n case PaymentMethodType.WireTransfer:\n return [\"bwi-bank\"];\n case PaymentMethodType.BitPay:\n return [\"bwi-bitcoin text-warning\"];\n case PaymentMethodType.PayPal:\n return [\"bwi-paypal text-primary\"];\n default:\n return [];\n }\n }\n}\n","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\nimport { PlanType } from \"../../enums/planType\";\n\nimport { OrganizationKeysRequest } from \"./organization-keys.request\";\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 { PlanType } from \"../../enums/planType\";\n\nimport { OrganizationKeysRequest } from \"./organization-keys.request\";\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","import { OrganizationCreateRequest } from \"../organization-create.request\";\n\nexport class ProviderOrganizationCreateRequest {\n constructor(\n public clientOwnerEmail: string,\n public organizationCreateRequest: OrganizationCreateRequest\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 \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 {{ \"submit\" | i18n }}\n \n \n
\n\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from \"@angular/core\";\nimport { UntypedFormBuilder, Validators } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\nimport { PlanType } from \"@bitwarden/common/enums/planType\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { OrganizationCreateRequest } from \"@bitwarden/common/models/request/organization-create.request\";\nimport { OrganizationKeysRequest } from \"@bitwarden/common/models/request/organization-keys.request\";\nimport { OrganizationUpgradeRequest } from \"@bitwarden/common/models/request/organization-upgrade.request\";\nimport { ProviderOrganizationCreateRequest } from \"@bitwarden/common/models/request/provider/provider-organization-create.request\";\nimport { PlanResponse } from \"@bitwarden/common/models/response/plan.response\";\n\nimport { PaymentComponent } from \"./payment.component\";\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\ninterface OnSuccessArgs {\n organizationId: string;\n}\n\n@Component({\n selector: \"app-organization-plans\",\n templateUrl: \"organization-plans.component.html\",\n})\nexport class OrganizationPlansComponent implements OnInit, OnDestroy {\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()\n get product(): ProductType {\n return this._product;\n }\n set product(product: ProductType) {\n this._product = product;\n this.formGroup?.controls?.product?.setValue(product);\n }\n private _product = ProductType.Free;\n\n @Input()\n get plan(): PlanType {\n return this._plan;\n }\n set plan(plan: PlanType) {\n this._plan = plan;\n this.formGroup?.controls?.plan?.setValue(plan);\n }\n private _plan = PlanType.Free;\n @Input() providerId: string;\n @Output() onSuccess = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n @Output() onTrialBillingSuccess = new EventEmitter();\n\n loading = true;\n selfHosted = false;\n productTypes = ProductType;\n formPromise: Promise;\n singleOrgPolicyBlock = false;\n isInTrialFlow = false;\n discount = 0;\n\n formGroup = this.formBuilder.group({\n name: [\"\"],\n billingEmail: [\"\", [Validators.email]],\n businessOwned: [false],\n premiumAccessAddon: [false],\n additionalStorage: [0, [Validators.min(0), Validators.max(99)]],\n additionalSeats: [0, [Validators.min(0), Validators.max(100000)]],\n clientOwnerEmail: [\"\", [Validators.email]],\n businessName: [\"\"],\n plan: [this.plan],\n product: [this.product],\n });\n\n plans: PlanResponse[];\n\n private destroy$ = new Subject();\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 private messagingService: MessagingService,\n private formBuilder: UntypedFormBuilder,\n private organizationApiService: OrganizationApiServiceAbstraction\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.formGroup.controls.businessOwned.setValue(true);\n }\n }\n\n if (this.providerId) {\n this.formGroup.controls.businessOwned.setValue(true);\n this.changedOwnedBusiness();\n }\n\n if (!this.createOrganization || this.acceptingSponsorship) {\n this.formGroup.controls.product.setValue(ProductType.Families);\n this.changedProduct();\n }\n\n if (this.createOrganization) {\n this.formGroup.controls.name.addValidators([Validators.required, Validators.maxLength(50)]);\n this.formGroup.controls.billingEmail.addValidators(Validators.required);\n }\n\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.SingleOrg)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n this.singleOrgPolicyBlock = policyAppliesToActiveUser;\n });\n\n this.loading = false;\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n get createOrganization() {\n return this.organizationId == null;\n }\n\n get selectedPlan() {\n return this.plans.find((plan) => plan.type === this.formGroup.controls.plan.value);\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.formGroup.controls.businessOwned.value) {\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) =>\n !plan.legacyYear && !plan.disabled && plan.product === this.formGroup.controls.product.value\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 (\n plan.additionalStoragePricePerGb *\n Math.abs(this.formGroup.controls.additionalStorage.value || 0)\n );\n }\n\n seatTotal(plan: PlanResponse): number {\n if (!plan.hasAdditionalSeatsOption) {\n return 0;\n }\n\n return plan.seatPrice * Math.abs(this.formGroup.controls.additionalSeats.value || 0);\n }\n\n get subtotal() {\n let subTotal = this.selectedPlan.basePrice;\n if (\n this.selectedPlan.hasAdditionalSeatsOption &&\n this.formGroup.controls.additionalSeats.value\n ) {\n subTotal += this.seatTotal(this.selectedPlan);\n }\n if (\n this.selectedPlan.hasAdditionalStorageOption &&\n this.formGroup.controls.additionalStorage.value\n ) {\n subTotal += this.additionalStorageTotal(this.selectedPlan);\n }\n if (\n this.selectedPlan.hasPremiumAccessOption &&\n this.formGroup.controls.premiumAccessAddon.value\n ) {\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.formGroup.controls.plan.setValue(this.selectablePlans[0].type);\n if (!this.selectedPlan.hasPremiumAccessOption) {\n this.formGroup.controls.premiumAccessAddon.setValue(false);\n }\n if (!this.selectedPlan.hasAdditionalStorageOption) {\n this.formGroup.controls.additionalStorage.setValue(0);\n }\n if (!this.selectedPlan.hasAdditionalSeatsOption) {\n this.formGroup.controls.additionalSeats.setValue(0);\n } else if (\n !this.formGroup.controls.additionalSeats.value &&\n !this.selectedPlan.baseSeats &&\n this.selectedPlan.hasAdditionalSeatsOption\n ) {\n this.formGroup.controls.additionalSeats.setValue(1);\n }\n }\n\n changedOwnedBusiness() {\n if (!this.formGroup.controls.businessOwned.value || this.selectedPlan.canBeUsedByBusiness) {\n return;\n }\n this.formGroup.controls.product.setValue(ProductType.Teams);\n this.formGroup.controls.plan.setValue(PlanType.TeamsAnnually);\n this.changedProduct();\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 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\n if (!this.acceptingSponsorship && !this.isInTrialFlow) {\n this.router.navigate([\"/organizations/\" + orgId]);\n }\n\n if (this.isInTrialFlow) {\n this.onTrialBillingSuccess.emit({\n orgId: orgId,\n subLabelText: this.billingSubLabelText(),\n });\n }\n\n return orgId;\n };\n\n this.formPromise = doSubmit();\n const organizationId = await this.formPromise;\n this.onSuccess.emit({ organizationId: organizationId });\n this.messagingService.send(\"organizationCreated\", organizationId);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private async updateOrganization(orgId: string) {\n const request = new OrganizationUpgradeRequest();\n request.businessName = this.formGroup.controls.businessOwned.value\n ? this.formGroup.controls.businessName.value\n : null;\n request.additionalSeats = this.formGroup.controls.additionalSeats.value;\n request.additionalStorageGb = this.formGroup.controls.additionalStorage.value;\n request.premiumAccessAddon =\n this.selectedPlan.hasPremiumAccessOption && this.formGroup.controls.premiumAccessAddon.value;\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.organizationApiService.upgrade(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.formGroup.controls.name.value;\n request.billingEmail = this.formGroup.controls.billingEmail.value;\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.formGroup.controls.businessOwned.value\n ? this.formGroup.controls.businessName.value\n : null;\n request.additionalSeats = this.formGroup.controls.additionalSeats.value;\n request.additionalStorageGb = this.formGroup.controls.additionalStorage.value;\n request.premiumAccessAddon =\n this.selectedPlan.hasPremiumAccessOption &&\n this.formGroup.controls.premiumAccessAddon.value;\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(\n this.formGroup.controls.clientOwnerEmail.value,\n request\n );\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.organizationApiService.create(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.organizationApiService.createLicense(fd);\n const orgId = response.id;\n\n await this.apiService.refreshIdentityToken();\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.organizationApiService.updateKeys(orgId, request);\n\n return orgId;\n }\n\n private billingSubLabelText(): string {\n const selectedPlan = this.selectedPlan;\n const price = selectedPlan.basePrice === 0 ? selectedPlan.seatPrice : selectedPlan.basePrice;\n let text = \"\";\n\n if (selectedPlan.isAnnual) {\n text += `${this.i18nService.t(\"annual\")} ($${price}/${this.i18nService.t(\"yr\")})`;\n } else {\n text += `${this.i18nService.t(\"monthly\")} ($${price}/${this.i18nService.t(\"monthAbbr\")})`;\n }\n\n return text;\n }\n}\n","export class VerifyBankRequest {\n amount1: number;\n amount2: number;\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","
\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 {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { PayPalConfig } from \"@bitwarden/common/abstractions/environment.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\nimport { BitPayInvoiceRequest } from \"@bitwarden/common/models/request/bit-pay-invoice.request\";\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","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\n\nimport { OrganizationTaxInfoUpdateRequest } from \"./organization-tax-info-update.request\";\n\nexport class PaymentRequest extends OrganizationTaxInfoUpdateRequest {\n paymentMethodType: PaymentMethodType;\n paymentToken: string;\n}\n","import { Component, EventEmitter, Input, Output, ViewChild } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\nimport { PaymentRequest } from \"@bitwarden/common/models/request/payment.request\";\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 private organizationApiService: OrganizationApiServiceAbstraction\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.organizationApiService.updatePayment(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","
\n

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

{{ \"paymentMethod\" | i18n }}

\n

{{ \"noPaymentMethod\" | i18n }}

\n \n \n

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

\n \n \n {{ \"amountX\" | i18n: \"1\" }}\n \n $0.\n \n \n {{ \"amountX\" | i18n: \"2\" }}\n \n $0.\n \n \n \n {{ \"verifyBankAccount\" | i18n }}\n \n \n \n

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

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

{{ \"taxInformation\" | i18n }}

\n

{{ \"taxInformationDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n \n \n \n \n {{ \"save\" | i18n }}\n \n \n
\n
\n","import { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { FormBuilder, FormControl, Validators } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\nimport { VerifyBankRequest } from \"@bitwarden/common/models/request/verify-bank.request\";\nimport { BillingPaymentResponse } from \"@bitwarden/common/models/response/billing-payment.response\";\nimport { OrganizationResponse } from \"@bitwarden/common/models/response/organization.response\";\n\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\n selector: \"app-payment-method\",\n templateUrl: \"payment-method.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class PaymentMethodComponent implements OnInit {\n @ViewChild(TaxInfoComponent) taxInfo: TaxInfoComponent;\n\n loading = false;\n firstLoaded = false;\n showAdjustPayment = false;\n showAddCredit = false;\n billing: BillingPaymentResponse;\n org: OrganizationResponse;\n paymentMethodType = PaymentMethodType;\n organizationId: string;\n\n verifyBankPromise: Promise;\n taxFormPromise: Promise;\n\n verifyBankForm = this.formBuilder.group({\n amount1: new FormControl(null, [\n Validators.required,\n Validators.max(99),\n Validators.min(0),\n ]),\n amount2: new FormControl(null, [\n Validators.required,\n Validators.max(99),\n Validators.min(0),\n ]),\n });\n\n constructor(\n protected apiService: ApiService,\n protected organizationApiService: OrganizationApiServiceAbstraction,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n private router: Router,\n private logService: LogService,\n private route: ActivatedRoute,\n private formBuilder: FormBuilder\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.params.subscribe(async (params) => {\n if (params.organizationId) {\n this.organizationId = params.organizationId;\n } else if (this.platformUtilsService.isSelfHost()) {\n this.router.navigate([\"/settings/subscription\"]);\n return;\n }\n\n await this.load();\n this.firstLoaded = true;\n });\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n this.loading = true;\n\n if (this.forOrganization) {\n const billingPromise = this.organizationApiService.getBilling(this.organizationId);\n const orgPromise = this.organizationApiService.get(this.organizationId);\n\n [this.billing, this.org] = await Promise.all([billingPromise, orgPromise]);\n } else {\n this.billing = await this.apiService.getUserBillingPayment();\n }\n\n this.loading = false;\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 async verifyBank() {\n if (this.loading || !this.forOrganization) {\n return;\n }\n\n try {\n const request = new VerifyBankRequest();\n request.amount1 = this.verifyBankForm.value.amount1;\n request.amount2 = this.verifyBankForm.value.amount2;\n this.verifyBankPromise = this.organizationApiService.verifyBank(this.organizationId, request);\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 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 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 forOrganization() {\n return this.organizationId != null;\n }\n\n get headerClass() {\n return this.forOrganization ? [\"page-header\"] : [\"tabbed-header\"];\n }\n\n get paymentSourceClasses() {\n if (this.paymentSource == null) {\n return [];\n }\n switch (this.paymentSource.type) {\n case PaymentMethodType.Card:\n return [\"bwi-credit-card\"];\n case PaymentMethodType.BankAccount:\n return [\"bwi-bank\"];\n case PaymentMethodType.Check:\n return [\"bwi-money\"];\n case PaymentMethodType.AppleInApp:\n return [\"bwi-apple text-muted\"];\n case PaymentMethodType.GoogleInApp:\n return [\"bwi-google text-muted\"];\n case PaymentMethodType.PayPal:\n return [\"bwi-paypal text-primary\"];\n default:\n return [];\n }\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","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n
\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, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { AbstractThemingService } from \"@bitwarden/angular/services/theming/theming.service.abstraction\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\n\n@Component({\n selector: \"app-payment\",\n templateUrl: \"payment.component.html\",\n})\nexport class PaymentComponent implements OnInit, OnDestroy {\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 @Input() trialFlow = false;\n\n private destroy$ = new Subject();\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 apiService: ApiService,\n private logService: LogService,\n private themingService: AbstractThemingService\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 this.subscribeToTheme();\n window.document.head.appendChild(this.stripeScript);\n if (!this.hidePaypal) {\n window.document.head.appendChild(this.btScript);\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\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 subscribeToTheme() {\n this.themingService.theme$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n const style = getComputedStyle(document.documentElement);\n this.StripeElementStyle.base.color = `rgb(${style.getPropertyValue(\"--color-text-main\")})`;\n this.StripeElementStyle.base[\"::placeholder\"].color = `rgb(${style.getPropertyValue(\n \"--color-text-muted\"\n )})`;\n this.StripeElementStyle.invalid.color = `rgb(${style.getPropertyValue(\"--color-text-main\")})`;\n this.StripeElementStyle.invalid.borderColor = `rgb(${style.getPropertyValue(\n \"--color-danger-500\"\n )})`;\n });\n }\n}\n","import { Component, Input } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { Verification } from \"@bitwarden/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","
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\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, Output } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationTaxInfoUpdateRequest } from \"@bitwarden/common/models/request/organization-tax-info-update.request\";\nimport { TaxInfoUpdateRequest } from \"@bitwarden/common/models/request/tax-info-update.request\";\nimport { TaxInfoResponse } from \"@bitwarden/common/models/response/tax-info.response\";\nimport { TaxRateResponse } from \"@bitwarden/common/models/response/tax-rate.response\";\n\ntype TaxInfoView = Omit & {\n includeTaxId: boolean;\n [key: string]: unknown;\n};\n\n@Component({\n selector: \"app-tax-info\",\n templateUrl: \"tax-info.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class TaxInfoComponent {\n @Input() trialFlow = false;\n @Output() onCountryChanged = new EventEmitter();\n\n loading = true;\n organizationId: string;\n taxInfo: TaxInfoView = {\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: TaxInfoView = {\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 private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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.organizationApiService.getTaxInfo(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 try {\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 } catch (e) {\n this.logService.error(e);\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 try {\n const taxRates = await this.apiService.getTaxRates();\n if (taxRates) {\n this.taxRates = taxRates.data;\n }\n } catch (e) {\n this.logService.error(e);\n } finally {\n this.loading = false;\n }\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.organizationApiService.updateTaxInfo(\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","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class TwoFactorProviderRequest extends SecretVerificationRequest {\n type: TwoFactorProviderType;\n}\n","import { Directive, EventEmitter, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { VerificationType } from \"@bitwarden/common/enums/verificationType\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/models/request/secret-verification.request\";\nimport { TwoFactorProviderRequest } from \"@bitwarden/common/models/request/two-factor-provider.request\";\nimport { AuthResponseBase } from \"@bitwarden/common/types/authResponse\";\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: AuthResponseBase) {\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 { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class UpdateTwoFactorDuoRequest extends SecretVerificationRequest {\n integrationKey: string;\n secretKey: string;\n host: string;\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 \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { UpdateTwoFactorDuoRequest } from \"@bitwarden/common/models/request/update-two-factor-duo.request\";\nimport { TwoFactorDuoResponse } from \"@bitwarden/common/models/response/two-factor-duo.response\";\nimport { AuthResponse } from \"@bitwarden/common/types/authResponse\";\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: AuthResponse) {\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","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class UpdateTwoFactorAuthenticatorRequest extends SecretVerificationRequest {\n token: string;\n key: string;\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 { Component, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"@bitwarden/common/models/request/update-two-factor-authenticator.request\";\nimport { TwoFactorAuthenticatorResponse } from \"@bitwarden/common/models/response/two-factor-authenticator.response\";\nimport { AuthResponse } from \"@bitwarden/common/types/authResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n// NOTE: There are additional options available but these are just the ones we are current using.\n// See: https://github.com/neocotic/qrious#examples\ninterface QRiousOptions {\n element: HTMLElement;\n value: string;\n size: number;\n}\n\ndeclare global {\n interface Window {\n QRious: new (options: QRiousOptions) => unknown;\n }\n}\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: AuthResponse) {\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.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","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class UpdateTwoFactorEmailRequest extends SecretVerificationRequest {\n token: string;\n email: string;\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 { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { TwoFactorEmailRequest } from \"@bitwarden/common/models/request/two-factor-email.request\";\nimport { UpdateTwoFactorEmailRequest } from \"@bitwarden/common/models/request/update-two-factor-email.request\";\nimport { TwoFactorEmailResponse } from \"@bitwarden/common/models/response/two-factor-email.response\";\nimport { AuthResponse } from \"@bitwarden/common/types/authResponse\";\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: AuthResponse) {\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 {{ \"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 } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { TwoFactorRecoverResponse } from \"@bitwarden/common/models/response/two-factor-recover.response\";\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","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class UpdateTwoFactorWebAuthnDeleteRequest extends SecretVerificationRequest {\n id: number;\n}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class UpdateTwoFactorWebAuthnRequest extends SecretVerificationRequest {\n deviceResponse: PublicKeyCredential;\n name: string;\n id: number;\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, NgZone } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/models/request/secret-verification.request\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"@bitwarden/common/models/request/update-two-factor-web-authn-delete.request\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"@bitwarden/common/models/request/update-two-factor-web-authn.request\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"@bitwarden/common/models/response/two-factor-web-authn.response\";\nimport { AuthResponse } from \"@bitwarden/common/types/authResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\ninterface Key {\n id: number;\n name: string;\n configured: boolean;\n migrated?: boolean;\n removePromise: Promise | null;\n}\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: Key[];\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: AuthResponse) {\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: Key) {\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 as any);\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","import { SecretVerificationRequest } from \"./secret-verification.request\";\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","
\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 \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"@bitwarden/common/models/request/update-two-factor-yubio-otp.request\";\nimport { TwoFactorYubiKeyResponse } from \"@bitwarden/common/models/response/two-factor-yubi-key.response\";\nimport { AuthResponse } from \"@bitwarden/common/types/authResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\ninterface Key {\n key: string;\n existingKey: string;\n}\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: Key[];\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: AuthResponse) {\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: Key) {\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","import { Component, OnDestroy, OnInit, Type, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { ModalRef } from \"@bitwarden/angular/components/modal/modal.ref\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { TwoFactorProviders } from \"@bitwarden/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, OnDestroy {\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 formPromise: Promise;\n\n private destroy$ = new Subject();\n private twoFactorAuthPolicyAppliesToActiveUser: boolean;\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\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.TwoFactorAuthentication)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n this.twoFactorAuthPolicyAppliesToActiveUser = policyAppliesToActiveUser;\n });\n\n await this.load();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 = this.twoFactorAuthPolicyAppliesToActiveUser;\n } else {\n this.showPolicyWarning = false;\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { VerificationType } from \"@bitwarden/common/enums/verificationType\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/models/request/secret-verification.request\";\nimport { AuthResponse } from \"@bitwarden/common/types/authResponse\";\nimport { TwoFactorResponse } from \"@bitwarden/common/types/twoFactorResponse\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\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, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/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 private organizationApiService: OrganizationApiServiceAbstraction\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.organizationApiService.updateLicense(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 { NgModule } from \"@angular/core\";\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 { RecoverDeleteComponent } from \"../accounts/recover-delete.component\";\nimport { RecoverTwoFactorComponent } from \"../accounts/recover-two-factor.component\";\nimport { RegisterFormModule } from \"../accounts/register-form/register-form.module\";\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 { DynamicAvatarComponent } from \"../components/dynamic-avatar.component\";\nimport { NestedCheckboxComponent } from \"../components/nested-checkbox.component\";\nimport { OrganizationSwitcherComponent } from \"../components/organization-switcher.component\";\nimport { PasswordRepromptComponent } from \"../components/password-reprompt.component\";\nimport { PremiumBadgeComponent } from \"../components/premium-badge.component\";\nimport { SelectableAvatarComponent } from \"../components/selectable-avatar.component\";\nimport { UserVerificationPromptComponent } from \"../components/user-verification-prompt.component\";\nimport { UserVerificationComponent } from \"../components/user-verification.component\";\nimport { FooterComponent } from \"../layouts/footer.component\";\nimport { FrontendLayoutComponent } from \"../layouts/frontend-layout.component\";\nimport { NavbarComponent } from \"../layouts/navbar.component\";\nimport { ProductSwitcherModule } from \"../layouts/product-switcher/product-switcher.module\";\nimport { UserLayoutComponent } from \"../layouts/user-layout.component\";\nimport { OrganizationCreateModule } from \"../organizations/create/organization-create.module\";\nimport { OrganizationLayoutComponent } from \"../organizations/layouts/organization-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 { BulkRestoreRevokeComponent as OrgBulkRestoreRevokeComponent } from \"../organizations/manage/bulk/bulk-restore-revoke.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 { 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 { 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 { AcceptFamilySponsorshipComponent } from \"../organizations/sponsorships/accept-family-sponsorship.component\";\nimport { FamiliesForEnterpriseSetupComponent } from \"../organizations/sponsorships/families-for-enterprise-setup.component\";\nimport { ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent } from \"../organizations/tools/exposed-passwords-report.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 { CollectionsComponent as OrgCollectionsComponent } from \"../organizations/vault/collections.component\";\nimport { ProvidersComponent } from \"../providers/providers.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 { BillingHistoryViewComponent } from \"../settings/billing-history-view.component\";\nimport { BillingHistoryComponent } from \"../settings/billing-history.component\";\nimport { BillingSyncKeyComponent } from \"../settings/billing-sync-key.component\";\nimport { ChangeAvatarComponent } from \"../settings/change-avatar.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 { OrganizationPlansComponent } from \"../settings/organization-plans.component\";\nimport { PaymentMethodComponent } from \"../settings/payment-method.component\";\nimport { PaymentComponent } from \"../settings/payment.component\";\nimport { PreferencesComponent } from \"../settings/preferences.component\";\nimport { PremiumComponent } from \"../settings/premium.component\";\nimport { ProfileComponent } from \"../settings/profile.component\";\nimport { PurgeVaultComponent } from \"../settings/purge-vault.component\";\nimport { SecurityKeysComponent } from \"../settings/security-keys.component\";\nimport { SecurityComponent } from \"../settings/security.component\";\nimport { SettingsComponent } from \"../settings/settings.component\";\nimport { SponsoredFamiliesComponent } from \"../settings/sponsored-families.component\";\nimport { SponsoringOrgRowComponent } from \"../settings/sponsoring-org-row.component\";\nimport { SubscriptionComponent } from \"../settings/subscription.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 { UserSubscriptionComponent } from \"../settings/user-subscription.component\";\nimport { VaultTimeoutInputComponent } from \"../settings/vault-timeout-input.component\";\nimport { VerifyEmailComponent } from \"../settings/verify-email.component\";\nimport { GeneratorComponent } from \"../tools/generator.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 { CollectionsComponent } from \"../vault/collections.component\";\nimport { FolderAddEditComponent } from \"../vault/folder-add-edit.component\";\nimport { ShareComponent } from \"../vault/share.component\";\nimport { VaultFilterModule } from \"../vault/vault-filter/vault-filter.module\";\n\nimport { SharedModule } from \".\";\n\n// Please do not add to this list of declarations - we should refactor these into modules when doing so makes sense until there are none left.\n// If you are building new functionality, please create or extend a feature module instead.\n@NgModule({\n imports: [\n SharedModule,\n VaultFilterModule,\n OrganizationCreateModule,\n RegisterFormModule,\n ProductSwitcherModule,\n ],\n declarations: [\n PremiumBadgeComponent,\n AcceptEmergencyComponent,\n AcceptFamilySponsorshipComponent,\n AcceptOrganizationComponent,\n AccessComponent,\n AccountComponent,\n AddCreditComponent,\n AddEditComponent,\n AddEditCustomFieldsComponent,\n AddEditCustomFieldsComponent,\n AdjustPaymentComponent,\n AdjustStorageComponent,\n ApiKeyComponent,\n AttachmentsComponent,\n BillingSyncKeyComponent,\n BulkActionsComponent,\n BulkDeleteComponent,\n BulkMoveComponent,\n BulkRestoreComponent,\n BulkShareComponent,\n ChangeEmailComponent,\n ChangeKdfComponent,\n ChangePasswordComponent,\n CollectionsComponent,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DomainRulesComponent,\n DynamicAvatarComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n FamiliesForEnterpriseSetupComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n LockComponent,\n NavbarComponent,\n NestedCheckboxComponent,\n OrganizationSwitcherComponent,\n OrgAddEditComponent,\n OrganizationLayoutComponent,\n OrganizationPlansComponent,\n OrgAttachmentsComponent,\n OrgBulkConfirmComponent,\n OrgBulkRestoreRevokeComponent,\n OrgBulkRemoveComponent,\n OrgBulkStatusComponent,\n OrgCollectionAddEditComponent,\n OrgCollectionsComponent,\n OrgEntityEventsComponent,\n OrgEventsComponent,\n OrgExposedPasswordsReportComponent,\n OrgGroupAddEditComponent,\n OrgGroupsComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgManageCollectionsComponent,\n OrgManageComponent,\n OrgPeopleComponent,\n OrgResetPasswordComponent,\n OrgReusedPasswordsReportComponent,\n OrgToolsComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserAddEditComponent,\n OrgUserConfirmComponent,\n OrgUserGroupsComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordRepromptComponent,\n UserVerificationPromptComponent,\n PaymentComponent,\n PaymentMethodComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n PremiumComponent,\n ProfileComponent,\n ChangeAvatarComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RemovePasswordComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SelectableAvatarComponent,\n SendAddEditComponent,\n SendComponent,\n SendEffluxDatesComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n SubscriptionComponent,\n TaxInfoComponent,\n ToolsComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n BillingHistoryComponent,\n BillingHistoryViewComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n UserVerificationComponent,\n VaultTimeoutInputComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n ],\n exports: [\n PremiumBadgeComponent,\n AcceptEmergencyComponent,\n AcceptOrganizationComponent,\n AccessComponent,\n AccountComponent,\n AddCreditComponent,\n AddEditComponent,\n AddEditCustomFieldsComponent,\n AddEditCustomFieldsComponent,\n AdjustPaymentComponent,\n AdjustStorageComponent,\n ApiKeyComponent,\n AttachmentsComponent,\n BulkActionsComponent,\n BulkDeleteComponent,\n BulkMoveComponent,\n BulkRestoreComponent,\n BulkShareComponent,\n ChangeEmailComponent,\n ChangeKdfComponent,\n ChangePasswordComponent,\n CollectionsComponent,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DomainRulesComponent,\n DynamicAvatarComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n FamiliesForEnterpriseSetupComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n LockComponent,\n NavbarComponent,\n NestedCheckboxComponent,\n OrganizationSwitcherComponent,\n OrgAddEditComponent,\n OrganizationLayoutComponent,\n OrganizationPlansComponent,\n OrgAttachmentsComponent,\n OrgBulkConfirmComponent,\n OrgBulkRestoreRevokeComponent,\n OrgBulkRemoveComponent,\n OrgBulkStatusComponent,\n OrgCollectionAddEditComponent,\n OrgCollectionsComponent,\n OrgEntityEventsComponent,\n OrgEventsComponent,\n OrgExposedPasswordsReportComponent,\n OrgGroupAddEditComponent,\n OrgGroupsComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgManageCollectionsComponent,\n OrgManageComponent,\n OrgPeopleComponent,\n OrgResetPasswordComponent,\n OrgReusedPasswordsReportComponent,\n OrgToolsComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserAddEditComponent,\n OrgUserConfirmComponent,\n OrgUserGroupsComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordRepromptComponent,\n PaymentComponent,\n PaymentMethodComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n PremiumComponent,\n ProfileComponent,\n ChangeAvatarComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RemovePasswordComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SelectableAvatarComponent,\n SendAddEditComponent,\n SendComponent,\n SendEffluxDatesComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n SubscriptionComponent,\n TaxInfoComponent,\n ToolsComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n BillingHistoryComponent,\n BillingHistoryViewComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n UserVerificationComponent,\n VaultTimeoutInputComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n ],\n})\nexport class LooseComponentsModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../shared\";\n\nimport { BitActionDirective } from \"./bit-action.directive\";\nimport { BitSubmitDirective } from \"./bit-submit.directive\";\nimport { BitFormButtonDirective } from \"./form-button.directive\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [BitActionDirective, BitFormButtonDirective, BitSubmitDirective],\n exports: [BitActionDirective, BitFormButtonDirective, BitSubmitDirective],\n})\nexport class AsyncActionsModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { AvatarComponent } from \"./avatar.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [AvatarComponent],\n declarations: [AvatarComponent],\n})\nexport class AvatarModule {}\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","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","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BitIconButtonComponent } from \"./icon-button.component\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitIconButtonComponent],\n exports: [BitIconButtonComponent],\n})\nexport class IconButtonModule {}\n","import { DialogModule as CdkDialogModule } from \"@angular/cdk/dialog\";\nimport { NgModule } from \"@angular/core\";\n\nimport { IconButtonModule } from \"../icon-button\";\nimport { SharedModule } from \"../shared\";\n\nimport { DialogService } from \"./dialog.service\";\nimport { DialogComponent } from \"./dialog/dialog.component\";\nimport { DialogCloseDirective } from \"./directives/dialog-close.directive\";\nimport { DialogTitleContainerDirective } from \"./directives/dialog-title-container.directive\";\nimport { IconDirective, SimpleDialogComponent } from \"./simple-dialog/simple-dialog.component\";\n\n@NgModule({\n imports: [SharedModule, IconButtonModule, CdkDialogModule],\n declarations: [\n DialogCloseDirective,\n DialogTitleContainerDirective,\n DialogComponent,\n SimpleDialogComponent,\n IconDirective,\n ],\n exports: [\n CdkDialogModule,\n DialogComponent,\n SimpleDialogComponent,\n DialogCloseDirective,\n IconDirective,\n ],\n providers: [DialogService],\n})\nexport class DialogModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BitIconComponent } from \"./icon.component\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitIconComponent],\n exports: [BitIconComponent],\n})\nexport class IconModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { AnchorLinkDirective, ButtonLinkDirective } from \"./link.directive\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [AnchorLinkDirective, ButtonLinkDirective],\n declarations: [AnchorLinkDirective, ButtonLinkDirective],\n})\nexport class LinkModule {}\n","import { A11yModule } from \"@angular/cdk/a11y\";\nimport { OverlayModule } from \"@angular/cdk/overlay\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { MenuDividerComponent } from \"./menu-divider.component\";\nimport { MenuItemDirective } from \"./menu-item.directive\";\nimport { MenuTriggerForDirective } from \"./menu-trigger-for.directive\";\nimport { MenuComponent } from \"./menu.component\";\n\n@NgModule({\n imports: [A11yModule, CommonModule, OverlayModule],\n declarations: [MenuComponent, MenuTriggerForDirective, MenuItemDirective, MenuDividerComponent],\n exports: [MenuComponent, MenuTriggerForDirective, MenuItemDirective, MenuDividerComponent],\n})\nexport class MenuModule {}\n","import { OverlayModule } from \"@angular/cdk/overlay\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { RouterModule } from \"@angular/router\";\n\nimport { IconButtonModule } from \"../icon-button/icon-button.module\";\nimport { SharedModule } from \"../shared/shared.module\";\n\nimport { NavDividerComponent } from \"./nav-divider.component\";\nimport { NavGroupComponent } from \"./nav-group.component\";\nimport { NavItemComponent } from \"./nav-item.component\";\n\n@NgModule({\n imports: [CommonModule, SharedModule, IconButtonModule, OverlayModule, RouterModule],\n declarations: [NavDividerComponent, NavGroupComponent, NavItemComponent],\n exports: [NavDividerComponent, NavGroupComponent, NavItemComponent],\n})\nexport class NavigationModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { CellDirective } from \"./cell.directive\";\nimport { RowDirective } from \"./row.directive\";\nimport { TableComponent } from \"./table.component\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [TableComponent, CellDirective, RowDirective],\n exports: [TableComponent, CellDirective, RowDirective],\n})\nexport class TableModule {}\n","import { PortalModule } from \"@angular/cdk/portal\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { RouterModule } from \"@angular/router\";\n\nimport { TabHeaderComponent } from \"./shared/tab-header.component\";\nimport { TabListContainerDirective } from \"./shared/tab-list-container.directive\";\nimport { TabListItemDirective } from \"./shared/tab-list-item.directive\";\nimport { TabBodyComponent } from \"./tab-group/tab-body.component\";\nimport { TabGroupComponent } from \"./tab-group/tab-group.component\";\nimport { TabLabelDirective } from \"./tab-group/tab-label.directive\";\nimport { TabComponent } from \"./tab-group/tab.component\";\nimport { TabLinkComponent } from \"./tab-nav-bar/tab-link.component\";\nimport { TabNavBarComponent } from \"./tab-nav-bar/tab-nav-bar.component\";\n\n@NgModule({\n imports: [CommonModule, RouterModule, PortalModule],\n exports: [\n TabGroupComponent,\n TabComponent,\n TabLabelDirective,\n TabNavBarComponent,\n TabLinkComponent,\n ],\n declarations: [\n TabGroupComponent,\n TabComponent,\n TabLabelDirective,\n TabListContainerDirective,\n TabListItemDirective,\n TabHeaderComponent,\n TabNavBarComponent,\n TabLinkComponent,\n TabBodyComponent,\n ],\n})\nexport class TabsModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { ColorPasswordComponent } from \"./color-password.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [ColorPasswordComponent],\n declarations: [ColorPasswordComponent],\n})\nexport class ColorPasswordModule {}\n","import { registerLocaleData } from \"@angular/common\";\nimport localeAf from \"@angular/common/locales/af\";\nimport localeAr from \"@angular/common/locales/ar\";\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 localeEu from \"@angular/common/locales/eu\";\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\";\n\nregisterLocaleData(localeAf, \"af\");\nregisterLocaleData(localeAr, \"ar\");\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(localeEu, \"eu\");\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","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { CommonModule, DatePipe } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { RouterModule } from \"@angular/router\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\nimport { ToastrModule } from \"ngx-toastr\";\n\nimport { JslibModule } from \"@bitwarden/angular/jslib.module\";\nimport {\n AsyncActionsModule,\n AvatarModule,\n BadgeModule,\n ButtonModule,\n CalloutModule,\n DialogModule,\n FormFieldModule,\n IconButtonModule,\n IconModule,\n LinkModule,\n MenuModule,\n NavigationModule,\n TableModule,\n TabsModule,\n ColorPasswordModule,\n} from \"@bitwarden/components\";\n\n// Register the locales for the application\nimport \"./locales\";\n\n/**\n * This NgModule should contain the most basic shared directives, pipes, and components. They\n * should be widely used by other modules to be considered for adding to this module. If in doubt\n * do not add to this module.\n *\n * See: https://angular.io/guide/module-types#shared-ngmodules\n */\n@NgModule({\n imports: [\n CommonModule,\n DragDropModule,\n FormsModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n RouterModule,\n ToastrModule,\n JslibModule,\n\n // Component library\n AsyncActionsModule,\n AvatarModule,\n BadgeModule,\n ButtonModule,\n CalloutModule,\n DialogModule,\n FormFieldModule,\n IconButtonModule,\n IconModule,\n LinkModule,\n MenuModule,\n NavigationModule,\n TableModule,\n TabsModule,\n LinkModule,\n ColorPasswordModule,\n\n // Web specific\n ],\n exports: [\n CommonModule,\n DragDropModule,\n FormsModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n RouterModule,\n ToastrModule,\n JslibModule,\n\n // Component library\n AsyncActionsModule,\n AvatarModule,\n BadgeModule,\n ButtonModule,\n CalloutModule,\n DialogModule,\n FormFieldModule,\n IconButtonModule,\n IconModule,\n LinkModule,\n MenuModule,\n NavigationModule,\n TableModule,\n TabsModule,\n LinkModule,\n ColorPasswordModule,\n\n // Web specific\n ],\n providers: [DatePipe],\n bootstrap: [],\n})\nexport class SharedModule {}\n","import { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport { Directive, Input, OnChanges, SimpleChanges } from \"@angular/core\";\n\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { EventType } from \"@bitwarden/common/enums/eventType\";\nimport { FieldType } from \"@bitwarden/common/enums/fieldType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { FieldView } from \"@bitwarden/common/models/view/field.view\";\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(\n private i18nService: I18nService,\n private eventCollectionService: EventCollectionService\n ) {\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.eventCollectionService.collect(\n EventType.Cipher_ClientToggledHiddenFieldVisible,\n this.cipher.id\n );\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, 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: boolean | string = true;\n @Input() falseValue: boolean | string = 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","\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, Input } from \"@angular/core\";\n\nimport { AddEditCustomFieldsComponent as BaseAddEditCustomFieldsComponent } from \"@bitwarden/angular/components/add-edit-custom-fields.component\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { I18nService } from \"@bitwarden/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, eventCollectionService: EventCollectionService) {\n super(i18nService, eventCollectionService);\n }\n}\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { Observable, Subject, takeUntil, concatMap } from \"rxjs\";\n\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/enums/cipherRepromptType\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { EventType } from \"@bitwarden/common/enums/eventType\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { SecureNoteType } from \"@bitwarden/common/enums/secureNoteType\";\nimport { UriMatchType } from \"@bitwarden/common/enums/uriMatchType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CardView } from \"@bitwarden/common/models/view/card.view\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { FolderView } from \"@bitwarden/common/models/view/folder.view\";\nimport { IdentityView } from \"@bitwarden/common/models/view/identity.view\";\nimport { LoginUriView } from \"@bitwarden/common/models/view/login-uri.view\";\nimport { LoginView } from \"@bitwarden/common/models/view/login.view\";\nimport { SecureNoteView } from \"@bitwarden/common/models/view/secure-note.view\";\n\n@Directive()\nexport class AddEditComponent implements OnInit, OnDestroy {\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$: Observable;\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 organization: Organization;\n\n protected componentName = \"\";\n protected destroy$ = new Subject();\n protected writeableCollections: CollectionView[];\n private personalOwnershipPolicyAppliesToActiveUser: boolean;\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 eventCollectionService: EventCollectionService,\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: \"RuPay\", value: \"RuPay\" },\n { name: i18nService.t(\"cardBrandMir\"), value: \"Mir\" },\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 this.policyService\n .policyAppliesToActiveUser$(PolicyType.PersonalOwnership)\n .pipe(\n concatMap(async (policyAppliesToActiveUser) => {\n this.personalOwnershipPolicyAppliesToActiveUser = policyAppliesToActiveUser;\n await this.init();\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async init() {\n if (this.ownershipOptions.length) {\n this.ownershipOptions = [];\n }\n if (this.personalOwnershipPolicyAppliesToActiveUser) {\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$ = this.folderService.folderViews$;\n\n if (this.editMode && this.previousCipherId !== this.cipherId) {\n this.eventCollectionService.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 getCardExpMonthDisplay() {\n return this.cardExpMonthOptions.find((x) => x.value == this.cipher.card.expMonth)?.name;\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 false,\n this.componentName != \"\" ? this.componentName + \" .modal-content\" : null\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.eventCollectionService.collect(\n EventType.Cipher_ClientToggledPasswordVisible,\n this.cipherId\n );\n }\n }\n\n async toggleCardNumber() {\n this.showCardNumber = !this.showCardNumber;\n if (this.showCardNumber) {\n this.eventCollectionService.collect(\n EventType.Cipher_ClientToggledCardNumberVisible,\n this.cipherId\n );\n }\n }\n\n toggleCardCode() {\n this.showCardCode = !this.showCardCode;\n document.getElementById(\"cardCode\").focus();\n if (this.editMode && this.showCardCode) {\n this.eventCollectionService.collect(\n EventType.Cipher_ClientToggledCardCodeVisible,\n this.cipherId\n );\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.cipher.id == null\n ? this.cipherService.createWithServer(cipher)\n : this.cipherService.updateWithServer(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 { Component, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"@bitwarden/angular/components/add-edit.component\";\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { EventType } from \"@bitwarden/common/enums/eventType\";\nimport { LoginUriView } from \"@bitwarden/common/models/view/login-uri.view\";\n\n@Component({\n selector: \"app-vault-add-edit\",\n templateUrl: \"add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent implements OnInit, OnDestroy {\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 showPasswordCount = false;\n\n protected totpInterval: number;\n protected override componentName = \"app-vault-add-edit\";\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 eventCollectionService: EventCollectionService,\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 eventCollectionService,\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 ngOnDestroy() {\n super.ngOnDestroy();\n }\n\n toggleFavorite() {\n this.cipher.favorite = !this.cipher.favorite;\n }\n\n togglePassword() {\n super.togglePassword();\n\n // Hide password count when password is hidden to be safe\n if (!this.showPassword && this.showPasswordCount) {\n this.togglePasswordCount();\n }\n }\n\n togglePasswordCount() {\n this.showPasswordCount = !this.showPasswordCount;\n\n if (this.editMode && this.showPasswordCount) {\n this.eventCollectionService.collect(\n EventType.Cipher_ClientToggledPasswordVisible,\n this.cipherId\n );\n }\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.eventCollectionService.collect(\n EventType.Cipher_ClientToggledHiddenFieldVisible,\n this.cipherId\n );\n } else if (typeI18nKey === \"securityCode\") {\n this.eventCollectionService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId);\n } else if (aType === \"H_Field\") {\n this.eventCollectionService.collect(\n EventType.Cipher_ClientCopiedHiddenField,\n this.cipherId\n );\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 showGetPremium() {\n if (this.canAccessPremium) {\n return;\n }\n if (this.cipher.organizationUseTotp) {\n this.upgradeOrganization();\n } else {\n this.premiumRequired();\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 { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { OrganizationNameBadgeComponent } from \"./organization-name-badge.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [OrganizationNameBadgeComponent],\n exports: [OrganizationNameBadgeComponent],\n})\nexport class OrganizationBadgeModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../shared\";\nimport { LinkSsoComponent } from \"../organization-filter/link-sso.component\";\nimport { OrganizationFilterComponent } from \"../organization-filter/organization-filter.component\";\nimport { OrganizationOptionsComponent } from \"../organization-filter/organization-options.component\";\n\nimport { CollectionFilterComponent } from \"./collection-filter/collection-filter.component\";\nimport { FolderFilterComponent } from \"./folder-filter/folder-filter.component\";\nimport { StatusFilterComponent } from \"./status-filter/status-filter.component\";\nimport { TypeFilterComponent } from \"./type-filter/type-filter.component\";\nimport { VaultFilterService } from \"./vault-filter.service\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [\n CollectionFilterComponent,\n FolderFilterComponent,\n StatusFilterComponent,\n TypeFilterComponent,\n OrganizationFilterComponent,\n OrganizationOptionsComponent,\n LinkSsoComponent,\n ],\n exports: [\n SharedModule,\n CollectionFilterComponent,\n FolderFilterComponent,\n StatusFilterComponent,\n TypeFilterComponent,\n OrganizationFilterComponent,\n OrganizationOptionsComponent,\n LinkSsoComponent,\n ],\n providers: [VaultFilterService],\n})\nexport class VaultFilterSharedModule {}\n","import { Injectable } from \"@angular/core\";\nimport { BehaviorSubject, Observable } from \"rxjs\";\n\nimport { DynamicTreeNode } from \"@bitwarden/angular/vault/vault-filter/models/dynamic-tree-node.model\";\nimport { VaultFilterService as BaseVaultFilterService } from \"@bitwarden/angular/vault/vault-filter/services/vault-filter.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collection.data\";\nimport { Collection } from \"@bitwarden/common/models/domain/collection\";\nimport { CollectionDetailsResponse } from \"@bitwarden/common/models/response/collection.response\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\n\n@Injectable()\nexport class VaultFilterService extends BaseVaultFilterService {\n private _collapsedFilterNodes = new BehaviorSubject>(new Set());\n collapsedFilterNodes$: Observable> = this._collapsedFilterNodes.asObservable();\n\n constructor(\n stateService: StateService,\n organizationService: OrganizationService,\n folderService: FolderService,\n cipherService: CipherService,\n collectionService: CollectionService,\n policyService: PolicyService,\n private i18nService: I18nService,\n protected apiService: ApiService\n ) {\n super(\n stateService,\n organizationService,\n folderService,\n cipherService,\n collectionService,\n policyService\n );\n }\n\n async buildCollapsedFilterNodes(): Promise> {\n const nodes = await super.buildCollapsedFilterNodes();\n this._collapsedFilterNodes.next(nodes);\n return nodes;\n }\n\n async storeCollapsedFilterNodes(collapsedFilterNodes: Set): Promise {\n await super.storeCollapsedFilterNodes(collapsedFilterNodes);\n this._collapsedFilterNodes.next(collapsedFilterNodes);\n }\n\n async ensureVaultFiltersAreExpanded() {\n const collapsedFilterNodes = await super.buildCollapsedFilterNodes();\n if (!collapsedFilterNodes.has(\"vaults\")) {\n return;\n }\n collapsedFilterNodes.delete(\"vaults\");\n await this.storeCollapsedFilterNodes(collapsedFilterNodes);\n }\n\n async buildAdminCollections(organizationId: string) {\n let result: CollectionView[] = [];\n const collectionResponse = await this.apiService.getCollections(organizationId);\n if (collectionResponse?.data != null && collectionResponse.data.length) {\n const collectionDomains = collectionResponse.data.map(\n (r: CollectionDetailsResponse) => new Collection(new CollectionData(r))\n );\n result = await this.collectionService.decryptMany(collectionDomains);\n }\n\n const noneCollection = new CollectionView();\n noneCollection.name = this.i18nService.t(\"unassigned\");\n noneCollection.organizationId = organizationId;\n result.push(noneCollection);\n\n const nestedCollections = await this.collectionService.getAllNested(result);\n return new DynamicTreeNode({\n fullList: result,\n nestedList: nestedCollections,\n });\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { VaultFilterSharedModule } from \"./shared/vault-filter-shared.module\";\nimport { VaultFilterComponent } from \"./vault-filter.component\";\n\n@NgModule({\n imports: [VaultFilterSharedModule],\n declarations: [VaultFilterComponent],\n exports: [VaultFilterComponent],\n})\nexport class VaultFilterModule {}\n","import {\n flagEnabled as baseFlagEnabled,\n devFlagEnabled as baseDevFlagEnabled,\n devFlagValue as baseDevFlagValue,\n SharedFlags,\n SharedDevFlags,\n} from \"@bitwarden/common/misc/flags\";\n\n// required to avoid linting errors when there are no flags\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport type Flags = {\n secretsManager?: boolean;\n showPasswordless?: boolean;\n} & SharedFlags;\n\n// required to avoid linting errors when there are no flags\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport type DevFlags = {} & SharedDevFlags;\n\nexport function flagEnabled(flag: keyof Flags): boolean {\n return baseFlagEnabled(flag);\n}\n\nexport function devFlagEnabled(flag: keyof DevFlags) {\n return baseDevFlagEnabled(flag);\n}\n\nexport function devFlagValue(flag: keyof DevFlags) {\n return baseDevFlagValue(flag);\n}\n","export abstract class AccountService {}\n\nexport abstract class InternalAccountService extends AccountService {\n abstract delete(): void;\n}\n","import { ServerConfigResponse } from \"../../models/response/server-config.response\";\n\nexport abstract class ConfigApiServiceAbstraction {\n get: () => Promise;\n}\n","export abstract class EventUploadService {\n uploadEvents: (userId?: string) => Promise;\n}\n","import { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachment-upload-data.response\";\nimport { SendFileUploadDataResponse } from \"../models/response/send-file-upload-data.response\";\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","export abstract class NotificationsService {\n init: () => Promise;\n updateConnection: (sync?: boolean) => Promise;\n reconnectFromActivity: () => Promise;\n disconnectFromInactivity: () => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { AccountSettingsSettings } from \"../models/domain/account\";\n\nexport abstract class SettingsService {\n settings$: Observable;\n\n setEquivalentDomains: (equivalentDomains: string[][]) => Promise;\n clear: (userId?: string) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { SyncEventArgs } from \"../../types/syncEventArgs\";\n\nexport abstract class SyncNotifierService {\n sync$: Observable;\n next: (event: SyncEventArgs) => void;\n}\n","import { VerifyOTPRequest } from \"../../models/request/account/verify-otp.request\";\n\nexport abstract class UserVerificationApiServiceAbstraction {\n postAccountVerifyOTP: (request: VerifyOTPRequest) => Promise;\n postAccountRequestOTP: () => Promise;\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/global-state\";\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/global-state\";\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","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 Five = 5, // Migrate to new storage of encrypted organization keys\n Six = 6, // Delete account.keys.legacyEtmKey property\n Latest = Six,\n}\n","import { StateVersion } from \"../../enums/stateVersion\";\nimport { ThemeType } from \"../../enums/themeType\";\n\nimport { EnvironmentUrls } from \"./environment-urls\";\nimport { WindowState } from \"./window-state\";\n\nexport class GlobalState {\n enableAlwaysOnTop?: boolean;\n installedVersion?: string;\n locale?: string;\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 enableDuckDuckGoBrowserIntegration?: boolean;\n}\n","export class UpdateAvatarRequest {\n avatarColor: string;\n\n constructor(avatarColor: string) {\n this.avatarColor = avatarColor;\n }\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 AuthRequest = 15,\n AuthRequestResponse = 16,\n}\n","import { NotificationType } from \"../../enums/notificationType\";\n\nimport { BaseResponse } from \"./base.response\";\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 case NotificationType.AuthRequest:\n case NotificationType.AuthRequestResponse:\n this.payload = new AuthRequestPushNotification(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\nexport class AuthRequestPushNotification extends BaseResponse {\n id: string;\n userId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport {\n HttpTransportType,\n HubConnection,\n HubConnectionBuilder,\n IHubProtocol,\n} from \"@microsoft/signalr\";\nimport { MessagePackHubProtocol } from \"@microsoft/signalr-protocol-msgpack\";\n\nimport { AnonymousHubService as AnonymousHubServiceAbstraction } from \"../abstractions/anonymousHub.service\";\nimport { AuthService } from \"../abstractions/auth.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { LogService } from \"../abstractions/log.service\";\n\nimport {\n AuthRequestPushNotification,\n NotificationResponse,\n} from \"./../models/response/notification.response\";\n\n@Injectable()\nexport class AnonymousHubService implements AnonymousHubServiceAbstraction {\n private anonHubConnection: HubConnection;\n private url: string;\n\n constructor(\n private environmentService: EnvironmentService,\n private authService: AuthService,\n private logService: LogService\n ) {}\n\n async createHubConnection(token: string) {\n this.url = this.environmentService.getNotificationsUrl();\n\n this.anonHubConnection = new HubConnectionBuilder()\n .withUrl(this.url + \"/anonymous-hub?Token=\" + token, {\n skipNegotiation: true,\n transport: HttpTransportType.WebSockets,\n })\n .withHubProtocol(new MessagePackHubProtocol() as IHubProtocol)\n .build();\n\n this.anonHubConnection.start().catch((error) => this.logService.error(error));\n\n this.anonHubConnection.on(\"AuthRequestResponseRecieved\", (data: any) => {\n this.ProcessNotification(new NotificationResponse(data));\n });\n }\n\n stopHubConnection() {\n if (this.anonHubConnection) {\n this.anonHubConnection.stop();\n }\n }\n\n private async ProcessNotification(notification: NotificationResponse) {\n await this.authService.authResponsePushNotifiction(\n notification.payload as AuthRequestPushNotification\n );\n }\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 { DeviceRequest } from \"../device.request\";\n\nimport { TokenTwoFactorRequest } from \"./token-two-factor.request\";\n\nexport abstract class TokenRequest {\n protected device?: DeviceRequest;\n protected passwordlessAuthRequest: string;\n\n constructor(protected twoFactor: TokenTwoFactorRequest, 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: TokenTwoFactorRequest) {\n this.twoFactor = twoFactor;\n }\n\n setPasswordlessAccessCode(accessCode: string) {\n this.passwordlessAuthRequest = accessCode;\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 //passswordless login\n if (this.passwordlessAuthRequest) {\n obj.authRequest = this.passwordlessAuthRequest;\n }\n\n if (this.twoFactor) {\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\n return obj;\n }\n}\n","import { DeviceRequest } from \"../device.request\";\n\nimport { TokenTwoFactorRequest } from \"./token-two-factor.request\";\nimport { TokenRequest } from \"./token.request\";\n\nexport class UserApiTokenRequest extends TokenRequest {\n constructor(\n public clientId: string,\n public clientSecret: string,\n protected twoFactor: TokenTwoFactorRequest,\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 { BaseResponse } from \"./base.response\";\n\nexport class ApiKeyResponse extends BaseResponse {\n apiKey: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.apiKey = this.getResponseProperty(\"ApiKey\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n","import { FileUploadType } from \"../../enums/fileUploadType\";\n\nimport { BaseResponse } from \"./base.response\";\nimport { CipherResponse } from \"./cipher.response\";\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","import { DeviceType } from \"../../enums/deviceType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class AuthRequestResponse extends BaseResponse {\n id: string;\n publicKey: string;\n requestDeviceType: DeviceType;\n requestIpAddress: string;\n key: string;\n masterPasswordHash: string;\n creationDate: string;\n requestApproved: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.publicKey = this.getResponseProperty(\"PublicKey\");\n this.requestDeviceType = this.getResponseProperty(\"RequestDeviceType\");\n this.requestIpAddress = this.getResponseProperty(\"RequestIpAddress\");\n this.key = this.getResponseProperty(\"Key\");\n this.masterPasswordHash = this.getResponseProperty(\"MasterPasswordHash\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n this.requestApproved = this.getResponseProperty(\"RequestApproved\");\n }\n}\n","import { BaseResponse } from \"../base.response\";\n\nimport { ICaptchaProtectedResponse } from \"./captcha-protected.response\";\n\nexport class RegisterResponse extends BaseResponse implements ICaptchaProtectedResponse {\n captchaBypassToken: string;\n\n constructor(response: any) {\n super(response);\n this.captchaBypassToken = this.getResponseProperty(\"CaptchaBypassToken\");\n }\n}\n","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\nimport { TransactionType } from \"../../enums/transactionType\";\n\nimport { BaseResponse } from \"./base.response\";\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 get hasNoHistory() {\n return this.invoices.length == 0 && this.transactions.length == 0;\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 \"./base.response\";\nimport { BillingInvoiceResponse, BillingTransactionResponse } from \"./billing.response\";\n\nexport class BillingHistoryResponse extends BaseResponse {\n invoices: BillingInvoiceResponse[] = [];\n transactions: BillingTransactionResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const transactions = this.getResponseProperty(\"Transactions\");\n const invoices = this.getResponseProperty(\"Invoices\");\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 get hasNoHistory() {\n return this.invoices.length == 0 && this.transactions.length == 0;\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { BillingSourceResponse } from \"./billing.response\";\n\nexport class BillingPaymentResponse extends BaseResponse {\n balance: number;\n paymentSource: BillingSourceResponse;\n\n constructor(response: any) {\n super(response);\n this.balance = this.getResponseProperty(\"Balance\");\n const paymentSource = this.getResponseProperty(\"PaymentSource\");\n this.paymentSource = paymentSource == null ? null : new BillingSourceResponse(paymentSource);\n }\n}\n","import { BaseResponse } from \"./base.response\";\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 { BaseResponse } from \"./base.response\";\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 { BaseResponse } from \"./base.response\";\nimport { SelectionReadOnlyResponse } from \"./selection-read-only.response\";\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 \"./base.response\";\n\nexport class DeviceVerificationResponse extends BaseResponse {\n isDeviceVerificationSectionEnabled: boolean;\n unknownDeviceVerificationEnabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.isDeviceVerificationSectionEnabled = this.getResponseProperty(\n \"IsDeviceVerificationSectionEnabled\"\n );\n this.unknownDeviceVerificationEnabled = this.getResponseProperty(\n \"UnknownDeviceVerificationEnabled\"\n );\n }\n}\n","import { BaseResponse } from \"./base.response\";\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 \"./base.response\";\nimport { GlobalDomainResponse } from \"./global-domain.response\";\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 { DeviceType } from \"../../enums/deviceType\";\nimport { EventSystemUser } from \"../../enums/event-system-user\";\nimport { EventType } from \"../../enums/eventType\";\n\nimport { BaseResponse } from \"./base.response\";\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 installationId: string;\n systemUser: EventSystemUser;\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 this.installationId = this.getResponseProperty(\"InstallationId\");\n this.systemUser = this.getResponseProperty(\"SystemUser\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { SelectionReadOnlyResponse } from \"./selection-read-only.response\";\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 \"./base.response\";\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 \"./base.response\";\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 \"./base.response\";\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 \"./base.response\";\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 { OrganizationConnectionType } from \"../../enums/organizationConnectionType\";\nimport { BillingSyncConfigApi } from \"../api/billing-sync-config.api\";\nimport { ScimConfigApi } from \"../api/scim-config.api\";\n\nimport { BaseResponse } from \"./base.response\";\n\n/**API response config types for OrganizationConnectionResponse */\nexport type OrganizationConnectionConfigApis = BillingSyncConfigApi | ScimConfigApi;\n\nexport class OrganizationConnectionResponse<\n TConfig extends OrganizationConnectionConfigApis\n> extends BaseResponse {\n id: string;\n type: OrganizationConnectionType;\n organizationId: string;\n enabled: boolean;\n config: TConfig;\n\n constructor(response: any, configType: { new (response: any): TConfig }) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.type = this.getResponseProperty(\"Type\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n const rawConfig = this.getResponseProperty(\"Config\");\n this.config = rawConfig == null ? null : new configType(rawConfig);\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { CipherResponse } from \"./cipher.response\";\nimport { CollectionResponse } from \"./collection.response\";\n\nexport class OrganizationExportResponse extends BaseResponse {\n collections: CollectionResponse[];\n ciphers: CipherResponse[];\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 CollectionResponse(c));\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 { BaseResponse } from \"./base.response\";\n\nexport class OrganizationSponsorshipSyncStatusResponse extends BaseResponse {\n lastSyncDate?: Date;\n\n constructor(response: any) {\n super(response);\n const lastSyncDate = this.getResponseProperty(\"LastSyncDate\");\n if (lastSyncDate) {\n this.lastSyncDate = new Date(lastSyncDate);\n }\n }\n}\n","import { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\n\nimport { BaseResponse } from \"./base.response\";\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 useScim: boolean;\n useCustomPermissions: boolean;\n useResetPassword: boolean;\n useSecretsManager: 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 familySponsorshipLastSyncDate?: Date;\n familySponsorshipValidUntil?: Date;\n familySponsorshipToDelete?: boolean;\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.useScim = this.getResponseProperty(\"UseScim\") ?? false;\n this.useCustomPermissions = this.getResponseProperty(\"UseCustomPermissions\") ?? false;\n this.useResetPassword = this.getResponseProperty(\"UseResetPassword\");\n this.useSecretsManager = this.getResponseProperty(\"UseSecretsManager\");\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 const familySponsorshipLastSyncDateString = this.getResponseProperty(\n \"FamilySponsorshipLastSyncDate\"\n );\n if (familySponsorshipLastSyncDateString) {\n this.familySponsorshipLastSyncDate = new Date(familySponsorshipLastSyncDateString);\n }\n const familySponsorshipValidUntilString = this.getResponseProperty(\n \"FamilySponsorshipValidUntil\"\n );\n if (familySponsorshipValidUntilString) {\n this.familySponsorshipValidUntil = new Date(familySponsorshipValidUntilString);\n }\n this.familySponsorshipToDelete = this.getResponseProperty(\"FamilySponsorshipToDelete\");\n }\n}\n","import { ProfileOrganizationResponse } from \"./profile-organization.response\";\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/permissions.api\";\n\nimport { BaseResponse } from \"./base.response\";\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 \"./base.response\";\nimport { ProfileOrganizationResponse } from \"./profile-organization.response\";\nimport { ProfileProviderOrganizationResponse } from \"./profile-provider-organization.response\";\nimport { ProfileProviderResponse } from \"./profile-provider.response\";\n\nexport class ProfileResponse extends BaseResponse {\n id: string;\n name: string;\n email: string;\n emailVerified: boolean;\n masterPasswordHint: string;\n premiumPersonally: boolean;\n premiumFromOrganization: boolean;\n culture: string;\n twoFactorEnabled: boolean;\n key: string;\n avatarColor: 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.premiumPersonally = this.getResponseProperty(\"Premium\");\n this.premiumFromOrganization = this.getResponseProperty(\"PremiumFromOrganization\");\n this.culture = this.getResponseProperty(\"Culture\");\n this.twoFactorEnabled = this.getResponseProperty(\"TwoFactorEnabled\");\n this.key = this.getResponseProperty(\"Key\");\n this.avatarColor = this.getResponseProperty(\"AvatarColor\");\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 \"./base.response\";\nimport { ProfileResponse } from \"./profile.response\";\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 \"./base.response\";\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 { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./base.response\";\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 { BaseResponse } from \"../base.response\";\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 userCount: number;\n seats?: number;\n plan?: 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 this.userCount = this.getResponseProperty(\"UserCount\");\n this.seats = this.getResponseProperty(\"Seats\");\n this.plan = this.getResponseProperty(\"Plan\");\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 \"../../../models/response/base.response\";\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 { OrganizationUserBulkPublicKeyResponse } from \"../../../abstractions/organization-user/responses\";\n\nexport class ProviderUserBulkPublicKeyResponse extends OrganizationUserBulkPublicKeyResponse {}\n","import { BaseResponse } from \"../base.response\";\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/permissions.api\";\nimport { BaseResponse } from \"../base.response\";\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 \"../base.response\";\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 { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/send-file.api\";\nimport { SendTextApi } from \"../api/send-text.api\";\n\nimport { BaseResponse } from \"./base.response\";\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 \"./base.response\";\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 { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/send-file.api\";\nimport { SendTextApi } from \"../api/send-text.api\";\n\nimport { BaseResponse } from \"./base.response\";\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 { FileUploadType } from \"../../enums/fileUploadType\";\n\nimport { BaseResponse } from \"./base.response\";\nimport { SendResponse } from \"./send.response\";\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 { BaseResponse } from \"./base.response\";\n\nexport class SsoPreValidateResponse extends BaseResponse {\n token: string;\n\n constructor(response: any) {\n super(response);\n this.token = this.getResponseProperty(\"Token\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\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 \"./base.response\";\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 \"./base.response\";\nimport { CipherResponse } from \"./cipher.response\";\nimport { CollectionDetailsResponse } from \"./collection.response\";\nimport { DomainsResponse } from \"./domains.response\";\nimport { FolderResponse } from \"./folder.response\";\nimport { PolicyResponse } from \"./policy.response\";\nimport { ProfileResponse } from \"./profile.response\";\nimport { SendResponse } from \"./send.response\";\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 \"./base.response\";\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 \"./base.response\";\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 \"./base.response\";\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 \"./base.response\";\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 \"./base.response\";\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 \"./base.response\";\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 \"./base.response\";\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 \"./base.response\";\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 \"./base.response\";\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 \"./base.response\";\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 { 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/breach-account.response\";\nimport { ErrorResponse } from \"../models/response/error.response\";\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","/**\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","import { ClientType } from \"../../../enums/clientType\";\nimport { Utils } from \"../../../misc/utils\";\nimport { CaptchaProtectedRequest } from \"../captcha-protected.request\";\nimport { DeviceRequest } from \"../device.request\";\n\nimport { TokenTwoFactorRequest } from \"./token-two-factor.request\";\nimport { TokenRequest } from \"./token.request\";\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: TokenTwoFactorRequest,\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 { 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 { 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/auth-result\";\nimport {\n UserApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../../models/domain/log-in-credentials\";\nimport { DeviceRequest } from \"../../models/request/device.request\";\nimport { PasswordTokenRequest } from \"../../models/request/identity-token/password-token.request\";\nimport { SsoTokenRequest } from \"../../models/request/identity-token/sso-token.request\";\nimport { TokenTwoFactorRequest } from \"../../models/request/identity-token/token-two-factor.request\";\nimport { UserApiTokenRequest } from \"../../models/request/identity-token/user-api-token.request\";\nimport { KeysRequest } from \"../../models/request/keys.request\";\nimport { IdentityCaptchaResponse } from \"../../models/response/identity-captcha.response\";\nimport { IdentityTokenResponse } from \"../../models/response/identity-token.response\";\nimport { IdentityTwoFactorResponse } from \"../../models/response/identity-two-factor.response\";\n\nexport abstract class LogInStrategy {\n protected abstract tokenRequest: UserApiTokenRequest | 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:\n | UserApiLogInCredentials\n | PasswordLogInCredentials\n | SsoLogInCredentials\n | PasswordlessLogInCredentials\n ): Promise;\n\n // The user key comes from different sources depending on the login strategy\n protected abstract setUserKey(response: IdentityTokenResponse): Promise;\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\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 async buildDeviceRequest() {\n const appId = await this.appIdService.getAppId();\n return new DeviceRequest(appId, this.platformUtilsService);\n }\n\n protected async buildTwoFactor(userProvidedTwoFactor?: TokenTwoFactorRequest) {\n if (userProvidedTwoFactor != null) {\n return userProvidedTwoFactor;\n }\n\n const storedTwoFactorToken = await this.tokenService.getTwoFactorToken();\n if (storedTwoFactorToken != null) {\n return new TokenTwoFactorRequest(TwoFactorProviderType.Remember, storedTwoFactorToken, false);\n }\n\n return new TokenTwoFactorRequest();\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 name: accountInformation.name,\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 await this.setUserKey(response);\n\n // Must come after the user Key is set, otherwise createKeyPairForOldAccount will fail\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 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/auth-result\";\nimport { PasswordLogInCredentials } from \"../../models/domain/log-in-credentials\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\nimport { PasswordTokenRequest } from \"../../models/request/identity-token/password-token.request\";\nimport { TokenTwoFactorRequest } from \"../../models/request/identity-token/token-two-factor.request\";\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 setUserKey() {\n await this.cryptoService.setKey(this.key);\n await this.cryptoService.setKeyHash(this.localHashedPassword);\n }\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\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 { 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 { AuthResult } from \"../../models/domain/auth-result\";\nimport { PasswordlessLogInCredentials } from \"../../models/domain/log-in-credentials\";\nimport { PasswordTokenRequest } from \"../../models/request/identity-token/password-token.request\";\nimport { TokenTwoFactorRequest } from \"../../models/request/identity-token/token-two-factor.request\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class PasswordlessLogInStrategy extends LogInStrategy {\n get email() {\n return this.tokenRequest.email;\n }\n\n get accessCode() {\n return this.passwordlessCredentials.accessCode;\n }\n\n get authRequestId() {\n return this.passwordlessCredentials.authRequestId;\n }\n\n tokenRequest: PasswordTokenRequest;\n private passwordlessCredentials: PasswordlessLogInCredentials;\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 setUserKey() {\n await this.cryptoService.setKey(this.passwordlessCredentials.decKey);\n await this.cryptoService.setKeyHash(this.passwordlessCredentials.localPasswordHash);\n }\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ): Promise {\n this.tokenRequest.captchaResponse = captchaResponse ?? this.captchaBypassToken;\n return super.logInTwoFactor(twoFactor);\n }\n\n async logIn(credentials: PasswordlessLogInCredentials) {\n this.passwordlessCredentials = credentials;\n\n this.tokenRequest = new PasswordTokenRequest(\n credentials.email,\n credentials.accessCode,\n null,\n await this.buildTwoFactor(credentials.twoFactor),\n await this.buildDeviceRequest()\n );\n\n this.tokenRequest.setPasswordlessAccessCode(credentials.authRequestId);\n return this.startLogIn();\n }\n}\n","import { DeviceRequest } from \"../device.request\";\n\nimport { TokenTwoFactorRequest } from \"./token-two-factor.request\";\nimport { TokenRequest } from \"./token.request\";\n\nexport class SsoTokenRequest extends TokenRequest {\n constructor(\n public code: string,\n public codeVerifier: string,\n public redirectUri: string,\n protected twoFactor: TokenTwoFactorRequest,\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 { 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/log-in-credentials\";\nimport { SsoTokenRequest } from \"../../models/request/identity-token/sso-token.request\";\nimport { IdentityTokenResponse } from \"../../models/response/identity-token.response\";\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 setUserKey(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","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 { UserApiLogInCredentials } from \"../../models/domain/log-in-credentials\";\nimport { UserApiTokenRequest } from \"../../models/request/identity-token/user-api-token.request\";\nimport { IdentityTokenResponse } from \"../../models/response/identity-token.response\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class UserApiLogInStrategy extends LogInStrategy {\n tokenRequest: UserApiTokenRequest;\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 setUserKey(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: UserApiLogInCredentials) {\n this.tokenRequest = new UserApiTokenRequest(\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","export class PreloginRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\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 { CipherView } from \"../view/cipher.view\";\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","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 \"./cipher-with-id.request\";\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","import { Cipher } from \"../domain/cipher\";\n\nexport class CipherPartialRequest {\n folderId: string;\n favorite: boolean;\n\n constructor(cipher: Cipher) {\n this.folderId = cipher.folderId;\n this.favorite = cipher.favorite;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipher.request\";\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 { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"../abstractions/api.service\";\nimport { CipherService as CipherServiceAbstraction } from \"../abstractions/cipher.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { EncryptService } from \"../abstractions/encrypt.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/cipher.data\";\nimport { AccountSettingsSettings } from \"../models/domain/account\";\nimport { Attachment } from \"../models/domain/attachment\";\nimport { Card } from \"../models/domain/card\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport Domain from \"../models/domain/domain-base\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { Field } from \"../models/domain/field\";\nimport { Identity } from \"../models/domain/identity\";\nimport { Login } from \"../models/domain/login\";\nimport { LoginUri } from \"../models/domain/login-uri\";\nimport { Password } from \"../models/domain/password\";\nimport { SecureNote } from \"../models/domain/secure-note\";\nimport { SortedCiphersCache } from \"../models/domain/sorted-ciphers-cache\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { AttachmentRequest } from \"../models/request/attachment.request\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipher-bulk-delete.request\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipher-bulk-move.request\";\nimport { CipherBulkRestoreRequest } from \"../models/request/cipher-bulk-restore.request\";\nimport { CipherBulkShareRequest } from \"../models/request/cipher-bulk-share.request\";\nimport { CipherCollectionsRequest } from \"../models/request/cipher-collections.request\";\nimport { CipherCreateRequest } from \"../models/request/cipher-create.request\";\nimport { CipherPartialRequest } from \"../models/request/cipher-partial.request\";\nimport { CipherShareRequest } from \"../models/request/cipher-share.request\";\nimport { CipherRequest } from \"../models/request/cipher.request\";\nimport { CipherResponse } from \"../models/response/cipher.response\";\nimport { ErrorResponse } from \"../models/response/error.response\";\nimport { AttachmentView } from \"../models/view/attachment.view\";\nimport { CipherView } from \"../models/view/cipher.view\";\nimport { FieldView } from \"../models/view/field.view\";\nimport { PasswordHistoryView } from \"../models/view/password-history.view\";\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 private encryptService: EncryptService\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 cipher.edit = model.edit;\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], 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], localData ? localData[id] : null));\n }\n }\n return response;\n }\n\n @sequentialize(() => \"getAllDecrypted\")\n async getAllDecrypted(): Promise {\n if ((await this.getDecryptedCipherCache()) != null) {\n await this.reindexCiphers();\n return await this.getDecryptedCipherCache();\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const ciphers = await this.getAll();\n const orgKeys = await this.cryptoService.getOrgKeys();\n const userKey = await this.cryptoService.getKeyForUserEncryption();\n\n // Group ciphers by orgId or under 'null' for the user's ciphers\n const grouped = ciphers.reduce((agg, c) => {\n agg[c.organizationId] ??= [];\n agg[c.organizationId].push(c);\n return agg;\n }, {} as Record);\n\n const decCiphers = (\n await Promise.all(\n Object.entries(grouped).map(([orgId, groupedCiphers]) =>\n this.encryptService.decryptItems(groupedCiphers, orgKeys.get(orgId) ?? userKey)\n )\n )\n )\n .flat()\n .sort(this.getLocaleSortingFunction());\n\n await this.setDecryptedCipherCache(decCiphers);\n return decCiphers;\n }\n\n private async reindexCiphers() {\n const userId = await this.stateService.getUserId();\n const reindexRequired =\n this.searchService != null && (this.searchService().indexedEntityId ?? userId) !== userId;\n if (reindexRequired) {\n await this.searchService().indexCiphers(userId, await this.getDecryptedCipherCache());\n }\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 : firstValueFrom(this.settingsService.settings$).then(\n (settings: AccountSettingsSettings) => {\n let matches: any[] = [];\n settings?.equivalentDomains?.forEach((eqDomain: any) => {\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\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 response = await this.apiService.getCiphersOrganization(organizationId);\n if (response?.data == null || response.data.length < 1) {\n return [];\n }\n\n const ciphers = response.data.map((cr) => new Cipher(new CipherData(cr)));\n const key = await this.cryptoService.getOrgKey(organizationId);\n const decCiphers = await this.encryptService.decryptItems(ciphers, key);\n\n decCiphers.sort(this.getLocaleSortingFunction());\n return decCiphers;\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 createWithServer(cipher: Cipher): Promise {\n let response: CipherResponse;\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\n const data = new CipherData(response, cipher.collectionIds);\n await this.upsert(data);\n }\n\n async updateWithServer(cipher: Cipher): Promise {\n let response: CipherResponse;\n if (cipher.edit) {\n const request = new CipherRequest(cipher);\n response = await this.apiService.putCipher(cipher.id, request);\n } else {\n const request = new CipherPartialRequest(cipher);\n response = await this.apiService.putPartialCipher(cipher.id, request);\n }\n\n const data = new CipherData(response, cipher.collectionIds);\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, 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 await this.upsert(encCiphers.map((c) => c.toCipherData()));\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(response, cipher.collectionIds);\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();\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 encBuf = await EncArrayBuffer.fromResponse(attachmentResponse);\n const decBuf = await this.cryptoService.decryptFromBytes(encBuf, 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 { BaseResponse } from \"./base.response\";\n\nexport class ServerConfigResponse extends BaseResponse {\n version: string;\n gitHash: string;\n server: ThirdPartyServerConfigResponse;\n environment: EnvironmentServerConfigResponse;\n\n constructor(response: any) {\n super(response);\n\n if (response == null) {\n return;\n }\n\n this.version = this.getResponseProperty(\"Version\");\n this.gitHash = this.getResponseProperty(\"GitHash\");\n this.server = new ThirdPartyServerConfigResponse(this.getResponseProperty(\"Server\"));\n this.environment = new EnvironmentServerConfigResponse(this.getResponseProperty(\"Environment\"));\n }\n}\n\nexport class EnvironmentServerConfigResponse extends BaseResponse {\n vault: string;\n api: string;\n identity: string;\n notifications: string;\n sso: string;\n\n constructor(data: any = null) {\n super(data);\n\n if (data == null) {\n return;\n }\n\n this.vault = this.getResponseProperty(\"Vault\");\n this.api = this.getResponseProperty(\"Api\");\n this.identity = this.getResponseProperty(\"Identity\");\n this.notifications = this.getResponseProperty(\"Notifications\");\n this.sso = this.getResponseProperty(\"Sso\");\n }\n}\n\nexport class ThirdPartyServerConfigResponse extends BaseResponse {\n name: string;\n url: string;\n\n constructor(data: any = null) {\n super(data);\n\n if (data == null) {\n return;\n }\n\n this.name = this.getResponseProperty(\"Name\");\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import {\n ServerConfigData,\n ThirdPartyServerConfigData,\n EnvironmentServerConfigData,\n} from \"../../models/data/server-config.data\";\n\nconst dayInMilliseconds = 24 * 3600 * 1000;\nconst eighteenHoursInMilliseconds = 18 * 3600 * 1000;\n\nexport class ServerConfig {\n version: string;\n gitHash: string;\n server?: ThirdPartyServerConfigData;\n environment?: EnvironmentServerConfigData;\n utcDate: Date;\n\n constructor(serverConfigData: ServerConfigData) {\n this.version = serverConfigData.version;\n this.gitHash = serverConfigData.gitHash;\n this.server = serverConfigData.server;\n this.utcDate = new Date(serverConfigData.utcDate);\n this.environment = serverConfigData.environment;\n\n if (this.server?.name == null && this.server?.url == null) {\n this.server = null;\n }\n }\n\n private getAgeInMilliseconds(): number {\n return new Date().getTime() - this.utcDate?.getTime();\n }\n\n isValid(): boolean {\n return this.getAgeInMilliseconds() <= dayInMilliseconds;\n }\n\n expiresSoon(): boolean {\n return this.getAgeInMilliseconds() >= eighteenHoursInMilliseconds;\n }\n}\n","// EFF's Long Wordlist from https://www.eff.org/dice\nexport const EFFLongWordList = [\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 { CryptoService } from \"../../abstractions/crypto.service\";\nimport { EncryptedOrganizationKeyData } from \"../data/encrypted-organization-key.data\";\n\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport abstract class BaseEncryptedOrganizationKey {\n decrypt: (cryptoService: CryptoService) => Promise;\n\n static fromData(data: EncryptedOrganizationKeyData) {\n switch (data.type) {\n case \"organization\":\n return new EncryptedOrganizationKey(data.key);\n\n case \"provider\":\n return new ProviderEncryptedOrganizationKey(data.key, data.providerId);\n\n default:\n return null;\n }\n }\n}\n\nexport class EncryptedOrganizationKey implements BaseEncryptedOrganizationKey {\n constructor(private key: string) {}\n\n async decrypt(cryptoService: CryptoService) {\n const decValue = await cryptoService.rsaDecrypt(this.key);\n return new SymmetricCryptoKey(decValue);\n }\n\n toData(): EncryptedOrganizationKeyData {\n return {\n type: \"organization\",\n key: this.key,\n };\n }\n}\n\nexport class ProviderEncryptedOrganizationKey implements BaseEncryptedOrganizationKey {\n constructor(private key: string, private providerId: string) {}\n\n async decrypt(cryptoService: CryptoService) {\n const providerKey = await cryptoService.getProviderKey(this.providerId);\n const decValue = await cryptoService.decryptToBytes(new EncString(this.key), providerKey);\n return new SymmetricCryptoKey(decValue);\n }\n\n toData(): EncryptedOrganizationKeyData {\n return {\n type: \"provider\",\n key: this.key,\n providerId: this.providerId,\n };\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 { EncryptService } from \"../abstractions/encrypt.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 { EFFLongWordList } from \"../misc/wordlist\";\nimport { EncryptedOrganizationKeyData } from \"../models/data/encrypted-organization-key.data\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { BaseEncryptedOrganizationKey } from \"../models/domain/encrypted-organization-key\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { ProfileOrganizationResponse } from \"../models/response/profile-organization.response\";\nimport { ProfileProviderOrganizationResponse } from \"../models/response/profile-provider-organization.response\";\nimport { ProfileProviderResponse } from \"../models/response/profile-provider.response\";\n\nexport class CryptoService implements CryptoServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private encryptService: EncryptService,\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 encOrgKeyData: { [orgId: string]: EncryptedOrganizationKeyData } = {};\n\n orgs.forEach((org) => {\n encOrgKeyData[org.id] = {\n type: \"organization\",\n key: org.key,\n };\n });\n\n providerOrgs.forEach((org) => {\n encOrgKeyData[org.id] = {\n type: \"provider\",\n providerId: org.providerId,\n key: org.key,\n };\n });\n\n await this.stateService.setDecryptedOrganizationKeys(null);\n return await this.stateService.setEncryptedOrganizationKeys(encOrgKeyData);\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 result: Map = new Map();\n const decryptedOrganizationKeys = await this.stateService.getDecryptedOrganizationKeys();\n if (decryptedOrganizationKeys != null && decryptedOrganizationKeys.size > 0) {\n return decryptedOrganizationKeys;\n }\n\n const encOrgKeyData = await this.stateService.getEncryptedOrganizationKeys();\n if (encOrgKeyData == null) {\n return null;\n }\n\n let setKey = false;\n\n for (const orgId of Object.keys(encOrgKeyData)) {\n if (result.has(orgId)) {\n continue;\n }\n\n const encOrgKey = BaseEncryptedOrganizationKey.fromData(encOrgKeyData[orgId]);\n const decOrgKey = await encOrgKey.decrypt(this);\n result.set(orgId, decOrgKey);\n\n setKey = true;\n }\n\n if (setKey) {\n await this.stateService.setDecryptedOrganizationKeys(result);\n }\n\n return result;\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 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.getKeyForUserEncryption(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 /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.encrypt\n */\n async encrypt(plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n key = await this.getKeyForUserEncryption(key);\n return await this.encryptService.encrypt(plainValue, key);\n }\n\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.encryptToBytes\n */\n async encryptToBytes(plainValue: ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n key = await this.getKeyForUserEncryption(key);\n return this.encryptService.encryptToBytes(plainValue, key);\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 /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.decryptToBytes\n */\n async decryptToBytes(encString: EncString, key?: SymmetricCryptoKey): Promise {\n const keyForEnc = await this.getKeyForUserEncryption(key);\n return this.encryptService.decryptToBytes(encString, keyForEnc);\n }\n\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.decryptToUtf8\n */\n async decryptToUtf8(encString: EncString, key?: SymmetricCryptoKey): Promise {\n key = await this.getKeyForUserEncryption(key);\n return await this.encryptService.decryptToUtf8(encString, key);\n }\n\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.decryptToBytes\n */\n async decryptFromBytes(encBuffer: EncArrayBuffer, key: SymmetricCryptoKey): Promise {\n if (encBuffer == null) {\n throw new Error(\"No buffer provided for decryption.\");\n }\n\n key = await this.getKeyForUserEncryption(key);\n\n return this.encryptService.decryptToBytes(encBuffer, key);\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\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 async getKeyForUserEncryption(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 // Legacy support: encryption used to be done with the user key (derived from master password).\n // Users who have not migrated will have a null encKey and must use the user key instead.\n return await this.getKey();\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(EFFLongWordList.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(EFFLongWordList.length);\n hashNumber = hashNumber.divide(EFFLongWordList.length);\n phrase.push(EFFLongWordList[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 { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class EncryptedObject {\n iv: ArrayBuffer;\n data: ArrayBuffer;\n mac: ArrayBuffer;\n key: SymmetricCryptoKey;\n}\n","import { CryptoFunctionService } from \"../../abstractions/cryptoFunction.service\";\nimport { EncryptService } from \"../../abstractions/encrypt.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { EncryptionType } from \"../../enums/encryptionType\";\nimport { IEncrypted } from \"../../interfaces/IEncrypted\";\nimport { Decryptable } from \"../../interfaces/decryptable.interface\";\nimport { InitializerMetadata } from \"../../interfaces/initializer-metadata.interface\";\nimport { Utils } from \"../../misc/utils\";\nimport { EncArrayBuffer } from \"../../models/domain/enc-array-buffer\";\nimport { EncString } from \"../../models/domain/enc-string\";\nimport { EncryptedObject } from \"../../models/domain/encrypted-object\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\n\nexport class EncryptServiceImplementation implements EncryptService {\n constructor(\n protected cryptoFunctionService: CryptoFunctionService,\n protected logService: LogService,\n protected logMacFailures: boolean\n ) {}\n\n async encrypt(plainValue: string | ArrayBuffer, key: SymmetricCryptoKey): Promise {\n if (key == null) {\n throw new Error(\"No encryption key provided.\");\n }\n\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 if (key == null) {\n throw new Error(\"No encryption key provided.\");\n }\n\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 decryptToUtf8(encString: EncString, key: SymmetricCryptoKey): Promise {\n if (key == null) {\n throw new Error(\"No key provided for decryption.\");\n }\n\n key = this.resolveLegacyKey(key, encString);\n\n if (key.macKey != null && encString?.mac == null) {\n this.logService.error(\"mac required.\");\n return null;\n }\n\n if (key.encType !== encString.encryptionType) {\n this.logService.error(\"encType unavailable.\");\n return null;\n }\n\n const fastParams = this.cryptoFunctionService.aesDecryptFastParameters(\n encString.data,\n encString.iv,\n encString.mac,\n key\n );\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.logMacFailed(\"mac failed.\");\n return null;\n }\n }\n\n return await this.cryptoFunctionService.aesDecryptFast(fastParams);\n }\n\n async decryptToBytes(encThing: IEncrypted, key: SymmetricCryptoKey): Promise {\n if (key == null) {\n throw new Error(\"No encryption key provided.\");\n }\n\n if (encThing == null) {\n throw new Error(\"Nothing provided for decryption.\");\n }\n\n key = this.resolveLegacyKey(key, encThing);\n\n if (key.macKey != null && encThing.macBytes == null) {\n return null;\n }\n\n if (key.encType !== encThing.encryptionType) {\n return null;\n }\n\n if (key.macKey != null && encThing.macBytes != null) {\n const macData = new Uint8Array(encThing.ivBytes.byteLength + encThing.dataBytes.byteLength);\n macData.set(new Uint8Array(encThing.ivBytes), 0);\n macData.set(new Uint8Array(encThing.dataBytes), encThing.ivBytes.byteLength);\n const computedMac = await this.cryptoFunctionService.hmac(\n macData.buffer,\n key.macKey,\n \"sha256\"\n );\n if (computedMac === null) {\n return null;\n }\n\n const macsMatch = await this.cryptoFunctionService.compare(encThing.macBytes, computedMac);\n if (!macsMatch) {\n this.logMacFailed(\"mac failed.\");\n return null;\n }\n }\n\n const result = await this.cryptoFunctionService.aesDecrypt(\n encThing.dataBytes,\n encThing.ivBytes,\n key.encKey\n );\n\n return result ?? null;\n }\n\n async decryptItems(\n items: Decryptable[],\n key: SymmetricCryptoKey\n ): Promise {\n if (items == null || items.length < 1) {\n return [];\n }\n\n return await Promise.all(items.map((item) => item.decrypt(key)));\n }\n\n private async aesEncrypt(data: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n const obj = new EncryptedObject();\n obj.key = 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 logMacFailed(msg: string) {\n if (this.logMacFailures) {\n this.logService.error(msg);\n }\n }\n\n /**\n * Transform into new key for the old encrypt-then-mac scheme if required, otherwise return the current key unchanged\n * @param encThing The encrypted object (e.g. encString or encArrayBuffer) that you want to decrypt\n */\n resolveLegacyKey(key: SymmetricCryptoKey, encThing: IEncrypted): SymmetricCryptoKey {\n if (\n encThing.encryptionType === EncryptionType.AesCbc128_HmacSha256_B64 &&\n key.encType === EncryptionType.AesCbc256_B64\n ) {\n return new SymmetricCryptoKey(key.key, EncryptionType.AesCbc128_HmacSha256_B64);\n }\n\n return key;\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { InitializerMetadata } from \"../../interfaces/initializer-metadata.interface\";\nimport { Cipher } from \"../../models/domain/cipher\";\nimport { CipherView } from \"../../models/view/cipher.view\";\n\nimport { InitializerKey } from \"./initializer-key\";\n\n/**\n * Internal reference of classes so we can reconstruct objects properly.\n * Each entry should be keyed using the Decryptable.initializerKey property\n */\nconst classInitializers: Record any> = {\n [InitializerKey.Cipher]: Cipher.fromJSON,\n [InitializerKey.CipherView]: CipherView.fromJSON,\n};\n\nexport function getClassInitializer(\n className: InitializerKey\n): (obj: Jsonify) => T {\n return classInitializers[className];\n}\n","import { defaultIfEmpty, filter, firstValueFrom, fromEvent, map, Subject, takeUntil } from \"rxjs\";\nimport { Jsonify } from \"type-fest\";\n\nimport { Decryptable } from \"../../interfaces/decryptable.interface\";\nimport { InitializerMetadata } from \"../../interfaces/initializer-metadata.interface\";\nimport { Utils } from \"../../misc/utils\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\n\nimport { EncryptServiceImplementation } from \"./encrypt.service.implementation\";\nimport { getClassInitializer } from \"./get-class-initializer\";\n\n// TTL (time to live) is not strictly required but avoids tying up memory resources if inactive\nconst workerTTL = 3 * 60000; // 3 minutes\n\nexport class MultithreadEncryptServiceImplementation extends EncryptServiceImplementation {\n private worker: Worker;\n private timeout: any;\n\n private clear$ = new Subject();\n\n /**\n * Sends items to a web worker to decrypt them.\n * This utilises multithreading to decrypt items faster without interrupting other operations (e.g. updating UI).\n */\n async decryptItems(\n items: Decryptable[],\n key: SymmetricCryptoKey\n ): Promise {\n if (items == null || items.length < 1) {\n return [];\n }\n\n this.logService.info(\"Starting decryption using multithreading\");\n\n this.worker ??= new Worker(\n new URL(\n /* webpackChunkName: 'encrypt-worker' */\n \"@bitwarden/common/services/cryptography/encrypt.worker.ts\",\n import.meta.url\n )\n );\n\n this.restartTimeout();\n\n const request = {\n id: Utils.newGuid(),\n items: items,\n key: key,\n };\n\n this.worker.postMessage(JSON.stringify(request));\n\n return await firstValueFrom(\n fromEvent(this.worker, \"message\").pipe(\n filter((response: MessageEvent) => response.data?.id === request.id),\n map((response) => JSON.parse(response.data.items)),\n map((items) =>\n items.map((jsonItem: Jsonify) => {\n const initializer = getClassInitializer(jsonItem.initializerKey);\n return initializer(jsonItem);\n })\n ),\n takeUntil(this.clear$),\n defaultIfEmpty([])\n )\n );\n }\n\n private clear() {\n this.clear$.next();\n this.worker?.terminate();\n this.worker = null;\n this.clearTimeout();\n }\n\n private restartTimeout() {\n this.clearTimeout();\n this.timeout = setTimeout(() => this.clear(), workerTTL);\n }\n\n private clearTimeout() {\n if (this.timeout != null) {\n clearTimeout(this.timeout);\n }\n }\n}\n","import { EventType } from \"../../enums/eventType\";\n\nexport class EventRequest {\n type: EventType;\n cipherId: string;\n date: string;\n organizationId: string;\n}\n","import { EventType } from \"../../enums/eventType\";\nimport { EventView } from \"../view/event.view\";\n\nexport class EventExport {\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 installationId: 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 this.installationId = event.installationId;\n }\n}\n","export enum FileUploadType {\n Direct = 0,\n Azure = 1,\n}\n","import { LogService } from \"../abstractions/log.service\";\nimport { Utils } from \"../misc/utils\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\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 { Utils } from \"../misc/utils\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\n\nexport class BitwardenFileUploadService {\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 { KdfType } from \"../../../enums/kdfType\";\nimport { KeysRequest } from \"../keys.request\";\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 KeyConnectorUserKeyRequest {\n key: string;\n\n constructor(key: string) {\n this.key = key;\n }\n}\n","import { LoginService as LoginServiceAbstraction } from \"../abstractions/login.service\";\nimport { StateService } from \"../abstractions/state.service\";\n\nexport class LoginService implements LoginServiceAbstraction {\n private _email: string;\n private _rememberEmail: boolean;\n\n constructor(private stateService: StateService) {}\n\n getEmail() {\n return this._email;\n }\n\n getRememberEmail() {\n return this._rememberEmail;\n }\n\n setEmail(value: string) {\n this._email = value;\n }\n\n setRememberEmail(value: boolean) {\n this._rememberEmail = value;\n }\n\n clearValues() {\n this._email = null;\n this._rememberEmail = null;\n }\n\n async saveEmailSettings() {\n await this.stateService.setRememberedEmail(this._rememberEmail ? this._email : null);\n this.clearValues();\n }\n}\n","import { KdfType } from \"../../../enums/kdfType\";\nimport { OrganizationUserStatusType } from \"../../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../../../models/api/permissions.api\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\nimport { SelectionReadOnlyResponse } from \"../../../models/response/selection-read-only.response\";\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 \"../../../models/response/base.response\";\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","export class OrganizationUserBulkRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\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","import { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class OrganizationApiKeyInformationResponse extends BaseResponse {\n keyType: OrganizationApiKeyType;\n\n constructor(response: any) {\n super(response);\n this.keyType = this.getResponseProperty(\"KeyType\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\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 { BaseResponse } from \"./base.response\";\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 { KeysResponse } from \"./keys.response\";\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 \"./base.response\";\nimport { PlanResponse } from \"./plan.response\";\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 \"./organization.response\";\nimport {\n BillingSubscriptionResponse,\n BillingSubscriptionUpcomingInvoiceResponse,\n} from \"./subscription.response\";\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 {\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"../../enums/ssoEnums\";\nimport { BaseResponse } from \"../response/base.response\";\nimport { SsoConfigView } from \"../view/sso-config.view\";\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: string;\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 { SsoConfigApi } from \"../../api/sso-config.api\";\nimport { BaseResponse } from \"../base.response\";\n\nexport class OrganizationSsoResponse extends BaseResponse {\n enabled: boolean;\n identifier: string;\n data: SsoConfigApi;\n urls: SsoUrls;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.identifier = this.getResponseProperty(\"Identifier\");\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 Domain from \"./domain-base\";\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 * as zxcvbn from \"zxcvbn\";\n\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { PasswordGenerationService as PasswordGenerationServiceAbstraction } from \"../abstractions/passwordGeneration.service\";\nimport { PolicyService } from \"../abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { PolicyType } from \"../enums/policyType\";\nimport { EFFLongWordList } from \"../misc/wordlist\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generated-password-history\";\nimport { PasswordGeneratorOptions } from \"../models/domain/password-generator-options\";\nimport { PasswordGeneratorPolicyOptions } from \"../models/domain/password-generator-policy-options\";\n\nconst DefaultOptions: PasswordGeneratorOptions = {\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: PasswordGeneratorOptions): 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: PasswordGeneratorOptions): 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 = EFFLongWordList.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(EFFLongWordList[wordIndex]);\n } else {\n wordList[i] = EFFLongWordList[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<[PasswordGeneratorOptions, PasswordGeneratorPolicyOptions]> {\n let options = await this.stateService.getPasswordGenerationOptions();\n if (options == null) {\n options = Object.assign({}, 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: PasswordGeneratorOptions\n ): Promise<[PasswordGeneratorOptions, 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 = 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: PasswordGeneratorOptions) {\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 await this.stateService.setDecryptedPasswordGenerationHistory(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(\n options: PasswordGeneratorOptions,\n enforcedPolicyOptions: PasswordGeneratorPolicyOptions\n ) {\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 Domain from \"./domain-base\";\n\nexport class ResetPasswordPolicyOptions extends Domain {\n autoEnrollEnabled = false;\n}\n","export enum ProviderUserStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n Revoked = -1, // Not used, compile-time support only\n}\n","export enum ProviderUserType {\n ProviderAdmin = 0,\n ServiceUser = 1,\n}\n","import { ProviderUserStatusType } from \"../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../enums/providerUserType\";\nimport { ProviderData } from \"../data/provider.data\";\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 * 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/cipher.view\";\nimport { SendView } from \"../models/view/send.view\";\n\nexport class SearchService implements SearchServiceAbstraction {\n private static registeredPipeline = false;\n\n indexedEntityId?: string = null;\n private indexing = false;\n private index: lunr.Index = null;\n private readonly immediateSearchLocales: string[] = [\"zh-CN\", \"zh-TW\", \"ja\", \"ko\", \"vi\"];\n private readonly defaultSearchableMinLength: number = 2;\n private searchableMinLength: number = this.defaultSearchableMinLength;\n\n constructor(\n private cipherService: CipherService,\n private logService: LogService,\n private i18nService: I18nService\n ) {\n this.i18nService.locale$.subscribe((locale) => {\n if (this.immediateSearchLocales.indexOf(locale) !== -1) {\n this.searchableMinLength = 1;\n } else {\n this.searchableMinLength = this.defaultSearchableMinLength;\n }\n });\n\n // Currently have to ensure this is only done a single time. Lunr allows you to register a function\n // multiple times but they will add a warning message to the console. The way they do that breaks when ran on a service worker.\n if (!SearchService.registeredPipeline) {\n SearchService.registeredPipeline = true;\n //register lunr pipeline function\n lunr.Pipeline.registerFunction(this.normalizeAccentsPipelineFunction, \"normalizeAccents\");\n }\n }\n\n clearIndex(): void {\n this.indexedEntityId = null;\n this.index = null;\n }\n\n isSearchable(query: string): boolean {\n query = SearchService.normalizeSearchQuery(query);\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.indexing = true;\n this.indexedEntityId = indexedEntityId;\n this.index = null;\n const builder = new lunr.Builder();\n builder.pipeline.add(this.normalizeAccentsPipelineFunction);\n builder.ref(\"id\");\n builder.field(\"shortid\", { boost: 100, extractor: (c: CipherView) => c.id.substr(0, 8) });\n builder.field(\"name\", {\n boost: 10,\n });\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.info(\"Finished 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 = SearchService.normalizeSearchQuery(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 = SearchService.normalizeSearchQuery(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 (\n c.login &&\n c.login.hasUris &&\n c.login.uris.some((loginUri) => loginUri?.uri?.toLowerCase().indexOf(query) > -1)\n ) {\n return true;\n }\n return false;\n });\n }\n\n searchSends(sends: SendView[], query: string) {\n query = SearchService.normalizeSearchQuery(query.trim().toLocaleLowerCase());\n if (query === null) {\n return sends;\n }\n const sendsMatched: SendView[] = [];\n const lowPriorityMatched: SendView[] = [];\n sends.forEach((s) => {\n if (s.name != null && s.name.toLowerCase().indexOf(query) > -1) {\n sendsMatched.push(s);\n } else 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 lowPriorityMatched.push(s);\n } else if (s.notes != null && s.notes.toLowerCase().indexOf(query) > -1) {\n lowPriorityMatched.push(s);\n } else if (s.text?.text != null && s.text.text.toLowerCase().indexOf(query) > -1) {\n lowPriorityMatched.push(s);\n } else if (s.file?.fileName != null && s.file.fileName.toLowerCase().indexOf(query) > -1) {\n lowPriorityMatched.push(s);\n }\n });\n return sendsMatched.concat(lowPriorityMatched);\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 private normalizeAccentsPipelineFunction(token: lunr.Token): any {\n const searchableFields = [\"name\", \"login.username\", \"subtitle\", \"notes\"];\n const fields = (token as any).metadata[\"fields\"];\n const checkFields = fields.every((i: any) => searchableFields.includes(i));\n\n if (checkFields) {\n return SearchService.normalizeSearchQuery(token.toString());\n }\n\n return token;\n }\n\n // Remove accents/diacritics characters from text. This regex is equivalent to the Diacritic unicode property escape, i.e. it will match all diacritic characters.\n static normalizeSearchQuery(query: string): string {\n return query?.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { Utils } from \"../../misc/utils\";\nimport { SendData } from \"../data/send.data\";\nimport { SendView } from \"../view/send.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SendFile } from \"./send-file\";\nimport { SendText } from \"./send-text\";\n\nexport class Send extends Domain {\n id: string;\n accessId: 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) {\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 name: null,\n notes: null,\n key: null,\n },\n [\"id\", \"accessId\"]\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);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file);\n break;\n default:\n break;\n }\n }\n\n async decrypt(): Promise {\n const model = new SendView(this);\n\n const cryptoService = Utils.getContainerService().getCryptoService();\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 { StateService } from \"../abstractions/state.service\";\nimport { TokenService as TokenServiceAbstraction } from \"../abstractions/token.service\";\nimport { Utils } from \"../misc/utils\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\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 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 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 { AbstractStorageService } 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/cipher.data\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { EventData } from \"../models/data/event.data\";\nimport { FolderData } from \"../models/data/folder.data\";\nimport { OrganizationData } from \"../models/data/organization.data\";\nimport { PolicyData } from \"../models/data/policy.data\";\nimport { ProviderData } from \"../models/data/provider.data\";\nimport { SendData } from \"../models/data/send.data\";\nimport {\n Account,\n AccountSettings,\n AccountSettingsSettings,\n EncryptionPair,\n} from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { EnvironmentUrls } from \"../models/domain/environment-urls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generated-password-history\";\nimport { GlobalState } from \"../models/domain/global-state\";\nimport { StorageOptions } from \"../models/domain/storage-options\";\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 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: AbstractStorageService,\n protected secureStorageService: AbstractStorageService,\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 case StateVersion.Four: {\n const authenticatedAccounts = await this.getAuthenticatedAccounts();\n for (const account of authenticatedAccounts) {\n const migratedAccount = await this.migrateAccountFrom4To5(account);\n await this.set(account.profile.userId, migratedAccount);\n }\n await this.setCurrentStateVersion(StateVersion.Five);\n break;\n }\n case StateVersion.Five: {\n const authenticatedAccounts = await this.getAuthenticatedAccounts();\n for (const account of authenticatedAccounts) {\n const migratedAccount = await this.migrateAccountFrom5To6(account);\n await this.set(account.profile.userId, migratedAccount);\n }\n await this.setCurrentStateVersion(StateVersion.Six);\n break;\n }\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 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 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: Object.assign(new EncryptionPair(), {\n decrypted: null,\n encrypted: await this.get(v1Keys.pinProtected),\n }),\n protectedPin: await this.get(v1Keys.protectedPin),\n settings:\n userId == null\n ? null\n : 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 async migrateAccountFrom4To5(account: TAccount): Promise {\n const encryptedOrgKeys = account.keys?.organizationKeys?.encrypted;\n if (encryptedOrgKeys != null) {\n for (const [orgId, encKey] of Object.entries(encryptedOrgKeys)) {\n encryptedOrgKeys[orgId] = {\n type: \"organization\",\n key: encKey as unknown as string, // Account v4 does not reflect the current account model so we have to cast\n };\n }\n }\n\n return account;\n }\n\n protected async migrateAccountFrom5To6(account: TAccount): Promise {\n delete (account as any).keys?.legacyEtmKey;\n return account;\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 protected async setCurrentStateVersion(newVersion: StateVersion): Promise {\n const globals = await this.getGlobals();\n globals.stateVersion = newVersion;\n await this.set(keys.global, globals);\n }\n\n protected async getAuthenticatedAccounts(): Promise {\n const authenticatedUserIds = await this.get(keys.authenticatedAccounts);\n return Promise.all(authenticatedUserIds.map((id) => this.get(id)));\n }\n}\n","import { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\nimport { ProfileOrganizationResponse } from \"../response/profile-organization.response\";\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 useScim: boolean;\n useCustomPermissions: boolean;\n useResetPassword: boolean;\n useSecretsManager: 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 familySponsorshipLastSyncDate?: Date;\n familySponsorshipValidUntil?: Date;\n familySponsorshipToDelete?: boolean;\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.useScim = response.useScim;\n this.useCustomPermissions = response.useCustomPermissions;\n this.useResetPassword = response.useResetPassword;\n this.useSecretsManager = response.useSecretsManager;\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 this.familySponsorshipLastSyncDate = response.familySponsorshipLastSyncDate;\n this.familySponsorshipValidUntil = response.familySponsorshipValidUntil;\n this.familySponsorshipToDelete = response.familySponsorshipToDelete;\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 { FolderApiServiceAbstraction } from \"../../abstractions/folder/folder-api.service.abstraction\";\nimport { InternalFolderService } from \"../../abstractions/folder/folder.service.abstraction\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { InternalOrganizationService } from \"../../abstractions/organization/organization.service.abstraction\";\nimport { InternalPolicyService } from \"../../abstractions/policy/policy.service.abstraction\";\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/sync.service.abstraction\";\nimport { sequentialize } from \"../../misc/sequentialize\";\nimport { CipherData } from \"../../models/data/cipher.data\";\nimport { CollectionData } from \"../../models/data/collection.data\";\nimport { FolderData } from \"../../models/data/folder.data\";\nimport { OrganizationData } from \"../../models/data/organization.data\";\nimport { PolicyData } from \"../../models/data/policy.data\";\nimport { ProviderData } from \"../../models/data/provider.data\";\nimport { SendData } from \"../../models/data/send.data\";\nimport { CipherResponse } from \"../../models/response/cipher.response\";\nimport { CollectionDetailsResponse } from \"../../models/response/collection.response\";\nimport { DomainsResponse } from \"../../models/response/domains.response\";\nimport { FolderResponse } from \"../../models/response/folder.response\";\nimport {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../../models/response/notification.response\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\nimport { ProfileResponse } from \"../../models/response/profile.response\";\nimport { SendResponse } from \"../../models/response/send.response\";\n\nexport class SyncService implements SyncServiceAbstraction {\n syncInProgress = false;\n\n constructor(\n private apiService: ApiService,\n private settingsService: SettingsService,\n private folderService: InternalFolderService,\n private cipherService: CipherService,\n private cryptoService: CryptoService,\n private collectionService: CollectionService,\n private messagingService: MessagingService,\n private policyService: InternalPolicyService,\n private sendService: SendService,\n private logService: LogService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private providerService: ProviderService,\n private folderApiService: FolderApiServiceAbstraction,\n private organizationService: InternalOrganizationService,\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 try {\n await this.apiService.refreshIdentityToken();\n const response = await this.apiService.getSync();\n\n await this.syncProfile(response.profile);\n await this.syncFolders(response.folders);\n await this.syncCollections(response.collections);\n await this.syncCiphers(response.ciphers);\n await this.syncSends(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.folderApiService.get(notification.id);\n if (remoteFolder != null) {\n await this.folderService.upsert(new FolderData(remoteFolder));\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.getFullCipherDetails(notification.id);\n if (remoteCipher != null) {\n await this.cipherService.upsert(new CipherData(remoteCipher));\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 await this.sendService.upsert(new SendData(remoteSend));\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.setAvatarColor(response.avatarColor);\n await this.stateService.setSecurityStamp(response.securityStamp);\n await this.stateService.setEmailVerified(response.emailVerified);\n await this.stateService.setHasPremiumPersonally(response.premiumPersonally);\n await this.stateService.setHasPremiumFromOrganization(response.premiumFromOrganization);\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.replace(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(response: FolderResponse[]) {\n const folders: { [id: string]: FolderData } = {};\n response.forEach((f) => {\n folders[f.id] = new FolderData(f);\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(response: CipherResponse[]) {\n const ciphers: { [id: string]: CipherData } = {};\n response.forEach((c) => {\n ciphers[c.id] = new CipherData(c);\n });\n return await this.cipherService.replace(ciphers);\n }\n\n private async syncSends(response: SendResponse[]) {\n const sends: { [id: string]: SendData } = {};\n response.forEach((s) => {\n sends[s.id] = new SendData(s);\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 { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { LogService } from \"../abstractions/log.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 ) {}\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 // 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","export class VerifyOTPRequest {\n OTP: string;\n\n constructor(OTP: string) {\n this.OTP = OTP;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class AnonAddyForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid AnonAddy API token.\";\n }\n if (options.anonaddy?.domain == null || options.anonaddy.domain === \"\") {\n throw \"Invalid AnonAddy domain.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://app.anonaddy.com/api/v1/aliases\";\n requestInit.body = JSON.stringify({\n domain: options.anonaddy.domain,\n description:\n (options.website != null ? \"Website: \" + options.website + \". \" : \"\") +\n \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json?.data?.email;\n }\n if (response.status === 401) {\n throw \"Invalid AnonAddy API token.\";\n }\n throw \"Unknown AnonAddy error occurred.\";\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class DuckDuckGoForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid DuckDuckGo API token.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://quack.duckduckgo.com/api/email/addresses\";\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n if (json.address) {\n return `${json.address}@duck.com`;\n }\n } else if (response.status === 401) {\n throw \"Invalid DuckDuckGo API token.\";\n }\n throw \"Unknown DuckDuckGo error occurred.\";\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class FastmailForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid Fastmail API token.\";\n }\n\n const accountId = await this.getAccountId(apiService, options);\n if (accountId == null || accountId === \"\") {\n throw \"Unable to obtain Fastmail masked email account ID.\";\n }\n\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://api.fastmail.com/jmap/api/\";\n requestInit.body = JSON.stringify({\n using: [\"https://www.fastmail.com/dev/maskedemail\", \"urn:ietf:params:jmap:core\"],\n methodCalls: [\n [\n \"MaskedEmail/set\",\n {\n accountId: accountId,\n create: {\n \"new-masked-email\": {\n state: \"enabled\",\n description: \"\",\n url: options.website,\n emailPrefix: options.fastmail.prefix,\n },\n },\n },\n \"0\",\n ],\n ],\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200) {\n const json = await response.json();\n if (\n json.methodResponses != null &&\n json.methodResponses.length > 0 &&\n json.methodResponses[0].length > 0\n ) {\n if (json.methodResponses[0][0] === \"MaskedEmail/set\") {\n if (json.methodResponses[0][1]?.created?.[\"new-masked-email\"] != null) {\n return json.methodResponses[0][1]?.created?.[\"new-masked-email\"]?.email;\n }\n if (json.methodResponses[0][1]?.notCreated?.[\"new-masked-email\"] != null) {\n throw (\n \"Fastmail error: \" +\n json.methodResponses[0][1]?.notCreated?.[\"new-masked-email\"]?.description\n );\n }\n } else if (json.methodResponses[0][0] === \"error\") {\n throw \"Fastmail error: \" + json.methodResponses[0][1]?.description;\n }\n }\n }\n if (response.status === 401 || response.status === 403) {\n throw \"Invalid Fastmail API token.\";\n }\n throw \"Unknown Fastmail error occurred.\";\n }\n\n private async getAccountId(apiService: ApiService, options: ForwarderOptions): Promise {\n const requestInit: RequestInit = {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n }),\n };\n const url = \"https://api.fastmail.com/.well-known/jmap\";\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200) {\n const json = await response.json();\n if (json.primaryAccounts != null) {\n return json.primaryAccounts[\"https://www.fastmail.com/dev/maskedemail\"];\n }\n }\n return null;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class FirefoxRelayForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid Firefox Relay API token.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Token \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://relay.firefox.com/api/v1/relayaddresses/\";\n requestInit.body = JSON.stringify({\n enabled: true,\n generated_for: options.website,\n description:\n (options.website != null ? options.website + \" - \" : \"\") + \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json?.full_address;\n }\n if (response.status === 401) {\n throw \"Invalid Firefox Relay API token.\";\n }\n throw \"Unknown Firefox Relay error occurred.\";\n }\n}\n","export class ForwarderOptions {\n apiKey: string;\n website: string;\n fastmail = new FastmailForwarderOptions();\n anonaddy = new AnonAddyForwarderOptions();\n}\n\nexport class FastmailForwarderOptions {\n prefix: string;\n}\n\nexport class AnonAddyForwarderOptions {\n domain: string;\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class SimpleLoginForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid SimpleLogin API key.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authentication: options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n let url = \"https://app.simplelogin.io/api/alias/random/new\";\n if (options.website != null) {\n url += \"?hostname=\" + options.website;\n }\n requestInit.body = JSON.stringify({\n note:\n (options.website != null ? \"Website: \" + options.website + \". \" : \"\") +\n \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json.alias;\n }\n if (response.status === 401) {\n throw \"Invalid SimpleLogin API key.\";\n }\n try {\n const json = await response.json();\n if (json?.error != null) {\n throw \"SimpleLogin error:\" + json.error;\n }\n } catch {\n // Do nothing...\n }\n throw \"Unknown SimpleLogin error occurred.\";\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { UsernameGenerationService as BaseUsernameGenerationService } from \"../abstractions/usernameGeneration.service\";\nimport { AnonAddyForwarder } from \"../email-forwarders/anon-addy-forwarder\";\nimport { DuckDuckGoForwarder } from \"../email-forwarders/duck-duck-go-forwarder\";\nimport { FastmailForwarder } from \"../email-forwarders/fastmail-forwarder\";\nimport { FirefoxRelayForwarder } from \"../email-forwarders/firefox-relay-forwarder\";\nimport { Forwarder } from \"../email-forwarders/forwarder\";\nimport { ForwarderOptions } from \"../email-forwarders/forwarder-options\";\nimport { SimpleLoginForwarder } from \"../email-forwarders/simple-login-forwarder\";\nimport { EFFLongWordList } from \"../misc/wordlist\";\n\nconst DefaultOptions = {\n type: \"word\",\n wordCapitalize: true,\n wordIncludeNumber: true,\n subaddressType: \"random\",\n catchallType: \"random\",\n forwardedService: \"\",\n forwardedAnonAddyDomain: \"anonaddy.me\",\n};\n\nexport class UsernameGenerationService implements BaseUsernameGenerationService {\n constructor(\n private cryptoService: CryptoService,\n private stateService: StateService,\n private apiService: ApiService\n ) {}\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.generateForwarded(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, EFFLongWordList.length - 1);\n let word = EFFLongWordList[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 generateForwarded(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.forwardedService == null) {\n return null;\n }\n\n let forwarder: Forwarder = null;\n const forwarderOptions = new ForwarderOptions();\n forwarderOptions.website = o.website;\n if (o.forwardedService === \"simplelogin\") {\n forwarder = new SimpleLoginForwarder();\n forwarderOptions.apiKey = o.forwardedSimpleLoginApiKey;\n } else if (o.forwardedService === \"anonaddy\") {\n forwarder = new AnonAddyForwarder();\n forwarderOptions.apiKey = o.forwardedAnonAddyApiToken;\n forwarderOptions.anonaddy.domain = o.forwardedAnonAddyDomain;\n } else if (o.forwardedService === \"firefoxrelay\") {\n forwarder = new FirefoxRelayForwarder();\n forwarderOptions.apiKey = o.forwardedFirefoxApiToken;\n } else if (o.forwardedService === \"fastmail\") {\n forwarder = new FastmailForwarder();\n forwarderOptions.apiKey = o.forwardedFastmailApiToken;\n } else if (o.forwardedService === \"duckduckgo\") {\n forwarder = new DuckDuckGoForwarder();\n forwarderOptions.apiKey = o.forwardedDuckDuckGoToken;\n }\n\n if (forwarder == null) {\n return null;\n }\n\n return forwarder.generate(this.apiService, forwarderOptions);\n }\n\n async getOptions(): Promise {\n let options = await this.stateService.getUsernameGenerationOptions();\n if (options == null) {\n options = Object.assign({}, 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","export class DecryptParameters {\n encKey: T;\n data: T;\n iv: T;\n macKey: T;\n mac: T;\n macData: T;\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { BroadcasterService as BaseBroadcasterService } from \"@bitwarden/common/services/broadcaster.service\";\n\n@Injectable()\nexport class BroadcasterService extends BaseBroadcasterService {}\n","import {\n BroadcasterService as BroadcasterServiceAbstraction,\n MessageBase,\n} from \"../abstractions/broadcaster.service\";\n\nexport class BroadcasterService implements BroadcasterServiceAbstraction {\n subscribers: Map void> = new Map<\n string,\n (message: MessageBase) => void\n >();\n\n send(message: MessageBase, 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: MessageBase) => void) {\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 { Directive } from \"@angular/core\";\n\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\nimport { ModalRef } from \"./modal/modal.ref\";\n\n/**\n * Used to verify the user's Master Password for the \"Master Password Re-prompt\" feature only.\n * See UserVerificationComponent for any other situation where you need to verify the user's identity.\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 { Injectable } from \"@angular/core\";\n\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\n\nimport { PasswordRepromptComponent } from \"../components/password-reprompt.component\";\n\nimport { ModalService } from \"./modal.service\";\n\n/**\n * Used to verify the user's Master Password for the \"Master Password Re-prompt\" feature only.\n * See UserVerificationService for any other situation where you need to verify the user's identity.\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 { ThemeType } from \"@bitwarden/common/enums/themeType\";\n\nimport { Theme } from \"./theme\";\n\nexport class ThemeBuilder implements Theme {\n get effectiveTheme(): ThemeType {\n return this.configuredTheme != ThemeType.System ? this.configuredTheme : this.systemTheme;\n }\n\n constructor(readonly configuredTheme: ThemeType, readonly systemTheme: ThemeType) {}\n\n updateSystemTheme(systemTheme: ThemeType): ThemeBuilder {\n return new ThemeBuilder(this.configuredTheme, systemTheme);\n }\n\n updateConfiguredTheme(configuredTheme: ThemeType): ThemeBuilder {\n return new ThemeBuilder(configuredTheme, this.systemTheme);\n }\n}\n","import { DOCUMENT } from \"@angular/common\";\nimport { Inject, Injectable } from \"@angular/core\";\nimport { BehaviorSubject, filter, fromEvent, Observable } from \"rxjs\";\n\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { ThemeType } from \"@bitwarden/common/enums/themeType\";\n\nimport { WINDOW } from \"../injection-tokens\";\n\nimport { Theme } from \"./theme\";\nimport { ThemeBuilder } from \"./themeBuilder\";\nimport { AbstractThemingService } from \"./theming.service.abstraction\";\n\n@Injectable()\nexport class ThemingService implements AbstractThemingService {\n private _theme = new BehaviorSubject(null);\n theme$: Observable = this._theme.pipe(filter((x) => x !== null));\n\n constructor(\n private stateService: StateService,\n @Inject(WINDOW) private window: Window,\n @Inject(DOCUMENT) private document: Document\n ) {\n this.monitorThemeChanges();\n }\n\n async monitorThemeChanges(): Promise {\n this._theme.next(\n new ThemeBuilder(await this.stateService.getTheme(), await this.getSystemTheme())\n );\n this.monitorConfiguredThemeChanges();\n this.monitorSystemThemeChanges();\n }\n\n updateSystemTheme(systemTheme: ThemeType): void {\n this._theme.next(this._theme.getValue().updateSystemTheme(systemTheme));\n }\n\n async updateConfiguredTheme(theme: ThemeType): Promise {\n await this.stateService.setTheme(theme);\n this._theme.next(this._theme.getValue().updateConfiguredTheme(theme));\n }\n\n protected monitorConfiguredThemeChanges(): void {\n this.theme$.subscribe((theme: Theme) => {\n this.document.documentElement.classList.remove(\n \"theme_\" + ThemeType.Light,\n \"theme_\" + ThemeType.Dark,\n \"theme_\" + ThemeType.Nord,\n \"theme_\" + ThemeType.SolarizedDark\n );\n this.document.documentElement.classList.add(\"theme_\" + theme.effectiveTheme);\n });\n }\n\n // We use a media match query for monitoring the system theme on web and browser, but this doesn't work for electron apps on Linux.\n // In desktop we override these methods to track systemTheme with the electron renderer instead, which works for all OSs.\n protected async getSystemTheme(): Promise {\n return this.window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? ThemeType.Dark\n : ThemeType.Light;\n }\n\n protected monitorSystemThemeChanges(): void {\n fromEvent(\n this.window.matchMedia(\"(prefers-color-scheme: dark)\"),\n \"change\"\n ).subscribe((event) => {\n this.updateSystemTheme(event.matches ? ThemeType.Dark : ThemeType.Light);\n });\n }\n}\n","import { Injector, LOCALE_ID, NgModule } from \"@angular/core\";\n\nimport { AccountApiService as AccountApiServiceAbstraction } from \"@bitwarden/common/abstractions/account/account-api.service\";\nimport {\n AccountService as AccountServiceAbstraction,\n InternalAccountService,\n} from \"@bitwarden/common/abstractions/account/account.service\";\nimport { AvatarUpdateService as AccountUpdateServiceAbstraction } from \"@bitwarden/common/abstractions/account/avatar-update.service\";\nimport { AnonymousHubService as AnonymousHubServiceAbstraction } from \"@bitwarden/common/abstractions/anonymousHub.service\";\nimport { ApiService as ApiServiceAbstraction } from \"@bitwarden/common/abstractions/api.service\";\nimport { AppIdService as AppIdServiceAbstraction } from \"@bitwarden/common/abstractions/appId.service\";\nimport { AuditService as AuditServiceAbstraction } from \"@bitwarden/common/abstractions/audit.service\";\nimport { AuthService as AuthServiceAbstraction } from \"@bitwarden/common/abstractions/auth.service\";\nimport { BroadcasterService as BroadcasterServiceAbstraction } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { CipherService as CipherServiceAbstraction } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService as CollectionServiceAbstraction } from \"@bitwarden/common/abstractions/collection.service\";\nimport { ConfigApiServiceAbstraction } from \"@bitwarden/common/abstractions/config/config-api.service.abstraction\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/abstractions/config/config.service.abstraction\";\nimport { CryptoService as CryptoServiceAbstraction } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { CryptoFunctionService as CryptoFunctionServiceAbstraction } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EncryptService } from \"@bitwarden/common/abstractions/encrypt.service\";\nimport { EnvironmentService as EnvironmentServiceAbstraction } from \"@bitwarden/common/abstractions/environment.service\";\nimport { EventCollectionService as EventCollectionServiceAbstraction } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { EventUploadService as EventUploadServiceAbstraction } from \"@bitwarden/common/abstractions/event/event-upload.service\";\nimport { ExportService as ExportServiceAbstraction } from \"@bitwarden/common/abstractions/export.service\";\nimport { FileUploadService as FileUploadServiceAbstraction } from \"@bitwarden/common/abstractions/fileUpload.service\";\nimport { FolderApiServiceAbstraction } from \"@bitwarden/common/abstractions/folder/folder-api.service.abstraction\";\nimport {\n FolderService as FolderServiceAbstraction,\n InternalFolderService,\n} from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { FormValidationErrorsService as FormValidationErrorsServiceAbstraction } from \"@bitwarden/common/abstractions/formValidationErrors.service\";\nimport { I18nService as I18nServiceAbstraction } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService as KeyConnectorServiceAbstraction } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService as LoginServiceAbstraction } from \"@bitwarden/common/abstractions/login.service\";\nimport { MessagingService as MessagingServiceAbstraction } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"@bitwarden/common/abstractions/notifications.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport {\n InternalOrganizationService,\n OrganizationService as OrganizationServiceAbstraction,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordGenerationService as PasswordGenerationServiceAbstraction } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport {\n InternalPolicyService,\n PolicyService as PolicyServiceAbstraction,\n} from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { ProviderService as ProviderServiceAbstraction } from \"@bitwarden/common/abstractions/provider.service\";\nimport { SearchService as SearchServiceAbstraction } from \"@bitwarden/common/abstractions/search.service\";\nimport { SendService as SendServiceAbstraction } from \"@bitwarden/common/abstractions/send.service\";\nimport { SettingsService as SettingsServiceAbstraction } from \"@bitwarden/common/abstractions/settings.service\";\nimport { StateService as StateServiceAbstraction } from \"@bitwarden/common/abstractions/state.service\";\nimport { StateMigrationService as StateMigrationServiceAbstraction } from \"@bitwarden/common/abstractions/stateMigration.service\";\nimport { AbstractStorageService } from \"@bitwarden/common/abstractions/storage.service\";\nimport { SyncService as SyncServiceAbstraction } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { SyncNotifierService as SyncNotifierServiceAbstraction } from \"@bitwarden/common/abstractions/sync/syncNotifier.service.abstraction\";\nimport { TokenService as TokenServiceAbstraction } from \"@bitwarden/common/abstractions/token.service\";\nimport { TotpService as TotpServiceAbstraction } from \"@bitwarden/common/abstractions/totp.service\";\nimport { TwoFactorService as TwoFactorServiceAbstraction } from \"@bitwarden/common/abstractions/twoFactor.service\";\nimport { UserVerificationApiServiceAbstraction } from \"@bitwarden/common/abstractions/userVerification/userVerification-api.service.abstraction\";\nimport { UserVerificationService as UserVerificationServiceAbstraction } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { UsernameGenerationService as UsernameGenerationServiceAbstraction } from \"@bitwarden/common/abstractions/usernameGeneration.service\";\nimport { ValidationService as ValidationServiceAbstraction } from \"@bitwarden/common/abstractions/validation.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { StateFactory } from \"@bitwarden/common/factories/stateFactory\";\nimport { flagEnabled } from \"@bitwarden/common/misc/flags\";\nimport { Account } from \"@bitwarden/common/models/domain/account\";\nimport { GlobalState } from \"@bitwarden/common/models/domain/global-state\";\nimport { AccountApiServiceImplementation } from \"@bitwarden/common/services/account/account-api.service\";\nimport { AccountServiceImplementation } from \"@bitwarden/common/services/account/account.service\";\nimport { AvatarUpdateService } from \"@bitwarden/common/services/account/avatar-update.service\";\nimport { AnonymousHubService } from \"@bitwarden/common/services/anonymousHub.service\";\nimport { ApiService } from \"@bitwarden/common/services/api.service\";\nimport { AppIdService } from \"@bitwarden/common/services/appId.service\";\nimport { AuditService } from \"@bitwarden/common/services/audit.service\";\nimport { AuthService } from \"@bitwarden/common/services/auth.service\";\nimport { CipherService } from \"@bitwarden/common/services/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/services/collection.service\";\nimport { ConfigApiService } from \"@bitwarden/common/services/config/config-api.service\";\nimport { ConfigService } from \"@bitwarden/common/services/config/config.service\";\nimport { ConsoleLogService } from \"@bitwarden/common/services/consoleLog.service\";\nimport { CryptoService } from \"@bitwarden/common/services/crypto.service\";\nimport { EncryptServiceImplementation } from \"@bitwarden/common/services/cryptography/encrypt.service.implementation\";\nimport { MultithreadEncryptServiceImplementation } from \"@bitwarden/common/services/cryptography/multithread-encrypt.service.implementation\";\nimport { EnvironmentService } from \"@bitwarden/common/services/environment.service\";\nimport { EventCollectionService } from \"@bitwarden/common/services/event/event-collection.service\";\nimport { EventUploadService } from \"@bitwarden/common/services/event/event-upload.service\";\nimport { ExportService } from \"@bitwarden/common/services/export.service\";\nimport { FileUploadService } from \"@bitwarden/common/services/fileUpload.service\";\nimport { FolderApiService } from \"@bitwarden/common/services/folder/folder-api.service\";\nimport { FolderService } from \"@bitwarden/common/services/folder/folder.service\";\nimport { FormValidationErrorsService } from \"@bitwarden/common/services/formValidationErrors.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/services/keyConnector.service\";\nimport { LoginService } from \"@bitwarden/common/services/login.service\";\nimport { NotificationsService } from \"@bitwarden/common/services/notifications.service\";\nimport { OrganizationUserServiceImplementation } from \"@bitwarden/common/services/organization-user/organization-user.service.implementation\";\nimport { OrganizationApiService } from \"@bitwarden/common/services/organization/organization-api.service\";\nimport { OrganizationService } from \"@bitwarden/common/services/organization/organization.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/services/passwordGeneration.service\";\nimport { PolicyApiService } from \"@bitwarden/common/services/policy/policy-api.service\";\nimport { PolicyService } from \"@bitwarden/common/services/policy/policy.service\";\nimport { ProviderService } from \"@bitwarden/common/services/provider.service\";\nimport { SearchService } from \"@bitwarden/common/services/search.service\";\nimport { SendService } from \"@bitwarden/common/services/send.service\";\nimport { SettingsService } from \"@bitwarden/common/services/settings.service\";\nimport { StateService } from \"@bitwarden/common/services/state.service\";\nimport { StateMigrationService } from \"@bitwarden/common/services/stateMigration.service\";\nimport { SyncService } from \"@bitwarden/common/services/sync/sync.service\";\nimport { SyncNotifierService } from \"@bitwarden/common/services/sync/syncNotifier.service\";\nimport { TokenService } from \"@bitwarden/common/services/token.service\";\nimport { TotpService } from \"@bitwarden/common/services/totp.service\";\nimport { TwoFactorService } from \"@bitwarden/common/services/twoFactor.service\";\nimport { UserVerificationApiService } from \"@bitwarden/common/services/userVerification/userVerification-api.service\";\nimport { UserVerificationService } from \"@bitwarden/common/services/userVerification/userVerification.service\";\nimport { UsernameGenerationService } from \"@bitwarden/common/services/usernameGeneration.service\";\nimport { ValidationService } from \"@bitwarden/common/services/validation.service\";\nimport { VaultTimeoutService } from \"@bitwarden/common/services/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/services/vaultTimeout/vaultTimeoutSettings.service\";\nimport { WebCryptoFunctionService } from \"@bitwarden/common/services/webCryptoFunction.service\";\n\nimport { AuthGuard } from \"../guards/auth.guard\";\nimport { LockGuard } from \"../guards/lock.guard\";\nimport { UnauthGuard } from \"../guards/unauth.guard\";\n\nimport { BroadcasterService } from \"./broadcaster.service\";\nimport {\n LOCALES_DIRECTORY,\n LOCKED_CALLBACK,\n LOG_MAC_FAILURES,\n LOGOUT_CALLBACK,\n MEMORY_STORAGE,\n SECURE_STORAGE,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n SYSTEM_LANGUAGE,\n WINDOW,\n} from \"./injection-tokens\";\nimport { ModalService } from \"./modal.service\";\nimport { PasswordRepromptService } from \"./passwordReprompt.service\";\nimport { ThemingService } from \"./theming/theming.service\";\nimport { AbstractThemingService } from \"./theming/theming.service.abstraction\";\n\n@NgModule({\n declarations: [],\n providers: [\n AuthGuard,\n UnauthGuard,\n LockGuard,\n ModalService,\n { provide: WINDOW, useValue: window },\n {\n provide: LOCALE_ID,\n useFactory: (i18nService: I18nServiceAbstraction) => i18nService.translationLocale,\n deps: [I18nServiceAbstraction],\n },\n {\n provide: LOCALES_DIRECTORY,\n useValue: \"./locales\",\n },\n {\n provide: SYSTEM_LANGUAGE,\n useFactory: (window: Window) => window.navigator.language,\n deps: [WINDOW],\n },\n {\n provide: STATE_FACTORY,\n useValue: new StateFactory(GlobalState, Account),\n },\n {\n provide: STATE_SERVICE_USE_CACHE,\n useValue: true,\n },\n {\n provide: LOGOUT_CALLBACK,\n useFactory:\n (messagingService: MessagingServiceAbstraction) => (expired: boolean, userId?: string) =>\n messagingService.send(\"logout\", { expired: expired, userId: userId }),\n deps: [MessagingServiceAbstraction],\n },\n {\n provide: LOCKED_CALLBACK,\n useValue: null,\n },\n {\n provide: LOG_MAC_FAILURES,\n useValue: true,\n },\n {\n provide: AppIdServiceAbstraction,\n useClass: AppIdService,\n deps: [AbstractStorageService],\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 encryptService: EncryptService\n ) =>\n new CipherService(\n cryptoService,\n settingsService,\n apiService,\n fileUploadService,\n i18nService,\n () => injector.get(SearchServiceAbstraction),\n logService,\n stateService,\n encryptService\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 EncryptService,\n ],\n },\n {\n provide: FolderServiceAbstraction,\n useClass: FolderService,\n deps: [\n CryptoServiceAbstraction,\n I18nServiceAbstraction,\n CipherServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n {\n provide: InternalFolderService,\n useExisting: FolderServiceAbstraction,\n },\n {\n provide: FolderApiServiceAbstraction,\n useClass: FolderApiService,\n deps: [FolderServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: AccountApiServiceAbstraction,\n useClass: AccountApiServiceImplementation,\n deps: [\n ApiServiceAbstraction,\n UserVerificationServiceAbstraction,\n LogService,\n InternalAccountService,\n ],\n },\n {\n provide: AccountServiceAbstraction,\n useClass: AccountServiceImplementation,\n deps: [MessagingServiceAbstraction, LogService],\n },\n {\n provide: InternalAccountService,\n useExisting: AccountServiceAbstraction,\n },\n {\n provide: AccountUpdateServiceAbstraction,\n useClass: AvatarUpdateService,\n deps: [ApiServiceAbstraction, StateServiceAbstraction],\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 EncryptService,\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, ApiServiceAbstraction],\n },\n {\n provide: ApiServiceAbstraction,\n useClass: ApiService,\n deps: [\n TokenServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n EnvironmentServiceAbstraction,\n AppIdServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: FileUploadServiceAbstraction,\n useClass: FileUploadService,\n deps: [LogService, ApiServiceAbstraction],\n },\n {\n provide: SyncServiceAbstraction,\n useClass: SyncService,\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 ProviderServiceAbstraction,\n FolderApiServiceAbstraction,\n OrganizationServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n { provide: BroadcasterServiceAbstraction, useClass: BroadcasterService },\n {\n provide: SettingsServiceAbstraction,\n useClass: SettingsService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: VaultTimeoutSettingsServiceAbstraction,\n useClass: VaultTimeoutSettingsService,\n deps: [\n CryptoServiceAbstraction,\n TokenServiceAbstraction,\n PolicyServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n {\n provide: VaultTimeoutServiceAbstraction,\n useClass: VaultTimeoutService,\n deps: [\n CipherServiceAbstraction,\n FolderServiceAbstraction,\n CollectionServiceAbstraction,\n CryptoServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n MessagingServiceAbstraction,\n SearchServiceAbstraction,\n KeyConnectorServiceAbstraction,\n StateServiceAbstraction,\n AuthServiceAbstraction,\n VaultTimeoutSettingsServiceAbstraction,\n LOCKED_CALLBACK,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: StateServiceAbstraction,\n useClass: StateService,\n deps: [\n AbstractStorageService,\n SECURE_STORAGE,\n MEMORY_STORAGE,\n LogService,\n StateMigrationServiceAbstraction,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n ],\n },\n {\n provide: StateMigrationServiceAbstraction,\n useClass: StateMigrationService,\n deps: [AbstractStorageService, SECURE_STORAGE, STATE_FACTORY],\n },\n {\n provide: ExportServiceAbstraction,\n useClass: ExportService,\n deps: [\n FolderServiceAbstraction,\n CipherServiceAbstraction,\n ApiServiceAbstraction,\n CryptoServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n ],\n },\n {\n provide: SearchServiceAbstraction,\n useClass: SearchService,\n deps: [CipherServiceAbstraction, LogService, I18nServiceAbstraction],\n },\n {\n provide: NotificationsServiceAbstraction,\n useClass: NotificationsService,\n deps: [\n SyncServiceAbstraction,\n AppIdServiceAbstraction,\n ApiServiceAbstraction,\n EnvironmentServiceAbstraction,\n LOGOUT_CALLBACK,\n LogService,\n StateServiceAbstraction,\n AuthServiceAbstraction,\n ],\n },\n {\n provide: CryptoFunctionServiceAbstraction,\n useClass: WebCryptoFunctionService,\n deps: [WINDOW],\n },\n {\n provide: EncryptService,\n useFactory: encryptServiceFactory,\n deps: [CryptoFunctionServiceAbstraction, LogService, LOG_MAC_FAILURES],\n },\n {\n provide: EventUploadServiceAbstraction,\n useClass: EventUploadService,\n deps: [ApiServiceAbstraction, StateServiceAbstraction, LogService],\n },\n {\n provide: EventCollectionServiceAbstraction,\n useClass: EventCollectionService,\n deps: [\n CipherServiceAbstraction,\n StateServiceAbstraction,\n OrganizationServiceAbstraction,\n EventUploadServiceAbstraction,\n ],\n },\n {\n provide: PolicyServiceAbstraction,\n useClass: PolicyService,\n deps: [StateServiceAbstraction, OrganizationServiceAbstraction],\n },\n {\n provide: InternalPolicyService,\n useExisting: PolicyServiceAbstraction,\n },\n {\n provide: PolicyApiServiceAbstraction,\n useClass: PolicyApiService,\n deps: [\n PolicyServiceAbstraction,\n ApiServiceAbstraction,\n StateServiceAbstraction,\n OrganizationServiceAbstraction,\n ],\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 SyncNotifierServiceAbstraction,\n MessagingServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: UserVerificationServiceAbstraction,\n useClass: UserVerificationService,\n deps: [\n CryptoServiceAbstraction,\n I18nServiceAbstraction,\n UserVerificationApiServiceAbstraction,\n ],\n },\n { provide: PasswordRepromptServiceAbstraction, useClass: PasswordRepromptService },\n {\n provide: OrganizationServiceAbstraction,\n useClass: OrganizationService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: InternalOrganizationService,\n useExisting: OrganizationServiceAbstraction,\n },\n {\n provide: OrganizationUserService,\n useClass: OrganizationUserServiceImplementation,\n deps: [ApiServiceAbstraction],\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 provide: AbstractThemingService,\n useClass: ThemingService,\n },\n {\n provide: FormValidationErrorsServiceAbstraction,\n useClass: FormValidationErrorsService,\n },\n {\n provide: UserVerificationApiServiceAbstraction,\n useClass: UserVerificationApiService,\n deps: [ApiServiceAbstraction],\n },\n {\n provide: OrganizationApiServiceAbstraction,\n useClass: OrganizationApiService,\n // This is a slightly odd dependency tree for a specialized api service\n // it depends on SyncService so that new data can be retrieved through the sync\n // rather than updating the OrganizationService directly. Instead OrganizationService\n // subscribes to sync notifications and will update itself based on that.\n deps: [ApiServiceAbstraction, SyncServiceAbstraction],\n },\n {\n provide: SyncNotifierServiceAbstraction,\n useClass: SyncNotifierService,\n },\n {\n provide: ConfigServiceAbstraction,\n useClass: ConfigService,\n deps: [StateServiceAbstraction, ConfigApiServiceAbstraction],\n },\n {\n provide: ConfigApiServiceAbstraction,\n useClass: ConfigApiService,\n deps: [ApiServiceAbstraction],\n },\n {\n provide: AnonymousHubServiceAbstraction,\n useClass: AnonymousHubService,\n deps: [EnvironmentServiceAbstraction, AuthServiceAbstraction, LogService],\n },\n {\n provide: ValidationServiceAbstraction,\n useClass: ValidationService,\n deps: [I18nServiceAbstraction, PlatformUtilsServiceAbstraction],\n },\n {\n provide: LoginServiceAbstraction,\n useClass: LoginService,\n deps: [StateServiceAbstraction],\n },\n ],\n})\nexport class JslibServicesModule {}\n\nfunction encryptServiceFactory(\n cryptoFunctionservice: CryptoFunctionServiceAbstraction,\n logService: LogService,\n logMacFailures: boolean\n): EncryptService {\n return flagEnabled(\"multithreadDecryption\")\n ? new MultithreadEncryptServiceImplementation(cryptoFunctionservice, logService, logMacFailures)\n : new EncryptServiceImplementation(cryptoFunctionservice, logService, logMacFailures);\n}\n","import { AppIdService as AppIdServiceAbstraction } from \"../abstractions/appId.service\";\nimport { AbstractStorageService } from \"../abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"../enums/htmlStorageLocation\";\nimport { Utils } from \"../misc/utils\";\n\nexport class AppIdService implements AppIdServiceAbstraction {\n constructor(private storageService: AbstractStorageService) {}\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 { Observable, Subject } from \"rxjs\";\n\nimport { 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 { AuthenticationStatus } from \"../enums/authenticationStatus\";\nimport { AuthenticationType } from \"../enums/authenticationType\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { KeySuffixOptions } from \"../enums/keySuffixOptions\";\nimport { PasswordLogInStrategy } from \"../misc/logInStrategies/passwordLogin.strategy\";\nimport { PasswordlessLogInStrategy } from \"../misc/logInStrategies/passwordlessLogin.strategy\";\nimport { SsoLogInStrategy } from \"../misc/logInStrategies/ssoLogin.strategy\";\nimport { UserApiLogInStrategy } from \"../misc/logInStrategies/user-api-login.strategy\";\nimport { AuthResult } from \"../models/domain/auth-result\";\nimport {\n UserApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../models/domain/log-in-credentials\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { TokenTwoFactorRequest } from \"../models/request/identity-token/token-two-factor.request\";\nimport { PreloginRequest } from \"../models/request/prelogin.request\";\nimport { ErrorResponse } from \"../models/response/error.response\";\nimport { AuthRequestPushNotification } from \"../models/response/notification.response\";\n\nconst sessionTimeoutLength = 2 * 60 * 1000; // 2 minutes\n\nexport class AuthService implements AuthServiceAbstraction {\n get email(): string {\n if (\n this.logInStrategy instanceof PasswordLogInStrategy ||\n this.logInStrategy instanceof PasswordlessLogInStrategy\n ) {\n return this.logInStrategy.email;\n }\n\n return null;\n }\n\n get masterPasswordHash(): string {\n return this.logInStrategy instanceof PasswordLogInStrategy\n ? this.logInStrategy.masterPasswordHash\n : null;\n }\n\n get accessCode(): string {\n return this.logInStrategy instanceof PasswordlessLogInStrategy\n ? this.logInStrategy.accessCode\n : null;\n }\n\n get authRequestId(): string {\n return this.logInStrategy instanceof PasswordlessLogInStrategy\n ? this.logInStrategy.authRequestId\n : null;\n }\n\n private logInStrategy:\n | UserApiLogInStrategy\n | PasswordLogInStrategy\n | SsoLogInStrategy\n | PasswordlessLogInStrategy;\n private sessionTimeout: any;\n\n private pushNotificationSubject = new Subject();\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:\n | UserApiLogInCredentials\n | PasswordLogInCredentials\n | SsoLogInCredentials\n | PasswordlessLogInCredentials\n ): Promise {\n this.clearState();\n\n let strategy:\n | UserApiLogInStrategy\n | PasswordLogInStrategy\n | SsoLogInStrategy\n | PasswordlessLogInStrategy;\n\n switch (credentials.type) {\n case 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 break;\n case 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 break;\n case AuthenticationType.UserApi:\n strategy = new UserApiLogInStrategy(\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 break;\n case AuthenticationType.Passwordless:\n strategy = new PasswordlessLogInStrategy(\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 break;\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: TokenTwoFactorRequest,\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 authingWithUserApiKey(): boolean {\n return this.logInStrategy instanceof UserApiLogInStrategy;\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 authingWithPasswordless(): boolean {\n return this.logInStrategy instanceof PasswordlessLogInStrategy;\n }\n\n async getAuthStatus(userId?: string): Promise {\n const isAuthenticated = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!isAuthenticated) {\n return AuthenticationStatus.LoggedOut;\n }\n\n // Keys aren't stored for a device that is locked or logged out\n // Make sure we're logged in before checking this, otherwise we could mix up those states\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 const hasKeyInMemory = await this.cryptoService.hasKeyInMemory(userId);\n if (!hasKeyInMemory) {\n return AuthenticationStatus.Locked;\n }\n\n return AuthenticationStatus.Unlocked;\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 async authResponsePushNotifiction(notification: AuthRequestPushNotification): Promise {\n this.pushNotificationSubject.next(notification.id);\n }\n\n getPushNotifcationObs$(): Observable {\n return this.pushNotificationSubject.asObservable();\n }\n\n private saveState(\n strategy:\n | UserApiLogInStrategy\n | PasswordLogInStrategy\n | SsoLogInStrategy\n | PasswordlessLogInStrategy\n ) {\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 { BehaviorSubject, concatMap } from \"rxjs\";\n\nimport { CipherService } from \"../../abstractions/cipher.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { InternalFolderService as InternalFolderServiceAbstraction } from \"../../abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"../../abstractions/i18n.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { Utils } from \"../../misc/utils\";\nimport { CipherData } from \"../../models/data/cipher.data\";\nimport { FolderData } from \"../../models/data/folder.data\";\nimport { Folder } from \"../../models/domain/folder\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\nimport { FolderView } from \"../../models/view/folder.view\";\n\nexport class FolderService implements InternalFolderServiceAbstraction {\n protected _folders: BehaviorSubject = new BehaviorSubject([]);\n protected _folderViews: BehaviorSubject = new BehaviorSubject([]);\n\n folders$ = this._folders.asObservable();\n folderViews$ = this._folderViews.asObservable();\n\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private cipherService: CipherService,\n private stateService: StateService\n ) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n concatMap(async (unlocked) => {\n if (Utils.global.bitwardenContainerService == null) {\n return;\n }\n\n if (!unlocked) {\n this._folders.next([]);\n this._folderViews.next([]);\n return;\n }\n\n const data = await this.stateService.getEncryptedFolders();\n\n await this.updateObservables(data);\n })\n )\n .subscribe();\n }\n\n async clearCache(): Promise {\n this._folderViews.next([]);\n }\n\n // TODO: This should be moved to EncryptService or something\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 = this._folders.getValue();\n\n return folders.find((folder) => folder.id === id);\n }\n\n async getAllFromState(): 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 /**\n * @deprecated For the CLI only\n * @param id id of the folder\n */\n async getFromState(id: string): Promise {\n const foldersMap = await this.stateService.getEncryptedFolders();\n const folder = foldersMap[id];\n if (folder == null) {\n return null;\n }\n\n return new Folder(folder);\n }\n\n /**\n * @deprecated Only use in CLI!\n */\n async getAllDecryptedFromState(): Promise {\n const data = await this.stateService.getEncryptedFolders();\n const folders = Object.values(data || {}).map((f) => new Folder(f));\n\n return this.decryptFolders(folders);\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.updateObservables(folders);\n await this.stateService.setEncryptedFolders(folders);\n }\n\n async replace(folders: { [id: string]: FolderData }): Promise {\n await this.updateObservables(folders);\n await this.stateService.setEncryptedFolders(folders);\n }\n\n async clear(userId?: string): Promise {\n if (userId == null || userId == (await this.stateService.getUserId())) {\n this._folders.next([]);\n this._folderViews.next([]);\n }\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.updateObservables(folders);\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 private async updateObservables(foldersMap: { [id: string]: FolderData }) {\n const folders = Object.values(foldersMap || {}).map((f) => new Folder(f));\n\n this._folders.next(folders);\n\n if (await this.cryptoService.hasKey()) {\n this._folderViews.next(await this.decryptFolders(folders));\n }\n }\n\n private async decryptFolders(folders: Folder[]) {\n const decryptFolderPromises = folders.map((f) => f.decrypt());\n const decryptedFolders = await Promise.all(decryptFolderPromises);\n\n decryptedFolders.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n\n const noneFolder = new FolderView();\n noneFolder.name = this.i18nService.t(\"noneFolder\");\n decryptedFolders.push(noneFolder);\n\n return decryptedFolders;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { FolderApiServiceAbstraction } from \"../../abstractions/folder/folder-api.service.abstraction\";\nimport { InternalFolderService } from \"../../abstractions/folder/folder.service.abstraction\";\nimport { FolderData } from \"../../models/data/folder.data\";\nimport { Folder } from \"../../models/domain/folder\";\nimport { FolderRequest } from \"../../models/request/folder.request\";\nimport { FolderResponse } from \"../../models/response/folder.response\";\n\nexport class FolderApiService implements FolderApiServiceAbstraction {\n constructor(private folderService: InternalFolderService, private apiService: ApiService) {}\n\n async save(folder: Folder): Promise {\n const request = new FolderRequest(folder);\n\n let response: FolderResponse;\n if (folder.id == null) {\n response = await this.postFolder(request);\n folder.id = response.id;\n } else {\n response = await this.putFolder(folder.id, request);\n }\n\n const data = new FolderData(response);\n await this.folderService.upsert(data);\n }\n\n async delete(id: string): Promise {\n await this.deleteFolder(id);\n await this.folderService.delete(id);\n }\n\n async get(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/folders/\" + id, null, true, true);\n return new FolderResponse(r);\n }\n\n private async postFolder(request: FolderRequest): Promise {\n const r = await this.apiService.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.apiService.send(\"PUT\", \"/folders/\" + id, request, true, true);\n return new FolderResponse(r);\n }\n\n private deleteFolder(id: string): Promise {\n return this.apiService.send(\"DELETE\", \"/folders/\" + id, null, true, false);\n }\n}\n","import { AccountApiService } from \"../../abstractions/account/account-api.service\";\nimport { InternalAccountService } from \"../../abstractions/account/account.service\";\nimport { ApiService } from \"../../abstractions/api.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { UserVerificationService } from \"../../abstractions/userVerification/userVerification.service.abstraction\";\nimport { Verification } from \"../../types/verification\";\n\nexport class AccountApiServiceImplementation implements AccountApiService {\n constructor(\n private apiService: ApiService,\n private userVerificationService: UserVerificationService,\n private logService: LogService,\n private accountService: InternalAccountService\n ) {}\n\n async deleteAccount(verification: Verification): Promise {\n try {\n const verificationRequest = await this.userVerificationService.buildRequest(verification);\n await this.apiService.send(\"DELETE\", \"/accounts\", verificationRequest, true, false);\n this.accountService.delete();\n } catch (e) {\n this.logService.error(e);\n throw e;\n }\n }\n}\n","import { InternalAccountService } from \"../../abstractions/account/account.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\n\nexport class AccountServiceImplementation implements InternalAccountService {\n constructor(private messagingService: MessagingService, private logService: LogService) {}\n\n async delete(): Promise {\n try {\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n throw e;\n }\n }\n}\n","import { BehaviorSubject, Observable } from \"rxjs\";\n\nimport { AvatarUpdateService as AvatarUpdateServiceAbstraction } from \"../../abstractions/account/avatar-update.service\";\nimport { ApiService } from \"../../abstractions/api.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { UpdateAvatarRequest } from \"../../models/request/update-avatar.request\";\nimport { ProfileResponse } from \"../../models/response/profile.response\";\n\nexport class AvatarUpdateService implements AvatarUpdateServiceAbstraction {\n private _avatarUpdate$ = new BehaviorSubject(null);\n avatarUpdate$: Observable = this._avatarUpdate$.asObservable();\n\n constructor(private apiService: ApiService, private stateService: StateService) {\n this.loadColorFromState();\n }\n\n loadColorFromState(): Promise {\n return this.stateService.getAvatarColor().then((color) => {\n this._avatarUpdate$.next(color);\n return color;\n });\n }\n\n pushUpdate(color: string | null): Promise {\n return this.apiService.putAvatar(new UpdateAvatarRequest(color)).then((response) => {\n this.stateService.setAvatarColor(response.avatarColor);\n this._avatarUpdate$.next(response.avatarColor);\n });\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/collection.data\";\nimport { Collection } from \"../models/domain/collection\";\nimport { TreeNode } from \"../models/domain/tree-node\";\nimport { CollectionView } from \"../models/view/collection.view\";\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\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 { concatMap, 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/environment-urls\";\n\nexport class EnvironmentService implements EnvironmentServiceAbstraction {\n private readonly urlsSubject = new Subject();\n urls: Observable = this.urlsSubject;\n\n protected baseUrl: string;\n protected webVaultUrl: string;\n protected apiUrl: string;\n protected identityUrl: string;\n protected iconsUrl: string;\n protected notificationsUrl: string;\n protected eventsUrl: string;\n private keyConnectorUrl: string;\n private scimUrl: string = null;\n\n constructor(private stateService: StateService) {\n this.stateService.activeAccount$\n .pipe(\n concatMap(async () => {\n await this.setUrlsFromStorage();\n })\n )\n .subscribe();\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 getScimUrl() {\n if (this.scimUrl != null) {\n return this.scimUrl + \"/v2\";\n }\n\n return this.getWebVaultUrl() === \"https://vault.bitwarden.com\"\n ? \"https://scim.bitwarden.com/v2\"\n : this.getWebVaultUrl() + \"/scim/v2\";\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 // scimUrl is not saved to storage\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 // scimUrl cannot be cleared\n urls.scim = this.formatUrl(urls.scim) ?? this.scimUrl;\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 // scimUrl is not saved to storage\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 this.scimUrl = urls.scim;\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 scim: this.scimUrl,\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 isCloud(): boolean {\n return [\"https://api.bitwarden.com\", \"https://vault.bitwarden.com/api\"].includes(\n this.getApiUrl()\n );\n }\n}\n","import { ApiService as ApiServiceAbstraction } from \"../abstractions/api.service\";\nimport { AppIdService } from \"../abstractions/appId.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 { OrganizationConnectionType } from \"../enums/organizationConnectionType\";\nimport { Utils } from \"../misc/utils\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/set-key-connector-key.request\";\nimport { AttachmentRequest } from \"../models/request/attachment.request\";\nimport { BitPayInvoiceRequest } from \"../models/request/bit-pay-invoice.request\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipher-bulk-delete.request\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipher-bulk-move.request\";\nimport { CipherBulkShareRequest } from \"../models/request/cipher-bulk-share.request\";\nimport { CipherCollectionsRequest } from \"../models/request/cipher-collections.request\";\nimport { CipherCreateRequest } from \"../models/request/cipher-create.request\";\nimport { CipherPartialRequest } from \"../models/request/cipher-partial.request\";\nimport { CipherShareRequest } from \"../models/request/cipher-share.request\";\nimport { CipherRequest } from \"../models/request/cipher.request\";\nimport { CollectionRequest } from \"../models/request/collection.request\";\nimport { DeleteRecoverRequest } from \"../models/request/delete-recover.request\";\nimport { DeviceVerificationRequest } from \"../models/request/device-verification.request\";\nimport { DeviceRequest } from \"../models/request/device.request\";\nimport { EmailTokenRequest } from \"../models/request/email-token.request\";\nimport { EmailRequest } from \"../models/request/email.request\";\nimport { EmergencyAccessAcceptRequest } from \"../models/request/emergency-access-accept.request\";\nimport { EmergencyAccessConfirmRequest } from \"../models/request/emergency-access-confirm.request\";\nimport { EmergencyAccessInviteRequest } from \"../models/request/emergency-access-invite.request\";\nimport { EmergencyAccessPasswordRequest } from \"../models/request/emergency-access-password.request\";\nimport { EmergencyAccessUpdateRequest } from \"../models/request/emergency-access-update.request\";\nimport { EventRequest } from \"../models/request/event.request\";\nimport { GroupRequest } from \"../models/request/group.request\";\nimport { IapCheckRequest } from \"../models/request/iap-check.request\";\nimport { PasswordTokenRequest } from \"../models/request/identity-token/password-token.request\";\nimport { SsoTokenRequest } from \"../models/request/identity-token/sso-token.request\";\nimport { TokenTwoFactorRequest } from \"../models/request/identity-token/token-two-factor.request\";\nimport { UserApiTokenRequest } from \"../models/request/identity-token/user-api-token.request\";\nimport { ImportCiphersRequest } from \"../models/request/import-ciphers.request\";\nimport { ImportOrganizationCiphersRequest } from \"../models/request/import-organization-ciphers.request\";\nimport { KdfRequest } from \"../models/request/kdf.request\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/key-connector-user-key.request\";\nimport { KeysRequest } from \"../models/request/keys.request\";\nimport { OrganizationConnectionRequest } from \"../models/request/organization-connection.request\";\nimport { OrganizationImportRequest } from \"../models/request/organization-import.request\";\nimport { OrganizationSponsorshipCreateRequest } from \"../models/request/organization/organization-sponsorship-create.request\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../models/request/organization/organization-sponsorship-redeem.request\";\nimport { PasswordHintRequest } from \"../models/request/password-hint.request\";\nimport { PasswordRequest } from \"../models/request/password.request\";\nimport { PasswordlessCreateAuthRequest } from \"../models/request/passwordless-create-auth.request\";\nimport { PaymentRequest } from \"../models/request/payment.request\";\nimport { PreloginRequest } from \"../models/request/prelogin.request\";\nimport { ProviderAddOrganizationRequest } from \"../models/request/provider/provider-add-organization.request\";\nimport { ProviderOrganizationCreateRequest } from \"../models/request/provider/provider-organization-create.request\";\nimport { ProviderSetupRequest } from \"../models/request/provider/provider-setup.request\";\nimport { ProviderUpdateRequest } from \"../models/request/provider/provider-update.request\";\nimport { ProviderUserAcceptRequest } from \"../models/request/provider/provider-user-accept.request\";\nimport { ProviderUserBulkConfirmRequest } from \"../models/request/provider/provider-user-bulk-confirm.request\";\nimport { ProviderUserBulkRequest } from \"../models/request/provider/provider-user-bulk.request\";\nimport { ProviderUserConfirmRequest } from \"../models/request/provider/provider-user-confirm.request\";\nimport { ProviderUserInviteRequest } from \"../models/request/provider/provider-user-invite.request\";\nimport { ProviderUserUpdateRequest } from \"../models/request/provider/provider-user-update.request\";\nimport { RegisterRequest } from \"../models/request/register.request\";\nimport { SecretVerificationRequest } from \"../models/request/secret-verification.request\";\nimport { SelectionReadOnlyRequest } from \"../models/request/selection-read-only.request\";\nimport { SendAccessRequest } from \"../models/request/send-access.request\";\nimport { SendRequest } from \"../models/request/send.request\";\nimport { SetPasswordRequest } from \"../models/request/set-password.request\";\nimport { StorageRequest } from \"../models/request/storage.request\";\nimport { TaxInfoUpdateRequest } from \"../models/request/tax-info-update.request\";\nimport { TwoFactorEmailRequest } from \"../models/request/two-factor-email.request\";\nimport { TwoFactorProviderRequest } from \"../models/request/two-factor-provider.request\";\nimport { TwoFactorRecoveryRequest } from \"../models/request/two-factor-recovery.request\";\nimport { UpdateAvatarRequest } from \"../models/request/update-avatar.request\";\nimport { UpdateDomainsRequest } from \"../models/request/update-domains.request\";\nimport { UpdateKeyRequest } from \"../models/request/update-key.request\";\nimport { UpdateProfileRequest } from \"../models/request/update-profile.request\";\nimport { UpdateTempPasswordRequest } from \"../models/request/update-temp-password.request\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../models/request/update-two-factor-authenticator.request\";\nimport { UpdateTwoFactorDuoRequest } from \"../models/request/update-two-factor-duo.request\";\nimport { UpdateTwoFactorEmailRequest } from \"../models/request/update-two-factor-email.request\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../models/request/update-two-factor-web-authn-delete.request\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../models/request/update-two-factor-web-authn.request\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../models/request/update-two-factor-yubio-otp.request\";\nimport { VerifyDeleteRecoverRequest } from \"../models/request/verify-delete-recover.request\";\nimport { VerifyEmailRequest } from \"../models/request/verify-email.request\";\nimport { ApiKeyResponse } from \"../models/response/api-key.response\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachment-upload-data.response\";\nimport { AttachmentResponse } from \"../models/response/attachment.response\";\nimport { AuthRequestResponse } from \"../models/response/auth-request.response\";\nimport { RegisterResponse } from \"../models/response/authentication/register.response\";\nimport { BillingHistoryResponse } from \"../models/response/billing-history.response\";\nimport { BillingPaymentResponse } from \"../models/response/billing-payment.response\";\nimport { BreachAccountResponse } from \"../models/response/breach-account.response\";\nimport { CipherResponse } from \"../models/response/cipher.response\";\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from \"../models/response/collection.response\";\nimport { DeviceVerificationResponse } from \"../models/response/device-verification.response\";\nimport { DomainsResponse } from \"../models/response/domains.response\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse,\n} from \"../models/response/emergency-access.response\";\nimport { ErrorResponse } from \"../models/response/error.response\";\nimport { EventResponse } from \"../models/response/event.response\";\nimport { GroupDetailsResponse, GroupResponse } from \"../models/response/group.response\";\nimport { IdentityCaptchaResponse } from \"../models/response/identity-captcha.response\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identity-two-factor.response\";\nimport { KeyConnectorUserKeyResponse } from \"../models/response/key-connector-user-key.response\";\nimport { ListResponse } from \"../models/response/list.response\";\nimport {\n OrganizationConnectionConfigApis,\n OrganizationConnectionResponse,\n} from \"../models/response/organization-connection.response\";\nimport { OrganizationExportResponse } from \"../models/response/organization-export.response\";\nimport { OrganizationSponsorshipSyncStatusResponse } from \"../models/response/organization-sponsorship-sync-status.response\";\nimport { PaymentResponse } from \"../models/response/payment.response\";\nimport { PlanResponse } from \"../models/response/plan.response\";\nimport { PolicyResponse } from \"../models/response/policy.response\";\nimport { PreloginResponse } from \"../models/response/prelogin.response\";\nimport { ProfileResponse } from \"../models/response/profile.response\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../models/response/provider/provider-organization.response\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../models/response/provider/provider-user-bulk-public-key.response\";\nimport { ProviderUserBulkResponse } from \"../models/response/provider/provider-user-bulk.response\";\nimport {\n ProviderUserResponse,\n ProviderUserUserDetailsResponse,\n} from \"../models/response/provider/provider-user.response\";\nimport { ProviderResponse } from \"../models/response/provider/provider.response\";\nimport { SelectionReadOnlyResponse } from \"../models/response/selection-read-only.response\";\nimport { SendAccessResponse } from \"../models/response/send-access.response\";\nimport { SendFileDownloadDataResponse } from \"../models/response/send-file-download-data.response\";\nimport { SendFileUploadDataResponse } from \"../models/response/send-file-upload-data.response\";\nimport { SendResponse } from \"../models/response/send.response\";\nimport { SsoPreValidateResponse } from \"../models/response/sso-pre-validate.response\";\nimport { SubscriptionResponse } from \"../models/response/subscription.response\";\nimport { SyncResponse } from \"../models/response/sync.response\";\nimport { TaxInfoResponse } from \"../models/response/tax-info.response\";\nimport { TaxRateResponse } from \"../models/response/tax-rate.response\";\nimport { TwoFactorAuthenticatorResponse } from \"../models/response/two-factor-authenticator.response\";\nimport { TwoFactorDuoResponse } from \"../models/response/two-factor-duo.response\";\nimport { TwoFactorEmailResponse } from \"../models/response/two-factor-email.response\";\nimport { TwoFactorProviderResponse } from \"../models/response/two-factor-provider.response\";\nimport { TwoFactorRecoverResponse } from \"../models/response/two-factor-recover.response\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"../models/response/two-factor-web-authn.response\";\nimport { TwoFactorYubiKeyResponse } from \"../models/response/two-factor-yubi-key.response\";\nimport { UserKeyResponse } from \"../models/response/user-key.response\";\nimport { SendAccessView } from \"../models/view/send-access.view\";\n\n/**\n * @deprecated The `ApiService` class is deprecated and calls should be extracted into individual\n * api services. The `send` method is still allowed to be used within api services. For background\n * of this decision please read https://contributing.bitwarden.com/architecture/adr/refactor-api-service.\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: UserApiTokenRequest | 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 UserApiTokenRequest\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 async postAuthRequest(request: PasswordlessCreateAuthRequest): Promise {\n const r = await this.send(\"POST\", \"/auth-requests/\", request, false, true);\n return new AuthRequestResponse(r);\n }\n\n async getAuthResponse(id: string, accessCode: string): Promise {\n const path = `/auth-requests/${id}/response?code=${accessCode}`;\n const r = await this.send(\"GET\", path, null, false, true);\n return new AuthRequestResponse(r);\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 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 async putAvatar(request: UpdateAvatarRequest): Promise {\n const r = await this.send(\"PUT\", \"/accounts/avatar\", 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.environmentService.getIdentityUrl()\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 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 async postRegister(request: RegisterRequest): Promise {\n const r = await this.send(\n \"POST\",\n \"/accounts/register\",\n request,\n false,\n true,\n this.environmentService.getIdentityUrl()\n );\n return new RegisterResponse(r);\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 postConvertToKeyConnector(): Promise {\n return this.send(\"POST\", \"/accounts/convert-to-key-connector\", null, true, false);\n }\n\n // Account Billing APIs\n\n async getUserBillingHistory(): Promise {\n const r = await this.send(\"GET\", \"/accounts/billing/history\", null, true, true);\n return new BillingHistoryResponse(r);\n }\n\n async getUserBillingPayment(): Promise {\n const r = await this.send(\"GET\", \"/accounts/billing/payment-method\", null, true, true);\n return new BillingPaymentResponse(r);\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 getFullCipherDetails(id: string): Promise {\n const r = await this.send(\"GET\", \"/ciphers/\" + id + \"/details\", 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 putPartialCipher(id: string, request: CipherPartialRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/partial\", 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 // Plan APIs\n\n async getPlans(): Promise> {\n const r = await this.send(\"GET\", \"/plans/\", null, false, true);\n return new ListResponse(r, PlanResponse);\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 async getDeviceVerificationSettings(): Promise {\n const r = await this.send(\n \"GET\",\n \"/two-factor/get-device-verification-settings\",\n null,\n true,\n true\n );\n return new DeviceVerificationResponse(r);\n }\n\n async putDeviceVerificationSettings(\n request: DeviceVerificationRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/two-factor/device-verification-settings\",\n request,\n true,\n true\n );\n return new DeviceVerificationResponse(r);\n }\n\n async getKnownDevice(email: string, deviceIdentifier: string): Promise {\n const path = `/devices/knowndevice/${email}/${deviceIdentifier}`;\n const r = await this.send(\"GET\", path, null, false, true);\n return r as boolean;\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 getCloudCommunicationsEnabled(): Promise {\n const r = await this.send(\"GET\", \"/organizations/connections/enabled\", null, true, true);\n return r as boolean;\n }\n\n async getOrganizationConnection(\n id: string,\n type: OrganizationConnectionType,\n configType: { new (response: any): TConfig }\n ): Promise> {\n const r = await this.send(\"GET\", `/organizations/connections/${id}/${type}`, null, true, true);\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async createOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig }\n ): Promise> {\n const r = await this.send(\"POST\", \"/organizations/connections/\", request, true, true);\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async updateOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig },\n organizationConnectionId?: string\n ): Promise> {\n const r = await this.send(\n \"PUT\",\n \"/organizations/connections/\" + organizationConnectionId,\n request,\n true,\n true\n );\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async deleteOrganizationConnection(id: string): Promise {\n return this.send(\"DELETE\", \"/organizations/connections/\" + id, null, true, false);\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 async getOrganizationExport(organizationId: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/export\",\n null,\n true,\n true\n );\n return new OrganizationExportResponse(r);\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.getApplicationVersionNumber()\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 const body = await response.json();\n return new SsoPreValidateResponse(body);\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/\" +\n (this.platformUtilsService.isSelfHost() ? \"self-hosted/\" : \"\") +\n sponsoredOrgId +\n \"/families-for-enterprise\",\n request,\n true,\n false\n );\n }\n\n async getSponsorshipSyncStatus(\n sponsoredOrgId: string\n ): Promise {\n const response = await this.send(\n \"GET\",\n \"/organization/sponsorship/\" + sponsoredOrgId + \"/sync-status\",\n null,\n true,\n true\n );\n return new OrganizationSponsorshipSyncStatusResponse(response);\n }\n\n async deleteRevokeSponsorship(sponsoringOrganizationId: string): Promise {\n return await this.send(\n \"DELETE\",\n \"/organization/sponsorship/\" +\n (this.platformUtilsService.isSelfHost() ? \"self-hosted/\" : \"\") +\n 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 const tokenRequest = new UserApiTokenRequest(\n clientId,\n clientSecret,\n new TokenTwoFactorRequest(),\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 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 const responseType = response.headers.get(\"content-type\");\n const responseIsJson = responseType != null && responseType.indexOf(\"application/json\") !== -1;\n if (hasResponse && response.status === 200 && responseIsJson) {\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 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 if (authed) {\n if (\n response.status === 401 ||\n response.status === 403 ||\n (tokenError &&\n response.status === 400 &&\n responseJson != null &&\n responseJson.error === \"invalid_grant\")\n ) {\n await this.logoutCallback(true);\n return null;\n }\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 { 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/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachment-upload-data.response\";\nimport { SendFileUploadDataResponse } from \"../models/response/send-file-upload-data.response\";\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();\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 { BehaviorSubject, concatMap } from \"rxjs\";\n\nimport { SettingsService as SettingsServiceAbstraction } from \"../abstractions/settings.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { Utils } from \"../misc/utils\";\nimport { AccountSettingsSettings } from \"../models/domain/account\";\n\nexport class SettingsService implements SettingsServiceAbstraction {\n protected _settings: BehaviorSubject = new BehaviorSubject({});\n\n settings$ = this._settings.asObservable();\n\n constructor(private stateService: StateService) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n concatMap(async (unlocked) => {\n if (Utils.global.bitwardenContainerService == null) {\n return;\n }\n\n if (!unlocked) {\n this._settings.next({});\n return;\n }\n\n const data = await this.stateService.getSettings();\n\n this._settings.next(data);\n })\n )\n .subscribe();\n }\n\n async setEquivalentDomains(equivalentDomains: string[][]): Promise {\n const settings = this._settings.getValue() ?? {};\n\n settings.equivalentDomains = equivalentDomains;\n\n this._settings.next(settings);\n await this.stateService.setSettings(settings);\n }\n\n async clear(userId?: string): Promise {\n if (userId == null || userId == (await this.stateService.getUserId())) {\n this._settings.next({});\n }\n\n await this.stateService.setSettings(null, { userId: userId });\n }\n}\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { PolicyService } from \"../../abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from \"../../abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { PolicyType } from \"../../enums/policyType\";\n\nexport class VaultTimeoutSettingsService implements VaultTimeoutSettingsServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private tokenService: TokenService,\n private policyService: PolicyService,\n private stateService: StateService\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","import { firstValueFrom } from \"rxjs\";\n\nimport { AuthService } from \"../../abstractions/auth.service\";\nimport { CipherService } from \"../../abstractions/cipher.service\";\nimport { CollectionService } from \"../../abstractions/collection.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { FolderService } from \"../../abstractions/folder/folder.service.abstraction\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { SearchService } from \"../../abstractions/search.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"../../abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService } from \"../../abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { AuthenticationStatus } from \"../../enums/authenticationStatus\";\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 keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private authService: AuthService,\n private vaultTimeoutSettingsService: VaultTimeoutSettingsService,\n private lockedCallback: (userId?: string) => Promise = null,\n private loggedOutCallback: (expired: boolean, 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 async checkVaultTimeout(): Promise {\n if (await this.platformUtilsService.isViewOpen()) {\n return;\n }\n\n const accounts = await firstValueFrom(this.stateService.accounts$);\n for (const userId in accounts) {\n if (userId != null && (await this.shouldLock(userId))) {\n await this.executeTimeoutAction(userId);\n }\n }\n }\n\n async lock(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.vaultTimeoutSettingsService.isPinLockSet();\n const pinLock =\n (pinSet[0] && (await this.stateService.getDecryptedPinProtected()) != null) || pinSet[1];\n\n if (!pinLock && !(await this.vaultTimeoutSettingsService.isBiometricLockSet())) {\n await this.logOut(userId);\n }\n }\n\n if (userId == null || userId === (await this.stateService.getUserId())) {\n this.searchService.clearIndex();\n await this.folderService.clearCache();\n }\n\n await this.stateService.setEverBeenUnlocked(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.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(false, userId);\n }\n }\n\n private async shouldLock(userId: string): Promise {\n const authStatus = await this.authService.getAuthStatus(userId);\n if (\n authStatus === AuthenticationStatus.Locked ||\n authStatus === AuthenticationStatus.LoggedOut\n ) {\n return false;\n }\n\n const vaultTimeout = await this.vaultTimeoutSettingsService.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(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/folder.service.abstraction\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { DEFAULT_KDF_ITERATIONS, KdfType } from \"../enums/kdfType\";\nimport { Utils } from \"../misc/utils\";\nimport { CipherData } from \"../models/data/cipher.data\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport { Collection } from \"../models/domain/collection\";\nimport { Folder } from \"../models/domain/folder\";\nimport { CipherWithIdExport as CipherExport } from \"../models/export/cipher-with-ids.export\";\nimport { CollectionWithIdExport as CollectionExport } from \"../models/export/collection-with-id.export\";\nimport { EventExport } from \"../models/export/event.export\";\nimport { FolderWithIdExport as FolderExport } from \"../models/export/folder-with-id.export\";\nimport { CollectionDetailsResponse } from \"../models/response/collection.response\";\nimport { CipherView } from \"../models/view/cipher.view\";\nimport { CollectionView } from \"../models/view/collection.view\";\nimport { EventView } from \"../models/view/event.view\";\nimport { FolderView } from \"../models/view/folder.view\";\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 EventExport(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.getAllDecryptedFromState().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.getAllFromState().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.getOrganizationExport(organizationId).then((exportData) => {\n const exportPromises: any = [];\n if (exportData != null) {\n if (exportData.collections != null && exportData.collections.length > 0) {\n exportData.collections.forEach((c) => {\n const collection = new Collection(new CollectionData(c as CollectionDetailsResponse));\n exportPromises.push(\n collection.decrypt().then((decCol) => {\n decCollections.push(decCol);\n })\n );\n });\n }\n if (exportData.ciphers != null && exportData.ciphers.length > 0) {\n exportData.ciphers\n .filter((c) => c.deletedDate === null)\n .forEach((c) => {\n const cipher = new Cipher(new CipherData(c));\n exportPromises.push(\n cipher.decrypt().then((decCipher) => {\n decCiphers.push(decCipher);\n })\n );\n });\n }\n }\n return Promise.all(exportPromises);\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 * 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 { AuthService } from \"../abstractions/auth.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/sync.service.abstraction\";\nimport { AuthenticationStatus } from \"../enums/authenticationStatus\";\nimport { NotificationType } from \"../enums/notificationType\";\nimport {\n NotificationResponse,\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../models/response/notification.response\";\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 environmentService: EnvironmentService,\n private logoutCallback: (expired: boolean) => Promise,\n private logService: LogService,\n private stateService: StateService,\n private authService: AuthService\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(true);\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 const authStatus = await this.authService.getAuthStatus();\n return authStatus >= AuthenticationStatus.Unlocked;\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 * as forge from \"node-forge\";\n\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { Utils } from \"../misc/utils\";\nimport { DecryptParameters } from \"../models/domain/decrypt-parameters\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\n\nexport class WebCryptoFunctionService implements CryptoFunctionService {\n private crypto: Crypto;\n private subtle: SubtleCrypto;\n\n constructor(win: Window | typeof global) {\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 { ApiService } from \"../../abstractions/api.service\";\nimport { EventUploadService as EventUploadServiceAbstraction } from \"../../abstractions/event/event-upload.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { EventRequest } from \"../../models/request/event.request\";\n\nexport class EventUploadService implements EventUploadServiceAbstraction {\n private inited = false;\n constructor(\n private apiService: ApiService,\n private stateService: StateService,\n private logService: LogService\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 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 req.organizationId = e.organizationId;\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 private async clearEvents(userId?: string): Promise {\n await this.stateService.setEventCollection(null, { userId: userId });\n }\n}\n","import { CipherService } from \"../../abstractions/cipher.service\";\nimport { EventCollectionService as EventCollectionServiceAbstraction } from \"../../abstractions/event/event-collection.service\";\nimport { EventUploadService } from \"../../abstractions/event/event-upload.service\";\nimport { OrganizationService } from \"../../abstractions/organization/organization.service.abstraction\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { EventType } from \"../../enums/eventType\";\nimport { EventData } from \"../../models/data/event.data\";\n\nexport class EventCollectionService implements EventCollectionServiceAbstraction {\n constructor(\n private cipherService: CipherService,\n private stateService: StateService,\n private organizationService: OrganizationService,\n private eventUploadService: EventUploadService\n ) {}\n\n async collect(\n eventType: EventType,\n cipherId: string = null,\n uploadImmediately = false,\n organizationId: string = null\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 if (organizationId != null) {\n if (!orgIds.has(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 event.organizationId = organizationId;\n eventCollection.push(event);\n await this.stateService.setEventCollection(eventCollection);\n if (uploadImmediately) {\n await this.eventUploadService.uploadEvents();\n }\n }\n}\n","import { of, concatMap, BehaviorSubject, Observable, map } from \"rxjs\";\n\nimport { OrganizationService } from \"../../abstractions/organization/organization.service.abstraction\";\nimport { InternalPolicyService as InternalPolicyServiceAbstraction } from \"../../abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PolicyType } from \"../../enums/policyType\";\nimport { Utils } from \"../../misc/utils\";\nimport { PolicyData } from \"../../models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/master-password-policy-options\";\nimport { Organization } from \"../../models/domain/organization\";\nimport { Policy } from \"../../models/domain/policy\";\nimport { ResetPasswordPolicyOptions } from \"../../models/domain/reset-password-policy-options\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\n\nexport class PolicyService implements InternalPolicyServiceAbstraction {\n protected _policies: BehaviorSubject = new BehaviorSubject([]);\n\n policies$ = this._policies.asObservable();\n\n constructor(\n private stateService: StateService,\n private organizationService: OrganizationService\n ) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n concatMap(async (unlocked) => {\n if (Utils.global.bitwardenContainerService == null) {\n return;\n }\n\n if (!unlocked) {\n this._policies.next([]);\n return;\n }\n\n const data = await this.stateService.getEncryptedPolicies();\n\n await this.updateObservables(data);\n })\n )\n .subscribe();\n }\n\n /**\n * @deprecated Do not call this, use the policies$ observable collection\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 if (Object.prototype.hasOwnProperty.call(diskPolicies, 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 masterPasswordPolicyOptions$(policies?: Policy[]): Observable {\n const observable = policies ? of(policies) : this.policies$;\n return observable.pipe(\n map((obsPolicies) => {\n let enforcedOptions: MasterPasswordPolicyOptions = null;\n const filteredPolicies = obsPolicies.filter((p) => p.type === PolicyType.MasterPassword);\n\n if (filteredPolicies == null || filteredPolicies.length === 0) {\n return enforcedOptions;\n }\n\n filteredPolicies.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 }\n\n policyAppliesToActiveUser$(policyType: PolicyType, policyFilter?: (policy: Policy) => boolean) {\n return this.policies$.pipe(\n concatMap(async (policies) => {\n const userId = await this.stateService.getUserId();\n return await this.checkPoliciesThatApplyToUser(policies, policyType, policyFilter, userId);\n })\n );\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\n return this.checkPoliciesThatApplyToUser(policies, policyType, policyFilter, userId);\n }\n\n async upsert(policy: PolicyData): Promise {\n let policies = await this.stateService.getEncryptedPolicies();\n if (policies == null) {\n policies = {};\n }\n\n policies[policy.id] = policy;\n\n await this.updateObservables(policies);\n await this.stateService.setDecryptedPolicies(null);\n await this.stateService.setEncryptedPolicies(policies);\n }\n\n async replace(policies: { [id: string]: PolicyData }): Promise {\n await this.updateObservables(policies);\n await this.stateService.setDecryptedPolicies(null);\n await this.stateService.setEncryptedPolicies(policies);\n }\n\n async clear(userId?: string): Promise {\n if (userId == null || userId == (await this.stateService.getUserId())) {\n this._policies.next([]);\n }\n await this.stateService.setDecryptedPolicies(null, { userId: userId });\n await this.stateService.setEncryptedPolicies(null, { userId: userId });\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 private async updateObservables(policiesMap: { [id: string]: PolicyData }) {\n const policies = Object.values(policiesMap || {}).map((f) => new Policy(f));\n\n this._policies.next(policies);\n }\n\n private async checkPoliciesThatApplyToUser(\n policies: Policy[],\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean,\n userId?: string\n ) {\n const organizations = await this.organizationService.getAll(userId);\n const filteredPolicies = policies.filter(\n (p) => p.type === policyType && p.enabled && (policyFilter == null || policyFilter(p))\n );\n const policySet = new Set(filteredPolicies.map((p) => p.organizationId));\n\n return organizations.some(\n (o) =>\n o.status >= OrganizationUserStatusType.Accepted &&\n o.usePolicies &&\n policySet.has(o.id) &&\n !this.isExcemptFromPolicies(o, policyType)\n );\n }\n}\n","import { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"../../abstractions/api.service\";\nimport { OrganizationService } from \"../../abstractions/organization/organization.service.abstraction\";\nimport { PolicyApiServiceAbstraction } from \"../../abstractions/policy/policy-api.service.abstraction\";\nimport { InternalPolicyService } from \"../../abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { PolicyType } from \"../../enums/policyType\";\nimport { PolicyData } from \"../../models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/master-password-policy-options\";\nimport { PolicyRequest } from \"../../models/request/policy.request\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\n\nexport class PolicyApiService implements PolicyApiServiceAbstraction {\n constructor(\n private policyService: InternalPolicyService,\n private apiService: ApiService,\n private stateService: StateService,\n private organizationService: OrganizationService\n ) {}\n\n async getPolicy(organizationId: string, type: PolicyType): Promise {\n const r = await this.apiService.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.apiService.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.apiService.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.apiService.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 getMasterPasswordPoliciesForInvitedUsers(\n orgId: string\n ): Promise {\n const userId = await this.stateService.getUserId();\n const response = await this.getPoliciesByInvitedUser(orgId, userId);\n const policies = await this.policyService.mapPoliciesFromToken(response);\n return await firstValueFrom(this.policyService.masterPasswordPolicyOptions$(policies));\n }\n\n async putPolicy(organizationId: string, type: PolicyType, request: PolicyRequest): Promise {\n const r = await this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/policies/\" + type,\n request,\n true,\n true\n );\n const response = new PolicyResponse(r);\n const data = new PolicyData(response);\n await this.policyService.upsert(data);\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/send.data\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { Send } from \"../models/domain/send\";\nimport { SendFile } from \"../models/domain/send-file\";\nimport { SendText } from \"../models/domain/send-text\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { SendRequest } from \"../models/request/send.request\";\nimport { ErrorResponse } from \"../models/response/error.response\";\nimport { SendResponse } from \"../models/response/send.response\";\nimport { SendView } from \"../models/view/send.view\";\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 data = new SendData(response);\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 data = new SendData(response);\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 { 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/organization.service.abstraction\";\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/symmetric-crypto-key\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/set-key-connector-key.request\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/key-connector-user-key.request\";\nimport { KeysRequest } from \"../models/request/keys.request\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\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 private logoutCallback: (expired: boolean, userId?: string) => void\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 this.handleKeyConnectorError(e);\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.handleKeyConnectorError(e);\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 this.handleKeyConnectorError(e);\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 private handleKeyConnectorError(e: any) {\n this.logService.error(e);\n if (this.logoutCallback != null) {\n this.logoutCallback(false);\n }\n throw new Error(\"Key Connector error\");\n }\n}\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { I18nService } from \"../../abstractions/i18n.service\";\nimport { UserVerificationApiServiceAbstraction } from \"../../abstractions/userVerification/userVerification-api.service.abstraction\";\nimport { UserVerificationService as UserVerificationServiceAbstraction } from \"../../abstractions/userVerification/userVerification.service.abstraction\";\nimport { VerificationType } from \"../../enums/verificationType\";\nimport { VerifyOTPRequest } from \"../../models/request/account/verify-otp.request\";\nimport { SecretVerificationRequest } from \"../../models/request/secret-verification.request\";\nimport { Verification } from \"../../types/verification\";\n\n/**\n * Used for general-purpose user verification throughout the app.\n * Use it to verify the input collected by UserVerificationComponent.\n */\nexport class UserVerificationService implements UserVerificationServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private userVerificationApiService: UserVerificationApiServiceAbstraction\n ) {}\n\n /**\n * Create a new request model to be used for server-side verification\n * @param verification User-supplied verification data (Master Password or OTP)\n * @param requestClass The request model to create\n * @param alreadyHashed Whether the master password is already hashed\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 /**\n * Used to verify the Master Password client-side, or send the OTP to the server for verification (with no other data)\n * Generally used for client-side verification only.\n * @param verification User-supplied verification data (Master Password or OTP)\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.userVerificationApiService.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.userVerificationApiService.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(\"masterPasswordRequired\"));\n }\n }\n }\n}\n","import { BehaviorSubject, concatMap } from \"rxjs\";\n\nimport { InternalOrganizationService as InternalOrganizationServiceAbstraction } from \"../../abstractions/organization/organization.service.abstraction\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { OrganizationData } from \"../../models/data/organization.data\";\nimport { Organization } from \"../../models/domain/organization\";\n\nexport class OrganizationService implements InternalOrganizationServiceAbstraction {\n protected _organizations = new BehaviorSubject([]);\n\n organizations$ = this._organizations.asObservable();\n\n constructor(private stateService: StateService) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n concatMap(async (unlocked) => {\n if (!unlocked) {\n this._organizations.next([]);\n return;\n }\n\n const data = await this.stateService.getOrganizations();\n this.updateObservables(data);\n })\n )\n .subscribe();\n }\n\n async getAll(userId?: string): Promise {\n const organizationsMap = await this.stateService.getOrganizations({ userId: userId });\n return Object.values(organizationsMap || {}).map((o) => new Organization(o));\n }\n\n async canManageSponsorships(): Promise {\n const organizations = this._organizations.getValue();\n return organizations.some(\n (o) => o.familySponsorshipAvailable || o.familySponsorshipFriendlyName !== null\n );\n }\n\n hasOrganizations(): boolean {\n const organizations = this._organizations.getValue();\n return organizations.length > 0;\n }\n\n async upsert(organization: OrganizationData): Promise {\n let organizations = await this.stateService.getOrganizations();\n if (organizations == null) {\n organizations = {};\n }\n\n organizations[organization.id] = organization;\n\n await this.replace(organizations);\n }\n\n async delete(id: string): Promise {\n const organizations = await this.stateService.getOrganizations();\n if (organizations == null) {\n return;\n }\n\n if (organizations[id] == null) {\n return;\n }\n\n delete organizations[id];\n await this.replace(organizations);\n }\n\n get(id: string): Organization {\n const organizations = this._organizations.getValue();\n\n return organizations.find((organization) => organization.id === id);\n }\n\n /**\n * @deprecated For the CLI only\n * @param id id of the organization\n */\n async getFromState(id: string): Promise {\n const organizationsMap = await this.stateService.getOrganizations();\n const organization = organizationsMap[id];\n if (organization == null) {\n return null;\n }\n\n return new Organization(organization);\n }\n\n getByIdentifier(identifier: string): Organization {\n const organizations = this._organizations.getValue();\n\n return organizations.find((organization) => organization.identifier === identifier);\n }\n\n async replace(organizations: { [id: string]: OrganizationData }) {\n await this.stateService.setOrganizations(organizations);\n this.updateObservables(organizations);\n }\n\n private updateObservables(organizationsMap: { [id: string]: OrganizationData }) {\n const organizations = Object.values(organizationsMap || {}).map((o) => new Organization(o));\n this._organizations.next(organizations);\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { OrganizationUserService } from \"../../abstractions/organization-user/organization-user.service\";\nimport {\n OrganizationUserAcceptRequest,\n OrganizationUserBulkConfirmRequest,\n OrganizationUserConfirmRequest,\n OrganizationUserInviteRequest,\n OrganizationUserResetPasswordEnrollmentRequest,\n OrganizationUserResetPasswordRequest,\n OrganizationUserUpdateGroupsRequest,\n OrganizationUserUpdateRequest,\n} from \"../../abstractions/organization-user/requests\";\nimport {\n OrganizationUserBulkPublicKeyResponse,\n OrganizationUserBulkResponse,\n OrganizationUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n OrganizationUserUserDetailsResponse,\n} from \"../../abstractions/organization-user/responses\";\nimport { ListResponse } from \"../../models/response/list.response\";\n\nimport { OrganizationUserBulkRequest } from \"./requests\";\n\nexport class OrganizationUserServiceImplementation implements OrganizationUserService {\n constructor(private apiService: ApiService) {}\n\n async getOrganizationUser(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.apiService.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.apiService.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/groups\",\n null,\n true,\n true\n );\n return r;\n }\n\n async getAllUsers(\n organizationId: string\n ): Promise> {\n const r = await this.apiService.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.apiService.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 postOrganizationUserInvite(\n organizationId: string,\n request: OrganizationUserInviteRequest\n ): Promise {\n return this.apiService.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.apiService.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 ids: string[]\n ): Promise> {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/reinvite\",\n new OrganizationUserBulkRequest(ids),\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.apiService.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.apiService.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 ids: string[]\n ): Promise> {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/public-keys\",\n new OrganizationUserBulkRequest(ids),\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.apiService.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.apiService.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.apiService.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.apiService.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.apiService.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.apiService.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n null,\n true,\n false\n );\n }\n\n async deleteManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise> {\n const r = await this.apiService.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users\",\n new OrganizationUserBulkRequest(ids),\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n revokeOrganizationUser(organizationId: string, id: string): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/revoke\",\n null,\n true,\n false\n );\n }\n\n async revokeManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise> {\n const r = await this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/revoke\",\n new OrganizationUserBulkRequest(ids),\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n restoreOrganizationUser(organizationId: string, id: string): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/restore\",\n null,\n true,\n false\n );\n }\n\n async restoreManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise> {\n const r = await this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/restore\",\n new OrganizationUserBulkRequest(ids),\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n}\n","import { ProviderService as ProviderServiceAbstraction } from \"../abstractions/provider.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { ProviderData } from \"../models/data/provider.data\";\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 { UntypedFormGroup, ValidationErrors } from \"@angular/forms\";\n\nimport {\n FormGroupControls,\n FormValidationErrorsService as FormValidationErrorsAbstraction,\n AllValidationErrors,\n} from \"../abstractions/formValidationErrors.service\";\n\nexport class FormValidationErrorsService implements FormValidationErrorsAbstraction {\n getFormValidationErrors(controls: FormGroupControls): AllValidationErrors[] {\n let errors: AllValidationErrors[] = [];\n Object.keys(controls).forEach((key) => {\n const control = controls[key];\n if (control instanceof UntypedFormGroup) {\n errors = errors.concat(this.getFormValidationErrors(control.controls));\n }\n\n const controlErrors: ValidationErrors = controls[key].errors;\n if (controlErrors !== null) {\n Object.keys(controlErrors).forEach((keyError) => {\n errors.push({\n controlName: key,\n errorName: keyError,\n });\n });\n }\n });\n\n return errors;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { UserVerificationApiServiceAbstraction } from \"../../abstractions/userVerification/userVerification-api.service.abstraction\";\nimport { VerifyOTPRequest } from \"../../models/request/account/verify-otp.request\";\n\nexport class UserVerificationApiService implements UserVerificationApiServiceAbstraction {\n constructor(private apiService: ApiService) {}\n\n postAccountVerifyOTP(request: VerifyOTPRequest): Promise {\n return this.apiService.send(\"POST\", \"/accounts/verify-otp\", request, true, false);\n }\n async postAccountRequestOTP(): Promise {\n return this.apiService.send(\"POST\", \"/accounts/request-otp\", null, true, false);\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { OrganizationApiServiceAbstraction } from \"../../abstractions/organization/organization-api.service.abstraction\";\nimport { SyncService } from \"../../abstractions/sync/sync.service.abstraction\";\nimport { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\nimport { ImportDirectoryRequest } from \"../../models/request/import-directory.request\";\nimport { OrganizationApiKeyRequest } from \"../../models/request/organization-api-key.request\";\nimport { OrganizationCreateRequest } from \"../../models/request/organization-create.request\";\nimport { OrganizationKeysRequest } from \"../../models/request/organization-keys.request\";\nimport { OrganizationSubscriptionUpdateRequest } from \"../../models/request/organization-subscription-update.request\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../../models/request/organization-tax-info-update.request\";\nimport { OrganizationUpdateRequest } from \"../../models/request/organization-update.request\";\nimport { OrganizationUpgradeRequest } from \"../../models/request/organization-upgrade.request\";\nimport { OrganizationSsoRequest } from \"../../models/request/organization/organization-sso.request\";\nimport { PaymentRequest } from \"../../models/request/payment.request\";\nimport { SeatRequest } from \"../../models/request/seat.request\";\nimport { SecretVerificationRequest } from \"../../models/request/secret-verification.request\";\nimport { StorageRequest } from \"../../models/request/storage.request\";\nimport { VerifyBankRequest } from \"../../models/request/verify-bank.request\";\nimport { ApiKeyResponse } from \"../../models/response/api-key.response\";\nimport { BillingResponse } from \"../../models/response/billing.response\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { OrganizationApiKeyInformationResponse } from \"../../models/response/organization-api-key-information.response\";\nimport { OrganizationAutoEnrollStatusResponse } from \"../../models/response/organization-auto-enroll-status.response\";\nimport { OrganizationKeysResponse } from \"../../models/response/organization-keys.response\";\nimport { OrganizationSubscriptionResponse } from \"../../models/response/organization-subscription.response\";\nimport { OrganizationResponse } from \"../../models/response/organization.response\";\nimport { OrganizationSsoResponse } from \"../../models/response/organization/organization-sso.response\";\nimport { PaymentResponse } from \"../../models/response/payment.response\";\nimport { TaxInfoResponse } from \"../../models/response/tax-info.response\";\n\nexport class OrganizationApiService implements OrganizationApiServiceAbstraction {\n constructor(private apiService: ApiService, private syncService: SyncService) {}\n\n async get(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/organizations/\" + id, null, true, true);\n return new OrganizationResponse(r);\n }\n\n async getBilling(id: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + id + \"/billing\",\n null,\n true,\n true\n );\n return new BillingResponse(r);\n }\n\n async getSubscription(id: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + id + \"/subscription\",\n null,\n true,\n true\n );\n return new OrganizationSubscriptionResponse(r);\n }\n\n async getLicense(id: string, installationId: string): Promise {\n return this.apiService.send(\n \"GET\",\n \"/organizations/\" + id + \"/license?installationId=\" + installationId,\n null,\n true,\n true\n );\n }\n\n async getAutoEnrollStatus(identifier: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + identifier + \"/auto-enroll-status\",\n null,\n true,\n true\n );\n return new OrganizationAutoEnrollStatusResponse(r);\n }\n\n async create(request: OrganizationCreateRequest): Promise {\n const r = await this.apiService.send(\"POST\", \"/organizations\", request, true, true);\n // Forcing a sync will notify organization service that they need to repull\n await this.syncService.fullSync(true);\n return new OrganizationResponse(r);\n }\n\n async createLicense(data: FormData): Promise {\n const r = await this.apiService.send(\"POST\", \"/organizations/license\", data, true, true);\n return new OrganizationResponse(r);\n }\n\n async save(id: string, request: OrganizationUpdateRequest): Promise {\n const r = await this.apiService.send(\"PUT\", \"/organizations/\" + id, request, true, true);\n const data = new OrganizationResponse(r);\n await this.syncService.fullSync(true);\n return data;\n }\n\n async updatePayment(id: string, request: PaymentRequest): Promise {\n return this.apiService.send(\"POST\", \"/organizations/\" + id + \"/payment\", request, true, false);\n }\n\n async upgrade(id: string, request: OrganizationUpgradeRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/upgrade\",\n request,\n true,\n true\n );\n return new PaymentResponse(r);\n }\n\n async updateSubscription(\n id: string,\n request: OrganizationSubscriptionUpdateRequest\n ): Promise {\n return this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/subscription\",\n request,\n true,\n false\n );\n }\n\n async updateSeats(id: string, request: SeatRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/seat\",\n request,\n true,\n true\n );\n return new PaymentResponse(r);\n }\n\n async updateStorage(id: string, request: StorageRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/storage\",\n request,\n true,\n true\n );\n return new PaymentResponse(r);\n }\n\n async verifyBank(id: string, request: VerifyBankRequest): Promise {\n await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/verify-bank\",\n request,\n true,\n false\n );\n }\n\n async cancel(id: string): Promise {\n return this.apiService.send(\"POST\", \"/organizations/\" + id + \"/cancel\", null, true, false);\n }\n\n async reinstate(id: string): Promise {\n return this.apiService.send(\"POST\", \"/organizations/\" + id + \"/reinstate\", null, true, false);\n }\n\n async leave(id: string): Promise {\n await this.apiService.send(\"POST\", \"/organizations/\" + id + \"/leave\", null, true, false);\n await this.syncService.fullSync(true);\n }\n\n async delete(id: string, request: SecretVerificationRequest): Promise {\n await this.apiService.send(\"DELETE\", \"/organizations/\" + id, request, true, false);\n await this.syncService.fullSync(true);\n }\n\n async updateLicense(id: string, data: FormData): Promise {\n await this.apiService.send(\"POST\", \"/organizations/\" + id + \"/license\", data, true, false);\n }\n\n async importDirectory(organizationId: string, request: ImportDirectoryRequest): Promise {\n return this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/import\",\n request,\n true,\n false\n );\n }\n\n async getOrCreateApiKey(id: string, request: OrganizationApiKeyRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/api-key\",\n request,\n true,\n true\n );\n return new ApiKeyResponse(r);\n }\n\n async getApiKeyInformation(\n id: string,\n organizationApiKeyType: OrganizationApiKeyType = null\n ): Promise> {\n const uri =\n organizationApiKeyType === null\n ? \"/organizations/\" + id + \"/api-key-information\"\n : \"/organizations/\" + id + \"/api-key-information/\" + organizationApiKeyType;\n const r = await this.apiService.send(\"GET\", uri, null, true, true);\n return new ListResponse(r, OrganizationApiKeyInformationResponse);\n }\n\n async rotateApiKey(id: string, request: OrganizationApiKeyRequest): Promise {\n const r = await this.apiService.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 getTaxInfo(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/organizations/\" + id + \"/tax\", null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async updateTaxInfo(id: string, request: OrganizationTaxInfoUpdateRequest): Promise {\n // Can't broadcast anything because the response doesn't have content\n return this.apiService.send(\"PUT\", \"/organizations/\" + id + \"/tax\", request, true, false);\n }\n\n async getKeys(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/organizations/\" + id + \"/keys\", null, true, true);\n return new OrganizationKeysResponse(r);\n }\n\n async updateKeys(\n id: string,\n request: OrganizationKeysRequest\n ): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/keys\",\n request,\n true,\n true\n );\n // Not broadcasting anything because data on this response doesn't correspond to `Organization`\n return new OrganizationKeysResponse(r);\n }\n\n async getSso(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/organizations/\" + id + \"/sso\", null, true, true);\n return new OrganizationSsoResponse(r);\n }\n\n async updateSso(id: string, request: OrganizationSsoRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/sso\",\n request,\n true,\n true\n );\n // Not broadcasting anything because data on this response doesn't correspond to `Organization`\n return new OrganizationSsoResponse(r);\n }\n}\n","import { Subject } from \"rxjs\";\n\nimport { SyncNotifierService as SyncNotifierServiceAbstraction } from \"../../abstractions/sync/syncNotifier.service.abstraction\";\nimport { SyncEventArgs } from \"../../types/syncEventArgs\";\n\n/**\n * This class should most likely have 0 dependencies because it will hopefully\n * be rolled into SyncService once upon a time.\n */\nexport class SyncNotifierService implements SyncNotifierServiceAbstraction {\n private _sync = new Subject();\n\n sync$ = this._sync.asObservable();\n\n next(event: SyncEventArgs): void {\n this._sync.next(event);\n }\n}\n","import { Observable } from \"rxjs\";\n\nimport { ServerConfig } from \"./server-config\";\n\nexport abstract class ConfigServiceAbstraction {\n serverConfig$: Observable;\n}\n","import { BehaviorSubject, concatMap, map, switchMap, timer, EMPTY } from \"rxjs\";\n\nimport { ConfigApiServiceAbstraction } from \"../../abstractions/config/config-api.service.abstraction\";\nimport { ConfigServiceAbstraction } from \"../../abstractions/config/config.service.abstraction\";\nimport { ServerConfig } from \"../../abstractions/config/server-config\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { ServerConfigData } from \"../../models/data/server-config.data\";\n\nexport class ConfigService implements ConfigServiceAbstraction {\n private _serverConfig = new BehaviorSubject(null);\n serverConfig$ = this._serverConfig.asObservable();\n\n constructor(\n private stateService: StateService,\n private configApiService: ConfigApiServiceAbstraction\n ) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n switchMap((unlocked) => {\n if (!unlocked) {\n this._serverConfig.next(null);\n return EMPTY;\n }\n\n // Re-fetch the server config every hour\n return timer(0, 3600 * 1000).pipe(map(() => unlocked));\n }),\n concatMap(async (unlocked) => {\n return unlocked ? await this.buildServerConfig() : null;\n })\n )\n .subscribe((serverConfig) => {\n this._serverConfig.next(serverConfig);\n });\n }\n\n private async buildServerConfig(): Promise {\n const data = await this.stateService.getServerConfig();\n const domain = data ? new ServerConfig(data) : null;\n\n if (domain == null || !domain.isValid() || domain.expiresSoon()) {\n const value = await this.fetchServerConfig();\n return value ?? domain;\n }\n\n return domain;\n }\n\n private async fetchServerConfig(): Promise {\n try {\n const response = await this.configApiService.get();\n\n if (response != null) {\n const data = new ServerConfigData(response);\n await this.stateService.setServerConfig(data);\n return new ServerConfig(data);\n }\n } catch {\n return null;\n }\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { ConfigApiServiceAbstraction as ConfigApiServiceAbstraction } from \"../../abstractions/config/config-api.service.abstraction\";\nimport { ServerConfigResponse } from \"../../models/response/server-config.response\";\n\nexport class ConfigApiService implements ConfigApiServiceAbstraction {\n constructor(private apiService: ApiService) {}\n\n async get(): Promise {\n const r = await this.apiService.send(\"GET\", \"/config\", null, true, true);\n return new ServerConfigResponse(r);\n }\n}\n","import { I18nService } from \"../abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { ValidationService as ValidationServiceAbstraction } from \"../abstractions/validation.service\";\nimport { ErrorResponse } from \"../models/response/error.response\";\n\nexport class ValidationService implements ValidationServiceAbstraction {\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 {\n AbstractStorageService,\n MemoryStorageServiceInterface,\n} from \"../abstractions/storage.service\";\n\nexport class MemoryStorageService\n extends AbstractStorageService\n implements MemoryStorageServiceInterface\n{\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 (await 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 { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { MessagingService } from \"@bitwarden/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 { AbstractStorageService } from \"@bitwarden/common/abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"@bitwarden/common/enums/htmlStorageLocation\";\nimport { StorageOptions } from \"@bitwarden/common/models/domain/storage-options\";\n\n@Injectable()\nexport class HtmlStorageService implements AbstractStorageService {\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 { CryptoService } from \"../abstractions/crypto.service\";\nimport { EncryptService } from \"../abstractions/encrypt.service\";\n\nexport class ContainerService {\n constructor(private cryptoService: CryptoService, private encryptService: EncryptService) {}\n\n attachToGlobal(global: any) {\n if (!global.bitwardenContainerService) {\n global.bitwardenContainerService = this;\n }\n }\n\n /**\n * @throws Will throw if CryptoService was not instantiated and provided to the ContainerService constructor\n */\n getCryptoService(): CryptoService {\n if (this.cryptoService == null) {\n throw new Error(\"ContainerService.cryptoService not initialized.\");\n }\n return this.cryptoService;\n }\n\n /**\n * @throws Will throw if EncryptService was not instantiated and provided to the ContainerService constructor\n */\n getEncryptService(): EncryptService {\n if (this.encryptService == null) {\n throw new Error(\"ContainerService.encryptService not initialized.\");\n }\n return this.encryptService;\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\n\nimport { WINDOW } from \"@bitwarden/angular/services/injection-tokens\";\nimport { AbstractThemingService } from \"@bitwarden/angular/services/theming/theming.service.abstraction\";\nimport { CryptoService as CryptoServiceAbstraction } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EncryptService } from \"@bitwarden/common/abstractions/encrypt.service\";\nimport {\n EnvironmentService as EnvironmentServiceAbstraction,\n Urls,\n} from \"@bitwarden/common/abstractions/environment.service\";\nimport { EventUploadService as EventUploadServiceAbstraction } from \"@bitwarden/common/abstractions/event/event-upload.service\";\nimport { I18nService as I18nServiceAbstraction } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"@bitwarden/common/abstractions/notifications.service\";\nimport { StateService as StateServiceAbstraction } from \"@bitwarden/common/abstractions/state.service\";\nimport { TwoFactorService as TwoFactorServiceAbstraction } from \"@bitwarden/common/abstractions/twoFactor.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { ContainerService } from \"@bitwarden/common/services/container.service\";\nimport { EventUploadService } from \"@bitwarden/common/services/event/event-upload.service\";\nimport { VaultTimeoutService as VaultTimeoutService } from \"@bitwarden/common/services/vaultTimeout/vaultTimeout.service\";\n\nimport { I18nService } from \"./i18n.service\";\n\n@Injectable()\nexport class InitService {\n constructor(\n @Inject(WINDOW) private win: Window,\n private environmentService: EnvironmentServiceAbstraction,\n private notificationsService: NotificationsServiceAbstraction,\n private vaultTimeoutService: VaultTimeoutServiceAbstraction,\n private i18nService: I18nServiceAbstraction,\n private eventUploadService: EventUploadServiceAbstraction,\n private twoFactorService: TwoFactorServiceAbstraction,\n private stateService: StateServiceAbstraction,\n private cryptoService: CryptoServiceAbstraction,\n private themingService: AbstractThemingService,\n private encryptService: EncryptService\n ) {}\n\n init() {\n return async () => {\n await this.stateService.init();\n\n const urls = process.env.URLS as Urls;\n urls.base ??= this.win.location.origin;\n this.environmentService.setUrls(urls);\n\n setTimeout(() => this.notificationsService.init(), 3000);\n (this.vaultTimeoutService as VaultTimeoutService).init(true);\n const locale = await this.stateService.getLocale();\n await (this.i18nService as I18nService).init(locale);\n (this.eventUploadService as EventUploadService).init(true);\n this.twoFactorService.init();\n const htmlEl = this.win.document.documentElement;\n htmlEl.classList.add(\"locale_\" + this.i18nService.translationLocale);\n await this.themingService.monitorThemeChanges();\n const containerService = new ContainerService(this.cryptoService, this.encryptService);\n containerService.attachToGlobal(this.win);\n };\n }\n}\n","import { ApplicationRef, ComponentFactoryResolver, Injectable, Injector } from \"@angular/core\";\nimport * as jq from \"jquery\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalRef } from \"@bitwarden/angular/components/modal/modal.ref\";\nimport { ModalService as BaseModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { Utils } from \"@bitwarden/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 { Component } from \"@angular/core\";\n\nimport { PasswordRepromptComponent as BasePasswordRepromptComponent } from \"@bitwarden/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 { Injectable } from \"@angular/core\";\n\nimport { PasswordRepromptService as BasePasswordRepromptService } from \"@bitwarden/angular/services/passwordReprompt.service\";\n\nimport { PasswordRepromptComponent } from \"../components/password-reprompt.component\";\n\n@Injectable()\nexport class PasswordRepromptService extends BasePasswordRepromptService {\n component = PasswordRepromptComponent;\n}\n","import { FileDownloadRequest } from \"./fileDownloadRequest\";\n\nexport class FileDownloadBuilder {\n get blobOptions(): any {\n const options = this._request.blobOptions ?? {};\n if (options.type == null) {\n options.type = this.fileType;\n }\n return options;\n }\n\n get blob(): Blob {\n if (this.blobOptions != null) {\n return new Blob([this._request.blobData], this.blobOptions);\n } else {\n return new Blob([this._request.blobData]);\n }\n }\n\n get downloadMethod(): \"save\" | \"open\" {\n if (this._request.downloadMethod != null) {\n return this._request.downloadMethod;\n }\n return this.fileType != \"application/pdf\" ? \"save\" : \"open\";\n }\n\n private get fileType() {\n const fileNameLower = this._request.fileName.toLowerCase();\n if (fileNameLower.endsWith(\".pdf\")) {\n return \"application/pdf\";\n } else if (fileNameLower.endsWith(\".xlsx\")) {\n return \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n } else if (fileNameLower.endsWith(\".docx\")) {\n return \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\n } else if (fileNameLower.endsWith(\".pptx\")) {\n return \"application/vnd.openxmlformats-officedocument.presentationml.presentation\";\n } else if (fileNameLower.endsWith(\".csv\")) {\n return \"text/csv\";\n } else if (fileNameLower.endsWith(\".png\")) {\n return \"image/png\";\n } else if (fileNameLower.endsWith(\".jpg\") || fileNameLower.endsWith(\".jpeg\")) {\n return \"image/jpeg\";\n } else if (fileNameLower.endsWith(\".gif\")) {\n return \"image/gif\";\n }\n return null;\n }\n\n constructor(private readonly _request: FileDownloadRequest) {}\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { FileDownloadBuilder } from \"@bitwarden/common/abstractions/fileDownload/fileDownloadBuilder\";\nimport { FileDownloadRequest } from \"@bitwarden/common/abstractions/fileDownload/fileDownloadRequest\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Injectable()\nexport class WebFileDownloadService implements FileDownloadService {\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n download(request: FileDownloadRequest): void {\n const builder = new FileDownloadBuilder(request);\n const a = window.document.createElement(\"a\");\n if (builder.downloadMethod === \"save\") {\n a.download = request.fileName;\n } else if (!this.platformUtilsService.isSafari()) {\n a.target = \"_blank\";\n }\n a.href = URL.createObjectURL(builder.blob);\n a.style.position = \"fixed\";\n window.document.body.appendChild(a);\n a.click();\n window.document.body.removeChild(a);\n }\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","import { Injectable } from \"@angular/core\";\nimport Swal, { SweetAlertIcon } from \"sweetalert2\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ClientType } from \"@bitwarden/common/enums/clientType\";\nimport { DeviceType } from \"@bitwarden/common/enums/deviceType\";\n\n@Injectable()\nexport class WebPlatformUtilsService implements PlatformUtilsService {\n private browserCache: DeviceType = null;\n\n constructor(\n private i18nService: I18nService,\n private messagingService: MessagingService,\n private logService: LogService\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 getApplicationVersion(): Promise {\n return Promise.resolve(process.env.APPLICATION_VERSION || \"-\");\n }\n\n async getApplicationVersionNumber(): Promise {\n return (await this.getApplicationVersion()).split(RegExp(\"[+|-]\"))[0].trim();\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 target?: string\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 target: target != null ? target : \"body\",\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","import { CommonModule } from \"@angular/common\";\nimport { APP_INITIALIZER, NgModule, Optional, SkipSelf } from \"@angular/core\";\n\nimport {\n SECURE_STORAGE,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n LOCALES_DIRECTORY,\n SYSTEM_LANGUAGE,\n MEMORY_STORAGE,\n} from \"@bitwarden/angular/services/injection-tokens\";\nimport { JslibServicesModule } from \"@bitwarden/angular/services/jslib-services.module\";\nimport { ModalService as ModalServiceAbstraction } from \"@bitwarden/angular/services/modal.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService as I18nServiceAbstraction } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LoginService as LoginServiceAbstraction } from \"@bitwarden/common/abstractions/login.service\";\nimport { MessagingService as MessagingServiceAbstraction } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService as BaseStateServiceAbstraction } from \"@bitwarden/common/abstractions/state.service\";\nimport { StateMigrationService as StateMigrationServiceAbstraction } from \"@bitwarden/common/abstractions/stateMigration.service\";\nimport { AbstractStorageService } from \"@bitwarden/common/abstractions/storage.service\";\nimport { StateFactory } from \"@bitwarden/common/factories/stateFactory\";\nimport { LoginService } from \"@bitwarden/common/services/login.service\";\nimport { MemoryStorageService } from \"@bitwarden/common/services/memoryStorage.service\";\n\nimport { BroadcasterMessagingService } from \"./broadcaster-messaging.service\";\nimport { EventService } from \"./event.service\";\nimport { HtmlStorageService } from \"./html-storage.service\";\nimport { I18nService } from \"./i18n.service\";\nimport { InitService } from \"./init.service\";\nimport { ModalService } from \"./modal.service\";\nimport { PasswordRepromptService } from \"./password-reprompt.service\";\nimport { PolicyListService } from \"./policy-list.service\";\nimport { RouterService } from \"./router.service\";\nimport { Account, GlobalState, StateService } from \"./state\";\nimport { StateMigrationService } from \"./state-migration.service\";\nimport { WebFileDownloadService } from \"./web-file-download.service\";\nimport { WebPlatformUtilsService } from \"./web-platform-utils.service\";\n\n@NgModule({\n declarations: [],\n imports: [CommonModule, JslibServicesModule],\n providers: [\n InitService,\n RouterService,\n EventService,\n PolicyListService,\n {\n provide: APP_INITIALIZER,\n useFactory: (initService: InitService) => initService.init(),\n deps: [InitService],\n multi: true,\n },\n {\n provide: STATE_FACTORY,\n useValue: new StateFactory(GlobalState, Account),\n },\n {\n provide: STATE_SERVICE_USE_CACHE,\n useValue: false,\n },\n {\n provide: I18nServiceAbstraction,\n useClass: I18nService,\n deps: [SYSTEM_LANGUAGE, LOCALES_DIRECTORY],\n },\n { provide: AbstractStorageService, 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: MEMORY_STORAGE,\n useClass: MemoryStorageService,\n },\n {\n provide: PlatformUtilsServiceAbstraction,\n useClass: WebPlatformUtilsService,\n },\n { provide: MessagingServiceAbstraction, useClass: BroadcasterMessagingService },\n { provide: ModalServiceAbstraction, useClass: ModalService },\n {\n provide: StateMigrationServiceAbstraction,\n useClass: StateMigrationService,\n deps: [AbstractStorageService, SECURE_STORAGE, STATE_FACTORY],\n },\n StateService,\n {\n provide: BaseStateServiceAbstraction,\n useExisting: StateService,\n },\n {\n provide: PasswordRepromptServiceAbstraction,\n useClass: PasswordRepromptService,\n },\n {\n provide: FileDownloadService,\n useClass: WebFileDownloadService,\n },\n {\n provide: LoginServiceAbstraction,\n useClass: LoginService,\n deps: [StateService],\n },\n ],\n})\nexport class CoreModule {\n constructor(@Optional() @SkipSelf() parentModule?: CoreModule) {\n if (parentModule) {\n throw new Error(\"CoreModule is already loaded. Import it in the AppModule only\");\n }\n }\n}\n","import { ThemeType } from \"@bitwarden/common/enums/themeType\";\nimport { GlobalState as BaseGlobalState } from \"@bitwarden/common/models/domain/global-state\";\n\nexport class GlobalState extends BaseGlobalState {\n theme?: ThemeType = ThemeType.Light;\n rememberEmail = true;\n}\n","import { I18nService as BaseI18nService } from \"@bitwarden/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 \"ar\",\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 \"eu\",\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 { Observable, ReplaySubject } from \"rxjs\";\n\nimport { I18nService as I18nServiceAbstraction } from \"../abstractions/i18n.service\";\n\nexport class I18nService implements I18nServiceAbstraction {\n private _locale = new ReplaySubject(1);\n locale$: Observable = this._locale.asObservable();\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 [\"ar\", \"العربية الفصحى\"],\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 [\"eu\", \"euskara\"],\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.translationLocale = locale != null ? locale : this.systemLanguage;\n this._locale.next(this.translationLocale);\n\n try {\n this.collator = new Intl.Collator(this.translationLocale, {\n numeric: true,\n sensitivity: \"base\",\n });\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 | number, p2?: string | number, p3?: string | number): 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.toString());\n }\n if (p2 != null) {\n result = result.split(\"__$2__\").join(p2.toString());\n }\n if (p3 != null) {\n result = result.split(\"__$3__\").join(p3.toString());\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 { StateMigrationService as BaseStateMigrationService } from \"@bitwarden/common/services/stateMigration.service\";\n\nimport { Account } from \"./state/account\";\nimport { GlobalState } from \"./state/global-state\";\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 { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { LoginWithDeviceComponent } from \"./login-with-device.component\";\nimport { LoginComponent } from \"./login.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [LoginComponent, LoginWithDeviceComponent],\n exports: [LoginComponent, LoginWithDeviceComponent],\n})\nexport class LoginModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../shared\";\n\nimport { VerticalStepContentComponent } from \"./vertical-step-content.component\";\nimport { VerticalStep } from \"./vertical-step.component\";\nimport { VerticalStepperComponent } from \"./vertical-stepper.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [VerticalStepperComponent, VerticalStep, VerticalStepContentComponent],\n exports: [VerticalStepperComponent, VerticalStep],\n})\nexport class VerticalStepperModule {}\n","import { CdkStepperModule } from \"@angular/cdk/stepper\";\nimport { TitleCasePipe } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { FormFieldModule } from \"@bitwarden/components\";\n\nimport { OrganizationCreateModule } from \"../../organizations/create/organization-create.module\";\nimport { LooseComponentsModule, SharedModule } from \"../../shared\";\nimport { RegisterFormModule } from \"../register-form/register-form.module\";\n\nimport { BillingComponent } from \"./billing.component\";\nimport { ConfirmationDetailsComponent } from \"./confirmation-details.component\";\nimport { AbmEnterpriseContentComponent } from \"./content/abm-enterprise-content.component\";\nimport { AbmTeamsContentComponent } from \"./content/abm-teams-content.component\";\nimport { CnetEnterpriseContentComponent } from \"./content/cnet-enterprise-content.component\";\nimport { CnetIndividualContentComponent } from \"./content/cnet-individual-content.component\";\nimport { CnetTeamsContentComponent } from \"./content/cnet-teams-content.component\";\nimport { DefaultContentComponent } from \"./content/default-content.component\";\nimport { EnterpriseContentComponent } from \"./content/enterprise-content.component\";\nimport { Enterprise1ContentComponent } from \"./content/enterprise1-content.component\";\nimport { Enterprise2ContentComponent } from \"./content/enterprise2-content.component\";\nimport { LogoCnetComponent } from \"./content/logo-cnet.component\";\nimport { LogoForbesComponent } from \"./content/logo-forbes.component\";\nimport { LogoUSNewsComponent } from \"./content/logo-us-news.component\";\nimport { TeamsContentComponent } from \"./content/teams-content.component\";\nimport { Teams1ContentComponent } from \"./content/teams1-content.component\";\nimport { Teams2ContentComponent } from \"./content/teams2-content.component\";\nimport { TrialInitiationComponent } from \"./trial-initiation.component\";\nimport { VerticalStepperModule } from \"./vertical-stepper/vertical-stepper.module\";\n\n@NgModule({\n imports: [\n SharedModule,\n CdkStepperModule,\n VerticalStepperModule,\n FormFieldModule,\n RegisterFormModule,\n OrganizationCreateModule,\n LooseComponentsModule,\n ],\n declarations: [\n TrialInitiationComponent,\n EnterpriseContentComponent,\n TeamsContentComponent,\n ConfirmationDetailsComponent,\n BillingComponent,\n DefaultContentComponent,\n EnterpriseContentComponent,\n Enterprise1ContentComponent,\n Enterprise2ContentComponent,\n TeamsContentComponent,\n Teams1ContentComponent,\n Teams2ContentComponent,\n CnetEnterpriseContentComponent,\n CnetIndividualContentComponent,\n CnetTeamsContentComponent,\n AbmEnterpriseContentComponent,\n AbmTeamsContentComponent,\n LogoCnetComponent,\n LogoForbesComponent,\n LogoUSNewsComponent,\n ],\n exports: [TrialInitiationComponent],\n providers: [TitleCasePipe],\n})\nexport class TrialInitiationModule {}\n","import { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { EntityUsersComponent } from \"./entity-users.component\";\n\n@NgModule({\n imports: [SharedModule, ScrollingModule],\n declarations: [EntityUsersComponent],\n exports: [EntityUsersComponent],\n})\nexport class OrganizationManageModule {}\n","import { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { NgModule } from \"@angular/core\";\n\nimport { LooseComponentsModule, SharedModule } from \"../../shared\";\n\nimport { EnrollMasterPasswordReset } from \"./enroll-master-password-reset.component\";\n\n@NgModule({\n imports: [SharedModule, ScrollingModule, LooseComponentsModule],\n declarations: [EnrollMasterPasswordReset],\n exports: [EnrollMasterPasswordReset],\n})\nexport class OrganizationUserModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { LoginModule } from \"./accounts/login/login.module\";\nimport { TrialInitiationModule } from \"./accounts/trial-initiation/trial-initiation.module\";\nimport { OrganizationCreateModule } from \"./organizations/create/organization-create.module\";\nimport { OrganizationManageModule } from \"./organizations/manage/organization-manage.module\";\nimport { OrganizationUserModule } from \"./organizations/users/organization-user.module\";\nimport { LooseComponentsModule, SharedModule } from \"./shared\";\nimport { OrganizationBadgeModule } from \"./vault/organization-badge/organization-badge.module\";\nimport { VaultFilterModule } from \"./vault/vault-filter/vault-filter.module\";\n\n@NgModule({\n imports: [\n SharedModule,\n LooseComponentsModule,\n TrialInitiationModule,\n VaultFilterModule,\n OrganizationBadgeModule,\n OrganizationManageModule,\n OrganizationUserModule,\n OrganizationCreateModule,\n LoginModule,\n ],\n exports: [\n SharedModule,\n LooseComponentsModule,\n TrialInitiationModule,\n VaultFilterModule,\n OrganizationBadgeModule,\n LoginModule,\n ],\n bootstrap: [],\n})\nexport class OssModule {}\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","export class ProviderAddOrganizationRequest {\n organizationId: string;\n key: string;\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { ProviderAddOrganizationRequest } from \"@bitwarden/common/models/request/provider/provider-add-organization.request\";\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","
\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, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { Provider } from \"@bitwarden/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","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router } from \"@angular/router\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\n\n@Injectable()\nexport class ProviderPermissionsGuard implements CanActivate {\n constructor(\n private providerService: ProviderService,\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const provider = await this.providerService.get(route.params.providerId);\n if (provider == null) {\n return this.router.createUrlTree([\"/\"]);\n }\n\n if (!provider.isProviderAdmin && !provider.enabled) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"providerIsDisabled\"));\n return this.router.createUrlTree([\"/\"]);\n }\n\n const permissionsCallback: (provider: Provider) => boolean = route.data?.providerPermissions;\n const hasSpecifiedPermissions = permissionsCallback == null || permissionsCallback(provider);\n\n if (!hasSpecifiedPermissions) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"accessDenied\"));\n return this.router.createUrlTree([\"/providers\", provider.id]);\n }\n\n return true;\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","import { Component, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\n\n@Component({\n selector: \"app-providers\",\n templateUrl: \"providers.component.html\",\n})\nexport class ProvidersComponent implements OnInit {\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

{{ \"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 {{ \"name\" | i18n }}\n {{ \"numberOfUsers\" | i18n }}\n {{ \"billingPlan\" | i18n }}\n \n \n \n \n \n \n \n \n \n {{ o.organizationName }}\n \n \n {{ o.userCount }}\n / {{ o.seats }}\n \n \n {{ o.plan }}\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 \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { PlanType } from \"@bitwarden/common/enums/planType\";\nimport { ProviderUserType } from \"@bitwarden/common/enums/providerUserType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { ProviderOrganizationOrganizationDetailsResponse } from \"@bitwarden/common/models/response/provider/provider-organization.response\";\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})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class ClientsComponent implements OnInit {\n @ViewChild(\"add\", { read: ViewContainerRef, static: true }) addModalRef: ViewContainerRef;\n\n providerId: string;\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 private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n\n await this.load();\n\n /* eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe */\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.organizationApiService.get(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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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","import { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { OrganizationPlansComponent } from \"@bitwarden/web-vault/app/settings/organization-plans.component\";\n\n@Component({\n selector: \"app-create-organization\",\n templateUrl: \"create-organization.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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","export class ProviderUserAcceptRequest {\n token: string;\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 } from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { ProviderUserAcceptRequest } from \"@bitwarden/common/models/request/provider/provider-user-accept.request\";\nimport { BaseAcceptComponent } from \"@bitwarden/web-vault/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: Params) {\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: Params) {\n this.providerName = qParams.providerName;\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, Router } from \"@angular/router\";\n\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { ExportService } from \"@bitwarden/common/abstractions/export.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { EventResponse } from \"@bitwarden/common/models/response/event.response\";\nimport { BaseEventsComponent } from \"@bitwarden/web-vault/app/common/base.events.component\";\nimport { EventService } from \"@bitwarden/web-vault/app/core\";\n\n@Component({\n selector: \"provider-events\",\n templateUrl: \"events.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 fileDownloadService: FileDownloadService\n ) {\n super(\n eventService,\n i18nService,\n exportService,\n platformUtilsService,\n logService,\n fileDownloadService\n );\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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 if (r.installationId != null) {\n return `Installation: ${r.installationId}`;\n }\n\n if (userId != null && this.providerUsersUserIdMap.has(userId)) {\n return this.providerUsersUserIdMap.get(userId);\n }\n\n return null;\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 } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\n\n@Component({\n selector: \"provider-manage\",\n templateUrl: \"manage.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class ManageComponent implements OnInit {\n provider: Provider;\n accessEvents = false;\n\n constructor(private route: ActivatedRoute, private providerService: ProviderService) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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","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","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","import { Component, Input } from \"@angular/core\";\n\nimport { ProviderUserStatusType } from \"@bitwarden/common/enums/providerUserStatusType\";\nimport { ProviderUserBulkConfirmRequest } from \"@bitwarden/common/models/request/provider/provider-user-bulk-confirm.request\";\nimport { ProviderUserBulkRequest } from \"@bitwarden/common/models/request/provider/provider-user-bulk.request\";\nimport { BulkConfirmComponent as OrganizationBulkConfirmComponent } from \"@bitwarden/web-vault/app/organizations/manage/bulk/bulk-confirm.component\";\nimport { BulkUserDetails } from \"@bitwarden/web-vault/app/organizations/manage/bulk/bulk-status.component\";\n\n@Component({\n templateUrl:\n \"../../../../../../../apps/web/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","import { Component, Input } from \"@angular/core\";\n\nimport { ProviderUserBulkRequest } from \"@bitwarden/common/models/request/provider/provider-user-bulk.request\";\nimport { BulkRemoveComponent as OrganizationBulkRemoveComponent } from \"@bitwarden/web-vault/app/organizations/manage/bulk/bulk-remove.component\";\n\n@Component({\n templateUrl:\n \"../../../../../../../apps/web/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 protected get removeUsersWarning() {\n return this.i18nService.t(\"removeUsersWarning\");\n }\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","
\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, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderUserType } from \"@bitwarden/common/enums/providerUserType\";\nimport { PermissionsApi } from \"@bitwarden/common/models/api/permissions.api\";\nimport { ProviderUserInviteRequest } from \"@bitwarden/common/models/request/provider/provider-user-invite.request\";\nimport { ProviderUserUpdateRequest } from \"@bitwarden/common/models/request/provider/provider-user-update.request\";\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

{{ \"people\" | i18n }}

\n
\n
\n \n {{ \"all\" | i18n }}\n {{ allCount }}\n \n \n {{ \"invited\" | i18n }}\n {{ invitedCount }}\n \n \n {{ \"accepted\" | i18n }}\n {{ acceptedCount }}\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 {{ 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 \n \n
\n \n \n \n
\n \n \n {{ \"resendInvitation\" | i18n }}\n \n \n \n {{ \"confirm\" | 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, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { ProviderUserStatusType } from \"@bitwarden/common/enums/providerUserStatusType\";\nimport { ProviderUserType } from \"@bitwarden/common/enums/providerUserType\";\nimport { ProviderUserBulkRequest } from \"@bitwarden/common/models/request/provider/provider-user-bulk.request\";\nimport { ProviderUserConfirmRequest } from \"@bitwarden/common/models/request/provider/provider-user-confirm.request\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { ProviderUserBulkResponse } from \"@bitwarden/common/models/response/provider/provider-user-bulk.response\";\nimport { ProviderUserUserDetailsResponse } from \"@bitwarden/common/models/response/provider/provider-user.response\";\nimport { BasePeopleComponent } from \"@bitwarden/web-vault/app/common/base.people.component\";\nimport { BulkStatusComponent } from \"@bitwarden/web-vault/app/organizations/manage/bulk/bulk-status.component\";\nimport { EntityEventsComponent } from \"@bitwarden/web-vault/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})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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 /* eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe */\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 revokeUser(id: string): Promise {\n // Not implemented.\n return null;\n }\n\n restoreUser(id: string): Promise {\n // Not implemented.\n return null;\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
\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 { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\n\n@Component({\n selector: \"providers-layout\",\n templateUrl: \"providers-layout.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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","export class ProviderUpdateRequest {\n name: string;\n businessName: string;\n billingEmail: string;\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 { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { ProviderUpdateRequest } from \"@bitwarden/common/models/request/provider/provider-update.request\";\nimport { ProviderResponse } from \"@bitwarden/common/models/response/provider/provider.response\";\n\n@Component({\n selector: \"provider-account\",\n templateUrl: \"account.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\n\n@Component({\n selector: \"provider-settings\",\n templateUrl: \"settings.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class SettingsComponent {\n constructor(private route: ActivatedRoute, private providerService: ProviderService) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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","
\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 {{ \"logIn\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { Params } from \"@angular/router\";\n\nimport { BaseAcceptComponent } from \"@bitwarden/web-vault/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: Params) {\n this.router.navigate([\"/providers/setup\"], { queryParams: qParams });\n }\n\n async unauthedHandler(qParams: Params) {\n // Empty\n }\n}\n","export class ProviderSetupRequest {\n name: string;\n businessName: string;\n billingEmail: string;\n token: string;\n key: string;\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","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { ProviderSetupRequest } from \"@bitwarden/common/models/request/provider/provider-setup.request\";\n\n@Component({\n selector: \"provider-setup\",\n templateUrl: \"setup.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\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 // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"@bitwarden/angular/guards/auth.guard\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\nimport { FrontendLayoutComponent } from \"@bitwarden/web-vault/app/layouts/frontend-layout.component\";\nimport { ProvidersComponent } from \"@bitwarden/web-vault/app/providers/providers.component\";\n\nimport { ClientsComponent } from \"./clients/clients.component\";\nimport { CreateOrganizationComponent } from \"./clients/create-organization.component\";\nimport { ProviderPermissionsGuard } from \"./guards/provider-permissions.guard\";\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 { 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: [AuthGuard],\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: [AuthGuard],\n children: [\n {\n path: \"setup\",\n component: SetupComponent,\n },\n {\n path: \":providerId\",\n component: ProvidersLayoutComponent,\n canActivate: [ProviderPermissionsGuard],\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: [ProviderPermissionsGuard],\n data: {\n titleId: \"people\",\n providerPermissions: (provider: Provider) => provider.canManageUsers,\n },\n },\n {\n path: \"events\",\n component: EventsComponent,\n canActivate: [ProviderPermissionsGuard],\n data: {\n titleId: \"eventLogs\",\n providerPermissions: (provider: Provider) => provider.canAccessEventLogs,\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: [ProviderPermissionsGuard],\n data: {\n titleId: \"myProvider\",\n providerPermissions: (provider: Provider) => provider.isProviderAdmin,\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 \"@bitwarden/angular/jslib.module\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { OssModule } from \"@bitwarden/web-vault/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 { ProviderPermissionsGuard } from \"./guards/provider-permissions.guard\";\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 { 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, ProviderPermissionsGuard],\n})\nexport class ProvidersModule {\n constructor(modalService: ModalService, componentFactoryResolver: ComponentFactoryResolver) {\n modalService.registerComponentFactoryResolver(\n AddOrganizationComponent,\n componentFactoryResolver\n );\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { ProvidersModule } from \"./providers/providers.module\";\n\nconst routes: Routes = [\n {\n path: \"providers\",\n loadChildren: () => ProvidersModule,\n },\n {\n path: \"sm\",\n loadChildren: async () =>\n (await import(\"./secrets-manager/secrets-manager.module\")).SecretsManagerModule,\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class AppRoutingModule {}\n","import { DOCUMENT } from \"@angular/common\";\nimport { Component, Inject, 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 { Subject, takeUntil } from \"rxjs\";\nimport Swal from \"sweetalert2\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EventUploadService } from \"@bitwarden/common/abstractions/event/event-upload.service\";\nimport { InternalFolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { NotificationsService } from \"@bitwarden/common/abstractions/notifications.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { InternalPolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { SettingsService } from \"@bitwarden/common/abstractions/settings.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { VaultTimeoutService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\n\nimport { PolicyListService, RouterService } from \"./core\";\nimport {\n DisableSendPolicy,\n MasterPasswordPolicy,\n PasswordGeneratorPolicy,\n PersonalOwnershipPolicy,\n RequireSsoPolicy,\n ResetPasswordPolicy,\n SendOptionsPolicy,\n SingleOrgPolicy,\n TwoFactorAuthenticationPolicy,\n} from \"./organizations/policies\";\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 private destroy$ = new Subject();\n\n constructor(\n @Inject(DOCUMENT) private document: Document,\n private broadcasterService: BroadcasterService,\n private folderService: InternalFolderService,\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 eventUploadService: EventUploadService,\n private policyService: InternalPolicyService,\n protected policyListService: PolicyListService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n ngOnInit() {\n this.i18nService.locale$.pipe(takeUntil(this.destroy$)).subscribe((locale) => {\n this.document.documentElement.lang = locale;\n });\n\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 this.notificationsService.updateConnection(false);\n break;\n case \"loggedOut\":\n this.routerService.setPreviousUrl(null);\n this.notificationsService.updateConnection(false);\n break;\n case \"unlocked\":\n this.notificationsService.updateConnection(false);\n break;\n case \"authBlocked\":\n this.routerService.setPreviousUrl(message.url);\n this.router.navigate([\"/\"]);\n break;\n case \"logout\":\n this.logOut(!!message.expired, message.redirect);\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 this.routerService.setPreviousUrl(message.url);\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(\"upgrade\"),\n this.i18nService.t(\"cancel\")\n );\n if (premiumConfirmed) {\n this.router.navigate([\"settings/subscription/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.pipe(takeUntil(this.destroy$)).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 ResetPasswordPolicy(),\n new PasswordGeneratorPolicy(),\n new SingleOrgPolicy(),\n new RequireSsoPolicy(),\n new PersonalOwnershipPolicy(),\n new DisableSendPolicy(),\n new SendOptionsPolicy(),\n ]);\n\n this.setFullWidth();\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async logOut(expired: boolean, redirect = true) {\n await this.eventUploadService.uploadEvents();\n const userId = await this.stateService.getUserId();\n await Promise.all([\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 if (redirect) {\n this.router.navigate([\"/\"]);\n }\n });\n }\n\n private async recordActivity() {\n const now = new Date().getTime();\n if (this.lastActivity != null && now - this.lastActivity < 250) {\n return;\n }\n\n this.lastActivity = now;\n this.stateService.setLastActive(now);\n // Idle states\n if (this.isIdle) {\n this.isIdle = false;\n this.idleStateChanged();\n }\n if (this.idleTimer != null) {\n window.clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n this.idleTimer = window.setTimeout(() => {\n if (!this.isIdle) {\n this.isIdle = true;\n this.idleStateChanged();\n }\n }, IdleTimeout);\n }\n\n private showToast(msg: any) {\n let message = \"\";\n\n const options: Partial = {};\n\n if (typeof msg.text === \"string\") {\n message = msg.text;\n } else if (msg.text.length === 1) {\n message = msg.text[0];\n } else {\n msg.text.forEach(\n (t: string) =>\n (message += \"

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

\")\n );\n options.enableHtml = true;\n }\n if (msg.options != null) {\n if (msg.options.trustedHtml === true) {\n options.enableHtml = true;\n }\n if (msg.options.timeout != null && msg.options.timeout > 0) {\n options.timeOut = msg.options.timeout;\n }\n }\n\n this.toastrService.show(message, msg.title, options, \"toast-\" + msg.type);\n }\n\n private idleStateChanged() {\n if (this.isIdle) {\n this.notificationsService.disconnectFromInactivity();\n } else {\n this.notificationsService.reconnectFromActivity();\n }\n }\n\n private async setFullWidth() {\n const enableFullWidth = await this.stateService.getEnableFullWidth();\n if (enableFullWidth) {\n document.body.classList.add(\"full-width\");\n } else {\n document.body.classList.remove(\"full-width\");\n }\n }\n}\n","\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport {\n BasePolicy,\n BasePolicyComponent,\n} from \"@bitwarden/web-vault/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 { UntypedFormBuilder } from \"@angular/forms\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { PolicyRequest } from \"@bitwarden/common/models/request/policy.request\";\nimport {\n BasePolicy,\n BasePolicyComponent,\n} from \"@bitwarden/web-vault/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: UntypedFormBuilder, 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 } from \"@angular/core\";\n\nimport { AppComponent as BaseAppComponent } from \"@bitwarden/web-vault/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: \"../../../../apps/web/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","import { ScimProviderType } from \"../../enums/scimProviderType\";\nimport { BaseResponse } from \"../response/base.response\";\n\nexport class ScimConfigApi extends BaseResponse {\n enabled: boolean;\n scimProvider: ScimProviderType;\n\n constructor(data: any) {\n super(data);\n if (data == null) {\n return;\n }\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.scimProvider = this.getResponseProperty(\"ScimProvider\");\n }\n}\n","import { ScimProviderType } from \"../../enums/scimProviderType\";\n\nexport class ScimConfigRequest {\n constructor(private enabled: boolean, private scimProvider: ScimProviderType = null) {}\n}\n","
\n

{{ \"scim\" | i18n }}

\n
\n\n

{{ \"scimDescription\" | i18n }}

\n\n
\n \n {{ \"loading\" | i18n }}\n
\n\n
\n
\n \n \n
\n {{ \"scimEnabledCheckboxDescHelpText\" | i18n }}\n
\n
\n
\n\n \n {{ \"scimUrl\" | i18n }}\n \n \n \n\n \n {{ \"scimApiKey\" | i18n }}\n \n \n \n \n \n \n \n \n \n {{ \"scimApiKeyHelperText\" | i18n }}\n \n\n \n {{ \"save\" | i18n }}\n \n\n","import { Component, OnInit } from \"@angular/core\";\nimport { UntypedFormBuilder, FormControl } from \"@angular/forms\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { OrganizationApiKeyType } from \"@bitwarden/common/enums/organizationApiKeyType\";\nimport { OrganizationConnectionType } from \"@bitwarden/common/enums/organizationConnectionType\";\nimport { ScimConfigApi } from \"@bitwarden/common/models/api/scim-config.api\";\nimport { OrganizationApiKeyRequest } from \"@bitwarden/common/models/request/organization-api-key.request\";\nimport { OrganizationConnectionRequest } from \"@bitwarden/common/models/request/organization-connection.request\";\nimport { ScimConfigRequest } from \"@bitwarden/common/models/request/scim-config.request\";\nimport { ApiKeyResponse } from \"@bitwarden/common/models/response/api-key.response\";\nimport { OrganizationConnectionResponse } from \"@bitwarden/common/models/response/organization-connection.response\";\n\n@Component({\n selector: \"app-org-manage-scim\",\n templateUrl: \"scim.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class ScimComponent implements OnInit {\n loading = true;\n organizationId: string;\n existingConnectionId: string;\n formPromise: Promise>;\n rotatePromise: Promise;\n enabled = new FormControl(false);\n showScimSettings = false;\n showScimKey = false;\n\n formData = this.formBuilder.group({\n endpointUrl: new FormControl({ value: \"\", disabled: true }),\n clientSecret: new FormControl({ value: \"\", disabled: true }),\n });\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private route: ActivatedRoute,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private environmentService: EnvironmentService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\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 const connection = await this.apiService.getOrganizationConnection(\n this.organizationId,\n OrganizationConnectionType.Scim,\n ScimConfigApi\n );\n await this.setConnectionFormValues(connection);\n }\n\n async loadApiKey() {\n const apiKeyRequest = new OrganizationApiKeyRequest();\n apiKeyRequest.type = OrganizationApiKeyType.Scim;\n apiKeyRequest.masterPasswordHash = \"N/A\";\n const apiKeyResponse = await this.organizationApiService.getOrCreateApiKey(\n this.organizationId,\n apiKeyRequest\n );\n this.formData.setValue({\n endpointUrl: this.getScimEndpointUrl(),\n clientSecret: apiKeyResponse.apiKey,\n });\n }\n\n async copyScimUrl() {\n this.platformUtilsService.copyToClipboard(this.getScimEndpointUrl());\n }\n\n async rotateScimKey() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"rotateScimKeyWarning\"),\n this.i18nService.t(\"rotateScimKey\"),\n this.i18nService.t(\"rotateKey\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n const request = new OrganizationApiKeyRequest();\n request.type = OrganizationApiKeyType.Scim;\n request.masterPasswordHash = \"N/A\";\n\n this.rotatePromise = this.organizationApiService.rotateApiKey(this.organizationId, request);\n\n try {\n const response = await this.rotatePromise;\n this.formData.setValue({\n endpointUrl: this.getScimEndpointUrl(),\n clientSecret: response.apiKey,\n });\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"scimApiKeyRotated\"));\n } catch {\n // Logged by appApiAction, do nothing\n }\n\n this.rotatePromise = null;\n }\n\n async copyScimKey() {\n this.platformUtilsService.copyToClipboard(this.formData.get(\"clientSecret\").value);\n }\n\n async submit() {\n try {\n const request = new OrganizationConnectionRequest(\n this.organizationId,\n OrganizationConnectionType.Scim,\n true,\n new ScimConfigRequest(this.enabled.value)\n );\n if (this.existingConnectionId == null) {\n this.formPromise = this.apiService.createOrganizationConnection(request, ScimConfigApi);\n } else {\n this.formPromise = this.apiService.updateOrganizationConnection(\n request,\n ScimConfigApi,\n this.existingConnectionId\n );\n }\n const response = (await this.formPromise) as OrganizationConnectionResponse;\n await this.setConnectionFormValues(response);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"scimSettingsSaved\"));\n } catch (e) {\n // Logged by appApiAction, do nothing\n }\n\n this.formPromise = null;\n }\n\n getScimEndpointUrl() {\n return this.environmentService.getScimUrl() + \"/\" + this.organizationId;\n }\n\n toggleScimKey() {\n this.showScimKey = !this.showScimKey;\n document.getElementById(\"clientSecret\").focus();\n }\n\n private async setConnectionFormValues(connection: OrganizationConnectionResponse) {\n this.existingConnectionId = connection?.id;\n if (connection !== null && connection.config?.enabled) {\n this.showScimSettings = true;\n this.enabled.setValue(true);\n this.formData.setValue({\n endpointUrl: this.getScimEndpointUrl(),\n clientSecret: \"\",\n });\n await this.loadApiKey();\n } else {\n this.showScimSettings = false;\n this.enabled.setValue(false);\n }\n this.loading = false;\n }\n}\n","import { SsoConfigApi } from \"../../api/sso-config.api\";\n\nexport class OrganizationSsoRequest {\n enabled = false;\n identifier: string;\n data: SsoConfigApi;\n}\n","import {\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"../../enums/ssoEnums\";\nimport { SsoConfigApi } from \"../api/sso-config.api\";\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: string;\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 { 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, HostListener, Input } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Directive({\n selector: \"[appCopyClick]\",\n})\nexport class CopyClickDirective {\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n @Input(\"appCopyClick\") valueToCopy = \"\";\n\n @HostListener(\"click\") onClick() {\n this.platformUtilsService.copyToClipboard(this.valueToCopy);\n }\n}\n","import { Directive, HostListener, Input } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Directive({\n selector: \"[appLaunchClick]\",\n})\nexport class LaunchClickDirective {\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n @Input(\"appLaunchClick\") uriToLaunch = \"\";\n\n @HostListener(\"click\") onClick() {\n if (!Utils.isNullOrWhitespace(this.uriToLaunch)) {\n this.platformUtilsService.launchUri(this.uriToLaunch);\n }\n }\n}\n","import { Directive, Input, OnInit, Self } from \"@angular/core\";\nimport { ControlValueAccessor, UntypedFormControl, NgControl, Validators } from \"@angular/forms\";\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 this.controlDir.control.hasValidator(Validators.required);\n }\n\n @Input() label: string;\n @Input() controlId: string;\n @Input() helperText: string;\n\n internalControl = new UntypedFormControl(\"\");\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","
\n
\n \n \n
\n {{\n helperText\n }}\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

{{ \"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 {{ \"ssoIdentifier\" | i18n }}\n \n {{ \"ssoIdentifierHint\" | i18n }}\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 {{ \"keyConnectorUrl\" | i18n }}\n \n \n \n \n {{ \"keyConnectorTest\" | i18n }}\n \n \n \n \n \n {{ \"keyConnectorTestSuccess\" | i18n }}\n \n \n \n \n\n
\n\n \n {{ \"type\" | i18n }}\n \n \n
\n\n \n \n
\n

{{ \"openIdConnectConfig\" | i18n }}

\n\n \n {{ \"callbackPath\" | i18n }}\n \n \n \n\n \n {{ \"signedOutCallbackPath\" | i18n }}\n \n \n \n\n \n {{ \"authority\" | i18n }}\n \n \n\n \n {{ \"clientId\" | i18n }}\n \n \n\n \n {{ \"clientSecret\" | i18n }}\n \n \n\n \n {{ \"metadataAddress\" | i18n }}\n \n {{ \"openIdAuthorityRequired\" | i18n }}\n \n\n \n {{ \"oidcRedirectBehavior\" | i18n }}\n \n \n\n \n\n \n \n

\n {{ \"openIdOptionalCustomizations\" | i18n }}\n

\n \n \n \n
\n
\n \n {{ \"additionalScopes\" | i18n }}\n \n {{ \"separateMultipleWithComma\" | i18n }}\n \n\n \n {{ \"additionalUserIdClaimTypes\" | i18n }}\n \n {{ \"separateMultipleWithComma\" | i18n }}\n \n\n \n {{ \"additionalEmailClaimTypes\" | i18n }}\n \n {{ \"separateMultipleWithComma\" | i18n }}\n \n\n \n {{ \"additionalNameClaimTypes\" | i18n }}\n \n {{ \"separateMultipleWithComma\" | i18n }}\n \n\n \n {{ \"acrValues\" | i18n }}\n \n acr_values\n \n\n \n {{ \"expectedReturnAcrValue\" | i18n }}\n \n acr_validaton\n \n
\n \n \n\n \n
\n \n
\n

{{ \"samlSpConfig\" | i18n }}

\n\n \n {{ \"spEntityId\" | i18n }}\n \n \n \n\n \n {{ \"spMetadataUrl\" | i18n }}\n \n \n \n \n \n \n\n \n {{ \"spAcsUrl\" | i18n }}\n \n \n \n\n \n {{ \"spNameIdFormat\" | i18n }}\n \n \n\n \n {{ \"spOutboundSigningAlgorithm\" | i18n }}\n \n \n\n \n {{ \"spSigningBehavior\" | i18n }}\n \n \n\n \n {{ \"spMinIncomingSigningAlgorithm\" | i18n }}\n \n \n\n \n\n \n
\n\n \n
\n

{{ \"samlIdpConfig\" | i18n }}

\n\n \n {{ \"idpEntityId\" | i18n }}\n \n \n\n \n {{ \"idpBindingType\" | i18n }}\n \n \n\n \n {{ \"idpSingleSignOnServiceUrl\" | i18n }}\n \n {{ \"idpSingleSignOnServiceUrlRequired\" | i18n }}\n \n\n \n {{ \"idpSingleLogoutServiceUrl\" | i18n }}\n \n \n\n \n {{ \"idpX509PublicCert\" | i18n }}\n \n \n\n \n {{ \"idpOutboundSigningAlgorithm\" | i18n }}\n \n \n\n \n \n\n \n\n \n
\n
\n\n \n \n\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport {\n AbstractControl,\n FormBuilder,\n FormControl,\n UntypedFormGroup,\n Validators,\n} from \"@angular/forms\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { concatMap, Subject, takeUntil } from \"rxjs\";\n\nimport { SelectOptions } from \"@bitwarden/angular/interfaces/selectOptions\";\nimport { ControlsOf } from \"@bitwarden/angular/types/controls-of\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport {\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"@bitwarden/common/enums/ssoEnums\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { SsoConfigApi } from \"@bitwarden/common/models/api/sso-config.api\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { OrganizationSsoRequest } from \"@bitwarden/common/models/request/organization/organization-sso.request\";\nimport { OrganizationSsoResponse } from \"@bitwarden/common/models/response/organization/organization-sso.response\";\nimport { SsoConfigView } from \"@bitwarden/common/models/view/sso-config.view\";\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, OnDestroy {\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 ];\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 private destory$ = new Subject();\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 protected enabled = this.formBuilder.control(false);\n\n protected ssoIdentifier = this.formBuilder.control(\"\", {\n validators: [Validators.maxLength(50), Validators.required],\n });\n\n protected openIdForm = this.formBuilder.group>(\n {\n authority: new FormControl(\"\", Validators.required),\n clientId: new FormControl(\"\", Validators.required),\n clientSecret: new FormControl(\"\", Validators.required),\n metadataAddress: new FormControl(),\n redirectBehavior: new FormControl(\n OpenIdConnectRedirectBehavior.RedirectGet,\n Validators.required\n ),\n getClaimsFromUserInfoEndpoint: new FormControl(),\n additionalScopes: new FormControl(),\n additionalUserIdClaimTypes: new FormControl(),\n additionalEmailClaimTypes: new FormControl(),\n additionalNameClaimTypes: new FormControl(),\n acrValues: new FormControl(),\n expectedReturnAcrValue: new FormControl(),\n },\n {\n updateOn: \"blur\",\n }\n );\n\n protected samlForm = this.formBuilder.group>(\n {\n spNameIdFormat: new FormControl(Saml2NameIdFormat.NotConfigured),\n spOutboundSigningAlgorithm: new FormControl(defaultSigningAlgorithm),\n spSigningBehavior: new FormControl(Saml2SigningBehavior.IfIdpWantAuthnRequestsSigned),\n spMinIncomingSigningAlgorithm: new FormControl(defaultSigningAlgorithm),\n spWantAssertionsSigned: new FormControl(),\n spValidateCertificates: new FormControl(),\n\n idpEntityId: new FormControl(\"\", Validators.required),\n idpBindingType: new FormControl(Saml2BindingType.HttpRedirect),\n idpSingleSignOnServiceUrl: new FormControl(),\n idpSingleLogoutServiceUrl: new FormControl(),\n idpX509PublicCert: new FormControl(\"\", Validators.required),\n idpOutboundSigningAlgorithm: new FormControl(defaultSigningAlgorithm),\n idpAllowUnsolicitedAuthnResponse: new FormControl(),\n idpAllowOutboundLogoutRequests: new FormControl(true),\n idpWantAuthnRequestsSigned: new FormControl(),\n },\n {\n updateOn: \"blur\",\n }\n );\n\n protected ssoConfigForm = this.formBuilder.group>({\n configType: new FormControl(SsoType.None),\n keyConnectorEnabled: new FormControl(false),\n keyConnectorUrl: new FormControl(\"\"),\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 private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n this.ssoConfigForm\n .get(\"configType\")\n .valueChanges.pipe(takeUntil(this.destory$))\n .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.pipe(takeUntil(this.destory$))\n .subscribe(() => this.samlForm.get(\"idpX509PublicCert\").updateValueAndValidity());\n\n this.route.params\n .pipe(\n concatMap(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n }),\n takeUntil(this.destory$)\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destory$.next();\n this.destory$.complete();\n }\n\n async load() {\n this.organization = await this.organizationService.get(this.organizationId);\n const ssoSettings = await this.organizationApiService.getSso(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.value.keyConnectorEnabled) {\n this.haveTestedKeyConnector = false;\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.identifier = this.ssoIdentifier.value;\n request.data = SsoConfigApi.fromView(this.ssoConfigForm.getRawValue());\n\n this.formPromise = this.organizationApiService.updateSso(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: { message: this.i18nService.t(\"keyConnectorTestFail\") },\n });\n }\n\n this.haveTestedKeyConnector = true;\n }\n\n toggleOpenIdCustomizations() {\n this.showOpenIdCustomizations = !this.showOpenIdCustomizations;\n }\n\n getErrorCount(form: UntypedFormGroup): number {\n return Object.values(form.controls).reduce((acc: number, control: AbstractControl) => {\n if (control instanceof UntypedFormGroup) {\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: UntypedFormGroup) {\n Object.values(form.controls).forEach((control: AbstractControl) => {\n if (control.disabled) {\n return;\n }\n\n if (control instanceof UntypedFormGroup) {\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 this.ssoIdentifier.setValue(ssoSettings.identifier);\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","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"@bitwarden/angular/guards/auth.guard\";\nimport { canAccessSettingsTab } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { OrganizationPermissionsGuard } from \"@bitwarden/web-vault/app/organizations/guards/org-permissions.guard\";\nimport { OrganizationLayoutComponent } from \"@bitwarden/web-vault/app/organizations/layouts/organization-layout.component\";\nimport { SettingsComponent } from \"@bitwarden/web-vault/app/organizations/settings/settings.component\";\n\nimport { ScimComponent } from \"./manage/scim.component\";\nimport { SsoComponent } from \"./manage/sso.component\";\n\nconst routes: Routes = [\n {\n path: \"organizations/:organizationId\",\n component: OrganizationLayoutComponent,\n canActivate: [AuthGuard, OrganizationPermissionsGuard],\n children: [\n {\n path: \"settings\",\n component: SettingsComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: canAccessSettingsTab,\n },\n children: [\n {\n path: \"sso\",\n component: SsoComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: (org: Organization) => org.canManageSso,\n },\n },\n {\n path: \"scim\",\n component: ScimComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: (org: Organization) => org.canManageScim,\n },\n },\n ],\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class OrganizationsRoutingModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"@bitwarden/web-vault/app/shared/shared.module\";\n\nimport { InputCheckboxComponent } from \"./components/input-checkbox.component\";\nimport { ScimComponent } from \"./manage/scim.component\";\nimport { SsoComponent } from \"./manage/sso.component\";\nimport { OrganizationsRoutingModule } from \"./organizations-routing.module\";\n\n@NgModule({\n imports: [SharedModule, OrganizationsRoutingModule],\n declarations: [InputCheckboxComponent, SsoComponent, ScimComponent],\n})\nexport class OrganizationsModule {}\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { OverlayModule } from \"@angular/cdk/overlay\";\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 \"@bitwarden/angular/jslib.module\";\nimport { CoreModule } from \"@bitwarden/web-vault/app/core/core.module\";\nimport { OssRoutingModule } from \"@bitwarden/web-vault/app/oss-routing.module\";\nimport { OssModule } from \"@bitwarden/web-vault/app/oss.module\";\nimport { WildcardRoutingModule } from \"@bitwarden/web-vault/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 OverlayModule,\n OssModule,\n JslibModule,\n BrowserAnimationsModule,\n FormsModule,\n ReactiveFormsModule,\n CoreModule,\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(\"@bitwarden/web-vault/scss/styles.scss\");\nrequire(\"@bitwarden/web-vault/scss/tailwind.css\");\n\nimport { AppModule } from \"./app/app.module\";\n\nif (process.env.NODE_ENV === \"production\") {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, { preserveWhitespaces: true });\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 { Component, Input, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\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","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","
\n \n \n
\n","import { Component, Input, OnChanges } from \"@angular/core\";\n\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\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 RuPay: \"card-ru-pay\",\n Mir: \"card-mir\",\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","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, 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 \"@bitwarden/common/abstractions/log.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\n\n/**\n * Provides error handling, in particular for any error returned by the server in an api call.\n * Attach it to a
element and provide the name of the class property that will hold the api call promise.\n * e.g. \n * Any errors/rejections that occur will be intercepted and displayed as error toasts.\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 \"@bitwarden/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, 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, 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 { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable()\nexport class AuthGuard implements CanActivate {\n constructor(\n private authService: AuthService,\n private router: Router,\n private messagingService: MessagingService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n this.messagingService.send(\"authBlocked\", { url: routerState.url });\n return false;\n }\n\n if (authStatus === AuthenticationStatus.Locked) {\n if (routerState != null) {\n this.messagingService.send(\"lockedUrl\", { url: routerState.url });\n }\n return this.router.createUrlTree([\"lock\"], { queryParams: { promptBiometric: true } });\n }\n\n if (\n !routerState.url.includes(\"remove-password\") &&\n (await this.keyConnectorService.getConvertAccountRequired())\n ) {\n return this.router.createUrlTree([\"/remove-password\"]);\n }\n\n return true;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable()\nexport class LockGuard implements CanActivate {\n protected homepage = \"vault\";\n protected loginpage = \"login\";\n constructor(private authService: AuthService, private router: Router) {}\n\n async canActivate() {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.Locked) {\n return true;\n }\n\n const redirectUrl =\n authStatus === AuthenticationStatus.LoggedOut ? this.loginpage : this.homepage;\n\n return this.router.createUrlTree([redirectUrl]);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable()\nexport class UnauthGuard implements CanActivate {\n protected homepage = \"vault\";\n constructor(private authService: AuthService, private router: Router) {}\n\n async canActivate() {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n return true;\n }\n\n if (authStatus === AuthenticationStatus.Locked) {\n return this.router.createUrlTree([\"lock\"]);\n }\n\n return this.router.createUrlTree([this.homepage]);\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 { Pipe, PipeTransform } from \"@angular/core\";\n\ninterface CardRuleEntry {\n cardLength: number;\n blocks: number[];\n}\n\n// See https://baymard.com/checkout-usability/credit-card-patterns for\n// all possible credit card spacing patterns. For now, we just handle\n// the below.\nconst numberFormats: Record = {\n Visa: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n Mastercard: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n Maestro: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 13, blocks: [4, 4, 5] },\n { cardLength: 15, blocks: [4, 6, 5] },\n { cardLength: 19, blocks: [4, 4, 4, 4, 3] },\n ],\n Discover: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n \"Diners Club\": [{ cardLength: 14, blocks: [4, 6, 4] }],\n JCB: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n UnionPay: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 19, blocks: [6, 13] },\n ],\n Amex: [{ cardLength: 15, blocks: [4, 6, 5] }],\n Mir: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 17, blocks: [5, 4, 4, 4] },\n { cardLength: 18, blocks: [6, 4, 4, 4] },\n { cardLength: 19, blocks: [7, 4, 4, 4] },\n ],\n Other: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n};\n\n@Pipe({ name: \"creditCardNumber\" })\nexport class CreditCardNumberPipe implements PipeTransform {\n transform(creditCardNumber: string, brand: string): string {\n let rules = numberFormats[brand];\n\n if (rules == null) {\n rules = numberFormats[\"Other\"];\n }\n\n const cardLength = creditCardNumber.length;\n\n let matchingRule = rules.find((r) => r.cardLength == cardLength);\n if (matchingRule == null) {\n matchingRule = rules[0];\n }\n\n const blocks = matchingRule.blocks;\n\n const chunks: string[] = [];\n let total = 0;\n\n blocks.forEach((c) => {\n chunks.push(creditCardNumber.slice(total, total + c));\n total += c;\n });\n\n // Append the remaining part\n if (cardLength > total) {\n chunks.push(creditCardNumber.slice(total));\n }\n\n return chunks.join(\" \");\n }\n}\n","import { CommonModule, DatePipe } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\n\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 { BoxRowDirective } from \"./directives/box-row.directive\";\nimport { CopyClickDirective } from \"./directives/copy-click.directive\";\nimport { FallbackSrcDirective } from \"./directives/fallback-src.directive\";\nimport { InputStripSpacesDirective } from \"./directives/input-strip-spaces.directive\";\nimport { InputVerbatimDirective } from \"./directives/input-verbatim.directive\";\nimport { LaunchClickDirective } from \"./directives/launch-click.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 { CreditCardNumberPipe } from \"./pipes/credit-card-number.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\";\nimport { PasswordStrengthComponent } from \"./shared/components/password-strength/password-strength.component\";\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 AutofocusDirective,\n BoxRowDirective,\n CalloutComponent,\n CreditCardNumberPipe,\n EllipsisPipe,\n ExportScopeCalloutComponent,\n FallbackSrcDirective,\n I18nPipe,\n IconComponent,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n CopyClickDirective,\n LaunchClickDirective,\n UserNamePipe,\n PasswordStrengthComponent,\n ],\n exports: [\n A11yInvalidDirective,\n A11yTitleDirective,\n ApiActionDirective,\n AutofocusDirective,\n BitwardenToastModule,\n BoxRowDirective,\n CalloutComponent,\n CreditCardNumberPipe,\n EllipsisPipe,\n ExportScopeCalloutComponent,\n FallbackSrcDirective,\n I18nPipe,\n IconComponent,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n CopyClickDirective,\n LaunchClickDirective,\n UserNamePipe,\n PasswordStrengthComponent,\n ],\n providers: [CreditCardNumberPipe, DatePipe, I18nPipe, SearchPipe, UserNamePipe],\n})\nexport class JslibModule {}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/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 | number, p2?: string | number, p3?: string | number): 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 { InjectionToken } from \"@angular/core\";\n\nimport { AbstractStorageService } from \"@bitwarden/common/abstractions/storage.service\";\nimport { StateFactory } from \"@bitwarden/common/factories/stateFactory\";\n\nexport const WINDOW = new InjectionToken(\"WINDOW\");\nexport const MEMORY_STORAGE = new InjectionToken(\"MEMORY_STORAGE\");\nexport const SECURE_STORAGE = new InjectionToken(\"SECURE_STORAGE\");\nexport const STATE_FACTORY = new InjectionToken(\"STATE_FACTORY\");\nexport const STATE_SERVICE_USE_CACHE = new InjectionToken(\"STATE_SERVICE_USE_CACHE\");\nexport const LOGOUT_CALLBACK = new InjectionToken<(expired: boolean, userId?: string) => void>(\n \"LOGOUT_CALLBACK\"\n);\nexport const LOCKED_CALLBACK = new InjectionToken<() => void>(\"LOCKED_CALLBACK\");\nexport const CLIENT_TYPE = new InjectionToken(\"CLIENT_TYPE\");\nexport const LOCALES_DIRECTORY = new InjectionToken(\"LOCALES_DIRECTORY\");\nexport const SYSTEM_LANGUAGE = new InjectionToken(\"SYSTEM_LANGUAGE\");\nexport const LOG_MAC_FAILURES = new InjectionToken(\"LOG_MAC_FAILURES\");\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 {\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?: boolean;\n replaceTopModal?: boolean;\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 /**\n * @deprecated Use `dialogService.open` (in web) or `modalService.open` (in desktop/browser) instead.\n * If replacing an existing call to this method, also remove any `@ViewChild` and `` associated with the\n * existing usage.\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 const { replaceTopModal = false, allowMultipleModals = false } = config;\n\n if (this.modalCount > 0 && replaceTopModal) {\n this.topModal.instance.close();\n }\n\n if (this.modalCount > 0 && !allowMultipleModals) {\n return;\n }\n\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 closeAll(): void {\n this.modalList.forEach((modal) => modal.instance.close());\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 { Observable } from \"rxjs\";\n\nimport { ThemeType } from \"@bitwarden/common/enums/themeType\";\n\nimport { Theme } from \"./theme\";\n\nexport abstract class AbstractThemingService {\n theme$: Observable;\n monitorThemeChanges: () => Promise;\n updateSystemTheme: (systemTheme: ThemeType) => void;\n updateConfiguredTheme: (theme: ThemeType) => Promise;\n}\n","import { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { FolderView } from \"@bitwarden/common/models/view/folder.view\";\n\nexport class DynamicTreeNode {\n fullList: T[];\n nestedList: TreeNode[];\n\n hasId(id: string): boolean {\n return this.fullList != null && this.fullList.filter((i: T) => i.id === id).length > 0;\n }\n\n constructor(init?: Partial>) {\n Object.assign(this, init);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { firstValueFrom, from, mergeMap, Observable } from \"rxjs\";\n\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport {\n isNotProviderUser,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { ServiceUtils } from \"@bitwarden/common/misc/serviceUtils\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { FolderView } from \"@bitwarden/common/models/view/folder.view\";\n\nimport { DynamicTreeNode } from \"../models/dynamic-tree-node.model\";\n\nconst NestingDelimiter = \"/\";\n\n@Injectable()\nexport class VaultFilterService {\n constructor(\n protected stateService: StateService,\n protected organizationService: OrganizationService,\n protected folderService: FolderService,\n protected cipherService: CipherService,\n protected collectionService: CollectionService,\n protected policyService: PolicyService\n ) {}\n\n async storeCollapsedFilterNodes(collapsedFilterNodes: Set): Promise {\n await this.stateService.setCollapsedGroupings(Array.from(collapsedFilterNodes));\n }\n\n async buildCollapsedFilterNodes(): Promise> {\n return new Set(await this.stateService.getCollapsedGroupings());\n }\n\n async buildOrganizations(): Promise {\n let organizations = await this.organizationService.getAll();\n if (organizations != null) {\n organizations = organizations\n .filter(isNotProviderUser)\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n return organizations;\n }\n\n buildNestedFolders(organizationId?: string): Observable> {\n const transformation = async (storedFolders: FolderView[]) => {\n let folders: FolderView[];\n if (organizationId != null) {\n const ciphers = await this.cipherService.getAllDecrypted();\n const orgCiphers = ciphers.filter((c) => c.organizationId == organizationId);\n folders = storedFolders.filter(\n (f) =>\n orgCiphers.filter((oc) => oc.folderId == f.id).length > 0 ||\n ciphers.filter((c) => c.folderId == f.id).length < 1\n );\n } else {\n folders = storedFolders;\n }\n const nestedFolders = await this.getAllFoldersNested(folders);\n return new DynamicTreeNode({\n fullList: folders,\n nestedList: nestedFolders,\n });\n };\n\n return this.folderService.folderViews$.pipe(\n mergeMap((folders) => from(transformation(folders)))\n );\n }\n\n async buildCollections(organizationId?: string): Promise> {\n const storedCollections = await this.collectionService.getAllDecrypted();\n let collections: CollectionView[];\n if (organizationId != null) {\n collections = storedCollections.filter((c) => c.organizationId === organizationId);\n } else {\n collections = storedCollections;\n }\n const nestedCollections = await this.collectionService.getAllNested(collections);\n return new DynamicTreeNode({\n fullList: collections,\n nestedList: nestedCollections,\n });\n }\n\n async checkForSingleOrganizationPolicy(): Promise {\n return await firstValueFrom(\n this.policyService.policyAppliesToActiveUser$(PolicyType.SingleOrg)\n );\n }\n\n async checkForPersonalOwnershipPolicy(): Promise {\n return await firstValueFrom(\n this.policyService.policyAppliesToActiveUser$(PolicyType.PersonalOwnership)\n );\n }\n\n protected async getAllFoldersNested(folders: FolderView[]): Promise[]> {\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 getFolderNested(id: string): Promise> {\n const folders = await this.getAllFoldersNested(\n await firstValueFrom(this.folderService.folderViews$)\n );\n return ServiceUtils.getTreeNodeObject(folders, id) as TreeNode;\n }\n}\n","import { Verification } from \"../../types/verification\";\n\nexport abstract class AccountApiService {\n abstract deleteAccount(verification: Verification): Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { ProfileResponse } from \"../../models/response/profile.response\";\nexport abstract class AvatarUpdateService {\n avatarUpdate$ = new Observable();\n abstract pushUpdate(color: string): Promise;\n abstract loadColorFromState(): Promise;\n}\n","export abstract class AnonymousHubService {\n createHubConnection: (token: string) => void;\n stopHubConnection: () => void;\n}\n","import { OrganizationConnectionType } from \"../enums/organizationConnectionType\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/set-key-connector-key.request\";\nimport { AttachmentRequest } from \"../models/request/attachment.request\";\nimport { BitPayInvoiceRequest } from \"../models/request/bit-pay-invoice.request\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipher-bulk-delete.request\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipher-bulk-move.request\";\nimport { CipherBulkRestoreRequest } from \"../models/request/cipher-bulk-restore.request\";\nimport { CipherBulkShareRequest } from \"../models/request/cipher-bulk-share.request\";\nimport { CipherCollectionsRequest } from \"../models/request/cipher-collections.request\";\nimport { CipherCreateRequest } from \"../models/request/cipher-create.request\";\nimport { CipherPartialRequest } from \"../models/request/cipher-partial.request\";\nimport { CipherShareRequest } from \"../models/request/cipher-share.request\";\nimport { CipherRequest } from \"../models/request/cipher.request\";\nimport { CollectionRequest } from \"../models/request/collection.request\";\nimport { DeleteRecoverRequest } from \"../models/request/delete-recover.request\";\nimport { DeviceVerificationRequest } from \"../models/request/device-verification.request\";\nimport { EmailTokenRequest } from \"../models/request/email-token.request\";\nimport { EmailRequest } from \"../models/request/email.request\";\nimport { EmergencyAccessAcceptRequest } from \"../models/request/emergency-access-accept.request\";\nimport { EmergencyAccessConfirmRequest } from \"../models/request/emergency-access-confirm.request\";\nimport { EmergencyAccessInviteRequest } from \"../models/request/emergency-access-invite.request\";\nimport { EmergencyAccessPasswordRequest } from \"../models/request/emergency-access-password.request\";\nimport { EmergencyAccessUpdateRequest } from \"../models/request/emergency-access-update.request\";\nimport { EventRequest } from \"../models/request/event.request\";\nimport { GroupRequest } from \"../models/request/group.request\";\nimport { IapCheckRequest } from \"../models/request/iap-check.request\";\nimport { PasswordTokenRequest } from \"../models/request/identity-token/password-token.request\";\nimport { SsoTokenRequest } from \"../models/request/identity-token/sso-token.request\";\nimport { UserApiTokenRequest } from \"../models/request/identity-token/user-api-token.request\";\nimport { ImportCiphersRequest } from \"../models/request/import-ciphers.request\";\nimport { ImportOrganizationCiphersRequest } from \"../models/request/import-organization-ciphers.request\";\nimport { KdfRequest } from \"../models/request/kdf.request\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/key-connector-user-key.request\";\nimport { KeysRequest } from \"../models/request/keys.request\";\nimport { OrganizationConnectionRequest } from \"../models/request/organization-connection.request\";\nimport { OrganizationImportRequest } from \"../models/request/organization-import.request\";\nimport { OrganizationSponsorshipCreateRequest } from \"../models/request/organization/organization-sponsorship-create.request\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../models/request/organization/organization-sponsorship-redeem.request\";\nimport { PasswordHintRequest } from \"../models/request/password-hint.request\";\nimport { PasswordRequest } from \"../models/request/password.request\";\nimport { PasswordlessCreateAuthRequest } from \"../models/request/passwordless-create-auth.request\";\nimport { PaymentRequest } from \"../models/request/payment.request\";\nimport { PreloginRequest } from \"../models/request/prelogin.request\";\nimport { ProviderAddOrganizationRequest } from \"../models/request/provider/provider-add-organization.request\";\nimport { ProviderOrganizationCreateRequest } from \"../models/request/provider/provider-organization-create.request\";\nimport { ProviderSetupRequest } from \"../models/request/provider/provider-setup.request\";\nimport { ProviderUpdateRequest } from \"../models/request/provider/provider-update.request\";\nimport { ProviderUserAcceptRequest } from \"../models/request/provider/provider-user-accept.request\";\nimport { ProviderUserBulkConfirmRequest } from \"../models/request/provider/provider-user-bulk-confirm.request\";\nimport { ProviderUserBulkRequest } from \"../models/request/provider/provider-user-bulk.request\";\nimport { ProviderUserConfirmRequest } from \"../models/request/provider/provider-user-confirm.request\";\nimport { ProviderUserInviteRequest } from \"../models/request/provider/provider-user-invite.request\";\nimport { ProviderUserUpdateRequest } from \"../models/request/provider/provider-user-update.request\";\nimport { RegisterRequest } from \"../models/request/register.request\";\nimport { SecretVerificationRequest } from \"../models/request/secret-verification.request\";\nimport { SelectionReadOnlyRequest } from \"../models/request/selection-read-only.request\";\nimport { SendAccessRequest } from \"../models/request/send-access.request\";\nimport { SendRequest } from \"../models/request/send.request\";\nimport { SetPasswordRequest } from \"../models/request/set-password.request\";\nimport { StorageRequest } from \"../models/request/storage.request\";\nimport { TaxInfoUpdateRequest } from \"../models/request/tax-info-update.request\";\nimport { TwoFactorEmailRequest } from \"../models/request/two-factor-email.request\";\nimport { TwoFactorProviderRequest } from \"../models/request/two-factor-provider.request\";\nimport { TwoFactorRecoveryRequest } from \"../models/request/two-factor-recovery.request\";\nimport { UpdateAvatarRequest } from \"../models/request/update-avatar.request\";\nimport { UpdateDomainsRequest } from \"../models/request/update-domains.request\";\nimport { UpdateKeyRequest } from \"../models/request/update-key.request\";\nimport { UpdateProfileRequest } from \"../models/request/update-profile.request\";\nimport { UpdateTempPasswordRequest } from \"../models/request/update-temp-password.request\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../models/request/update-two-factor-authenticator.request\";\nimport { UpdateTwoFactorDuoRequest } from \"../models/request/update-two-factor-duo.request\";\nimport { UpdateTwoFactorEmailRequest } from \"../models/request/update-two-factor-email.request\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../models/request/update-two-factor-web-authn-delete.request\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../models/request/update-two-factor-web-authn.request\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../models/request/update-two-factor-yubio-otp.request\";\nimport { VerifyDeleteRecoverRequest } from \"../models/request/verify-delete-recover.request\";\nimport { VerifyEmailRequest } from \"../models/request/verify-email.request\";\nimport { ApiKeyResponse } from \"../models/response/api-key.response\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachment-upload-data.response\";\nimport { AttachmentResponse } from \"../models/response/attachment.response\";\nimport { AuthRequestResponse } from \"../models/response/auth-request.response\";\nimport { RegisterResponse } from \"../models/response/authentication/register.response\";\nimport { BillingHistoryResponse } from \"../models/response/billing-history.response\";\nimport { BillingPaymentResponse } from \"../models/response/billing-payment.response\";\nimport { BreachAccountResponse } from \"../models/response/breach-account.response\";\nimport { CipherResponse } from \"../models/response/cipher.response\";\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from \"../models/response/collection.response\";\nimport { DeviceVerificationResponse } from \"../models/response/device-verification.response\";\nimport { DomainsResponse } from \"../models/response/domains.response\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse,\n} from \"../models/response/emergency-access.response\";\nimport { EventResponse } from \"../models/response/event.response\";\nimport { GroupDetailsResponse, GroupResponse } from \"../models/response/group.response\";\nimport { IdentityCaptchaResponse } from \"../models/response/identity-captcha.response\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identity-two-factor.response\";\nimport { KeyConnectorUserKeyResponse } from \"../models/response/key-connector-user-key.response\";\nimport { ListResponse } from \"../models/response/list.response\";\nimport {\n OrganizationConnectionConfigApis,\n OrganizationConnectionResponse,\n} from \"../models/response/organization-connection.response\";\nimport { OrganizationExportResponse } from \"../models/response/organization-export.response\";\nimport { OrganizationSponsorshipSyncStatusResponse } from \"../models/response/organization-sponsorship-sync-status.response\";\nimport { PaymentResponse } from \"../models/response/payment.response\";\nimport { PlanResponse } from \"../models/response/plan.response\";\nimport { PolicyResponse } from \"../models/response/policy.response\";\nimport { PreloginResponse } from \"../models/response/prelogin.response\";\nimport { ProfileResponse } from \"../models/response/profile.response\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../models/response/provider/provider-organization.response\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../models/response/provider/provider-user-bulk-public-key.response\";\nimport { ProviderUserBulkResponse } from \"../models/response/provider/provider-user-bulk.response\";\nimport {\n ProviderUserResponse,\n ProviderUserUserDetailsResponse,\n} from \"../models/response/provider/provider-user.response\";\nimport { ProviderResponse } from \"../models/response/provider/provider.response\";\nimport { SelectionReadOnlyResponse } from \"../models/response/selection-read-only.response\";\nimport { SendAccessResponse } from \"../models/response/send-access.response\";\nimport { SendFileDownloadDataResponse } from \"../models/response/send-file-download-data.response\";\nimport { SendFileUploadDataResponse } from \"../models/response/send-file-upload-data.response\";\nimport { SendResponse } from \"../models/response/send.response\";\nimport { SsoPreValidateResponse } from \"../models/response/sso-pre-validate.response\";\nimport { SubscriptionResponse } from \"../models/response/subscription.response\";\nimport { SyncResponse } from \"../models/response/sync.response\";\nimport { TaxInfoResponse } from \"../models/response/tax-info.response\";\nimport { TaxRateResponse } from \"../models/response/tax-rate.response\";\nimport { TwoFactorAuthenticatorResponse } from \"../models/response/two-factor-authenticator.response\";\nimport { TwoFactorDuoResponse } from \"../models/response/two-factor-duo.response\";\nimport { TwoFactorEmailResponse } from \"../models/response/two-factor-email.response\";\nimport { TwoFactorProviderResponse } from \"../models/response/two-factor-provider.response\";\nimport { TwoFactorRecoverResponse } from \"../models/response/two-factor-recover.response\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"../models/response/two-factor-web-authn.response\";\nimport { TwoFactorYubiKeyResponse } from \"../models/response/two-factor-yubi-key.response\";\nimport { UserKeyResponse } from \"../models/response/user-key.response\";\nimport { SendAccessView } from \"../models/view/send-access.view\";\n\n/**\n * @deprecated The `ApiService` class is deprecated and calls should be extracted into individual\n * api services. The `send` method is still allowed to be used within api services. For background\n * of this decision please read https://contributing.bitwarden.com/architecture/adr/refactor-api-service.\n */\nexport abstract class ApiService {\n 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\n postIdentityToken: (\n request: PasswordTokenRequest | SsoTokenRequest | UserApiTokenRequest\n ) => Promise;\n refreshIdentityToken: () => Promise;\n\n getProfile: () => Promise;\n getUserSubscription: () => Promise;\n getTaxInfo: () => Promise;\n putProfile: (request: UpdateProfileRequest) => Promise;\n putAvatar: (request: UpdateAvatarRequest) => 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 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 postConvertToKeyConnector: () => Promise;\n //passwordless\n postAuthRequest: (request: PasswordlessCreateAuthRequest) => Promise;\n getAuthResponse: (id: string, accessCode: string) => Promise;\n\n getUserBillingHistory: () => Promise;\n getUserBillingPayment: () => 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 getFullCipherDetails: (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 putPartialCipher: (id: string, request: CipherPartialRequest) => 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 getSync: () => 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 getDeviceVerificationSettings: () => Promise;\n putDeviceVerificationSettings: (\n request: DeviceVerificationRequest\n ) => Promise;\n getKnownDevice: (email: string, deviceIdentifier: string) => 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 getCloudCommunicationsEnabled: () => Promise;\n abstract getOrganizationConnection(\n id: string,\n type: OrganizationConnectionType,\n configType: { new (response: any): TConfig }\n ): Promise>;\n abstract createOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig }\n ): Promise>;\n abstract updateOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig },\n organizationConnectionId: string\n ): Promise>;\n deleteOrganizationConnection: (id: string) => Promise;\n getPlans: () => Promise>;\n getTaxRates: () => 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 getSponsorshipSyncStatus: (\n sponsoredOrgId: string\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 getOrganizationExport: (organizationId: string) => Promise;\n}\n","export abstract class AppIdService {\n getAppId: () => Promise;\n getAnonymousAppId: () => Promise;\n}\n","import { BreachAccountResponse } from \"../models/response/breach-account.response\";\n\nexport abstract class AuditService {\n passwordLeaked: (password: string) => Promise;\n breachedAccounts: (username: string) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { AuthenticationStatus } from \"../enums/authenticationStatus\";\nimport { AuthResult } from \"../models/domain/auth-result\";\nimport {\n UserApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../models/domain/log-in-credentials\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { TokenTwoFactorRequest } from \"../models/request/identity-token/token-two-factor.request\";\nimport { AuthRequestPushNotification } from \"../models/response/notification.response\";\n\nexport abstract class AuthService {\n masterPasswordHash: string;\n email: string;\n accessCode: string;\n authRequestId: string;\n\n logIn: (\n credentials:\n | UserApiLogInCredentials\n | PasswordLogInCredentials\n | SsoLogInCredentials\n | PasswordlessLogInCredentials\n ) => Promise;\n logInTwoFactor: (\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ) => Promise;\n logOut: (callback: () => void) => void;\n makePreloginKey: (masterPassword: string, email: string) => Promise;\n authingWithUserApiKey: () => boolean;\n authingWithSso: () => boolean;\n authingWithPassword: () => boolean;\n authingWithPasswordless: () => boolean;\n getAuthStatus: (userId?: string) => Promise;\n authResponsePushNotifiction: (notification: AuthRequestPushNotification) => Promise;\n\n getPushNotifcationObs$: () => Observable;\n}\n","export interface MessageBase {\n command: string;\n}\n\nexport abstract class BroadcasterService {\n send: (message: MessageBase, id?: string) => void;\n subscribe: (id: string, messageCallback: (message: MessageBase) => void) => void;\n unsubscribe: (id: string) => void;\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CipherData } from \"../models/data/cipher.data\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport { Field } from \"../models/domain/field\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { CipherView } from \"../models/view/cipher.view\";\nimport { FieldView } from \"../models/view/field.view\";\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 createWithServer: (cipher: Cipher) => Promise;\n updateWithServer: (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/collection.data\";\nimport { Collection } from \"../models/domain/collection\";\nimport { TreeNode } from \"../models/domain/tree-node\";\nimport { CollectionView } from \"../models/view/collection.view\";\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/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { ProfileOrganizationResponse } from \"../models/response/profile-organization.response\";\nimport { ProfileProviderOrganizationResponse } from \"../models/response/profile-provider-organization.response\";\nimport { ProfileProviderResponse } from \"../models/response/profile-provider.response\";\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 getKeyForUserEncryption: (key?: SymmetricCryptoKey) => 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: (encBuffer: EncArrayBuffer, key: SymmetricCryptoKey) => Promise;\n randomNumber: (min: number, max: number) => Promise;\n validateKey: (key: SymmetricCryptoKey) => Promise;\n}\n","import { DecryptParameters } from \"../models/domain/decrypt-parameters\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\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 { IEncrypted } from \"../interfaces/IEncrypted\";\nimport { Decryptable } from \"../interfaces/decryptable.interface\";\nimport { InitializerMetadata } from \"../interfaces/initializer-metadata.interface\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\n\nexport abstract class EncryptService {\n abstract encrypt(plainValue: string | ArrayBuffer, key: SymmetricCryptoKey): Promise;\n abstract encryptToBytes: (\n plainValue: ArrayBuffer,\n key?: SymmetricCryptoKey\n ) => Promise;\n abstract decryptToUtf8: (encString: EncString, key: SymmetricCryptoKey) => Promise;\n abstract decryptToBytes: (encThing: IEncrypted, key: SymmetricCryptoKey) => Promise;\n abstract resolveLegacyKey: (key: SymmetricCryptoKey, encThing: IEncrypted) => SymmetricCryptoKey;\n abstract decryptItems: (\n items: Decryptable[],\n key: SymmetricCryptoKey\n ) => 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 scim?: 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 getScimUrl: () => string;\n setUrlsFromStorage: () => Promise;\n setUrls: (urls: Urls) => Promise;\n getUrls: () => Urls;\n isCloud: () => boolean;\n}\n","import { EventType } from \"../../enums/eventType\";\n\nexport abstract class EventCollectionService {\n collect: (\n eventType: EventType,\n cipherId?: string,\n uploadImmediately?: boolean,\n organizationId?: string\n ) => Promise;\n}\n","import { EventView } from \"../models/view/event.view\";\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 { FileDownloadRequest } from \"./fileDownloadRequest\";\n\nexport abstract class FileDownloadService {\n download: (request: FileDownloadRequest) => void;\n}\n","import { Folder } from \"../../models/domain/folder\";\nimport { FolderResponse } from \"../../models/response/folder.response\";\n\nexport class FolderApiServiceAbstraction {\n save: (folder: Folder) => Promise;\n delete: (id: string) => Promise;\n get: (id: string) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { FolderData } from \"../../models/data/folder.data\";\nimport { Folder } from \"../../models/domain/folder\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\nimport { FolderView } from \"../../models/view/folder.view\";\n\nexport abstract class FolderService {\n folders$: Observable;\n folderViews$: Observable;\n\n clearCache: () => Promise;\n encrypt: (model: FolderView, key?: SymmetricCryptoKey) => Promise;\n get: (id: string) => Promise;\n getAllFromState: () => Promise;\n /**\n * @deprecated Only use in CLI!\n */\n getFromState: (id: string) => Promise;\n /**\n * @deprecated Only use in CLI!\n */\n getAllDecryptedFromState: () => Promise;\n}\n\nexport abstract class InternalFolderService extends FolderService {\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}\n","import { AbstractControl } from \"@angular/forms\";\nexport interface AllValidationErrors {\n controlName: string;\n errorName: string;\n}\n\nexport interface FormGroupControls {\n [key: string]: AbstractControl;\n}\n\nexport abstract class FormValidationErrorsService {\n getFormValidationErrors: (controls: FormGroupControls) => AllValidationErrors[];\n}\n","import { Observable } from \"rxjs\";\n\nexport abstract class I18nService {\n locale$: Observable;\n supportedTranslationLocales: string[];\n translationLocale: string;\n collator: Intl.Collator;\n localeNames: Map;\n t: (id: string, p1?: string | number, p2?: string | number, p3?: string | number) => string;\n translate: (id: string, p1?: string, p2?: string, p3?: string) => string;\n}\n","import { Organization } from \"../models/domain/organization\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\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}\n","export abstract class LoginService {\n getEmail: () => string;\n getRememberEmail: () => boolean;\n setEmail: (value: string) => void;\n setRememberEmail: (value: boolean) => void;\n clearValues: () => void;\n saveEmailSettings: () => Promise;\n}\n","export abstract class MessagingService {\n send: (subscriber: string, arg?: any) => void;\n}\n","import { ListResponse } from \"../../models/response/list.response\";\n\nimport {\n OrganizationUserAcceptRequest,\n OrganizationUserBulkConfirmRequest,\n OrganizationUserConfirmRequest,\n OrganizationUserInviteRequest,\n OrganizationUserResetPasswordEnrollmentRequest,\n OrganizationUserResetPasswordRequest,\n OrganizationUserUpdateGroupsRequest,\n OrganizationUserUpdateRequest,\n} from \"./requests\";\nimport {\n OrganizationUserBulkPublicKeyResponse,\n OrganizationUserBulkResponse,\n OrganizationUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n OrganizationUserUserDetailsResponse,\n} from \"./responses\";\n\n/**\n * Service for interacting with Organization Users via the API\n */\nexport abstract class OrganizationUserService {\n /**\n * Retrieve a single organization user by Id\n * @param organizationId - Identifier for the user's organization\n * @param id - Organization user identifier\n */\n abstract getOrganizationUser(\n organizationId: string,\n id: string\n ): Promise;\n\n /**\n * Retrieve a list of groups Ids the specified organization user belongs to\n * @param organizationId - Identifier for the user's organization\n * @param id - Organization user identifier\n */\n abstract getOrganizationUserGroups(organizationId: string, id: string): Promise;\n\n /**\n * Retrieve a list of all users that belong to the specified organization\n * @param organizationId - Identifier for the organization\n */\n abstract getAllUsers(\n organizationId: string\n ): Promise>;\n\n /**\n * Retrieve reset password details for the specified organization user\n * @param organizationId - Identifier for the user's organization\n * @param id - Organization user identifier\n */\n abstract getOrganizationUserResetPasswordDetails(\n organizationId: string,\n id: string\n ): Promise;\n\n /**\n * Create new organization user invite(s) for the specified organization\n * @param organizationId - Identifier for the organization\n * @param request - New user invitation request details\n */\n abstract postOrganizationUserInvite(\n organizationId: string,\n request: OrganizationUserInviteRequest\n ): Promise;\n\n /**\n * Re-invite the specified organization user\n * @param organizationId - Identifier for the user's organization\n * @param id - Organization user identifier\n */\n abstract postOrganizationUserReinvite(organizationId: string, id: string): Promise;\n\n /**\n * Re-invite many organization users for the specified organization\n * @param organizationId - Identifier for the organization\n * @param ids - A list of organization user identifiers\n * @return List of user ids, including both those that were successfully re-invited and those that had an error\n */\n abstract postManyOrganizationUserReinvite(\n organizationId: string,\n ids: string[]\n ): Promise>;\n\n /**\n * Accept an organization user invitation\n * @param organizationId - Identifier for the organization to accept\n * @param id - Organization user identifier\n * @param request - Request details for accepting the invitation\n */\n abstract postOrganizationUserAccept(\n organizationId: string,\n id: string,\n request: OrganizationUserAcceptRequest\n ): Promise;\n\n /**\n * Confirm an organization user that has accepted their invitation\n * @param organizationId - Identifier for the organization to confirm\n * @param id - Organization user identifier\n * @param request - Request details for confirming the user\n */\n abstract postOrganizationUserConfirm(\n organizationId: string,\n id: string,\n request: OrganizationUserConfirmRequest\n ): Promise;\n\n /**\n * Retrieve a list of the specified users' public keys\n * @param organizationId - Identifier for the organization to accept\n * @param ids - A list of organization user identifiers to retrieve public keys for\n */\n abstract postOrganizationUsersPublicKey(\n organizationId: string,\n ids: string[]\n ): Promise>;\n\n /**\n * Confirm many organization users that have accepted their invitations\n * @param organizationId - Identifier for the organization to confirm users\n * @param request - Bulk request details for confirming the user\n */\n abstract postOrganizationUserBulkConfirm(\n organizationId: string,\n request: OrganizationUserBulkConfirmRequest\n ): Promise>;\n\n /**\n * Update an organization users\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n * @param request - Request details for updating the user\n */\n abstract putOrganizationUser(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateRequest\n ): Promise;\n\n /**\n * Update an organization user's groups\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n * @param groupIds - List of group ids to associate the user with\n */\n abstract putOrganizationUserGroups(\n organizationId: string,\n id: string,\n groupIds: OrganizationUserUpdateGroupsRequest\n ): Promise;\n\n /**\n * Update an organization user's reset password enrollment\n * @param organizationId - Identifier for the organization the user belongs to\n * @param userId - Organization user identifier\n * @param request - Reset password enrollment details\n */\n abstract putOrganizationUserResetPasswordEnrollment(\n organizationId: string,\n userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest\n ): Promise;\n\n /**\n * Reset an organization user's password\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n * @param request - Reset password details\n */\n abstract putOrganizationUserResetPassword(\n organizationId: string,\n id: string,\n request: OrganizationUserResetPasswordRequest\n ): Promise;\n\n /**\n * Delete an organization user\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n */\n abstract deleteOrganizationUser(organizationId: string, id: string): Promise;\n\n /**\n * Delete many organization users\n * @param organizationId - Identifier for the organization the users belongs to\n * @param ids - List of organization user identifiers to delete\n * @return List of user ids, including both those that were successfully deleted and those that had an error\n */\n abstract deleteManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise>;\n\n /**\n * Revoke an organization user's access to the organization\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n */\n abstract revokeOrganizationUser(organizationId: string, id: string): Promise;\n\n /**\n * Revoke many organization users' access to the organization\n * @param organizationId - Identifier for the organization the users belongs to\n * @param ids - List of organization user identifiers to revoke\n * @return List of user ids, including both those that were successfully revoked and those that had an error\n */\n abstract revokeManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise>;\n\n /**\n * Restore an organization user's access to the organization\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n */\n abstract restoreOrganizationUser(organizationId: string, id: string): Promise;\n\n /**\n * Restore many organization users' access to the organization\n * @param organizationId - Identifier for the organization the users belongs to\n * @param ids - List of organization user identifiers to restore\n * @return List of user ids, including both those that were successfully restored and those that had an error\n */\n abstract restoreManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise>;\n}\n","import { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\nimport { ImportDirectoryRequest } from \"../../models/request/import-directory.request\";\nimport { OrganizationApiKeyRequest } from \"../../models/request/organization-api-key.request\";\nimport { OrganizationCreateRequest } from \"../../models/request/organization-create.request\";\nimport { OrganizationKeysRequest } from \"../../models/request/organization-keys.request\";\nimport { OrganizationSubscriptionUpdateRequest } from \"../../models/request/organization-subscription-update.request\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../../models/request/organization-tax-info-update.request\";\nimport { OrganizationUpdateRequest } from \"../../models/request/organization-update.request\";\nimport { OrganizationUpgradeRequest } from \"../../models/request/organization-upgrade.request\";\nimport { OrganizationSsoRequest } from \"../../models/request/organization/organization-sso.request\";\nimport { PaymentRequest } from \"../../models/request/payment.request\";\nimport { SeatRequest } from \"../../models/request/seat.request\";\nimport { SecretVerificationRequest } from \"../../models/request/secret-verification.request\";\nimport { StorageRequest } from \"../../models/request/storage.request\";\nimport { VerifyBankRequest } from \"../../models/request/verify-bank.request\";\nimport { ApiKeyResponse } from \"../../models/response/api-key.response\";\nimport { BillingResponse } from \"../../models/response/billing.response\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { OrganizationApiKeyInformationResponse } from \"../../models/response/organization-api-key-information.response\";\nimport { OrganizationAutoEnrollStatusResponse } from \"../../models/response/organization-auto-enroll-status.response\";\nimport { OrganizationKeysResponse } from \"../../models/response/organization-keys.response\";\nimport { OrganizationSubscriptionResponse } from \"../../models/response/organization-subscription.response\";\nimport { OrganizationResponse } from \"../../models/response/organization.response\";\nimport { OrganizationSsoResponse } from \"../../models/response/organization/organization-sso.response\";\nimport { PaymentResponse } from \"../../models/response/payment.response\";\nimport { TaxInfoResponse } from \"../../models/response/tax-info.response\";\n\nexport class OrganizationApiServiceAbstraction {\n get: (id: string) => Promise;\n getBilling: (id: string) => Promise;\n getSubscription: (id: string) => Promise;\n getLicense: (id: string, installationId: string) => Promise;\n getAutoEnrollStatus: (identifier: string) => Promise;\n create: (request: OrganizationCreateRequest) => Promise;\n createLicense: (data: FormData) => Promise;\n save: (id: string, request: OrganizationUpdateRequest) => Promise;\n updatePayment: (id: string, request: PaymentRequest) => Promise;\n upgrade: (id: string, request: OrganizationUpgradeRequest) => Promise;\n updateSubscription: (id: string, request: OrganizationSubscriptionUpdateRequest) => Promise;\n updateSeats: (id: string, request: SeatRequest) => Promise;\n updateStorage: (id: string, request: StorageRequest) => Promise;\n verifyBank: (id: string, request: VerifyBankRequest) => Promise;\n cancel: (id: string) => Promise;\n reinstate: (id: string) => Promise;\n leave: (id: string) => Promise;\n delete: (id: string, request: SecretVerificationRequest) => Promise;\n updateLicense: (id: string, data: FormData) => Promise;\n importDirectory: (organizationId: string, request: ImportDirectoryRequest) => Promise;\n getOrCreateApiKey: (id: string, request: OrganizationApiKeyRequest) => Promise;\n getApiKeyInformation: (\n id: string,\n organizationApiKeyType?: OrganizationApiKeyType\n ) => Promise>;\n rotateApiKey: (id: string, request: OrganizationApiKeyRequest) => Promise;\n getTaxInfo: (id: string) => Promise;\n updateTaxInfo: (id: string, request: OrganizationTaxInfoUpdateRequest) => Promise;\n getKeys: (id: string) => Promise;\n updateKeys: (id: string, request: OrganizationKeysRequest) => Promise;\n getSso: (id: string) => Promise;\n updateSso: (id: string, request: OrganizationSsoRequest) => Promise;\n}\n","import { map, Observable } from \"rxjs\";\n\nimport { Utils } from \"../../misc/utils\";\nimport { OrganizationData } from \"../../models/data/organization.data\";\nimport { Organization } from \"../../models/domain/organization\";\nimport { I18nService } from \"../i18n.service\";\n\nexport function canAccessVaultTab(org: Organization): boolean {\n return org.isManager;\n}\n\nexport function canAccessSettingsTab(org: Organization): boolean {\n return (\n org.isOwner ||\n org.canManagePolicies ||\n org.canManageSso ||\n org.canManageScim ||\n org.canAccessImportExport\n );\n}\n\nexport function canAccessMembersTab(org: Organization): boolean {\n return org.canManageUsers || org.canManageUsersPassword;\n}\n\nexport function canAccessGroupsTab(org: Organization): boolean {\n return org.canManageGroups;\n}\n\nexport function canAccessReportingTab(org: Organization): boolean {\n return org.canAccessReports || org.canAccessEventLogs;\n}\n\nexport function canAccessBillingTab(org: Organization): boolean {\n return org.canManageBilling;\n}\n\nexport function canManageCollections(org: Organization): boolean {\n return (\n org.canCreateNewCollections ||\n org.canEditAnyCollection ||\n org.canDeleteAnyCollection ||\n org.canViewAssignedCollections\n );\n}\n\nexport function canAccessManageTab(org: Organization): boolean {\n return canAccessMembersTab(org) || canAccessGroupsTab(org) || canManageCollections(org);\n}\n\nexport function canAccessOrgAdmin(org: Organization): boolean {\n return (\n canAccessMembersTab(org) ||\n canAccessGroupsTab(org) ||\n canAccessReportingTab(org) ||\n canAccessBillingTab(org) ||\n canAccessSettingsTab(org) ||\n canAccessVaultTab(org) ||\n canAccessManageTab(org)\n );\n}\n\nexport function getOrganizationById(id: string) {\n return map((orgs) => orgs.find((o) => o.id === id));\n}\n\nexport function canAccessAdmin(i18nService: I18nService) {\n return map((orgs) =>\n orgs.filter(canAccessOrgAdmin).sort(Utils.getSortFunction(i18nService, \"name\"))\n );\n}\n\nexport function isNotProviderUser(org: Organization): boolean {\n return !org.isProviderUser;\n}\n\nexport abstract class OrganizationService {\n organizations$: Observable;\n\n get: (id: string) => Organization;\n getByIdentifier: (identifier: string) => Organization;\n getAll: (userId?: string) => Promise;\n /**\n * @deprecated For the CLI only\n * @param id id of the organization\n */\n getFromState: (id: string) => Promise;\n canManageSponsorships: () => Promise;\n hasOrganizations: () => boolean;\n}\n\nexport abstract class InternalOrganizationService extends OrganizationService {\n replace: (organizations: { [id: string]: OrganizationData }) => Promise;\n}\n","import * as zxcvbn from \"zxcvbn\";\n\nimport { GeneratedPasswordHistory } from \"../models/domain/generated-password-history\";\nimport { PasswordGeneratorOptions } from \"../models/domain/password-generator-options\";\nimport { PasswordGeneratorPolicyOptions } from \"../models/domain/password-generator-policy-options\";\n\nexport abstract class PasswordGenerationService {\n generatePassword: (options: PasswordGeneratorOptions) => Promise;\n generatePassphrase: (options: PasswordGeneratorOptions) => Promise;\n getOptions: () => Promise<[PasswordGeneratorOptions, PasswordGeneratorPolicyOptions]>;\n enforcePasswordGeneratorPoliciesOnOptions: (\n options: PasswordGeneratorOptions\n ) => Promise<[PasswordGeneratorOptions, PasswordGeneratorPolicyOptions]>;\n getPasswordGeneratorPolicyOptions: () => Promise;\n saveOptions: (options: PasswordGeneratorOptions) => Promise;\n getHistory: () => Promise;\n addHistory: (password: string) => Promise;\n clear: (userId?: string) => Promise;\n passwordStrength: (password: string, userInputs?: string[]) => zxcvbn.ZXCVBNResult;\n normalizeOptions: (\n options: PasswordGeneratorOptions,\n enforcedPolicyOptions: PasswordGeneratorPolicyOptions\n ) => 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\";\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 getApplicationVersion: () => Promise;\n getApplicationVersionNumber: () => 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 target?: string\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 supportsSecureStorage: () => boolean;\n}\n","import { PolicyType } from \"../../enums/policyType\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/master-password-policy-options\";\nimport { PolicyRequest } from \"../../models/request/policy.request\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\n\nexport class PolicyApiServiceAbstraction {\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 getMasterPasswordPoliciesForInvitedUsers: (orgId: string) => Promise;\n putPolicy: (organizationId: string, type: PolicyType, request: PolicyRequest) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { PolicyType } from \"../../enums/policyType\";\nimport { PolicyData } from \"../../models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/master-password-policy-options\";\nimport { Policy } from \"../../models/domain/policy\";\nimport { ResetPasswordPolicyOptions } from \"../../models/domain/reset-password-policy-options\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\n\nexport abstract class PolicyService {\n policies$: Observable;\n masterPasswordPolicyOptions$: (policies?: Policy[]) => Observable;\n policyAppliesToActiveUser$: (\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean\n ) => Observable;\n\n /**\n * @deprecated Do not call this, use the policies$ observable collection\n */\n getAll: (type?: PolicyType, userId?: string) => 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\nexport abstract class InternalPolicyService extends PolicyService {\n upsert: (policy: PolicyData) => Promise;\n replace: (policies: { [id: string]: PolicyData }) => Promise;\n clear: (userId?: string) => Promise;\n}\n","import { ProviderData } from \"../models/data/provider.data\";\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/cipher.view\";\nimport { SendView } from \"../models/view/send.view\";\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/send.data\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { Send } from \"../models/domain/send\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { SendView } from \"../models/view/send.view\";\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","import { Observable } from \"rxjs\";\n\nimport { KdfType } from \"../enums/kdfType\";\nimport { ThemeType } from \"../enums/themeType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CipherData } from \"../models/data/cipher.data\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { EncryptedOrganizationKeyData } from \"../models/data/encrypted-organization-key.data\";\nimport { EventData } from \"../models/data/event.data\";\nimport { FolderData } from \"../models/data/folder.data\";\nimport { LocalData } from \"../models/data/local.data\";\nimport { OrganizationData } from \"../models/data/organization.data\";\nimport { PolicyData } from \"../models/data/policy.data\";\nimport { ProviderData } from \"../models/data/provider.data\";\nimport { SendData } from \"../models/data/send.data\";\nimport { ServerConfigData } from \"../models/data/server-config.data\";\nimport { Account, AccountSettingsSettings } from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { EnvironmentUrls } from \"../models/domain/environment-urls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generated-password-history\";\nimport { Policy } from \"../models/domain/policy\";\nimport { StorageOptions } from \"../models/domain/storage-options\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { WindowState } from \"../models/domain/window-state\";\nimport { CipherView } from \"../models/view/cipher.view\";\nimport { CollectionView } from \"../models/view/collection.view\";\nimport { SendView } from \"../models/view/send.view\";\n\nexport abstract class StateService {\n accounts$: Observable<{ [userId: string]: T }>;\n activeAccount$: Observable;\n activeAccountUnlocked$: Observable;\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 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 getHasPremiumPersonally: (options?: StorageOptions) => Promise;\n setHasPremiumPersonally: (value: boolean, options?: StorageOptions) => Promise;\n setHasPremiumFromOrganization: (value: boolean, options?: StorageOptions) => Promise;\n getHasPremiumFromOrganization: (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 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 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 /**\n * @deprecated Do not call this, use PolicyService\n */\n getDecryptedPolicies: (options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this, use PolicyService\n */\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 getDuckDuckGoSharedKey: (options?: StorageOptions) => Promise;\n setDuckDuckGoSharedKey: (value: string, 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 getEnableDuckDuckGoBrowserIntegration: (options?: StorageOptions) => Promise;\n setEnableDuckDuckGoBrowserIntegration: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getEnableFullWidth: (options?: StorageOptions) => Promise;\n setEnableFullWidth: (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 /**\n * @deprecated Do not call this directly, use FolderService\n */\n getEncryptedFolders: (options?: StorageOptions) => Promise<{ [id: string]: FolderData }>;\n /**\n * @deprecated Do not call this directly, use FolderService\n */\n setEncryptedFolders: (\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedOrganizationKeys: (\n options?: StorageOptions\n ) => Promise<{ [orgId: string]: EncryptedOrganizationKeyData }>;\n setEncryptedOrganizationKeys: (\n value: { [orgId: string]: EncryptedOrganizationKeyData },\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 /**\n * @deprecated Do not call this directly, use PolicyService\n */\n getEncryptedPolicies: (options?: StorageOptions) => Promise<{ [id: string]: PolicyData }>;\n /**\n * @deprecated Do not call this directly, use PolicyService\n */\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 getLocalData: (options?: StorageOptions) => Promise<{ [cipherId: string]: LocalData }>;\n setLocalData: (\n value: { [cipherId: string]: LocalData },\n options?: StorageOptions\n ) => Promise;\n getLocale: (options?: StorageOptions) => Promise;\n setLocale: (value: string, 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 /**\n * @deprecated Do not call this directly, use OrganizationService\n */\n getOrganizations: (options?: StorageOptions) => Promise<{ [id: string]: OrganizationData }>;\n /**\n * @deprecated Do not call this directly, use OrganizationService\n */\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 /**\n * @deprecated Do not call this directly, use SettingsService\n */\n getSettings: (options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use SettingsService\n */\n setSettings: (value: AccountSettingsSettings, 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 * @deprecated Do not call this directly, use ConfigService\n */\n getServerConfig: (options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use ConfigService\n */\n setServerConfig: (value: ServerConfigData, options?: StorageOptions) => Promise;\n\n getAvatarColor: (options?: StorageOptions) => Promise;\n setAvatarColor: (value: string, options?: StorageOptions) => Promise;\n}\n","export abstract class StateMigrationService {\n needsMigration: () => Promise;\n migrate: () => Promise;\n}\n","import { MemoryStorageOptions, StorageOptions } from \"../models/domain/storage-options\";\n\nexport abstract class AbstractStorageService {\n abstract get(key: string, options?: StorageOptions): Promise;\n abstract has(key: string, options?: StorageOptions): Promise;\n abstract save(key: string, obj: T, options?: StorageOptions): Promise;\n abstract remove(key: string, options?: StorageOptions): Promise;\n}\n\nexport abstract class AbstractCachedStorageService extends AbstractStorageService {\n abstract getBypassCache(key: string, options?: MemoryStorageOptions): Promise;\n}\n\nexport interface MemoryStorageServiceInterface {\n get(key: string, options?: MemoryStorageOptions): Promise;\n}\n","import {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../../models/response/notification.response\";\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/identity-token.response\";\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 getIssuer: () => Promise;\n getIsExternal: () => Promise;\n}\n","export abstract class TotpService {\n getCode: (key: string) => Promise;\n getTimeInterval: (key: string) => number;\n}\n","import { TwoFactorProviderType } from \"../enums/twoFactorProviderType\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identity-two-factor.response\";\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/secret-verification.request\";\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 generateForwarded: (options: any) => Promise;\n getOptions: () => Promise;\n saveOptions: (options: any) => Promise;\n}\n","export abstract class ValidationService {\n showError: (data: any) => string[];\n}\n","export abstract class VaultTimeoutService {\n checkVaultTimeout: () => Promise;\n lock: (userId?: string) => Promise;\n logOut: (userId?: string) => Promise;\n}\n","export abstract class VaultTimeoutSettingsService {\n setVaultTimeoutOptions: (vaultTimeout: number, vaultTimeoutAction: string) => Promise;\n getVaultTimeout: (userId?: string) => Promise;\n isPinLockSet: () => Promise<[boolean, boolean]>;\n isBiometricLockSet: () => Promise;\n clear: (userId?: string) => Promise;\n}\n","export enum AuthenticationStatus {\n LoggedOut = 0,\n Locked = 1,\n Unlocked = 2,\n}\n","export enum AuthenticationType {\n Password = 0,\n Sso = 1,\n UserApi = 2,\n Passwordless = 3,\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 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 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 OrganizationUser_Revoked = 1511,\n OrganizationUser_Restored = 1512,\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 Organization_SponsorshipsSynced = 1608,\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 HashPurpose {\n ServerAuthorization = 1,\n LocalAuthorization = 2,\n}\n","export enum HtmlStorageLocation {\n Local = \"local\",\n Memory = \"memory\",\n Session = \"session\",\n}\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 OrganizationApiKeyType {\n Default = 0,\n BillingSync = 1,\n Scim = 2,\n}\n","export enum OrganizationConnectionType {\n CloudBillingSync = 1,\n Scim = 2,\n}\n","export enum OrganizationUserStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n Revoked = -1,\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 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 SecureNoteType {\n Generic = 0,\n}\n","export enum SendType {\n Text = 0,\n File = 1,\n}\n","export enum ThemeType {\n System = \"system\",\n Light = \"light\",\n Dark = \"dark\",\n Nord = \"nord\",\n SolarizedDark = \"solarizedDark\",\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","// required to avoid linting errors when there are no flags\n/* eslint-disable @typescript-eslint/ban-types */\nexport type SharedFlags = {\n multithreadDecryption: boolean;\n};\n\n// required to avoid linting errors when there are no flags\n/* eslint-disable @typescript-eslint/ban-types */\nexport type SharedDevFlags = {};\n\nfunction getFlags(envFlags: string | T): T {\n if (typeof envFlags === \"string\") {\n return JSON.parse(envFlags) as T;\n } else {\n return envFlags as T;\n }\n}\n\n/**\n * Gets the value of a feature flag from environment.\n * All flags default to \"on\" (true).\n * Only use for shared code in `libs`, otherwise use the client-specific function.\n * @param flag The name of the feature flag to check\n * @returns The value of the flag\n */\nexport function flagEnabled(flag: keyof Flags): boolean {\n const flags = getFlags(process.env.FLAGS);\n return flags[flag] == null || !!flags[flag];\n}\n\n/**\n * Gets the value of a dev flag from environment.\n * Will always return false unless in development.\n * Only use for shared code in `libs`, otherwise use the client-specific function.\n * @param flag The name of the dev flag to check\n * @returns The value of the flag\n */\nexport function devFlagEnabled(flag: keyof DevFlags): boolean {\n if (process.env.ENV !== \"development\") {\n return false;\n }\n\n const devFlags = getFlags(process.env.DEV_FLAGS);\n return devFlags[flag] == null || !!devFlags[flag];\n}\n\n/**\n * Gets the value of a dev flag from environment.\n * Will always return false unless in development.\n * @param flag The name of the dev flag to check\n * @returns The value of the flag\n * @throws Error if the flag is not enabled\n */\nexport function devFlagValue(\n flag: keyof DevFlags\n): DevFlags[keyof DevFlags] {\n if (!devFlagEnabled(flag)) {\n throw new Error(`This method should not be called, it is protected by a disabled dev flag.`);\n }\n\n const devFlags = getFlags(process.env.DEV_FLAGS);\n return devFlags[flag];\n}\n","import { LinkedIdType } from \"../enums/linkedIdType\";\nimport { ItemView } from \"../models/view/item.view\";\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","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","import { ITreeNodeObject, TreeNode } from \"../models/domain/tree-node\";\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","/* eslint-disable no-useless-escape */\nimport { getHostname, parse } from \"tldts\";\nimport { Merge } from \"type-fest\";\n\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { EncryptService } from \"../abstractions/encrypt.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\n\nconst nodeURL = typeof window === \"undefined\" ? require(\"url\") : null;\n\ndeclare global {\n /* eslint-disable-next-line no-var */\n var bitwardenContainerService: BitwardenContainerService;\n}\n\ninterface BitwardenContainerService {\n getCryptoService: () => CryptoService;\n getEncryptService: () => EncryptService;\n}\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: typeof global = null;\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 static readonly validHosts: string[] = [\"localhost\"];\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\n Utils.isMobileBrowser = Utils.isBrowser && this.isMobile(window);\n Utils.isAppleMobileBrowser = Utils.isBrowser && this.isAppleMobile(window);\n\n if (Utils.isNode) {\n Utils.global = global;\n } else if (Utils.isBrowser) {\n Utils.global = window;\n } else {\n // If it's not browser or node then it must be a service worker\n Utils.global = self;\n }\n }\n\n static fromB64ToArray(str: string): Uint8Array {\n if (str == null) {\n return null;\n }\n\n if (Utils.isNode) {\n return new Uint8Array(Buffer.from(str, \"base64\"));\n } else {\n const binaryString = Utils.global.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 if (str == null) {\n return null;\n }\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 (buffer == null) {\n return null;\n }\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 Utils.global.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(Utils.global.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(Utils.global.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 if (Utils.isNullOrWhitespace(uriString)) {\n return null;\n }\n\n uriString = uriString.trim();\n\n if (uriString.startsWith(\"data:\")) {\n return null;\n }\n\n if (uriString.startsWith(\"about:\")) {\n return null;\n }\n\n if (uriString.startsWith(\"file:\")) {\n return null;\n }\n\n // Does uriString contain invalid characters\n // TODO Needs to possibly be extended, although '!' is a reserved character\n if (uriString.indexOf(\"!\") > 0) {\n return null;\n }\n\n try {\n const hostname = getHostname(uriString, { validHosts: this.validHosts });\n if (hostname != null) {\n return hostname;\n }\n } catch {\n return null;\n }\n return null;\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 (Utils.isNullOrWhitespace(uriString)) {\n return null;\n }\n\n uriString = uriString.trim();\n\n if (uriString.startsWith(\"data:\")) {\n return null;\n }\n\n if (uriString.startsWith(\"about:\")) {\n return null;\n }\n\n try {\n const parseResult = parse(uriString, { validHosts: this.validHosts });\n if (parseResult != null && parseResult.hostname != null) {\n if (parseResult.hostname === \"localhost\" || parseResult.isIp) {\n return parseResult.hostname;\n }\n\n if (parseResult.domain != null) {\n return parseResult.domain;\n }\n return null;\n }\n } catch {\n return null;\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(\n i18nService: I18nService,\n prop: { [K in keyof T]: T[K] extends string ? K : never }[keyof T]\n ): (a: T, b: T) => number {\n return (a, b) => {\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 // The `as unknown as string` here is unfortunate because typescript doesn't property understand that the return of T[prop] will be a string\n return i18nService.collator\n ? i18nService.collator.compare(a[prop] as unknown as string, b[prop] as unknown as string)\n : (a[prop] as unknown as string).localeCompare(b[prop] as unknown as string);\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 isPromise(obj: any): obj is Promise {\n return (\n obj != undefined && typeof obj[\"then\"] === \"function\" && typeof obj[\"catch\"] === \"function\"\n );\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 (this.isNullOrWhitespace(uriString)) {\n return null;\n }\n\n uriString = uriString.trim();\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 /**\n * There are a few ways to calculate text color for contrast, this one seems to fit accessibility guidelines best.\n * https://stackoverflow.com/a/3943023/6869691\n *\n * @param {string} bgColor\n * @param {number} [threshold] see stackoverflow link above\n * @param {boolean} [svgTextFill]\n * Indicates if this method is performed on an SVG 'fill' attribute (e.g. ).\n * This check is necessary because the '!important' tag cannot be used in a 'fill' attribute.\n */\n static pickTextColorBasedOnBgColor(bgColor: string, threshold = 186, svgTextFill = false) {\n const bgColorHexNums = bgColor.charAt(0) === \"#\" ? bgColor.substring(1, 7) : bgColor;\n const r = parseInt(bgColorHexNums.substring(0, 2), 16); // hexToR\n const g = parseInt(bgColorHexNums.substring(2, 4), 16); // hexToG\n const b = parseInt(bgColorHexNums.substring(4, 6), 16); // hexToB\n const blackColor = svgTextFill ? \"black\" : \"black !important\";\n const whiteColor = svgTextFill ? \"white\" : \"white !important\";\n return r * 0.299 + g * 0.587 + b * 0.114 > threshold ? blackColor : whiteColor;\n }\n\n static 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 /**\n * @throws Will throw an error if the ContainerService has not been attached to the window object\n */\n static getContainerService(): BitwardenContainerService {\n if (this.global.bitwardenContainerService == null) {\n throw new Error(\"global bitwardenContainerService not initialized.\");\n }\n return this.global.bitwardenContainerService;\n }\n\n static validateHexColor(color: string) {\n return /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(color);\n }\n\n /**\n * Converts map to a Record with the same data. Inverse of recordToMap\n * Useful in toJSON methods, since Maps are not serializable\n * @param map\n * @returns\n */\n static mapToRecord(map: Map): Record {\n if (map == null) {\n return null;\n }\n if (!(map instanceof Map)) {\n return map;\n }\n return Object.fromEntries(map);\n }\n\n /**\n * Converts record to a Map with the same data. Inverse of mapToRecord\n * Useful in fromJSON methods, since Maps are not serializable\n *\n * Warning: If the record has string keys that are numbers, they will be converted to numbers in the map\n * @param record\n * @returns\n */\n static recordToMap(record: Record): Map {\n if (record == null) {\n return null;\n } else if (record instanceof Map) {\n return record;\n }\n\n const entries = Object.entries(record);\n if (entries.length === 0) {\n return new Map();\n }\n\n if (isNaN(Number(entries[0][0]))) {\n return new Map(entries) as Map;\n } else {\n return new Map(entries.map((e) => [Number(e[0]), e[1]])) as Map;\n }\n }\n\n /** Applies Object.assign, but converts the type nicely using Type-Fest Merge */\n static merge(\n destination: Destination,\n source: Source\n ): Merge {\n return Object.assign(destination, source) as unknown as Merge;\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 (typeof window !== \"undefined\") {\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 { BaseResponse } from \"../response/base.response\";\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/base.response\";\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/base.response\";\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 { UriMatchType } from \"../../enums/uriMatchType\";\nimport { BaseResponse } from \"../response/base.response\";\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/base.response\";\n\nimport { LoginUriApi } from \"./login-uri.api\";\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 { BaseResponse } from \"../response/base.response\";\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 manageScim: 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 this.manageScim = this.getResponseProperty(\"ManageScim\");\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { BaseResponse } from \"../response/base.response\";\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/base.response\";\n\nexport class SendFileApi extends BaseResponse {\n id: string;\n fileName: 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.size = this.getResponseProperty(\"Size\");\n this.sizeName = this.getResponseProperty(\"SizeName\");\n }\n}\n","import { BaseResponse } from \"../response/base.response\";\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 { AttachmentResponse } from \"../response/attachment.response\";\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/card.api\";\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/cipher.response\";\n\nimport { AttachmentData } from \"./attachment.data\";\nimport { CardData } from \"./card.data\";\nimport { FieldData } from \"./field.data\";\nimport { IdentityData } from \"./identity.data\";\nimport { LoginData } from \"./login.data\";\nimport { PasswordHistoryData } from \"./password-history.data\";\nimport { SecureNoteData } from \"./secure-note.data\";\n\nexport class CipherData {\n id: string;\n organizationId: string;\n folderId: string;\n edit: boolean;\n viewPassword: boolean;\n organizationUseTotp: boolean;\n favorite: boolean;\n revisionDate: string;\n type: CipherType;\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 creationDate: string;\n deletedDate: string;\n reprompt: CipherRepromptType;\n\n constructor(response?: CipherResponse, 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.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.creationDate = response.creationDate;\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/collection.response\";\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 organizationId: string;\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { FieldApi } from \"../api/field.api\";\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/folder.response\";\n\nexport class FolderData {\n id: string;\n name: string;\n revisionDate: string;\n\n constructor(response: FolderResponse) {\n this.name = response.name;\n this.id = response.id;\n this.revisionDate = response.revisionDate;\n }\n}\n","import { IdentityApi } from \"../api/identity.api\";\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 { UriMatchType } from \"../../enums/uriMatchType\";\nimport { LoginUriApi } from \"../api/login-uri.api\";\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 { LoginApi } from \"../api/login.api\";\n\nimport { LoginUriData } from \"./login-uri.data\";\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 { PasswordHistoryResponse } from \"../response/password-history.response\";\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/policy.response\";\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/profile-provider.response\";\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/secure-note.api\";\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 { SendFileApi } from \"../api/send-file.api\";\n\nexport class SendFileData {\n id: string;\n fileName: 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.size = data.size;\n this.sizeName = data.sizeName;\n }\n}\n","import { SendTextApi } from \"../api/send-text.api\";\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 { SendType } from \"../../enums/sendType\";\nimport { SendResponse } from \"../response/send.response\";\n\nimport { SendFileData } from \"./send-file.data\";\nimport { SendTextData } from \"./send-text.data\";\n\nexport class SendData {\n id: string;\n accessId: 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) {\n if (response == null) {\n return;\n }\n\n this.id = response.id;\n this.accessId = response.accessId;\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 { Jsonify } from \"type-fest\";\n\nimport {\n ServerConfigResponse,\n ThirdPartyServerConfigResponse,\n EnvironmentServerConfigResponse,\n} from \"../response/server-config.response\";\n\nexport class ServerConfigData {\n version: string;\n gitHash: string;\n server?: ThirdPartyServerConfigData;\n environment?: EnvironmentServerConfigData;\n utcDate: string;\n\n constructor(serverConfigResponse: Partial) {\n this.version = serverConfigResponse?.version;\n this.gitHash = serverConfigResponse?.gitHash;\n this.server = serverConfigResponse?.server\n ? new ThirdPartyServerConfigData(serverConfigResponse.server)\n : null;\n this.utcDate = new Date().toISOString();\n this.environment = serverConfigResponse?.environment\n ? new EnvironmentServerConfigData(serverConfigResponse.environment)\n : null;\n }\n\n static fromJSON(obj: Jsonify): ServerConfigData {\n return Object.assign(new ServerConfigData({}), obj, {\n server: obj?.server ? ThirdPartyServerConfigData.fromJSON(obj.server) : null,\n environment: obj?.environment ? EnvironmentServerConfigData.fromJSON(obj.environment) : null,\n });\n }\n}\n\nexport class ThirdPartyServerConfigData {\n name: string;\n url: string;\n\n constructor(response: Partial) {\n this.name = response.name;\n this.url = response.url;\n }\n\n static fromJSON(obj: Jsonify): ThirdPartyServerConfigData {\n return Object.assign(new ThirdPartyServerConfigData({}), obj);\n }\n}\n\nexport class EnvironmentServerConfigData {\n vault: string;\n api: string;\n identity: string;\n notifications: string;\n sso: string;\n\n constructor(response: Partial) {\n this.vault = response.vault;\n this.api = response.api;\n this.identity = response.identity;\n this.notifications = response.notifications;\n this.sso = response.sso;\n }\n\n static fromJSON(obj: Jsonify): EnvironmentServerConfigData {\n return Object.assign(new EnvironmentServerConfigData({}), obj);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { AuthenticationStatus } from \"../../enums/authenticationStatus\";\nimport { KdfType } from \"../../enums/kdfType\";\nimport { UriMatchType } from \"../../enums/uriMatchType\";\nimport { Utils } from \"../../misc/utils\";\nimport { DeepJsonify } from \"../../types/deep-jsonify\";\nimport { CipherData } from \"../data/cipher.data\";\nimport { CollectionData } from \"../data/collection.data\";\nimport { EncryptedOrganizationKeyData } from \"../data/encrypted-organization-key.data\";\nimport { EventData } from \"../data/event.data\";\nimport { FolderData } from \"../data/folder.data\";\nimport { OrganizationData } from \"../data/organization.data\";\nimport { PolicyData } from \"../data/policy.data\";\nimport { ProviderData } from \"../data/provider.data\";\nimport { SendData } from \"../data/send.data\";\nimport { ServerConfigData } from \"../data/server-config.data\";\nimport { CipherView } from \"../view/cipher.view\";\nimport { CollectionView } from \"../view/collection.view\";\nimport { SendView } from \"../view/send.view\";\n\nimport { EncString } from \"./enc-string\";\nimport { EnvironmentUrls } from \"./environment-urls\";\nimport { GeneratedPasswordHistory } from \"./generated-password-history\";\nimport { Policy } from \"./policy\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class EncryptionPair {\n encrypted?: TEncrypted;\n decrypted?: TDecrypted;\n\n toJSON() {\n return {\n encrypted: this.encrypted,\n decrypted:\n this.decrypted instanceof ArrayBuffer\n ? Utils.fromBufferToByteString(this.decrypted)\n : this.decrypted,\n };\n }\n\n static fromJSON(\n obj: { encrypted?: Jsonify; decrypted?: string | Jsonify },\n decryptedFromJson?: (decObj: Jsonify | string) => TDecrypted,\n encryptedFromJson?: (encObj: Jsonify) => TEncrypted\n ) {\n if (obj == null) {\n return null;\n }\n\n const pair = new EncryptionPair();\n if (obj?.encrypted != null) {\n pair.encrypted = encryptedFromJson\n ? encryptedFromJson(obj.encrypted)\n : (obj.encrypted as TEncrypted);\n }\n if (obj?.decrypted != null) {\n pair.decrypted = decryptedFromJson\n ? decryptedFromJson(obj.decrypted)\n : (obj.decrypted as TDecrypted);\n }\n return pair;\n }\n}\n\nexport class DataEncryptionPair {\n encrypted?: { [id: string]: TEncrypted };\n decrypted?: TDecrypted[];\n}\n\n// This is a temporary structure to handle migrated `DataEncryptionPair` to\n// avoid needing a data migration at this stage. It should be replaced with\n// proper data migrations when `DataEncryptionPair` is deprecated.\nexport class TemporaryDataEncryption {\n encrypted?: { [id: string]: TEncrypted };\n}\n\nexport class AccountData {\n ciphers?: DataEncryptionPair = new DataEncryptionPair<\n CipherData,\n CipherView\n >();\n folders? = new TemporaryDataEncryption();\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<\n { [orgId: string]: EncryptedOrganizationKeyData },\n Record\n > = new EncryptionPair<\n { [orgId: string]: EncryptedOrganizationKeyData },\n Record\n >();\n providerKeys?: EncryptionPair> = new EncryptionPair<\n any,\n Record\n >();\n privateKey?: EncryptionPair = new EncryptionPair();\n publicKey?: ArrayBuffer;\n apiKeyClientSecret?: string;\n\n toJSON() {\n return Utils.merge(this, {\n publicKey: Utils.fromBufferToByteString(this.publicKey),\n });\n }\n\n static fromJSON(obj: DeepJsonify): AccountKeys {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(\n new AccountKeys(),\n { cryptoMasterKey: SymmetricCryptoKey.fromJSON(obj?.cryptoMasterKey) },\n {\n cryptoSymmetricKey: EncryptionPair.fromJSON(\n obj?.cryptoSymmetricKey,\n SymmetricCryptoKey.fromJSON\n ),\n },\n { organizationKeys: AccountKeys.initRecordEncryptionPairsFromJSON(obj?.organizationKeys) },\n { providerKeys: AccountKeys.initRecordEncryptionPairsFromJSON(obj?.providerKeys) },\n {\n privateKey: EncryptionPair.fromJSON(\n obj?.privateKey,\n (decObj: string) => Utils.fromByteStringToArray(decObj).buffer\n ),\n },\n {\n publicKey: Utils.fromByteStringToArray(obj?.publicKey)?.buffer,\n }\n );\n }\n\n static initRecordEncryptionPairsFromJSON(obj: any) {\n return EncryptionPair.fromJSON(obj, (decObj: any) => {\n if (obj == null) {\n return null;\n }\n\n const record: Record = {};\n for (const id in decObj) {\n record[id] = SymmetricCryptoKey.fromJSON(decObj[id]);\n }\n return record;\n });\n }\n}\n\nexport class AccountProfile {\n apiKeyClientId?: string;\n authenticationStatus?: AuthenticationStatus;\n convertAccountToKeyConnector?: boolean;\n name?: string;\n email?: string;\n emailVerified?: boolean;\n entityId?: string;\n entityType?: string;\n everBeenUnlocked?: boolean;\n forcePasswordReset?: boolean;\n hasPremiumPersonally?: boolean;\n hasPremiumFromOrganization?: boolean;\n lastSync?: string;\n userId?: string;\n usesKeyConnector?: boolean;\n keyHash?: string;\n kdfIterations?: number;\n kdfType?: KdfType;\n\n static fromJSON(obj: Jsonify): AccountProfile {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new AccountProfile(), obj);\n }\n}\n\nexport class AccountSettings {\n autoConfirmFingerPrints?: boolean;\n autoFillOnPageLoadDefault?: 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 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?: AccountSettingsSettings; // TODO: Merge whatever is going on here into the AccountSettings model properly\n vaultTimeout?: number;\n vaultTimeoutAction?: string = \"lock\";\n serverConfig?: ServerConfigData;\n avatarColor?: string;\n\n static fromJSON(obj: Jsonify): AccountSettings {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new AccountSettings(), obj, {\n environmentUrls: EnvironmentUrls.fromJSON(obj?.environmentUrls),\n pinProtected: EncryptionPair.fromJSON(\n obj?.pinProtected,\n EncString.fromJSON\n ),\n serverConfig: ServerConfigData.fromJSON(obj?.serverConfig),\n });\n }\n}\n\nexport type AccountSettingsSettings = {\n equivalentDomains?: string[][];\n};\n\nexport class AccountTokens {\n accessToken?: string;\n refreshToken?: string;\n securityStamp?: string;\n\n static fromJSON(obj: Jsonify): AccountTokens {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new AccountTokens(), obj);\n }\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 static fromJSON(json: Jsonify): Account {\n if (json == null) {\n return null;\n }\n\n return Object.assign(new Account({}), json, {\n keys: AccountKeys.fromJSON(json?.keys),\n profile: AccountProfile.fromJSON(json?.profile),\n settings: AccountSettings.fromJSON(json?.settings),\n tokens: AccountTokens.fromJSON(json?.tokens),\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { Utils } from \"../../misc/utils\";\nimport { AttachmentData } from \"../data/attachment.data\";\nimport { AttachmentView } from \"../view/attachment.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class Attachment extends Domain {\n id: string;\n url: string;\n size: string;\n sizeName: string; // Readable size, ex: \"4.2 KB\" or \"1.43 GB\"\n key: EncString;\n fileName: EncString;\n\n constructor(obj?: AttachmentData) {\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 [\"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 view.key = await this.decryptAttachmentKey(orgId, encKey);\n }\n\n return view;\n }\n\n private async decryptAttachmentKey(orgId: string, encKey?: SymmetricCryptoKey) {\n try {\n if (encKey == null) {\n encKey = await this.getKeyForDecryption(orgId);\n }\n\n const encryptService = Utils.getContainerService().getEncryptService();\n const decValue = await encryptService.decryptToBytes(this.key, encKey);\n return new SymmetricCryptoKey(decValue);\n } catch (e) {\n // TODO: error?\n }\n }\n\n private async getKeyForDecryption(orgId: string) {\n const cryptoService = Utils.getContainerService().getCryptoService();\n return orgId != null\n ? await cryptoService.getOrgKey(orgId)\n : await cryptoService.getKeyForUserEncryption();\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 static fromJSON(obj: Partial>): Attachment {\n if (obj == null) {\n return null;\n }\n\n const key = EncString.fromJSON(obj.key);\n const fileName = EncString.fromJSON(obj.fileName);\n\n return Object.assign(new Attachment(), obj, {\n key,\n fileName,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { CardData } from \"../data/card.data\";\nimport { CardView } from \"../view/card.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\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) {\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 []\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 static fromJSON(obj: Partial>): Card {\n if (obj == null) {\n return null;\n }\n\n const cardholderName = EncString.fromJSON(obj.cardholderName);\n const brand = EncString.fromJSON(obj.brand);\n const number = EncString.fromJSON(obj.number);\n const expMonth = EncString.fromJSON(obj.expMonth);\n const expYear = EncString.fromJSON(obj.expYear);\n const code = EncString.fromJSON(obj.code);\n return Object.assign(new Card(), obj, {\n cardholderName,\n brand,\n number,\n expMonth,\n expYear,\n code,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { Decryptable } from \"../../interfaces/decryptable.interface\";\nimport { InitializerKey } from \"../../services/cryptography/initializer-key\";\nimport { CipherData } from \"../data/cipher.data\";\nimport { LocalData } from \"../data/local.data\";\nimport { CipherView } from \"../view/cipher.view\";\n\nimport { Attachment } from \"./attachment\";\nimport { Card } from \"./card\";\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { Field } from \"./field\";\nimport { Identity } from \"./identity\";\nimport { Login } from \"./login\";\nimport { Password } from \"./password\";\nimport { SecureNote } from \"./secure-note\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class Cipher extends Domain implements Decryptable {\n readonly initializerKey = InitializerKey.Cipher;\n\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: LocalData;\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 creationDate: Date;\n deletedDate: Date;\n reprompt: CipherRepromptType;\n\n constructor(obj?: CipherData, localData: LocalData = null) {\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 folderId: null,\n name: null,\n notes: null,\n },\n [\"id\", \"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.creationDate = obj.creationDate != null ? new Date(obj.creationDate) : null;\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);\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);\n break;\n case CipherType.Identity:\n this.identity = new Identity(obj.identity);\n break;\n default:\n break;\n }\n\n if (obj.attachments != null) {\n this.attachments = obj.attachments.map((a) => new Attachment(a));\n } else {\n this.attachments = null;\n }\n\n if (obj.fields != null) {\n this.fields = obj.fields.map((f) => new Field(f));\n } else {\n this.fields = null;\n }\n\n if (obj.passwordHistory != null) {\n this.passwordHistory = obj.passwordHistory.map((ph) => new Password(ph));\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(): CipherData {\n const c = new CipherData();\n c.id = this.id;\n c.organizationId = this.organizationId;\n c.folderId = this.folderId;\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.creationDate = this.creationDate != null ? this.creationDate.toISOString() : null;\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 static fromJSON(obj: Jsonify) {\n if (obj == null) {\n return null;\n }\n\n const domain = new Cipher();\n const name = EncString.fromJSON(obj.name);\n const notes = EncString.fromJSON(obj.notes);\n const revisionDate = obj.revisionDate == null ? null : new Date(obj.revisionDate);\n const deletedDate = obj.deletedDate == null ? null : new Date(obj.deletedDate);\n const attachments = obj.attachments?.map((a: any) => Attachment.fromJSON(a));\n const fields = obj.fields?.map((f: any) => Field.fromJSON(f));\n const passwordHistory = obj.passwordHistory?.map((ph: any) => Password.fromJSON(ph));\n\n Object.assign(domain, obj, {\n name,\n notes,\n revisionDate,\n deletedDate,\n attachments,\n fields,\n passwordHistory,\n });\n\n switch (obj.type) {\n case CipherType.Card:\n domain.card = Card.fromJSON(obj.card);\n break;\n case CipherType.Identity:\n domain.identity = Identity.fromJSON(obj.identity);\n break;\n case CipherType.Login:\n domain.login = Login.fromJSON(obj.login);\n break;\n case CipherType.SecureNote:\n domain.secureNote = SecureNote.fromJSON(obj.secureNote);\n break;\n default:\n break;\n }\n\n return domain;\n }\n}\n","import { CollectionData } from \"../data/collection.data\";\nimport { CollectionView } from \"../view/collection.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\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) {\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 [\"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","import { View } from \"../view/view\";\n\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport default class Domain {\n protected buildDomainModel(\n domain: D,\n dataObj: any,\n map: any,\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 (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","import { EncryptionType } from \"../../enums/encryptionType\";\nimport { IEncrypted } from \"../../interfaces/IEncrypted\";\nimport { Utils } from \"../../misc/utils\";\n\nconst ENC_TYPE_LENGTH = 1;\nconst IV_LENGTH = 16;\nconst MAC_LENGTH = 32;\nconst MIN_DATA_LENGTH = 1;\n\nexport class EncArrayBuffer implements IEncrypted {\n readonly encryptionType: EncryptionType = null;\n readonly dataBytes: ArrayBuffer = null;\n readonly ivBytes: ArrayBuffer = null;\n readonly macBytes: ArrayBuffer = null;\n\n constructor(readonly buffer: ArrayBuffer) {\n const encBytes = new Uint8Array(buffer);\n const encType = encBytes[0];\n\n switch (encType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64: {\n const minimumLength = ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH + MIN_DATA_LENGTH;\n if (encBytes.length < minimumLength) {\n this.throwDecryptionError();\n }\n\n this.ivBytes = encBytes.slice(ENC_TYPE_LENGTH, ENC_TYPE_LENGTH + IV_LENGTH).buffer;\n this.macBytes = encBytes.slice(\n ENC_TYPE_LENGTH + IV_LENGTH,\n ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH\n ).buffer;\n this.dataBytes = encBytes.slice(ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH).buffer;\n break;\n }\n case EncryptionType.AesCbc256_B64: {\n const minimumLength = ENC_TYPE_LENGTH + IV_LENGTH + MIN_DATA_LENGTH;\n if (encBytes.length < minimumLength) {\n this.throwDecryptionError();\n }\n\n this.ivBytes = encBytes.slice(ENC_TYPE_LENGTH, ENC_TYPE_LENGTH + IV_LENGTH).buffer;\n this.dataBytes = encBytes.slice(ENC_TYPE_LENGTH + IV_LENGTH).buffer;\n break;\n }\n default:\n this.throwDecryptionError();\n }\n\n this.encryptionType = encType;\n }\n\n private throwDecryptionError() {\n throw new Error(\n \"Error parsing encrypted ArrayBuffer: data is corrupted or has an invalid format.\"\n );\n }\n\n static async fromResponse(response: {\n arrayBuffer: () => Promise;\n }): Promise {\n const buffer = await response.arrayBuffer();\n if (buffer == null) {\n throw new Error(\"Cannot create EncArrayBuffer from Response - Response is empty\");\n }\n return new EncArrayBuffer(buffer);\n }\n\n static fromB64(b64: string) {\n const buffer = Utils.fromB64ToArray(b64).buffer;\n return new EncArrayBuffer(buffer);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { EncryptionType } from \"../../enums/encryptionType\";\nimport { IEncrypted } from \"../../interfaces/IEncrypted\";\nimport { Utils } from \"../../misc/utils\";\n\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class EncString implements IEncrypted {\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 this.initFromData(encryptedStringOrType as EncryptionType, data, iv, mac);\n } else {\n this.initFromEncryptedString(encryptedStringOrType as string);\n }\n }\n\n get ivBytes(): ArrayBuffer {\n return this.iv == null ? null : Utils.fromB64ToArray(this.iv).buffer;\n }\n\n get macBytes(): ArrayBuffer {\n return this.mac == null ? null : Utils.fromB64ToArray(this.mac).buffer;\n }\n\n get dataBytes(): ArrayBuffer {\n return this.data == null ? null : Utils.fromB64ToArray(this.data).buffer;\n }\n\n toJSON() {\n return this.encryptedString;\n }\n\n static fromJSON(obj: Jsonify): EncString {\n if (obj == null) {\n return null;\n }\n\n return new EncString(obj);\n }\n\n private initFromData(encType: EncryptionType, data: string, iv: string, mac: string) {\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\n private initFromEncryptedString(encryptedString: string) {\n this.encryptedString = encryptedString as string;\n if (!this.encryptedString) {\n return;\n }\n\n const { encType, encPieces } = this.parseEncryptedString(this.encryptedString);\n this.encryptionType = encType;\n\n switch (encType) {\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 private parseEncryptedString(encryptedString: string): {\n encType: EncryptionType;\n encPieces: string[];\n } {\n const headerPieces = encryptedString.split(\".\");\n let encType: EncryptionType;\n let encPieces: string[] = null;\n\n if (headerPieces.length === 2) {\n try {\n encType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split(\"|\");\n } catch (e) {\n return;\n }\n } else {\n encPieces = encryptedString.split(\"|\");\n encType =\n encPieces.length === 3\n ? EncryptionType.AesCbc128_HmacSha256_B64\n : EncryptionType.AesCbc256_B64;\n }\n\n return {\n encType,\n encPieces,\n };\n }\n\n async decrypt(orgId: string, key: SymmetricCryptoKey = null): Promise {\n if (this.decryptedValue != null) {\n return this.decryptedValue;\n }\n\n try {\n if (key == null) {\n key = await this.getKeyForDecryption(orgId);\n }\n if (key == null) {\n throw new Error(\"No key to decrypt EncString with orgId \" + orgId);\n }\n\n const encryptService = Utils.getContainerService().getEncryptService();\n this.decryptedValue = await encryptService.decryptToUtf8(this, key);\n } catch (e) {\n this.decryptedValue = \"[error: cannot decrypt]\";\n }\n return this.decryptedValue;\n }\n\n private async getKeyForDecryption(orgId: string) {\n const cryptoService = Utils.getContainerService().getCryptoService();\n return orgId != null\n ? await cryptoService.getOrgKey(orgId)\n : await cryptoService.getKeyForUserEncryption();\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nexport 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 static fromJSON(obj: Jsonify): EnvironmentUrls {\n return Object.assign(new EnvironmentUrls(), obj);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { FieldData } from \"../data/field.data\";\nimport { FieldView } from \"../view/field.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class Field extends Domain {\n name: EncString;\n value: EncString;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(obj?: FieldData) {\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 []\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 static fromJSON(obj: Partial>): Field {\n if (obj == null) {\n return null;\n }\n\n const name = EncString.fromJSON(obj.name);\n const value = EncString.fromJSON(obj.value);\n\n return Object.assign(new Field(), obj, {\n name,\n value,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { FolderData } from \"../data/folder.data\";\nimport { FolderView } from \"../view/folder.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\n\nexport class Folder extends Domain {\n id: string;\n name: EncString;\n revisionDate: Date;\n\n constructor(obj?: FolderData) {\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 [\"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 static fromJSON(obj: Jsonify) {\n const revisionDate = obj.revisionDate == null ? null : new Date(obj.revisionDate);\n return Object.assign(new Folder(), obj, { name: EncString.fromJSON(obj.name), revisionDate });\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 { Jsonify } from \"type-fest\";\n\nimport { IdentityData } from \"../data/identity.data\";\nimport { IdentityView } from \"../view/identity.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\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) {\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 []\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 static fromJSON(obj: Jsonify): Identity {\n if (obj == null) {\n return null;\n }\n\n const title = EncString.fromJSON(obj.title);\n const firstName = EncString.fromJSON(obj.firstName);\n const middleName = EncString.fromJSON(obj.middleName);\n const lastName = EncString.fromJSON(obj.lastName);\n const address1 = EncString.fromJSON(obj.address1);\n const address2 = EncString.fromJSON(obj.address2);\n const address3 = EncString.fromJSON(obj.address3);\n const city = EncString.fromJSON(obj.city);\n const state = EncString.fromJSON(obj.state);\n const postalCode = EncString.fromJSON(obj.postalCode);\n const country = EncString.fromJSON(obj.country);\n const company = EncString.fromJSON(obj.company);\n const email = EncString.fromJSON(obj.email);\n const phone = EncString.fromJSON(obj.phone);\n const ssn = EncString.fromJSON(obj.ssn);\n const username = EncString.fromJSON(obj.username);\n const passportNumber = EncString.fromJSON(obj.passportNumber);\n const licenseNumber = EncString.fromJSON(obj.licenseNumber);\n\n return Object.assign(new Identity(), obj, {\n title,\n firstName,\n middleName,\n lastName,\n address1,\n address2,\n address3,\n city,\n state,\n postalCode,\n country,\n company,\n email,\n phone,\n ssn,\n username,\n passportNumber,\n licenseNumber,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { UriMatchType } from \"../../enums/uriMatchType\";\nimport { LoginUriData } from \"../data/login-uri.data\";\nimport { LoginUriView } from \"../view/login-uri.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class LoginUri extends Domain {\n uri: EncString;\n match: UriMatchType;\n\n constructor(obj?: LoginUriData) {\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 []\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 match: null,\n },\n [\"match\"]\n );\n return u;\n }\n\n static fromJSON(obj: Jsonify): LoginUri {\n if (obj == null) {\n return null;\n }\n\n const uri = EncString.fromJSON(obj.uri);\n return Object.assign(new LoginUri(), obj, {\n uri,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { LoginData } from \"../data/login.data\";\nimport { LoginView } from \"../view/login.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { LoginUri } from \"./login-uri\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\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) {\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 []\n );\n\n if (obj.uris) {\n this.uris = [];\n obj.uris.forEach((u) => {\n this.uris.push(new LoginUri(u));\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 static fromJSON(obj: Partial>): Login {\n if (obj == null) {\n return null;\n }\n\n const username = EncString.fromJSON(obj.username);\n const password = EncString.fromJSON(obj.password);\n const totp = EncString.fromJSON(obj.totp);\n const passwordRevisionDate =\n obj.passwordRevisionDate == null ? null : new Date(obj.passwordRevisionDate);\n const uris = obj.uris?.map((uri: any) => LoginUri.fromJSON(uri));\n\n return Object.assign(new Login(), obj, {\n username,\n password,\n totp,\n passwordRevisionDate: passwordRevisionDate,\n uris: uris,\n });\n }\n}\n","import Domain from \"./domain-base\";\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 { Jsonify } from \"type-fest\";\n\nimport { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\nimport { OrganizationData } from \"../data/organization.data\";\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 useScim: boolean;\n useCustomPermissions: boolean;\n useResetPassword: boolean;\n useSecretsManager: 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 familySponsorshipLastSyncDate?: Date;\n familySponsorshipValidUntil?: Date;\n familySponsorshipToDelete?: boolean;\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.useScim = obj.useScim;\n this.useCustomPermissions = obj.useCustomPermissions;\n this.useResetPassword = obj.useResetPassword;\n this.useSecretsManager = obj.useSecretsManager;\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 this.familySponsorshipLastSyncDate = obj.familySponsorshipLastSyncDate;\n this.familySponsorshipValidUntil = obj.familySponsorshipValidUntil;\n this.familySponsorshipToDelete = obj.familySponsorshipToDelete;\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) && this.useEvents;\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) && this.useGroups;\n }\n\n get canManageSso() {\n return (this.isAdmin || this.permissions.manageSso) && this.useSso;\n }\n\n get canManageScim() {\n return (this.isAdmin || this.permissions.manageScim) && this.useScim;\n }\n\n get canManagePolicies() {\n return (this.isAdmin || this.permissions.managePolicies) && this.usePolicies;\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 get canManageBilling() {\n return this.isOwner && (this.isProviderUser || !this.hasProvider);\n }\n\n get hasProvider() {\n return this.providerId != null || this.providerName != null;\n }\n\n get canAccessSecretsManager() {\n return this.useSecretsManager;\n }\n\n static fromJSON(json: Jsonify) {\n if (json == null) {\n return null;\n }\n\n return Object.assign(new Organization(), json, {\n familySponsorshipLastSyncDate: new Date(json.familySponsorshipLastSyncDate),\n familySponsorshipValidUntil: new Date(json.familySponsorshipValidUntil),\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { PasswordHistoryData } from \"../data/password-history.data\";\nimport { PasswordHistoryView } from \"../view/password-history.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class Password extends Domain {\n password: EncString;\n lastUsedDate: Date;\n\n constructor(obj?: PasswordHistoryData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n password: null,\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 static fromJSON(obj: Partial>): Password {\n if (obj == null) {\n return null;\n }\n\n const password = EncString.fromJSON(obj.password);\n const lastUsedDate = obj.lastUsedDate == null ? null : new Date(obj.lastUsedDate);\n\n return Object.assign(new Password(), obj, {\n password,\n lastUsedDate,\n });\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\nimport { PolicyData } from \"../data/policy.data\";\n\nimport Domain from \"./domain-base\";\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 { Jsonify } from \"type-fest\";\n\nimport { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNoteData } from \"../data/secure-note.data\";\nimport { SecureNoteView } from \"../view/secure-note.view\";\n\nimport Domain from \"./domain-base\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\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 static fromJSON(obj: Jsonify): SecureNote {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new SecureNote(), obj);\n }\n}\n","import { SendFileData } from \"../data/send-file.data\";\nimport { SendFileView } from \"../view/send-file.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class SendFile extends Domain {\n id: string;\n size: string;\n sizeName: string;\n fileName: EncString;\n\n constructor(obj?: SendFileData) {\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 [\"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/send-text.data\";\nimport { SendTextView } from \"../view/send-text.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class SendText extends Domain {\n text: EncString;\n hidden: boolean;\n\n constructor(obj?: SendTextData) {\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 []\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 { Jsonify } from \"type-fest\";\n\nimport { 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 toJSON() {\n // The whole object is constructed from the initial key, so just store the B64 key\n return { keyB64: this.keyB64 };\n }\n\n static fromJSON(obj: Jsonify): SymmetricCryptoKey {\n if (obj == null) {\n return null;\n }\n\n const arrayBuffer = Utils.fromB64ToArray(obj.keyB64).buffer;\n return new SymmetricCryptoKey(arrayBuffer);\n }\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 zoomFactor?: number;\n}\n","import { Card as CardDomain } from \"../domain/card\";\nimport { EncString } from \"../domain/enc-string\";\nimport { CardView } from \"../view/card.view\";\n\nexport class CardExport {\n static template(): CardExport {\n const req = new CardExport();\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: CardExport, 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: CardExport, 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 { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { EncString } from \"../domain/enc-string\";\nimport { Field as FieldDomain } from \"../domain/field\";\nimport { FieldView } from \"../view/field.view\";\n\nexport class FieldExport {\n static template(): FieldExport {\n const req = new FieldExport();\n req.name = \"Field name\";\n req.value = \"Some value\";\n req.type = FieldType.Text;\n return req;\n }\n\n static toView(req: FieldExport, 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: FieldExport, 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/enc-string\";\nimport { Identity as IdentityDomain } from \"../domain/identity\";\nimport { IdentityView } from \"../view/identity.view\";\n\nexport class IdentityExport {\n static template(): IdentityExport {\n const req = new IdentityExport();\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: IdentityExport, 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: IdentityExport, 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 { UriMatchType } from \"../../enums/uriMatchType\";\nimport { EncString } from \"../domain/enc-string\";\nimport { LoginUri as LoginUriDomain } from \"../domain/login-uri\";\nimport { LoginUriView } from \"../view/login-uri.view\";\n\nexport class LoginUriExport {\n static template(): LoginUriExport {\n const req = new LoginUriExport();\n req.uri = \"https://google.com\";\n req.match = null;\n return req;\n }\n\n static toView(req: LoginUriExport, view = new LoginUriView()) {\n view.uri = req.uri;\n view.match = req.match;\n return view;\n }\n\n static toDomain(req: LoginUriExport, 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 { EncString } from \"../domain/enc-string\";\nimport { Login as LoginDomain } from \"../domain/login\";\nimport { LoginView } from \"../view/login.view\";\n\nimport { LoginUriExport } from \"./login-uri.export\";\n\nexport class LoginExport {\n static template(): LoginExport {\n const req = new LoginExport();\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: LoginExport, view = new LoginView()) {\n if (req.uris != null) {\n view.uris = req.uris.map((u) => LoginUriExport.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: LoginExport, domain = new LoginDomain()) {\n if (req.uris != null) {\n domain.uris = req.uris.map((u) => LoginUriExport.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: LoginUriExport[];\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 LoginUriExport(u));\n } else {\n this.uris = o.uris.map((u) => new LoginUriExport(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 { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNote as SecureNoteDomain } from \"../domain/secure-note\";\nimport { SecureNoteView } from \"../view/secure-note.view\";\n\nexport class SecureNoteExport {\n static template(): SecureNoteExport {\n const req = new SecureNoteExport();\n req.type = SecureNoteType.Generic;\n return req;\n }\n\n static toView(req: SecureNoteExport, view = new SecureNoteView()) {\n view.type = req.type;\n return view;\n }\n\n static toDomain(req: SecureNoteExport, 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 { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { Cipher as CipherDomain } from \"../domain/cipher\";\nimport { EncString } from \"../domain/enc-string\";\nimport { CipherView } from \"../view/cipher.view\";\n\nimport { CardExport } from \"./card.export\";\nimport { FieldExport } from \"./field.export\";\nimport { IdentityExport } from \"./identity.export\";\nimport { LoginExport } from \"./login.export\";\nimport { SecureNoteExport } from \"./secure-note.export\";\n\nexport class CipherExport {\n static template(): CipherExport {\n const req = new CipherExport();\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: CipherExport, 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) => FieldExport.toView(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n view.login = LoginExport.toView(req.login);\n break;\n case CipherType.SecureNote:\n view.secureNote = SecureNoteExport.toView(req.secureNote);\n break;\n case CipherType.Card:\n view.card = CardExport.toView(req.card);\n break;\n case CipherType.Identity:\n view.identity = IdentityExport.toView(req.identity);\n break;\n }\n\n return view;\n }\n\n static toDomain(req: CipherExport, 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) => FieldExport.toDomain(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n domain.login = LoginExport.toDomain(req.login);\n break;\n case CipherType.SecureNote:\n domain.secureNote = SecureNoteExport.toDomain(req.secureNote);\n break;\n case CipherType.Card:\n domain.card = CardExport.toDomain(req.card);\n break;\n case CipherType.Identity:\n domain.identity = IdentityExport.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: FieldExport[];\n login: LoginExport;\n secureNote: SecureNoteExport;\n card: CardExport;\n identity: IdentityExport;\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 FieldExport(f));\n } else {\n this.fields = o.fields.map((f) => new FieldExport(f));\n }\n }\n\n switch (o.type) {\n case CipherType.Login:\n this.login = new LoginExport(o.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteExport(o.secureNote);\n break;\n case CipherType.Card:\n this.card = new CardExport(o.card);\n break;\n case CipherType.Identity:\n this.identity = new IdentityExport(o.identity);\n break;\n }\n }\n}\n","import { Cipher as CipherDomain } from \"../domain/cipher\";\nimport { CipherView } from \"../view/cipher.view\";\n\nimport { CipherExport } from \"./cipher.export\";\n\nexport class CipherWithIdExport extends CipherExport {\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/enc-string\";\nimport { CollectionView } from \"../view/collection.view\";\n\nexport class CollectionExport {\n static template(): CollectionExport {\n const req = new CollectionExport();\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: CollectionExport, 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: CollectionExport, 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/collection.view\";\n\nimport { CollectionExport } from \"./collection.export\";\n\nexport class CollectionWithIdExport extends CollectionExport {\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 { EncString } from \"../domain/enc-string\";\nimport { Folder as FolderDomain } from \"../domain/folder\";\nimport { FolderView } from \"../view/folder.view\";\n\nexport class FolderExport {\n static template(): FolderExport {\n const req = new FolderExport();\n req.name = \"Folder name\";\n return req;\n }\n\n static toView(req: FolderExport, view = new FolderView()) {\n view.name = req.name;\n return view;\n }\n\n static toDomain(req: FolderExport, 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/folder.view\";\n\nimport { FolderExport } from \"./folder.export\";\n\nexport class FolderWithIdExport extends FolderExport {\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","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 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 \"./cipher.request\";\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 { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipher.request\";\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","export class AttachmentRequest {\n fileName: string;\n key: string;\n fileSize: number;\n adminRequest: boolean;\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { CardApi } from \"../api/card.api\";\nimport { FieldApi } from \"../api/field.api\";\nimport { IdentityApi } from \"../api/identity.api\";\nimport { LoginUriApi } from \"../api/login-uri.api\";\nimport { LoginApi } from \"../api/login.api\";\nimport { SecureNoteApi } from \"../api/secure-note.api\";\nimport { Cipher } from \"../domain/cipher\";\n\nimport { AttachmentRequest } from \"./attachment.request\";\nimport { PasswordHistoryRequest } from \"./password-history.request\";\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 { Collection } from \"../domain/collection\";\n\nimport { SelectionReadOnlyRequest } from \"./selection-read-only.request\";\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","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 { TwoFactorProviderType } from \"../../../enums/twoFactorProviderType\";\n\nexport class TokenTwoFactorRequest {\n constructor(\n public provider: TwoFactorProviderType = null,\n public token: string = null,\n public remember: boolean = false\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","import { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\n\nimport { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class OrganizationApiKeyRequest extends SecretVerificationRequest {\n type: OrganizationApiKeyType = OrganizationApiKeyType.Default;\n}\n","import { OrganizationConnectionType } from \"../../enums/organizationConnectionType\";\n\nimport { BillingSyncConfigRequest } from \"./billing-sync-config.request\";\nimport { ScimConfigRequest } from \"./scim-config.request\";\n\n/**API request config types for OrganizationConnectionRequest */\nexport type OrganizationConnectionRequestConfigs = BillingSyncConfigRequest | ScimConfigRequest;\n\nexport class OrganizationConnectionRequest {\n constructor(\n public organizationId: string,\n public type: OrganizationConnectionType,\n public enabled: boolean,\n public config: OrganizationConnectionRequestConfigs\n ) {}\n}\n","import { KeysRequest } from \"./keys.request\";\n\nexport class OrganizationKeysRequest extends KeysRequest {\n constructor(publicKey: string, encryptedPrivateKey: string) {\n super(publicKey, encryptedPrivateKey);\n }\n}\n","import { TaxInfoUpdateRequest } from \"./tax-info-update.request\";\n\nexport class OrganizationTaxInfoUpdateRequest extends TaxInfoUpdateRequest {\n taxId: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n}\n","export class SecretVerificationRequest {\n masterPasswordHash: string;\n otp: string;\n authRequestAccessCode: string;\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/send-file.api\";\nimport { SendTextApi } from \"../api/send-text.api\";\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","export class TaxInfoUpdateRequest {\n country: string;\n postalCode: string;\n}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class TwoFactorEmailRequest extends SecretVerificationRequest {\n email: string;\n deviceIdentifier: string;\n authRequestId: string;\n}\n","import { BaseResponse } from \"./base.response\";\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","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 { BaseResponse } from \"./base.response\";\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 { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CardApi } from \"../api/card.api\";\nimport { FieldApi } from \"../api/field.api\";\nimport { IdentityApi } from \"../api/identity.api\";\nimport { LoginApi } from \"../api/login.api\";\nimport { SecureNoteApi } from \"../api/secure-note.api\";\n\nimport { AttachmentResponse } from \"./attachment.response\";\nimport { BaseResponse } from \"./base.response\";\nimport { PasswordHistoryResponse } from \"./password-history.response\";\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 creationDate: 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.creationDate = this.getResponseProperty(\"CreationDate\");\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 { EmergencyAccessStatusType } from \"../../enums/emergencyAccessStatusType\";\nimport { EmergencyAccessType } from \"../../enums/emergencyAccessType\";\nimport { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./base.response\";\nimport { CipherResponse } from \"./cipher.response\";\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 \"./base.response\";\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 (status === 429) {\n this.message = \"Rate limit exceeded. Try again later.\";\n } else 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 }\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 { BaseResponse } from \"./base.response\";\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 { PolicyType } from \"../../enums/policyType\";\n\nimport { BaseResponse } from \"./base.response\";\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 { Jsonify } from \"type-fest\";\n\nimport { Attachment } from \"../domain/attachment\";\nimport { SymmetricCryptoKey } from \"../domain/symmetric-crypto-key\";\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 static fromJSON(obj: Partial>): AttachmentView {\n const key = obj.key == null ? null : SymmetricCryptoKey.fromJSON(obj.key);\n return Object.assign(new AttachmentView(), obj, { key: key });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { CardLinkedId as LinkedId } from \"../../enums/linkedIdType\";\nimport { linkedFieldOption } from \"../../misc/linkedFieldOption.decorator\";\n\nimport { ItemView } from \"./item.view\";\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 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 static fromJSON(obj: Partial>): CardView {\n return Object.assign(new CardView(), obj);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { InitializerMetadata } from \"../../interfaces/initializer-metadata.interface\";\nimport { InitializerKey } from \"../../services/cryptography/initializer-key\";\nimport { LocalData } from \"../data/local.data\";\nimport { Cipher } from \"../domain/cipher\";\n\nimport { AttachmentView } from \"./attachment.view\";\nimport { CardView } from \"./card.view\";\nimport { FieldView } from \"./field.view\";\nimport { IdentityView } from \"./identity.view\";\nimport { LoginView } from \"./login.view\";\nimport { PasswordHistoryView } from \"./password-history.view\";\nimport { SecureNoteView } from \"./secure-note.view\";\nimport { View } from \"./view\";\n\nexport class CipherView implements View, InitializerMetadata {\n readonly initializerKey = InitializerKey.CipherView;\n\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: LocalData;\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 creationDate: 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.creationDate = c.creationDate;\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 static fromJSON(obj: Partial>): CipherView {\n const view = new CipherView();\n const revisionDate = obj.revisionDate == null ? null : new Date(obj.revisionDate);\n const deletedDate = obj.deletedDate == null ? null : new Date(obj.deletedDate);\n const attachments = obj.attachments?.map((a: any) => AttachmentView.fromJSON(a));\n const fields = obj.fields?.map((f: any) => FieldView.fromJSON(f));\n const passwordHistory = obj.passwordHistory?.map((ph: any) => PasswordHistoryView.fromJSON(ph));\n\n Object.assign(view, obj, {\n revisionDate: revisionDate,\n deletedDate: deletedDate,\n attachments: attachments,\n fields: fields,\n passwordHistory: passwordHistory,\n });\n\n switch (obj.type) {\n case CipherType.Card:\n view.card = CardView.fromJSON(obj.card);\n break;\n case CipherType.Identity:\n view.identity = IdentityView.fromJSON(obj.identity);\n break;\n case CipherType.Login:\n view.login = LoginView.fromJSON(obj.login);\n break;\n case CipherType.SecureNote:\n view.secureNote = SecureNoteView.fromJSON(obj.secureNote);\n break;\n default:\n break;\n }\n\n return view;\n }\n}\n","import { Collection } from \"../domain/collection\";\nimport { ITreeNodeObject } from \"../domain/tree-node\";\nimport { CollectionGroupDetailsResponse } from \"../response/collection.response\";\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 { Jsonify } from \"type-fest\";\n\nimport { 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 static fromJSON(obj: Partial>): FieldView {\n return Object.assign(new FieldView(), obj);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { Folder } from \"../domain/folder\";\nimport { ITreeNodeObject } from \"../domain/tree-node\";\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 static fromJSON(obj: Jsonify) {\n const revisionDate = obj.revisionDate == null ? null : new Date(obj.revisionDate);\n return Object.assign(new FolderView(), obj, { revisionDate });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { IdentityLinkedId as LinkedId } from \"../../enums/linkedIdType\";\nimport { linkedFieldOption } from \"../../misc/linkedFieldOption.decorator\";\nimport { Utils } from \"../../misc/utils\";\n\nimport { ItemView } from \"./item.view\";\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 static fromJSON(obj: Partial>): IdentityView {\n return Object.assign(new IdentityView(), obj);\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 { Jsonify } from \"type-fest\";\n\nimport { UriMatchType } from \"../../enums/uriMatchType\";\nimport { Utils } from \"../../misc/utils\";\nimport { LoginUri } from \"../domain/login-uri\";\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.isNullOrWhitespace(Utils.getDomain(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.isNullOrWhitespace(Utils.getDomain(this.uri))\n ? \"http://\" + this.uri\n : this.uri;\n }\n\n static fromJSON(obj: Partial>): LoginUriView {\n return Object.assign(new LoginUriView(), obj);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { 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 \"./item.view\";\nimport { LoginUriView } from \"./login-uri.view\";\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 static fromJSON(obj: Partial>): LoginView {\n const passwordRevisionDate =\n obj.passwordRevisionDate == null ? null : new Date(obj.passwordRevisionDate);\n const uris = obj.uris?.map((uri: any) => LoginUriView.fromJSON(uri));\n\n return Object.assign(new LoginView(), obj, {\n passwordRevisionDate: passwordRevisionDate,\n uris: uris,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { 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 static fromJSON(obj: Partial>): PasswordHistoryView {\n const lastUsedDate = obj.lastUsedDate == null ? null : new Date(obj.lastUsedDate);\n\n return Object.assign(new PasswordHistoryView(), obj, {\n lastUsedDate: lastUsedDate,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNote } from \"../domain/secure-note\";\n\nimport { ItemView } from \"./item.view\";\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 static fromJSON(obj: Partial>): SecureNoteView {\n return Object.assign(new SecureNoteView(), obj);\n }\n}\n","import { DeepJsonify } from \"../../types/deep-jsonify\";\nimport { SendFile } from \"../domain/send-file\";\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 static fromJSON(json: DeepJsonify) {\n if (json == null) {\n return null;\n }\n\n return Object.assign(new SendFileView(), json);\n }\n}\n","import { DeepJsonify } from \"../../types/deep-jsonify\";\nimport { SendText } from \"../domain/send-text\";\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 static fromJSON(json: DeepJsonify) {\n if (json == null) {\n return null;\n }\n\n return Object.assign(new SendTextView(), json);\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { Utils } from \"../../misc/utils\";\nimport { DeepJsonify } from \"../../types/deep-jsonify\";\nimport { Send } from \"../domain/send\";\nimport { SymmetricCryptoKey } from \"../domain/symmetric-crypto-key\";\n\nimport { SendFileView } from \"./send-file.view\";\nimport { SendTextView } from \"./send-text.view\";\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 toJSON() {\n return Utils.merge(this, {\n key: Utils.fromBufferToB64(this.key),\n });\n }\n\n static fromJSON(json: DeepJsonify) {\n if (json == null) {\n return null;\n }\n\n return Object.assign(new SendView(), json, {\n key: Utils.fromB64ToArray(json.key)?.buffer,\n cryptoKey: SymmetricCryptoKey.fromJSON(json.cryptoKey),\n text: SendTextView.fromJSON(json.text),\n file: SendFileView.fromJSON(json.file),\n revisionDate: json.revisionDate == null ? null : new Date(json.revisionDate),\n deletionDate: json.deletionDate == null ? null : new Date(json.deletionDate),\n expirationDate: json.expirationDate == null ? null : new Date(json.expirationDate),\n });\n }\n}\n","import { 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","export enum InitializerKey {\n Cipher = 0,\n CipherView = 1,\n}\n","export enum StorageLocation {\n Both = \"both\",\n Disk = \"disk\",\n Memory = \"memory\",\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { Account } from \"./account\";\nimport { GlobalState } from \"./global-state\";\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 // TODO, make Jsonify work. It currently doesn't because Globals doesn't implement Jsonify.\n static fromJSON(\n obj: any,\n accountDeserializer: (json: Jsonify) => TAccount\n ): State {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new State(null), obj, {\n accounts: State.buildAccountMapFromJSON(obj?.accounts, accountDeserializer),\n });\n }\n\n private static buildAccountMapFromJSON(\n jsonAccounts: { [userId: string]: Jsonify },\n accountDeserializer: (json: Jsonify) => TAccount\n ) {\n if (!jsonAccounts) {\n return {};\n }\n const accounts: { [userId: string]: TAccount } = {};\n for (const userId in jsonAccounts) {\n accounts[userId] = accountDeserializer(jsonAccounts[userId]);\n }\n return accounts;\n }\n}\n","import { BehaviorSubject, concatMap } from \"rxjs\";\nimport { Jsonify } from \"type-fest\";\n\nimport { LogService } from \"../abstractions/log.service\";\nimport { StateService as StateServiceAbstraction } from \"../abstractions/state.service\";\nimport { StateMigrationService } from \"../abstractions/stateMigration.service\";\nimport {\n MemoryStorageServiceInterface,\n AbstractStorageService,\n} 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 { Utils } from \"../misc/utils\";\nimport { CipherData } from \"../models/data/cipher.data\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { EncryptedOrganizationKeyData } from \"../models/data/encrypted-organization-key.data\";\nimport { EventData } from \"../models/data/event.data\";\nimport { FolderData } from \"../models/data/folder.data\";\nimport { LocalData } from \"../models/data/local.data\";\nimport { OrganizationData } from \"../models/data/organization.data\";\nimport { PolicyData } from \"../models/data/policy.data\";\nimport { ProviderData } from \"../models/data/provider.data\";\nimport { SendData } from \"../models/data/send.data\";\nimport { ServerConfigData } from \"../models/data/server-config.data\";\nimport {\n Account,\n AccountData,\n AccountSettings,\n AccountSettingsSettings,\n} from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { EnvironmentUrls } from \"../models/domain/environment-urls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generated-password-history\";\nimport { GlobalState } from \"../models/domain/global-state\";\nimport { Policy } from \"../models/domain/policy\";\nimport { State } from \"../models/domain/state\";\nimport { StorageOptions } from \"../models/domain/storage-options\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { WindowState } from \"../models/domain/window-state\";\nimport { CipherView } from \"../models/view/cipher.view\";\nimport { CollectionView } from \"../models/view/collection.view\";\nimport { SendView } from \"../models/view/send.view\";\n\nconst keys = {\n state: \"state\",\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\nconst DDG_SHARED_KEY = \"DuckDuckGoSharedKey\";\n\nexport class StateService<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> implements StateServiceAbstraction\n{\n protected accountsSubject = new BehaviorSubject<{ [userId: string]: TAccount }>({});\n accounts$ = this.accountsSubject.asObservable();\n\n protected activeAccountSubject = new BehaviorSubject(null);\n activeAccount$ = this.activeAccountSubject.asObservable();\n\n protected activeAccountUnlockedSubject = new BehaviorSubject(false);\n activeAccountUnlocked$ = this.activeAccountUnlockedSubject.asObservable();\n\n private hasBeenInited = false;\n private isRecoveredSession = false;\n\n protected accountDiskCache = new BehaviorSubject>({});\n\n // default account serializer, must be overridden by child class\n protected accountDeserializer = Account.fromJSON as (json: Jsonify) => TAccount;\n\n constructor(\n protected storageService: AbstractStorageService,\n protected secureStorageService: AbstractStorageService,\n protected memoryStorageService: AbstractStorageService & MemoryStorageServiceInterface,\n protected logService: LogService,\n protected stateMigrationService: StateMigrationService,\n protected stateFactory: StateFactory,\n protected useAccountCache: boolean = true\n ) {\n // If the account gets changed, verify the new account is unlocked\n this.activeAccountSubject\n .pipe(\n concatMap(async (userId) => {\n if (userId == null && this.activeAccountUnlockedSubject.getValue() == false) {\n return;\n } else if (userId == null) {\n this.activeAccountUnlockedSubject.next(false);\n }\n\n // FIXME: This should be refactored into AuthService or a similar service,\n // as checking for the existance of the crypto key is a low level\n // implementation detail.\n this.activeAccountUnlockedSubject.next((await this.getCryptoMasterKey()) != null);\n })\n )\n .subscribe();\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.state().then(async (state) => {\n if (state == null) {\n await this.setState(new State(this.createGlobals()));\n } else {\n this.isRecoveredSession = true;\n }\n });\n await this.initAccountState();\n this.hasBeenInited = true;\n }\n\n async initAccountState() {\n if (this.isRecoveredSession) {\n return;\n }\n\n await this.updateState(async (state) => {\n state.authenticatedAccounts =\n (await this.storageService.get(keys.authenticatedAccounts)) ?? [];\n for (const i in state.authenticatedAccounts) {\n if (i != null) {\n await this.syncAccountFromDisk(state.authenticatedAccounts[i]);\n }\n }\n const storedActiveUser = await this.storageService.get(keys.activeUserId);\n if (storedActiveUser != null) {\n state.activeUserId = storedActiveUser;\n }\n await this.pushAccounts();\n this.activeAccountSubject.next(state.activeUserId);\n\n return state;\n });\n }\n\n async syncAccountFromDisk(userId: string) {\n if (userId == null) {\n return;\n }\n await this.updateState(async (state) => {\n if (state.accounts == null) {\n state.accounts = {};\n }\n state.accounts[userId] = this.createAccount();\n const diskAccount = await this.getAccountFromDisk({ userId: userId });\n state.accounts[userId].profile = diskAccount.profile;\n return state;\n });\n }\n\n async addAccount(account: TAccount) {\n account = await this.setAccountEnvironmentUrls(account);\n await this.updateState(async (state) => {\n state.authenticatedAccounts.push(account.profile.userId);\n await this.storageService.save(keys.authenticatedAccounts, state.authenticatedAccounts);\n state.accounts[account.profile.userId] = account;\n return state;\n });\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.activeAccountSubject.next(account.profile.userId);\n }\n\n async setActiveUser(userId: string): Promise {\n this.clearDecryptedDataForActiveUser();\n await this.updateState(async (state) => {\n state.activeUserId = userId;\n await this.storageService.save(keys.activeUserId, userId);\n this.activeAccountSubject.next(state.activeUserId);\n return state;\n });\n\n await this.pushAccounts();\n }\n\n async clean(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n await this.deAuthenticateAccount(options.userId);\n if (options.userId === (await 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 (\n await this.getAccount(this.reconcileOptions(options, await 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, await this.defaultInMemoryOptions())\n );\n account.data.addEditCipherInfo = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\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 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 return (\n (await this.getHasPremiumPersonally(options)) ||\n (await this.getHasPremiumFromOrganization(options))\n );\n }\n\n async getHasPremiumPersonally(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n return account?.profile?.hasPremiumPersonally;\n }\n\n async setHasPremiumPersonally(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.hasPremiumPersonally = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getHasPremiumFromOrganization(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n\n if (account.profile?.hasPremiumFromOrganization) {\n return true;\n }\n\n // TODO: older server versions won't send the hasPremiumFromOrganization flag, so we're keeping the old logic\n // for backwards compatibility. It can be removed after everyone has upgraded.\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 setHasPremiumFromOrganization(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.hasPremiumFromOrganization = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\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 const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return account?.keys?.cryptoMasterKey;\n }\n\n async setCryptoMasterKey(value: SymmetricCryptoKey, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.cryptoMasterKey = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n\n if (options.userId == this.activeAccountSubject.getValue()) {\n const nextValue = value != null;\n\n // Avoid emitting if we are already unlocked\n if (this.activeAccountUnlockedSubject.getValue() != nextValue) {\n this.activeAccountUnlockedSubject.next(nextValue);\n }\n }\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(\n `${options.userId}${partialKeys.autoKey}`,\n options\n );\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 @withPrototypeForArrayMembers(CipherView, CipherView.fromJSON)\n async getDecryptedCiphers(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await 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, await this.defaultInMemoryOptions())\n );\n account.data.ciphers.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n @withPrototypeForArrayMembers(CollectionView)\n async getDecryptedCollections(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await 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, await this.defaultInMemoryOptions())\n );\n account.data.collections.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedCryptoSymmetricKey(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return account?.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, await this.defaultInMemoryOptions())\n );\n account.keys.cryptoSymmetricKey.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedOrganizationKeys(\n options?: StorageOptions\n ): Promise> {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return Utils.recordToMap(account?.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, await this.defaultInMemoryOptions())\n );\n account.keys.organizationKeys.decrypted = Utils.mapToRecord(value);\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n @withPrototypeForArrayMembers(GeneratedPasswordHistory)\n async getDecryptedPasswordGenerationHistory(\n options?: StorageOptions\n ): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await 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, await this.defaultInMemoryOptions())\n );\n account.data.passwordGenerationHistory.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedPinProtected(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await 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, await this.defaultInMemoryOptions())\n );\n account.settings.pinProtected.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n @withPrototypeForArrayMembers(Policy)\n async getDecryptedPolicies(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await 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, await this.defaultInMemoryOptions())\n );\n account.data.policies.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedPrivateKey(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await 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, await this.defaultInMemoryOptions())\n );\n account.keys.privateKey.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedProviderKeys(\n options?: StorageOptions\n ): Promise> {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return Utils.recordToMap(account?.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, await this.defaultInMemoryOptions())\n );\n account.keys.providerKeys.decrypted = Utils.mapToRecord(value);\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n @withPrototypeForArrayMembers(SendView)\n async getDecryptedSends(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await 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, await this.defaultInMemoryOptions())\n );\n account.data.sends.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\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 getDuckDuckGoSharedKey(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(DDG_SHARED_KEY, options);\n }\n\n async setDuckDuckGoSharedKey(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultSecureStorageOptions());\n if (options?.userId == null) {\n return;\n }\n value == null\n ? await this.secureStorageService.remove(DDG_SHARED_KEY, options)\n : await this.secureStorageService.save(DDG_SHARED_KEY, value, options);\n }\n\n async getEmail(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await 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, await this.defaultInMemoryOptions())\n );\n account.profile.email = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\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 getEnableDuckDuckGoBrowserIntegration(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableDuckDuckGoBrowserIntegration ?? false\n );\n }\n\n async setEnableDuckDuckGoBrowserIntegration(\n value: boolean,\n options?: StorageOptions\n ): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableDuckDuckGoBrowserIntegration = 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 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 @withPrototypeForObjectValues(CipherData)\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 @withPrototypeForObjectValues(CollectionData)\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 @withPrototypeForObjectValues(FolderData)\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(\n options?: StorageOptions\n ): Promise<{ [orgId: string]: EncryptedOrganizationKeyData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys?.organizationKeys.encrypted;\n }\n\n async setEncryptedOrganizationKeys(\n value: { [orgId: string]: EncryptedOrganizationKeyData },\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 @withPrototypeForArrayMembers(GeneratedPasswordHistory)\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 @withPrototypeForObjectValues(PolicyData)\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 const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n return account?.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 @withPrototypeForObjectValues(SendData)\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 ((await 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 @withPrototypeForArrayMembers(EventData)\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, await this.defaultInMemoryOptions())))\n ?.profile?.everBeenUnlocked ?? false\n );\n }\n\n async setEverBeenUnlocked(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.profile.everBeenUnlocked = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getForcePasswordReset(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())))\n ?.profile?.forcePasswordReset ?? false\n );\n }\n\n async setForcePasswordReset(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.profile.forcePasswordReset = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\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 getLocalData(options?: StorageOptions): Promise<{ [cipherId: string]: LocalData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.data?.localData;\n }\n\n async setLocalData(\n value: { [cipherId: string]: LocalData },\n options?: StorageOptions\n ): 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 getMainWindowSize(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.mainWindowSize;\n }\n\n async setMainWindowSize(value: number, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n globals.mainWindowSize = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\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 (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.organizationInvitation;\n }\n\n async setOrganizationInvitation(value: any, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n globals.organizationInvitation = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n /**\n * @deprecated Do not call this directly, use OrganizationService\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 /**\n * @deprecated Do not call this directly, use OrganizationService\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.defaultOnDiskLocalOptions()))\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.defaultOnDiskLocalOptions())\n );\n account.settings.passwordGenerationOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getUsernameGenerationOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\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.defaultOnDiskLocalOptions())\n );\n account.settings.usernameGenerationOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getGeneratorOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\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.defaultOnDiskLocalOptions())\n );\n account.settings.generatorOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\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 @withPrototypeForObjectValues(ProviderData)\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 const keys = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.keys;\n return keys?.publicKey;\n }\n\n async setPublicKey(value: ArrayBuffer, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.publicKey = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\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 (\n await this.getAccount(this.reconcileOptions(options, await 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, await this.defaultInMemoryOptions())\n );\n account.tokens.securityStamp = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\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: AccountSettingsSettings, 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 async setServerConfig(value: ServerConfigData, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.serverConfig = value;\n return await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getServerConfig(options: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.serverConfig;\n }\n\n async getAvatarColor(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.avatarColor;\n }\n\n async setAvatarColor(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.avatarColor = value;\n return await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n protected async getGlobals(options: StorageOptions): Promise {\n let globals: TGlobalState;\n if (this.useMemory(options.storageLocation)) {\n globals = await 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 async getGlobalsFromMemory(): Promise {\n return (await 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 async saveGlobalsToMemory(globals: TGlobalState): Promise {\n await this.updateState(async (state) => {\n state.globals = globals;\n return state;\n });\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 = await 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 async getAccountFromMemory(options: StorageOptions): Promise {\n return await this.state().then(async (state) => {\n if (state.accounts == null) {\n return null;\n }\n return state.accounts[await this.getUserIdFromMemory(options)];\n });\n }\n\n protected async getUserIdFromMemory(options: StorageOptions): Promise {\n return await this.state().then((state) => {\n return options?.userId != null\n ? state.accounts[options.userId]?.profile?.userId\n : state.activeUserId;\n });\n }\n\n protected async getAccountFromDisk(options: StorageOptions): Promise {\n if (options?.userId == null && (await this.state())?.activeUserId == null) {\n return null;\n }\n\n if (this.useAccountCache) {\n const cachedAccount = this.accountDiskCache.value[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 this.setDiskCache(options.userId, account);\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 this.deleteDiskCache(options.userId);\n }\n\n protected async saveAccountToMemory(account: TAccount): Promise {\n if (this.getAccountFromMemory({ userId: account.profile.userId }) !== null) {\n await this.updateState((state) => {\n return new Promise((resolve) => {\n state.accounts[account.profile.userId] = account;\n resolve(state);\n });\n });\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 await this.state().then((state) => {\n if (state.accounts == null || Object.keys(state.accounts).length < 1) {\n this.accountsSubject.next({});\n return;\n }\n\n this.accountsSubject.next(state.accounts);\n });\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 async defaultInMemoryOptions(): Promise {\n return {\n storageLocation: StorageLocation.Memory,\n userId: (await this.state()).activeUserId,\n };\n }\n\n protected async defaultOnDiskOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Session,\n userId: (await 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: (await 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: (await 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: (await 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(userId: string = null): Promise {\n userId = userId ?? (await this.state())?.activeUserId;\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(userId: string = null): Promise {\n userId = userId ?? (await this.state())?.activeUserId;\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(userId: string = null): Promise {\n userId = userId ?? (await this.state())?.activeUserId;\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 async removeAccountFromMemory(userId: string = null): Promise {\n await this.updateState(async (state) => {\n userId = userId ?? state.activeUserId;\n delete state.accounts[userId];\n\n this.deleteDiskCache(userId);\n\n return state;\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 (await this.state())?.accounts) {\n if (!(await this.getIsAuthenticated({ userId: userId }))) {\n await 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 async clearDecryptedDataForActiveUser(): Promise {\n await this.updateState(async (state) => {\n const userId = state?.activeUserId;\n if (userId != null && state?.accounts[userId]?.data != null) {\n state.accounts[userId].data = new AccountData();\n }\n\n return state;\n });\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): Promise {\n await this.setAccessToken(null, { userId: userId });\n await this.setLastActive(null, { userId: userId });\n await this.updateState(async (state) => {\n state.authenticatedAccounts = state.authenticatedAccounts.filter((id) => id !== userId);\n\n await this.storageService.save(keys.authenticatedAccounts, state.authenticatedAccounts);\n\n return state;\n });\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 const accounts = (await this.state())?.accounts;\n if (accounts == null || Object.keys(accounts).length < 1) {\n await this.setActiveUser(null);\n return;\n }\n for (const userId in 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 ? await 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 protected async state(): Promise> {\n const state = await this.memoryStorageService.get>(keys.state, {\n deserializer: (s) => State.fromJSON(s, this.accountDeserializer),\n });\n return state;\n }\n\n private async setState(state: State): Promise {\n await this.memoryStorageService.save(keys.state, state);\n }\n\n protected async updateState(\n stateUpdater: (state: State) => Promise>\n ) {\n await this.state().then(async (state) => {\n const updatedState = await stateUpdater(state);\n if (updatedState == null) {\n throw new Error(\"Attempted to update state to null value\");\n }\n\n await this.setState(updatedState);\n });\n }\n\n private setDiskCache(key: string, value: TAccount, options?: StorageOptions) {\n if (this.useAccountCache) {\n this.accountDiskCache.value[key] = value;\n this.accountDiskCache.next(this.accountDiskCache.value);\n }\n }\n\n private deleteDiskCache(key: string) {\n if (this.useAccountCache) {\n delete this.accountDiskCache.value[key];\n this.accountDiskCache.next(this.accountDiskCache.value);\n }\n }\n}\n\nfunction withPrototypeForArrayMembers(\n memberConstructor: new (...args: any[]) => T,\n memberConverter: (input: any) => T = (i) => i\n): (\n target: any,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n) => { value: (...args: any[]) => Promise } {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod = descriptor.value;\n\n return {\n value: function (...args: any[]) {\n const originalResult: Promise = originalMethod.apply(this, args);\n\n if (!(originalResult instanceof Promise)) {\n throw new Error(\n `Error applying prototype to stored value -- result is not a promise for method ${String(\n propertyKey\n )}`\n );\n }\n\n return originalResult.then((result) => {\n if (result == null) {\n return null;\n } else if (!(result instanceof Array)) {\n throw new Error(\n `Attempted to retrieve non array type from state as an array for method ${String(\n propertyKey\n )}`\n );\n } else {\n return result.map((r) => {\n return r == null ||\n r.constructor.name === memberConstructor.prototype.constructor.name\n ? r\n : memberConverter(\n Object.create(memberConstructor.prototype, Object.getOwnPropertyDescriptors(r))\n );\n });\n }\n });\n },\n };\n };\n}\n\nfunction withPrototypeForObjectValues(\n valuesConstructor: new (...args: any[]) => T,\n valuesConverter: (input: any) => T = (i) => i\n): (\n target: any,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n) => { value: (...args: any[]) => Promise<{ [key: string]: T }> } {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod = descriptor.value;\n\n return {\n value: function (...args: any[]) {\n const originalResult: Promise<{ [key: string]: T }> = originalMethod.apply(this, args);\n\n if (!(originalResult instanceof Promise)) {\n throw new Error(\n `Error applying prototype to stored value -- result is not a promise for method ${String(\n propertyKey\n )}`\n );\n }\n\n return originalResult.then((result) => {\n if (result == null) {\n return null;\n } else {\n for (const [key, val] of Object.entries(result)) {\n result[key] =\n val == null || val.constructor.name === valuesConstructor.prototype.constructor.name\n ? valuesConverter(val)\n : valuesConverter(\n Object.create(\n valuesConstructor.prototype,\n Object.getOwnPropertyDescriptors(val)\n )\n );\n }\n\n return result as { [key: string]: T };\n }\n });\n },\n };\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/identity-two-factor.response\";\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 { Component, Input, OnChanges } from \"@angular/core\";\nimport { DomSanitizer, SafeResourceUrl } from \"@angular/platform-browser\";\n\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\ntype SizeTypes = \"xlarge\" | \"large\" | \"default\" | \"small\" | \"xsmall\";\n\nconst SizeClasses: Record = {\n xlarge: [\"tw-h-24\", \"tw-w-24\"],\n large: [\"tw-h-16\", \"tw-w-16\"],\n default: [\"tw-h-10\", \"tw-w-10\"],\n small: [\"tw-h-7\", \"tw-w-7\"],\n xsmall: [\"tw-h-6\", \"tw-w-6\"],\n};\n\n@Component({\n selector: \"bit-avatar\",\n template: ``,\n})\nexport class AvatarComponent implements OnChanges {\n @Input() border = false;\n @Input() color?: string;\n @Input() id?: string;\n @Input() text?: string;\n @Input() title: string;\n @Input() size: SizeTypes = \"default\";\n\n private svgCharCount = 2;\n private svgFontSize = 20;\n private svgFontWeight = 300;\n private svgSize = 48;\n src: SafeResourceUrl;\n\n constructor(public sanitizer: DomSanitizer) {}\n\n ngOnChanges() {\n this.generate();\n }\n\n get classList() {\n return [\"tw-rounded-full\"]\n .concat(SizeClasses[this.size] ?? [])\n .concat(this.border ? [\"tw-border\", \"tw-border-solid\", \"tw-border-secondary-500\"] : []);\n }\n\n private generate() {\n let chars: string = null;\n const upperCaseText = this.text?.toUpperCase() ?? \"\";\n\n chars = this.getFirstLetters(upperCaseText, this.svgCharCount);\n\n if (chars == null) {\n chars = this.unicodeSafeSubstring(upperCaseText, this.svgCharCount);\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 let svg: HTMLElement;\n let hexColor = this.color;\n\n if (!Utils.isNullOrWhitespace(this.color)) {\n svg = this.createSvgElement(this.svgSize, hexColor);\n } else if (!Utils.isNullOrWhitespace(this.id)) {\n hexColor = Utils.stringToColor(this.id.toString());\n svg = this.createSvgElement(this.svgSize, hexColor);\n } else {\n hexColor = Utils.stringToColor(upperCaseText);\n svg = this.createSvgElement(this.svgSize, hexColor);\n }\n\n const charObj = this.createTextElement(chars, hexColor);\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 = this.sanitizer.bypassSecurityTrustResourceUrl(\n \"data:image/svg+xml;base64,\" + svgHtml\n );\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 createSvgElement(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 createTextElement(character: string, color: 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\", Utils.pickTextColorBasedOnBgColor(color, 135, true));\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.svgFontWeight.toString();\n textTag.style.fontSize = this.svgFontSize + \"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 { Directive, ElementRef, HostBinding, Input } from \"@angular/core\";\n\nexport type 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[bitBadge], a[bitBadge], button[bitBadge]\",\n})\nexport class BadgeDirective {\n @HostBinding(\"class\") get classList() {\n return [\n \"tw-inline\",\n \"tw-py-0.5\",\n \"tw-px-1.5\",\n \"tw-font-bold\",\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.hasHoverEffects ? hoverStyles[this.badgeType] : []);\n }\n\n @Input() badgeType: BadgeTypes = \"primary\";\n\n private hasHoverEffects = false;\n\n constructor(el: ElementRef) {\n this.hasHoverEffects = el?.nativeElement?.nodeName != \"SPAN\";\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BadgeDirective } from \"./badge.directive\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [BadgeDirective],\n declarations: [BadgeDirective],\n})\nexport class BadgeModule {}\n","import { Input, HostBinding, Component } from \"@angular/core\";\n\nimport { ButtonLikeAbstraction, ButtonType } from \"../shared/button-like.abstraction\";\n\nconst focusRing = [\n \"focus-visible:tw-ring\",\n \"focus-visible:tw-ring-offset-2\",\n \"focus-visible:tw-ring-primary-700\",\n \"focus-visible:tw-z-10\",\n];\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 \"disabled:tw-bg-primary-500/60\",\n \"disabled:tw-border-primary-500/60\",\n \"disabled:!tw-text-contrast/60\",\n \"disabled:tw-bg-clip-padding\",\n ...focusRing,\n ],\n secondary: [\n \"tw-bg-transparent\",\n \"tw-border-text-muted\",\n \"!tw-text-muted\",\n \"hover:tw-bg-text-muted\",\n \"hover:tw-border-text-muted\",\n \"hover:!tw-text-contrast\",\n \"disabled:tw-bg-transparent\",\n \"disabled:tw-border-text-muted/60\",\n \"disabled:!tw-text-muted/60\",\n ...focusRing,\n ],\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 \"disabled:tw-bg-transparent\",\n \"disabled:tw-border-danger-500/60\",\n \"disabled:!tw-text-danger/60\",\n ...focusRing,\n ],\n unstyled: [],\n};\n\n@Component({\n selector: \"button[bitButton], a[bitButton]\",\n templateUrl: \"button.component.html\",\n providers: [{ provide: ButtonLikeAbstraction, useExisting: ButtonComponent }],\n})\nexport class ButtonComponent implements ButtonLikeAbstraction {\n @HostBinding(\"class\") get classList() {\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 \"focus:tw-outline-none\",\n ]\n .concat(\n this.block == null || this.block === false ? [\"tw-inline-block\"] : [\"tw-w-full\", \"tw-block\"]\n )\n .concat(buttonStyles[this.buttonType ?? \"secondary\"]);\n }\n\n @HostBinding(\"attr.disabled\")\n get disabledAttr() {\n const disabled = this.disabled != null && this.disabled !== false;\n return disabled || this.loading ? true : null;\n }\n\n @Input() buttonType: ButtonType;\n @Input() block?: boolean;\n\n @Input() loading = false;\n\n @Input() disabled = false;\n\n setButtonType(value: \"primary\" | \"secondary\" | \"danger\" | \"unstyled\") {\n this.buttonType = value;\n }\n}\n","\n \n \n \n \n \n \n\n","\n \n \n {{ title }}\n \n \n\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/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","import { Component, HostBinding, Input } from \"@angular/core\";\n\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\nenum CharacterType {\n Letter,\n Emoji,\n Special,\n Number,\n}\n\n@Component({\n selector: \"bit-color-password\",\n template: `\n {{ character }}\n {{\n i + 1\n }}\n `,\n})\nexport class ColorPasswordComponent {\n @Input() private password: string = null;\n @Input() showCount = false;\n\n characterStyles: Record = {\n [CharacterType.Emoji]: [],\n [CharacterType.Letter]: [\"tw-text-main\"],\n [CharacterType.Special]: [\"tw-text-danger\"],\n [CharacterType.Number]: [\"tw-text-primary-500\"],\n };\n\n @HostBinding(\"class\")\n get classList() {\n return [\"tw-min-w-0\", \"tw-whitespace-pre-wrap\", \"tw-break-all\"];\n }\n\n get passwordArray() {\n // Convert to an array to handle cases that strings have special characters, i.e.: emoji.\n return Array.from(this.password);\n }\n\n getCharacterClass(character: string) {\n const charType = this.getCharacterType(character);\n const charClass = this.characterStyles[charType].concat(\"tw-inline-flex\");\n\n if (this.showCount) {\n return charClass.concat([\n \"tw-flex-col\",\n \"tw-items-center\",\n \"tw-w-7\",\n \"tw-py-1\",\n \"odd:tw-bg-secondary-100\",\n \"even:tw-bg-background\",\n ]);\n }\n\n return charClass;\n }\n\n private getCharacterType(character: string): CharacterType {\n if (character.match(Utils.regexpEmojiPresentation)) {\n return CharacterType.Emoji;\n }\n\n if (character.match(/\\d/)) {\n return CharacterType.Number;\n }\n\n const specials = [\"&\", \"<\", \">\", \" \"];\n if (specials.includes(character) || character.match(/[^\\w ]/)) {\n return CharacterType.Special;\n }\n\n return CharacterType.Letter;\n }\n}\n","import {\n DEFAULT_DIALOG_CONFIG,\n Dialog,\n DialogConfig,\n DialogRef,\n DIALOG_SCROLL_STRATEGY,\n} from \"@angular/cdk/dialog\";\nimport { ComponentType, Overlay, OverlayContainer } from \"@angular/cdk/overlay\";\nimport {\n Inject,\n Injectable,\n Injector,\n OnDestroy,\n Optional,\n SkipSelf,\n TemplateRef,\n} from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { filter, Subject, switchMap, takeUntil } from \"rxjs\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable()\nexport class DialogService extends Dialog implements OnDestroy {\n private _destroy$ = new Subject();\n\n override open(\n componentOrTemplateRef: ComponentType | TemplateRef,\n config?: DialogConfig>\n ): DialogRef {\n config = {\n backdropClass: [\"tw-fixed\", \"tw-bg-black\", \"tw-bg-opacity-30\", \"tw-inset-0\", \"tw-z-40\"],\n ...config,\n };\n\n return super.open(componentOrTemplateRef, config);\n }\n\n constructor(\n /** Parent class constructor */\n _overlay: Overlay,\n _injector: Injector,\n @Optional() @Inject(DEFAULT_DIALOG_CONFIG) _defaultOptions: DialogConfig,\n @Optional() @SkipSelf() _parentDialog: Dialog,\n _overlayContainer: OverlayContainer,\n @Inject(DIALOG_SCROLL_STRATEGY) scrollStrategy: any,\n\n /** Not in parent class */\n @Optional() router: Router,\n @Optional() authService: AuthService\n ) {\n super(_overlay, _injector, _defaultOptions, _parentDialog, _overlayContainer, scrollStrategy);\n\n /** Close all open dialogs if the vault locks */\n if (router && authService) {\n router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n switchMap(() => authService.getAuthStatus()),\n filter((v) => v !== AuthenticationStatus.Unlocked),\n takeUntil(this._destroy$)\n )\n .subscribe(() => this.closeAll());\n }\n }\n\n override ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n super.ngOnDestroy();\n }\n}\n","import { CdkDialogContainer, DialogRef } from \"@angular/cdk/dialog\";\nimport { Directive, HostBinding, Input, OnInit, Optional } from \"@angular/core\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Directive({\n selector: \"[bitDialogTitleContainer]\",\n})\nexport class DialogTitleContainerDirective implements OnInit {\n @HostBinding(\"id\") id = `bit-dialog-title-${nextId++}`;\n\n @Input() simple = false;\n\n constructor(@Optional() private dialogRef: DialogRef) {}\n\n ngOnInit(): void {\n // Based on angular/components, licensed under MIT\n // https://github.com/angular/components/blob/14.2.0/src/material/dialog/dialog-content-directives.ts#L121-L128\n if (this.dialogRef) {\n Promise.resolve().then(() => {\n const container = this.dialogRef.containerInstance as CdkDialogContainer;\n\n if (container && !container._ariaLabelledBy) {\n container._ariaLabelledBy = this.id;\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, ContentChild, Directive } from \"@angular/core\";\n\n@Directive({ selector: \"[bit-dialog-icon]\" })\nexport class IconDirective {}\n\n@Component({\n selector: \"bit-simple-dialog\",\n templateUrl: \"./simple-dialog.component.html\",\n})\nexport class SimpleDialogComponent {\n @ContentChild(IconDirective) icon!: IconDirective;\n\n get hasIcon() {\n return this.icon != null;\n }\n}\n","import { Directive, HostBinding } from \"@angular/core\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Directive({\n selector: \"bit-hint\",\n host: {\n class: \"tw-text-muted tw-inline-block tw-mt-1\",\n },\n})\nexport class BitHintComponent {\n @HostBinding() id = `bit-hint-${nextId++}`;\n}\n","import { Directive } from \"@angular/core\";\n\n@Directive({\n selector: \"bit-label\",\n})\nexport class BitLabel {}\n","import { Component, Input } from \"@angular/core\";\nimport { AbstractControl, UntypedFormGroup } from \"@angular/forms\";\n\n@Component({\n selector: \"bit-error-summary\",\n template: ` 0\">\n {{ \"fieldsNeedAttention\" | i18n: errorString }}\n `,\n host: {\n class: \"tw-block tw-text-danger tw-mt-2\",\n \"aria-live\": \"assertive\",\n },\n})\nexport class BitErrorSummary {\n @Input()\n formGroup: UntypedFormGroup;\n\n get errorCount(): number {\n return this.getErrorCount(this.formGroup);\n }\n\n get errorString() {\n return this.errorCount.toString();\n }\n\n private getErrorCount(form: UntypedFormGroup): number {\n return Object.values(form.controls).reduce((acc: number, control: AbstractControl) => {\n if (control instanceof UntypedFormGroup) {\n return acc + this.getErrorCount(control);\n }\n\n if (control.errors == null) {\n return acc;\n }\n\n if (!control.dirty && control.untouched) {\n return acc;\n }\n\n return acc + Object.keys(control.errors).length;\n }, 0);\n }\n}\n","export type InputTypes =\n | \"text\"\n | \"password\"\n | \"number\"\n | \"datetime-local\"\n | \"email\"\n | \"checkbox\"\n | \"search\";\n\nexport abstract class BitFormFieldControl {\n ariaDescribedBy: string;\n id: string;\n labelForId: string;\n required: boolean;\n hasError: boolean;\n error: [string, any];\n type?: InputTypes;\n spellcheck?: boolean;\n focus?: () => void;\n}\n","import { Component, HostBinding, Input } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Component({\n selector: \"bit-error\",\n template: ` {{ displayError }}`,\n host: {\n class: \"tw-block tw-mt-1 tw-text-danger\",\n \"aria-live\": \"assertive\",\n },\n})\nexport class BitErrorComponent {\n @HostBinding() id = `bit-error-${nextId++}`;\n\n @Input() error: [string, any];\n\n constructor(private i18nService: I18nService) {}\n\n get displayError() {\n switch (this.error[0]) {\n case \"required\":\n return this.i18nService.t(\"inputRequired\");\n case \"email\":\n return this.i18nService.t(\"inputEmail\");\n case \"minlength\":\n return this.i18nService.t(\"inputMinLength\", this.error[1]?.requiredLength);\n case \"maxlength\":\n return this.i18nService.t(\"inputMaxLength\", this.error[1]?.requiredLength);\n default:\n // Attempt to show a custom error message.\n if (this.error[1]?.message) {\n return this.error[1]?.message;\n }\n\n return this.error;\n }\n }\n}\n","\n
\n
\n \n
\n \n
\n \n
\n
\n\n \n \n\n","import {\n AfterContentChecked,\n Component,\n ContentChild,\n ContentChildren,\n QueryList,\n ViewChild,\n} from \"@angular/core\";\n\nimport { BitHintComponent } from \"../form-control/hint.component\";\n\nimport { BitErrorComponent } from \"./error.component\";\nimport { BitFormFieldControl } from \"./form-field-control\";\nimport { BitPrefixDirective } from \"./prefix.directive\";\nimport { BitSuffixDirective } from \"./suffix.directive\";\n\n@Component({\n selector: \"bit-form-field\",\n templateUrl: \"./form-field.component.html\",\n host: {\n class: \"tw-mb-6 tw-block\",\n },\n})\nexport class BitFormFieldComponent implements AfterContentChecked {\n @ContentChild(BitFormFieldControl) input: BitFormFieldControl;\n @ContentChild(BitHintComponent) hint: BitHintComponent;\n\n @ViewChild(BitErrorComponent) error: BitErrorComponent;\n\n @ContentChildren(BitPrefixDirective) prefixChildren: QueryList;\n @ContentChildren(BitSuffixDirective) suffixChildren: QueryList;\n\n ngAfterContentChecked(): void {\n if (this.error) {\n this.input.ariaDescribedBy = this.error.id;\n } else if (this.hint) {\n this.input.ariaDescribedBy = this.hint.id;\n } else {\n this.input.ariaDescribedBy = undefined;\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../shared\";\n\nimport { FormControlComponent } from \"./form-control.component\";\nimport { BitHintComponent } from \"./hint.component\";\nimport { BitLabel } from \"./label.directive\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [FormControlComponent, BitLabel, BitHintComponent],\n exports: [FormControlComponent, BitLabel, BitHintComponent],\n})\nexport class FormControlModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BitInputDirective } from \"./input.directive\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitInputDirective],\n exports: [BitInputDirective],\n})\nexport class InputModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { NgSelectModule } from \"@ng-select/ng-select\";\n\nimport { BadgeModule } from \"../badge\";\nimport { SharedModule } from \"../shared\";\n\nimport { MultiSelectComponent } from \"./multi-select.component\";\n\n@NgModule({\n imports: [CommonModule, FormsModule, NgSelectModule, BadgeModule, SharedModule],\n exports: [MultiSelectComponent],\n declarations: [MultiSelectComponent],\n})\nexport class MultiSelectModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { FormControlModule } from \"../form-control\";\nimport { BitInputDirective } from \"../input/input.directive\";\nimport { InputModule } from \"../input/input.module\";\nimport { MultiSelectComponent } from \"../multi-select/multi-select.component\";\nimport { MultiSelectModule } from \"../multi-select/multi-select.module\";\nimport { SharedModule } from \"../shared\";\n\nimport { BitErrorSummary } from \"./error-summary.component\";\nimport { BitErrorComponent } from \"./error.component\";\nimport { BitFormFieldComponent } from \"./form-field.component\";\nimport { BitPasswordInputToggleDirective } from \"./password-input-toggle.directive\";\nimport { BitPrefixDirective } from \"./prefix.directive\";\nimport { BitSuffixDirective } from \"./suffix.directive\";\n\n@NgModule({\n imports: [SharedModule, FormControlModule, InputModule, MultiSelectModule],\n declarations: [\n BitErrorComponent,\n BitErrorSummary,\n BitFormFieldComponent,\n BitPasswordInputToggleDirective,\n BitPrefixDirective,\n BitSuffixDirective,\n ],\n exports: [\n BitErrorComponent,\n BitErrorSummary,\n BitFormFieldComponent,\n BitInputDirective,\n BitPasswordInputToggleDirective,\n BitPrefixDirective,\n BitSuffixDirective,\n MultiSelectComponent,\n FormControlModule,\n ],\n})\nexport class FormFieldModule {}\n","import {\n AfterContentInit,\n Directive,\n EventEmitter,\n Host,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n Output,\n} from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\nimport { BitIconButtonComponent } from \"../icon-button/icon-button.component\";\n\nimport { BitFormFieldComponent } from \"./form-field.component\";\n\n@Directive({\n selector: \"[bitPasswordInputToggle]\",\n})\nexport class BitPasswordInputToggleDirective implements AfterContentInit, OnChanges {\n /**\n * Whether the input is toggled to show the password.\n */\n @HostBinding(\"attr.aria-pressed\") @Input() toggled = false;\n @Output() toggledChange = new EventEmitter();\n\n @HostBinding(\"attr.title\") title = this.i18nService.t(\"toggleVisibility\");\n @HostBinding(\"attr.aria-label\") label = this.i18nService.t(\"toggleVisibility\");\n\n /**\n * Click handler to toggle the state of the input type.\n */\n @HostListener(\"click\") onClick() {\n this.toggled = !this.toggled;\n this.toggledChange.emit(this.toggled);\n\n this.update();\n\n this.formField.input?.focus();\n }\n\n constructor(\n @Host() private button: BitIconButtonComponent,\n private formField: BitFormFieldComponent,\n private i18nService: I18nService\n ) {}\n\n get icon() {\n return this.toggled ? \"bwi-eye-slash\" : \"bwi-eye\";\n }\n\n ngOnChanges(): void {\n this.update();\n }\n\n ngAfterContentInit(): void {\n this.toggled = this.formField.input.type !== \"password\";\n this.button.icon = this.icon;\n }\n\n private update() {\n this.button.icon = this.icon;\n if (this.formField.input?.type != null) {\n this.formField.input.type = this.toggled ? \"text\" : \"password\";\n this.formField.input.spellcheck = this.toggled ? false : undefined;\n }\n }\n}\n","import { Directive, HostBinding, Input, OnInit, Optional } from \"@angular/core\";\n\nimport { ButtonLikeAbstraction } from \"../shared/button-like.abstraction\";\n\nexport const PrefixClasses = [\n \"tw-bg-background-alt\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-border-secondary-500\",\n \"tw-text-muted\",\n \"tw-rounded-none\",\n];\n\nexport const PrefixButtonClasses = [\n \"hover:tw-bg-text-muted\",\n \"hover:tw-text-contrast\",\n \"disabled:tw-opacity-100\",\n \"disabled:tw-bg-secondary-100\",\n \"disabled:hover:tw-bg-secondary-100\",\n \"disabled:hover:tw-text-muted\",\n \"focus-visible:tw-ring-primary-700\",\n\n \"focus-visible:tw-border-primary-700\",\n \"focus-visible:tw-ring-1\",\n \"focus-visible:tw-ring-inset\",\n \"focus-visible:tw-ring-primary-700\",\n \"focus-visible:tw-z-10\",\n];\n\nexport const PrefixStaticContentClasses = [\"tw-block\", \"tw-px-3\", \"tw-py-1.5\"];\n\n@Directive({\n selector: \"[bitPrefix]\",\n})\nexport class BitPrefixDirective implements OnInit {\n constructor(@Optional() private buttonComponent: ButtonLikeAbstraction) {}\n\n @HostBinding(\"class\") @Input() get classList() {\n return PrefixClasses.concat([\n \"tw-border-r-0\",\n \"first:tw-rounded-l\",\n\n \"focus-visible:tw-border-r\",\n \"focus-visible:tw-mr-[-1px]\",\n ]).concat(this.buttonComponent != undefined ? PrefixButtonClasses : PrefixStaticContentClasses);\n }\n\n ngOnInit(): void {\n this.buttonComponent?.setButtonType(\"unstyled\");\n }\n}\n","import { Directive, HostBinding, Input, Optional } from \"@angular/core\";\n\nimport { ButtonLikeAbstraction } from \"../shared/button-like.abstraction\";\n\nimport { PrefixButtonClasses, PrefixClasses, PrefixStaticContentClasses } from \"./prefix.directive\";\n\n@Directive({\n selector: \"[bitSuffix]\",\n})\nexport class BitSuffixDirective {\n constructor(@Optional() private buttonComponent: ButtonLikeAbstraction) {}\n\n @HostBinding(\"class\") @Input() get classList() {\n return PrefixClasses.concat([\n \"tw-border-l-0\",\n \"last:tw-rounded-r\",\n\n \"focus-visible:tw-border-l\",\n \"focus-visible:tw-ml-[-1px]\",\n ]).concat(this.buttonComponent != undefined ? PrefixButtonClasses : PrefixStaticContentClasses);\n }\n\n ngOnInit(): void {\n this.buttonComponent?.setButtonType(\"unstyled\");\n }\n}\n","import { Component, HostBinding, Input } from \"@angular/core\";\n\nimport { ButtonLikeAbstraction, ButtonType } from \"../shared/button-like.abstraction\";\n\nexport type IconButtonType = ButtonType | \"contrast\" | \"main\" | \"muted\" | \"light\";\n\nconst focusRing = [\n // Workaround for box-shadow with transparent offset issue:\n // https://github.com/tailwindlabs/tailwindcss/issues/3595\n // Remove `before:` and use regular `tw-ring` when browser no longer has bug, or better:\n // switch to `outline` with `outline-offset` when Safari supports border radius on outline.\n // Using `box-shadow` to create outlines is a hack and as such `outline` should be preferred.\n \"tw-relative\",\n \"before:tw-content-['']\",\n \"before:tw-block\",\n \"before:tw-absolute\",\n \"before:-tw-inset-[3px]\",\n \"before:tw-rounded-md\",\n \"before:tw-transition\",\n \"before:tw-ring\",\n \"before:tw-ring-transparent\",\n \"focus-visible:tw-z-10\",\n];\n\nconst styles: Record = {\n contrast: [\n \"tw-bg-transparent\",\n \"!tw-text-contrast\",\n \"tw-border-transparent\",\n \"hover:tw-bg-transparent-hover\",\n \"hover:tw-border-text-contrast\",\n \"focus-visible:before:tw-ring-text-contrast\",\n \"disabled:tw-opacity-60\",\n \"disabled:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\n ...focusRing,\n ],\n main: [\n \"tw-bg-transparent\",\n \"!tw-text-main\",\n \"tw-border-transparent\",\n \"hover:tw-bg-transparent-hover\",\n \"hover:tw-border-text-main\",\n \"focus-visible:before:tw-ring-text-main\",\n \"disabled:tw-opacity-60\",\n \"disabled:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\n ...focusRing,\n ],\n muted: [\n \"tw-bg-transparent\",\n \"!tw-text-muted\",\n \"tw-border-transparent\",\n \"hover:tw-bg-transparent-hover\",\n \"hover:tw-border-primary-700\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:tw-opacity-60\",\n \"disabled:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\n ...focusRing,\n ],\n primary: [\n \"tw-bg-primary-500\",\n \"!tw-text-contrast\",\n \"tw-border-primary-500\",\n \"hover:tw-bg-primary-700\",\n \"hover:tw-border-primary-700\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:tw-opacity-60\",\n \"disabled:hover:tw-border-primary-500\",\n \"disabled:hover:tw-bg-primary-500\",\n ...focusRing,\n ],\n secondary: [\n \"tw-bg-transparent\",\n \"!tw-text-muted\",\n \"tw-border-text-muted\",\n \"hover:!tw-text-contrast\",\n \"hover:tw-bg-text-muted\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:tw-opacity-60\",\n \"disabled:hover:tw-border-text-muted\",\n \"disabled:hover:tw-bg-transparent\",\n \"disabled:hover:!tw-text-muted\",\n \"disabled:hover:tw-border-text-muted\",\n ...focusRing,\n ],\n danger: [\n \"tw-bg-transparent\",\n \"!tw-text-danger\",\n \"tw-border-danger-500\",\n \"hover:!tw-text-contrast\",\n \"hover:tw-bg-danger-500\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:tw-opacity-60\",\n \"disabled:hover:tw-border-danger-500\",\n \"disabled:hover:tw-bg-transparent\",\n \"disabled:hover:!tw-text-danger\",\n \"disabled:hover:tw-border-danger-500\",\n ...focusRing,\n ],\n light: [\n \"tw-bg-transparent\",\n \"!tw-text-alt2\",\n \"tw-border-transparent\",\n \"hover:tw-bg-transparent-hover\",\n \"hover:tw-border-text-alt2\",\n \"focus-visible:before:tw-ring-text-alt2\",\n \"disabled:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\n ...focusRing,\n ],\n unstyled: [],\n};\n\nexport type IconButtonSize = \"default\" | \"small\";\n\nconst sizes: Record = {\n default: [\"tw-px-2.5\", \"tw-py-1.5\"],\n small: [\"tw-leading-none\", \"tw-text-base\", \"tw-p-1\"],\n};\n\n@Component({\n selector: \"button[bitIconButton]:not(button[bitButton])\",\n templateUrl: \"icon-button.component.html\",\n providers: [{ provide: ButtonLikeAbstraction, useExisting: BitIconButtonComponent }],\n})\nexport class BitIconButtonComponent implements ButtonLikeAbstraction {\n @Input(\"bitIconButton\") icon: string;\n\n @Input() buttonType: IconButtonType;\n\n @Input() size: IconButtonSize = \"default\";\n\n @HostBinding(\"class\") get classList() {\n return [\n \"tw-font-semibold\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-rounded\",\n \"tw-transition\",\n \"hover:tw-no-underline\",\n \"focus:tw-outline-none\",\n ]\n .concat(styles[this.buttonType ?? \"main\"])\n .concat(sizes[this.size]);\n }\n\n get iconClass() {\n return [this.icon, \"!tw-m-0\"];\n }\n\n @HostBinding(\"attr.disabled\")\n get disabledAttr() {\n const disabled = this.disabled != null && this.disabled !== false;\n return disabled || this.loading ? true : null;\n }\n\n @Input() loading = false;\n @Input() disabled = false;\n\n setButtonType(value: \"primary\" | \"secondary\" | \"danger\" | \"unstyled\") {\n this.buttonType = value;\n }\n}\n","\n \n \n \n \n \n \n\n","import { Component, HostBinding, Input } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\n\nimport { Icon, isIcon } from \"./icon\";\n\n@Component({\n selector: \"bit-icon\",\n template: ``,\n})\nexport class BitIconComponent {\n @Input() icon: Icon;\n\n @HostBinding()\n protected get innerHtml() {\n if (!isIcon(this.icon)) {\n return \"\";\n }\n\n const svg = this.icon.svg;\n return this.domSanitizer.bypassSecurityTrustHtml(svg);\n }\n\n constructor(private domSanitizer: DomSanitizer) {}\n}\n","class Icon {\n constructor(readonly svg: string) {}\n}\n\n// We only export the type to prohibit the creation of Icons without using\n// the `svgIcon` template literal tag.\nexport type { Icon };\n\nexport function isIcon(icon: unknown): icon is Icon {\n return icon instanceof Icon;\n}\n\nexport class DynamicContentNotAllowedError extends Error {\n constructor() {\n super(\"Dynamic content in icons is not allowed due to risk of user-injected XSS.\");\n }\n}\n\nexport function svgIcon(strings: TemplateStringsArray, ...values: unknown[]): Icon {\n if (values.length > 0) {\n throw new DynamicContentNotAllowedError();\n }\n\n return new Icon(strings[0]);\n}\n","import { svgIcon } from \"../icon\";\n\nexport const Search = svgIcon`\n\n \n \n \n \n \n \n \n \n \n \n \n \n\n`;\n","import { Directive, ElementRef, HostBinding, Input, NgZone, Optional, Self } from \"@angular/core\";\nimport { NgControl, Validators } from \"@angular/forms\";\n\nimport { BitFormFieldControl, InputTypes } from \"../form-field/form-field-control\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Directive({\n selector: \"input[bitInput], select[bitInput], textarea[bitInput]\",\n providers: [{ provide: BitFormFieldControl, useExisting: BitInputDirective }],\n})\nexport class BitInputDirective implements BitFormFieldControl {\n @HostBinding(\"class\") @Input() get classList() {\n return [\n \"tw-block\",\n \"tw-w-full\",\n \"tw-px-3\",\n \"tw-py-1.5\",\n \"tw-bg-background-alt\",\n \"tw-border\",\n \"tw-border-solid\",\n this.hasError ? \"tw-border-danger-500\" : \"tw-border-secondary-500\",\n \"tw-text-main\",\n \"tw-placeholder-text-muted\",\n // Rounded\n \"tw-rounded-none\",\n \"first:tw-rounded-l\",\n \"last:tw-rounded-r\",\n // Focus\n \"focus:tw-outline-none\",\n \"focus:tw-border-primary-700\",\n \"focus:tw-ring-1\",\n \"focus:tw-ring-inset\",\n \"focus:tw-ring-primary-700\",\n \"focus:tw-z-10\",\n \"disabled:tw-bg-secondary-100\",\n ].filter((s) => s != \"\");\n }\n\n @HostBinding() @Input() id = `bit-input-${nextId++}`;\n\n @HostBinding(\"attr.aria-describedby\") ariaDescribedBy: string;\n\n @HostBinding(\"attr.aria-invalid\") get ariaInvalid() {\n return this.hasError ? true : undefined;\n }\n\n @HostBinding(\"attr.type\") @Input() type?: InputTypes;\n\n @HostBinding(\"attr.spellcheck\") @Input() spellcheck?: boolean;\n\n @HostBinding()\n @Input()\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value: any) {\n this._required = value != null && value !== false;\n }\n private _required: boolean;\n\n @Input() hasPrefix = false;\n @Input() hasSuffix = false;\n\n get labelForId(): string {\n return this.id;\n }\n\n get hasError() {\n return this.ngControl?.status === \"INVALID\" && this.ngControl?.touched;\n }\n\n get error(): [string, any] {\n const key = Object.keys(this.ngControl.errors)[0];\n return [key, this.ngControl.errors[key]];\n }\n\n constructor(\n @Optional() @Self() private ngControl: NgControl,\n private ngZone: NgZone,\n private elementRef: ElementRef\n ) {}\n\n focus() {\n this.ngZone.runOutsideAngular(() => {\n const end = this.elementRef.nativeElement.value.length;\n this.elementRef.nativeElement.setSelectionRange(end, end);\n this.elementRef.nativeElement.focus();\n });\n }\n}\n","import { Input, HostBinding, Directive } from \"@angular/core\";\n\nexport type LinkType = \"primary\" | \"secondary\" | \"contrast\";\n\nconst linkStyles: Record = {\n primary: [\n \"!tw-text-primary-500\",\n \"hover:!tw-text-primary-500\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:!tw-text-primary-500/60\",\n ],\n secondary: [\n \"!tw-text-main\",\n \"hover:!tw-text-main\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:!tw-text-muted/60\",\n ],\n contrast: [\n \"!tw-text-contrast\",\n \"hover:!tw-text-contrast\",\n \"focus-visible:before:tw-ring-text-contrast\",\n \"disabled:!tw-text-contrast/60\",\n ],\n};\n\nconst commonStyles = [\n \"tw-leading-none\",\n \"tw-p-0\",\n \"tw-font-semibold\",\n \"tw-bg-transparent\",\n \"tw-border-0\",\n \"tw-border-none\",\n \"tw-rounded\",\n \"tw-transition\",\n \"hover:tw-underline\",\n \"hover:tw-decoration-1\",\n \"disabled:tw-no-underline\",\n \"disabled:tw-cursor-not-allowed\",\n \"focus-visible:tw-outline-none\",\n \"focus-visible:tw-underline\",\n \"focus-visible:tw-decoration-1\",\n\n // Workaround for html button tag not being able to be set to `display: inline`\n // and at the same time not being able to use `tw-ring-offset` because of box-shadow issue.\n // https://github.com/w3c/csswg-drafts/issues/3226\n // Add `tw-inline`, add `tw-py-0.5` and use regular `tw-ring` if issue is fixed.\n //\n // https://github.com/tailwindlabs/tailwindcss/issues/3595\n // Remove `before:` and use regular `tw-ring` when browser no longer has bug, or better:\n // switch to `outline` with `outline-offset` when Safari supports border radius on outline.\n // Using `box-shadow` to create outlines is a hack and as such `outline` should be preferred.\n \"tw-relative\",\n \"before:tw-content-['']\",\n \"before:tw-block\",\n \"before:tw-absolute\",\n \"before:-tw-inset-x-[0.1em]\",\n \"before:tw-rounded-md\",\n \"before:tw-transition\",\n \"focus-visible:before:tw-ring-2\",\n \"focus-visible:before:tw-ring-text-contrast\",\n \"focus-visible:tw-z-10\",\n];\n\n@Directive()\nabstract class LinkDirective {\n @Input()\n linkType: LinkType = \"primary\";\n}\n\n@Directive({\n selector: \"a[bitLink]\",\n})\nexport class AnchorLinkDirective extends LinkDirective {\n @HostBinding(\"class\") get classList() {\n return [\"before:-tw-inset-y-[0.125rem]\"]\n .concat(commonStyles)\n .concat(linkStyles[this.linkType] ?? []);\n }\n}\n\n@Directive({\n selector: \"button[bitLink]\",\n})\nexport class ButtonLinkDirective extends LinkDirective {\n @HostBinding(\"class\") get classList() {\n return [\"before:-tw-inset-y-[0.25rem]\"]\n .concat(commonStyles)\n .concat(linkStyles[this.linkType] ?? []);\n }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"bit-menu-divider\",\n templateUrl: \"./menu-divider.component.html\",\n})\nexport class MenuDividerComponent {}\n","\n","import { FocusableOption } from \"@angular/cdk/a11y\";\nimport { Directive, ElementRef, HostBinding } from \"@angular/core\";\n\n@Directive({\n selector: \"[bitMenuItem]\",\n})\nexport class MenuItemDirective implements FocusableOption {\n @HostBinding(\"class\") classList = [\n \"tw-block\",\n \"tw-py-1\",\n \"tw-px-4\",\n \"!tw-text-main\",\n \"!tw-no-underline\",\n \"tw-cursor-pointer\",\n \"tw-border-none\",\n \"tw-bg-background\",\n \"tw-text-left\",\n \"hover:tw-bg-secondary-100\",\n \"focus:tw-bg-secondary-100\",\n \"focus:tw-z-50\",\n \"focus:tw-outline-none\",\n \"focus:tw-ring\",\n \"focus:tw-ring-offset-2\",\n \"focus:tw-ring-primary-700\",\n \"active:!tw-ring-0\",\n \"active:!tw-ring-offset-0\",\n ];\n @HostBinding(\"attr.role\") role = \"menuitem\";\n @HostBinding(\"tabIndex\") tabIndex = \"-1\";\n\n constructor(private elementRef: ElementRef) {}\n\n focus() {\n this.elementRef.nativeElement.focus();\n }\n}\n","import { Overlay, OverlayConfig, OverlayRef } from \"@angular/cdk/overlay\";\nimport { TemplatePortal } from \"@angular/cdk/portal\";\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { Observable, Subscription } from \"rxjs\";\nimport { filter, mergeWith } from \"rxjs/operators\";\n\nimport { MenuComponent } from \"./menu.component\";\n\n@Directive({\n selector: \"[bitMenuTriggerFor]\",\n})\nexport class MenuTriggerForDirective implements OnDestroy {\n @HostBinding(\"attr.aria-expanded\") isOpen = false;\n @HostBinding(\"attr.aria-haspopup\") get hasPopup(): \"menu\" | \"dialog\" {\n return this.menu?.ariaRole || \"menu\";\n }\n @HostBinding(\"attr.role\") role = \"button\";\n\n @Input(\"bitMenuTriggerFor\") menu: MenuComponent;\n\n private overlayRef: OverlayRef;\n private defaultMenuConfig: OverlayConfig = {\n panelClass: \"bit-menu-panel\",\n hasBackdrop: true,\n backdropClass: \"cdk-overlay-transparent-backdrop\",\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions([\n {\n originX: \"start\",\n originY: \"bottom\",\n overlayX: \"start\",\n overlayY: \"top\",\n },\n {\n originX: \"end\",\n originY: \"bottom\",\n overlayX: \"end\",\n overlayY: \"top\",\n },\n ])\n .withLockedPosition(true)\n .withFlexibleDimensions(false)\n .withPush(true),\n };\n private closedEventsSub: Subscription;\n private keyDownEventsSub: Subscription;\n\n constructor(\n private elementRef: ElementRef,\n private viewContainerRef: ViewContainerRef,\n private overlay: Overlay\n ) {}\n\n @HostListener(\"click\") toggleMenu() {\n this.isOpen ? this.destroyMenu() : this.openMenu();\n }\n\n ngOnDestroy() {\n this.disposeAll();\n }\n\n private openMenu() {\n if (this.menu == null) {\n throw new Error(\"Cannot find bit-menu element\");\n }\n\n this.isOpen = true;\n this.overlayRef = this.overlay.create(this.defaultMenuConfig);\n\n const templatePortal = new TemplatePortal(this.menu.templateRef, this.viewContainerRef);\n this.overlayRef.attach(templatePortal);\n\n this.closedEventsSub = this.getClosedEvents().subscribe((event: KeyboardEvent | undefined) => {\n if (event?.key === \"Tab\") {\n // Required to ensure tab order resumes correctly\n this.elementRef.nativeElement.focus();\n }\n this.destroyMenu();\n });\n this.keyDownEventsSub =\n this.menu.keyManager &&\n this.overlayRef\n .keydownEvents()\n .subscribe((event: KeyboardEvent) => this.menu.keyManager.onKeydown(event));\n }\n\n private destroyMenu() {\n if (this.overlayRef == null || !this.isOpen) {\n return;\n }\n\n this.isOpen = false;\n this.disposeAll();\n }\n\n private getClosedEvents(): Observable {\n const detachments = this.overlayRef.detachments();\n const escKey = this.overlayRef.keydownEvents().pipe(\n filter((event: KeyboardEvent) => {\n const keys = this.menu.ariaRole === \"menu\" ? [\"Escape\", \"Tab\"] : [\"Escape\"];\n return keys.includes(event.key);\n })\n );\n const backdrop = this.overlayRef.backdropClick();\n const menuClosed = this.menu.closed;\n\n return detachments.pipe(mergeWith(escKey, backdrop, menuClosed));\n }\n\n private disposeAll() {\n this.closedEventsSub?.unsubscribe();\n this.overlayRef?.dispose();\n this.keyDownEventsSub?.unsubscribe();\n }\n}\n","\n \n \n \n\n","import { FocusKeyManager } from \"@angular/cdk/a11y\";\nimport {\n Component,\n Output,\n TemplateRef,\n ViewChild,\n EventEmitter,\n ContentChildren,\n QueryList,\n AfterContentInit,\n Input,\n} from \"@angular/core\";\n\nimport { MenuItemDirective } from \"./menu-item.directive\";\n\n@Component({\n selector: \"bit-menu\",\n templateUrl: \"./menu.component.html\",\n exportAs: \"menuComponent\",\n})\nexport class MenuComponent implements AfterContentInit {\n @ViewChild(TemplateRef) templateRef: TemplateRef;\n @Output() closed = new EventEmitter();\n @ContentChildren(MenuItemDirective, { descendants: true })\n menuItems: QueryList;\n keyManager?: FocusKeyManager;\n\n @Input() ariaRole: \"menu\" | \"dialog\" = \"menu\";\n\n @Input() ariaLabel: string;\n\n ngAfterContentInit() {\n if (this.ariaRole === \"menu\") {\n this.keyManager = new FocusKeyManager(this.menuItems).withWrap();\n }\n }\n}\n","export type ButtonType = \"primary\" | \"secondary\" | \"danger\" | \"unstyled\";\n\nexport abstract class ButtonLikeAbstraction {\n loading: boolean;\n disabled: boolean;\n setButtonType: (value: ButtonType) => void;\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\n/**\n * Temporarily duplicate this pipe\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 { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { I18nPipe } from \"./i18n.pipe\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [I18nPipe],\n exports: [CommonModule, I18nPipe],\n})\nexport class SharedModule {}\n","import { HostBinding, Directive } from \"@angular/core\";\n\n@Directive({\n selector: \"th[bitCell], td[bitCell]\",\n})\nexport class CellDirective {\n @HostBinding(\"class\") get classList() {\n return [\"tw-p-3\"];\n }\n}\n","import { Directive, HostBinding, Input } from \"@angular/core\";\n\n@Directive({\n selector: \"tr[bitRow]\",\n})\nexport class RowDirective {\n @Input() alignContent: \"top\" | \"middle\" | \"bottom\" | \"baseline\" = \"baseline\";\n\n get alignmentClass(): string {\n switch (this.alignContent) {\n case \"top\":\n return \"tw-align-top\";\n case \"middle\":\n return \"tw-align-middle\";\n case \"bottom\":\n return \"tw-align-bottom\";\n default:\n return \"tw-align-baseline\";\n }\n }\n\n @HostBinding(\"class\") get classList() {\n return [\n \"tw-border-0\",\n \"tw-border-b\",\n \"tw-border-secondary-300\",\n \"tw-border-solid\",\n \"hover:tw-bg-background-alt\",\n \"last:tw-border-0\",\n this.alignmentClass,\n ];\n }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"bit-table\",\n templateUrl: \"./table.component.html\",\n})\nexport class TableComponent {}\n","\n \n \n \n \n \n \n
\n","import { Component } from \"@angular/core\";\n\n/**\n * Component used for styling the tab header/background for both content and navigation tabs\n */\n@Component({\n selector: \"bit-tab-header\",\n host: {\n class:\n \"tw-h-16 tw-pl-4 tw-bg-background-alt tw-flex tw-items-end tw-border-0 tw-border-b tw-border-solid tw-border-secondary-300\",\n },\n template: ``,\n})\nexport class TabHeaderComponent {}\n","import { Directive } from \"@angular/core\";\n\n/**\n * Directive used for styling the container for bit tab labels\n */\n@Directive({\n selector: \"[bitTabListContainer]\",\n host: {\n class: \"tw-inline-flex tw-flex-wrap tw-leading-5\",\n },\n})\nexport class TabListContainerDirective {}\n","import { FocusableOption } from \"@angular/cdk/a11y\";\nimport { Directive, ElementRef, HostBinding, Input } from \"@angular/core\";\n\n/**\n * Directive used for styling tab header items for both nav links (anchor tags)\n * and content tabs (button tags)\n */\n@Directive({ selector: \"[bitTabListItem]\" })\nexport class TabListItemDirective implements FocusableOption {\n @Input() active: boolean;\n @Input() disabled: boolean;\n\n @HostBinding(\"attr.disabled\")\n get disabledAttr() {\n return this.disabled || null; // native disabled attr must be null when false\n }\n\n constructor(private elementRef: ElementRef) {}\n\n focus() {\n this.elementRef.nativeElement.focus();\n }\n\n click() {\n this.elementRef.nativeElement.click();\n }\n\n @HostBinding(\"class\")\n get classList(): string[] {\n return this.baseClassList\n .concat(this.active ? this.activeClassList : [])\n .concat(this.disabled ? this.disabledClassList : [])\n .concat(this.textColorClassList);\n }\n\n /**\n * Classes used for styling tab item text color.\n * Separate text color class list required to override bootstrap classes in Web.\n */\n get textColorClassList(): string[] {\n if (this.disabled) {\n return [\"!tw-text-muted\", \"hover:!tw-text-muted\"];\n }\n if (this.active) {\n return [\"!tw-text-primary-500\", \"hover:!tw-text-primary-700\"];\n }\n return [\"!tw-text-main\", \"hover:!tw-text-main\"];\n }\n\n get baseClassList(): string[] {\n return [\n \"tw-block\",\n \"tw-relative\",\n \"tw-py-2\",\n \"tw-px-4\",\n \"tw-font-semibold\",\n \"tw-transition\",\n \"tw-rounded-t\",\n \"tw-border-0\",\n \"tw-border-x\",\n \"tw-border-t-4\",\n \"tw-border-transparent\",\n \"tw-border-solid\",\n \"tw-bg-transparent\",\n \"hover:tw-underline\",\n \"focus-visible:tw-z-10\",\n \"focus-visible:tw-outline-none\",\n \"focus-visible:tw-ring-2\",\n \"focus-visible:tw-ring-primary-700\",\n ];\n }\n\n get disabledClassList(): string[] {\n return [\"!tw-bg-secondary-100\", \"!tw-no-underline\", \"tw-cursor-not-allowed\"];\n }\n\n get activeClassList(): string[] {\n return [\n \"tw--mb-px\",\n \"tw-border-x-secondary-300\",\n \"tw-border-t-primary-500\",\n \"tw-border-b\",\n \"tw-border-b-background\",\n \"tw-bg-background\",\n \"hover:tw-border-t-primary-700\",\n \"focus-visible:tw-border-t-primary-700\",\n \"focus-visible:!tw-text-primary-700\",\n ];\n }\n}\n","import { FocusableOption } from \"@angular/cdk/a11y\";\nimport { AfterViewInit, Component, HostListener, Input, OnDestroy, ViewChild } from \"@angular/core\";\nimport { IsActiveMatchOptions, RouterLinkActive } from \"@angular/router\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { TabListItemDirective } from \"../shared/tab-list-item.directive\";\n\nimport { TabNavBarComponent } from \"./tab-nav-bar.component\";\n\n@Component({\n selector: \"bit-tab-link\",\n templateUrl: \"tab-link.component.html\",\n})\nexport class TabLinkComponent implements FocusableOption, AfterViewInit, OnDestroy {\n private destroy$ = new Subject();\n\n @ViewChild(TabListItemDirective) tabItem: TabListItemDirective;\n @ViewChild(\"rla\") routerLinkActive: RouterLinkActive;\n\n readonly routerLinkMatchOptions: IsActiveMatchOptions = {\n queryParams: \"ignored\",\n matrixParams: \"ignored\",\n paths: \"subset\",\n fragment: \"ignored\",\n };\n\n @Input() route: string | any[];\n @Input() disabled = false;\n\n @HostListener(\"keydown\", [\"$event\"]) onKeyDown(event: KeyboardEvent) {\n if (event.code === \"Space\") {\n this.tabItem.click();\n }\n }\n\n get active() {\n return this.routerLinkActive?.isActive ?? false;\n }\n\n constructor(private _tabNavBar: TabNavBarComponent) {}\n\n focus(): void {\n this.tabItem.focus();\n }\n\n ngAfterViewInit() {\n // The active state of tab links are tracked via the routerLinkActive directive\n // We need to watch for changes to tell the parent nav group when the tab is active\n this.routerLinkActive.isActiveChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((_) => this._tabNavBar.updateActiveLink());\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","\n \n\n","import { FocusKeyManager } from \"@angular/cdk/a11y\";\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n forwardRef,\n Input,\n QueryList,\n} from \"@angular/core\";\n\nimport { TabLinkComponent } from \"./tab-link.component\";\n\n@Component({\n selector: \"bit-tab-nav-bar\",\n templateUrl: \"tab-nav-bar.component.html\",\n})\nexport class TabNavBarComponent implements AfterContentInit {\n @ContentChildren(forwardRef(() => TabLinkComponent)) tabLabels: QueryList;\n @Input() label = \"\";\n\n /**\n * Focus key manager for keeping tab controls accessible.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/tablist_role#keyboard_interactions\n */\n keyManager: FocusKeyManager;\n\n ngAfterContentInit(): void {\n this.keyManager = new FocusKeyManager(this.tabLabels)\n .withHorizontalOrientation(\"ltr\")\n .withWrap()\n .withHomeAndEnd();\n }\n\n updateActiveLink() {\n // Keep the keyManager in sync with active tabs\n const items = this.tabLabels.toArray();\n for (let i = 0; i < items.length; i++) {\n if (items[i].active) {\n this.keyManager.updateActiveItem(i);\n }\n }\n }\n}\n","\n \n\n","// 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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + (chunkId === 768 ? \"encrypt-worker\" : chunkId) + \".\" + {\"167\":\"ceb6f4fd21a7ea018844\",\"182\":\"0213c9ca535f6fe6aef1\",\"271\":\"c8b1e1a8d5e6f6fc6f9a\",\"584\":\"238f402a694e2a33f299\",\"604\":\"bb5ea11234bcc9ba2061\",\"612\":\"4f56141adf765ea17600\",\"754\":\"8aacbab414f946ccfb6f\",\"768\":\"f4230c205b1bc7d3b0a1\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\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};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl + \"../\";","__webpack_require__.b = document.baseURI || self.location.href;\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__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\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__(58512)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","RegisterFormModule","BaseAcceptComponent","constructor","router","platformUtilService","i18nService","route","stateService","loading","authed","requiredParameters","failedShortMessage","failedMessage","ngOnInit","this","queryParams","pipe","subscribe","qParams","error","some","e","errorMessage","getIsAuthenticated","email","authedHandler","message","unauthedHandler","t","showToast","timeout","navigate","EventView","data","humanReadableMessage","appIcon","appName","userId","userName","userEmail","date","ip","type","installationId","systemUser","BaseEventsComponent","eventService","exportService","platformUtilsService","logService","fileDownloadService","loaded","dirtyDates","defaultDates","getDefaultDateFilters","start","end","exportEvents","appApiPromiseUnfulfilled","dates","parseDates","exportPromise","export","loadEvents","clearExisting","events","promise","loadAndParseEvents","continuationToken","refreshPromise","morePromise","result","length","concat","startDate","endDate","response","requestEvents","Promise","all","map","r","actingUserId","eventInfo","getEventInfo","user","getUserName","name","ipAddress","formatDateFilters","getEventExport","fileName","getFileName","exportFileName","download","blobData","blobOptions","UserConfirmComponent","cryptoService","onConfirmedUser","dontAskAgain","publicKey","fingerprint","getFingerprint","buffer","join","submit","setAutoConfirmFingerprints","emit","BasePeopleComponent","apiService","searchService","validationService","modalService","searchPipe","userNamePipe","statusMap","Map","users","pagedUsers","allUsers","activeUsers","didScroll","pageSize","pagedUsersCount","allCount","invitedCount","has","userStatusType","Invited","get","acceptedCount","Accepted","confirmedCount","Confirmed","revokedCount","Revoked","showConfirmUsers","showBulkConfirmUsers","load","getUsers","clear","status","set","sort","forEach","u","push","filter","selectAll","resetPaging","loadMore","pagedLength","pagedSize","slice","checkUser","select","checked","filteredUsers","transform","searchText","selectCount","i","invite","edit","removeUserConfirmationDialog","showDialog","remove","actionPromise","deleteUser","id","removeUser","showError","revoke","revokeWarningMessage","revokeUser","restore","restoreUser","reinvite","reinviteUser","confirm","confirmUser","self","mapIndex","indexOf","splice","updateUser","publicKeyResponse","getUserPublicKey","autoConfirm","getAutoConfirmFingerPrints","modal","openViewRef","confirmModalRef","comp","formPromise","close","info","isSearching","isSearchable","isPaging","searching","getCheckedUsers","index","DynamicAvatarComponent","accountUpdateService","border","size","destroy$","text","toUpperCase","color$","avatarUpdate$","ngOnDestroy","next","complete","NotPremiumDirective","templateRef","viewContainer","getCanAccessPremium","createEmbeddedView","premiumRequired","PremiumBadgeComponent","messagingService","send","keyConnectorService","userVerificationService","usesKeyConnector","disableRequestOTP","sentCode","secret","getUsesKeyConnector","processChanges","value","valueChanges","requestOTP","writeValue","obj","setValue","registerOnChange","fn","onChange","registerOnTouched","setDisabledState","isDisabled","disable","enable","UserVerificationComponent","provide","multi","useExisting","opacity","EventService","policyService","policies$","policies","d","Date","getFullYear","getMonth","getDate","setDate","toDateTimeLocalString","filterStart","filterEnd","isNaN","getTime","Error","toISOString","ev","options","EventOptions","appInfo","getAppInfo","deviceType","getEventMessage","msg","humanReadableMsg","formatCipherId","getShortId","cipherId","formatCollectionId","collectionId","formatGroupId","groupId","formatOrgUserId","organizationUserId","formatPolicyId","policy","p","policyId","p1","formatProviderUserId","providerUserId","formatProviderOrganizationId","providerOrganizationId","shortId","organizationId","cipherInfo","a","makeAnchor","setAttribute","outerHTML","providerId","document","createElement","title","innerHTML","substring","pad","getHours","getMinutes","num","norm","Math","floor","abs","PolicyListService","addPolicies","getPolicies","RouterService","activatedRoute","titleService","previousUrl","undefined","currentUrl","url","event","child","firstChild","titleId","snapshot","rawTitle","updateUrl","doNotSaveUrl","newTitle","setTitle","setPreviousUrl","getPreviousUrl","AccountSettings","vaultTimeout","Account","init","super","settings","Object","assign","StateService","storageService","secureStorageService","memoryStorageService","stateMigrationService","stateFactory","useAccountCache","addAccount","account","getEncryptedCiphers","reconcileOptions","defaultInMemoryOptions","setEncryptedCiphers","getEncryptedCollections","setEncryptedCollections","getEncryptedFolders","setEncryptedFolders","getEncryptedSends","setEncryptedSends","getLastSync","setLastSync","FooterComponent","year","toString","version","getApplicationVersion","FrontendLayoutComponent","body","classList","add","NavbarComponent","tokenService","providerService","syncService","organizationService","selfHosted","providers","isSelfHost","getName","getEmail","getUserId","trim","fullSync","getAll","organizations$","orgs","lock","logOut","ProductSwitcherContentComponent","products$","combineLatest","paramMap","routeOrg","find","o","smOrg","canAccessSecretsManager","products","pm","icon","appRoute","marketingRoute","sm","bento","other","ProductSwitcherComponent","changeDetector","isEnabled","buttonType","ngAfterViewInit","detectChanges","ProductSwitcherModule","OrganizationCreateModule","changedBusinessOwned","OrganizationInformationComponent","nameOnly","createOrganization","isProvider","acceptingSponsorship","OrganizationPermissionsGuard","canActivate","state","org","params","createUrlTree","isOwner","enabled","permissionsCallback","organizationPermissions","root","queryParamMap","itemId","OrganizationRedirectGuard","customRedirect","autoRedirectCallback","redirectPath","OrganizationSwitcherComponent","activeOrganization","OrganizationLayoutComponent","_destroy","Subject","organization$","takeUntil","mergeMap","canShowSettingsTab","organization","canShowManageTab","canShowMembersTab","canShowGroupsTab","canShowReportsTab","canShowBillingTab","getReportTabLabel","useEvents","OrganizationUserBulkConfirmRequest","keys","BulkConfirmComponent","organizationUserService","publicKeys","fingerprints","statuses","done","excludedUsers","isAccepted","getPublicKeys","entry","key","getCryptoKey","userIdsWithKeys","encryptedKey","rsaEncrypt","encryptedString","postConfirmRequest","postOrganizationUsersPublicKey","getOrgKey","request","postOrganizationUserBulkConfirm","BulkRemoveComponent","deleteUsers","deleteManyOrganizationUsers","removeUsersWarning","BulkStatusComponent","EntityEventsComponent","showUser","orgUsersUserIdMap","orgUsersIdMap","getAllUsers","entity","getEventsProviderUser","entityId","getEventsOrganizationUser","getEventsCipher","PolicyRequest","BasePolicy","display","BasePolicyComponent","policyResponse","loadData","patchValue","buildRequestData","buildRequest","policiesEnabledMap","resolve","PoliciesModule","DisableSendPolicy","description","component","DisableSendPolicyComponent","MasterPasswordPolicy","MasterPasswordPolicyComponent","formBuilder","group","minComplexity","minLength","requireUpper","requireLower","requireNumbers","requireSpecial","showKeyConnectorInfo","passwordScores","keyConnectorEnabled","PasswordGeneratorPolicy","PasswordGeneratorPolicyComponent","defaultType","useUpper","useLower","useNumbers","useSpecial","minNumbers","minSpecial","minNumberWords","capitalize","includeNumber","defaultTypes","PersonalOwnershipPolicy","PersonalOwnershipPolicyComponent","RequireSsoPolicy","RequireSsoPolicyComponent","useSso","singleOrgEnabled","ResetPasswordPolicy","ResetPasswordPolicyComponent","useResetPassword","autoEnrollEnabled","SendOptionsPolicy","SendOptionsPolicyComponent","disableHideEmail","SingleOrgPolicy","SingleOrgPolicyComponent","TwoFactorAuthenticationPolicy","TwoFactorAuthenticationPolicyComponent","PolicyEditComponent","policyApiService","componentFactoryResolver","cdr","onSavedPolicy","policyType","factory","resolveComponentFactory","policyComponent","policyFormRef","createComponent","instance","getPolicy","statusCode","Enabled","putPolicy","PoliciesComponent","policyListService","parent","first","policyIdFromEvents","orgPolicy","orgPolicies","op","editModalRef","OrganizationUpdateRequest","CountBasedLocalizationKey","singular","plural","getKey","count","OrganizationContentSummaryItem","localizationKeyOptions","localizationKey","OrganizationContentSummary","totalItemCount","itemCountByType","DeleteOrganizationComponent","cipherService","organizationApiService","deleteOrganizationRequestType","organizationContentSummary","onSuccess","masterPassword","then","delete","organizationName","buildOrganizationContentSummary","organizationItems","getAllFromApiForOrganization","item","deletedDate","cipherType","getOrganizationItemCountByType","getOrganizationItemLocalizationKeysByType","items","viewApiKey","rotateApiKey","AccountComponent","canManageBilling","canUseApi","useApi","businessName","billingEmail","identifier","hasPublicAndPrivateKeys","orgShareKey","orgKeys","makeKeyPair","save","deleteOrganization","deleteModalRef","purgeVault","purgeModalRef","apiKeyModalRef","keyType","postKey","getOrCreateApiKey","bind","scope","grantType","apiKeyTitle","apiKeyWarning","apiKeyDescription","rotateApiKeyModalRef","isRotation","recoveryCode","manage","TwoFactorSetupComponent","duoComp","openModal","duoModalRef","onUpdated","updateStatus","getTwoFactorProviders","getTwoFactorOrganizationProviders","filterProvider","routes","path","children","pathMatch","canManagePolicies","canAccessImportExport","canManageSso","canManageScim","loadChildren","m","OrganizationImportExportModule","OrganizationSettingsRoutingModule","OrganizationSettingsModule","SettingsComponent","cipher","copy","generatePassword","checkPassword","togglePasswordCount","upgradeOrganization","removeUri","launch","loginUriMatchChanged","addUri","togglePassword","toggleCardNumber","toggleCardCode","organizationChanged","viewHistory","repromptChanged","toggleFavorite","AddEditComponent","folderService","auditService","collectionService","totpService","passwordGenerationService","eventCollectionService","passwordRepromptService","originalCipher","componentName","allowOwnershipAssignment","ownershipOptions","allowPersonal","cloneMode","canEditAnyCollection","editMode","loadCollections","collections","loadCipher","getCipherAdmin","encryptCipher","encrypt","saveCipher","putCipherAdmin","postCipherAdmin","deleteCipher","isDeleted","deleteCipherAdmin","putDeleteCipherAdmin","EmergencyAccessAcceptRequest","AcceptEmergencyComponent","token","postEmergencyAccessAccept","replace","OrganizationUserAcceptRequest","AcceptOrganizationComponent","getOrganizationInvitation","redirect","prepareOrganizationInvitation","prepareAcceptRequest","postOrganizationUserAccept","setOrganizationInvitation","performResetPasswordAutoEnroll","getKeys","encKey","getEncKey","resetPasswordKey","policyList","getPoliciesByToken","mapPoliciesFromToken","getResetPasswordPolicyOptions","orgName","PasswordHintRequest","loginService","successRoute","postPasswordHint","onSuccessfulSubmit","HintComponent","vaultTimeoutService","vaultTimeoutSettingsService","environmentService","ngZone","pin","showPassword","pinLock","webVaultHostname","invalidPinAttempts","activeAccount$","concatMap","handlePinRequiredUnlock","handleMasterPasswordRequiredUnlock","unlockBiometric","biometricLock","success","doContinue","input","getElementById","isStable","focus","onStable","take","doUnlockWithPin","failed","kdf","getKdfType","kdfIterations","getKdfIterations","pinSet","makeKeyFromPin","getDecryptedPinProtected","protectedPin","getProtectedPin","decryptToUtf8","setKeyAndContinue","doUnlockWithMasterPassword","makeKey","passwordValid","getKeyHash","compareAndUpdateKeyHash","serverKeyHash","hashPassword","masterPasswordHash","postAccountVerifyPassword","localKeyHash","setKeyHash","decPin","pinKey","makePinKey","setDecryptedPinProtected","setKey","setEverBeenUnlocked","disableFavicon","getDisableFavicon","setDisableFavicon","isPinLockSet","supportsBiometric","isBiometricLockSet","hasKeyStored","supportsSecureStorage","biometricText","getBiometricText","hideInput","webVaultUrl","getWebVaultUrl","vaultUrl","LockComponent","routerService","navigateByUrl","CaptchaIFrame","win","iframeId","successCallback","errorCallback","infoCallback","parseFunction","parseMessage","connectorLink","stop","sendMessage","iframe","src","contentWindow","postMessage","base64Encode","str","btoa","encodeURIComponent","match","String","fromCharCode","cleanup","removeEventListener","createParams","URLSearchParams","JSON","stringify","location","href","v","initComponent","addEventListener","validMessage","parts","split","origin","parsedMessage","parse","height","width","siteKey","locale","translationLocale","AuthRequestType","CaptchaProtectedComponent","captchaSiteKey","captchaToken","setupCaptcha","captcha","window","showCaptcha","handleCaptchaRequired","PasswordLogInCredentials","twoFactor","SsoLogInCredentials","code","codeVerifier","redirectUrl","orgId","PasswordlessLogInCredentials","accessCode","authRequestId","decKey","localPasswordHash","PasswordlessCreateAuthRequest","deviceIdentifier","fingerprintPhrase","startPasswordlessLogin","LoginWithDeviceComponent","cryptoFunctionService","appIdService","authService","anonymousHubService","showResendNotification","twoFactorRoute","forcePasswordResetRoute","getCurrentNavigation","getPushNotifcationObs$","confirmResponse","buildAuthRequest","reqResponse","postAuthRequest","passwordlessRequest","createHubConnection","setTimeout","stopHubConnection","requestId","getAuthResponse","requestApproved","credentials","buildLoginCredntials","loginResponse","logIn","requiresTwoFactor","onSuccessfulLoginTwoFactorNavigate","forcePasswordReset","onSuccessfulLoginForceResetNavigate","saveEmailSettings","onSuccessfulLogin","onSuccessfulLoginNavigate","authRequestKeyPair","rsaGenerateKeyPair","getAppId","AuthenticateAndUnlock","rsaDecrypt","decMasterPasswordHash","localHashedPassword","formValidationErrorService","validatedEmail","paramEmailSet","formGroup","rememberEmail","loggedEmail","selfHostedDomain","hasBaseUrl","queryParamsEmail","setEmail","getRememberedEmail","getRememberEmail","markAllAsTouched","invalid","errorText","getErrorToastMessage","setFormValues","launchSsoBrowser","clientId","ssoRedirectUri","passwordOptions","uppercase","lowercase","numbers","special","ssoCodeVerifier","codeVerifierHash","hash","codeChallenge","setSsoState","setSsoCodeVerifier","webUrl","launchUri","validateEmail","controls","markAsTouched","toggleValidateEmail","getLoginWithDevice","reset","setRememberEmail","getFormValidationErrors","shift","errorName","errorTag","charAt","controlName","res","getKnownDevice","showLoginWithDevice","goToHint","LoginComponent","showResetPasswordAutoEnrollWarning","showPasswordless","goAfterLogIn","premium","plan","sponsorshipToken","resetPasswordPolicy","masterPasswordPolicyOptions$","enforcedPasswordPolicyOptions","strengthResult","passwordStrength","getPasswordStrengthUserInput","masterPasswordScore","score","evaluateMasterPassword","policiesData","clearValues","setRememberedEmail","clearValidators","updateValueAndValidity","valid","userInput","atPosition","substr","toLowerCase","DeleteRecoverRequest","RecoverDeleteComponent","postAccountRecoverDelete","TwoFactorRecoveryRequest","RecoverTwoFactorComponent","makePreloginKey","postTwoFactorRecover","continuing","leaving","getManagingOrganization","convert","migrateUser","removeConvertAccountRequired","leave","RemovePasswordComponent","OrganizationUserResetPasswordEnrollmentRequest","SetPasswordRequest","masterPasswordHint","orgIdentifier","enforcedPolicyOptions","strongPassword","setupSubmitActions","makeEncKey","remakeEncKey","performSubmitActions","masterPasswordRetype","passwordStrengthResult","getStrengthResult","getPasswordScoreText","color","syncLoading","hint","resetPasswordAutoEnroll","getAutoEnrollStatus","resetPasswordEnabled","getMasterPasswordPoliciesForInvitedUsers","setPassword","onSetPasswordSuccess","userEncKey","resetRequest","putOrganizationUserResetPasswordEnrollment","onSuccessfulChangePassword","confirmField","setKdfType","setKdfIterations","setEncKey","setEncPrivateKey","PasswordStrengthComponent","showText","passwordScoreColor","scoreWidth","password","updatePasswordStrength","masterPasswordScoreColor","masterPasswordScoreText","ngOnChanges","masterPasswordStrengthTimeout","setPasswordScoreText","clearTimeout","SetPasswordComponent","loggingIn","changePasswordRoute","getSsoCodeVerifier","getSsoState","checkState","getOrgIdentifierFromState","redirectUri","returnUri","includeUserIdentifier","initiateSsoFormPromise","preValidateSso","authorizeUrl","buildAuthorizeUrl","sameWindow","getIdentityUrl","userIdentifier","getSsoUserIdentifier","orgIdFromState","sso","resetMasterPassword","onSuccessfulLoginChangePasswordNavigate","stateSplit","checkStateSplit","SsoComponent","storedIdentifier","getSsoOrgIdentifier","setSsoOrganizationIdentifier","cookie","ReferenceEventRequest","VerticalStep","subLabel","applyBorder","VerticalStepContentComponent","onSelectStep","disabled","selected","selectStep","selectStepByIndex","VerticalStepperComponent","activeClass","isNextButtonHidden","steps","selectedIndex","isStepDisabled","_","completed","RegisterRequest","referenceData","captchaResponse","InputsFieldMatch","static","matchTo","control","inputsMatchError","inputsDoesntMatchError","field","fieldMatchTo","fieldCtrl","fieldMatchToCtrl","setErrors","RegisterComponent","isInTrialFlow","createdAccount","showTerms","showErrorSummary","confirmMasterPassword","validateInputsDoesntMatch","acceptPolicies","acceptPoliciesValidation","validator","validateFormInputsMatch","accountCreated","captchaBypassToken","registerResponse","registerAccount","buildRegisterRequest","successful","captchaRequired","required","validateRegistration","hasError","isValid","hashedPassword","orgInvite","postRegister","RegisterFormComponent","referenceDataValue","queryParamEmail","LogoForbesComponent","LogoUSNewsComponent","EnterpriseContentComponent","TeamsContentComponent","ConfirmationDetailsComponent","BillingComponent","previousStep","additionalSeats","product","orgInfoForm","stepBack","changedCountry","DefaultContentComponent","Enterprise1ContentComponent","Enterprise2ContentComponent","Teams1ContentComponent","Teams2ContentComponent","LogoCnetComponent","CnetEnterpriseContentComponent","CnetIndividualContentComponent","CnetTeamsContentComponent","AbmEnterpriseContentComponent","AbmTeamsContentComponent","billingSuccess","stepSelectionChange","navigateToOrgVault","navigateToOrgInvite","ValidOrgParams","ValidLayoutParams","TrialInitiationComponent","titleCasePipe","orgInfoSubLabel","orgLabel","billingSubLabel","layout","accountCreateOnly","useTrialStepper","trialFlowOrgs","teams","enterprise","families","routeFlowOrgs","free","individual","layouts","orgInfoFormGroup","validators","updateOn","referenceDataId","referenceId","pop","reference","values","includes","flow","setupFamilySponsorship","previouslySelectedIndex","verticalStepper","subLabelText","previous","WebAuthnIFrame","webAuthnNewTab","btnText","append","allow","URL","twoFactorService","remember","webAuthnReady","providerType","selectedProviderType","webAuthnSupported","webAuthn","twoFactorEmail","loginRoute","supportsWebAuthn","webAuthnAllow","authing","getProviders","needsLock","getDefaultProvider","cleanupWebAuthn","providerData","authWebAuthn","host","Host","sig_request","Signature","submit_callback","f","sig","querySelector","Email","sendEmail","doSubmit","logInTwoFactor","doToast","emailPromise","authRequestAccessCode","postTwoFactorEmail","authingWithPassword","authingWithSso","authingWithUserApiKey","authingWithPasswordless","Window","onProviderSelected","onRecoverSelected","getSupportedProviders","choose","recover","TwoFactorOptionsComponent","TwoFactorComponent","anotherMethod","twoFactorOptionsModal","provider","PasswordRequest","cancel","currentMasterPassword","verifyUser","newMasterPasswordHash","postPassword","UpdatePasswordComponent","OrganizationUserResetPasswordRequest","UpdateTempPasswordRequest","newKey","newPasswordHash","newEncKey","putUpdateTempPassword","UpdateTempPasswordComponent","VerifyEmailRequest","VerifyEmailTokenComponent","postAccountVerifyEmailToken","refreshIdentityToken","VerifyDeleteRecoverRequest","VerifyRecoverDeleteComponent","postAccountRecoverDeleteToken","HomeGuard","authStatus","getAuthStatus","CollectionPermission","AccessItemType","UserLayoutComponent","findSortedIndex","sortedArray","val","compareFn","low","high","mid","c","FormSelectionList","controlFactory","allItems","selectedItems","deselectedItems","formArray","selectItems","ids","initialValue","selectItem","deselectItems","deselectItem","deselectAll","findIndex","selectedOption","sortedInsertIndex","newControl","insert","deselectedOption","removeAt","populateItems","selectedItem","nextId","MultiSelectComponent","ngControl","removeSelectedItems","searchInputId","onItemsConfirmed","valueAccessor","placeholder","loadingText","isSelected","onDropdownClosed","updatedBaseItems","baseItems","notifyOnChange","notifyOnTouched","onBlur","ariaDescribedBy","_ariaDescribedBy","searchInput","nativeElement","labelForId","_required","hasValidator","touched","errors","UserTypePipe","unknownText","handleBlur","selectionList","PermissionMode","AccessSelectorComponent","permissionControl","initialPermission","fg","permission","readonly","accessAllItems","permissionMode","Edit","_itemComparator","itemType","permissionList","perm","View","labelId","ViewExceptPass","EditExceptPass","_permissionMode","Hidden","getRawValue","itemIcon","notifyOnTouch","pauseChangeNotification","Array","isArray","Collection","Group","Member","permissionLabelId","accessAllLabelId","canEditItemPermission","b","collator","compare","listName","labelName","AccessSelectorModule","readOnly","hidePasswords","check","CollectionAddEditComponent","onSavedCollection","onDeletedCollection","accessGroups","groups","useGroups","groupsResponse","getGroups","orgKey","collection","getCollectionDetails","externalId","s","g","accessAll","putCollection","postCollection","deletePromise","deleteCollection","selectedChanged","filterSelected","EntityUsersComponent","search","onEditedUsers","organizationUserType","organizationUserStatusType","showSelected","selectedCount","loadUsers","searchedUsers","scrollViewportStyle","getGroupUsers","getCollectionUsers","selections","putGroupUsers","putCollectionUsers","dialogRef","OrgUpgradeDialogComponent","CollectionsComponent","dialogService","canCreate","pagedCollectionsCount","canCreateNewCollections","decryptCollections","decryptMany","canViewAssignedCollections","getUserCollections","assignedCollections","canViewAllCollections","getCollections","pagedCollections","canEdit","canDelete","planProductType","maxCollections","dialogBodyText","open","orgCanManageBilling","addEditModalRef","canSave","removeCollection","usersModalRef","entityName","canEditAssignedCollections","canDeleteAnyCollection","canDeleteAssignedCollections","GroupRequest","GroupAddEditComponent","onSavedGroup","onDeletedGroup","access","getGroupDetails","putGroup","postGroup","deleteGroup","GroupsComponent","pagedGroupsCount","pagedGroups","removeGroup","ManageComponent","OrganizationUserConfirmRequest","BulkRestoreRevokeComponent","config","isRevoking","bulkTitle","titleKey","performBulkUserAction","bulkMessage","userIds","revokeManyOrganizationUsers","restoreManyOrganizationUsers","ResetPasswordComponent","onPasswordReset","newPassword","loggedOutWarningName","getOptions","passwordStrengthComponent","copyToClipboard","getOrganizationUserResetPasswordDetails","kdfType","encryptedPrivateKey","orgSymKey","decPrivateKey","decryptToBytes","decValue","putOrganizationUserResetPassword","OrganizationUserUpdateRequest","OrganizationUserInviteRequest","emails","NestedCheckboxComponent","onSavedUser","onDeletedUser","parentIndeterminate","parentChecked","checkboxes","every","pascalize","permissions","handleDependentPermissions","UserAddEditComponent","onRevokedUser","onRestoredUser","isRevoked","showCustom","manageAllCollectionsCheckboxes","createNewCollections","editAnyCollection","deleteAnyCollection","manageAssignedCollectionsCheckboxes","editAssignedCollections","deleteAssignedCollections","customUserTypeSelected","canUseCustomPermissions","useCustomPermissions","getOrganizationUser","setRequestPermissions","clearPermissions","manageResetPassword","manageUsers","inviteUser","deleteOrganizationUser","revokeOrganizationUser","restoreOrganizationUser","putOrganizationUser","Set","postOrganizationUserInvite","OrganizationUserUpdateGroupsRequest","groupIds","UserGroupsComponent","userGroups","getOrganizationUserGroups","ug","putOrganizationUserGroups","bulkConfirm","resetPassword","PeopleComponent","userType","orgResetPasswordPolicyEnabled","canManageUsersPassword","updateKeys","privateKey","viewEvents","postOrganizationUserReinvite","postOrganizationUserConfirm","allowResetPassword","orgUser","callingUserHasPermission","resetPasswordEnrolled","showEnrolledStatus","seats","groupsModalRef","bulkRemove","bulkRemoveModalRef","onClosedPromise","bulkRevoke","bulkRevokeOrRestore","bulkRestore","ref","allowMultipleModals","bulkReinvite","postManyOrganizationUserReinvite","showBulkStatus","bulkConfirmModalRef","eventsModalRef","resetPasswordModalRef","warningMessage","successfullMessage","childComponent","bulkStatusModalRef","onShown","keyedErrors","reduce","x","keyedFilteredUsers","hasOwnProperty","PipesModule","VaultService","calculateSearchBarLocalizationString","vaultFilter","selectedFolderId","selectedCollection","selectedOrganizationId","myVaultOnly","VaultSharedModule","useClass","VaultFilterModule","VaultFilter","selectedFolder","refreshCollectionsAndFolders","resetFilter","selectedCollectionId","resetOrganization","buildFilter","cipherPassesFilter","favorite","folderId","collectionIds","onUploadedAttachment","onDeletedAttachment","onReuploadedAttachment","deletePromises","reuploadPromises","emergencyAccessId","hasUpdatedKey","fileEl","files","saveCipherAttachment","cipherDomain","decrypt","attachment","deleteCipherAttachment","attachments","downloading","canAccessAttachments","getAttachmentData","getSingleMessage","fetch","Request","cache","encBuf","decBuf","decryptFromBytes","hasEncKey","canAccessPremium","reuploadCipherAttachment","admin","saveAttachmentRawWithServer","foundAttachment","a2","file","saveAttachmentWithServer","attachmentId","deleteAttachmentWithServer","reupload","viewOnly","showFixOldAttachments","AttachmentsComponent","deleteCipherAttachmentAdmin","allowSelectNone","onSavedCollections","loadCipherCollections","selectedCollectionIds","saveCollections","getAllDecrypted","saveCollectionsWithServer","putCipherCollectionsAdmin","vaultFilterService","activeFilter","hideFolders","hideCollections","hideFavorites","hideTrash","hideOrganizations","onFilterChange","onAddFolder","onEditFolder","isLoaded","displayCollections","fullList","collapsedFilterNodes","buildCollapsedFilterNodes","organizations","buildOrganizations","activePersonalOwnershipPolicy","checkForPersonalOwnershipPolicy","activeSingleOrganizationPolicy","checkForSingleOrganizationPolicy","folders$","buildNestedFolders","initCollections","buildCollections","toggleFilterNodeCollapseState","node","storeCollapsedFilterNodes","applyFilter","reloadCollectionsAndFolders","pruneInvalidatedFilterSelections","reloadOrganizations","addFolder","editFolder","folder","pruneInvalidFolderSelection","pruneInvalidCollectionSelection","firstValueFrom","hasId","hide","onNodeCollapseStateChange","collectionsGrouping","collectionNodes","nestedCollections","nestedList","show","isCollapsed","toggleCollapse","CollectionFilterComponent","foldersGrouping","folders","folderNodes","nestedFolders","FolderFilterComponent","cipherStatus","StatusFilterComponent","selectedCipherType","typesNode","cipherTypeEnum","TypeFilterComponent","organizationGrouping","displayMode","hasActiveFilter","applyOrganizationFilter","applyMyVaultFilter","clearFilter","EnrollMasterPasswordReset","modalRef","toastStringRef","verification","keyString","LinkSsoComponent","ngAfterContentInit","toggleResetPasswordEnrollment","unlinkSso","OrganizationOptionsComponent","allowEnrollmentChanges","usePolicies","deleteSsoUser","OrganizationFilterComponent","displayText","searchTextChanged","onSearchTextChanged","collapsedFilterNodes$","nodes","VaultFilterComponent","buildAdminCollections","activeCipherId","onCipherClicked","onCipherRightClicked","onAddCipher","onAddCipherOptions","ciphers","searchPlaceholder","deleted","accessEvents","searchPending","searchTimeout","deletedFilter","reload","refresh","indexedCiphers","doSearch","selectCipher","rightClickCipher","addCipher","addCipherOptions","searchCiphers","EllipsisPipe","limit","completeWords","ellipsis","lastIndexOf","OrganizationNameBadgeComponent","avatarService","onOrganizationClicked","isMe","loadColorFromState","textColor","emitOnOrganizationClicked","GetOrgNameFromIdPipe","profileName","clone","share","checkCipher","showAddNew","onAttachmentsClicked","onShareClicked","onCollectionsClicked","onCloneClicked","onOrganzationBadgeClicked","pagedCiphers","userHasPremiumAccess","noItemIcon","pagedCiphersCount","refreshing","uri","repromptCipher","permanent","restoreWithServer","typeI18nKey","aType","protectedFields","displayTotpCopyButton","login","totp","getCode","viewPassword","collect","getSelected","getSelectedIds","hasTotp","organizationUseTotp","deleteWithServer","softDeleteWithServer","hasOldAttachments","reprompt","showPasswordPrompt","VaultItemsComponent","onEventsClicked","allCiphers","indexCiphers","BulkDeleteComponent","cipherIds","onDeleted","deleteCiphersAdmin","deleteCiphers","deleteManyWithServer","softDeleteManyWithServer","deleteRequest","deleteManyCiphersAdmin","putDeleteManyCiphersAdmin","BulkMoveComponent","onMoved","folderViews$","moveManyWithServer","BulkRestoreComponent","onRestored","restoreManyWithServer","isChecked","BulkShareComponent","onShared","nonShareableCount","shareableCiphers","writeableCollections","allCollections","filterCollections","checkedCollectionIds","shareManyWithServer","bulkMove","bulkShare","BulkActionsComponent","bulkDelete","promptPassword","selectedIds","vaultItemsComponent","bulkDeleteModalRef","bulkRestoreModalRef","selectedCiphers","bulkShareModalRef","bulkMoveModalRef","BroadcasterSubscriptionId","VaultComponent","changeDetectorRef","broadcasterService","vaultService","trashCleanupWarning","firstLoaded","vaultFilterComponent","run","command","successfully","getCipherIdFromParams","editCipherId","queryParamsHandling","unsubscribe","applyVaultFilter","go","filterSearchText","editCipherAttachments","maxStorageGb","madeAttachmentChanges","attachmentsModalRef","onClosed","editCipherCollections","collectionsModalRef","editCipher","cipherAddEditModalRef","onSavedCipher","onDeletedCipher","onRestoredCipher","cloneCipher","relativeTo","replaceUrl","VaultRoutingModule","VaultModule","redirectTo","canManageUsers","canManageGroups","OrganizationReportingModule","OrganizationBillingModule","OrganizationsRoutingModule","SharedOrganizationModule","OrganizationModule","PlanSponsorshipType","AcceptFamilySponsorshipComponent","register","OrganizationSponsorshipRedeemRequest","FamiliesForEnterpriseSetupComponent","badToken","showNewOrganization","_selectedFamilyOrganizationId","organizationPlansComponent","onOrganizationCreateSuccess","postPreValidateSponsorshipToken","existingFamilyOrganizations$","selectedFamilyOrganizationId","planSponsorshipType","FamiliesForEnterprise","sponsoredOrganizationId","postRedeemSponsorship","SendAccessView","expirationDate","creatorIdentifier","SendAccess","buildDomainModel","model","decryptObj","SendAccessRequest","toggleText","copyText","AccessComponent","sendType","passwordRequired","unavailable","hideEmail","sendText","maskedText","sendId","downloadData","getSendFileDownloadData","accessRequest","downloadMethod","keyArray","passwordHash","pbkdf2","sendResponse","postSendAccess","sendAccess","makeSendKey","hidden","sendService","disableSend","expired","sends","filteredSends","hasSearched","policyAppliesToActiveUser$","policyAppliesToActiveUser","onSuccessfulLoad","applyTextSearch","removePassword","removePasswordWithServer","onSuccessfulRemovePassword","onSuccessfulDelete","link","getSendUrl","accessId","urlB64Key","clearSelections","selectedAll","selectType","selectedType","searchSends","BrowserPath","DateField","DatePreset","datePipe","onSavedSend","onDeletedSend","onCancelled","copyLink","emailVerified","alertShown","showOptions","typeOptions","sendLinkBaseUrl","isSafari","isDateTimeLocalSupported","isFirefox","setDates","deletionDate","getEmailVerified","loadSend","hasPassword","encryptSend","encSend","uploadPromise","saveWithServer","copySuccess","copyLinkToClipboard","typeChanged","toggleOptions","sendData","togglePasswordVisible","datesChanged","datesForm","selectedDeletionDatePreset","selectedExpirationDatePreset","defaultDeletionDateTime","defaultExpirationDateTime","fallbackDeletionDate","fallbackDeletionTime","fallbackExpirationDate","fallbackExpirationTime","deletionDatePresets","OneHour","OneDay","TwoDays","ThreeDays","SevenDays","ThirtyDays","Custom","expirationDatePresets","Never","browserPath","Firefox","Safari","Default","formattedDeletionDate","now","miliseconds","setTime","formattedExpirationDate","safariDeletionTimePresetOptions","safariTimePresetOptions","DeletionDate","safariExpirationTimePresetOptions","ExpriationDate","nextWeek","setInitialFormValues","emitDates","onDeletionDatePresetSelect","clearExpiration","initialDeletionDate","toTimeString","initialExpirationDate","twentyFourHour","noon","midnight","ams","pms","h","hour","minutes","midnightOption","twelveHour","noonOption","amOption","pmOption","validTimes","EffluxDatesComponent","editSend","addSend","SendComponent","sendAddEditModalRef","DeauthorizeSessionsComponent","postSecurityStamp","DeleteAccountComponent","accountApiService","deleteForm","deleteAccount","EmailTokenRequest","EmailRequest","ChangeEmailComponent","tokenSent","showTwoFactorEmailWarning","twoFactorProviders","newEmail","postEmail","postEmailToken","UpdateProfileRequest","culture","SelectableAvatarComponent","onFire","setSelection","ChangeAvatarComponent","changeColor","onSaved","defaultColorPalette","customColorSelected","customColor$","BehaviorSubject","customTextColor$","debounceTime","currentSelection","showCustomPicker","colorPickerElement","click","generateAvatarColor","profile","pushUpdate","selectedColorIndex","openChangeAvatar","ProfileComponent","getProfile","modalOpened","avatarModalRef","putProfile","showChangeEmail","deauthorizeSessions","deauthModalRef","CreateOrganizationComponent","orgPlansComponent","UpdateDomainsRequest","toggleExcluded","customize","DomainRulesComponent","custom","global","getSettingsDomains","equivalentDomains","globalEquivalentDomains","domains","excluded","globalDomain","excludedGlobalEquivalentDomains","d2","putSettingsDomains","indexTrackBy","EmergencyAccessAttachmentsComponent","EmergencyAddEditComponent","viewAttachments","EmergencyAccessViewComponent","postEmergencyAccessView","getAllCiphers","decCiphers","oldKeyBuffer","keyEncrypted","oldEncKey","promises","cipherResponse","cipherData","getLocaleSortingFunction","EmergencyAccessStatusType","EmergencyAccessType","EmergencyAccessConfirmRequest","EmergencyAccessInviteRequest","EmergencyAccessUpdateRequest","EmergencyAccessAddEditComponent","emergencyAccessType","waitTimes","emergencyAccess","getEmergencyAccess","waitTime","waitTimeDays","putEmergencyAccess","postEmergencyAccessInvite","EmergencyAccessConfirmComponent","onConfirmed","EmergencyAccessPasswordRequest","EmergencyAccessTakeoverComponent","onDone","getEmergencyGrantorPolicies","takeoverResponse","postEmergencyAccessTakeover","postEmergencyAccessPassword","approve","reject","requestAccess","takeover","EmergencyAccessComponent","emergencyAccessStatusType","isOrganizationOwner","trustedContacts","getEmergencyAccessTrusted","grantedContacts","getEmergencyAccessGranted","details","contact","postEmergencyAccessReinvite","doConfirmation","granteeId","deleteEmergencyAccess","removeGrantee","removeGrantor","postEmergencyAccessInitiate","RecoveryInitiated","postEmergencyAccessApprove","RecoveryApproved","postEmergencyAccessReject","takeoverModalRef","debug","postEmergencyAccessConfirm","form","hours","CUSTOM_VALUE","exceedsMinimumTimout","customTimeInMinutes","MIN_CUSTOM_MINUTES","combineLatestWith","vaultTimeoutPolicy","applyVaultTimeoutPolicy","getVaultTimeout","current","max","vaultTimeouts","onTouched","validate","policyError","minTimeoutError","registerOnValidatorChange","validatorChange","vaultTimeoutPolicyHours","vaultTimeoutPolicyMinutes","VaultTimeoutInputComponent","PreferencesComponent","themingService","vaultTimeoutAction","isDev","localeOptions","supportedTranslationLocales","localeNames","themeOptions","getVaultTimeoutAction","enableFavicons","enableFullWidth","getEnableFullWidth","getLocale","startingLocale","theme","getTheme","startingTheme","setVaultTimeoutOptions","setEnableFullWidth","updateConfiguredTheme","setLocale","vaultTimeoutActionChanged","newValue","FolderWithIdRequest","SendWithIdRequest","UpdateKeyRequest","ChangePasswordComponent","rotateEncKey","rotateEncKeyClicked","updateKey","getPrivateKey","encPrivateKey","cryptoKey","postAccountKey","updateEmergencyAccesses","updateAllResetPasswordKeys","allowedStatuses","filteredAccesses","updateRequest","KdfRequest","ChangeKdfComponent","kdfOptions","recommendedKdfIterations","postAccountKdf","SecurityKeysComponent","showChangeKdf","viewUserApiKey","viewUserApiKeyModalRef","postUserApiKey","rotateUserApiKey","rotateUserApiKeyModalRef","postUserRotateApiKey","SecurityComponent","showChangePassword","SecurityRoutingModule","getHasPremiumPersonally","hasFamilySponsorshipAvailable","canManageSponsorships","hasPremiumFromOrg","getHasPremiumFromOrganization","billing","getUserBillingHistory","hideSubscription","hasNoHistory","notAllowedValueAsync","valueGetter","caseInsensitive","notAllowedValue","controlValue","resendEmail","SponsoringOrgRowComponent","sponsoringOrg","isSelfHosted","sponsorshipRemoved","statusMessage","statusClass","locale$","setStatus","familySponsorshipToDelete","familySponsorshipValidUntil","familySponsorshipLastSyncDate","revokeSponsorship","revokeSponsorshipPromise","doRevokeSponsorship","resendEmailPromise","postResendSponsorshipOffer","isSentAwaitingSync","familySponsorshipFriendlyName","deleteRevokeSponsorship","toDelete","validUntil","lastSyncDate","forceReload","SponsoredFamiliesComponent","sponsorshipForm","selectedSponsorshipOrgId","sponsorshipEmail","asyncValidators","availableSponsorshipOrgs$","familySponsorshipAvailable","anyOrgsAvailable$","activeSponsorshipOrgs$","anyActiveSponsorships$","postCreateSponsorship","sponsoredEmail","friendlyName","resetForm","sponsorshipEmailControl","BillingHistoryViewComponent","PremiumComponent","premiumPrice","familyPlanMaxUserCount","storageGbPrice","additionalStorage","fd","FormData","postAccountLicense","finalizePremium","paymentComponent","createPaymentToken","taxInfoComponent","taxInfo","country","postalCode","postPremium","paymentResponse","paymentIntentClientSecret","handleStripeCardPayment","additionalStorageTotal","subtotal","taxCharges","taxRate","total","SubscriptionComponent","hasPremium","subscriptionRoute","reinstate","closeUpdateLicense","updateLicense","downloadLicense","adjustStorage","closeStorage","UserSubscriptionComponent","adjustStorageAdd","showAdjustStorage","showUpdateLicense","sub","getUserSubscription","usingInAppPurchase","reinstatePromise","postReinstatePremium","cancelPromise","postCancelPremium","licenseString","license","subscriptionMarkedForCancel","subscription","cancelled","cancelAtEndDate","nextInvoice","upcomingInvoice","storagePercentage","storageGb","toFixed","storageProgressWidth","SubscriptionRoutingModule","usernameGenerationService","comingFromAddEdit","onSelected","usernameOptions","username","avoidAmbiguous","usernameWebsite","passTypeOptions","usernameTypeOptions","desc","subaddressOptions","catchallOptions","initForwardOptions","passwordOptionsResponse","ambiguous","subaddressEmail","subaddressType","catchallType","website","websiteOption","generatorOptions","getGeneratorOptions","regenerateWithoutButtonPress","regenerate","setGeneratorOptions","regeneratePassword","regenerateUsername","sliderChanged","savePasswordOptions","addHistory","sliderInput","normalizePasswordOptions","saveOptions","saveUsernameOptions","generateUsername","usernameGeneratingPromise","copyOptions","number","normalizeOptions","forwardOptions","forwardedService","localeCompare","history","getHistory","SelectCopyDirective","el","onCopy","selection","getSelection","rangeCount","getRangeAt","stringEndPos","newLinePos","PasswordGeneratorHistoryComponent","lengthChanged","minNumberChanged","minSpecialChanged","GeneratorComponent","historyModalRef","ToolsComponent","UpdateKeyComponent","makeRequest","folderApiService","onSavedFolder","onDeletedFolder","FolderAddEditComponent","onSharedCipher","cipherView","shareWithServer","ShareComponent","VerifyEmailComponent","onVerified","verifyEmail","postAccountVerifyEmail","showVerifyEmail","showBrowserOutdated","showUpdateKey","showPremiumCallout","navigator","userAgent","filterComponent","action","isShowingCards","verified","ensureVaultFiltersAreExpanded","shareCipher","shareModalRef","folderAddEditModalRef","updateKeyModalRef","favorites","ImportExportModule","OssRoutingModule","buildFlaggedRoute","flagName","useHash","paramsInheritanceStrategy","HasPremiumGuard","routerState","userHasPremium","BreachReportComponent","breachedAccounts","checkedUsername","ReportBreach","ReportExposedPasswords","ReportInactiveTwoFactor","ReportReusedPasswords","ReportUnsecuredWebsites","ReportWeakPasswords","ReportType","reports","ExposedPasswords","ReusedPasswords","WeakPasswords","UnsecuredWebsites","Inactive2fa","DataBreach","ReportsSharedModule","ReportsHomeComponent","reportRequiresPremium","variant","ReportsLayoutComponent","homepage","ReportsRoutingModule","ReportsModule","CipherReportComponent","requiresPaid","hasLoaded","setCiphers","checkAccess","useTotp","ExposedPasswordsReportComponent","exposedPasswordMap","exposedPasswordCiphers","passwordLeaked","exposedCount","canManageCipher","InactiveTwoFactorReportComponent","services","cipherDocs","load2fa","inactive2faCiphers","docs","hasUris","uris","domain","responseJson","json","service","serviceData","documentation","additionalDomain","ReusedPasswordsReportComponent","ciphersWithPasswords","passwordUseMap","reusedPasswordCiphers","UnsecuredWebsitesReportComponent","unsecuredCiphers","WeakPasswordsReportComponent","passwordStrengthMap","passwordStrengthCache","weakPasswordCiphers","isUserNameNotEmpty","getCacheKey","hasUserName","cacheKey","scoreKey","ReportVariant","ReportCardComponent","requiresPremium","ReportListComponent","StorageRequest","AdjustStorageComponent","interval","onAdjusted","onCanceled","storageAdjustment","storageGbAdjustment","paymentFailed","postAccountStorage","updateStorage","adjustedStorageTotal","ApiKeyComponent","clientSecret","apiKey","TransactionType","BillingHistoryComponent","paymentMethodType","transactionType","invoices","transactions","paymentMethodClasses","OrganizationCreateRequest","OrganizationUpgradeRequest","ProviderOrganizationCreateRequest","clientOwnerEmail","organizationCreateRequest","changedProduct","changedOwnedBusiness","OrganizationPlansComponent","showFree","showCancel","_product","_plan","onTrialBillingSuccess","productTypes","singleOrgPolicyBlock","discount","businessOwned","premiumAccessAddon","plans","getPlans","addValidators","selectedPlan","selectedPlanInterval","isAnnual","selectableProducts","validPlans","canBeUsedByBusiness","legacyYear","Free","familyPlan","basePrice","selectablePlans","additionalStoragePriceMonthly","additionalStoragePricePerGb","seatPriceMonthly","seatPrice","hasAdditionalStorageOption","seatTotal","hasAdditionalSeatsOption","subTotal","hasPremiumAccessOption","premiumAccessOptionPrice","freeTrial","trialPeriodDays","taxComponent","paymentDesc","baseSeats","hideBank","method","changeMethod","shareKey","makeShareKey","collectionCt","createSelfHosted","createCloudHosted","updateOrganization","billingSubLabelText","additionalStorageGb","planType","billingAddressCountry","billingAddressPostalCode","upgrade","collectionName","tokenResult","paymentToken","includeTaxId","taxIdNumber","taxId","billingAddressLine1","line1","billingAddressLine2","line2","billingAddressCity","city","billingAddressState","providerRequest","providerKey","getProviderKey","postProviderCreateOrganization","create","createLicense","price","VerifyBankRequest","BitPayInvoiceRequest","AddCreditComponent","onAdded","ppLoading","payPalConfig","ppButtonFormAction","ppButtonBusinessId","creditAmount","ppButtonCustomField","subject","returnUrl","ppButtonFormRef","req","credit","amount","creditAmountNumber","postBitPayInvoice","bitPayUrl","formatAmount","floatAmount","parseFloat","round","PaymentRequest","AdjustPaymentComponent","postAccountPayment","updatePayment","changeCountry","addCredit","closeAddCredit","verifyBank","changePayment","closePayment","submitTaxInfo","PaymentMethodComponent","showAdjustPayment","showAddCredit","verifyBankForm","amount1","amount2","forOrganization","billingPromise","getBilling","orgPromise","getUserBillingPayment","paymentSourceInApp","verifyBankPromise","taxFormPromise","isCreditBalance","balance","creditOrBalance","paymentSource","headerClass","paymentSourceClasses","bank","PaymentComponent","showMethods","hidePaypal","hideCredit","trialFlow","routing_number","account_number","account_holder_name","account_holder_type","currency","btInstance","stripe","stripeElements","stripeCardNumberElement","stripeCardExpiryElement","stripeCardCvcElement","stripeScript","async","onload","Stripe","elements","setStripeElement","btScript","StripeElementStyle","base","fontFamily","fontSize","fontSmoothing","StripeElementClasses","empty","subscribeToTheme","head","appendChild","removeChild","from","querySelectorAll","btStylesheet","braintree","dropin","authorization","container","paymentOptionPriority","paypal","buttonStyle","label","shape","tagline","createErr","console","requestPaymentMethod","payload","nonce","catch","err","postSetupPayment","handleCardSetup","setupIntent","payment_method","createToken","handleCardPayment","paymentIntent","style","classes","mount","theme$","getComputedStyle","documentElement","getPropertyValue","borderColor","PurgeVaultComponent","postPurgeCiphers","TaxInfoComponent","onCountryChanged","pristine","getTaxInfo","taxRates","getTaxRates","localTaxRate","rate","getTaxInfoRequest","hasChanged","updateTaxInfo","putTaxInfo","TwoFactorProviderRequest","TwoFactorBaseComponent","twoFactorProviderType","auth","authResponse","hashedSecret","verificationType","enableFunction","buildRequestModel","putTwoFactorOrganizationDisable","putTwoFactorDisable","requestClass","UpdateTwoFactorDuoRequest","TwoFactorDuoComponent","processResponse","integrationKey","ikey","secretKey","skey","putTwoFactorOrganizationDuo","putTwoFactorDuo","UpdateTwoFactorAuthenticatorRequest","TwoFactorAuthenticatorComponent","qrScript","putTwoFactorAuthenticator","QRious","element","UpdateTwoFactorEmailRequest","TwoFactorEmailComponent","postTwoFactorEmailSetup","sentEmail","putTwoFactorEmail","print","TwoFactorRecoveryComponent","w","write","onafterprint","formatString","UpdateTwoFactorWebAuthnDeleteRequest","UpdateTwoFactorWebAuthnRequest","readKey","TwoFactorWebAuthnComponent","keyIdAvailable","keysConfiguredCount","webAuthnResponse","deviceResponse","putTwoFactorWebAuthn","removePromise","deleteTwoFactorWebAuthn","challengePromise","getTwoFactorWebAuthnChallenge","challenge","readDevice","webAuthnChallenge","log","resetWebAuthn","webAuthnListening","webAuthnError","listening","k","configured","migrated","UpdateTwoFactorYubioOtpRequest","TwoFactorYubiKeyComponent","nfc","key1","key2","key3","key4","key5","putTwoFactorYubiKey","disablePromise","existingKey","padRight","character","showPolicyWarning","twoFactorAuthPolicyAppliesToActiveUser","p2","evaluatePolicies","authenticatorModalRef","yubikeyModalRef","emailModalRef","webAuthnModalRef","recoveryModalRef","TwoFactorVerifyComponent","onAuthed","otp","apiCall","getTwoFactorRecover","getTwoFactorOrganizationDuo","getTwoFactorDuo","getTwoFactorEmail","getTwoFactorWebAuthn","getTwoFactorAuthenticator","getTwoFactorYubiKey","UpdateLicenseComponent","updatePromise","LooseComponentsModule","AsyncActionsModule","AvatarModule","ButtonModule","CalloutModule","IconButtonModule","DialogModule","IconModule","LinkModule","MenuModule","NavigationModule","TableModule","TabsModule","ColorPasswordModule","SharedModule","addFieldType","linkedFieldOptions","fieldType","eventType","addFieldTypeOptions","addFieldLinkedTypeOption","changes","thisCipherType","setLinkedFieldOptions","firstChange","resetCipherLinkedFields","addField","fields","newField","linkedId","removeField","toggleFieldValue","showValue","trackByFunction","drop","previousIndex","currentIndex","linkedFieldOption","i18nKey","TrueFalseValueDirective","elementRef","renderer","trueValue","falseValue","propagateChange","onHostChange","target","setProperty","AddEditCustomFieldsComponent","onEditAttachments","onShareCipher","onEditCollections","onGeneratePassword","onGenerateUsername","showCardNumber","showCardCode","currentDate","canUseReprompt","cardBrandOptions","cardExpMonthOptions","identityTitleOptions","uriMatchOptions","autofillOnPageLoadOptions","personalOwnershipPolicyAppliesToActiveUser","myEmail","addEditCipherInfo","getAddEditCipherInfo","setAddEditCipherInfo","card","identity","secureNote","previousCipherId","getCardExpMonthDisplay","expMonth","editCollections","restorePromise","restoreCipher","toggleUriOptions","checkPasswordPromise","matches","createWithServer","updateWithServer","showRevisionDate","hasPasswordHistory","viewingPasswordHistory","showPasswordCount","passwordRevisionDisplayDate","cleanUp","totpUpdateCode","getTimeInterval","totpTick","totpInterval","setInterval","canLaunch","confirmed","showGetPremium","clearInterval","totpCode","half","totpCodeFormatted","intervalSeconds","mod","totpSec","totpDash","totpLow","OrganizationBadgeModule","VaultFilterSharedModule","VaultFilterService","_collapsedFilterNodes","asObservable","collectionResponse","collectionDomains","noneCollection","getAllNested","flagEnabled","flag","AccountService","InternalAccountService","ConfigApiServiceAbstraction","EventUploadService","FileUploadService","NotificationsService","SettingsService","SyncNotifierService","UserVerificationApiServiceAbstraction","AccountFactory","accountConstructor","args","GlobalStateFactory","globalStateConstructor","StateFactory","globalStateFactory","accountFactory","createGlobal","createAccount","StateVersion","stateVersion","One","environmentUrls","UpdateAvatarRequest","avatarColor","NotificationType","NotificationResponse","contextId","getResponseProperty","SyncCipherCreate","SyncCipherDelete","SyncCipherUpdate","SyncLoginDelete","SyncCipherNotification","SyncFolderCreate","SyncFolderDelete","SyncFolderUpdate","SyncFolderNotification","SyncVault","SyncCiphers","SyncOrgKeys","SyncSettings","LogOut","UserNotification","SyncSendCreate","SyncSendUpdate","SyncSendDelete","SyncSendNotification","AuthRequest","AuthRequestResponse","AuthRequestPushNotification","revisionDate","AnonymousHubService","getNotificationsUrl","anonHubConnection","HubConnectionBuilder","withUrl","skipNegotiation","transport","withHubProtocol","MessagePackHubProtocol","build","on","ProcessNotification","notification","authResponsePushNotifiction","DeviceRequest","appId","getDevice","getDeviceString","pushToken","TokenRequest","device","alterIdentityTokenHeaders","headers","setTwoFactor","setPasswordlessAccessCode","passwordlessAuthRequest","toIdentityToken","client_id","deviceName","authRequest","twoFactorToken","twoFactorProvider","twoFactorRemember","UserApiTokenRequest","startsWith","grant_type","client_secret","ApiKeyResponse","AttachmentUploadDataResponse","fileUploadType","cipherMiniResponse","requestDeviceType","requestIpAddress","creationDate","RegisterResponse","BillingResponse","BillingSourceResponse","BillingTransactionResponse","BillingInvoiceResponse","cardBrand","needsVerification","pdfUrl","paid","createdDate","refunded","partiallyRefunded","refundedAmount","BillingHistoryResponse","BillingPaymentResponse","BreachAccountResponse","addedDate","breachDate","dataClasses","isActive","isVerified","logoPath","modifiedDate","pwnCount","SelectionReadOnlyResponse","CollectionResponse","CollectionDetailsResponse","CollectionGroupDetailsResponse","DeviceVerificationResponse","isDeviceVerificationSectionEnabled","unknownDeviceVerificationEnabled","GlobalDomainResponse","DomainsResponse","EventResponse","GroupResponse","GroupDetailsResponse","IdentityCaptchaResponse","IdentityTokenResponse","accessToken","access_token","expiresIn","expires_in","refreshToken","refresh_token","tokenType","token_type","apiUseKeyConnector","keyConnectorUrl","IdentityTwoFactorResponse","twoFactorProviders2","prop","parseInt","KeyConnectorUserKeyResponse","OrganizationConnectionResponse","configType","rawConfig","OrganizationExportResponse","OrganizationSponsorshipSyncStatusResponse","ProfileOrganizationResponse","useDirectory","use2fa","useKeyConnector","useScim","useSecretsManager","selfHost","usersGetPremium","ssoBound","providerName","familySponsorshipLastSyncDateString","familySponsorshipValidUntilString","ProfileProviderOrganizationResponse","ProfileProviderResponse","ProfileResponse","providerOrganizations","premiumPersonally","premiumFromOrganization","twoFactorEnabled","securityStamp","PaymentResponse","userProfile","PlanResponse","nameLocalizationKey","descriptionLocalizationKey","baseStorageGb","maxUsers","maxAdditionalSeats","maxAdditionalStorage","hasSelfHost","hasPolicies","hasGroups","hasDirectory","hasEvents","has2fa","hasApi","hasSso","hasResetPassword","upgradeSortOrder","displaySortOrder","stripePlanId","stripeSeatPlanId","stripeStoragePlanId","stripePremiumAccessPlanId","PreloginResponse","ProviderOrganizationResponse","userCount","ProviderOrganizationOrganizationDetailsResponse","OrganizationUserBulkPublicKeyResponse","ProviderUserBulkPublicKeyResponse","ProviderUserBulkResponse","ProviderUserResponse","ProviderUserUserDetailsResponse","ProviderResponse","SendAccessResponse","SendFileDownloadDataResponse","SendResponse","notes","maxAccessCount","accessCount","SendFileUploadDataResponse","SsoPreValidateResponse","SubscriptionResponse","storageName","expiration","BillingSubscriptionResponse","BillingSubscriptionUpcomingInvoiceResponse","trialEndDate","periodStartDate","periodEndDate","cancelledDate","BillingSubscriptionItemResponse","quantity","sponsoredSubscriptionItem","FolderResponse","SyncResponse","TaxInfoResponse","taxIdType","TaxRateResponse","TwoFactorAuthenticatorResponse","TwoFactorDuoResponse","TwoFactorEmailResponse","TwoFactorProviderResponse","TwoFactorRecoverResponse","TwoFactorWebAuthnResponse","KeyResponse","ChallengeResponse","attestation","authenticatorSelection","excludeCredentials","extensions","pubKeyCredParams","rp","TwoFactorYubiKeyResponse","UserKeyResponse","AuditService","hashBytes","hashStart","hashEnding","nativeFetch","getHibpBreach","throttleKey","propertyKey","descriptor","originalMethod","allThrottles","throttles","getThrottles","argsThrottleKey","queue","exec","onFinally","apply","PasswordTokenRequest","AuthResult","requiresCaptcha","LogInStrategy","tokenRequest","startLogIn","clearSelectedProvider","postIdentityToken","processTwoFactorResponse","processCaptchaResponse","processTokenResponse","buildDeviceRequest","buildTwoFactor","userProvidedTwoFactor","storedTwoFactorToken","getTwoFactorToken","saveAccountInformation","tokenResponse","accountInformation","decodeToken","hasPremiumPersonally","tokens","setTwoFactorToken","setUserKey","createKeyPairForOldAccount","setProviders","postAccountKeys","PasswordLogInStrategy","PasswordlessLogInStrategy","passwordlessCredentials","SsoTokenRequest","code_verifier","redirect_uri","SsoLogInStrategy","newSsoUser","convertNewSsoUserToKeyConnector","getAndSetKey","UserApiLogInStrategy","getKeyConnectorUrl","setApiKeyClientId","setApiKeyClientSecret","PreloginRequest","sequentialize","caches","getCache","argsCacheKey","SortedCiphersCache","comparator","sortedCiphersByUrl","timeouts","isCached","addCiphers","Ciphers","resetTimer","getLastUsed","getLastLaunched","getNext","updateLastUsedIndex","lastUsedIndex","localData","lastLaunched","y","valueOf","getNextIndex","CipherBulkMoveRequest","CipherBulkRestoreRequest","CipherBulkShareRequest","CipherPartialRequest","CipherShareRequest","DomainMatchBlacklist","CipherService","settingsService","fileUploadService","encryptService","sortedCiphersCache","sortCiphersByLastUsed","getDecryptedCipherCache","getDecryptedCiphers","setDecryptedCipherCache","setDecryptedCiphers","clearIndex","clearCache","clearDecryptedCiphersState","existingCipher","passwordHistory","ph","lastUsedDate","passwordRevisionDate","hasFields","existingHiddenFields","hiddenFields","ef","matchedField","encryptObjProperty","encryptCipherData","encryptFields","encryptPasswordHistories","encryptAttachments","attachmentsModel","encAttachments","sizeName","fieldsModel","encFields","encField","encryptField","fieldModel","phModels","encPhs","encPh","encryptPasswordHistory","phModel","getLocalData","reindexCiphers","hasKey","getOrgKeys","userKey","getKeyForUserEncryption","grouped","agg","entries","groupedCiphers","decryptItems","flat","indexedEntityId","getAllDecryptedForGrouping","groupingId","getAllDecryptedForUrl","includeOtherTypes","defaultMatch","eqDomainsPromise","settings$","eqDomain","matchingDomains","getDefaultUriMatch","domainUrlHost","urlHost","RegExp","test","getCiphersOrganization","cr","getLastUsedForUrl","autofillOnPageLoad","getCipherForUrl","getLastLaunchedForUrl","getNextCipherForUrl","updateLastUsedIndexForUrl","updateLastUsedDate","ciphersLocalData","setLocalData","decryptedCipherCache","cached","updateLastLaunchedDate","saveNeverDomain","getNeverDomains","setNeverDomains","postCipherCreate","postCipher","upsert","putCipher","putPartialCipher","attachmentPromises","shareAttachmentWithServer","encCipher","putShareCipher","encCiphers","putShareCiphers","toCipherData","unencryptedFile","reader","FileReader","readAsArrayBuffer","evt","cData","onerror","filename","encFileName","dataEncKey","encData","encryptToBytes","fileSize","byteLength","adminRequest","uploadDataResponse","postCipherAttachment","uploadCipherAttachment","legacyServerAttachmentFileUpload","blob","Blob","Buffer","filepath","contentType","postCipherAttachmentAdminLegacy","postCipherAttachmentLegacy","putCipherCollections","clearEncryptedCiphersState","putMoveCiphers","deleteManyCiphers","deleteAttachment","aLastUsed","bLastUsed","bothNotNull","sortCiphersByLastUsedThenName","aName","bName","softDelete","setDeletedDate","putDeleteCipher","putDeleteManyCiphers","clearDeletedDate","putRestoreCipher","putRestoreManyCiphers","restores","attachmentView","attachmentResponse","postShareCipherAttachment","theProp","theObj","modelProp","loginUri","cardholderName","brand","expYear","firstName","middleName","lastName","address1","address2","address3","company","phone","ssn","passportNumber","licenseNumber","lastUsed","autofillOnPageLoadDefault","getAutoFillOnPageLoadDefault","clearSortedCiphers","ServerConfigResponse","gitHash","server","ThirdPartyServerConfigResponse","environment","EnvironmentServerConfigResponse","vault","api","notifications","ServerConfig","serverConfigData","utcDate","getAgeInMilliseconds","expiresSoon","EFFLongWordList","BaseEncryptedOrganizationKey","EncryptedOrganizationKey","ProviderEncryptedOrganizationKey","toData","CryptoService","setCryptoMasterKey","storeKey","keyHash","setDecryptedCryptoSymmetricKey","setEncryptedCryptoSymmetricKey","setDecryptedPrivateKey","setEncryptedPrivateKey","setOrgKeys","providerOrgs","encOrgKeyData","setDecryptedOrganizationKeys","setEncryptedOrganizationKeys","setProviderKeys","providerKeys","setDecryptedProviderKeys","setEncryptedProviderKeys","keySuffix","inMemoryKey","getCryptoMasterKey","symmetricKey","getKeyFromStorage","retrieveKeyFromStorage","validateKey","warning","clearSecretKeyStore","storedKeyHash","getEncKeyHelper","getPublicKey","inMemoryPublicKey","rsaExtractPublicKey","setPublicKey","decryptedPrivateKey","getDecryptedPrivateKey","getEncryptedPrivateKey","keyFingerprint","userFingerprint","hkdfExpand","hashPhrase","decryptedOrganizationKeys","getDecryptedOrganizationKeys","getEncryptedOrganizationKeys","encOrgKey","fromData","decOrgKey","getProviderKeys","decryptedProviderKeys","getDecryptedProviderKeys","encProviderKeys","getEncryptedProviderKeys","hasKeyInMemory","getCryptoMasterKeyAuto","hasCryptoMasterKeyBiometric","getEncryptedCryptoSymmetricKey","clearKey","clearSecretStorage","clearStoredKey","setCryptoMasterKeyAuto","setCryptoMasterKeyBiometric","clearKeyHash","clearEncKey","memoryOnly","clearKeyPair","keysToClear","clearOrgKeys","clearProviderKeys","clearPinProtectedKey","setEncryptedPinProtected","clearKeys","toggleKey","salt","protectedKeyCs","pinProtectedKey","getEncryptedPinProtected","randomBytes","keyPair","stretchKey","keyMaterial","sendKey","hkdf","hashPurpose","iterations","theKey","buildEncKey","plainValue","encBytes","encValue","privateKeyValue","headerPieces","encPieces","encType","alg","encString","keyForEnc","encBuffer","randomNumber","min","rval","range","bitsNeeded","ceil","log2","bytesNeeded","mask","pow","byteArray","Uint8Array","shouldStoreKey","keyB64","getBiometricUnlock","getCryptoMasterKeyBiometric","macKey","minimumEntropy","entropyPerWord","numWords","hashArr","phrase","hashNumber","remainder","divide","encKeyEnc","getDecryptedCryptoSymmetricKey","decEncKey","encKeyCipher","encryptionType","symmetricCryptoKey","EncryptedObject","EncryptServiceImplementation","logMacFailures","plainBuf","encObj","aesEncrypt","iv","mac","macLen","resolveLegacyKey","fastParams","aesDecryptFastParameters","computedMac","hmacFast","macData","compareFast","logMacFailed","aesDecryptFast","encThing","macBytes","ivBytes","dataBytes","hmac","aesDecrypt","classInitializers","MultithreadEncryptServiceImplementation","clear$","worker","Worker","restartTimeout","fromEvent","jsonItem","className","initializerKey","defaultIfEmpty","terminate","EventRequest","EventExport","FileUploadType","AzureFileUploadService","upload","renewalCallback","azureUploadBlob","azureUploadBlocks","urlObject","Headers","toUTCString","searchParams","blobResponse","baseUrl","blockSize","getMaxBlockSize","blockIndex","numBlocks","blocksStaged","renewUrlIfNecessary","blockUrl","blockId","encodedBlockId","blockData","blockHeaders","blockRequest","blockResponse","blockListUrl","blockListXml","expiry","utfBlockId","blockIdList","xml","Version","month","day","Number","compareTo","BitwardenFileUploadService","encryptedFileName","encryptedFileData","SetKeyConnectorKeyRequest","KeyConnectorUserKeyRequest","LoginService","_email","_rememberEmail","OrganizationUserResponse","OrganizationUserUserDetailsResponse","OrganizationUserDetailsResponse","OrganizationUserResetPasswordDetailsReponse","OrganizationUserBulkResponse","OrganizationUserBulkRequest","SsoType","OpenIdConnectRedirectBehavior","Saml2BindingType","Saml2NameIdFormat","Saml2SigningBehavior","OrganizationApiKeyInformationResponse","OrganizationAutoEnrollStatusResponse","KeysResponse","OrganizationKeysResponse","OrganizationResponse","businessAddress1","businessAddress2","businessAddress3","businessCountry","businessTaxNumber","maxAutoscaleSeats","OrganizationSubscriptionResponse","SsoConfigApi","authority","metadataAddress","redirectBehavior","getClaimsFromUserInfoEndpoint","additionalScopes","additionalUserIdClaimTypes","additionalEmailClaimTypes","additionalNameClaimTypes","acrValues","expectedReturnAcrValue","spNameIdFormat","spOutboundSigningAlgorithm","spSigningBehavior","spMinIncomingSigningAlgorithm","spWantAssertionsSigned","spValidateCertificates","idpEntityId","idpBindingType","idpSingleSignOnServiceUrl","idpSingleLogoutServiceUrl","idpX509PublicCert","idpOutboundSigningAlgorithm","idpAllowUnsolicitedAuthnResponse","idpDisableOutboundLogoutRequests","idpWantAuthnRequestsSigned","view","OpenIdConnect","openId","Saml2","saml","idpAllowOutboundLogoutRequests","OrganizationSsoResponse","urls","SsoUrls","callbackPath","signedOutCallbackPath","spEntityId","spMetadataUrl","spAcsUrl","PasswordGeneratorPolicyOptions","useUppercase","useLowercase","numberCount","specialCount","inEffect","DefaultOptions","minNumber","minUppercase","minLowercase","wordSeparator","ResetPasswordPolicyOptions","ProviderUserStatusType","ProviderUserType","Provider","canAccess","isProviderAdmin","canCreateOrganizations","canAccessEventLogs","ProviderAdmin","SearchService","indexing","immediateSearchLocales","defaultSearchableMinLength","searchableMinLength","registeredPipeline","lunr","Pipeline","registerFunction","normalizeAccentsPipelineFunction","query","normalizeSearchQuery","builder","Builder","pipeline","boost","extractor","subTitle","uriExtractor","fieldExtractor","attachmentExtractor","results","getIndexForSearch","searchCiphersBasic","ciphersMap","searchResults","soWild","Query","wildcard","LEADING","TRAILING","q","tokenizer","term","toLocaleLowerCase","sendsMatched","lowPriorityMatched","joined","hasAttachments","hostname","protocolIndex","queryIndex","searchableFields","metadata","normalize","Send","getCryptoService","TokenService","decoded","setTokens","clientIdClientSecret","setToken","setRefreshToken","setClientId","setClientSecret","getClientId","getApiKeyClientId","getClientSecret","getApiKeyClientSecret","setAccessToken","getToken","getAccessToken","getRefreshToken","clearTwoFactorToken","clearToken","getTokenExpirationDate","exp","setUTCSeconds","tokenSecondsRemaining","offsetSeconds","msRemaining","tokenNeedsRefresh","email_verified","getIssuer","iss","getIsExternal","amr","v1Keys","alwaysShowDock","autoConfirmFingerprints","autoFillOnPageLoadDefault","biometricAwaitingAcceptance","biometricFingerprintValidated","biometricUnlock","clearClipboard","collapsedGroupings","convertAccountToKeyConnector","defaultUriMatch","disableAddLoginNotification","disableAutoBiometricsPrompt","disableAutoTotpCopy","disableBadgeCounter","disableChangedPasswordNotification","disableContextMenuItem","disableGa","dontShowCardsCurrentTab","dontShowIdentitiesCurrentTab","enableAlwaysOnTop","enableAutoFillOnPageLoad","enableBiometric","enableBrowserIntegration","enableBrowserIntegrationFingerprint","enableCloseToTray","enableMinimizeToTray","enableStartToTray","enableTray","encOrgKeys","encPrivate","entityType","eventCollection","installedVersion","lastActive","mainWindowSize","minimizeOnCopyToClipboard","neverDomains","noAutoPromptBiometricsText","openAtLogin","passwordGenerationOptions","pinProtected","ssoIdentifier","ssoState","stamp","usesConnector","rememberedEmail","v1KeyPrefixes","lastSync","partialKeys","needsMigration","currentStateVersion","getCurrentStateVersion","Latest","migrate","migrateStateFrom1To2","Two","migrateStateFrom2To3","Three","migrateStateFrom3To4","Four","authenticatedAccounts","getAuthenticatedAccounts","migratedAccount","migrateAccountFrom4To5","setCurrentStateVersion","Five","migrateAccountFrom5To6","Six","clearV1Keys","clearingUserId","keyPrefix","globals","noAutoPromptBiometrics","ssoOrganizationIdentifier","defaultAccount","accountSettings","autoConfirmFingerPrints","decrypted","encrypted","passwordGenerationHistory","apiKeyClientSecret","cryptoMasterKey","cryptoMasterKeyAuto","cryptoMasterKeyB64","cryptoMasterKeyBiometric","cryptoSymmetricKey","legacyEtmKey","organizationKeys","apiKeyClientId","authenticationStatus","everBeenUnlocked","decodedToken","accountActivity","authenticatedUserIds","getGlobals","encryptedOrgKeys","htmlStorageLocation","newVersion","OrganizationData","SyncService","logoutCallback","syncInProgress","toJSON","forceSync","allowThrowOnError","syncStarted","syncCompleted","needsSync","needsSyncing","getSync","syncProfile","syncFolders","syncCollections","syncCiphers","syncSends","syncSettings","syncPolicies","syncUpsertFolder","isEdit","localFolder","remoteFolder","syncDeleteFolder","syncUpsertCipher","shouldUpdate","localCipher","checkCollections","remoteCipher","getFullCipherDetails","syncDeleteCipher","syncUpsertSend","localSend","remoteSend","getSend","syncDeleteSend","getAccountRevisionDate","getSecurityStamp","setAvatarColor","setSecurityStamp","setEmailVerified","setHasPremiumPersonally","setHasPremiumFromOrganization","setForcePasswordReset","setUsesKeyConnector","isProviderUser","userNeedsMigration","setConvertAccountRequired","eqDomains","setEquivalentDomains","B32Chars","SteamChars","VerifyOTPRequest","OTP","AnonAddyForwarder","generate","anonaddy","requestInit","Authorization","DuckDuckGoForwarder","address","FastmailForwarder","accountId","getAccountId","using","methodCalls","emailPrefix","fastmail","prefix","methodResponses","created","notCreated","primaryAccounts","FirefoxRelayForwarder","generated_for","full_address","ForwarderOptions","FastmailForwarderOptions","AnonAddyForwarderOptions","SimpleLoginForwarder","Authentication","note","alias","wordCapitalize","wordIncludeNumber","forwardedAnonAddyDomain","DecryptParameters","BroadcasterService","subscribers","messageCallback","ThemeBuilder","configuredTheme","systemTheme","effectiveTheme","updateSystemTheme","ThemingService","_theme","monitorThemeChanges","getSystemTheme","monitorConfiguredThemeChanges","monitorSystemThemeChanges","getValue","setTheme","matchMedia","JslibServicesModule","useValue","useFactory","deps","language","makeAndGetAppId","getAnonymousAppId","existingId","guid","pushNotificationSubject","logInStrategy","strategy","clearState","saveState","callback","getEverBeenUnlocked","preloginResponse","postPrelogin","startSessionTimeout","clearSessionTimeout","sessionTimeout","P","injector","_folders","_folderViews","activeAccountUnlocked$","unlocked","updateObservables","getAllFromState","getFromState","getAllDecryptedFromState","decryptFolders","updates","cId","foldersMap","decryptFolderPromises","decryptedFolders","noneFolder","postFolder","putFolder","deleteFolder","accountService","verificationRequest","_avatarUpdate$","getAvatarColor","putAvatar","setDecryptedCollections","decCollections","decryptedCollections","getDecryptedCollections","collectionCopy","getNested","urlsSubject","scimUrl","setUrlsFromStorage","notificationsUrl","getIconsUrl","iconsUrl","getApiUrl","apiUrl","identityUrl","getEventsUrl","eventsUrl","getScimUrl","getEnvironmentUrls","envUrls","webVault","icons","keyConnector","setUrls","formatUrl","scim","setEnvironmentUrls","getUrls","isCloud","period","digits","keyB32","isOtpAuth","isSteamAuth","digitParams","periodParam","algParam","epoch","timeHex","leftPad","decToHex","timeBytes","keyBytes","b32ToBytes","sign","offset","binary","fullCode","trunc","l","b32ToHex","cleanedInput","bits","hex","byteIndex","chunk","signature","generatePassphrase","sanitizePasswordLength","positions","shuffleArray","allCharSet","lowercaseCharSet","uppercaseCharSet","numberCharSet","specialCharSet","positionChars","randomCharIndex","listLength","wordList","wordIndex","appendRandomNumberToRandomWord","getPasswordGenerationOptions","setPasswordGenerationOptions","enforcedOptions","enforcePasswordGeneratorPoliciesOnOptions","getPasswordGeneratorPolicyOptions","currentPolicy","getDecryptedPasswordGenerationHistory","getEncryptedPasswordGenerationHistory","decryptHistory","setDecryptedPasswordGenerationHistory","currentHistory","matchesPrevious","unshift","newHistory","encryptHistory","setEncryptedPasswordGenerationHistory","userInputs","globalUserInputs","finalUserInputs","array","j","forGeneration","minUppercaseCalc","minLowercaseCalc","minNumberCalc","minSpecialCalc","generateCatchall","generateSubaddress","generateForwarded","generateWord","word","zeroPad","atIndex","emailBeginning","emailEnding","subaddressString","randomString","catchallDomain","startString","forwarder","forwarderOptions","forwardedSimpleLoginApiKey","forwardedAnonAddyApiToken","forwardedFirefoxApiToken","forwardedFastmailApiToken","forwardedDuckDuckGoToken","getUsernameGenerationOptions","setUsernameGenerationOptions","charSet","customUserAgent","isWebClient","isDesktopClient","Accept","identityToken","getClientType","qsStringify","getCredentials","isJsonResponse","TwoFactorProviders2","HCaptcha_SiteKey","doAuthRefresh","postSetKeyConnectorKey","postIapCheck","postConvertToKeyConnector","getSends","L","postSend","postFileTypeSend","renewSendFileUploadUrl","fileId","postSendFile","postSendFileLegacy","putSend","putSendRemovePassword","deleteSend","getCipher","postImportCiphers","postImportOrganizationCiphers","putRestoreCipherAdmin","renewAttachmentUploadUrl","postAttachmentFile","dr","deleteCollectionUser","deleteGroupUser","postPublicImportDirectory","rawId","getClientExtensionResults","AttestationObject","attestationObject","clientDataJson","clientDataJSON","getDeviceVerificationSettings","putDeviceVerificationSettings","getCloudCommunicationsEnabled","getOrganizationConnection","createOrganizationConnection","updateOrganizationConnection","organizationConnectionId","deleteOrganizationConnection","postProviderSetup","getProvider","putProvider","getProviderUsers","getProviderUser","postProviderUserInvite","postProviderUserReinvite","postManyProviderUserReinvite","postProviderUserBulkConfirm","deleteManyProviderUsers","postProviderUserAccept","postProviderUserConfirm","postProviderUsersPublicKey","putProviderUser","deleteProviderUser","getProviderClients","postProviderAddOrganization","deleteProviderOrganization","getEvents","addEventParameters","getEventsOrganization","getEventsProvider","postEventsCollect","authHeader","getActiveBearerToken","getUserKeyFromKeyConnector","handleError","postUserKeyToKeyConnector","getKeyConnectorAlive","getOrganizationExport","getApplicationVersionNumber","sponsoredOrgId","getSponsorshipSyncStatus","sponsoringOrganizationId","deleteRemoveSponsorship","sponsoringOrgId","doRefreshToken","doApiTokenRefresh","deviceRequest","hasResponse","alterHeaders","requestUrl","responseType","responseIsJson","tokenError","isTextResponse","Message","typeHeader","azureFileUploadService","bitwardenFileUploadService","uploadSendFile","uploadData","Direct","Azure","_settings","getSettings","setSettings","setVaultTimeout","currentAction","setVaultTimeoutAction","policyAppliesToUser","setProtectedPin","lockedCallback","loggedOutCallback","inited","checkOnInterval","startCheck","checkVaultTimeout","isViewOpen","accounts","accounts$","shouldLock","executeTimeoutAction","getLastActive","vaultTimeoutSeconds","getExport","format","getEncryptedExport","getDecryptedExport","getPasswordProtectedExport","clearText","encKeyValidation","encText","jsonDoc","passwordProtected","encKeyValidation_DO_NOT_EDIT","getOrganizationEncryptedExport","getOrganizationDecryptedExport","extension","padNumber","getSeconds","decFolders","exportCiphers","buildCommonCipher","exportData","exportPromises","decCol","decCipher","collectionsMap","padCharacter","numString","login_uri","login_username","login_password","login_totp","connected","inactive","reconnectTimer","signalrConnection","off","accessTokenFactory","processNotification","onclose","reconnect","isAuthedAndUnlocked","updateConnection","sync","reconnectFromActivity","disconnectFromInactivity","isAuthenticated","payloadUserId","UserId","myUserId","random","crypto","subtle","algorithm","wcLen","passwordBuf","toBuf","pbkdf2Params","toWebCryptoAlgorithm","impKey","importKey","deriveBits","ikm","outputByteSize","hkdfParams","prk","hashLen","infoBuf","infoArr","runningOkmLength","previousT","n","okm","md","valueBytes","toByteString","update","digest","valueBuf","signingAlgorithm","mac1","mac2","arr1","arr2","bytes","getBytes","rand","Uint32Array","putInt32","meta","encKeyByteString","macKeyByteString","encKeyB64","macKeyB64","parameters","dataBuffer","decipher","finish","output","rsaParams","impPrivateKey","jwkPrivateKey","exportKey","jwkPublicKeyParams","kty","ext","impPublicKey","modulusLength","publicExponent","generateKey","arr","getRandomValues","buf","cryptoFunctionservice","uploadEvents","getEventCollection","clearEvents","setEventCollection","eventUploadService","uploadImmediately","orgIds","_policies","getEncryptedPolicies","decryptedPolicies","getDecryptedPolicies","diskPolicies","prototype","call","setDecryptedPolicies","of","obsPolicies","filteredPolicies","policyFilter","checkPoliciesThatApplyToUser","toLocaleUpperCase","resetPasswordPolicyOptions","policiesResponse","setEncryptedPolicies","isExcemptFromPolicies","isExemptFromPolicies","policiesMap","policySet","getPoliciesByInvitedUser","setDecryptedSends","fileData","ArrayBuffer","encryptFileData","parseFile","decSends","getDecryptedSends","legacyServerSendFileUpload","loggedInUsingSso","requiredByOrganization","userIsNotUsingKeyConnector","keyConnectorRequest","handleKeyConnectorError","userKeyResponse","keyArr","pubKey","privKey","setPasswordRequest","setConvertAccountToKeyConnector","getConvertAccountRequired","getConvertAccountToKeyConnector","userVerificationApiService","alreadyHashed","validateInput","postAccountVerifyOTP","postAccountRequestOTP","_organizations","getOrganizations","organizationsMap","hasOrganizations","getByIdentifier","setOrganizations","controlErrors","keyError","getSubscription","getLicense","updateSubscription","updateSeats","importDirectory","getApiKeyInformation","organizationApiKeyType","getSso","updateSso","_sync","sync$","configApiService","_serverConfig","serverConfig$","switchMap","timer","E","buildServerConfig","serverConfig","getServerConfig","fetchServerConfig","setServerConfig","defaultErrorMessage","validationErrors","getAllMessages","MemoryStorageService","store","BroadcasterMessagingService","subscriber","arg","HtmlStorageService","defaultOptions","localStorage","getItem","sessionStorage","setItem","removeItem","ContainerService","attachToGlobal","bitwardenContainerService","getEncryptService","InitService","notificationsService","ModalService","applicationRef","modalOpen","setupHandlers","onCreated","modals","shown","closed","onClose","PasswordRepromptComponent","PasswordRepromptService","FileDownloadBuilder","_request","fileType","fileNameLower","endsWith","WebFileDownloadService","createObjectURL","position","ClientType","WebPlatformUtilsService","browserCache","chrome","Web","isChrome","isEdge","isOpera","isVivaldi","isMacAppStore","rel","PublicKeyCredential","supportsDuo","confirmText","cancelText","bodyIsHtml","iconClasses","bootstrapModal","removeAttribute","iconHtmlStr","heightAuto","buttonsStyling","iconHtml","html","titleText","showCancelButton","cancelButtonText","showConfirmButton","confirmButtonText","doc","clipboardData","setData","queryCommandSupported","textarea","textContent","copyEl","contains","execCommand","warn","readFromClipboard","authenticateBiometric","CoreModule","parentModule","initService","systemLanguage","localesDirectory","getLocalesJson","_locale","ReplaySubject","defaultMessages","localeMessages","Intl","Collator","numeric","sensitivity","loadMessages","p3","translate","messagesObj","formattedLocale","locales","placeholders","placeProp","content","replaceToken","replaceContent","filePath","localesResult","migrationStateFrom1To2","LoginModule","VerticalStepperModule","TrialInitiationModule","OrganizationManageModule","OrganizationUserModule","OssModule","WildcardRoutingModule","ProviderAddOrganizationRequest","WebProviderService","addOrganizationToProvider","encryptedOrgKey","detachOrganizastion","AddOrganizationComponent","webProviderService","onAddedOrganization","ProviderPermissionsGuard","providerPermissions","ProvidersComponent","addExistingOrganization","DisallowedPlanTypes","ClientsComponent","manageOrganizations","showAddExisting","pagedClientsCount","clients","candidateOrgs","allowedOrgsIds","addableOrganizations","pagedClients","addModalRef","ProviderUserAcceptRequest","AcceptProviderComponent","EventsComponent","providerUsersUserIdMap","providerUsersIdMap","ProviderUserBulkRequest","ProviderUserConfirmRequest","ProviderUserBulkConfirmRequest","ProviderUserInviteRequest","ProviderUserUpdateRequest","ServiceUser","ProvidersLayoutComponent","showMenuBar","showManageTab","showSettingsTab","manageRoute","ProviderUpdateRequest","SetupProviderComponent","ProviderSetupRequest","SetupComponent","ProvidersRoutingModule","ProvidersModule","registerComponentFactoryResolver","SecretsManagerModule","AppRoutingModule","toastrService","sanitizer","lastActivity","idleTimer","isIdle","lang","runOutsideAngular","onmousemove","recordActivity","onmousedown","ontouchstart","onclick","onscroll","onkeypress","setFullWidth","clean","setLastActive","idleStateChanged","sanitize","enableHtml","trustedHtml","timeOut","DisablePersonalVaultExportPolicy","DisablePersonalVaultExportPolicyComponent","MaximumVaultTimeoutPolicy","MaximumVaultTimeoutPolicyComponent","AppComponent","ScimConfigApi","scimProvider","ScimConfigRequest","copyScimUrl","toggleScimKey","rotateScimKey","copyScimKey","ScimComponent","showScimSettings","showScimKey","formData","endpointUrl","connection","setConnectionFormValues","loadApiKey","apiKeyRequest","apiKeyResponse","getScimEndpointUrl","rotatePromise","existingConnectionId","OrganizationSsoRequest","SsoConfigView","InputStripSpacesDirective","onInput","CopyClickDirective","valueToCopy","onClick","LaunchClickDirective","uriToLaunch","BaseCvaComponent","controlDir","internalControl","onValueChangesInternal","describedById","showDescribedBy","controlId","helperText","isRequired","onBlurInternal","InputCheckboxComponent","validateKeyConnectorUrl","toggleOpenIdCustomizations","defaultSigningAlgorithm","ssoType","ssoTypeOptions","None","samlSigningAlgorithms","saml2SigningBehaviourOptions","IfIdpWantAuthnRequestsSigned","Always","saml2BindingTypeOptions","HttpRedirect","HttpPost","saml2NameIdFormatOptions","NotConfigured","Unspecified","EmailAddress","X509SubjectName","WindowsDomainQualifiedName","KerberosPrincipalName","EntityIdentifier","Persistent","Transient","connectRedirectOptions","RedirectGet","FormPost","destory$","showOpenIdCustomizations","haveTestedKeyConnector","openIdForm","samlForm","ssoConfigForm","newType","ssoSettings","populateForm","validateForm","readOutErrors","fromView","markAsPending","invalidUrl","getErrorCount","acc","enableTestKeyConnector","samlSigningAlgorithmOptions","markAsDirty","ssoConfigView","errorCount","errorCountText","div","innerText","existing","OrganizationsModule","AppModule","bootstrapModule","preserveWhitespaces","CalloutComponent","useAlertRole","calloutStyle","enforcedPolicyMessage","getPasswordScoreAlertDisplay","FallbackSrcDirective","onError","appFallbackSrc","cardIcons","Visa","Mastercard","Amex","Discover","JCB","Maestro","UnionPay","RuPay","Mir","IconComponent","image","fallbackImage","imageEnabled","setLoginIcon","setCardIcon","hostnameUri","isWebsite","ModalRef","_onCreated","_onClose","_onClosed","_onShow","_onShown","onShow","lastResult","toPromise","A11yTitleDirective","appA11yTitle","hasAttribute","ApiActionDirective","appApiAction","AutofocusDirective","appAutofocus","condition","autofocus","InputVerbatimDirective","appInputVerbatim","disableComplete","StopClickDirective","$event","preventDefault","StopPropDirective","stopPropagation","AuthGuard","promptBiometric","LockGuard","loginpage","UnauthGuard","BitwardenToast","toastPackage","BitwardenToastGlobalConfig","toastComponent","BitwardenToastModule","ngModule","default","numberFormats","cardLength","blocks","Other","CreditCardNumberPipe","creditCardNumber","rules","matchingRule","chunks","JslibModule","forRoot","maxOpened","autoDismiss","closeButton","I18nPipe","SearchPipe","prop1","prop2","prop3","UserNamePipe","WINDOW","MEMORY_STORAGE","SECURE_STORAGE","STATE_FACTORY","STATE_SERVICE_USE_CACHE","LOGOUT_CALLBACK","LOCKED_CALLBACK","LOCALES_DIRECTORY","SYSTEM_LANGUAGE","LOG_MAC_FAILURES","DynamicModalComponent","cd","focusTrapFactory","loadChildComponent","childComponentType","setComponentParameters","componentRef","focusTrap","focusFirstTabbableElementWhenReady","componentType","componentFactory","modalContentRef","destroy","getFocus","autoFocusEl","ModalInjector","_parentInjector","_additionalTokens","notFoundValue","flags","ModalConfig","modalList","factoryResolvers","modalCount","topModal","viewContainerRef","modalComponentRef","openInternal","hostView","replaceTopModal","closeAll","attachToDom","createModalComponent","attachView","domElem","rootNodes","detachView","backdrop","modalEl","dialogEl","zIndex","prepend","closeElement","WeakMap","AbstractThemingService","DynamicTreeNode","setCollapsedGroupings","getCollapsedGroupings","transformation","storedFolders","orgCiphers","oc","getAllFoldersNested","storedCollections","folderCopy","getFolderNested","AccountApiService","AvatarUpdateService","ApiService","AppIdService","AuthService","CollectionService","CryptoFunctionService","EncryptService","EnvironmentService","EventCollectionService","ExportService","FileDownloadService","FolderApiServiceAbstraction","FolderService","InternalFolderService","FormValidationErrorsService","I18nService","KeyConnectorService","LogService","MessagingService","OrganizationUserService","OrganizationApiServiceAbstraction","canAccessSettingsTab","canAccessMembersTab","canAccessGroupsTab","canAccessReportingTab","canAccessReports","canAccessBillingTab","canManageCollections","canAccessManageTab","canAccessOrgAdmin","isManager","canAccessVaultTab","getOrganizationById","canAccessAdmin","isNotProviderUser","OrganizationService","InternalOrganizationService","PasswordGenerationService","PlatformUtilsService","PolicyApiServiceAbstraction","PolicyService","InternalPolicyService","ProviderService","SendService","StateMigrationService","AbstractStorageService","TotpService","TwoFactorService","UserVerificationService","UsernameGenerationService","ValidationService","VaultTimeoutService","VaultTimeoutSettingsService","AuthenticationStatus","AuthenticationType","CipherRepromptType","CipherType","DeviceType","EncryptionType","EventType","FieldType","HashPurpose","HtmlStorageLocation","KdfType","DEFAULT_KDF_TYPE","PBKDF2_SHA256","DEFAULT_KDF_ITERATIONS","SEND_KDF_ITERATIONS","KeySuffixOptions","LoginLinkedId","CardLinkedId","IdentityLinkedId","LogLevelType","OrganizationApiKeyType","OrganizationConnectionType","OrganizationUserStatusType","OrganizationUserType","PaymentMethodType","PlanType","PolicyType","ProductType","SecureNoteType","SendType","ThemeType","TwoFactorProviderType","UriMatchType","VerificationType","getFlags","envFlags","LinkedMetadata","_i18nKey","TreeNode","ServiceUtils","nodeTree","partIndex","delimiter","partName","nestedTraverse","newPartName","getTreeNodeObject","nodeURL","Utils","isNode","process","release","isBrowser","isMobileBrowser","isMobile","isAppleMobileBrowser","isAppleMobile","binaryString","atob","charCodeAt","fromB64ToArray","fromUrlB64ToB64","strUtf8","unescape","fromB64toUrlB64","fromBufferToB64","b64Str","encodedString","decodeURIComponent","escape","urlB64Str","fromB64ToUtf8","utfStr","fromBufferToUrlB64","fromUtf8ToArray","uriString","isNullOrWhitespace","validHosts","getUrl","parseResult","isIp","pair","source","getUrlObject","bgColor","threshold","svgTextFill","bgColorHexNums","fromEntries","record","destination","mobile","vendor","opera","hasProtocol","anchor","regexpEmojiPresentation","CardApi","FieldApi","IdentityApi","LoginUriApi","LoginApi","PermissionsApi","accessEventLogs","accessImportExport","accessReports","manageAllCollections","manageAssignedCollections","manageCiphers","manageGroups","manageSso","managePolicies","manageScim","SecureNoteApi","SendFileApi","SendTextApi","AttachmentData","CardData","CipherData","CollectionData","EventData","FieldData","FolderData","IdentityData","LoginUriData","LoginData","PasswordHistoryData","PolicyData","ProviderData","SecureNoteData","SendFileData","SendTextData","SendData","ServerConfigData","serverConfigResponse","ThirdPartyServerConfigData","EnvironmentServerConfigData","fromJSON","EncryptionPair","decryptedFromJson","encryptedFromJson","DataEncryptionPair","TemporaryDataEncryption","AccountData","AccountKeys","initRecordEncryptionPairsFromJSON","decObj","AccountProfile","AccountTokens","Attachment","decryptAttachmentKey","getKeyForDecryption","toAttachmentData","buildDataModel","Card","toCardData","Cipher","decAttachment","decField","decPh","toLoginData","toSecureNoteData","toIdentityData","toFieldData","toPasswordHistoryData","Domain","dataObj","notEncList","objProp","notEncStringList","viewModel","mapProp","EncArrayBuffer","minimumLength","ENC_TYPE_LENGTH","throwDecryptionError","arrayBuffer","b64","EncString","encryptedStringOrType","initFromData","initFromEncryptedString","parseEncryptedString","decryptedValue","EnvironmentUrls","Field","Folder","GeneratedPasswordHistory","Identity","LoginUri","toLoginUriData","Login","MasterPasswordPolicyOptions","Organization","isAdmin","hasProvider","Password","Policy","SecureNote","SendFile","SendText","SymmetricCryptoKey","WindowState","CardExport","FieldExport","IdentityExport","LoginUriExport","LoginExport","toView","toDomain","SecureNoteExport","CipherExport","CipherWithIdExport","CollectionExport","CollectionWithIdExport","FolderExport","FolderWithIdExport","CipherBulkDeleteRequest","CipherCollectionsRequest","CipherCreateRequest","CipherWithIdRequest","AttachmentRequest","CipherRequest","lastKnownRevisionDate","attachments2","attachmentRequest","CollectionRequest","FolderRequest","TokenTwoFactorRequest","KeysRequest","OrganizationApiKeyRequest","OrganizationConnectionRequest","OrganizationKeysRequest","OrganizationTaxInfoUpdateRequest","SecretVerificationRequest","SendRequest","fileLength","TaxInfoUpdateRequest","TwoFactorEmailRequest","AttachmentResponse","BaseResponse","propertyName","exactName","otherCasePropertyName","PasswordHistoryResponse","CipherResponse","EmergencyAccessGranteeDetailsResponse","EmergencyAccessGrantorDetailsResponse","grantorId","EmergencyAccessTakeoverResponse","EmergencyAccessViewResponse","ErrorResponse","identityResponse","errorModel","responseErrorModel","messages","lastSep","ListResponse","PolicyResponse","AttachmentView","CardView","_brand","_number","_subTitle","maskedCode","repeat","maskedNumber","formatYear","CipherView","linkedFieldValue","linkedFieldI18nKey","CollectionView","FieldView","showCount","maskedValue","FolderView","IdentityView","_firstName","_lastName","fullName","fullAddress","fullAddressPart2","addressPart2","ItemView","CanLaunchWhitelist","LoginUriView","_uri","_domain","_hostname","_host","_canLaunch","hostnameOrUri","hostOrUri","LoginView","maskedPassword","PasswordHistoryView","SecureNoteView","SendFileView","SendTextView","SendView","maxAccessCountReached","pendingDelete","ConsoleLogService","timersMap","level","InitializerKey","StorageLocation","State","accountDeserializer","buildAccountMapFromJSON","jsonAccounts","DDG_SHARED_KEY","accountsSubject","activeAccountSubject","activeAccountUnlockedSubject","hasBeenInited","isRecoveredSession","accountDiskCache","setState","createGlobals","initAccountState","updateState","syncAccountFromDisk","storedActiveUser","activeUserId","pushAccounts","diskAccount","getAccountFromDisk","setAccountEnvironmentUrls","scaffoldNewAccountStorage","setActiveUser","clearDecryptedDataForActiveUser","deAuthenticateAccount","dynamicallySetActiveUser","removeAccountFromDisk","removeAccountFromMemory","getTimeoutBasedStorageOptions","getAccount","saveAccount","getAlwaysShowDock","defaultOnDiskOptions","setAlwaysShowDock","saveGlobals","setAutoFillOnPageLoadDefault","getBiometricAwaitingAcceptance","setBiometricAwaitingAcceptance","getBiometricFingerprintValidated","setBiometricFingerprintValidated","setBiometricText","setBiometricUnlock","hasPremiumFromOrganization","getClearClipboard","defaultOnDiskLocalOptions","setClearClipboard","nextValue","defaultSecureStorageOptions","saveSecureStorageKey","getCryptoMasterKeyB64","setCryptoMasterKeyB64","setDefaultUriMatch","getDisableAddLoginNotification","setDisableAddLoginNotification","getDisableAutoBiometricsPrompt","setDisableAutoBiometricsPrompt","getDisableAutoTotpCopy","setDisableAutoTotpCopy","getDisableBadgeCounter","setDisableBadgeCounter","getDisableChangedPasswordNotification","setDisableChangedPasswordNotification","getDisableContextMenuItem","setDisableContextMenuItem","getDisableGa","setDisableGa","getDontShowCardsCurrentTab","setDontShowCardsCurrentTab","getDontShowIdentitiesCurrentTab","setDontShowIdentitiesCurrentTab","getDuckDuckGoSharedKey","setDuckDuckGoSharedKey","getEnableAlwaysOnTop","accountPreference","globalPreference","setEnableAlwaysOnTop","getEnableAutoFillOnPageLoad","setEnableAutoFillOnPageLoad","getEnableBiometric","enableBiometrics","setEnableBiometric","getEnableBrowserIntegration","setEnableBrowserIntegration","getEnableBrowserIntegrationFingerprint","setEnableBrowserIntegrationFingerprint","getEnableCloseToTray","setEnableCloseToTray","getEnableDuckDuckGoBrowserIntegration","enableDuckDuckGoBrowserIntegration","setEnableDuckDuckGoBrowserIntegration","getEnableMinimizeToTray","setEnableMinimizeToTray","getEnableStartToTray","setEnableStartToTray","getEnableTray","setEnableTray","defaultOnDiskMemoryOptions","getEntityId","setEntityId","getEntityType","setEntityType","getGlobalEnvironmentUrls","getEquivalentDomains","getForcePasswordReset","getInstalledVersion","setInstalledVersion","getMainWindowSize","setMainWindowSize","getMinimizeOnCopyToClipboard","setMinimizeOnCopyToClipboard","getNoAutoPromptBiometrics","setNoAutoPromptBiometrics","getNoAutoPromptBiometricsText","setNoAutoPromptBiometricsText","getOpenAtLogin","setOpenAtLogin","organizationInvitation","usernameGenerationOptions","accountVaultTimeoutAction","globalVaultTimeoutAction","getStateVersion","setStateVersion","getWindow","setWindow","useMemory","storageLocation","getGlobalsFromMemory","useDisk","getGlobalsFromDisk","saveGlobalsToMemory","saveGlobalsToDisk","useSecureStorage","getAccountFromMemory","getUserIdFromMemory","cachedAccount","setDiskCache","Memory","Both","Disk","saveAccountToMemory","saveAccountToDisk","deleteDiskCache","deepClone","scaffoldNewAccountLocalStorage","scaffoldNewAccountSessionStorage","scaffoldNewAccountMemoryStorage","storedAccount","pruneInMemoryAccounts","requestedOptions","getActiveUserIdFromStorage","removeAccountFromLocalStorage","resetAccount","removeAccountFromSessionStorage","removeAccountFromSecureStorage","persistentAccountInformation","timeoutAction","deserializer","stateUpdater","updatedState","withPrototypeForArrayMembers","memberConstructor","memberConverter","originalResult","getOwnPropertyDescriptors","withPrototypeForObjectValues","valuesConstructor","valuesConverter","TwoFactorProviders","priority","selectedTwoFactorProviderType","twoFactorProvidersData","providerPriority","_value","setSelectedProvider","clearProviders","SizeClasses","xlarge","large","small","xsmall","AvatarComponent","svgCharCount","svgFontSize","svgFontWeight","svgSize","chars","upperCaseText","svg","getFirstLetters","unicodeSafeSubstring","hexColor","createSvgElement","charObj","createTextElement","svgHtml","bypassSecurityTrustResourceUrl","svgTag","backgroundColor","textTag","fontWeight","characters","styles","primary","secondary","danger","hoverStyles","BadgeDirective","badgeType","hasHoverEffects","nodeName","BadgeModule","focusRing","buttonStyles","unstyled","ButtonComponent","block","disabledAttr","setButtonType","defaultIcon","defaultI18n","calloutClass","CharacterType","ColorPasswordComponent","characterStyles","Emoji","Letter","Special","passwordArray","getCharacterClass","charType","getCharacterType","charClass","DialogService","_overlay","_injector","_defaultOptions","_parentDialog","_overlayContainer","scrollStrategy","_destroy$","componentOrTemplateRef","backdropClass","DialogTitleContainerDirective","simple","containerInstance","_ariaLabelledBy","IconDirective","SimpleDialogComponent","hasIcon","BitHintComponent","BitLabel","BitErrorSummary","errorString","dirty","untouched","BitFormFieldControl","BitErrorComponent","displayError","requiredLength","BitFormFieldComponent","ngAfterContentChecked","FormControlModule","InputModule","MultiSelectModule","FormFieldModule","BitPasswordInputToggleDirective","button","formField","toggled","toggledChange","spellcheck","PrefixClasses","PrefixButtonClasses","PrefixStaticContentClasses","BitPrefixDirective","buttonComponent","BitSuffixDirective","contrast","main","muted","light","sizes","BitIconButtonComponent","iconClass","BitIconComponent","domSanitizer","innerHtml","bypassSecurityTrustHtml","Icon","isIcon","DynamicContentNotAllowedError","svgIcon","strings","Search","BitInputDirective","hasPrefix","hasSuffix","ariaInvalid","setSelectionRange","linkStyles","commonStyles","LinkDirective","linkType","AnchorLinkDirective","ButtonLinkDirective","MenuDividerComponent","MenuItemDirective","role","tabIndex","MenuTriggerForDirective","overlay","isOpen","defaultMenuConfig","panelClass","hasBackdrop","scrollStrategies","reposition","positionStrategy","flexibleConnectedTo","withPositions","originX","originY","overlayX","overlayY","withLockedPosition","withFlexibleDimensions","withPush","hasPopup","menu","ariaRole","toggleMenu","destroyMenu","openMenu","disposeAll","overlayRef","templatePortal","attach","closedEventsSub","getClosedEvents","keyDownEventsSub","keyManager","keydownEvents","onKeydown","detachments","escKey","backdropClick","menuClosed","dispose","MenuComponent","menuItems","withWrap","ButtonLikeAbstraction","CellDirective","RowDirective","alignContent","alignmentClass","TableComponent","TabHeaderComponent","TabListContainerDirective","TabListItemDirective","baseClassList","active","activeClassList","disabledClassList","textColorClassList","TabLinkComponent","_tabNavBar","routerLinkMatchOptions","matrixParams","paths","fragment","onKeyDown","tabItem","routerLinkActive","isActiveChange","updateActiveLink","TabNavBarComponent","tabLabels","withHorizontalOrientation","withHomeAndEnd","toArray","updateActiveItem","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","O","chunkIds","notFulfilled","Infinity","fulfilled","getter","__esModule","definition","defineProperty","enumerable","chunkId","miniCssF","globalThis","Function","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","onScriptComplete","prev","doneFns","parentNode","Symbol","toStringTag","nmd","scriptUrl","importScripts","currentScript","baseURI","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
\n \n \n \n \n {{ \"cannotSponsorSelf\" | i18n }}\n \n \n \n {{ \"invalidEmail\" | i18n }}\n \n