{"version":3,"file":"app/main.5f8690f5c03a207c390a.js","mappings":"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AUU,EAAiBV,QAChC98D,KAAK+8D,OAASS,EAAiBT,OAC/B/8D,KAAKy9D,QAAU,IAAIz8D,KAAKw8D,EAAiBC,SACzCz9D,KAAKi9D,YAAcO,EAAiBP,YAEX,OAAV,QAAX,EAAAj9D,KAAK+8D,cAAM,eAAEnwD,OAAoC,OAAT,QAAX,EAAA5M,KAAK+8D,cAAM,eAAE32D,OAC5CpG,KAAK+8D,OAAS,KAElB,CAEQW,uB,MACN,OAAO,IAAI18D,MAAOY,WAAwB,QAAZ,EAAA5B,KAAKy9D,eAAO,eAAE77D,UAC9C,CAEA+7D,UACE,OAAO39D,KAAK09D,wBA3BU,KA4BxB,CAEAE,cACE,OAAO59D,KAAK09D,wBA9BoB,KA+BlC,E,+VCrCK,MAAMG,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,OACA,MACA,SACA,SACA,OACA,SACA,YACA,YACA,UACA,Q,mUC3lPK,MAAeC,GAGpBx+B,gBAAgBz4B,GACd,OAAQA,EAAKhE,MACX,IAAK,eACH,OAAO,IAAIk7D,GAAyBl3D,EAAKijB,KAE3C,IAAK,WACH,OAAO,IAAIk0C,GAAiCn3D,EAAKijB,IAAKjjB,EAAKnC,YAE7D,QACE,OAAO,KAEb,EAGK,MAAMq5D,GACXp+D,YAAoBmqB,GAAA,KAAAA,IAAAA,CAAc,CAE5Bkd,QAAQnyB,G,0CACZ,MAAMopD,QAAiBppD,EAAcqpD,WAAWl+D,KAAK8pB,KACrD,O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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/../../libs/angular/src/directives/not-premium.directive.ts","webpack://@bitwarden/web-vault/./src/app/components/premium-badge.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/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/organizations/policies/policies.module.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/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/organizations/settings/settings.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/settings.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/vault/add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/add-edit.component.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/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/components/src/button/button.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon/icon.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tabs.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/table/table.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/avatar/avatar.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon-button/icon-button.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/async-actions/async-actions.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/../../libs/common/src/abstractions/broadcaster.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/settings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/vaultTimeout/vaultTimeout.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/search.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/notifications.service.ts","webpack://@bitwarden/web-vault/./src/app/app.component.ts","webpack://@bitwarden/web-vault/./src/app/app.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/account/account-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/account/account.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/anonymousHub.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/appId.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/config/config-api.service.abstraction.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/fileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/folder/folder-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/formValidationErrors.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/login.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/send.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/sync/syncNotifier.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/token.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/twoFactor.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/userVerification/userVerification-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/usernameGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/vaultTimeout/vaultTimeoutSettings.service.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/misc/flags.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/stateVersion.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/themeType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/global-state.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/api-token.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/response/api-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/attachment.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/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/emergency-access.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/list.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/organization-user-bulk-public-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-user-bulk.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/permissions.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-user.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/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/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/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/enums/authenticationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/keySuffixOptions.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/enums/hashPurpose.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/apiLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/password-token.request.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/models/request/prelogin.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/sequentialize.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/enc-array-buffer.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-delete.request.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-with-id.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-collections.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/enums/organizationUserType.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/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/organization.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-file.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send-text.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/send.request.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/emailForwarders/anonAddyForwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/emailForwarders/duckDuckGoForwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/emailForwarders/fastmailForwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/emailForwarders/firefoxRelayForwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/emailForwarders/forwarderOptions.ts","webpack://@bitwarden/web-vault/../../libs/common/src/emailForwarders/simpleLoginForwarder.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/guards/lock.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/unauth.guard.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/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.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/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/enums/clientType.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/./src/app/core/web-platform-utils.service.ts","webpack://@bitwarden/web-vault/./src/app/core/core.module.ts","webpack://@bitwarden/web-vault/./src/utils/flags.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/../../libs/common/src/models/request/emergency-access-accept.request.ts","webpack://@bitwarden/web-vault/./src/app/common/base.accept.component.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/models/request/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/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/../../libs/common/src/models/request/reference-event.request.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/../../libs/components/src/form-field/error-summary.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/register.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/register.component.ts","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/models/request/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/./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/./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/./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/models/request/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/layouts/frontend-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/frontend-layout.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/footer.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/footer.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-item.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/menu/menu-trigger-for.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/./src/app/layouts/navbar.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/navbar.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/user-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/user-layout.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/components/access-selector/access-selector.models.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/utils/form-selection-list.ts","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/../../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/./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/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/shared/tab-list-container.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/shared/tab-header.component.ts","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/./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/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/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/models/request/organization-user-bulk.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-user-confirm.request.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/../../libs/common/src/models/request/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-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/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/./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/models/request/organization-user-invite.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-user-update.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/models/request/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/ciphers.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon/icons/search.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/ciphers.component.html","webpack://@bitwarden/web-vault/./src/app/vault/ciphers.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/ciphers.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/./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/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/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/../../libs/angular/src/pipes/color-password.pipe.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/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/./src/app/app.module.ts","webpack://@bitwarden/web-vault/./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/components/user-verification.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/user-verification.component.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/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/api.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/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/environment.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/event.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.service.abstraction.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/messaging.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/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/totp.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/userVerification/userVerification.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/validation.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/authenticationStatus.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/htmlStorageLocation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/kdfType.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/organizationUserStatusType.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/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/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/secure-note.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-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/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/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-create.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/keys.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/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/base.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/error.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/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/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/hint.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/label.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/icon.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon/icon.ts","webpack://@bitwarden/web-vault/../../libs/components/src/input/input.directive.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/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, 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 { 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\", \"Vaultwarden\");\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 getRememberEmail(options?: StorageOptions) {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.rememberEmail;\n }\n\n async setRememberEmail(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.rememberEmail = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEncryptedCiphers(options?: StorageOptions): Promise<{ [id: string]: CipherData }> {\n options = this.reconcileOptions(options, 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 { 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 {{ \"email\" | 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","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 { 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 { 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 private 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
\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

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

{{ 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 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 {{ ph.password }}\n
\n
\n
\n
\n \n

{{ \"options\" | i18n }}

\n
\n \n \n \n \n \n
\n
\n \n
\n \n \n {{ (cipher?.isDeleted ? \"restore\" : \"save\") | i18n }}\n \n \n
\n \n \n \n \n \n \n \n
\n
\n \n \n\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"@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 { EventService } from \"@bitwarden/common/abstractions/event.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 { Organization } from \"@bitwarden/common/models/domain/organization\";\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 organization: Organization;\n originalCipher: Cipher = null;\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n totpService: TotpService,\n passwordGenerationService: PasswordGenerationService,\n private apiService: ApiService,\n messagingService: MessagingService,\n eventService: EventService,\n policyService: PolicyService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService,\n organizationService: OrganizationService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n totpService,\n passwordGenerationService,\n messagingService,\n eventService,\n policyService,\n organizationService,\n logService,\n passwordRepromptService\n );\n }\n\n protected allowOwnershipAssignment() {\n if (\n this.ownershipOptions != null &&\n (this.ownershipOptions.length > 1 || !this.allowPersonal)\n ) {\n if (this.organization != null) {\n return this.cloneMode && this.organization.canEditAnyCollection;\n } else {\n return !this.editMode || this.cloneMode;\n }\n }\n return false;\n }\n\n protected loadCollections() {\n if (!this.organization.canEditAnyCollection) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected async loadCipher() {\n if (!this.organization.canEditAnyCollection) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n const data = new CipherData(response);\n\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","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://2fa.directory/api/v3/totp.json\"));\n if (response.status !== 200) {\n throw new Error();\n }\n const responseJson = await response.json();\n for (const service of responseJson) {\n const serviceData = service[1];\n if (serviceData.domain == null) {\n continue;\n }\n if (serviceData.documentation == null) {\n continue;\n }\n if (serviceData[\"additional-domains\"] != null) {\n for (const additionalDomain of serviceData[\"additional-domains\"]) {\n this.services.set(additionalDomain, serviceData.documentation);\n }\n }\n this.services.set(serviceData.domain, serviceData.documentation);\n }\n }\n}\n","
\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\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-weak-passwords-report\",\n templateUrl: \"weak-passwords-report.component.html\",\n})\nexport class WeakPasswordsReportComponent extends CipherReportComponent implements OnInit {\n passwordStrengthMap = new Map();\n\n private passwordStrengthCache = new Map();\n\n constructor(\n protected cipherService: CipherService,\n protected passwordGenerationService: PasswordGenerationService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const weakPasswordCiphers: CipherView[] = [];\n const isUserNameNotEmpty = (c: CipherView): boolean => {\n return c.login.username != null && c.login.username.trim() !== \"\";\n };\n const getCacheKey = (c: CipherView): string => {\n return c.login.password + \"_____\" + (isUserNameNotEmpty(c) ? c.login.username : \"\");\n };\n\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n c.login.password == null ||\n c.login.password === \"\" ||\n c.isDeleted\n ) {\n return;\n }\n const hasUserName = isUserNameNotEmpty(c);\n const cacheKey = getCacheKey(c);\n if (!this.passwordStrengthCache.has(cacheKey)) {\n let userInput: string[] = [];\n if (hasUserName) {\n const atPosition = c.login.username.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput\n .concat(\n c.login.username\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n )\n .filter((i) => i.length >= 3);\n } else {\n userInput = c.login.username\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n .filter((i) => i.length >= 3);\n }\n }\n const result = this.passwordGenerationService.passwordStrength(\n c.login.password,\n userInput.length > 0 ? userInput : null\n );\n this.passwordStrengthCache.set(cacheKey, result.score);\n }\n const score = this.passwordStrengthCache.get(cacheKey);\n if (score != null && score <= 2) {\n this.passwordStrengthMap.set(c.id, this.scoreKey(score));\n weakPasswordCiphers.push(c);\n }\n });\n weakPasswordCiphers.sort((a, b) => {\n return (\n this.passwordStrengthCache.get(getCacheKey(a)) -\n this.passwordStrengthCache.get(getCacheKey(b))\n );\n });\n this.ciphers = weakPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from the org view;\n return true;\n }\n\n private scoreKey(score: number): [string, string] {\n switch (score) {\n case 4:\n return [\"strong\", \"success\"];\n case 3:\n return [\"good\", \"primary\"];\n case 2:\n return [\"weak\", \"warning\"];\n default:\n return [\"veryWeak\", \"danger\"];\n }\n }\n}\n","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 { 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: string;\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
\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() product: ProductType = ProductType.Free;\n @Input() plan: PlanType = PlanType.Free;\n @Input() providerId: string;\n @Output() onSuccess = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n @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);\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/Vaultwarden:\" +\n encodeURIComponent(email) +\n \"?secret=\" +\n encodeURIComponent(this.key) +\n \"&issuer=Vaultwarden\",\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 { UserVerificationComponent } from \"@bitwarden/angular/components/user-verification.component\";\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 { RegisterComponent } from \"../accounts/register.component\";\nimport { RemovePasswordComponent } from \"../accounts/remove-password.component\";\nimport { SetPasswordComponent } from \"../accounts/set-password.component\";\nimport { SsoComponent } from \"../accounts/sso.component\";\nimport { TwoFactorOptionsComponent } from \"../accounts/two-factor-options.component\";\nimport { TwoFactorComponent } from \"../accounts/two-factor.component\";\nimport { UpdatePasswordComponent } from \"../accounts/update-password.component\";\nimport { UpdateTempPasswordComponent } from \"../accounts/update-temp-password.component\";\nimport { VerifyEmailTokenComponent } from \"../accounts/verify-email-token.component\";\nimport { VerifyRecoverDeleteComponent } from \"../accounts/verify-recover-delete.component\";\nimport { NestedCheckboxComponent } from \"../components/nested-checkbox.component\";\nimport { OrganizationSwitcherComponent } from \"../components/organization-switcher.component\";\nimport { PasswordRepromptComponent } from \"../components/password-reprompt.component\";\nimport { PremiumBadgeComponent } from \"../components/premium-badge.component\";\nimport { UserVerificationPromptComponent } from \"../components/user-verification-prompt.component\";\nimport { FooterComponent } from \"../layouts/footer.component\";\nimport { FrontendLayoutComponent } from \"../layouts/frontend-layout.component\";\nimport { NavbarComponent } from \"../layouts/navbar.component\";\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 { 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 { OrganizationBadgeModule } from \"../vault/organization-badge/organization-badge.module\";\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 OrganizationBadgeModule,\n OrganizationCreateModule,\n RegisterFormModule,\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 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 ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RegisterComponent,\n RemovePasswordComponent,\n SecurityComponent,\n SecurityKeysComponent,\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 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 ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RegisterComponent,\n RemovePasswordComponent,\n SecurityComponent,\n SecurityKeysComponent,\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 { 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 { ColorPasswordCountPipe } from \"./pipes/color-password-count.pipe\";\nimport { ColorPasswordPipe } from \"./pipes/color-password.pipe\";\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 ColorPasswordCountPipe,\n ColorPasswordPipe,\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 ColorPasswordCountPipe,\n ColorPasswordPipe,\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 { 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 { 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: [CommonModule, OverlayModule],\n declarations: [MenuComponent, MenuTriggerForDirective, MenuItemDirective, MenuDividerComponent],\n exports: [MenuComponent, MenuTriggerForDirective, MenuItemDirective, MenuDividerComponent],\n})\nexport class MenuModule {}\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 { 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 { 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 { 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 { BitIconButtonComponent } from \"./icon-button.component\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitIconButtonComponent],\n exports: [BitIconButtonComponent],\n})\nexport class IconButtonModule {}\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 { 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 FormFieldModule,\n IconButtonModule,\n IconModule,\n MenuModule,\n TableModule,\n TabsModule,\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 InfiniteScrollModule,\n JslibModule,\n ReactiveFormsModule,\n RouterModule,\n BadgeModule,\n ButtonModule,\n CalloutModule,\n ToastrModule,\n BadgeModule,\n ButtonModule,\n MenuModule,\n FormFieldModule,\n IconModule,\n TabsModule,\n TableModule,\n AvatarModule,\n IconButtonModule,\n ],\n exports: [\n CommonModule,\n AsyncActionsModule,\n DragDropModule,\n FormsModule,\n InfiniteScrollModule,\n JslibModule,\n ReactiveFormsModule,\n RouterModule,\n BadgeModule,\n ButtonModule,\n CalloutModule,\n ToastrModule,\n BadgeModule,\n ButtonModule,\n MenuModule,\n FormFieldModule,\n IconModule,\n TabsModule,\n TableModule,\n AvatarModule,\n IconButtonModule,\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 { EventService } from \"@bitwarden/common/abstractions/event.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(private i18nService: I18nService, private eventService: EventService) {\n this.addFieldTypeOptions = [\n { name: i18nService.t(\"cfTypeText\"), value: FieldType.Text },\n { name: i18nService.t(\"cfTypeHidden\"), value: FieldType.Hidden },\n { name: i18nService.t(\"cfTypeBoolean\"), value: FieldType.Boolean },\n ];\n this.addFieldLinkedTypeOption = {\n name: this.i18nService.t(\"cfTypeLinked\"),\n value: FieldType.Linked,\n };\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.thisCipherType != null) {\n this.setLinkedFieldOptions();\n\n if (!changes.thisCipherType.firstChange) {\n this.resetCipherLinkedFields();\n }\n }\n }\n\n addField() {\n if (this.cipher.fields == null) {\n this.cipher.fields = [];\n }\n\n const f = new FieldView();\n f.type = this.addFieldType;\n f.newField = true;\n\n if (f.type === FieldType.Linked) {\n f.linkedId = this.linkedFieldOptions[0].value;\n }\n\n this.cipher.fields.push(f);\n }\n\n removeField(field: FieldView) {\n const i = this.cipher.fields.indexOf(field);\n if (i > -1) {\n this.cipher.fields.splice(i, 1);\n }\n }\n\n toggleFieldValue(field: FieldView) {\n const f = field as any;\n f.showValue = !f.showValue;\n if (this.editMode && f.showValue) {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipher.id);\n }\n }\n\n trackByFunction(index: number, item: any) {\n return index;\n }\n\n drop(event: CdkDragDrop) {\n moveItemInArray(this.cipher.fields, event.previousIndex, event.currentIndex);\n }\n\n private setLinkedFieldOptions() {\n if (this.cipher.linkedFieldOptions == null) {\n return;\n }\n\n const options: any = [];\n this.cipher.linkedFieldOptions.forEach((linkedFieldOption, id) =>\n options.push({ name: this.i18nService.t(linkedFieldOption.i18nKey), value: id })\n );\n this.linkedFieldOptions = options.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n\n private resetCipherLinkedFields() {\n if (this.cipher.fields == null || this.cipher.fields.length === 0) {\n return;\n }\n\n // Delete any Linked custom fields if the item type does not support them\n if (this.cipher.linkedFieldOptions == null) {\n this.cipher.fields = this.cipher.fields.filter((f) => f.type !== FieldType.Linked);\n return;\n }\n\n this.cipher.fields\n .filter((f) => f.type === FieldType.Linked)\n .forEach((f) => (f.linkedId = this.linkedFieldOptions[0].value));\n }\n}\n","import { Directive, ElementRef, forwardRef, HostListener, Input, Renderer2 } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n// ref: https://juristr.com/blog/2018/02/ng-true-value-directive/\n@Directive({\n selector: \"input[type=checkbox][appTrueFalseValue]\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TrueFalseValueDirective),\n multi: true,\n },\n ],\n})\nexport class TrueFalseValueDirective implements ControlValueAccessor {\n @Input() trueValue = true;\n @Input() falseValue = false;\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {}\n\n @HostListener(\"change\", [\"$event\"])\n onHostChange(ev: any) {\n this.propagateChange(ev.target.checked ? this.trueValue : this.falseValue);\n }\n\n writeValue(obj: any): void {\n if (obj === this.trueValue) {\n this.renderer.setProperty(this.elementRef.nativeElement, \"checked\", true);\n } else {\n this.renderer.setProperty(this.elementRef.nativeElement, \"checked\", false);\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n /* nothing */\n }\n\n setDisabledState?(isDisabled: boolean): void {\n /* nothing */\n }\n\n private propagateChange = (_: any) => {\n /* nothing */\n };\n}\n","\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 { EventService } from \"@bitwarden/common/abstractions/event.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, eventService: EventService) {\n super(i18nService, eventService);\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 { EventService } from \"@bitwarden/common/abstractions/event.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 { 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\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 eventService: EventService,\n protected policyService: PolicyService,\n private logService: LogService,\n protected passwordRepromptService: PasswordRepromptService,\n private organizationService: OrganizationService\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"typeLogin\"), value: CipherType.Login },\n { name: i18nService.t(\"typeCard\"), value: CipherType.Card },\n { name: i18nService.t(\"typeIdentity\"), value: CipherType.Identity },\n { name: i18nService.t(\"typeSecureNote\"), value: CipherType.SecureNote },\n ];\n this.cardBrandOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: \"Visa\", value: \"Visa\" },\n { name: \"Mastercard\", value: \"Mastercard\" },\n { name: \"American Express\", value: \"Amex\" },\n { name: \"Discover\", value: \"Discover\" },\n { name: \"Diners Club\", value: \"Diners Club\" },\n { name: \"JCB\", value: \"JCB\" },\n { name: \"Maestro\", value: \"Maestro\" },\n { name: \"UnionPay\", value: \"UnionPay\" },\n { name: \"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.eventService.collect(EventType.Cipher_ClientViewed, this.cipherId);\n }\n this.previousCipherId = this.cipherId;\n this.reprompt = this.cipher.reprompt !== CipherRepromptType.None;\n }\n\n async submit(): Promise {\n if (this.cipher.isDeleted) {\n return this.restore();\n }\n\n if (this.cipher.name == null || this.cipher.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n if (\n (!this.editMode || this.cloneMode) &&\n !this.allowPersonal &&\n this.cipher.organizationId == null\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"personalOwnershipSubmitError\")\n );\n return false;\n }\n\n if (\n (!this.editMode || this.cloneMode) &&\n this.cipher.type === CipherType.Login &&\n this.cipher.login.uris != null &&\n this.cipher.login.uris.length === 1 &&\n (this.cipher.login.uris[0].uri == null || this.cipher.login.uris[0].uri === \"\")\n ) {\n this.cipher.login.uris = null;\n }\n\n // Allows saving of selected collections during \"Add\" and \"Clone\" flows\n if ((!this.editMode || this.cloneMode) && this.cipher.organizationId != null) {\n this.cipher.collectionIds =\n this.collections == null\n ? []\n : this.collections.filter((c) => (c as any).checked).map((c) => c.id);\n }\n\n // Clear current Cipher Id to trigger \"Add\" cipher flow\n if (this.cloneMode) {\n this.cipher.id = null;\n }\n\n const cipher = await this.encryptCipher();\n try {\n this.formPromise = this.saveCipher(cipher);\n await this.formPromise;\n this.cipher.id = cipher.id;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode && !this.cloneMode ? \"editedItem\" : \"addedItem\")\n );\n this.onSavedCipher.emit(this.cipher);\n this.messagingService.send(this.editMode && !this.cloneMode ? \"editedCipher\" : \"addedCipher\");\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n addUri() {\n if (this.cipher.type !== CipherType.Login) {\n return;\n }\n\n if (this.cipher.login.uris == null) {\n this.cipher.login.uris = [];\n }\n\n this.cipher.login.uris.push(new LoginUriView());\n }\n\n removeUri(uri: LoginUriView) {\n if (this.cipher.type !== CipherType.Login || this.cipher.login.uris == null) {\n return;\n }\n\n const i = this.cipher.login.uris.indexOf(uri);\n if (i > -1) {\n this.cipher.login.uris.splice(i, 1);\n }\n }\n\n 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 );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.deleteCipher();\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.cipher.isDeleted ? \"permanentlyDeletedItem\" : \"deletedItem\")\n );\n this.onDeletedCipher.emit(this.cipher);\n this.messagingService.send(\n this.cipher.isDeleted ? \"permanentlyDeletedCipher\" : \"deletedCipher\"\n );\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n async restore(): Promise {\n if (!this.cipher.isDeleted) {\n return false;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"restoreItemConfirmation\"),\n this.i18nService.t(\"restoreItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.restorePromise = this.restoreCipher();\n await this.restorePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItem\"));\n this.onRestoredCipher.emit(this.cipher);\n this.messagingService.send(\"restoredCipher\");\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n async generateUsername(): Promise {\n if (this.cipher.login?.username?.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"overwriteUsernameConfirmation\"),\n this.i18nService.t(\"overwriteUsername\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\")\n );\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGenerateUsername.emit();\n return true;\n }\n\n async generatePassword(): Promise {\n if (this.cipher.login?.password?.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"overwritePasswordConfirmation\"),\n this.i18nService.t(\"overwritePassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\")\n );\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGeneratePassword.emit();\n return true;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"loginPassword\").focus();\n if (this.editMode && this.showPassword) {\n this.eventService.collect(EventType.Cipher_ClientToggledPasswordVisible, this.cipherId);\n }\n }\n\n async toggleCardNumber() {\n this.showCardNumber = !this.showCardNumber;\n if (this.showCardNumber) {\n this.eventService.collect(EventType.Cipher_ClientToggledCardNumberVisible, this.cipherId);\n }\n }\n\n toggleCardCode() {\n this.showCardCode = !this.showCardCode;\n document.getElementById(\"cardCode\").focus();\n if (this.editMode && this.showCardCode) {\n this.eventService.collect(EventType.Cipher_ClientToggledCardCodeVisible, this.cipherId);\n }\n }\n\n toggleUriOptions(uri: LoginUriView) {\n const u = uri as any;\n u.showOptions = u.showOptions == null && uri.match != null ? false : !u.showOptions;\n }\n\n loginUriMatchChanged(uri: LoginUriView) {\n const u = uri as any;\n u.showOptions = u.showOptions == null ? true : u.showOptions;\n }\n\n async organizationChanged() {\n if (this.writeableCollections != null) {\n this.writeableCollections.forEach((c) => ((c as any).checked = false));\n }\n if (this.cipher.organizationId != null) {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.cipher.organizationId\n );\n const org = await this.organizationService.get(this.cipher.organizationId);\n if (org != null) {\n this.cipher.organizationUseTotp = org.useTotp;\n }\n } else {\n this.collections = [];\n }\n }\n\n async checkPassword() {\n if (this.checkPasswordPromise != null) {\n return;\n }\n\n if (\n this.cipher.login == null ||\n this.cipher.login.password == null ||\n this.cipher.login.password === \"\"\n ) {\n return;\n }\n\n this.checkPasswordPromise = this.auditService.passwordLeaked(this.cipher.login.password);\n const matches = await this.checkPasswordPromise;\n this.checkPasswordPromise = null;\n\n if (matches > 0) {\n this.platformUtilsService.showToast(\n \"warning\",\n null,\n this.i18nService.t(\"passwordExposed\", matches.toString())\n );\n } else {\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"passwordSafe\"));\n }\n }\n\n repromptChanged() {\n this.reprompt = !this.reprompt;\n if (this.reprompt) {\n this.cipher.reprompt = CipherRepromptType.Password;\n } else {\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter((c) => !c.readOnly);\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected encryptCipher() {\n return this.cipherService.encrypt(this.cipher);\n }\n\n protected saveCipher(cipher: Cipher) {\n return this.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 { EventService } from \"@bitwarden/common/abstractions/event.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\n protected totpInterval: number;\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n protected totpService: TotpService,\n protected passwordGenerationService: PasswordGenerationService,\n protected messagingService: MessagingService,\n eventService: EventService,\n protected policyService: PolicyService,\n organizationService: OrganizationService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n messagingService,\n eventService,\n policyService,\n logService,\n passwordRepromptService,\n organizationService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n this.showRevisionDate = this.cipher.passwordRevisionDisplayDate != null;\n this.hasPasswordHistory = this.cipher.hasPasswordHistory;\n this.cleanUp();\n\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n if (\n this.cipher.type === CipherType.Login &&\n this.cipher.login.totp &&\n (this.cipher.organizationUseTotp || this.canAccessPremium)\n ) {\n await this.totpUpdateCode();\n const interval = this.totpService.getTimeInterval(this.cipher.login.totp);\n await this.totpTick(interval);\n\n this.totpInterval = window.setInterval(async () => {\n await this.totpTick(interval);\n }, 1000);\n }\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n\n toggleFavorite() {\n this.cipher.favorite = !this.cipher.favorite;\n }\n\n launch(uri: LoginUriView) {\n if (!uri.canLaunch) {\n return;\n }\n\n this.platformUtilsService.launchUri(uri.launchUri);\n }\n\n copy(value: string, typeI18nKey: string, aType: string) {\n if (value == null) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(typeI18nKey))\n );\n\n if (this.editMode) {\n if (typeI18nKey === \"password\") {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipherId);\n } else if (typeI18nKey === \"securityCode\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId);\n } else if (aType === \"H_Field\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedHiddenField, this.cipherId);\n }\n }\n }\n\n async generatePassword(): Promise {\n const confirmed = await super.generatePassword();\n if (confirmed) {\n const options = (await this.passwordGenerationService.getOptions())?.[0] ?? {};\n this.cipher.login.password = await this.passwordGenerationService.generatePassword(options);\n }\n return confirmed;\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n\n upgradeOrganization() {\n this.messagingService.send(\"upgradeOrganization\", {\n organizationId: this.cipher.organizationId,\n });\n }\n\n 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\";\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 ],\n exports: [\n SharedModule,\n CollectionFilterComponent,\n FolderFilterComponent,\n StatusFilterComponent,\n TypeFilterComponent,\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>(null);\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 { LinkSsoComponent } from \"./organization-filter/link-sso.component\";\nimport { OrganizationFilterComponent } from \"./organization-filter/organization-filter.component\";\nimport { OrganizationOptionsComponent } from \"./organization-filter/organization-options.component\";\nimport { VaultFilterSharedModule } from \"./shared/vault-filter-shared.module\";\nimport { VaultFilterComponent } from \"./vault-filter.component\";\n\n@NgModule({\n imports: [VaultFilterSharedModule],\n declarations: [\n VaultFilterComponent,\n OrganizationFilterComponent,\n OrganizationOptionsComponent,\n LinkSsoComponent,\n ],\n exports: [VaultFilterComponent],\n})\nexport class VaultFilterModule {}\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 { 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","export abstract class VaultTimeoutService {\n checkVaultTimeout: () => Promise;\n lock: (userId?: string) => Promise;\n logOut: (userId?: string) => 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","export abstract class NotificationsService {\n init: () => Promise;\n updateConnection: (sync?: boolean) => Promise;\n reconnectFromActivity: () => Promise;\n disconnectFromInactivity: () => Promise;\n}\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 { EventService } from \"@bitwarden/common/abstractions/event.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 eventService: EventService,\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);\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 if (typeof message.text === \"string\" && typeof crypto.subtle === 'undefined') {\n message.title=\"This browser requires HTTPS to use the web vault\";\n message.text=\"Check the Vaultwarden wiki for details on how to enable it\";\n }\n this.showToast(message);\n break;\n case \"setFullWidth\":\n this.setFullWidth();\n break;\n case \"convertAccountToKeyConnector\":\n this.router.navigate([\"/remove-password\"]);\n break;\n default:\n break;\n }\n });\n });\n\n this.router.events.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) {\n await this.eventService.uploadEvents();\n const userId = await this.stateService.getUserId();\n await Promise.all([\n this.eventService.clearEvents(),\n this.syncService.setLastSync(new Date(0)),\n this.cryptoService.clearKeys(),\n this.settingsService.clear(userId),\n this.cipherService.clear(userId),\n this.folderService.clear(userId),\n this.collectionService.clear(userId),\n this.policyService.clear(userId),\n this.passwordGenerationService.clear(),\n this.keyConnectorService.clear(),\n ]);\n\n this.searchService.clearIndex();\n this.authService.logOut(async () => {\n if (expired) {\n this.platformUtilsService.showToast(\n \"warning\",\n this.i18nService.t(\"loggedOut\"),\n this.i18nService.t(\"loginExpired\")\n );\n }\n\n await this.stateService.clean({ userId: userId });\n Swal.close();\n this.router.navigate([\"/\"]);\n });\n }\n\n private async recordActivity() {\n const now = new Date().getTime();\n if (this.lastActivity != null && now - this.lastActivity < 250) {\n return;\n }\n\n this.lastActivity = now;\n this.stateService.setLastActive(now);\n // Idle states\n if (this.isIdle) {\n this.isIdle = false;\n this.idleStateChanged();\n }\n if (this.idleTimer != null) {\n window.clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n this.idleTimer = window.setTimeout(() => {\n if (!this.isIdle) {\n this.isIdle = true;\n this.idleStateChanged();\n }\n }, IdleTimeout);\n }\n\n private showToast(msg: any) {\n let message = \"\";\n\n const options: Partial = {};\n\n if (typeof msg.text === \"string\") {\n message = msg.text;\n } else if (msg.text.length === 1) {\n message = msg.text[0];\n } else {\n msg.text.forEach(\n (t: string) =>\n (message += \"

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

\")\n );\n options.enableHtml = true;\n }\n if (msg.options != null) {\n if (msg.options.trustedHtml === true) {\n options.enableHtml = true;\n }\n if (msg.options.timeout != null && msg.options.timeout > 0) {\n options.timeOut = msg.options.timeout;\n }\n }\n\n this.toastrService.show(message, msg.title, options, \"toast-\" + msg.type);\n }\n\n private idleStateChanged() {\n if (this.isIdle) {\n this.notificationsService.disconnectFromInactivity();\n } else {\n this.notificationsService.reconnectFromActivity();\n }\n }\n\n private async setFullWidth() {\n const enableFullWidth = await this.stateService.getEnableFullWidth();\n if (enableFullWidth) {\n document.body.classList.add(\"full-width\");\n } else {\n document.body.classList.remove(\"full-width\");\n }\n }\n}\n","\n","import { Verification } from \"../../types/verification\";\n\nexport abstract class AccountApiService {\n abstract deleteAccount(verification: Verification): Promise;\n}\n","export abstract class AccountService {}\n\nexport abstract class InternalAccountService extends AccountService {\n abstract delete(): void;\n}\n","export abstract class AnonymousHubService {\n createHubConnection: (token: string) => void;\n stopHubConnection: () => void;\n}\n","export abstract class AppIdService {\n getAppId: () => Promise;\n getAnonymousAppId: () => Promise;\n}\n","import { ServerConfigResponse } from \"../../models/response/server-config.response\";\n\nexport abstract class ConfigApiServiceAbstraction {\n get: () => 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 { 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","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 { 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","export abstract class LoginService {\n getEmail: () => string;\n getRememberEmail: () => boolean;\n setEmail: (value: string) => void;\n setRememberEmail: (value: boolean) => void;\n clearValues: () => void;\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 { SyncEventArgs } from \"../../types/syncEventArgs\";\n\nexport abstract class SyncNotifierService {\n sync$: Observable;\n next: (event: SyncEventArgs) => void;\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","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 { VerifyOTPRequest } from \"../../models/request/account/verify-otp.request\";\n\nexport abstract class UserVerificationApiServiceAbstraction {\n postAccountVerifyOTP: (request: VerifyOTPRequest) => Promise;\n postAccountRequestOTP: () => 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 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","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","// 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","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","export enum ThemeType {\n System = \"system\",\n Light = \"light\",\n Dark = \"dark\",\n Nord = \"nord\",\n SolarizedDark = \"solarizedDark\",\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 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.token && this.twoFactor.provider != null) {\n obj.twoFactorToken = this.twoFactor.token;\n obj.twoFactorProvider = this.twoFactor.provider;\n obj.twoFactorRemember = this.twoFactor.remember ? \"1\" : \"0\";\n }\n\n return obj;\n }\n}\n","import { DeviceRequest } from \"../device.request\";\n\nimport { TokenTwoFactorRequest } from \"./token-two-factor.request\";\nimport { TokenRequest } from \"./token.request\";\n\nexport class ApiTokenRequest 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 { 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","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 { 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","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 { 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 { 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 { 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 { 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 { 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\";\nimport { ListResponse } from \"./list.response\";\n\nexport class OrganizationExportResponse extends BaseResponse {\n collections: ListResponse;\n ciphers: ListResponse;\n\n constructor(response: any) {\n super(response);\n this.collections = this.getResponseProperty(\"Collections\");\n this.ciphers = this.getResponseProperty(\"Ciphers\");\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 { BaseResponse } from \"./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 { BaseResponse } from \"./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","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 { KdfType } from \"../../enums/kdfType\";\nimport { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\n\nimport { BaseResponse } from \"./base.response\";\nimport { SelectionReadOnlyResponse } from \"./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 { 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 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.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 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.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 { OrganizationUserBulkPublicKeyResponse } from \"../organization-user-bulk-public-key.response\";\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 { 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 { 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","export enum AuthenticationType {\n Password = 0,\n Sso = 1,\n Api = 2,\n Passwordless = 3,\n}\n","export enum KeySuffixOptions {\n Auto = \"auto\",\n Biometric = \"biometric\",\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 ApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../../models/domain/log-in-credentials\";\nimport { DeviceRequest } from \"../../models/request/device.request\";\nimport { ApiTokenRequest } from \"../../models/request/identity-token/api-token.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 { 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: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest;\n protected captchaBypassToken: string = null;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n protected tokenService: TokenService,\n protected appIdService: AppIdService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected logService: LogService,\n protected stateService: StateService,\n protected twoFactorService: TwoFactorService\n ) {}\n\n abstract logIn(\n credentials:\n | ApiLogInCredentials\n | PasswordLogInCredentials\n | SsoLogInCredentials\n | PasswordlessLogInCredentials\n ): 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 onSuccessfulLogin(response: IdentityTokenResponse): Promise {\n // Implemented in subclass if required\n return null;\n }\n\n protected async buildDeviceRequest() {\n const appId = await this.appIdService.getAppId();\n return new DeviceRequest(appId, this.platformUtilsService);\n }\n\n protected async buildTwoFactor(userProvidedTwoFactor?: 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 const newSsoUser = response.key == null;\n if (!newSsoUser) {\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(\n response.privateKey ?? (await this.createKeyPairForOldAccount())\n );\n }\n\n await this.onSuccessfulLogin(response);\n\n 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","export enum HashPurpose {\n ServerAuthorization = 1,\n LocalAuthorization = 2,\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { EnvironmentService } from \"../../abstractions/environment.service\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { ApiLogInCredentials } from \"../../models/domain/log-in-credentials\";\nimport { ApiTokenRequest } from \"../../models/request/identity-token/api-token.request\";\nimport { IdentityTokenResponse } from \"../../models/response/identity-token.response\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class ApiLogInStrategy extends LogInStrategy {\n tokenRequest: ApiTokenRequest;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private environmentService: EnvironmentService,\n private keyConnectorService: KeyConnectorService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin(tokenResponse: IdentityTokenResponse) {\n if (tokenResponse.apiUseKeyConnector) {\n const keyConnectorUrl = this.environmentService.getKeyConnectorUrl();\n await this.keyConnectorService.getAndSetKey(keyConnectorUrl);\n }\n }\n\n async logIn(credentials: ApiLogInCredentials) {\n this.tokenRequest = new ApiTokenRequest(\n credentials.clientId,\n credentials.clientSecret,\n await this.buildTwoFactor(),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n\n protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) {\n await super.saveAccountInformation(tokenResponse);\n await this.stateService.setApiKeyClientId(this.tokenRequest.clientId);\n await this.stateService.setApiKeyClientSecret(this.tokenRequest.clientSecret);\n }\n}\n","import { 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 { 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 onSuccessfulLogin() {\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 onSuccessfulLogin() {\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 onSuccessfulLogin(tokenResponse: IdentityTokenResponse) {\n const newSsoUser = tokenResponse.key == null;\n\n if (tokenResponse.keyConnectorUrl != null) {\n if (!newSsoUser) {\n await this.keyConnectorService.getAndSetKey(tokenResponse.keyConnectorUrl);\n } else {\n await this.keyConnectorService.convertNewSsoUserToKeyConnector(tokenResponse, this.orgId);\n }\n }\n }\n\n async logIn(credentials: SsoLogInCredentials) {\n this.orgId = credentials.orgId;\n this.tokenRequest = new SsoTokenRequest(\n credentials.code,\n credentials.codeVerifier,\n credentials.redirectUrl,\n await this.buildTwoFactor(credentials.twoFactor),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n}\n","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 { 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 { 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 CipherBulkDeleteRequest {\n ids: string[];\n organizationId: string;\n\n constructor(ids: string[], organizationId?: string) {\n this.ids = ids == null ? [] : ids;\n this.organizationId = organizationId;\n }\n}\n","export class CipherBulkMoveRequest {\n ids: string[];\n folderId: string;\n\n constructor(ids: string[], folderId: string) {\n this.ids = ids == null ? [] : ids;\n this.folderId = folderId;\n }\n}\n","export class CipherBulkRestoreRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { 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","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","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\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","export enum OrganizationUserType {\n Owner = 0,\n Admin = 1,\n User = 2,\n Manager = 3,\n Custom = 4,\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\";\n\nexport class LoginService implements LoginServiceAbstraction {\n private _email: string;\n private _rememberEmail: boolean;\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","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 { 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 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.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 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 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 { 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 { 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 { 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","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 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.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.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 \"./forwarderOptions\";\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 \"./forwarderOptions\";\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 \"./forwarderOptions\";\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 \"./forwarderOptions\";\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 \"./forwarderOptions\";\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 \"../emailForwarders/anonAddyForwarder\";\nimport { DuckDuckGoForwarder } from \"../emailForwarders/duckDuckGoForwarder\";\nimport { FastmailForwarder } from \"../emailForwarders/fastmailForwarder\";\nimport { FirefoxRelayForwarder } from \"../emailForwarders/firefoxRelayForwarder\";\nimport { Forwarder } from \"../emailForwarders/forwarder\";\nimport { ForwarderOptions } from \"../emailForwarders/forwarderOptions\";\nimport { SimpleLoginForwarder } from \"../emailForwarders/simpleLoginForwarder\";\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: \"simplelogin\",\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\";\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 { 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 InternalAccountService,\n AccountService as AccountServiceAbstraction,\n} from \"@bitwarden/common/abstractions/account/account.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 { EventService as EventServiceAbstraction } from \"@bitwarden/common/abstractions/event.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 { 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 PolicyService as PolicyServiceAbstraction,\n InternalPolicyService,\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 { 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 { EventService } from \"@bitwarden/common/services/event.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 { 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 WINDOW,\n MEMORY_STORAGE,\n SECURE_STORAGE,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n LOGOUT_CALLBACK,\n LOCKED_CALLBACK,\n LOCALES_DIRECTORY,\n SYSTEM_LANGUAGE,\n LOG_MAC_FAILURES,\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 { 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: EventServiceAbstraction,\n useClass: EventService,\n deps: [\n ApiServiceAbstraction,\n CipherServiceAbstraction,\n StateServiceAbstraction,\n LogService,\n OrganizationServiceAbstraction,\n ],\n },\n {\n provide: PolicyServiceAbstraction,\n useClass: PolicyService,\n deps: [StateServiceAbstraction, OrganizationServiceAbstraction],\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: 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 },\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 { ApiLogInStrategy } from \"../misc/logInStrategies/apiLogin.strategy\";\nimport { PasswordLogInStrategy } from \"../misc/logInStrategies/passwordLogin.strategy\";\nimport { PasswordlessLogInStrategy } from \"../misc/logInStrategies/passwordlessLogin.strategy\";\nimport { SsoLogInStrategy } from \"../misc/logInStrategies/ssoLogin.strategy\";\nimport { AuthResult } from \"../models/domain/auth-result\";\nimport {\n ApiLogInCredentials,\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 | ApiLogInStrategy\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 | ApiLogInCredentials\n | PasswordLogInCredentials\n | SsoLogInCredentials\n | PasswordlessLogInCredentials\n ): Promise {\n this.clearState();\n\n let strategy:\n | ApiLogInStrategy\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.Api:\n strategy = new ApiLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this.environmentService,\n this.keyConnectorService\n );\n 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 authingWithApiKey(): boolean {\n return this.logInStrategy instanceof ApiLogInStrategy;\n }\n\n authingWithSso(): boolean {\n return this.logInStrategy instanceof SsoLogInStrategy;\n }\n\n authingWithPassword(): boolean {\n return this.logInStrategy instanceof PasswordLogInStrategy;\n }\n\n 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 | ApiLogInStrategy\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 /**\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 { 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 { ApiTokenRequest } from \"../models/request/identity-token/api-token.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 { 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 { OrganizationUserAcceptRequest } from \"../models/request/organization-user-accept.request\";\nimport { OrganizationUserBulkConfirmRequest } from \"../models/request/organization-user-bulk-confirm.request\";\nimport { OrganizationUserBulkRequest } from \"../models/request/organization-user-bulk.request\";\nimport { OrganizationUserConfirmRequest } from \"../models/request/organization-user-confirm.request\";\nimport { OrganizationUserInviteRequest } from \"../models/request/organization-user-invite.request\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"../models/request/organization-user-reset-password-enrollment.request\";\nimport { OrganizationUserResetPasswordRequest } from \"../models/request/organization-user-reset-password.request\";\nimport { OrganizationUserUpdateGroupsRequest } from \"../models/request/organization-user-update-groups.request\";\nimport { OrganizationUserUpdateRequest } from \"../models/request/organization-user-update.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 { 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 { OrganizationUserBulkPublicKeyResponse } from \"../models/response/organization-user-bulk-public-key.response\";\nimport { OrganizationUserBulkResponse } from \"../models/response/organization-user-bulk.response\";\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n} from \"../models/response/organization-user.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 TwoFactorWebAuthnResponse,\n ChallengeResponse,\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\nexport class ApiService implements ApiServiceAbstraction {\n private device: DeviceType;\n private deviceType: string;\n private isWebClient = false;\n private isDesktopClient = false;\n\n constructor(\n private tokenService: TokenService,\n private platformUtilsService: PlatformUtilsService,\n private environmentService: EnvironmentService,\n private appIdService: AppIdService,\n private logoutCallback: (expired: boolean) => Promise,\n private customUserAgent: string = null\n ) {\n this.device = platformUtilsService.getDevice();\n this.deviceType = this.device.toString();\n this.isWebClient =\n this.device === DeviceType.IEBrowser ||\n this.device === DeviceType.ChromeBrowser ||\n this.device === DeviceType.EdgeBrowser ||\n this.device === DeviceType.FirefoxBrowser ||\n this.device === DeviceType.OperaBrowser ||\n this.device === DeviceType.SafariBrowser ||\n this.device === DeviceType.UnknownBrowser ||\n this.device === DeviceType.VivaldiBrowser;\n this.isDesktopClient =\n this.device === DeviceType.WindowsDesktop ||\n this.device === DeviceType.MacOsDesktop ||\n this.device === DeviceType.LinuxDesktop;\n }\n\n // Auth APIs\n\n async postIdentityToken(\n request: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest\n ): Promise {\n const headers = new Headers({\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n request.alterIdentityTokenHeaders(headers);\n\n const identityToken =\n request instanceof ApiTokenRequest\n ? request.toIdentityToken()\n : request.toIdentityToken(this.platformUtilsService.getClientType());\n\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + \"/connect/token\", {\n body: this.qsStringify(identityToken),\n credentials: this.getCredentials(),\n cache: \"no-store\",\n headers: headers,\n method: \"POST\",\n })\n );\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n }\n\n if (responseJson != null) {\n if (response.status === 200) {\n return new IdentityTokenResponse(responseJson);\n } else if (\n response.status === 400 &&\n responseJson.TwoFactorProviders2 &&\n Object.keys(responseJson.TwoFactorProviders2).length\n ) {\n await this.tokenService.clearTwoFactorToken();\n return new IdentityTwoFactorResponse(responseJson);\n } else if (\n response.status === 400 &&\n responseJson.HCaptcha_SiteKey &&\n Object.keys(responseJson.HCaptcha_SiteKey).length\n ) {\n return new IdentityCaptchaResponse(responseJson);\n }\n }\n\n return Promise.reject(new ErrorResponse(responseJson, response.status, true));\n }\n\n async refreshIdentityToken(): Promise {\n try {\n await this.doAuthRefresh();\n } catch (e) {\n return Promise.reject(null);\n }\n }\n\n 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 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 // Organization User APIs\n\n async getOrganizationUser(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n null,\n true,\n true\n );\n return new OrganizationUserDetailsResponse(r);\n }\n\n async getOrganizationUserGroups(organizationId: string, id: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/groups\",\n null,\n true,\n true\n );\n return r;\n }\n\n async getOrganizationUsers(\n organizationId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users\",\n null,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserUserDetailsResponse);\n }\n\n async getOrganizationUserResetPasswordDetails(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reset-password-details\",\n null,\n true,\n true\n );\n return new OrganizationUserResetPasswordDetailsReponse(r);\n }\n\n postOrganizationUserInvite(\n organizationId: string,\n request: OrganizationUserInviteRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/invite\",\n request,\n true,\n false\n );\n }\n\n postOrganizationUserReinvite(organizationId: string, id: string): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reinvite\",\n null,\n true,\n false\n );\n }\n\n async postManyOrganizationUserReinvite(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/reinvite\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n postOrganizationUserAccept(\n organizationId: string,\n id: string,\n request: OrganizationUserAcceptRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/accept\",\n request,\n true,\n false\n );\n }\n\n postOrganizationUserConfirm(\n organizationId: string,\n id: string,\n request: OrganizationUserConfirmRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/confirm\",\n request,\n true,\n false\n );\n }\n\n async postOrganizationUsersPublicKey(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/public-keys\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkPublicKeyResponse);\n }\n\n async postOrganizationUserBulkConfirm(\n organizationId: string,\n request: OrganizationUserBulkConfirmRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/confirm\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n putOrganizationUser(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n request,\n true,\n false\n );\n }\n\n putOrganizationUserGroups(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateGroupsRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/groups\",\n request,\n true,\n false\n );\n }\n\n putOrganizationUserResetPasswordEnrollment(\n organizationId: string,\n userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + userId + \"/reset-password-enrollment\",\n request,\n true,\n false\n );\n }\n\n putOrganizationUserResetPassword(\n organizationId: string,\n id: string,\n request: OrganizationUserResetPasswordRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reset-password\",\n request,\n true,\n false\n );\n }\n\n deleteOrganizationUser(organizationId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n null,\n true,\n false\n );\n }\n\n async deleteManyOrganizationUsers(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n revokeOrganizationUser(organizationId: string, id: string): Promise {\n return this.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 request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/revoke\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n restoreOrganizationUser(organizationId: string, id: string): Promise {\n return this.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 request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/restore\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n // Plan APIs\n\n async getPlans(): Promise> {\n const r = await this.send(\"GET\", \"/plans/\", null, 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\n const tokenRequest = new ApiTokenRequest(\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 { 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 for (const userId in this.stateService.accounts.getValue()) {\n if (userId != null && (await this.shouldLock(userId))) {\n await this.executeTimeoutAction(userId);\n }\n }\n }\n\n async lock(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\";\nimport { firstValueFrom } from \"rxjs\";\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 firstValueFrom(this.folderService.folderViews$).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 firstValueFrom(this.folderService.folders$).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 (\n exportData.collections != null &&\n exportData.collections.data != null &&\n exportData.collections.data.length > 0\n ) {\n exportData.collections.data.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 (\n exportData.ciphers != null &&\n exportData.ciphers.data != null &&\n exportData.ciphers.data.length > 0\n ) {\n exportData.ciphers.data\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 { CipherService } from \"../abstractions/cipher.service\";\nimport { EventService as EventServiceAbstraction } from \"../abstractions/event.service\";\nimport { LogService } from \"../abstractions/log.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\";\nimport { EventRequest } from \"../models/request/event.request\";\n\nexport class EventService implements EventServiceAbstraction {\n private inited = false;\n\n constructor(\n private apiService: ApiService,\n private cipherService: CipherService,\n private stateService: StateService,\n private logService: LogService,\n private organizationService: OrganizationService\n ) {}\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.uploadEvents();\n setInterval(() => this.uploadEvents(), 60 * 1000); // check every 60 seconds\n }\n }\n\n async collect(\n eventType: EventType,\n cipherId: string = null,\n uploadImmediately = false,\n 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.uploadEvents();\n }\n }\n\n async uploadEvents(userId?: string): Promise {\n const authed = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!authed) {\n return;\n }\n const eventCollection = await this.stateService.getEventCollection({ userId: userId });\n if (eventCollection == null || eventCollection.length === 0) {\n return;\n }\n const request = eventCollection.map((e) => {\n const req = new EventRequest();\n req.type = e.type;\n req.cipherId = e.cipherId;\n req.date = e.date;\n 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 async clearEvents(userId?: string): Promise {\n await this.stateService.setEventCollection(null, { userId: userId });\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.enabled &&\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 { 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 { EventService as EventLoggingServiceAbstraction } from \"@bitwarden/common/abstractions/event.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 { EventService as EventLoggingService } from \"@bitwarden/common/services/event.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 eventLoggingService: EventLoggingServiceAbstraction,\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 function getBaseUrl() {\n // If the base URL is `https://vaultwarden.example.com/base/path/`,\n // `window.location.href` should have one of the following forms:\n //\n // - `https://vaultwarden.example.com/base/path/`\n // - `https://vaultwarden.example.com/base/path/#/some/route[?queryParam=...]`\n //\n // We want to get to just `https://vaultwarden.example.com/base/path`.\n let baseUrl = window.location.href;\n baseUrl = baseUrl.replace(/#.*/, ''); // Strip off `#` and everything after.\n baseUrl = baseUrl.replace(/\\/+$/, ''); // Trim any trailing `/` chars.\n return baseUrl;\n }\n return async () => {\n await this.stateService.init();\n\n const urls = {base: getBaseUrl()};\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.eventLoggingService as EventLoggingService).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","export enum ClientType {\n Web = \"web\",\n Browser = \"browser\",\n Desktop = \"desktop\",\n Mobile = \"mobile\",\n Cli = \"cli\",\n DirectoryConnector = \"connector\",\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","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 ) {\n let iconClasses: string = null;\n if (type != null) {\n // If you add custom types to this part, the type to SweetAlertIcon cast below needs to be changed.\n switch (type) {\n case \"success\":\n iconClasses = \"bwi-check text-success\";\n break;\n case \"warning\":\n iconClasses = \"bwi-exclamation-triangle text-warning\";\n break;\n case \"error\":\n iconClasses = \"bwi-error text-danger\";\n break;\n case \"info\":\n iconClasses = \"bwi-info-circle text-info\";\n break;\n default:\n break;\n }\n }\n\n const bootstrapModal = document.querySelector(\"div.modal\");\n if (bootstrapModal != null) {\n bootstrapModal.removeAttribute(\"tabindex\");\n }\n\n const iconHtmlStr =\n iconClasses != null ? `` : undefined;\n const confirmed = await Swal.fire({\n heightAuto: false,\n buttonsStyling: false,\n icon: type as SweetAlertIcon, // required to be any of the SweetAlertIcons to output the iconHtml.\n iconHtml: iconHtmlStr,\n text: bodyIsHtml ? null : body,\n html: bodyIsHtml ? body : null,\n titleText: title,\n showCancelButton: cancelText != null,\n cancelButtonText: cancelText,\n showConfirmButton: true,\n confirmButtonText: confirmText == null ? this.i18nService.t(\"ok\") : confirmText,\n });\n\n if (bootstrapModal != null) {\n bootstrapModal.setAttribute(\"tabindex\", \"-1\");\n }\n\n return confirmed.value;\n }\n\n isDev(): boolean {\n return false;\n }\n\n isSelfHost(): boolean {\n return false;\n }\n\n copyToClipboard(text: string, options?: any): void | boolean {\n let win = window;\n let doc = window.document;\n if (options && (options.window || options.win)) {\n win = options.window || options.win;\n doc = win.document;\n } else if (options && options.doc) {\n doc = options.doc;\n }\n if ((win as any).clipboardData && (win as any).clipboardData.setData) {\n // IE specific code path to prevent textarea being shown while dialog is visible.\n (win as any).clipboardData.setData(\"Text\", text);\n } else if (doc.queryCommandSupported && doc.queryCommandSupported(\"copy\")) {\n const textarea = doc.createElement(\"textarea\");\n textarea.textContent = text;\n // Prevent scrolling to bottom of page in MS Edge.\n textarea.style.position = \"fixed\";\n let copyEl = doc.body;\n // For some reason copy command won't work when modal is open if appending to body\n if (doc.body.classList.contains(\"modal-open\")) {\n copyEl = doc.body.querySelector(\".modal\");\n }\n copyEl.appendChild(textarea);\n textarea.select();\n let success = false;\n try {\n // Security exception may be thrown by some browsers.\n success = doc.execCommand(\"copy\");\n if (!success) {\n this.logService.debug(\"Copy command unsupported or disabled.\");\n }\n } catch (e) {\n // eslint-disable-next-line\n console.warn(\"Copy to clipboard failed.\", e);\n } finally {\n copyEl.removeChild(textarea);\n }\n return success;\n }\n }\n\n readFromClipboard(options?: any): Promise {\n throw new Error(\"Cannot read from clipboard on web.\");\n }\n\n supportsBiometric() {\n return Promise.resolve(false);\n }\n\n authenticateBiometric() {\n return Promise.resolve(false);\n }\n\n supportsSecureStorage() {\n return false;\n }\n}\n","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 },\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 {\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 showTrial?: 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","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, p2?: string, p3?: string): string {\n let result: string;\n // eslint-disable-next-line\n if (this.localeMessages.hasOwnProperty(id) && this.localeMessages[id]) {\n result = this.localeMessages[id];\n // eslint-disable-next-line\n } else if (this.defaultMessages.hasOwnProperty(id) && this.defaultMessages[id]) {\n result = this.defaultMessages[id];\n } else {\n result = \"\";\n }\n\n if (result !== \"\") {\n if (p1 != null) {\n result = result.split(\"__$1__\").join(p1);\n }\n if (p2 != null) {\n result = result.split(\"__$2__\").join(p2);\n }\n if (p3 != null) {\n result = result.split(\"__$3__\").join(p3);\n }\n }\n\n return result;\n }\n\n private async loadMessages(locale: string, messagesObj: any): Promise {\n const formattedLocale = locale.replace(\"-\", \"_\");\n const locales = await this.getLocalesJson(formattedLocale);\n for (const prop in locales) {\n // eslint-disable-next-line\n if (!locales.hasOwnProperty(prop)) {\n continue;\n }\n messagesObj[prop] = locales[prop].message;\n\n if (locales[prop].placeholders) {\n for (const placeProp in locales[prop].placeholders) {\n if (\n !locales[prop].placeholders.hasOwnProperty(placeProp) || // eslint-disable-line\n !locales[prop].placeholders[placeProp].content\n ) {\n continue;\n }\n\n const replaceToken = \"\\\\$\" + placeProp.toUpperCase() + \"\\\\$\";\n let replaceContent = locales[prop].placeholders[placeProp].content;\n if (replaceContent === \"$1\" || replaceContent === \"$2\" || replaceContent === \"$3\") {\n replaceContent = \"__$\" + replaceContent + \"__\";\n }\n messagesObj[prop] = messagesObj[prop].replace(\n new RegExp(replaceToken, \"g\"),\n replaceContent\n );\n }\n }\n }\n }\n}\n","import { 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","export class EmergencyAccessAcceptRequest {\n token: string;\n}\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\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 this.email = qParams.email;\n await this.unauthedHandler(qParams);\n }\n }\n\n if (error) {\n const message =\n errorMessage != null\n ? this.i18nService.t(this.failedShortMessage, errorMessage)\n : this.i18nService.t(this.failedMessage);\n this.platformUtilService.showToast(\"error\", null, message, { timeout: 10000 });\n this.router.navigate([\"/\"]);\n }\n\n this.loading = false;\n });\n }\n}\n","
\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 { 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 { 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\";\nimport { OrganizationUserAcceptRequest } from \"@bitwarden/common/models/request/organization-user-accept.request\";\n\nimport { BaseAcceptComponent } from \"../common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-organization\",\n templateUrl: \"accept-organization.component.html\",\n})\nexport class AcceptOrganizationComponent extends BaseAcceptComponent {\n orgName: string;\n\n protected requiredParameters: string[] = [\"organizationId\", \"organizationUserId\", \"token\"];\n\n constructor(\n router: Router,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n route: ActivatedRoute,\n private apiService: ApiService,\n stateService: StateService,\n private cryptoService: CryptoService,\n private policyApiService: PolicyApiServiceAbstraction,\n private policyService: PolicyService,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {\n super(router, platformUtilsService, i18nService, route, stateService);\n }\n\n async authedHandler(qParams: Params): Promise {\n this.actionPromise = this.prepareAcceptRequest(qParams).then(async (request) => {\n await this.apiService.postOrganizationUserAccept(\n qParams.organizationId,\n qParams.organizationUserId,\n request\n );\n });\n\n await this.actionPromise;\n this.platformUtilService.showToast(\n \"success\",\n this.i18nService.t(\"inviteAccepted\"),\n this.i18nService.t(\"inviteAcceptedDesc\"),\n { timeout: 10000 }\n );\n\n await this.stateService.setOrganizationInvitation(null);\n this.router.navigate([\"/vault\"]);\n }\n\n async unauthedHandler(qParams: 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 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","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 ApiLogInCredentials {\n readonly type = AuthenticationType.Api;\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 { 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\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 ) {\n super(environmentService, i18nService, platformUtilsService);\n\n const navigation = this.router.getCurrentNavigation();\n if (navigation) {\n this.email = navigation.extras?.state?.email;\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 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 protected alwaysRememberEmail = false;\n protected skipRememberEmail = false;\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.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 if (!this.alwaysRememberEmail) {\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 if (email) {\n this.validateEmail();\n }\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 if (data.rememberEmail || this.alwaysRememberEmail) {\n await this.stateService.setRememberedEmail(data.email);\n } else {\n await this.stateService.setRememberedEmail(null);\n }\n if (this.handleCaptchaRequired(response)) {\n return;\n } else if (response.requiresTwoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute]);\n }\n } else if (response.forcePasswordReset) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n this.loginService.clearValues();\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n if (this.ngZone.isStable) {\n document.getElementById(\"masterPassword\").focus();\n } else {\n this.ngZone.onStable\n .pipe(take(1))\n .subscribe(() => document.getElementById(\"masterPassword\").focus());\n }\n }\n\n async launchSsoBrowser(clientId: string, ssoRedirectUri: string) {\n // Generate necessary sso params\n const passwordOptions: any = {\n type: \"password\",\n length: 64,\n uppercase: true,\n lowercase: true,\n numbers: true,\n special: false,\n };\n const state = await this.passwordGenerationService.generatePassword(passwordOptions);\n const ssoCodeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n const codeVerifierHash = await this.cryptoFunctionService.hash(ssoCodeVerifier, \"sha256\");\n const codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n\n // Save sso params\n await this.stateService.setSsoState(state);\n await this.stateService.setSsoCodeVerifier(ssoCodeVerifier);\n\n // Build URI\n const webUrl = this.environmentService.getWebVaultUrl();\n\n // Launch browser\n this.platformUtilsService.launchUri(\n webUrl +\n \"/#/sso?clientId=\" +\n clientId +\n \"&redirectUri=\" +\n encodeURIComponent(ssoRedirectUri) +\n \"&state=\" +\n state +\n \"&codeChallenge=\" +\n codeChallenge\n );\n }\n\n 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 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 await this.stateService.setRememberEmail(rememberEmail);\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 const email = this.formGroup.get(\"email\").value;\n this.router.navigate([\"/login-with-device\"], { state: { email: email } });\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 { 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 = false;\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 = false;\n }\n\n async ngOnInit() {\n this.setupCaptcha();\n }\n\n async submit(showToast = true) {\n if (typeof crypto.subtle === 'undefined') {\n this.platformUtilsService.showToast(\n \"error\",\n \"This browser requires HTTPS to use the web vault\",\n \"Check the Vaultwarden wiki for details on how to enable it\"\n );\n return;\n }\n\n 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","export class ReferenceEventRequest {\n id: string;\n layout: string;\n flow: string;\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","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","\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","
\n \n \n
\n
\n
\n
\n
\n
\n \n\n
\n
\n
\n
\n \n \n

The Bitwarden Password Manager

\n

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

\n

Store logins, secure notes, and more

\n

Collaborate and share securely

\n

Access anywhere on any device

\n

Create your account to get started

\n
\n\n \n
\n

\n Start Your Teams
Enterprise Free Trial Now\n

\n

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

\n

Collaborate and share securely

\n

Deploy and manage quickly and easily

\n

Access anywhere on any device

\n

Create your account to get started

\n
\n\n \n
\n

\n Start Your Teams
Enterprise Free Trial Now\n

\n

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

\n

Collaborate and share securely

\n

Deploy and manage quickly and easily

\n

Access anywhere on any device

\n

Create your account to get started

\n
\n\n \n
\n

Start Your Premium Account Now

\n

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

\n

Store logins, secure notes, and more

\n

Secure your account with advanced two-step login

\n

Access anywhere on any device

\n

Create your account to get started

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

{{ \"createAccount\" | i18n }}

\n
\n
\n \n {{ \"createOrganizationCreatePersonalAccount\" | i18n }}\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n \n \n \n
\n
\n \"No more excuses; start using Bitwarden today. The identity you save could be your\n own. The money definitely will be.\"\n
\n
\n
\n\n \n
\n
\n \n \n \n
\n
\n “Bitwarden boasts the backing of some of the world's best security experts and an\n attractive, easy-to-use interface”\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\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 { 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 { 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\";\n\n@Component({\n selector: \"app-register\",\n templateUrl: \"register.component.html\",\n})\nexport class RegisterComponent extends BaseRegisterComponent implements OnInit, OnDestroy {\n email = \"\";\n showCreateOrgMessage = false;\n layout = \"\";\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n\n private policies: Policy[];\n private destroy$ = new Subject();\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 private route: ActivatedRoute,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n private policyApiService: PolicyApiServiceAbstraction,\n private policyService: PolicyService,\n environmentService: EnvironmentService,\n logService: LogService,\n private routerService: RouterService\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 // 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 if (qParams.premium != null) {\n this.routerService.setPreviousUrl(\"/settings/premium\");\n } else if (qParams.org != null) {\n this.showCreateOrgMessage = true;\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 if (qParams.layout != null) {\n this.layout = this.referenceData.layout = qParams.layout;\n }\n if (qParams.reference != null) {\n this.referenceData.id = qParams.reference;\n } else {\n this.referenceData.id = (\"; \" + document.cookie)\n .split(\"; reference=\")\n .pop()\n .split(\";\")\n .shift();\n }\n // Are they coming from an email for sponsoring a families organization\n if (qParams.sponsorshipToken != null) {\n // After logging in redirect them to setup the families sponsorship\n const route = this.router.createUrlTree([\"setup/families-for-enterprise\"], {\n queryParams: { plan: qParams.sponsorshipToken },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n if (this.referenceData.id === \"\") {\n this.referenceData.id = null;\n }\n });\n const invite = await this.stateService.getOrganizationInvitation();\n if (invite != null) {\n try {\n const policies = await this.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 await super.ngOnInit();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\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 \"./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 { 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 { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/models/request/organization-user-reset-password-enrollment.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 ) {\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.apiService.putOrganizationUserResetPasswordEnrollment(\n this.orgId,\n userId,\n resetRequest\n );\n });\n } else {\n this.formPromise = this.apiService.setPassword(request).then(async () => {\n await this.onSetPasswordSuccess(key, encKey, keys);\n });\n }\n\n await this.formPromise;\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.router.navigate([this.successRoute]);\n }\n } catch {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n private async onSetPasswordSuccess(\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString],\n keys: [string, EncString]\n ) {\n await this.stateService.setKdfType(this.kdf);\n await this.stateService.setKdfIterations(this.kdfIterations);\n await this.cryptoService.setKey(key);\n await this.cryptoService.setEncKey(encKey[1].encryptedString);\n await this.cryptoService.setEncPrivateKey(keys[1].encryptedString);\n\n const localKeyHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n key,\n HashPurpose.LocalAuthorization\n );\n await this.cryptoService.setKeyHash(localKeyHash);\n }\n}\n","
\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 { 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 ) {\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 );\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","\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 } from \"@angular/core\";\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 @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 { 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 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\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 policies: Policy[];\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n validOrgs: string[] = [\"teams\", \"enterprise\", \"families\"];\n referenceData: ReferenceEventRequest;\n @ViewChild(\"stepper\", { static: false }) verticalStepper: VerticalStepperComponent;\n\n orgInfoFormGroup = this.formBuilder.group({\n name: [\"\", [Validators.required]],\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 (!qParams.org) {\n return;\n }\n\n if (qParams.layout) {\n this.layout = qParams.layout;\n }\n\n if (this.validOrgs.includes(qParams.org)) {\n this.org = qParams.org;\n } else {\n this.org = \"families\";\n }\n\n this.referenceData.flow = qParams.org;\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 this.orgLabel = this.titleCasePipe.transform(this.org);\n this.accountCreateOnly = false;\n\n if (this.org === \"families\") {\n this.plan = PlanType.FamiliesAnnually;\n this.product = ProductType.Families;\n } else if (this.org === \"teams\") {\n this.plan = PlanType.TeamsAnnually;\n this.product = ProductType.Teams;\n } else if (this.org === \"enterprise\") {\n this.plan = PlanType.EnterpriseAnnually;\n this.product = ProductType.Enterprise;\n }\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\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\", \"people\"]);\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.authingWithApiKey() ||\n this.authService.authingWithPasswordless()\n );\n }\n\n get needsLock(): boolean {\n return this.authService.authingWithSso() || this.authService.authingWithApiKey();\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 \"./organization-user-reset-password.request\";\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 { 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 Vaultwarden (unofficial Bitwarden® server)
\n {{ \"versionNumber\" | i18n: version }}\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
Vaultwarden (unofficial Bitwarden® server)
\n
\n
\n {{ \"versionNumber\" | i18n: version }}\n
\n
\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","\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} 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 ngAfterContentInit() {\n this.keyManager = new FocusKeyManager(this.menuItems).withWrap();\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\") hasPopup = \"menu\";\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(false),\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 = 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\n .keydownEvents()\n .pipe(filter((event: KeyboardEvent) => event.key === \"Escape\" || event.key === \"Tab\"));\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","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","\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","import { Component, OnInit } from \"@angular/core\";\n\n@Component({\n selector: \"app-user-layout\",\n templateUrl: \"user-layout.component.html\",\n})\nexport class UserLayoutComponent implements OnInit {\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n }\n}\n","\n\n\n","import { 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 { 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 {{ 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 { Component, HostBinding, Input } from \"@angular/core\";\n\nimport { ButtonLikeAbstraction } from \"../shared/button-like.abstraction\";\n\nexport type IconButtonType = \"contrast\" | \"main\" | \"muted\" | \"primary\" | \"secondary\" | \"danger\";\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:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\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:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\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:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\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:hover:tw-border-primary-500\",\n \"disabled:hover:tw-bg-primary-500\",\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: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 ],\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: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 ],\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]\",\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 = \"main\";\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 \"disabled:tw-opacity-60\",\n \"focus:tw-outline-none\",\n\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:before:tw-ring-text-contrast\",\n \"focus-visible:tw-z-10\",\n ]\n .concat(styles[this.buttonType])\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","\n \n \n \n \n \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
{{ item.email }}
\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 {{ item.role | userType: \"-\" }}\n \n\n \n {{ 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","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;\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 { 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 { 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 { 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","
\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 { 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 );\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","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 );\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 { 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\";\nimport { OrganizationUserUserDetailsResponse } from \"@bitwarden/common/models/response/organization-user.response\";\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 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.apiService.getOrganizationUsers(this.organizationId);\n this.allUsers = users.data.map((r) => r).sort(Utils.getSortFunction(this.i18nService, \"email\"));\n if (this.entity === \"group\") {\n const response = await this.apiService.getGroupUsers(this.organizationId, this.entityId);\n if (response != null && users.data.length > 0) {\n response.forEach((s) => {\n const user = users.data.filter((u) => u.id === s);\n if (user != null && user.length > 0) {\n (user[0] as any).checked = true;\n }\n });\n }\n } else if (this.entity === \"collection\") {\n const response = await this.apiService.getCollectionUsers(this.organizationId, this.entityId);\n if (response != null && users.data.length > 0) {\n response.forEach((s) => {\n const user = users.data.filter((u) => !u.accessAll && u.id === s.id);\n if (user != null && user.length > 0) {\n (user[0] as any).checked = true;\n (user[0] as any).readOnly = s.readOnly;\n (user[0] as any).hidePasswords = s.hidePasswords;\n }\n });\n }\n }\n\n this.allUsers.forEach((u) => {\n if (this.entity === \"collection\" && u.accessAll) {\n (u as any).checked = true;\n }\n if ((u as any).checked) {\n this.selectedCount++;\n }\n });\n }\n\n check(u: OrganizationUserUserDetailsResponse) {\n if (this.entity === \"collection\" && u.accessAll) {\n return;\n }\n (u as any).checked = !(u as any).checked;\n this.selectedChanged(u);\n }\n\n selectedChanged(u: OrganizationUserUserDetailsResponse) {\n if ((u as any).checked) {\n this.selectedCount++;\n } else {\n if (this.entity === \"collection\") {\n (u as any).readOnly = false;\n (u as any).hidePasswords = false;\n }\n this.selectedCount--;\n }\n }\n\n filterSelected(showSelected: boolean) {\n this.showSelected = showSelected;\n }\n\n async submit() {\n try {\n if (this.entity === \"group\") {\n const selections = this.users.filter((u) => (u as any).checked).map((u) => u.id);\n this.formPromise = this.apiService.putGroupUsers(\n this.organizationId,\n this.entityId,\n selections\n );\n } else {\n const selections = this.users\n .filter((u) => (u as any).checked && !u.accessAll)\n .map(\n (u) =>\n new SelectionReadOnlyRequest(u.id, !!(u as any).readOnly, !!(u as any).hidePasswords)\n );\n this.formPromise = this.apiService.putCollectionUsers(\n this.organizationId,\n this.entityId,\n selections\n );\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"updatedUsers\"));\n this.onEditedUsers.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n

{{ \"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 { 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\";\n\nimport { CollectionAddEditComponent } from \"./collection-add-edit.component\";\nimport { EntityUsersComponent } from \"./entity-users.component\";\n\n@Component({\n selector: \"app-org-manage-collections\",\n templateUrl: \"collections.component.html\",\n})\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 ) {}\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 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 );\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 OrganizationUserBulkRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","export class OrganizationUserConfirmRequest {\n key: string;\n}\n","
\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 { 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 { OrganizationUserUserDetailsResponse } from \"@bitwarden/common/models/response/organization-user.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 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","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 { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { OrganizationUserBulkConfirmRequest } from \"@bitwarden/common/models/request/organization-user-bulk-confirm.request\";\nimport { OrganizationUserBulkRequest } from \"@bitwarden/common/models/request/organization-user-bulk.request\";\n\nimport { BulkUserDetails } from \"./bulk-status.component\";\n\n@Component({\n selector: \"app-bulk-confirm\",\n templateUrl: \"bulk-confirm.component.html\",\n})\nexport class BulkConfirmComponent implements OnInit {\n @Input() organizationId: string;\n @Input() users: BulkUserDetails[];\n\n excludedUsers: BulkUserDetails[];\n filteredUsers: BulkUserDetails[];\n publicKeys: Map = new Map();\n fingerprints: Map = new Map();\n statuses: Map = new Map();\n\n loading = true;\n done = false;\n error: string;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n this.excludedUsers = this.users.filter((u) => !this.isAccepted(u));\n this.filteredUsers = this.users.filter((u) => this.isAccepted(u));\n\n if (this.filteredUsers.length <= 0) {\n this.done = true;\n }\n\n const response = await this.getPublicKeys();\n\n for (const entry of response.data) {\n const publicKey = Utils.fromB64ToArray(entry.key);\n const fingerprint = await this.cryptoService.getFingerprint(entry.userId, publicKey.buffer);\n if (fingerprint != null) {\n this.publicKeys.set(entry.id, publicKey);\n this.fingerprints.set(entry.id, fingerprint.join(\"-\"));\n }\n }\n\n this.loading = false;\n }\n\n async submit() {\n this.loading = true;\n try {\n const key = await this.getCryptoKey();\n const userIdsWithKeys: any[] = [];\n for (const user of this.filteredUsers) {\n const publicKey = this.publicKeys.get(user.id);\n if (publicKey == null) {\n continue;\n }\n const encryptedKey = await this.cryptoService.rsaEncrypt(key.key, publicKey.buffer);\n userIdsWithKeys.push({\n id: user.id,\n key: encryptedKey.encryptedString,\n });\n }\n const response = await this.postConfirmRequest(userIdsWithKeys);\n\n response.data.forEach((entry) => {\n const error = entry.error !== \"\" ? entry.error : this.i18nService.t(\"bulkConfirmMessage\");\n this.statuses.set(entry.id, error);\n });\n\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n this.loading = false;\n }\n\n protected isAccepted(user: BulkUserDetails) {\n return user.status === OrganizationUserStatusType.Accepted;\n }\n\n protected async getPublicKeys() {\n const request = new OrganizationUserBulkRequest(this.filteredUsers.map((user) => user.id));\n return await this.apiService.postOrganizationUsersPublicKey(this.organizationId, request);\n }\n\n protected getCryptoKey() {\n return this.cryptoService.getOrgKey(this.organizationId);\n }\n\n protected async postConfirmRequest(userIdsWithKeys: any[]) {\n const request = new OrganizationUserBulkConfirmRequest(userIdsWithKeys);\n return await this.apiService.postOrganizationUserBulkConfirm(this.organizationId, request);\n }\n}\n","
\n
\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 { OrganizationUserBulkRequest } from \"@bitwarden/common/models/request/organization-user-bulk.request\";\n\nimport { BulkUserDetails } from \"./bulk-status.component\";\n\n@Component({\n selector: \"app-bulk-remove\",\n templateUrl: \"bulk-remove.component.html\",\n})\nexport class BulkRemoveComponent {\n @Input() organizationId: string;\n @Input() users: BulkUserDetails[];\n\n statuses: Map = new Map();\n\n loading = false;\n done = false;\n error: string;\n\n constructor(protected apiService: ApiService, protected i18nService: I18nService) {}\n\n async submit() {\n this.loading = true;\n try {\n const response = await this.deleteUsers();\n\n response.data.forEach((entry) => {\n const error = entry.error !== \"\" ? entry.error : this.i18nService.t(\"bulkRemovedMessage\");\n this.statuses.set(entry.id, error);\n });\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n\n this.loading = false;\n }\n\n protected async deleteUsers() {\n const request = new OrganizationUserBulkRequest(this.users.map((user) => user.id));\n return await this.apiService.deleteManyOrganizationUsers(this.organizationId, request);\n }\n\n protected get removeUsersWarning() {\n return this.i18nService.t(\"removeOrgUsersConfirmation\");\n }\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 { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationUserBulkRequest } from \"@bitwarden/common/models/request/organization-user-bulk.request\";\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 apiService: ApiService,\n protected i18nService: I18nService,\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 request = new OrganizationUserBulkRequest(this.users.map((user) => user.id));\n if (this.isRevoking) {\n return await this.apiService.revokeManyOrganizationUsers(this.organizationId, request);\n } else {\n return await this.apiService.restoreManyOrganizationUsers(this.organizationId, request);\n }\n }\n}\n","
\n
\n
\n
\n

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

\n \n ×\n \n
\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}{{ \"status\" | i18n }}
\n \n \n {{ item.user.email }}\n {{ item.user.name }}\n \n {{ item.message }}\n \n {{ item.message }}\n
\n
\n
\n \n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { OrganizationUserStatusType } from \"@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 { 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 ) {}\n\n async ngOnInit() {\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n await this.load();\n }\n\n async load() {\n if (this.showUser) {\n const response = await this.apiService.getOrganizationUsers(this.organizationId);\n response.data.forEach((u) => {\n const name = this.userNamePipe.transform(u);\n this.orgUsersIdMap.set(u.id, { name: name, email: u.email });\n this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n });\n }\n await this.loadEvents(true);\n this.loaded = true;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.refreshPromise != null || this.morePromise != null) {\n return;\n }\n\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidDateRange\")\n );\n return;\n }\n\n this.loading = true;\n let response: ListResponse;\n try {\n let promise: Promise;\n if (this.entity === \"user\" && this.providerId) {\n promise = this.apiService.getEventsProviderUser(\n this.providerId,\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n } else if (this.entity === \"user\") {\n promise = this.apiService.getEventsOrganizationUser(\n this.organizationId,\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n } else {\n promise = this.apiService.getEventsCipher(\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n }\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n response = await promise;\n } catch (e) {\n this.logService.error(e);\n }\n\n this.continuationToken = response.continuationToken;\n const events = await Promise.all(\n response.data.map(async (r) => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = await this.eventService.getEventInfo(r);\n const user =\n this.showUser && userId != null && this.orgUsersUserIdMap.has(userId)\n ? this.orgUsersUserIdMap.get(userId)\n : null;\n return {\n message: eventInfo.message,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: user != null ? user.name : this.showUser ? this.i18nService.t(\"unknown\") : null,\n userEmail: user != null ? user.email : this.showUser ? \"\" : null,\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n };\n })\n );\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n}\n","
\n","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 { 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 { 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\";\nimport { OrganizationUserResetPasswordRequest } from \"@bitwarden/common/models/request/organization-user-reset-password.request\";\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 apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private passwordGenerationService: PasswordGenerationService,\n private policyService: PolicyService,\n private cryptoService: CryptoService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n 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.apiService\n .getOrganizationUserResetPasswordDetails(this.organizationId, this.id)\n .then(async (response) => {\n if (response == null) {\n throw new Error(this.i18nService.t(\"resetPasswordDetailsError\"));\n }\n\n const kdfType = response.kdf;\n const kdfIterations = response.kdfIterations;\n const resetPasswordKey = response.resetPasswordKey;\n const encryptedPrivateKey = response.encryptedPrivateKey;\n\n // Decrypt Organization's encrypted Private Key with org key\n const orgSymKey = await this.cryptoService.getOrgKey(this.organizationId);\n const decPrivateKey = await this.cryptoService.decryptToBytes(\n new EncString(encryptedPrivateKey),\n orgSymKey\n );\n\n // Decrypt User's Reset Password Key to get EncKey\n const decValue = await this.cryptoService.rsaDecrypt(resetPasswordKey, decPrivateKey);\n const userEncKey = new SymmetricCryptoKey(decValue);\n\n // Create new key and hash new password\n const newKey = await this.cryptoService.makeKey(\n this.newPassword,\n this.email.trim().toLowerCase(),\n kdfType,\n kdfIterations\n );\n const newPasswordHash = await this.cryptoService.hashPassword(this.newPassword, newKey);\n\n // Create new encKey for the User\n const newEncKey = await this.cryptoService.remakeEncKey(newKey, userEncKey);\n\n // Create request\n const request = new OrganizationUserResetPasswordRequest();\n request.key = newEncKey[1].encryptedString;\n request.newMasterPasswordHash = newPasswordHash;\n\n // Change user's password\n return this.apiService.putOrganizationUserResetPassword(\n this.organizationId,\n this.id,\n request\n );\n });\n\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"resetPasswordSuccess\")\n );\n this.onPasswordReset.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n getStrengthResult(result: zxcvbn.ZXCVBNResult) {\n this.passwordStrengthResult = result;\n }\n}\n","import { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\n\nimport { SelectionReadOnlyRequest } from \"./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","import { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\n\nimport { SelectionReadOnlyRequest } from \"./selection-read-only.request\";\n\nexport class OrganizationUserUpdateRequest {\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 { 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 { OrganizationUserInviteRequest } from \"@bitwarden/common/models/request/organization-user-invite.request\";\nimport { OrganizationUserUpdateRequest } from \"@bitwarden/common/models/request/organization-user-update.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-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 ) {}\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.apiService.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 );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteOrganizationUser(\n this.organizationId,\n this.organizationUserId\n );\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedUserId\", this.name)\n );\n this.onDeletedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n 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 );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.formPromise = this.apiService.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.apiService.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.apiService.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.apiService.postOrganizationUserInvite(this.organizationId, request);\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 { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { OrganizationUserUpdateGroupsRequest } from \"@bitwarden/common/models/request/organization-user-update-groups.request\";\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 ) {}\n\n async ngOnInit() {\n const groupsResponse = await this.apiService.getGroups(this.organizationId);\n const groups = groupsResponse.data.map((r) => r);\n groups.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n this.groups = groups;\n\n try {\n const userGroups = await this.apiService.getOrganizationUserGroups(\n this.organizationId,\n this.organizationUserId\n );\n if (userGroups != null && this.groups != null) {\n userGroups.forEach((ug) => {\n const group = this.groups.filter((g) => g.id === ug);\n if (group != null && group.length > 0) {\n (group[0] as any).checked = true;\n }\n });\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n this.loading = false;\n }\n\n check(g: GroupResponse, select?: boolean) {\n (g as any).checked = select == null ? !(g as any).checked : select;\n if (!(g as any).checked) {\n (g as any).readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.groups.forEach((g) => this.check(g, select));\n }\n\n async submit() {\n const request = new OrganizationUserUpdateGroupsRequest();\n request.groupIds = this.groups.filter((g) => (g as any).checked).map((g) => g.id);\n\n try {\n this.formPromise = this.apiService.putOrganizationUserGroups(\n this.organizationId,\n this.organizationUserId,\n request\n );\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"editedGroupsForUser\", this.name)\n );\n this.onSavedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","\n

{{ \"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 { 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 { OrganizationKeysRequest } from \"@bitwarden/common/models/request/organization-keys.request\";\nimport { OrganizationUserBulkRequest } from \"@bitwarden/common/models/request/organization-user-bulk.request\";\nimport { OrganizationUserConfirmRequest } from \"@bitwarden/common/models/request/organization-user-confirm.request\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { OrganizationUserBulkResponse } from \"@bitwarden/common/models/response/organization-user-bulk.response\";\nimport { OrganizationUserUserDetailsResponse } from \"@bitwarden/common/models/response/organization-user.response\";\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 { 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 organizationId: string;\n status: OrganizationUserStatusType = null;\n accessEvents = false;\n accessGroups = false;\n canResetPassword = false; // User permission (admin/custom)\n orgUseResetPassword = false; // Org plan ability\n orgHasKeys = false; // Org public/private keys\n orgResetPasswordPolicyEnabled = false;\n callingUserType: OrganizationUserType = null;\n\n 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 ) {\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.organizationId = params.organizationId;\n const organization = await this.organizationService.get(this.organizationId);\n this.accessEvents = organization.useEvents;\n this.accessGroups = organization.useGroups;\n this.canResetPassword = organization.canManageUsersPassword;\n this.orgUseResetPassword = organization.useResetPassword;\n this.callingUserType = organization.type;\n this.orgHasKeys = organization.hasPublicAndPrivateKeys;\n\n // Backfill pub/priv key if necessary\n if (this.canResetPassword && !this.orgHasKeys) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n const request = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n const response = await this.organizationApiService.updateKeys(\n this.organizationId,\n request\n );\n if (response != null) {\n this.orgHasKeys = response.publicKey != null && response.privateKey != null;\n await this.syncService.fullSync(true); // Replace oganizations with new data\n } else {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n }\n\n const resetPasswordPolicy = policies\n .filter((policy) => policy.type === PolicyType.ResetPassword)\n .find((p) => p.organizationId === this.organizationId);\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.apiService.getOrganizationUsers(this.organizationId);\n }\n\n deleteUser(id: string): Promise {\n return this.apiService.deleteOrganizationUser(this.organizationId, id);\n }\n\n revokeUser(id: string): Promise {\n return this.apiService.revokeOrganizationUser(this.organizationId, id);\n }\n\n restoreUser(id: string): Promise {\n return this.apiService.restoreOrganizationUser(this.organizationId, id);\n }\n\n reinviteUser(id: string): Promise {\n return this.apiService.postOrganizationUserReinvite(this.organizationId, id);\n }\n\n async confirmUser(\n user: OrganizationUserUserDetailsResponse,\n publicKey: Uint8Array\n ): Promise {\n const orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey.buffer);\n const request = new OrganizationUserConfirmRequest();\n request.key = key.encryptedString;\n await this.apiService.postOrganizationUserConfirm(this.organizationId, user.id, request);\n }\n\n allowResetPassword(orgUser: OrganizationUserUserDetailsResponse): boolean {\n // Hierarchy check\n let callingUserHasPermission = false;\n\n switch (this.callingUserType) {\n case OrganizationUserType.Owner:\n callingUserHasPermission = true;\n break;\n case OrganizationUserType.Admin:\n callingUserHasPermission = orgUser.type !== OrganizationUserType.Owner;\n break;\n case OrganizationUserType.Custom:\n callingUserHasPermission =\n orgUser.type !== OrganizationUserType.Owner &&\n orgUser.type !== OrganizationUserType.Admin;\n break;\n }\n\n // Final\n return (\n this.canResetPassword &&\n callingUserHasPermission &&\n this.orgUseResetPassword &&\n this.orgHasKeys &&\n orgUser.resetPasswordEnrolled &&\n this.orgResetPasswordPolicyEnabled &&\n orgUser.status === OrganizationUserStatusType.Confirmed\n );\n }\n\n showEnrolledStatus(orgUser: OrganizationUserUserDetailsResponse): boolean {\n return (\n this.orgUseResetPassword &&\n orgUser.resetPasswordEnrolled &&\n this.orgResetPasswordPolicyEnabled\n );\n }\n\n async edit(user: OrganizationUserUserDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n UserAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.organizationId = this.organizationId;\n comp.organizationUserId = user != null ? user.id : null;\n comp.usesKeyConnector = user?.usesKeyConnector;\n // 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.organizationId;\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.organizationId;\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.organizationId,\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 request = new OrganizationUserBulkRequest(filteredUsers.map((user) => user.id));\n const response = this.apiService.postManyOrganizationUserReinvite(\n this.organizationId,\n request\n );\n this.showBulkStatus(\n users,\n filteredUsers,\n response,\n this.i18nService.t(\"bulkReinviteMessage\")\n );\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async bulkConfirm() {\n if (this.actionPromise != null) {\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkConfirmComponent,\n this.bulkConfirmModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.users = this.getCheckedUsers();\n }\n );\n\n await modal.onClosedPromise();\n await this.load();\n }\n\n async events(user: OrganizationUserUserDetailsResponse) {\n await this.modalService.openViewRef(EntityEventsComponent, this.eventsModalRef, (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.organizationId = this.organizationId;\n comp.entityId = user.id;\n comp.showUser = false;\n comp.entity = \"user\";\n });\n }\n\n async resetPassword(user: OrganizationUserUserDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n ResetPasswordComponent,\n this.resetPasswordModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.email = user != null ? user.email : null;\n comp.organizationId = this.organizationId;\n comp.id = user != null ? user.id : null;\n\n // 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\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 );\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","
\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\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, Output } from \"@angular/core\";\n\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\n@Directive()\nexport class CiphersComponent {\n @Input() activeCipherId: string = null;\n @Output() onCipherClicked = new EventEmitter();\n @Output() onCipherRightClicked = new EventEmitter();\n @Output() onAddCipher = new EventEmitter();\n @Output() onAddCipherOptions = new EventEmitter();\n\n loaded = false;\n ciphers: CipherView[] = [];\n searchText: string;\n searchPlaceholder: string = null;\n filter: (cipher: CipherView) => boolean = null;\n deleted = false;\n\n protected searchPending = false;\n\n private searchTimeout: any = null;\n\n constructor(protected searchService: SearchService) {}\n\n async load(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n this.deleted = deleted || false;\n await this.applyFilter(filter);\n this.loaded = true;\n }\n\n async reload(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n this.loaded = false;\n 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 { 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 { 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 { I18nService } from \"@bitwarden/common/abstractions/i18n.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\n constructor(private i18nService: I18nService) {}\n\n ngOnInit(): void {\n if (this.organizationName == null || this.organizationName === \"\") {\n this.organizationName = this.i18nService.t(\"me\");\n this.color = Utils.stringToColor(this.profileName.toUpperCase());\n }\n if (this.color == null) {\n this.color = Utils.stringToColor(this.organizationName.toUpperCase());\n }\n this.textColor = Utils.pickTextColorBasedOnBgColor(this.color);\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 { CiphersComponent as BaseCiphersComponent } from \"@bitwarden/angular/components/ciphers.component\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { EventService } from \"@bitwarden/common/abstractions/event.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-ciphers\",\n templateUrl: \"ciphers.component.html\",\n})\nexport class CiphersComponent extends BaseCiphersComponent implements OnDestroy {\n @Input() showAddNew = true;\n @Output() onAttachmentsClicked = new EventEmitter();\n @Output() onShareClicked = new EventEmitter();\n @Output() onCollectionsClicked = new EventEmitter();\n @Output() onCloneClicked = new EventEmitter();\n @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 eventService: EventService,\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.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, cipher.id);\n } else if (typeI18nKey === \"securityCode\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id);\n }\n }\n\n selectAll(select: boolean) {\n if (select) {\n this.selectAll(false);\n }\n const selectCount =\n select && this.ciphers.length > MaxCheckedCount ? MaxCheckedCount : this.ciphers.length;\n for (let i = 0; i < selectCount; i++) {\n this.checkCipher(this.ciphers[i], select);\n }\n }\n\n checkCipher(c: CipherView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n getSelected(): CipherView[] {\n if (this.ciphers == null) {\n return [];\n }\n return this.ciphers.filter((c) => !!(c as any).checked);\n }\n\n getSelectedIds(): string[] {\n return this.getSelected().map((c) => c.id);\n }\n\n displayTotpCopyButton(cipher: CipherView) {\n return (\n (cipher?.login?.hasTotp ?? false) && (cipher.organizationUseTotp || this.userHasPremiumAccess)\n );\n }\n\n async selectCipher(cipher: CipherView) {\n if (await this.repromptCipher(cipher)) {\n super.selectCipher(cipher);\n }\n }\n\n onOrganizationClicked(organizationId: string) {\n this.onOrganzationBadgeClicked.emit(organizationId);\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 { EventService } from \"@bitwarden/common/abstractions/event.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 { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { CiphersComponent as BaseCiphersComponent } from \"../../vault/ciphers.component\";\n\n@Component({\n selector: \"app-org-vault-ciphers\",\n templateUrl: \"../../vault/ciphers.component.html\",\n})\nexport class CiphersComponent extends BaseCiphersComponent {\n @Output() onEventsClicked = new EventEmitter();\n\n organization: Organization;\n accessEvents = false;\n\n protected allCiphers: CipherView[] = [];\n\n constructor(\n searchService: SearchService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n cipherService: CipherService,\n eventService: EventService,\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 eventService,\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 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 { 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 { 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 { 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 { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/models/request/organization-user-reset-password-enrollment.request\";\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 apiService: ApiService,\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 ) {\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.apiService.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 { 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\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/models/request/organization-user-reset-password-enrollment.request\";\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 ) {}\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.apiService.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 { 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 { CiphersComponent } from \"./ciphers.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() ciphersComponent: CiphersComponent;\n @Input() deleted: boolean;\n @Input() organization: Organization;\n\n @ViewChild(\"bulkDeleteTemplate\", { read: ViewContainerRef, static: true })\n bulkDeleteModalRef: ViewContainerRef;\n @ViewChild(\"bulkRestoreTemplate\", { read: ViewContainerRef, static: true })\n bulkRestoreModalRef: ViewContainerRef;\n @ViewChild(\"bulkMoveTemplate\", { read: ViewContainerRef, static: true })\n bulkMoveModalRef: ViewContainerRef;\n @ViewChild(\"bulkShareTemplate\", { read: ViewContainerRef, static: true })\n bulkShareModalRef: ViewContainerRef;\n\n constructor(\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private modalService: ModalService,\n private passwordRepromptService: PasswordRepromptService\n ) {}\n\n async bulkDelete() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkDeleteComponent,\n this.bulkDeleteModalRef,\n (comp) => {\n comp.permanent = this.deleted;\n comp.cipherIds = selectedIds;\n comp.organization = this.organization;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeleted.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async bulkRestore() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkRestoreComponent,\n this.bulkRestoreModalRef,\n (comp) => {\n comp.cipherIds = selectedIds;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onRestored.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async bulkShare() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedCiphers = this.ciphersComponent.getSelected();\n if (selectedCiphers.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkShareComponent,\n this.bulkShareModalRef,\n (comp) => {\n comp.ciphers = selectedCiphers;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onShared.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async bulkMove() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkMoveComponent,\n this.bulkMoveModalRef,\n (comp) => {\n comp.cipherIds = selectedIds;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onMoved.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n selectAll(select: boolean) {\n this.ciphersComponent.selectAll(select);\n }\n\n private async promptPassword() {\n const selectedCiphers = this.ciphersComponent.getSelected();\n const notProtected = !selectedCiphers.find(\n (cipher) => cipher.reprompt !== CipherRepromptType.None\n );\n\n return notProtected || (await this.passwordRepromptService.showPasswordPrompt());\n }\n}\n","
\n
\n
\n
\n
\n
\n \n
\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 { CiphersComponent } from \"./ciphers.component\";\nimport { CollectionsComponent } from \"./collections.component\";\nimport { VaultFilterComponent } from \"./vault-filter/vault-filter.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(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;\n @ViewChild(\"attachments\", { read: ViewContainerRef, static: true })\n attachmentsModalRef: ViewContainerRef;\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n @ViewChild(\"collections\", { read: ViewContainerRef, static: true })\n collectionsModalRef: ViewContainerRef;\n @ViewChild(\"eventsTemplate\", { read: ViewContainerRef, static: true })\n eventsModalRef: ViewContainerRef;\n\n organization: Organization;\n collectionId: string = null;\n type: CipherType = null;\n 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(\"trashCleanupWarningSelfHosted\");\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.ciphersComponent.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.ciphersComponent.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.ciphersComponent.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.ciphersComponent.reload();\n\n if (qParams.viewEvents != null) {\n const cipher = this.ciphersComponent.ciphers.filter((c) => c.id === qParams.viewEvents);\n if (cipher.length > 0) {\n this.viewEvents(cipher[0]);\n }\n }\n\n /* 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.ciphersComponent.showAddNew = vaultFilter.status !== \"trash\";\n this.activeFilter = vaultFilter;\n\n // Hack to avoid calling cipherService.getAllFromApiForOrganization every time the vault filter changes.\n // Call CiphersComponent.applyFilter directly instead of going through CiphersComponent.reload, which\n // reloads all the ciphers unnecessarily. Will be fixed properly by EC-14.\n this.ciphersComponent.loaded = false;\n this.ciphersComponent.deleted = vaultFilter.status === \"trash\" || false;\n await this.ciphersComponent.applyFilter(this.activeFilter.buildFilter());\n this.ciphersComponent.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.ciphersComponent.searchText = searchText;\n this.ciphersComponent.search(200);\n }\n\n async editCipherAttachments(cipher: CipherView) {\n if (this.organization.maxStorageGb == null || this.organization.maxStorageGb === 0) {\n this.messagingService.send(\"upgradeOrganization\", { organizationId: cipher.organizationId });\n return;\n }\n\n let madeAttachmentChanges = false;\n\n const [modal] = await this.modalService.openViewRef(\n AttachmentsComponent,\n this.attachmentsModalRef,\n (comp) => {\n comp.organization = this.organization;\n comp.cipherId = cipher.id;\n // 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.ciphersComponent.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n async editCipherCollections(cipher: CipherView) {\n const [modal] = await this.modalService.openViewRef(\n CollectionsComponent,\n this.collectionsModalRef,\n (comp) => {\n if (this.organization.canEditAnyCollection) {\n comp.collectionIds = cipher.collectionIds;\n comp.collections = this.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.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async addCipher() {\n const component = await this.editCipher(null);\n component.organizationId = this.organization.id;\n component.type = this.type;\n if (this.organization.canEditAnyCollection) {\n component.collections = this.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.ciphersComponent.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.ciphersComponent.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.ciphersComponent.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 { VaultSharedModule } from \"../../vault/shared/vault-shared.module\";\n\nimport { CiphersComponent } from \"./ciphers.component\";\nimport { VaultFilterModule } from \"./vault-filter/vault-filter.module\";\nimport { VaultRoutingModule } from \"./vault-routing.module\";\nimport { VaultComponent } from \"./vault.component\";\n\n@NgModule({\n imports: [VaultSharedModule, VaultRoutingModule, VaultFilterModule],\n declarations: [VaultComponent, CiphersComponent],\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 { AccessSelectorModule } from \"./components/access-selector\";\nimport { OrganizationsRoutingModule } from \"./organization-routing.module\";\n\n@NgModule({\n imports: [SharedModule, AccessSelectorModule, OrganizationsRoutingModule],\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
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n

{{ \"sendProtectedPassword\" | i18n }}

\n

{{ \"sendProtectedPasswordDontKnow\" | i18n }}

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

\n {{ send.name }}\n

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

{{ send.file.fileName }}

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

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

\n
\n
\n
\n
\n

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

\n
\n
\n\n","import { 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 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 );\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","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

{{ \"options\" | i18n }}

\n \n \n \n
\n
\n \n \n
\n
\n \n \n
{{ \"maxAccessCountDesc\" | i18n }}
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n
\n \n \n \n
\n
\n
{{ \"sendPasswordDesc\" | i18n }}
\n
\n
\n
\n \n \n
{{ \"sendNotesDesc\" | i18n }}
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n \n \n \n \n
\n
\n \n
\n\n","import { DatePipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\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 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","
\n \n {{ \"loading\" | i18n }}\n
\n\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n
\n

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

\n
\n
\n \n\n","import { Component, 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 { 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\n@Component({\n selector: \"app-profile\",\n templateUrl: \"profile.component.html\",\n})\nexport class ProfileComponent implements OnInit {\n loading = true;\n profile: ProfileResponse;\n fingerprint: string;\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private logService: LogService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.profile = await this.apiService.getProfile();\n this.loading = false;\n const fingerprint = await this.cryptoService.getFingerprint(\n await this.stateService.getUserId()\n );\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join(\"-\");\n }\n }\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 { EventService } from \"@bitwarden/common/abstractions/event.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\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n totpService: TotpService,\n passwordGenerationService: PasswordGenerationService,\n messagingService: MessagingService,\n eventService: EventService,\n policyService: PolicyService,\n passwordRepromptService: PasswordRepromptService,\n organizationService: OrganizationService,\n logService: LogService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n totpService,\n passwordGenerationService,\n messagingService,\n eventService,\n policyService,\n organizationService,\n logService,\n passwordRepromptService\n );\n }\n\n async load() {\n this.title = this.i18nService.t(\"viewItem\");\n }\n\n protected async loadCipher() {\n return Promise.resolve(this.originalCipher);\n }\n}\n","
\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 { 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 { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/models/request/organization-user-reset-password-enrollment.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 ) {\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.apiService.putOrganizationUserResetPasswordEnrollment(org.id, org.userId, request);\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 this.hideSubscription = true;\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 {{ \"cannotSponsorSelf\" | i18n }}\n \n \n \n {{ \"invalidEmail\" | i18n }}\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 = null;\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 {{ \"premiumPrice\" | i18n: (premiumPrice | currency: \"$\") }}\n

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

{{ \"uploadLicenseFilePremium\" | i18n }}

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

{{ \"addons\" | i18n }}

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

{{ \"summary\" | i18n }}

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

{{ \"paymentInformation\" | i18n }}

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

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

\n
\n {{ \"paymentChargedAnnually\" | i18n }}\n \n
\n","import { Component, OnInit, 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 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.forwardOptions = [\n { name: \"SimpleLogin\", value: \"simplelogin\" },\n { name: \"AnonAddy\", value: \"anonaddy\" },\n { name: \"Firefox Relay\", value: \"firefoxrelay\" },\n { name: \"Fastmail\", value: \"fastmail\" },\n { name: \"DuckDuckGo\", value: \"duckduckgo\" },\n ];\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","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","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n/*\n An updated pipe that sanitizes HTML, highlights numbers and special characters (in different colors each)\n and handles Unicode / Emoji characters correctly.\n*/\n@Pipe({ name: \"colorPassword\" })\nexport class ColorPasswordPipe implements PipeTransform {\n transform(password: string) {\n const template = (character: string, type: string) =>\n `${character}`;\n const colorizedPassword = this.generateTemplate(password, template);\n return colorizedPassword;\n }\n\n protected generateTemplate(\n password: string,\n templateGenerator: (chararacter: string, type: string, index?: number) => string\n ) {\n // Convert to an array to handle cases that stings have special characters, ie: emoji.\n const passwordArray = Array.from(password);\n let colorizedPassword = \"\";\n for (let i = 0; i < passwordArray.length; i++) {\n let character = passwordArray[i];\n let isSpecial = false;\n // Sanitize HTML first.\n switch (character) {\n case \"&\":\n character = \"&\";\n isSpecial = true;\n break;\n case \"<\":\n character = \"<\";\n isSpecial = true;\n break;\n case \">\":\n character = \">\";\n isSpecial = true;\n break;\n case \" \":\n character = \" \";\n isSpecial = true;\n break;\n default:\n break;\n }\n let type = \"letter\";\n if (character.match(Utils.regexpEmojiPresentation)) {\n type = \"emoji\";\n } else if (isSpecial || character.match(/[^\\w ]/)) {\n type = \"special\";\n } else if (character.match(/\\d/)) {\n type = \"number\";\n }\n colorizedPassword += templateGenerator(character, type, i);\n }\n return colorizedPassword;\n }\n}\n","
\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 \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\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 );\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 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 { CiphersComponent } from \"./ciphers.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\";\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(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;\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(\"trashCleanupWarningSelfHosted\");\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.ciphersComponent.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.ciphersComponent.load(this.ciphersComponent.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.ciphersComponent.showAddNew = vaultFilter.status !== \"trash\";\n this.activeFilter = vaultFilter;\n await this.ciphersComponent.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.ciphersComponent.searchText = searchText;\n this.ciphersComponent.search(200);\n }\n\n async editCipherAttachments(cipher: CipherView) {\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n if (cipher.organizationId == null && !canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n } else if (cipher.organizationId != null) {\n const org = await this.organizationService.get(cipher.organizationId);\n if (org != null && (org.maxStorageGb == null || org.maxStorageGb === 0)) {\n this.messagingService.send(\"upgradeOrganization\", {\n organizationId: cipher.organizationId,\n });\n return;\n }\n }\n\n let madeAttachmentChanges = false;\n const [modal] = await this.modalService.openViewRef(\n AttachmentsComponent,\n this.attachmentsModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n // 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.ciphersComponent.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n async shareCipher(cipher: CipherView) {\n const [modal] = await this.modalService.openViewRef(\n ShareComponent,\n this.shareModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSharedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async editCipherCollections(cipher: CipherView) {\n const [modal] = await this.modalService.openViewRef(\n CollectionsComponent,\n this.collectionsModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedCollections.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async addFolder() {\n const [modal] = await this.modalService.openViewRef(\n FolderAddEditComponent,\n this.folderAddEditModalRef,\n (comp) => {\n comp.folderId = null;\n // 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.ciphersComponent.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.ciphersComponent.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.ciphersComponent.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 { CiphersComponent } from \"./ciphers.component\";\nimport { OrganizationBadgeModule } from \"./organization-badge/organization-badge.module\";\nimport { VaultSharedModule } from \"./shared/vault-shared.module\";\nimport { VaultRoutingModule } from \"./vault-routing.module\";\nimport { VaultComponent } from \"./vault.component\";\n\n@NgModule({\n imports: [VaultSharedModule, VaultRoutingModule, OrganizationBadgeModule],\n declarations: [VaultComponent, CiphersComponent],\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 { RegisterComponent } from \"./accounts/register.component\";\nimport { RemovePasswordComponent } from \"./accounts/remove-password.component\";\nimport { SetPasswordComponent } from \"./accounts/set-password.component\";\nimport { SsoComponent } from \"./accounts/sso.component\";\nimport { 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: RegisterComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"createAccount\" },\n },\n buildFlaggedRoute(\"showTrial\", {\n path: \"trial\",\n component: TrialInitiationComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"startTrial\" },\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 { 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","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { LayoutModule } from \"@angular/cdk/layout\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { BrowserAnimationsModule } from \"@angular/platform-browser/animations\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\n\nimport { AppComponent } from \"./app.component\";\nimport { CoreModule } from \"./core/core.module\";\nimport { OssRoutingModule } from \"./oss-routing.module\";\nimport { OssModule } from \"./oss.module\";\nimport { WildcardRoutingModule } from \"./wildcard-routing.module\";\n\n@NgModule({\n imports: [\n OssModule,\n BrowserAnimationsModule,\n FormsModule,\n CoreModule,\n InfiniteScrollModule,\n DragDropModule,\n LayoutModule,\n OssRoutingModule,\n WildcardRoutingModule, // Needs to be last to catch all non-existing routes\n ],\n declarations: [AppComponent],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n","import { enableProdMode } from \"@angular/core\";\nimport { platformBrowserDynamic } from \"@angular/platform-browser-dynamic\";\n\nimport \"bootstrap\";\nimport \"jquery\";\nimport \"popper.js\";\n\nrequire(\"./scss/styles.scss\");\nrequire(\"./scss/tailwind.css\");\n\nimport { AppModule } from \"./app/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","\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, OnInit } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, 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@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})\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","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 { 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, p2?: string, p3?: string): string {\n return this.i18nService.t(id, p1, p2, p3);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: \"search\",\n})\nexport class SearchPipe implements PipeTransform {\n transform(\n items: any[],\n searchText: string,\n prop1?: string,\n prop2?: string,\n prop3?: string\n ): any[] {\n if (items == null || items.length === 0) {\n return [];\n }\n\n if (searchText == null || searchText.length < 2) {\n return items;\n }\n\n searchText = searchText.trim().toLowerCase();\n return items.filter((i) => {\n if (\n prop1 != null &&\n i[prop1] != null &&\n i[prop1].toString().toLowerCase().indexOf(searchText) > -1\n ) {\n return true;\n }\n if (\n prop2 != null &&\n i[prop2] != null &&\n i[prop2].toString().toLowerCase().indexOf(searchText) > -1\n ) {\n return true;\n }\n if (\n prop3 != null &&\n i[prop3] != null &&\n i[prop3].toString().toLowerCase().indexOf(searchText) > -1\n ) {\n return true;\n }\n return false;\n });\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\ninterface User {\n name?: string;\n email: string;\n}\n\n@Pipe({\n name: \"userName\",\n})\nexport class UserNamePipe implements PipeTransform {\n transform(user?: User): string {\n if (user == null) {\n return null;\n }\n\n return user.name == null || user.name.trim() === \"\" ? user.email : user.name;\n }\n}\n","import { 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.filter(isNotProviderUser);\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 { 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 { ApiTokenRequest } from \"../models/request/identity-token/api-token.request\";\nimport { PasswordTokenRequest } from \"../models/request/identity-token/password-token.request\";\nimport { SsoTokenRequest } from \"../models/request/identity-token/sso-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 { OrganizationUserAcceptRequest } from \"../models/request/organization-user-accept.request\";\nimport { OrganizationUserBulkConfirmRequest } from \"../models/request/organization-user-bulk-confirm.request\";\nimport { OrganizationUserBulkRequest } from \"../models/request/organization-user-bulk.request\";\nimport { OrganizationUserConfirmRequest } from \"../models/request/organization-user-confirm.request\";\nimport { OrganizationUserInviteRequest } from \"../models/request/organization-user-invite.request\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"../models/request/organization-user-reset-password-enrollment.request\";\nimport { OrganizationUserResetPasswordRequest } from \"../models/request/organization-user-reset-password.request\";\nimport { OrganizationUserUpdateGroupsRequest } from \"../models/request/organization-user-update-groups.request\";\nimport { OrganizationUserUpdateRequest } from \"../models/request/organization-user-update.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 { 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 { OrganizationUserBulkPublicKeyResponse } from \"../models/response/organization-user-bulk-public-key.response\";\nimport { OrganizationUserBulkResponse } from \"../models/response/organization-user-bulk.response\";\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n} from \"../models/response/organization-user.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 ProviderUserUserDetailsResponse,\n ProviderUserResponse,\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 TwoFactorWebAuthnResponse,\n ChallengeResponse,\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\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 | ApiTokenRequest\n ) => Promise;\n refreshIdentityToken: () => Promise;\n\n getProfile: () => Promise;\n getUserSubscription: () => Promise;\n getTaxInfo: () => Promise;\n putProfile: (request: UpdateProfileRequest) => Promise;\n putTaxInfo: (request: TaxInfoUpdateRequest) => Promise;\n postPrelogin: (request: PreloginRequest) => Promise;\n postEmailToken: (request: EmailTokenRequest) => Promise;\n postEmail: (request: EmailRequest) => Promise;\n postPassword: (request: PasswordRequest) => Promise;\n setPassword: (request: SetPasswordRequest) => Promise;\n postSetKeyConnectorKey: (request: SetKeyConnectorKeyRequest) => Promise;\n postSecurityStamp: (request: SecretVerificationRequest) => Promise;\n 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 getOrganizationUser: (\n organizationId: string,\n id: string\n ) => Promise;\n getOrganizationUserGroups: (organizationId: string, id: string) => Promise;\n getOrganizationUsers: (\n organizationId: string\n ) => Promise>;\n getOrganizationUserResetPasswordDetails: (\n organizationId: string,\n id: string\n ) => Promise;\n postOrganizationUserInvite: (\n organizationId: string,\n request: OrganizationUserInviteRequest\n ) => Promise;\n postOrganizationUserReinvite: (organizationId: string, id: string) => Promise;\n postManyOrganizationUserReinvite: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n postOrganizationUserAccept: (\n organizationId: string,\n id: string,\n request: OrganizationUserAcceptRequest\n ) => Promise;\n postOrganizationUserConfirm: (\n organizationId: string,\n id: string,\n request: OrganizationUserConfirmRequest\n ) => Promise;\n postOrganizationUsersPublicKey: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n postOrganizationUserBulkConfirm: (\n organizationId: string,\n request: OrganizationUserBulkConfirmRequest\n ) => Promise>;\n\n putOrganizationUser: (\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateRequest\n ) => Promise;\n putOrganizationUserGroups: (\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateGroupsRequest\n ) => Promise;\n putOrganizationUserResetPasswordEnrollment: (\n organizationId: string,\n userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest\n ) => Promise;\n putOrganizationUserResetPassword: (\n organizationId: string,\n id: string,\n request: OrganizationUserResetPasswordRequest\n ) => Promise;\n deleteOrganizationUser: (organizationId: string, id: string) => Promise;\n deleteManyOrganizationUsers: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n revokeOrganizationUser: (organizationId: string, id: string) => Promise;\n revokeManyOrganizationUsers: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n restoreOrganizationUser: (organizationId: string, id: string) => Promise;\n restoreManyOrganizationUsers: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => 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","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 ApiLogInCredentials,\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 | ApiLogInCredentials\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 authingWithApiKey: () => 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","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 { 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 EventService {\n collect: (\n eventType: EventType,\n cipherId?: string,\n uploadImmediately?: boolean,\n organizationId?: string\n ) => Promise;\n uploadEvents: (userId?: string) => Promise;\n clearEvents: (userId?: string) => 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 { 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 /**\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 { 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, p2?: string, p3?: string) => 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 MessagingService {\n send: (subscriber: string, arg?: any) => void;\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 ) => 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 { BehaviorSubject, 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: BehaviorSubject<{ [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","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","export abstract class TotpService {\n getCode: (key: string) => Promise;\n getTimeInterval: (key: string) => number;\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 ValidationService {\n showError: (data: any) => string[];\n}\n","export enum AuthenticationStatus {\n LoggedOut = 0,\n Locked = 1,\n Unlocked = 2,\n}\n","export enum CipherRepromptType {\n None = 0,\n Password = 1,\n}\n","export enum CipherType {\n Login = 1,\n SecureNote = 2,\n Card = 3,\n Identity = 4,\n}\n","export enum 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 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 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 OrganizationUserStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n Revoked = -1,\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 TwoFactorProviderType {\n Authenticator = 0,\n Email = 1,\n Duo = 2,\n Yubikey = 3,\n U2f = 4,\n Remember = 5,\n OrganizationDuo = 6,\n WebAuthn = 7,\n}\n","export enum UriMatchType {\n Domain = 0,\n Host = 1,\n StartsWith = 2,\n Exact = 3,\n RegularExpression = 4,\n Never = 5,\n}\n","export enum VerificationType {\n MasterPassword = 0,\n OTP = 1,\n}\n","import { 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 /**\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 { 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 { 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\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 { 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 { 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 { 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}\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","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","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","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 { 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","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","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 { 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 { 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 accounts = new BehaviorSubject<{ [userId: string]: TAccount }>({});\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 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.accounts.next(null);\n return;\n }\n\n this.accounts.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 = \"large\" | \"default\" | \"small\";\n\nconst SizeClasses: Record = {\n large: [\"tw-h-16\", \"tw-w-16\"],\n default: [\"tw-h-12\", \"tw-w-12\"],\n small: [\"tw-h-7\", \"tw-w-7\"],\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() 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\ntype BadgeTypes = \"primary\" | \"secondary\" | \"success\" | \"danger\" | \"warning\" | \"info\";\n\nconst styles: Record = {\n primary: [\"tw-bg-primary-500\"],\n secondary: [\"tw-bg-text-muted\"],\n success: [\"tw-bg-success-500\"],\n danger: [\"tw-bg-danger-500\"],\n warning: [\"tw-bg-warning-500\"],\n info: [\"tw-bg-info-500\"],\n};\n\nconst hoverStyles: Record = {\n primary: [\"hover:tw-bg-primary-700\"],\n secondary: [\"hover:tw-bg-secondary-700\"],\n success: [\"hover:tw-bg-success-700\"],\n danger: [\"hover:tw-bg-danger-700\"],\n warning: [\"hover:tw-bg-warning-700\"],\n info: [\"hover:tw-bg-info-700\"],\n};\n\n@Directive({\n selector: \"span[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 } from \"../shared/button-like.abstraction\";\n\nexport type ButtonTypes = \"primary\" | \"secondary\" | \"danger\";\n\nconst buttonStyles: Record = {\n primary: [\n \"tw-border-primary-500\",\n \"tw-bg-primary-500\",\n \"!tw-text-contrast\",\n \"hover:tw-bg-primary-700\",\n \"hover:tw-border-primary-700\",\n \"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 ],\n secondary: [\n \"tw-bg-transparent\",\n \"tw-border-text-muted\",\n \"!tw-text-muted\",\n \"hover:tw-bg-secondary-500\",\n \"hover:tw-border-secondary-500\",\n \"hover:!tw-text-contrast\",\n \"disabled:tw-bg-transparent\",\n \"disabled:tw-border-text-muted/60\",\n \"disabled:!tw-text-muted/60\",\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 ],\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 \"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 .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: ButtonTypes = null;\n @Input() block?: boolean;\n @Input() loading = false;\n @Input() disabled = false;\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","export abstract class BitFormFieldControl {\n ariaDescribedBy: string;\n id: string;\n labelForId: string;\n required: boolean;\n hasError: boolean;\n error: [string, any];\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 { BitErrorComponent } from \"./error.component\";\nimport { BitFormFieldControl } from \"./form-field-control\";\nimport { BitHintComponent } from \"./hint.component\";\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 { 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 { 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 { BitHintComponent } from \"./hint.component\";\nimport { BitLabel } from \"./label.directive\";\nimport { BitPrefixDirective } from \"./prefix.directive\";\nimport { BitSuffixDirective } from \"./suffix.directive\";\n\n@NgModule({\n imports: [SharedModule, InputModule, MultiSelectModule],\n exports: [\n BitErrorComponent,\n BitErrorSummary,\n BitFormFieldComponent,\n BitHintComponent,\n BitLabel,\n BitPrefixDirective,\n BitSuffixDirective,\n BitInputDirective,\n MultiSelectComponent,\n ],\n declarations: [\n BitErrorComponent,\n BitErrorSummary,\n BitFormFieldComponent,\n BitHintComponent,\n BitLabel,\n BitPrefixDirective,\n BitSuffixDirective,\n ],\n})\nexport class FormFieldModule {}\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 { Directive, HostBinding, Input } from \"@angular/core\";\n\nexport const PrefixClasses = [\n \"tw-block\",\n \"tw-px-3\",\n \"tw-py-1.5\",\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 \"disabled:!tw-text-muted\",\n \"disabled:tw-border-secondary-500\",\n];\n\n@Directive({\n selector: \"[bitPrefix]\",\n})\nexport class BitPrefixDirective {\n @HostBinding(\"class\") @Input() get classList() {\n return PrefixClasses.concat([\"tw-border-r-0\", \"first:tw-rounded-l\"]);\n }\n}\n","import { Directive, HostBinding, Input } from \"@angular/core\";\n\nimport { PrefixClasses } from \"./prefix.directive\";\n\n@Directive({\n selector: \"[bitSuffix]\",\n})\nexport class BitSuffixDirective {\n @HostBinding(\"class\") @Input() get classList() {\n return PrefixClasses.concat([\"tw-border-l-0\", \"last:tw-rounded-r\"]);\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 { Directive, HostBinding, Input, Optional, Self } from \"@angular/core\";\nimport { NgControl, Validators } from \"@angular/forms\";\n\nimport { BitFormFieldControl } 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-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 get labelForId(): string {\n return this.id;\n }\n\n @HostBinding(\"attr.aria-invalid\") get ariaInvalid() {\n return this.hasError ? true : undefined;\n }\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 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 constructor(@Optional() @Self() private ngControl: NgControl) {}\n}\n","export abstract class ButtonLikeAbstraction {\n loading: boolean;\n disabled: boolean;\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","// 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) + \".\" + {\"182\":\"ef118a836aae4f655003\",\"584\":\"238f402a694e2a33f299\",\"650\":\"62b87073d6547a6b7fd4\",\"754\":\"1655b970c4e9dab5fc90\",\"768\":\"fec52db855ae6d6aca09\",\"812\":\"59ccc0f03ed365576697\",\"977\":\"30cfdbe38986b8ddb470\"}[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__(79353)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","RegisterFormModule","NotPremiumDirective","constructor","templateRef","viewContainer","stateService","ngOnInit","this","getCanAccessPremium","clear","createEmbeddedView","premiumRequired","PremiumBadgeComponent","messagingService","send","EventService","i18nService","policyService","policies$","subscribe","policies","getDefaultDateFilters","d","Date","end","getFullYear","getMonth","getDate","setDate","start","toDateTimeLocalString","formatDateFilters","filterStart","filterEnd","isNaN","getTime","Error","toISOString","getEventInfo","ev","options","EventOptions","appInfo","getAppInfo","deviceType","message","humanReadableMessage","getEventMessage","appIcon","appName","msg","humanReadableMsg","type","t","formatCipherId","getShortId","cipherId","formatCollectionId","collectionId","formatGroupId","groupId","formatOrgUserId","organizationUserId","formatPolicyId","policy","filter","p","id","policyId","p1","formatProviderUserId","providerUserId","formatProviderOrganizationId","providerOrganizationId","shortId","organizationId","cipherInfo","a","makeAnchor","setAttribute","outerHTML","providerId","document","createElement","title","innerHTML","substring","date","pad","getHours","getMinutes","num","norm","Math","floor","abs","PolicyListService","addPolicies","push","getPolicies","RouterService","router","activatedRoute","titleService","previousUrl","undefined","currentUrl","url","events","pipe","e","event","child","firstChild","titleId","snapshot","data","rawTitle","updateUrl","doNotSaveUrl","newTitle","setTitle","setPreviousUrl","getPreviousUrl","AccountSettings","vaultTimeout","Account","init","super","settings","Object","assign","StateService","storageService","secureStorageService","memoryStorageService","logService","stateMigrationService","stateFactory","useAccountCache","addAccount","account","getRememberEmail","getGlobals","reconcileOptions","defaultOnDiskLocalOptions","rememberEmail","setRememberEmail","value","globals","saveGlobals","getEncryptedCiphers","defaultInMemoryOptions","setEncryptedCiphers","getEncryptedCollections","setEncryptedCollections","getEncryptedFolders","setEncryptedFolders","getEncryptedSends","setEncryptedSends","getLastSync","setLastSync","OrganizationCreateModule","changedBusinessOwned","OrganizationInformationComponent","nameOnly","createOrganization","isProvider","acceptingSponsorship","OrganizationPermissionsGuard","organizationService","platformUtilsService","syncService","canActivate","route","state","fullSync","org","get","params","createUrlTree","isOwner","enabled","showToast","permissionsCallback","organizationPermissions","root","queryParamMap","queryParams","itemId","OrganizationRedirectGuard","customRedirect","autoRedirectCallback","redirectPath","PoliciesModule","PolicyRequest","BasePolicy","display","organization","BasePolicyComponent","setValue","policyResponse","loadData","patchValue","buildRequestData","buildRequest","policiesEnabledMap","request","Promise","resolve","DisableSendPolicy","name","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","Map","onSavedPolicy","policyType","loading","ngAfterViewInit","load","factory","resolveComponentFactory","policyComponent","policyFormRef","createComponent","instance","detectChanges","getPolicy","statusCode","Enabled","submit","formPromise","putPolicy","emit","error","edit","PoliciesComponent","modalService","policyListService","parent","first","qParams","policyIdFromEvents","orgPolicy","orgPolicies","i","length","response","forEach","op","set","modal","openViewRef","editModalRef","comp","close","OrganizationUpdateRequest","CountBasedLocalizationKey","singular","plural","getKey","count","OrganizationContentSummaryItem","localizationKeyOptions","localizationKey","OrganizationContentSummary","totalItemCount","itemCountByType","DeleteOrganizationComponent","userVerificationService","cipherService","organizationApiService","deleteOrganizationRequestType","organizationContentSummary","onSuccess","masterPassword","then","delete","organizationName","buildOrganizationContentSummary","loaded","organizationItems","getAllFromApiForOrganization","item","deletedDate","cipherType","getOrganizationItemCountByType","getOrganizationItemLocalizationKeysByType","items","viewApiKey","rotateApiKey","AccountComponent","cryptoService","selfHosted","canManageBilling","canUseApi","isSelfHost","useApi","businessName","billingEmail","identifier","hasPublicAndPrivateKeys","orgShareKey","getOrgKey","orgKeys","makeKeyPair","keys","encryptedString","save","deleteOrganization","deleteModalRef","navigate","purgeVault","purgeModalRef","apiKeyModalRef","keyType","entityId","postKey","getOrCreateApiKey","bind","scope","grantType","apiKeyTitle","apiKeyWarning","apiKeyDescription","rotateApiKeyModalRef","isRotation","SettingsComponent","destroy$","Subject","switchMap","takeUntil","ngOnDestroy","next","complete","recoveryCode","manage","TwoFactorSetupComponent","apiService","duoComp","openModal","duoModalRef","onUpdated","updateStatus","getTwoFactorProviders","getTwoFactorOrganizationProviders","filterProvider","routes","path","children","pathMatch","canManagePolicies","canAccessImportExport","canManageSso","canManageScim","loadChildren","m","OrganizationImportExportModule","OrganizationSettingsRoutingModule","OrganizationSettingsModule","cipher","copy","generatePassword","checkPassword","upgradeOrganization","removeUri","launch","loginUriMatchChanged","addUri","togglePassword","toggleCardNumber","toggleCardCode","organizationChanged","viewHistory","repromptChanged","toggleFavorite","AddEditComponent","folderService","auditService","collectionService","totpService","passwordGenerationService","eventService","passwordRepromptService","originalCipher","allowOwnershipAssignment","ownershipOptions","allowPersonal","cloneMode","canEditAnyCollection","editMode","loadCollections","collections","loadCipher","getCipherAdmin","encryptCipher","encrypt","saveCipher","putCipherAdmin","postCipherAdmin","deleteCipher","isDeleted","deleteCipherAdmin","putDeleteCipherAdmin","HasPremiumGuard","routerState","userHasPremium","BreachReportComponent","breachedAccounts","username","getEmail","toLowerCase","checkedUsername","ReportBreach","ReportExposedPasswords","ReportInactiveTwoFactor","ReportReusedPasswords","ReportUnsecuredWebsites","ReportWeakPasswords","ReportType","reports","ExposedPasswords","icon","ReusedPasswords","WeakPasswords","UnsecuredWebsites","Inactive2fa","DataBreach","ReportsSharedModule","ReportsHomeComponent","reportRequiresPremium","variant","ReportsLayoutComponent","homepage","subscription","unsubscribe","ReportsRoutingModule","ReportsModule","CipherReportComponent","requiresPaid","hasLoaded","ciphers","setCiphers","selectCipher","repromptCipher","childComponent","cipherAddEditModalRef","onSavedCipher","onDeletedCipher","onRestoredCipher","checkAccess","useTotp","c","reprompt","showPasswordPrompt","ExposedPasswordsReportComponent","exposedPasswordMap","allCiphers","getAllCiphers","exposedPasswordCiphers","promises","login","password","promise","passwordLeaked","exposedCount","all","getAllDecrypted","canManageCipher","InactiveTwoFactorReportComponent","services","cipherDocs","load2fa","size","inactive2faCiphers","docs","totp","hasUris","uris","u","uri","replace","domain","has","fetch","Request","status","responseJson","json","service","serviceData","documentation","additionalDomain","ReusedPasswordsReportComponent","ciphersWithPasswords","passwordUseMap","reusedPasswordCiphers","UnsecuredWebsitesReportComponent","unsecuredCiphers","some","indexOf","WeakPasswordsReportComponent","passwordStrengthMap","passwordStrengthCache","weakPasswordCiphers","isUserNameNotEmpty","trim","getCacheKey","hasUserName","cacheKey","userInput","atPosition","concat","substr","split","result","passwordStrength","score","scoreKey","sort","b","ReportVariant","ReportCardComponent","disabled","requiresPremium","ReportListComponent","StorageRequest","AdjustStorageComponent","storageGbPrice","add","interval","onAdjusted","onCanceled","storageAdjustment","storageGbAdjustment","paymentFailed","action","postAccountStorage","updateStorage","paymentIntentClientSecret","paymentComponent","handleStripeCardPayment","timeout","relativeTo","toString","cancel","adjustedStorageTotal","ApiKeyComponent","clientSecret","apiKey","clientId","TransactionType","BillingHistoryComponent","paymentMethodType","transactionType","invoices","billing","transactions","paymentMethodClasses","OrganizationCreateRequest","OrganizationUpgradeRequest","ProviderOrganizationCreateRequest","clientOwnerEmail","organizationCreateRequest","changedProduct","changedCountry","changedOwnedBusiness","OrganizationPlansComponent","showFree","showCancel","product","plan","onTrialBillingSuccess","productTypes","singleOrgPolicyBlock","isInTrialFlow","discount","formGroup","businessOwned","premiumAccessAddon","additionalStorage","additionalSeats","plans","getPlans","controls","addValidators","policyAppliesToActiveUser$","policyAppliesToActiveUser","selectedPlan","find","selectedPlanInterval","isAnnual","selectableProducts","validPlans","canBeUsedByBusiness","legacyYear","Free","familyPlan","basePrice","selectablePlans","additionalStoragePriceMonthly","additionalStoragePricePerGb","seatPriceMonthly","seatPrice","additionalStorageTotal","hasAdditionalStorageOption","seatTotal","hasAdditionalSeatsOption","subtotal","subTotal","hasPremiumAccessOption","premiumAccessOptionPrice","freeTrial","trialPeriodDays","taxCharges","taxComponent","taxRate","total","paymentDesc","baseSeats","hideBank","taxInfo","country","method","changeMethod","doSubmit","orgId","shareKey","makeShareKey","key","collectionCt","createSelfHosted","createCloudHosted","updateOrganization","refreshIdentityToken","subLabelText","billingSubLabelText","additionalStorageGb","planType","billingAddressCountry","billingAddressPostalCode","postalCode","upgrade","success","orgKey","collectionName","tokenResult","createPaymentToken","paymentToken","includeTaxId","taxIdNumber","taxId","billingAddressLine1","line1","billingAddressLine2","line2","billingAddressCity","city","billingAddressState","providerRequest","providerKey","getProviderKey","postProviderCreateOrganization","create","files","getElementById","fd","FormData","append","createLicense","updateKeys","price","text","VerifyBankRequest","BitPayInvoiceRequest","AddCreditComponent","showOptions","onAdded","ppLoading","payPalConfig","ppButtonFormAction","ppButtonBusinessId","creditAmount","ppButtonCustomField","subject","userId","getUserId","email","returnUrl","window","location","href","ppButtonFormRef","nativeElement","req","credit","amount","creditAmountNumber","postBitPayInvoice","bitPayUrl","launchUri","formatAmount","floatAmount","parseFloat","round","toFixed","PaymentRequest","AdjustPaymentComponent","taxInfoComponent","postAccountPayment","updatePayment","changeCountry","addCredit","closeAddCredit","verifyBank","changePayment","closePayment","submitTaxInfo","PaymentMethodComponent","firstLoaded","showAdjustPayment","showAddCredit","verifyBankForm","amount1","amount2","forOrganization","billingPromise","getBilling","orgPromise","getUserBillingPayment","paymentSourceInApp","showDialog","verifyBankPromise","taxFormPromise","isCreditBalance","balance","creditOrBalance","paymentSource","headerClass","paymentSourceClasses","bank","PaymentComponent","themingService","showMethods","hidePaypal","hideCredit","trialFlow","routing_number","account_number","account_holder_name","account_holder_type","currency","btInstance","stripe","stripeElements","stripeCardNumberElement","stripeCardExpiryElement","stripeCardCvcElement","stripeScript","src","async","onload","Stripe","elements","setStripeElement","btScript","StripeElementStyle","base","color","fontFamily","fontSize","fontSmoothing","invalid","StripeElementClasses","focus","empty","subscribeToTheme","head","appendChild","removeChild","setTimeout","Array","from","querySelectorAll","el","body","btStylesheet","querySelector","braintree","dropin","authorization","container","paymentOptionPriority","paypal","flow","buttonStyle","label","shape","tagline","createErr","console","reject","requestPaymentMethod","payload","nonce","catch","err","postSetupPayment","handleCardSetup","setupIntent","payment_method","createToken","token","successCallback","handleCardPayment","paymentIntent","style","classes","placeholder","mount","theme$","getComputedStyle","documentElement","getPropertyValue","borderColor","PurgeVaultComponent","postPurgeCiphers","TaxInfoComponent","onCountryChanged","pristine","getTaxInfo","taxRates","getTaxRates","localTaxRate","x","rate","getTaxInfoRequest","hasChanged","updateTaxInfo","putTaxInfo","hasOwnProperty","TwoFactorProviderRequest","TwoFactorBaseComponent","twoFactorProviderType","authed","auth","authResponse","hashedSecret","secret","verificationType","enable","enableFunction","disable","buildRequestModel","putTwoFactorOrganizationDisable","putTwoFactorDisable","requestClass","UpdateTwoFactorDuoRequest","TwoFactorDuoComponent","processResponse","integrationKey","ikey","secretKey","skey","host","putTwoFactorOrganizationDuo","putTwoFactorDuo","UpdateTwoFactorAuthenticatorRequest","TwoFactorAuthenticatorComponent","qrScript","putTwoFactorAuthenticator","QRious","element","encodeURIComponent","UpdateTwoFactorEmailRequest","sendEmail","TwoFactorEmailComponent","emailPromise","postTwoFactorEmailSetup","sentEmail","putTwoFactorEmail","print","TwoFactorRecoveryComponent","w","open","write","code","onafterprint","formatString","s","toUpperCase","UpdateTwoFactorWebAuthnDeleteRequest","UpdateTwoFactorWebAuthnRequest","remove","readKey","TwoFactorWebAuthnComponent","ngZone","keyIdAvailable","keysConfiguredCount","webAuthnResponse","deviceResponse","putTwoFactorWebAuthn","removePromise","deleteTwoFactorWebAuthn","challengePromise","getTwoFactorWebAuthnChallenge","challenge","readDevice","webAuthnChallenge","log","resetWebAuthn","navigator","credentials","publicKey","run","webAuthnListening","webAuthnError","listening","k","configured","migrated","UpdateTwoFactorYubioOtpRequest","TwoFactorYubiKeyComponent","nfc","key1","key2","key3","key4","key5","putTwoFactorYubiKey","disablePromise","existingKey","padRight","str","character","max","providers","showPolicyWarning","canAccessPremium","premium","twoFactorAuthPolicyAppliesToActiveUser","p2","evaluatePolicies","authenticatorModalRef","yubikeyModalRef","emailModalRef","webAuthnModalRef","recoveryModalRef","ref","TwoFactorVerifyComponent","onAuthed","masterPasswordHash","otp","apiCall","getTwoFactorRecover","getTwoFactorOrganizationDuo","getTwoFactorDuo","getTwoFactorEmail","getTwoFactorWebAuthn","getTwoFactorAuthenticator","getTwoFactorYubiKey","UpdateLicenseComponent","updatePromise","postAccountLicense","updateLicense","LooseComponentsModule","BitwardenToast","toastrService","toastPackage","opacity","BitwardenToastGlobalConfig","toastComponent","BitwardenToastModule","static","config","ngModule","provide","useValue","default","numberFormats","Visa","cardLength","blocks","Mastercard","Maestro","Discover","JCB","UnionPay","Amex","Mir","Other","CreditCardNumberPipe","transform","creditCardNumber","brand","rules","matchingRule","r","chunks","slice","join","JslibModule","forRoot","maxOpened","autoDismiss","closeButton","ButtonModule","CalloutModule","MenuModule","IconModule","TabsModule","TableModule","AvatarModule","IconButtonModule","AsyncActionsModule","SharedModule","addFieldType","linkedFieldOptions","fieldType","eventType","addFieldTypeOptions","addFieldLinkedTypeOption","ngOnChanges","changes","thisCipherType","setLinkedFieldOptions","firstChange","resetCipherLinkedFields","addField","fields","f","newField","linkedId","removeField","field","splice","toggleFieldValue","showValue","collect","trackByFunction","index","drop","previousIndex","currentIndex","linkedFieldOption","i18nKey","TrueFalseValueDirective","elementRef","renderer","trueValue","falseValue","propagateChange","_","onHostChange","target","checked","writeValue","obj","setProperty","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","useExisting","multi","AddEditCustomFieldsComponent","folderId","onCancelled","onEditAttachments","onShareCipher","onEditCollections","onGeneratePassword","onGenerateUsername","showPassword","showCardNumber","showCardCode","currentDate","canUseReprompt","typeOptions","cardBrandOptions","cardExpMonthOptions","identityTitleOptions","uriMatchOptions","autofillOnPageLoadOptions","concatMap","personalOwnershipPolicyAppliesToActiveUser","myEmail","getAll","o","writeableCollections","addEditCipherInfo","getAddEditCipherInfo","collectionIds","setAddEditCipherInfo","decrypt","card","identity","secureNote","folders$","folderViews$","previousCipherId","restore","map","getCardExpMonthDisplay","expMonth","attachments","share","editCollections","deletePromise","restorePromise","restoreCipher","generateUsername","toggleUriOptions","match","organizationUseTotp","checkPasswordPromise","matches","readOnly","createWithServer","updateWithServer","deleteWithServer","softDeleteWithServer","restoreWithServer","showRevisionDate","hasPasswordHistory","viewingPasswordHistory","viewOnly","passwordRevisionDisplayDate","cleanUp","totpUpdateCode","getTimeInterval","totpTick","totpInterval","setInterval","favorite","canLaunch","typeI18nKey","aType","copyToClipboard","confirmed","getOptions","showGetPremium","clearInterval","totpCode","getCode","half","totpCodeFormatted","intervalSeconds","mod","totpSec","totpDash","totpLow","OrganizationBadgeModule","VaultFilterSharedModule","VaultFilterService","_collapsedFilterNodes","collapsedFilterNodes$","asObservable","buildCollapsedFilterNodes","nodes","storeCollapsedFilterNodes","collapsedFilterNodes","ensureVaultFiltersAreExpanded","buildAdminCollections","collectionResponse","getCollections","collectionDomains","decryptMany","noneCollection","nestedCollections","getAllNested","fullList","nestedList","VaultFilterModule","BroadcasterService","SettingsService","VaultTimeoutService","SearchService","indexedEntityId","NotificationsService","BroadcasterSubscriptionId","AppComponent","broadcasterService","settingsService","authService","vaultTimeoutService","sanitizer","searchService","notificationsService","routerService","keyConnectorService","lastActivity","idleTimer","isIdle","locale$","locale","lang","runOutsideAngular","onmousemove","recordActivity","onmousedown","ontouchstart","onclick","onscroll","onkeypress","command","updateConnection","logOut","expired","lock","crypto","subtle","setFullWidth","modals","uploadEvents","clearEvents","clearKeys","clearIndex","clean","now","setLastActive","idleStateChanged","clearTimeout","sanitize","enableHtml","trustedHtml","timeOut","show","disconnectFromInactivity","reconnectFromActivity","getEnableFullWidth","classList","AccountApiService","AccountService","InternalAccountService","AnonymousHubService","AppIdService","ConfigApiServiceAbstraction","CryptoFunctionService","EncryptService","FileUploadService","FolderApiServiceAbstraction","FormValidationErrorsService","LoginService","SendService","SyncNotifierService","TokenService","TwoFactorService","UserVerificationApiServiceAbstraction","UsernameGenerationService","VaultTimeoutSettingsService","AccountFactory","accountConstructor","args","GlobalStateFactory","globalStateConstructor","StateFactory","globalStateFactory","accountFactory","createGlobal","createAccount","getFlags","envFlags","JSON","parse","flagEnabled","flag","flags","StateVersion","ThemeType","theme","System","stateVersion","One","environmentUrls","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","environmentService","createHubConnection","getNotificationsUrl","anonHubConnection","HubConnectionBuilder","withUrl","skipNegotiation","transport","withHubProtocol","MessagePackHubProtocol","build","on","ProcessNotification","stopHubConnection","stop","notification","authResponsePushNotifiction","DeviceRequest","appId","getDevice","getDeviceString","pushToken","TokenRequest","twoFactor","device","alterIdentityTokenHeaders","headers","setTwoFactor","setPasswordlessAccessCode","accessCode","passwordlessAuthRequest","toIdentityToken","client_id","deviceIdentifier","deviceName","authRequest","provider","twoFactorToken","twoFactorProvider","twoFactorRemember","remember","ApiTokenRequest","startsWith","grant_type","client_secret","TokenTwoFactorRequest","ApiKeyResponse","AttachmentResponse","fileName","sizeName","PasswordHistoryResponse","lastUsedDate","CipherResponse","notes","viewPassword","creationDate","passwordHistory","h","AttachmentUploadDataResponse","attachmentId","fileUploadType","cipherResponse","cipherMiniResponse","requestDeviceType","requestIpAddress","requestApproved","RegisterResponse","captchaBypassToken","BillingResponse","BillingSourceResponse","BillingTransactionResponse","BillingInvoiceResponse","hasNoHistory","cardBrand","needsVerification","pdfUrl","number","paid","createdDate","refunded","partiallyRefunded","refundedAmount","details","BillingHistoryResponse","BillingPaymentResponse","BreachAccountResponse","addedDate","breachDate","dataClasses","isActive","isVerified","logoPath","modifiedDate","pwnCount","SelectionReadOnlyResponse","hidePasswords","CollectionResponse","externalId","CollectionDetailsResponse","CollectionGroupDetailsResponse","groups","g","DeviceVerificationResponse","isDeviceVerificationSectionEnabled","unknownDeviceVerificationEnabled","GlobalDomainResponse","domains","excluded","DomainsResponse","globalEquivalentDomains","equivalentDomains","EmergencyAccessGranteeDetailsResponse","granteeId","waitTimeDays","EmergencyAccessGrantorDetailsResponse","grantorId","EmergencyAccessTakeoverResponse","keyEncrypted","kdf","kdfIterations","EmergencyAccessViewResponse","EventResponse","actingUserId","ipAddress","installationId","systemUser","GroupResponse","accessAll","GroupDetailsResponse","IdentityCaptchaResponse","siteKey","IdentityTokenResponse","accessToken","access_token","expiresIn","expires_in","refreshToken","refresh_token","tokenType","token_type","resetMasterPassword","privateKey","forcePasswordReset","apiUseKeyConnector","keyConnectorUrl","IdentityTwoFactorResponse","twoFactorProviders2","captchaToken","twoFactorProviders","prop","parseInt","KeyConnectorUserKeyResponse","ListResponse","dr","continuationToken","OrganizationConnectionResponse","configType","rawConfig","OrganizationExportResponse","OrganizationSponsorshipSyncStatusResponse","lastSyncDate","OrganizationUserBulkPublicKeyResponse","OrganizationUserBulkResponse","PermissionsApi","accessEventLogs","accessImportExport","accessReports","manageAllCollections","manageAssignedCollections","createNewCollections","editAnyCollection","deleteAnyCollection","editAssignedCollections","deleteAssignedCollections","manageCiphers","manageGroups","manageSso","managePolicies","manageUsers","manageResetPassword","manageScim","OrganizationUserResponse","permissions","resetPasswordEnrolled","OrganizationUserUserDetailsResponse","twoFactorEnabled","usesKeyConnector","OrganizationUserDetailsResponse","OrganizationUserResetPasswordDetailsReponse","resetPasswordKey","encryptedPrivateKey","ProfileOrganizationResponse","usePolicies","useGroups","useDirectory","useEvents","use2fa","useKeyConnector","useScim","useCustomPermissions","selfHost","usersGetPremium","seats","maxCollections","maxStorageGb","ssoBound","providerName","familySponsorshipFriendlyName","familySponsorshipAvailable","planProductType","familySponsorshipLastSyncDateString","familySponsorshipLastSyncDate","familySponsorshipValidUntilString","familySponsorshipValidUntil","familySponsorshipToDelete","ProfileProviderOrganizationResponse","ProfileProviderResponse","ProfileResponse","organizations","providerOrganizations","emailVerified","masterPasswordHint","premiumPersonally","premiumFromOrganization","culture","securityStamp","PaymentResponse","userProfile","PlanResponse","nameLocalizationKey","descriptionLocalizationKey","baseStorageGb","maxUsers","maxAdditionalSeats","maxAdditionalStorage","hasSelfHost","hasPolicies","hasGroups","hasDirectory","hasEvents","hasTotp","has2fa","hasApi","hasSso","hasResetPassword","upgradeSortOrder","displaySortOrder","stripePlanId","stripeSeatPlanId","stripeStoragePlanId","stripePremiumAccessPlanId","PreloginResponse","ProviderOrganizationResponse","userCount","ProviderOrganizationOrganizationDetailsResponse","ProviderUserBulkPublicKeyResponse","ProviderUserBulkResponse","ProviderUserResponse","ProviderUserUserDetailsResponse","ProviderResponse","SendFileApi","SendTextApi","hidden","SendAccessResponse","file","expirationDate","creatorIdentifier","SendFileDownloadDataResponse","SendResponse","accessId","maxAccessCount","accessCount","deletionDate","hideEmail","SendFileUploadDataResponse","sendResponse","SsoPreValidateResponse","SubscriptionResponse","storageName","storageGb","license","expiration","usingInAppPurchase","upcomingInvoice","BillingSubscriptionResponse","BillingSubscriptionUpcomingInvoiceResponse","trialEndDate","periodStartDate","periodEndDate","cancelledDate","cancelAtEndDate","cancelled","BillingSubscriptionItemResponse","quantity","sponsoredSubscriptionItem","FolderResponse","SyncResponse","folders","sends","profile","TaxInfoResponse","taxIdType","TaxRateResponse","TwoFactorAuthenticatorResponse","TwoFactorDuoResponse","TwoFactorEmailResponse","TwoFactorProviderResponse","TwoFactorRecoverResponse","TwoFactorWebAuthnResponse","KeyResponse","ChallengeResponse","attestation","authenticatorSelection","excludeCredentials","buffer","extensions","pubKeyCredParams","rp","user","TwoFactorYubiKeyResponse","UserKeyResponse","AuditService","cryptoFunctionService","hashBytes","hash","hashStart","hashEnding","nativeFetch","v","getHibpBreach","limit","throttleKey","propertyKey","descriptor","originalMethod","allThrottles","throttles","getThrottles","argsThrottleKey","queue","exec","onFinally","apply","val","KeySuffixOptions","AuthenticationType","AuthResult","captchaSiteKey","requiresCaptcha","requiresTwoFactor","LogInStrategy","tokenService","appIdService","twoFactorService","logInTwoFactor","captchaResponse","tokenRequest","startLogIn","clearSelectedProvider","postIdentityToken","processTwoFactorResponse","processCaptchaResponse","processTokenResponse","onSuccessfulLogin","buildDeviceRequest","getAppId","buildTwoFactor","userProvidedTwoFactor","storedTwoFactorToken","getTwoFactorToken","saveAccountInformation","tokenResponse","accountInformation","decodeToken","sub","hasPremiumPersonally","kdfType","tokens","setTwoFactorToken","setEncKey","setEncPrivateKey","createKeyPairForOldAccount","setProviders","postAccountKeys","HashPurpose","ApiLogInStrategy","getKeyConnectorUrl","getAndSetKey","logIn","setApiKeyClientId","setApiKeyClientSecret","PasswordTokenRequest","PasswordLogInStrategy","setKey","setKeyHash","localHashedPassword","makePreloginKey","hashPassword","LocalAuthorization","hashedPassword","PasswordlessLogInStrategy","passwordlessCredentials","authRequestId","decKey","localPasswordHash","SsoTokenRequest","codeVerifier","redirectUri","code_verifier","redirect_uri","SsoLogInStrategy","newSsoUser","convertNewSsoUserToKeyConnector","redirectUrl","PreloginRequest","sequentialize","caches","cache","getCache","argsCacheKey","EncArrayBuffer","encryptionType","dataBytes","ivBytes","macBytes","encBytes","Uint8Array","encType","minimumLength","ENC_TYPE_LENGTH","throwDecryptionError","arrayBuffer","b64","SortedCiphersCache","comparator","sortedCiphersByUrl","timeouts","isCached","addCiphers","Ciphers","resetTimer","getLastUsed","getLastLaunched","getNext","updateLastUsedIndex","lastUsedIndex","localData","lastLaunched","y","valueOf","getNextIndex","CipherBulkDeleteRequest","ids","CipherBulkMoveRequest","CipherBulkRestoreRequest","CipherWithIdRequest","CipherBulkShareRequest","CipherCollectionsRequest","CipherPartialRequest","CipherShareRequest","DomainMatchBlacklist","Set","CipherService","fileUploadService","encryptService","sortedCiphersCache","sortCiphersByLastUsed","getDecryptedCipherCache","getDecryptedCiphers","setDecryptedCipherCache","setDecryptedCiphers","indexCiphers","clearCache","clearDecryptedCiphersState","model","existingCipher","ph","passwordRevisionDate","hasFields","existingHiddenFields","hiddenFields","ef","matchedField","encryptObjProperty","encryptCipherData","encryptFields","encryptPasswordHistories","encryptAttachments","attachmentsModel","encAttachments","attachment","fieldsModel","self","encFields","reduce","encField","encryptField","fieldModel","phModels","encPhs","encPh","encryptPasswordHistory","phModel","getLocalData","reindexCiphers","hasKey","getOrgKeys","userKey","getKeyForUserEncryption","grouped","agg","decCiphers","entries","groupedCiphers","decryptItems","flat","getLocaleSortingFunction","getAllDecryptedForGrouping","groupingId","folder","getAllDecryptedForUrl","includeOtherTypes","defaultMatch","eqDomainsPromise","firstValueFrom","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","shareWithServer","attachmentPromises","shareAttachmentWithServer","encCipher","putShareCipher","shareManyWithServer","encCiphers","putShareCiphers","toCipherData","saveAttachmentWithServer","unencryptedFile","admin","reader","FileReader","readAsArrayBuffer","evt","cData","saveAttachmentRawWithServer","onerror","filename","encFileName","dataEncKey","makeEncKey","encData","encryptToBytes","fileSize","byteLength","adminRequest","uploadDataResponse","postCipherAttachment","uploadCipherAttachment","getSingleMessage","legacyServerAttachmentFileUpload","blob","Blob","Buffer","filepath","contentType","postCipherAttachmentAdminLegacy","postCipherAttachmentLegacy","saveCollectionsWithServer","putCipherCollections","clearEncryptedCiphersState","moveManyWithServer","putMoveCiphers","deleteManyWithServer","deleteManyCiphers","deleteAttachment","deleteAttachmentWithServer","deleteCipherAttachment","aLastUsed","bLastUsed","bothNotNull","sortCiphersByLastUsedThenName","aName","bName","collator","compare","localeCompare","softDelete","setDeletedDate","putDeleteCipher","softDeleteManyWithServer","putDeleteManyCiphers","clearDeletedDate","putRestoreCipher","restoreManyWithServer","putRestoreManyCiphers","restores","attachmentView","attachmentResponse","encBuf","fromResponse","decBuf","decryptFromBytes","postShareCipherAttachment","theProp","theObj","modelProp","loginUri","cardholderName","expYear","firstName","middleName","lastName","address1","address2","address3","company","phone","ssn","passportNumber","licenseNumber","lastUsed","autofillOnPageLoadDefault","getAutoFillOnPageLoadDefault","clearSortedCiphers","ServerConfigResponse","version","gitHash","server","ThirdPartyServerConfigResponse","environment","EnvironmentServerConfigResponse","vault","api","notifications","sso","ServerConfig","serverConfigData","utcDate","getAgeInMilliseconds","isValid","expiresSoon","EFFLongWordList","BaseEncryptedOrganizationKey","EncryptedOrganizationKey","ProviderEncryptedOrganizationKey","decValue","rsaDecrypt","toData","decryptToBytes","CryptoService","platformUtilService","setCryptoMasterKey","storeKey","keyHash","encKey","setDecryptedCryptoSymmetricKey","setEncryptedCryptoSymmetricKey","encPrivateKey","setDecryptedPrivateKey","setEncryptedPrivateKey","setOrgKeys","orgs","providerOrgs","encOrgKeyData","setDecryptedOrganizationKeys","setEncryptedOrganizationKeys","setProviderKeys","providerKeys","setDecryptedProviderKeys","setEncryptedProviderKeys","keySuffix","inMemoryKey","getCryptoMasterKey","Auto","symmetricKey","getKeyFromStorage","retrieveKeyFromStorage","validateKey","warning","clearSecretKeyStore","getKeyHash","compareAndUpdateKeyHash","storedKeyHash","localKeyHash","serverKeyHash","ServerAuthorization","getEncKey","getEncKeyHelper","getPublicKey","inMemoryPublicKey","getPrivateKey","rsaExtractPublicKey","setPublicKey","decryptedPrivateKey","getDecryptedPrivateKey","getEncryptedPrivateKey","getFingerprint","keyFingerprint","userFingerprint","hkdfExpand","hashPhrase","decryptedOrganizationKeys","getDecryptedOrganizationKeys","getEncryptedOrganizationKeys","encOrgKey","fromData","decOrgKey","getProviderKeys","decryptedProviderKeys","getDecryptedProviderKeys","encProviderKeys","getEncryptedProviderKeys","hasKeyInMemory","hasKeyStored","Biometric","getCryptoMasterKeyAuto","hasCryptoMasterKeyBiometric","hasEncKey","getEncryptedCryptoSymmetricKey","clearKey","clearSecretStorage","clearStoredKey","setCryptoMasterKeyAuto","setCryptoMasterKeyBiometric","clearKeyHash","clearEncKey","memoryOnly","clearKeyPair","keysToClear","clearOrgKeys","clearProviderKeys","clearPinProtectedKey","setEncryptedPinProtected","toggleKey","makeKey","salt","pbkdf2","makeKeyFromPin","pin","protectedKeyCs","pinProtectedKey","getEncryptedPinProtected","pinKey","makePinKey","randomBytes","rsaEncrypt","keyPair","rsaGenerateKeyPair","stretchKey","makeSendKey","keyMaterial","sendKey","hkdf","hashPurpose","iterations","theKey","buildEncKey","remakeEncKey","plainValue","encValue","privateKeyValue","headerPieces","encPieces","alg","encString","keyForEnc","decryptToUtf8","encBuffer","randomNumber","min","rval","range","bitsNeeded","ceil","log2","bytesNeeded","mask","pow","byteArray","shouldStoreKey","keyB64","getVaultTimeout","getBiometricUnlock","supportsSecureStorage","getCryptoMasterKeyBiometric","newKey","macKey","minimumEntropy","entropyPerWord","numWords","hashArr","phrase","hashNumber","remainder","divide","encKeyEnc","getDecryptedCryptoSymmetricKey","decEncKey","encKeyCipher","symmetricCryptoKey","EncryptedObject","EncryptServiceImplementation","logMacFailures","plainBuf","encObj","aesEncrypt","iv","mac","macLen","resolveLegacyKey","fastParams","aesDecryptFastParameters","computedMac","hmacFast","macData","compareFast","logMacFailed","aesDecryptFast","encThing","hmac","aesDecrypt","classInitializers","MultithreadEncryptServiceImplementation","clear$","info","worker","Worker","URL","restartTimeout","postMessage","stringify","fromEvent","jsonItem","className","initializerKey","defaultIfEmpty","terminate","EventRequest","EventExport","userName","userEmail","ip","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","setTime","utfBlockId","blockIdList","xml","Version","year","month","day","parts","Number","compareTo","BitwardenFileUploadService","encryptedFileName","encryptedFileData","OrganizationUserType","SetKeyConnectorKeyRequest","orgIdentifier","KeyConnectorUserKeyRequest","_email","_rememberEmail","setEmail","clearValues","SsoType","OpenIdConnectRedirectBehavior","Saml2BindingType","Saml2NameIdFormat","Saml2SigningBehavior","OrganizationApiKeyInformationResponse","OrganizationAutoEnrollStatusResponse","resetPasswordEnabled","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","Organization","isProviderUser","canAccess","Owner","isManager","Manager","Admin","isAdmin","canAccessEventLogs","canAccessReports","canCreateNewCollections","canDeleteAnyCollection","canViewAllCollections","canEditAssignedCollections","canDeleteAssignedCollections","canViewAssignedCollections","canManageGroups","canManageUsers","canManageUsersPassword","isExemptFromPolicies","hasProvider","PasswordGeneratorPolicyOptions","useUppercase","useLowercase","numberCount","specialCount","inEffect","DefaultOptions","ambiguous","minNumber","uppercase","minUppercase","lowercase","minLowercase","special","wordSeparator","ResetPasswordPolicyOptions","ProviderUserStatusType","ProviderUserType","Provider","isProviderAdmin","Confirmed","canCreateOrganizations","ProviderAdmin","indexing","immediateSearchLocales","defaultSearchableMinLength","searchableMinLength","registeredPipeline","lunr","Pipeline","registerFunction","normalizeAccentsPipelineFunction","isSearchable","query","normalizeSearchQuery","builder","Builder","pipeline","boost","extractor","subTitle","uriExtractor","fieldExtractor","attachmentExtractor","searchCiphers","results","isArray","every","getIndexForSearch","searchCiphersBasic","ciphersMap","searchResults","search","soWild","Query","wildcard","LEADING","TRAILING","q","tokenizer","term","deleted","searchSends","toLocaleLowerCase","sendsMatched","lowPriorityMatched","joined","hasAttachments","lastIndexOf","hostname","protocolIndex","queryIndex","searchableFields","metadata","includes","normalize","SendFile","buildDomainModel","decryptObj","SendText","Send","getCryptoService","cryptoKey","SendRequest","fileLength","decoded","setTokens","clientIdClientSecret","setToken","setRefreshToken","setClientId","setClientSecret","getClientId","getApiKeyClientId","getClientSecret","getApiKeyClientSecret","setAccessToken","getToken","getAccessToken","getRefreshToken","clearTwoFactorToken","clearToken","getTokenExpirationDate","exp","setUTCSeconds","tokenSecondsRemaining","offsetSeconds","msRemaining","tokenNeedsRefresh","minutes","getEmailVerified","email_verified","getName","getIssuer","iss","getIsExternal","amr","v1Keys","alwaysShowDock","autoConfirmFingerprints","autoFillOnPageLoadDefault","biometricAwaitingAcceptance","biometricFingerprintValidated","biometricText","biometricUnlock","clearClipboard","collapsedGroupings","convertAccountToKeyConnector","defaultUriMatch","disableAddLoginNotification","disableAutoBiometricsPrompt","disableAutoTotpCopy","disableBadgeCounter","disableChangedPasswordNotification","disableContextMenuItem","disableFavicon","disableGa","dontShowCardsCurrentTab","dontShowIdentitiesCurrentTab","enableAlwaysOnTop","enableAutoFillOnPageLoad","enableBiometric","enableBrowserIntegration","enableBrowserIntegrationFingerprint","enableCloseToTray","enableFullWidth","enableMinimizeToTray","enableStartToTray","enableTray","encOrgKeys","encPrivate","entityType","eventCollection","history","installedVersion","lastActive","mainWindowSize","minimizeOnCopyToClipboard","neverDomains","noAutoPromptBiometricsText","openAtLogin","passwordGenerationOptions","pinProtected","protectedPin","ssoCodeVerifier","ssoIdentifier","ssoState","stamp","usesConnector","vaultTimeoutAction","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","noAutoPromptBiometrics","ssoOrganizationIdentifier","defaultAccount","accountSettings","autoConfirmFingerPrints","decrypted","encrypted","passwordGenerationHistory","apiKeyClientSecret","cryptoMasterKey","cryptoMasterKeyAuto","cryptoMasterKeyB64","cryptoMasterKeyBiometric","cryptoSymmetricKey","legacyEtmKey","organizationKeys","apiKeyClientId","authenticationStatus","everBeenUnlocked","decodedToken","accountActivity","authenticatedUserIds","encryptedOrgKeys","htmlStorageLocation","newVersion","OrganizationData","SyncService","sendService","providerService","folderApiService","logoutCallback","syncInProgress","toJSON","forceSync","allowThrowOnError","syncStarted","getIsAuthenticated","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","sendId","syncDeleteSend","successfully","getAccountRevisionDate","getSecurityStamp","setSecurityStamp","setEmailVerified","setHasPremiumPersonally","setHasPremiumFromOrganization","setForcePasswordReset","setUsesKeyConnector","userNeedsMigration","setConvertAccountRequired","removeConvertAccountRequired","eqDomains","global","setEquivalentDomains","B32Chars","SteamChars","VerifyOTPRequest","OTP","AnonAddyForwarder","generate","anonaddy","requestInit","redirect","Authorization","website","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","subaddressType","catchallType","forwardedService","forwardedAnonAddyDomain","DecryptParameters","LockGuard","loginpage","authStatus","getAuthStatus","UnauthGuard","subscribers","messageCallback","modalRef","protectedFields","allowMultipleModals","onClosedPromise","getUsesKeyConnector","ThemeBuilder","configuredTheme","systemTheme","effectiveTheme","updateSystemTheme","updateConfiguredTheme","ThemingService","_theme","BehaviorSubject","monitorThemeChanges","getTheme","getSystemTheme","monitorConfiguredThemeChanges","monitorSystemThemeChanges","getValue","setTheme","Light","Dark","Nord","SolarizedDark","matchMedia","JslibServicesModule","useFactory","translationLocale","deps","language","useClass","makeAndGetAppId","getAnonymousAppId","existingId","guid","pushNotificationSubject","logInStrategy","strategy","clearState","saveState","callback","authingWithApiKey","authingWithSso","authingWithPassword","authingWithPasswordless","getEverBeenUnlocked","preloginResponse","postPrelogin","getPushNotifcationObs$","startSessionTimeout","clearSessionTimeout","sessionTimeout","P","injector","_folders","_folderViews","activeAccountUnlocked$","unlocked","updateObservables","getAllDecryptedFromState","values","decryptFolders","updates","cId","foldersMap","decryptFolderPromises","decryptedFolders","noneFolder","postFolder","putFolder","deleteFolder","accountService","deleteAccount","verification","verificationRequest","setDecryptedCollections","collection","decCollections","decryptedCollections","getDecryptedCollections","collectionCopy","getNested","urlsSubject","scimUrl","activeAccount$","setUrlsFromStorage","hasBaseUrl","notificationsUrl","getWebVaultUrl","webVaultUrl","getSendUrl","getIconsUrl","iconsUrl","getApiUrl","apiUrl","getIdentityUrl","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","charAt","chunk","signature","generatePassphrase","sanitizePasswordLength","positions","shuffleArray","allCharSet","lowercaseCharSet","uppercaseCharSet","numberCharSet","specialCharSet","positionChars","randomCharIndex","listLength","wordList","wordIndex","appendRandomNumberToRandomWord","getPasswordGenerationOptions","setPasswordGenerationOptions","enforcedOptions","enforcePasswordGeneratorPoliciesOnOptions","enforcedPolicyOptions","getPasswordGeneratorPolicyOptions","currentPolicy","saveOptions","getHistory","getDecryptedPasswordGenerationHistory","getEncryptedPasswordGenerationHistory","decryptHistory","setDecryptedPasswordGenerationHistory","addHistory","currentHistory","matchesPrevious","unshift","pop","newHistory","encryptHistory","setEncryptedPasswordGenerationHistory","userInputs","globalUserInputs","finalUserInputs","normalizeOptions","array","j","forGeneration","minUppercaseCalc","minLowercaseCalc","minNumberCalc","minSpecialCalc","generateCatchall","generateSubaddress","generateForwarded","generateWord","word","zeroPad","subaddressEmail","atIndex","emailBeginning","emailEnding","subaddressString","randomString","catchallDomain","startString","forwarder","forwarderOptions","forwardedSimpleLoginApiKey","forwardedAnonAddyApiToken","forwardedFirefoxApiToken","forwardedFastmailApiToken","forwardedDuckDuckGoToken","getUsernameGenerationOptions","setUsernameGenerationOptions","charSet","width","customUserAgent","isWebClient","isDesktopClient","Accept","identityToken","getClientType","qsStringify","getCredentials","isJsonResponse","TwoFactorProviders2","HCaptcha_SiteKey","doAuthRefresh","postAuthRequest","getAuthResponse","getProfile","getUserSubscription","putProfile","postEmailToken","postEmail","postPassword","setPassword","postSetKeyConnectorKey","postSecurityStamp","postPasswordHint","postRegister","postPremium","postIapCheck","postReinstatePremium","postCancelPremium","postAccountKey","postAccountVerifyEmail","postAccountVerifyEmailToken","postAccountVerifyPassword","postAccountRecoverDelete","postAccountRecoverDeleteToken","postAccountKdf","deleteSsoUser","getSsoUserIdentifier","postUserApiKey","postUserRotateApiKey","putUpdateTempPassword","postConvertToKeyConnector","getUserBillingHistory","postSendAccess","getSendFileDownloadData","getSends","postSend","postFileTypeSend","renewSendFileUploadUrl","fileId","postSendFile","postSendFileLegacy","putSend","putSendRemovePassword","deleteSend","getCipher","deleteManyCiphersAdmin","putCipherCollectionsAdmin","postImportCiphers","postImportOrganizationCiphers","putDeleteManyCiphersAdmin","putRestoreCipherAdmin","getAttachmentData","emergencyAccessId","deleteCipherAttachmentAdmin","renewAttachmentUploadUrl","postAttachmentFile","getCollectionDetails","getUserCollections","getCollectionUsers","postCollection","putCollection","putCollectionUsers","deleteCollection","deleteCollectionUser","getGroupDetails","getGroups","getGroupUsers","postGroup","putGroup","putGroupUsers","deleteGroup","deleteGroupUser","getOrganizationUser","getOrganizationUserGroups","getOrganizationUsers","getOrganizationUserResetPasswordDetails","postOrganizationUserInvite","postOrganizationUserReinvite","postManyOrganizationUserReinvite","postOrganizationUserAccept","postOrganizationUserConfirm","postOrganizationUsersPublicKey","postOrganizationUserBulkConfirm","putOrganizationUser","putOrganizationUserGroups","putOrganizationUserResetPasswordEnrollment","putOrganizationUserResetPassword","deleteOrganizationUser","deleteManyOrganizationUsers","revokeOrganizationUser","revokeManyOrganizationUsers","restoreOrganizationUser","restoreManyOrganizationUsers","postPublicImportDirectory","getSettingsDomains","putSettingsDomains","rawId","btoa","getClientExtensionResults","AttestationObject","attestationObject","clientDataJson","clientDataJSON","postTwoFactorRecover","postTwoFactorEmail","getDeviceVerificationSettings","putDeviceVerificationSettings","getKnownDevice","getEmergencyAccessTrusted","getEmergencyAccessGranted","getEmergencyAccess","getEmergencyGrantorPolicies","putEmergencyAccess","deleteEmergencyAccess","postEmergencyAccessInvite","postEmergencyAccessReinvite","postEmergencyAccessAccept","postEmergencyAccessConfirm","postEmergencyAccessInitiate","postEmergencyAccessApprove","postEmergencyAccessReject","postEmergencyAccessTakeover","postEmergencyAccessPassword","postEmergencyAccessView","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","getEventsCipher","getEventsOrganization","getEventsOrganizationUser","getEventsProvider","getEventsProviderUser","postEventsCollect","authHeader","getActiveBearerToken","getUserPublicKey","getUserKeyFromKeyConnector","handleError","postUserKeyToKeyConnector","getKeyConnectorAlive","getOrganizationExport","getApplicationVersionNumber","preValidateSso","postCreateSponsorship","sponsoredOrgId","getSponsorshipSyncStatus","deleteRevokeSponsorship","sponsoringOrganizationId","deleteRemoveSponsorship","sponsoringOrgId","postPreValidateSponsorshipToken","sponsorshipToken","postRedeemSponsorship","postResendSponsorshipOffer","doRefreshToken","doApiTokenRefresh","deviceRequest","hasResponse","alterHeaders","requestUrl","responseType","responseIsJson","tokenError","isTextResponse","Message","typeHeader","azureFileUploadService","bitwardenFileUploadService","uploadSendFile","uploadData","Direct","Azure","_settings","getSettings","setSettings","setVaultTimeoutOptions","setVaultTimeout","currentAction","getVaultTimeoutAction","setVaultTimeoutAction","isPinLockSet","getProtectedPin","isBiometricLockSet","policyAppliesToUser","setEverBeenUnlocked","setDecryptedPinProtected","setProtectedPin","vaultTimeoutSettingsService","lockedCallback","loggedOutCallback","inited","checkOnInterval","startCheck","checkVaultTimeout","isViewOpen","accounts","shouldLock","executeTimeoutAction","pinSet","getDecryptedPinProtected","getLastActive","vaultTimeoutSeconds","getExport","format","getEncryptedExport","getDecryptedExport","getPasswordProtectedExport","clearText","encKeyValidation","encText","jsonDoc","passwordProtected","encKeyValidation_DO_NOT_EDIT","getOrganizationEncryptedExport","getOrganizationDecryptedExport","getEventExport","getFileName","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","sync","isAuthenticated","payloadUserId","UserId","myUserId","random","win","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","uploadImmediately","orgIds","getEventCollection","setEventCollection","_policies","getEncryptedPolicies","decryptedPolicies","getDecryptedPolicies","diskPolicies","prototype","call","setDecryptedPolicies","masterPasswordPolicyOptions$","of","obsPolicies","filteredPolicies","policyFilter","checkPoliciesThatApplyToUser","evaluateMasterPassword","newPassword","toLocaleUpperCase","getResetPasswordPolicyOptions","resetPasswordPolicyOptions","mapPoliciesFromToken","policiesResponse","setEncryptedPolicies","isExcemptFromPolicies","policiesMap","policySet","getPoliciesByToken","getPoliciesByInvitedUser","getMasterPasswordPoliciesForInvitedUsers","setDecryptedSends","fileData","passwordHash","ArrayBuffer","encryptFileData","parseFile","decSends","getDecryptedSends","saveWithServer","sendData","legacyServerSendFileUpload","removePasswordWithServer","loggedInUsingSso","requiredByOrganization","getManagingOrganization","userIsNotUsingKeyConnector","migrateUser","keyConnectorRequest","handleKeyConnectorError","userKeyResponse","keyArr","pubKey","privKey","setPasswordRequest","setConvertAccountToKeyConnector","getConvertAccountRequired","getConvertAccountToKeyConnector","userVerificationApiService","alreadyHashed","validateInput","verifyUser","postAccountVerifyOTP","requestOTP","postAccountRequestOTP","_organizations","organizations$","getOrganizations","organizationsMap","canManageSponsorships","hasOrganizations","getFromState","getByIdentifier","setOrganizations","getProviders","getFormValidationErrors","errors","control","controlErrors","keyError","controlName","errorName","getSubscription","getLicense","getAutoEnrollStatus","updateSubscription","updateSeats","reinstate","leave","importDirectory","getApiKeyInformation","organizationApiKeyType","getKeys","getSso","updateSso","_sync","sync$","configApiService","_serverConfig","serverConfig$","timer","E","buildServerConfig","serverConfig","getServerConfig","fetchServerConfig","setServerConfig","showError","defaultErrorMessage","validationErrors","getAllMessages","MemoryStorageService","store","BroadcasterMessagingService","subscriber","arg","HtmlStorageService","defaultOptions","localStorage","getItem","sessionStorage","setItem","removeItem","ContainerService","attachToGlobal","bitwardenContainerService","getEncryptService","InitService","eventLoggingService","getBaseUrl","getLocale","ModalService","applicationRef","modalOpen","setupHandlers","onCreated","shown","closed","onClose","PasswordRepromptComponent","PasswordRepromptService","ClientType","FileDownloadBuilder","_request","blobOptions","fileType","blobData","downloadMethod","fileNameLower","endsWith","WebFileDownloadService","download","isSafari","createObjectURL","position","click","WebPlatformUtilsService","browserCache","userAgent","chrome","Web","isFirefox","isChrome","isEdge","isOpera","isVivaldi","isMacAppStore","sameWindow","rel","getApplicationVersion","supportsWebAuthn","PublicKeyCredential","supportsDuo","confirmText","cancelText","bodyIsHtml","iconClasses","bootstrapModal","removeAttribute","iconHtmlStr","heightAuto","buttonsStyling","iconHtml","html","titleText","showCancelButton","cancelButtonText","showConfirmButton","confirmButtonText","isDev","doc","clipboardData","setData","queryCommandSupported","textarea","textContent","copyEl","contains","select","execCommand","debug","warn","readFromClipboard","supportsBiometric","authenticateBiometric","CoreModule","parentModule","initService","systemLanguage","localesDirectory","getLocalesJson","_locale","ReplaySubject","supportedTranslationLocales","localeNames","defaultMessages","localeMessages","Intl","Collator","numeric","sensitivity","loadMessages","p3","translate","messagesObj","formattedLocale","locales","placeholders","placeProp","content","replaceToken","replaceContent","filePath","localesResult","migrationStateFrom1To2","EmergencyAccessAcceptRequest","BaseAcceptComponent","requiredParameters","failedShortMessage","failedMessage","errorMessage","authedHandler","unauthedHandler","AcceptEmergencyComponent","actionPromise","OrganizationUserAcceptRequest","AcceptOrganizationComponent","prepareAcceptRequest","setOrganizationInvitation","orgName","performResetPasswordAutoEnroll","encryptedKey","policyList","PasswordHintRequest","loginService","successRoute","onSuccessfulSubmit","HintComponent","pinLock","webVaultHostname","invalidPinAttempts","handlePinRequiredUnlock","handleMasterPasswordRequiredUnlock","unlockBiometric","biometricLock","doContinue","input","isStable","onStable","take","doUnlockWithPin","failed","getKdfType","getKdfIterations","setKeyAndContinue","doUnlockWithMasterPassword","passwordValid","decPin","getDisableFavicon","setDisableFavicon","getBiometricText","hideInput","vaultUrl","LockComponent","navigateByUrl","CaptchaIFrame","iframeId","errorCallback","infoCallback","parseFunction","parseMessage","connectorLink","sendMessage","iframe","contentWindow","base64Encode","String","fromCharCode","cleanup","removeEventListener","createParams","URLSearchParams","initComponent","addEventListener","validMessage","origin","parsedMessage","height","AuthRequestType","CaptchaProtectedComponent","setupCaptcha","captcha","showCaptcha","handleCaptchaRequired","PasswordLogInCredentials","SsoLogInCredentials","PasswordlessLogInCredentials","PasswordlessCreateAuthRequest","fingerprintPhrase","startPasswordlessLogin","LoginWithDeviceComponent","anonymousHubService","validationService","showResendNotification","twoFactorRoute","forcePasswordResetRoute","navigation","getCurrentNavigation","extras","confirmResponse","buildAuthRequest","reqResponse","passwordlessRequest","requestId","buildLoginCredntials","loginResponse","onSuccessfulLoginTwoFactorNavigate","onSuccessfulLoginForceResetNavigate","onSuccessfulLoginNavigate","authRequestKeyPair","fingerprint","AuthenticateAndUnlock","decMasterPasswordHash","formValidationErrorService","validatedEmail","paramEmailSet","alwaysRememberEmail","skipRememberEmail","loggedEmail","selfHostedDomain","queryParamsEmail","getRememberedEmail","validateEmail","markAllAsTouched","errorText","getErrorToastMessage","setFormValues","setRememberedEmail","launchSsoBrowser","ssoRedirectUri","passwordOptions","numbers","codeVerifierHash","codeChallenge","setSsoState","setSsoCodeVerifier","webUrl","markAsTouched","toggleValidateEmail","getLoginWithDevice","reset","shift","errorTag","res","showLoginWithDevice","goToHint","LoginComponent","showResetPasswordAutoEnrollWarning","showPasswordless","goAfterLogIn","invite","getOrganizationInvitation","resetPasswordPolicy","enforcedPasswordPolicyOptions","strengthResult","getPasswordStrengthUserInput","masterPasswordScore","policiesData","clearValidators","updateValueAndValidity","valid","DeleteRecoverRequest","RecoverDeleteComponent","TwoFactorRecoveryRequest","RecoverTwoFactorComponent","RegisterRequest","referenceData","InputsFieldMatch","matchTo","inputsMatchError","inputsDoesntMatchError","fieldMatchTo","fieldCtrl","fieldMatchToCtrl","setErrors","createdAccount","showTerms","showErrorSummary","confirmMasterPassword","hint","validateInputsDoesntMatch","acceptPolicies","acceptPoliciesValidation","validator","validateFormInputsMatch","accountCreated","registerResponse","registerAccount","buildRegisterRequest","successful","captchaRequired","getStrengthResult","passwordStrengthResult","getPasswordScoreText","required","validateRegistration","hasError","orgInvite","ReferenceEventRequest","PasswordStrengthComponent","showText","passwordScoreColor","scoreWidth","updatePasswordStrength","masterPasswordScoreColor","masterPasswordScoreText","masterPasswordStrengthTimeout","setPasswordScoreText","BitErrorSummary","errorCount","getErrorCount","errorString","form","acc","dirty","untouched","RegisterFormComponent","referenceDataValue","queryParamEmail","RegisterComponent","showCreateOrgMessage","layout","reference","cookie","continuing","leaving","convert","RemovePasswordComponent","OrganizationUserResetPasswordEnrollmentRequest","SetPasswordRequest","strongPassword","setupSubmitActions","performSubmitActions","masterPasswordRetype","syncLoading","resetPasswordAutoEnroll","onSetPasswordSuccess","userEncKey","resetRequest","onSuccessfulChangePassword","confirmField","setKdfType","setKdfIterations","SetPasswordComponent","loggingIn","changePasswordRoute","getSsoCodeVerifier","getSsoState","checkState","getOrgIdentifierFromState","returnUri","includeUserIdentifier","initiateSsoFormPromise","authorizeUrl","buildAuthorizeUrl","userIdentifier","orgIdFromState","onSuccessfulLoginChangePasswordNavigate","stateSplit","checkStateSplit","SsoComponent","storedIdentifier","getSsoOrgIdentifier","setSsoOrganizationIdentifier","VerticalStep","subLabel","applyBorder","VerticalStepContentComponent","onSelectStep","selected","selectStep","selectStepByIndex","VerticalStepperComponent","activeClass","isNextButtonHidden","steps","selectedIndex","isStepDisabled","completed","LogoForbesComponent","LogoUSNewsComponent","EnterpriseContentComponent","TeamsContentComponent","ConfirmationDetailsComponent","BillingComponent","previousStep","orgInfoForm","stepBack","DefaultContentComponent","Enterprise1ContentComponent","Enterprise2ContentComponent","Teams1ContentComponent","Teams2ContentComponent","LogoCnetComponent","CnetEnterpriseContentComponent","CnetIndividualContentComponent","CnetTeamsContentComponent","AbmEnterpriseContentComponent","AbmTeamsContentComponent","billingSuccess","stepSelectionChange","navigateToOrgVault","navigateToOrgInvite","TrialInitiationComponent","titleCasePipe","orgInfoSubLabel","orgLabel","billingSubLabel","accountCreateOnly","validOrgs","orgInfoFormGroup","referenceDataId","referenceId","setupFamilySponsorship","previouslySelectedIndex","verticalStepper","previous","WebAuthnIFrame","webAuthnNewTab","btnText","allow","webAuthnReady","providerType","selectedProviderType","webAuthnSupported","webAuthn","twoFactorEmail","loginRoute","webAuthnAllow","authing","needsLock","getDefaultProvider","cleanupWebAuthn","providerData","authWebAuthn","Host","sig_request","Signature","submit_callback","sig","Email","doToast","authRequestAccessCode","Window","onProviderSelected","onRecoverSelected","getSupportedProviders","choose","recover","TwoFactorOptionsComponent","TwoFactorComponent","anotherMethod","twoFactorOptionsModal","PasswordRequest","currentMasterPassword","newMasterPasswordHash","UpdatePasswordComponent","OrganizationUserResetPasswordRequest","UpdateTempPasswordRequest","newPasswordHash","newEncKey","UpdateTempPasswordComponent","VerifyEmailRequest","VerifyEmailTokenComponent","VerifyDeleteRecoverRequest","VerifyRecoverDeleteComponent","HomeGuard","FrontendLayoutComponent","FooterComponent","MenuItemDirective","role","tabIndex","MenuComponent","ngAfterContentInit","keyManager","menuItems","withWrap","MenuTriggerForDirective","viewContainerRef","overlay","isOpen","hasPopup","defaultMenuConfig","panelClass","hasBackdrop","backdropClass","scrollStrategy","scrollStrategies","reposition","positionStrategy","flexibleConnectedTo","withPositions","originX","originY","overlayX","overlayY","withLockedPosition","withFlexibleDimensions","withPush","toggleMenu","destroyMenu","openMenu","disposeAll","menu","overlayRef","templatePortal","attach","closedEventsSub","getClosedEvents","keyDownEventsSub","keydownEvents","onKeydown","detachments","escKey","backdrop","backdropClick","menuClosed","mergeWith","dispose","MenuDividerComponent","NavbarComponent","UserLayoutComponent","CollectionPermission","AccessItemType","findSortedIndex","sortedArray","compareFn","low","high","mid","FormSelectionList","controlFactory","allItems","selectedItems","deselectedItems","formArray","selectItems","initialValue","selectItem","deselectItems","deselectItem","deselectAll","findIndex","selectedOption","sortedInsertIndex","newControl","insert","deselectedOption","removeAt","populateItems","selectedItem","nextId","MultiSelectComponent","ngControl","removeSelectedItems","searchInputId","onItemsConfirmed","valueAccessor","loadingText","isSelected","onDropdownClosed","updatedBaseItems","baseItems","notifyOnChange","notifyOnTouched","onChange","onBlur","ariaDescribedBy","_ariaDescribedBy","searchInput","labelForId","_required","hasValidator","touched","styles","contrast","main","muted","primary","secondary","danger","sizes","small","BitIconButtonComponent","buttonType","iconClass","disabledAttr","UserTypePipe","unknownText","User","Custom","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","valueChanges","Collection","Group","Member","permissionLabelId","accessAllLabelId","canEditItemPermission","listName","labelName","AccessSelectorModule","TabListItemDirective","baseClassList","active","activeClassList","disabledClassList","textColorClassList","TabLinkComponent","_tabNavBar","routerLinkMatchOptions","matrixParams","paths","fragment","onKeyDown","tabItem","routerLinkActive","isActiveChange","updateActiveLink","TabListContainerDirective","TabHeaderComponent","TabNavBarComponent","tabLabels","withHorizontalOrientation","withHomeAndEnd","toArray","updateActiveItem","OrganizationSwitcherComponent","activeOrganization","OrganizationLayoutComponent","_destroy","organization$","mergeMap","canShowSettingsTab","canShowManageTab","canShowMembersTab","canShowGroupsTab","canShowReportsTab","canShowBillingTab","getReportTabLabel","selectAll","check","CollectionAddEditComponent","onSavedCollection","onDeletedCollection","accessGroups","groupsResponse","selectedChanged","filterSelected","EntityUsersComponent","onEditedUsers","organizationUserType","organizationUserStatusType","showSelected","selectedCount","allUsers","loadUsers","users","searchedUsers","searchText","scrollViewportStyle","entity","selections","loadMore","CollectionsComponent","canCreate","didScroll","pageSize","pagedCollectionsCount","decryptCollections","assignedCollections","resetPaging","pagedLength","pagedCollections","pagedSize","canEdit","canDelete","addEditModalRef","canSave","removeCollection","usersModalRef","entityName","isSearching","isPaging","searching","GroupRequest","GroupAddEditComponent","onSavedGroup","onDeletedGroup","access","GroupsComponent","pagedGroupsCount","pagedGroups","removeGroup","ManageComponent","OrganizationUserBulkRequest","OrganizationUserConfirmRequest","UserConfirmComponent","onConfirmedUser","dontAskAgain","setAutoConfirmFingerprints","BasePeopleComponent","searchPipe","userNamePipe","statusMap","pagedUsers","activeUsers","pagedUsersCount","allCount","invitedCount","userStatusType","Invited","acceptedCount","Accepted","confirmedCount","revokedCount","Revoked","showConfirmUsers","showBulkConfirmUsers","getUsers","checkUser","filteredUsers","selectCount","removeUserConfirmationDialog","deleteUser","removeUser","revoke","revokeWarningMessage","revokeUser","restoreUser","reinvite","reinviteUser","confirm","confirmUser","mapIndex","updateUser","publicKeyResponse","autoConfirm","getAutoConfirmFingerPrints","confirmModalRef","getCheckedUsers","OrganizationUserBulkConfirmRequest","BulkConfirmComponent","publicKeys","fingerprints","statuses","done","excludedUsers","isAccepted","getPublicKeys","entry","getCryptoKey","userIdsWithKeys","postConfirmRequest","BulkRemoveComponent","deleteUsers","removeUsersWarning","BulkRestoreRevokeComponent","isRevoking","bulkTitle","titleKey","performBulkUserAction","bulkMessage","BulkStatusComponent","loadEvents","EntityEventsComponent","showUser","orgUsersUserIdMap","orgUsersIdMap","defaultDates","clearExisting","refreshPromise","morePromise","dates","eventInfo","ResetPasswordComponent","onPasswordReset","loggedOutWarningName","passwordStrengthComponent","orgSymKey","decPrivateKey","OrganizationUserInviteRequest","emails","OrganizationUserUpdateRequest","NestedCheckboxComponent","onSavedUser","onDeletedUser","parentIndeterminate","parentChecked","checkboxes","pascalize","handleDependentPermissions","UserAddEditComponent","onRevokedUser","onRestoredUser","isRevoked","showCustom","manageAllCollectionsCheckboxes","manageAssignedCollectionsCheckboxes","customUserTypeSelected","canUseCustomPermissions","setRequestPermissions","clearPermissions","inviteUser","OrganizationUserUpdateGroupsRequest","groupIds","UserGroupsComponent","userGroups","ug","bulkConfirm","resetPassword","PeopleComponent","userType","accessEvents","canResetPassword","orgUseResetPassword","orgHasKeys","orgResetPasswordPolicyEnabled","callingUserType","combineLatest","viewEvents","allowResetPassword","orgUser","callingUserHasPermission","showEnrolledStatus","groupsModalRef","bulkRemove","bulkRemoveModalRef","bulkRevoke","bulkRevokeOrRestore","bulkRestore","bulkReinvite","showBulkStatus","bulkConfirmModalRef","eventsModalRef","resetPasswordModalRef","warningMessage","successfullMessage","bulkStatusModalRef","onShown","keyedErrors","keyedFilteredUsers","PipesModule","VaultService","calculateSearchBarLocalizationString","vaultFilter","selectedFolderId","selectedCollection","selectedOrganizationId","myVaultOnly","VaultSharedModule","VaultFilter","selectedFolder","refreshCollectionsAndFolders","resetFilter","selectedCollectionId","resetOrganization","buildFilter","cipherPassesFilter","fileDownloadService","onUploadedAttachment","onDeletedAttachment","onReuploadedAttachment","deletePromises","reuploadPromises","hasUpdatedKey","fileEl","saveCipherAttachment","cipherDomain","downloading","canAccessAttachments","reuploadCipherAttachment","foundAttachment","a2","reupload","showFixOldAttachments","AttachmentsComponent","activeCipherId","onCipherClicked","onCipherRightClicked","onAddCipher","onAddCipherOptions","searchPlaceholder","searchPending","searchTimeout","deletedFilter","applyFilter","reload","refresh","indexedCiphers","doSearch","rightClickCipher","addCipher","addCipherOptions","Search","EllipsisPipe","completeWords","ellipsis","OrganizationNameBadgeComponent","onOrganizationClicked","profileName","textColor","emitOnOrganizationClicked","GetOrgNameFromIdPipe","clone","checkCipher","showAddNew","onAttachmentsClicked","onShareClicked","onCollectionsClicked","onCloneClicked","onOrganzationBadgeClicked","pagedCiphers","userHasPremiumAccess","noItemIcon","pagedCiphersCount","refreshing","permanent","displayTotpCopyButton","getSelected","getSelectedIds","hasOldAttachments","CiphersComponent","onEventsClicked","allowSelectNone","onSavedCollections","loadCipherCollections","selectedCollectionIds","saveCollections","vaultFilterService","activeFilter","hideFolders","hideCollections","hideFavorites","hideTrash","hideOrganizations","onFilterChange","onAddFolder","onEditFolder","isLoaded","displayCollections","buildOrganizations","activePersonalOwnershipPolicy","checkForPersonalOwnershipPolicy","activeSingleOrganizationPolicy","checkForSingleOrganizationPolicy","buildNestedFolders","initCollections","buildCollections","toggleFilterNodeCollapseState","node","reloadCollectionsAndFolders","pruneInvalidatedFilterSelections","reloadOrganizations","addFolder","editFolder","pruneInvalidFolderSelection","pruneInvalidCollectionSelection","hasId","hide","onNodeCollapseStateChange","collectionsGrouping","collectionNodes","isCollapsed","toggleCollapse","CollectionFilterComponent","foldersGrouping","folderNodes","nestedFolders","FolderFilterComponent","cipherStatus","StatusFilterComponent","selectedCipherType","typesNode","cipherTypeEnum","TypeFilterComponent","organizationGrouping","displayMode","hasActiveFilter","applyOrganizationFilter","applyMyVaultFilter","clearFilter","EnrollMasterPasswordReset","toastStringRef","keyString","LinkSsoComponent","toggleResetPasswordEnrollment","unlinkSso","OrganizationOptionsComponent","allowEnrollmentChanges","OrganizationFilterComponent","displayText","searchTextChanged","onSearchTextChanged","VaultFilterComponent","BulkDeleteComponent","cipherIds","onDeleted","deleteCiphersAdmin","deleteCiphers","deleteRequest","BulkMoveComponent","onMoved","BulkRestoreComponent","onRestored","isChecked","BulkShareComponent","onShared","nonShareableCount","shareableCiphers","allCollections","filterCollections","checkedCollectionIds","bulkMove","bulkShare","BulkActionsComponent","bulkDelete","promptPassword","selectedIds","ciphersComponent","bulkDeleteModalRef","bulkRestoreModalRef","selectedCiphers","bulkShareModalRef","bulkMoveModalRef","VaultComponent","changeDetectorRef","vaultService","trashCleanupWarning","vaultFilterComponent","getCipherIdFromParams","editCipherId","queryParamsHandling","applyVaultFilter","go","filterSearchText","editCipherAttachments","madeAttachmentChanges","attachmentsModalRef","onClosed","editCipherCollections","collectionsModalRef","editCipher","cloneCipher","replaceUrl","VaultRoutingModule","VaultModule","redirectTo","OrganizationReportingModule","OrganizationBillingModule","OrganizationsRoutingModule","OrganizationModule","PlanSponsorshipType","AcceptFamilySponsorshipComponent","register","OrganizationSponsorshipRedeemRequest","FamiliesForEnterpriseSetupComponent","badToken","showNewOrganization","_selectedFamilyOrganizationId","organizationPlansComponent","onOrganizationCreateSuccess","existingFamilyOrganizations$","selectedFamilyOrganizationId","planSponsorshipType","FamiliesForEnterprise","sponsoredOrganizationId","SendAccessView","SendAccess","SendAccessRequest","toggleText","copyText","AccessComponent","sendType","passwordRequired","unavailable","sendText","maskedText","downloadData","accessRequest","keyArray","sendAccess","disableSend","filteredSends","hasSearched","onSuccessfulLoad","applyTextSearch","removePassword","onSuccessfulRemovePassword","onSuccessfulDelete","link","urlB64Key","clearSelections","selectedAll","selectType","selectedType","BrowserPath","DateField","DatePreset","datePipe","onSavedSend","onDeletedSend","copyLink","alertShown","sendLinkBaseUrl","isDateTimeLocalSupported","setDates","loadSend","hasPassword","encryptSend","encSend","uploadPromise","copySuccess","copyLinkToClipboard","typeChanged","toggleOptions","togglePasswordVisible","datesChanged","datesForm","selectedDeletionDatePreset","selectedExpirationDatePreset","defaultDeletionDateTime","defaultExpirationDateTime","fallbackDeletionDate","fallbackDeletionTime","fallbackExpirationDate","fallbackExpirationTime","deletionDatePresets","OneHour","OneDay","TwoDays","ThreeDays","SevenDays","ThirtyDays","expirationDatePresets","Never","browserPath","Firefox","Safari","Default","formattedDeletionDate","miliseconds","formattedExpirationDate","safariDeletionTimePresetOptions","safariTimePresetOptions","DeletionDate","safariExpirationTimePresetOptions","ExpriationDate","nextWeek","setInitialFormValues","emitDates","onDeletionDatePresetSelect","clearExpiration","initialDeletionDate","toTimeString","initialExpirationDate","twentyFourHour","noon","midnight","ams","pms","hour","midnightOption","twelveHour","noonOption","amOption","pmOption","validTimes","EffluxDatesComponent","editSend","addSend","SendComponent","sendAddEditModalRef","DeauthorizeSessionsComponent","DeleteAccountComponent","accountApiService","deleteForm","EmailTokenRequest","EmailRequest","ChangeEmailComponent","tokenSent","showTwoFactorEmailWarning","newEmail","UpdateProfileRequest","ProfileComponent","showChangeEmail","deauthorizeSessions","deauthModalRef","CreateOrganizationComponent","orgPlansComponent","UpdateDomainsRequest","toggleExcluded","customize","DomainRulesComponent","custom","globalDomain","excludedGlobalEquivalentDomains","d2","indexTrackBy","EmergencyAccessAttachmentsComponent","EmergencyAddEditComponent","viewAttachments","EmergencyAccessViewComponent","oldKeyBuffer","oldEncKey","cipherData","EmergencyAccessStatusType","EmergencyAccessType","EmergencyAccessConfirmRequest","EmergencyAccessInviteRequest","EmergencyAccessUpdateRequest","EmergencyAccessAddEditComponent","onSaved","emergencyAccessType","waitTimes","emergencyAccess","waitTime","EmergencyAccessConfirmComponent","onConfirmed","EmergencyAccessPasswordRequest","EmergencyAccessTakeoverComponent","onDone","takeoverResponse","approve","requestAccess","takeover","EmergencyAccessComponent","emergencyAccessStatusType","isOrganizationOwner","trustedContacts","grantedContacts","contact","doConfirmation","removeGrantee","removeGrantor","RecoveryInitiated","RecoveryApproved","takeoverModalRef","hours","CUSTOM_VALUE","exceedsMinimumTimout","customTimeInMinutes","MIN_CUSTOM_MINUTES","combineLatestWith","vaultTimeoutPolicy","applyVaultTimeoutPolicy","current","vaultTimeouts","onTouched","validate","policyError","minTimeoutError","registerOnValidatorChange","validatorChange","vaultTimeoutPolicyHours","vaultTimeoutPolicyMinutes","VaultTimeoutInputComponent","PreferencesComponent","localeOptions","themeOptions","enableFavicons","startingLocale","startingTheme","setEnableFullWidth","setLocale","vaultTimeoutActionChanged","newValue","FolderWithIdRequest","SendWithIdRequest","UpdateKeyRequest","ChangePasswordComponent","rotateEncKey","rotateEncKeyClicked","updateKey","updateEmergencyAccesses","updateAllResetPasswordKeys","allowedStatuses","filteredAccesses","updateRequest","KdfRequest","ChangeKdfComponent","kdfOptions","recommendedKdfIterations","SecurityKeysComponent","showChangeKdf","viewUserApiKey","viewUserApiKeyModalRef","rotateUserApiKey","rotateUserApiKeyModalRef","SecurityComponent","showChangePassword","SecurityRoutingModule","getHasPremiumPersonally","hasFamilySponsorshipAvailable","getHasPremiumFromOrganization","hideSubscription","notAllowedValueAsync","valueGetter","caseInsensitive","notAllowedValue","controlValue","resendEmail","SponsoringOrgRowComponent","sponsoringOrg","isSelfHosted","sponsorshipRemoved","statusMessage","statusClass","setStatus","revokeSponsorship","revokeSponsorshipPromise","doRevokeSponsorship","resendEmailPromise","isSentAwaitingSync","toDelete","validUntil","forceReload","SponsoredFamiliesComponent","sponsorshipForm","selectedSponsorshipOrgId","validators","sponsorshipEmail","asyncValidators","updateOn","availableSponsorshipOrgs$","anyOrgsAvailable$","activeSponsorshipOrgs$","anyActiveSponsorships$","sponsoredEmail","friendlyName","resetForm","sponsorshipEmailControl","BillingHistoryViewComponent","PremiumComponent","premiumPrice","finalizePremium","paymentResponse","SubscriptionComponent","hasPremium","subscriptionRoute","closeUpdateLicense","downloadLicense","adjustStorage","closeStorage","UserSubscriptionComponent","adjustStorageAdd","showAdjustStorage","showUpdateLicense","reinstatePromise","cancelPromise","licenseString","subscriptionMarkedForCancel","nextInvoice","storagePercentage","storageProgressWidth","SubscriptionRoutingModule","usernameGenerationService","comingFromAddEdit","onSelected","usernameOptions","avoidAmbiguous","usernameWebsite","passTypeOptions","usernameTypeOptions","desc","subaddressOptions","catchallOptions","forwardOptions","passwordOptionsResponse","websiteOption","generatorOptions","getGeneratorOptions","regenerateWithoutButtonPress","regenerate","setGeneratorOptions","regeneratePassword","regenerateUsername","sliderChanged","savePasswordOptions","sliderInput","normalizePasswordOptions","saveUsernameOptions","usernameGeneratingPromise","copyOptions","SelectCopyDirective","onCopy","selection","getSelection","rangeCount","getRangeAt","stringEndPos","newLinePos","ColorPasswordPipe","generateTemplate","templateGenerator","passwordArray","colorizedPassword","isSpecial","PasswordGeneratorHistoryComponent","lengthChanged","minNumberChanged","minSpecialChanged","GeneratorComponent","historyModalRef","ToolsComponent","UpdateKeyComponent","makeRequest","onSavedFolder","onDeletedFolder","FolderAddEditComponent","onSharedCipher","cipherView","ShareComponent","VerifyEmailComponent","onVerified","verifyEmail","showVerifyEmail","showBrowserOutdated","showUpdateKey","showPremiumCallout","filterComponent","isShowingCards","verified","shareCipher","shareModalRef","folderAddEditModalRef","updateKeyModalRef","favorites","flagName","ImportExportModule","OssRoutingModule","useHash","paramsInheritanceStrategy","LoginModule","VerticalStepperModule","TrialInitiationModule","OrganizationManageModule","OrganizationUserModule","OssModule","WildcardRoutingModule","AppModule","bootstrapModule","preserveWhitespaces","CalloutComponent","useAlertRole","calloutStyle","enforcedPolicyMessage","getPasswordScoreAlertDisplay","FallbackSrcDirective","onError","appFallbackSrc","cardIcons","RuPay","IconComponent","image","fallbackImage","imageEnabled","setLoginIcon","setCardIcon","hostnameUri","isWebsite","ModalRef","_onCreated","_onClose","_onClosed","_onShow","_onShown","onShow","lastResult","toPromise","UserVerificationComponent","disableRequestOTP","sentCode","processChanges","A11yTitleDirective","appA11yTitle","hasAttribute","ApiActionDirective","appApiAction","AutofocusDirective","appAutofocus","condition","autofocus","InputVerbatimDirective","appInputVerbatim","disableComplete","StopClickDirective","onClick","$event","preventDefault","StopPropDirective","stopPropagation","AuthGuard","promptBiometric","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","ModalConfig","modalList","factoryResolvers","modalCount","topModal","modalComponentRef","openInternal","hostView","replaceTopModal","registerComponentFactoryResolver","closeAll","attachToDom","createModalComponent","attachView","domElem","rootNodes","detachView","modalEl","dialogEl","zIndex","prepend","closeElement","WeakMap","AbstractThemingService","DynamicTreeNode","setCollapsedGroupings","getCollapsedGroupings","transformation","storedFolders","orgCiphers","oc","getAllFoldersNested","storedCollections","folderCopy","getFolderNested","ApiService","AuthService","CollectionService","EnvironmentService","ExportService","FileDownloadService","FolderService","InternalFolderService","I18nService","KeyConnectorService","LogService","MessagingService","OrganizationApiServiceAbstraction","canAccessSettingsTab","canAccessMembersTab","canAccessGroupsTab","canAccessReportingTab","canAccessBillingTab","canManageCollections","canAccessManageTab","canAccessOrgAdmin","canAccessVaultTab","getOrganizationById","canAccessAdmin","isNotProviderUser","OrganizationService","InternalOrganizationService","PasswordGenerationService","PlatformUtilsService","PolicyApiServiceAbstraction","PolicyService","InternalPolicyService","ProviderService","StateMigrationService","AbstractStorageService","TotpService","UserVerificationService","ValidationService","AuthenticationStatus","CipherRepromptType","CipherType","DeviceType","EncryptionType","EventType","FieldType","HtmlStorageLocation","KdfType","DEFAULT_KDF_TYPE","PBKDF2_SHA256","DEFAULT_KDF_ITERATIONS","SEND_KDF_ITERATIONS","LoginLinkedId","CardLinkedId","IdentityLinkedId","LogLevelType","OrganizationUserStatusType","PaymentMethodType","PlanType","PolicyType","ProductType","SecureNoteType","SendType","TwoFactorProviderType","UriMatchType","VerificationType","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","SecureNoteApi","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","EncString","encryptedStringOrType","initFromData","initFromEncryptedString","parseEncryptedString","decryptedValue","EnvironmentUrls","Field","Folder","GeneratedPasswordHistory","Identity","LoginUri","toLoginUriData","Login","MasterPasswordPolicyOptions","Password","Policy","SecureNote","SymmetricCryptoKey","WindowState","CardExport","FieldExport","IdentityExport","LoginUriExport","LoginExport","toView","toDomain","SecureNoteExport","CipherExport","CipherWithIdExport","CollectionExport","CollectionWithIdExport","FolderExport","FolderWithIdExport","CipherCreateRequest","AttachmentRequest","CipherRequest","lastKnownRevisionDate","attachments2","attachmentRequest","CollectionRequest","FolderRequest","KeysRequest","OrganizationKeysRequest","OrganizationTaxInfoUpdateRequest","SecretVerificationRequest","TaxInfoUpdateRequest","TwoFactorEmailRequest","BaseResponse","propertyName","exactName","otherCasePropertyName","ErrorResponse","identityResponse","errorModel","responseErrorModel","messages","lastSep","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","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","setAutoFillOnPageLoadDefault","getBiometricAwaitingAcceptance","setBiometricAwaitingAcceptance","getBiometricFingerprintValidated","setBiometricFingerprintValidated","setBiometricText","setBiometricUnlock","hasPremiumFromOrganization","getClearClipboard","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","large","AvatarComponent","border","svgCharCount","svgFontSize","svgFontWeight","svgSize","chars","upperCaseText","svg","getFirstLetters","unicodeSafeSubstring","hexColor","createSvgElement","charObj","createTextElement","svgHtml","bypassSecurityTrustResourceUrl","svgTag","backgroundColor","textTag","fontWeight","characters","hoverStyles","BadgeDirective","badgeType","hasHoverEffects","nodeName","BadgeModule","buttonStyles","ButtonComponent","block","defaultIcon","defaultI18n","calloutClass","BitFormFieldControl","BitErrorComponent","displayError","requiredLength","BitFormFieldComponent","ngAfterContentChecked","InputModule","MultiSelectModule","FormFieldModule","BitHintComponent","BitLabel","PrefixClasses","BitPrefixDirective","BitSuffixDirective","BitIconComponent","domSanitizer","innerHtml","bypassSecurityTrustHtml","Icon","isIcon","DynamicContentNotAllowedError","svgIcon","strings","BitInputDirective","hasPrefix","hasSuffix","ariaInvalid","ButtonLikeAbstraction","CellDirective","RowDirective","alignContent","alignmentClass","TableComponent","__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":""}