{"version":3,"file":"app/main.2a7b610d62b8596b6ed8.js","mappings":"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CVloC,KAAK+N,QAAUm6B,EAAiBn6B,QAChC/N,KAAKgO,QAAUk6B,EAAiBl6B,QAChChO,KAAKiO,OAASi6B,EAAiBj6B,OAC/BjO,KAAKmO,QAAU,IAAIC,KAAK85B,EAAiB/5B,SACzCnO,KAAKsO,YAAc45B,EAAiB55B,YAEX,OAAV,QAAX,EAAAtO,KAAKiO,cAAM,eAAEvG,OAAoC,OAAT,QAAX,EAAA1H,KAAKiO,cAAM,eAAEY,OAC5C7O,KAAKiO,OAAS,KAElB,CAEQk6B,uB,MACN,OAAO,IAAI/5B,MAAO0xB,WAAwB,QAAZ,EAAA9/B,KAAKmO,eAAO,eAAE2xB,UAC9C,CAEAsI,UACE,OAAOpoC,KAAKmoC,wBA3BU,KA4BxB,CAEAE,cACE,OAAOroC,KAAKmoC,wBA9BoB,KA+BlC,E,mVCrCK,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,2SC3lPK,MAAeC,GAGpBxlC,gBAAgBlC,GACd,OAAQA,EAAK4R,MACX,IAAK,eACH,OAAO,IAAI+1B,GAAyB3nC,EAAKsX,KAE3C,IAAK,WACH,OAAO,IAAIswB,GAAiC5nC,EAAKsX,IAAKtX,EAAK8d,YAE7D,QACE,OAAO,KAEb,EAGK,MAAM6pB,GACXjpC,YAAoB4Y,GAAA,KAAAA,IAAAA,CAAc,CAE5BkjB,QAAQnJ,G,0CACZ,MAAM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","sources":["webpack://@bitwarden/web-vault/webpack/runtime/chunk loaded","webpack://@bitwarden/web-vault/webpack/runtime/load script","webpack://@bitwarden/web-vault/./src/app/accounts/register-form/register-form.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/create/organization-create.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/guards/org-permissions.guard.ts","webpack://@bitwarden/web-vault/./src/app/organizations/navigation-permissions.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/badge/badge.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/./src/app/shared/locales.ts","webpack://@bitwarden/web-vault/./src/app/shared/shared.module.ts","webpack://@bitwarden/web-vault/./src/app/shared/loose-components.module.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/angular/src/services/injection-tokens.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/themeType.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/theming/theming.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/abstractEncrypt.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/account/account-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/account/account.service.abstraction.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/audit.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/auth.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/broadcaster.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/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/environment.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/messaging.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/notifications.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization/organization-api.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/policy/policy-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/provider.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/search.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/send.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/settings.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/token.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/totp.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/twoFactor.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/userVerification/userVerification-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/usernameGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/vaultTimeout/vaultTimeout.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/vaultTimeout/vaultTimeoutSettings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/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/models/data/server-config.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/environmentUrls.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/stateVersion.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/account.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/windowState.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/globalState.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/notificationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/notificationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/deviceType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/anonymousHub.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/deviceRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identityToken/tokenRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identityToken/apiTokenRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identityToken/tokenRequestTwoFactor.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/apiKeyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/attachmentResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/passwordHistoryResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/cipherResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/attachmentUploadDataResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/authRequestResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/authentication/registerResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/billingResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/billingHistoryResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/billingPaymentResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/breachAccountResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/selectionReadOnlyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/collectionResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/deviceVerificationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/globalDomainResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/domainsResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/emergencyAccessResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/eventResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/groupResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identityCaptchaResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identityTokenResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identityTwoFactorResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/keyConnectorUserKeyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/listResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationConnectionResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationExportResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationSponsorshipSyncStatusResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationUserBulkPublicKeyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationUserBulkResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/permissionsApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationUserResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profileOrganizationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profileProviderOrganizationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profileProviderResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profileResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/paymentResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/planResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/policyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/preloginResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/providerOrganizationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/providerResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/providerUserBulkPublicKeyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/providerUserBulkResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/providerUserResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/sendFileApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/sendTextApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/sendAccessResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/sendFileDownloadDataResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/sendResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/sendFileUploadDataResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/ssoPreValidateResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/subscriptionResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/folderResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/syncResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/taxInfoResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/taxRateResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorAuthenticatorResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorDuoResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorEmailResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorProviderResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorRescoverResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorWebAuthnResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorYubiKeyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/userKeyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/htmlStorageLocation.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/authenticationStatus.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/enums/twoFactorProviderType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/authResult.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/keysRequest.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/identityToken/passwordTokenRequest.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/identityToken/ssoTokenRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/ssoLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/preloginRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/sequentialize.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/encArrayBuffer.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/sortedCiphersCache.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherBulkDeleteRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherBulkMoveRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherBulkRestoreRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherWithIdRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherBulkShareRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherCollectionsRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherCreateRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherShareRequest.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/encryptedOrganizationKey.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/crypto.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/encryptedObject.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/eventData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/eventRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/eventExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/fileUploadType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/azureFileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/bitwardenFileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/folderData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationUserType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/account/setKeyConnectorKeyRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/keyConnectorUserKeyRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationUserStatusType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/organization.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/ssoEnums.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/ssoConfigApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization/organizationSsoResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationApiKeyInformationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationAutoEnrollStatusResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/keysResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationKeysResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationSubscriptionResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/generatedPasswordHistory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/passwordGeneratorPolicyOptions.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/passwordGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/policyData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/policy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/resetPasswordPolicyOptions.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/enums/sendType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/search.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/sendFileData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/sendTextData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/sendData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/sendFileView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/sendTextView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/sendView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/sendFile.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/sendText.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/sendRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/storageLocation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/providerData.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/token.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/stateMigration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/organizationData.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/services/twoFactor.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/account/verifyOTPRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/secretVerificationRequest.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/decryptParameters.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/auth.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/lock.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/unauth.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/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/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/encrypt.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.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/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/memoryStorage.service.ts","webpack://@bitwarden/web-vault/./src/app/core/broadcaster-messaging.service.ts","webpack://@bitwarden/web-vault/./src/app/core/event.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/./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/../../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/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/policyRequest.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/app.component.ts","webpack://@bitwarden/web-vault/./src/app/app.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/misc/flags.ts","webpack://@bitwarden/web-vault/./src/utils/flags.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergencyAccessAcceptRequest.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/organizationUserAcceptRequest.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/passwordHintRequest.ts","webpack://@bitwarden/web-vault/./src/app/accounts/hint.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/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/logInCredentials.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/passwordlessCreateAuthRequest.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/../../libs/components/src/callout/callout.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.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/deleteRecoverRequest.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/twoFactorRecoveryRequest.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-two-factor.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-two-factor.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/validators/inputsFieldMatch.validator.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/registerRequest.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/register.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/referenceEventRequest.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/organizationUserResetPasswordEnrollmentRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/setPasswordRequest.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/../../libs/common/src/enums/planType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/productType.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/organizations/create/organization-information.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/create/organization-information.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/../../libs/common/src/enums/paymentMethodType.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/confirmation-details.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationCreateRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationKeysRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUpgradeRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/providerOrganizationCreateRequest.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/scss/export.module.scss","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/taxInfoUpdateRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationTaxInfoUpdateRequest.ts","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/./src/app/settings/organization-plans.component.html","webpack://@bitwarden/web-vault/./src/app/settings/organization-plans.component.ts","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/common/src/models/request/twoFactorEmailRequest.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/passwordRequest.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/organizationUserResetPasswordRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateTempPasswordRequest.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/verifyEmailRequest.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/verifyDeleteRecoverRequest.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/angular/src/components/avatar.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/stop-prop.directive.ts","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/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/selectionReadOnlyRequest.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/../../libs/components/src/badge/badge.directive.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/view/eventView.ts","webpack://@bitwarden/web-vault/./src/app/common/base.events.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/events.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/events.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/groupRequest.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/organizationUserBulkRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUserConfirmRequest.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/organizationUserBulkConfirmRequest.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/organizationUserInviteRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUserUpdateRequest.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/organizationUserUpdateGroupsRequest.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/organizations/manage/policy-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/policy-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/policies.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/policies.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUpdateRequest.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/./src/app/settings/purge-vault.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/purge-vault.component.html","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/../../libs/common/src/enums/transactionType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/verifyBankRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/bitPayInvoiceRequest.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/paymentRequest.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/organizations/settings/organization-billing.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-billing.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationApiKeyType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationConnectionType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/billingSyncConfigApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/billingSyncConfigRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationConnectionRequest.ts","webpack://@bitwarden/web-vault/./src/app/settings/billing-sync-key.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/billing-sync-key.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationApiKeyRequest.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/billing-sync-api-key.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/billing-sync-api-key.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/storageRequest.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/../../libs/common/src/models/request/organizationSubscriptionUpdateRequest.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/adjust-subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/adjust-subscription.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/change-plan.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/change-plan.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/download-license.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/download-license.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/image-subscription-hidden.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/image-subscription-hidden.component.svg","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/organizations/settings/organization-subscription.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-subscription.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/../../libs/common/src/models/request/updateTwoFactorDuoRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/twoFactorProviderRequest.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-base.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-verify.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-verify.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-duo.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-duo.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/deviceVerificationRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateTwoFactorAuthenticatorRequest.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/updateTwoFactorEmailRequest.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/updateTwoFactorWebAuthnDeleteRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateTwoFactorWebAuthnRequest.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/updateTwoFactorYubioOtpRequest.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/../../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/settings/two-factor-setup.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/two-factor-setup.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/add-edit.component.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/./src/app/vault/add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/cipher-report.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/./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/organizations/tools/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/organizations/tools/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/organizations/tools/reused-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/tools/tools.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/tools.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/organizations/tools/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/organizations/tools/weak-passwords-report.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/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/./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/../../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/organizationSponsorshipRedeemRequest.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/./src/app/shared/guards/has-premium.guard.ts","webpack://@bitwarden/web-vault/./src/app/reports/models/report-variant.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/../../libs/components/src/icon/icon.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/../../libs/components/src/icon/icon.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/report-card/report-card.component.html","webpack://@bitwarden/web-vault/./src/app/reports/report-card/report-card.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/report-list/report-list.component.html","webpack://@bitwarden/web-vault/./src/app/reports/report-list/report-list.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/reports-home.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/reports-layout.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/reports-home.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/../../libs/common/src/models/view/sendAccessView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/sendAccess.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/sendAccessRequest.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/emailTokenRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emailRequest.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/updateProfileRequest.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/updateDomainsRequest.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/emergencyAccessConfirmRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergencyAccessInviteRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergencyAccessUpdateRequest.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/emergencyAccessPasswordRequest.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/folderWithIdRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/sendWithIdRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateKeyRequest.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/kdfRequest.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/payment-method.component.html","webpack://@bitwarden/web-vault/./src/app/settings/payment-method.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-billing-history.component.html","webpack://@bitwarden/web-vault/./src/app/settings/user-billing-history.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/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/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/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/validation.service.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/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/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/organization.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/platformUtils.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/policy/policy.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/state.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/sync/sync.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/userVerification/userVerification.service.abstraction.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/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/kdfType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/linkedIdType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/policyType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/secureNoteType.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/treeNode.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/serviceUtils.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/tldjs.noop.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/utils.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/cardApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/fieldApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/identityApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/loginApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/loginUriApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/secureNoteApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/attachmentData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/cardData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/cipherData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/collectionData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/fieldData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/identityData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/loginData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/loginUriData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/passwordHistoryData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/secureNoteData.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/domainBase.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/encString.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/identity.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/login.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/loginUri.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/masterPasswordPolicyOptions.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/password.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/secureNote.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/symmetricCryptoKey.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/cardExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/fieldExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/identityExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/loginUriExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/loginExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/secureNoteExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/cipherExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/cipherWithIdsExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/collectionExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/collectionWithIdExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/folderExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/folderWithIdExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/attachmentRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/collectionRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/folderRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/baseResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/errorResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/attachmentView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/cardView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/cipherView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/collectionView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/fieldView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/folderView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/identityView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/itemView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/loginUriView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/loginView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/passwordHistoryView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/secureNoteView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/logLevelType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/consoleLog.service.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/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/shared/shared.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/input/input.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/shared/i18n.pipe.ts","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 { 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","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\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\nimport { canAccessOrgAdmin } from \"../navigation-permissions\";\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 = await 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 { Organization } from \"@bitwarden/common/models/domain/organization\";\n\nexport function canAccessToolsTab(org: Organization): boolean {\n return org.canAccessImportExport || org.canAccessReports;\n}\n\nexport function canAccessSettingsTab(org: Organization): boolean {\n return org.isOwner;\n}\n\nexport function canAccessManageTab(org: Organization): boolean {\n return (\n org.canCreateNewCollections ||\n org.canEditAnyCollection ||\n org.canDeleteAnyCollection ||\n org.canEditAssignedCollections ||\n org.canDeleteAssignedCollections ||\n org.canAccessEventLogs ||\n org.canManageGroups ||\n org.canManageUsers ||\n org.canManagePolicies ||\n org.canManageSso ||\n org.canManageScim\n );\n}\n\nexport function canAccessOrgAdmin(org: Organization): boolean {\n return canAccessToolsTab(org) || canAccessSettingsTab(org) || canAccessManageTab(org);\n}\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { CommonModule } from \"@angular/common\";\nimport { Component, ModuleWithProviders, NgModule } from \"@angular/core\";\nimport {\n DefaultNoComponentGlobalConfig,\n GlobalConfig,\n Toast as BaseToast,\n ToastPackage,\n ToastrService,\n TOAST_CONFIG,\n} from \"ngx-toastr\";\n\n@Component({\n selector: \"[toast-component2]\",\n template: `\n \n ×\n \n
\n \n
\n
\n
\n {{ title }} [{{ duplicatesCount + 1 }}]\n
\n
\n \n {{ message }}\n \n \n
\n
\n
\n `,\n animations: [\n trigger(\"flyInOut\", [\n state(\"inactive\", style({ opacity: 0 })),\n state(\"active\", style({ opacity: 1 })),\n state(\"removed\", style({ opacity: 0 })),\n transition(\"inactive => active\", animate(\"{{ easeTime }}ms {{ easing }}\")),\n transition(\"active => removed\", animate(\"{{ easeTime }}ms {{ easing }}\")),\n ]),\n ],\n preserveWhitespaces: false,\n})\nexport class BitwardenToast extends BaseToast {\n constructor(protected toastrService: ToastrService, public toastPackage: ToastPackage) {\n super(toastrService, toastPackage);\n }\n}\n\nexport const BitwardenToastGlobalConfig: GlobalConfig = {\n ...DefaultNoComponentGlobalConfig,\n toastComponent: BitwardenToast,\n};\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitwardenToast],\n exports: [BitwardenToast],\n})\nexport class BitwardenToastModule {\n static forRoot(config: Partial = {}): ModuleWithProviders {\n return {\n ngModule: BitwardenToastModule,\n providers: [\n {\n provide: TOAST_CONFIG,\n useValue: {\n default: BitwardenToastGlobalConfig,\n config: config,\n },\n },\n ],\n };\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\ninterface CardRuleEntry {\n cardLength: number;\n blocks: number[];\n}\n\n// See https://baymard.com/checkout-usability/credit-card-patterns for\n// all possible credit card spacing patterns. For now, we just handle\n// the below.\nconst numberFormats: Record = {\n Visa: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n Mastercard: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n Maestro: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 13, blocks: [4, 4, 5] },\n { cardLength: 15, blocks: [4, 6, 5] },\n { cardLength: 19, blocks: [4, 4, 4, 4, 3] },\n ],\n Discover: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n \"Diners Club\": [{ cardLength: 14, blocks: [4, 6, 4] }],\n JCB: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n UnionPay: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 19, blocks: [6, 13] },\n ],\n Amex: [{ cardLength: 15, blocks: [4, 6, 5] }],\n Mir: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 17, blocks: [5, 4, 4, 4] },\n { cardLength: 18, blocks: [6, 4, 4, 4] },\n { cardLength: 19, blocks: [7, 4, 4, 4] },\n ],\n Other: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n};\n\n@Pipe({ name: \"creditCardNumber\" })\nexport class CreditCardNumberPipe implements PipeTransform {\n transform(creditCardNumber: string, brand: string): string {\n let rules = numberFormats[brand];\n\n if (rules == null) {\n rules = numberFormats[\"Other\"];\n }\n\n const cardLength = creditCardNumber.length;\n\n let matchingRule = rules.find((r) => r.cardLength == cardLength);\n if (matchingRule == null) {\n matchingRule = rules[0];\n }\n\n const blocks = matchingRule.blocks;\n\n const chunks: string[] = [];\n let total = 0;\n\n blocks.forEach((c) => {\n chunks.push(creditCardNumber.slice(total, total + c));\n total += c;\n });\n\n // Append the remaining part\n if (cardLength > total) {\n chunks.push(creditCardNumber.slice(total));\n }\n\n return chunks.join(\" \");\n }\n}\n","import { CommonModule, DatePipe } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\n\nimport { AvatarComponent } from \"./components/avatar.component\";\nimport { CalloutComponent } from \"./components/callout.component\";\nimport { ExportScopeCalloutComponent } from \"./components/export-scope-callout.component\";\nimport { IconComponent } from \"./components/icon.component\";\nimport { BitwardenToastModule } from \"./components/toastr.component\";\nimport { A11yInvalidDirective } from \"./directives/a11y-invalid.directive\";\nimport { A11yTitleDirective } from \"./directives/a11y-title.directive\";\nimport { ApiActionDirective } from \"./directives/api-action.directive\";\nimport { AutofocusDirective } from \"./directives/autofocus.directive\";\nimport { BoxRowDirective } from \"./directives/box-row.directive\";\nimport { FallbackSrcDirective } from \"./directives/fallback-src.directive\";\nimport { InputStripSpacesDirective } from \"./directives/input-strip-spaces.directive\";\nimport { InputVerbatimDirective } from \"./directives/input-verbatim.directive\";\nimport { NotPremiumDirective } from \"./directives/not-premium.directive\";\nimport { SelectCopyDirective } from \"./directives/select-copy.directive\";\nimport { StopClickDirective } from \"./directives/stop-click.directive\";\nimport { StopPropDirective } from \"./directives/stop-prop.directive\";\nimport { TrueFalseValueDirective } from \"./directives/true-false-value.directive\";\nimport { ColorPasswordCountPipe } from \"./pipes/color-password-count.pipe\";\nimport { ColorPasswordPipe } from \"./pipes/color-password.pipe\";\nimport { 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 AvatarComponent,\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 UserNamePipe,\n PasswordStrengthComponent,\n ],\n exports: [\n A11yInvalidDirective,\n A11yTitleDirective,\n ApiActionDirective,\n AutofocusDirective,\n AvatarComponent,\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 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 { BadgeDirective } from \"./badge.directive\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [BadgeDirective],\n declarations: [BadgeDirective],\n})\nexport class BadgeModule {}\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 { 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 { DatePipe, CommonModule } 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 BadgeModule,\n ButtonModule,\n CalloutModule,\n FormFieldModule,\n MenuModule,\n IconModule,\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 ],\n exports: [\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 ],\n providers: [DatePipe],\n bootstrap: [],\n})\nexport class SharedModule {}\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 { PoliciesComponent as OrgPoliciesComponent } from \"../organizations/manage/policies.component\";\nimport { PolicyEditComponent as OrgPolicyEditComponent } from \"../organizations/manage/policy-edit.component\";\nimport { ResetPasswordComponent as OrgResetPasswordComponent } from \"../organizations/manage/reset-password.component\";\nimport { UserAddEditComponent as OrgUserAddEditComponent } from \"../organizations/manage/user-add-edit.component\";\nimport { UserConfirmComponent as OrgUserConfirmComponent } from \"../organizations/manage/user-confirm.component\";\nimport { UserGroupsComponent as OrgUserGroupsComponent } from \"../organizations/manage/user-groups.component\";\nimport { DisableSendPolicyComponent } from \"../organizations/policies/disable-send.component\";\nimport { MasterPasswordPolicyComponent } from \"../organizations/policies/master-password.component\";\nimport { PasswordGeneratorPolicyComponent } from \"../organizations/policies/password-generator.component\";\nimport { PersonalOwnershipPolicyComponent } from \"../organizations/policies/personal-ownership.component\";\nimport { RequireSsoPolicyComponent } from \"../organizations/policies/require-sso.component\";\nimport { ResetPasswordPolicyComponent } from \"../organizations/policies/reset-password.component\";\nimport { SendOptionsPolicyComponent } from \"../organizations/policies/send-options.component\";\nimport { SingleOrgPolicyComponent } from \"../organizations/policies/single-org.component\";\nimport { TwoFactorAuthenticationPolicyComponent } from \"../organizations/policies/two-factor-authentication.component\";\nimport { AccountComponent as OrgAccountComponent } from \"../organizations/settings/account.component\";\nimport { AdjustSubscription } from \"../organizations/settings/adjust-subscription.component\";\nimport { BillingSyncApiKeyComponent } from \"../organizations/settings/billing-sync-api-key.component\";\nimport { ChangePlanComponent } from \"../organizations/settings/change-plan.component\";\nimport { DeleteOrganizationComponent } from \"../organizations/settings/delete-organization.component\";\nimport { DownloadLicenseComponent } from \"../organizations/settings/download-license.component\";\nimport { ImageSubscriptionHiddenComponent as OrgSubscriptionHiddenComponent } from \"../organizations/settings/image-subscription-hidden.component\";\nimport { OrganizationBillingComponent } from \"../organizations/settings/organization-billing.component\";\nimport { OrganizationSubscriptionComponent } from \"../organizations/settings/organization-subscription.component\";\nimport { SettingsComponent as OrgSettingComponent } from \"../organizations/settings/settings.component\";\nimport { TwoFactorSetupComponent as OrgTwoFactorSetupComponent } from \"../organizations/settings/two-factor-setup.component\";\nimport { 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 { 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 { UserBillingHistoryComponent } from \"../settings/user-billing-history.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 AdjustSubscription,\n ApiKeyComponent,\n AttachmentsComponent,\n BillingSyncApiKeyComponent,\n BillingSyncKeyComponent,\n BulkActionsComponent,\n BulkDeleteComponent,\n BulkMoveComponent,\n BulkRestoreComponent,\n BulkShareComponent,\n ChangeEmailComponent,\n ChangeKdfComponent,\n ChangePasswordComponent,\n ChangePlanComponent,\n CollectionsComponent,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DeleteOrganizationComponent,\n DisableSendPolicyComponent,\n DomainRulesComponent,\n DownloadLicenseComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n FamiliesForEnterpriseSetupComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n LockComponent,\n MasterPasswordPolicyComponent,\n NavbarComponent,\n NestedCheckboxComponent,\n OrganizationSwitcherComponent,\n OrgAccountComponent,\n OrgAddEditComponent,\n OrganizationBillingComponent,\n OrganizationLayoutComponent,\n OrganizationPlansComponent,\n OrganizationSubscriptionComponent,\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 OrgPoliciesComponent,\n OrgPolicyEditComponent,\n OrgResetPasswordComponent,\n OrgReusedPasswordsReportComponent,\n OrgSettingComponent,\n OrgToolsComponent,\n OrgTwoFactorSetupComponent,\n OrgSubscriptionHiddenComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserAddEditComponent,\n OrgUserConfirmComponent,\n OrgUserGroupsComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordGeneratorPolicyComponent,\n PasswordRepromptComponent,\n UserVerificationPromptComponent,\n PaymentComponent,\n PaymentMethodComponent,\n PersonalOwnershipPolicyComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n PremiumComponent,\n ProfileComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RegisterComponent,\n RemovePasswordComponent,\n RequireSsoPolicyComponent,\n ResetPasswordPolicyComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SendAddEditComponent,\n SendComponent,\n SendEffluxDatesComponent,\n SendOptionsPolicyComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SingleOrgPolicyComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n SubscriptionComponent,\n TaxInfoComponent,\n ToolsComponent,\n TwoFactorAuthenticationPolicyComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n UserBillingHistoryComponent,\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 AdjustSubscription,\n ApiKeyComponent,\n AttachmentsComponent,\n BulkActionsComponent,\n BulkDeleteComponent,\n BulkMoveComponent,\n BulkRestoreComponent,\n BulkShareComponent,\n ChangeEmailComponent,\n ChangeKdfComponent,\n ChangePasswordComponent,\n ChangePlanComponent,\n CollectionsComponent,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DeleteOrganizationComponent,\n DisableSendPolicyComponent,\n DomainRulesComponent,\n DownloadLicenseComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n FamiliesForEnterpriseSetupComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n LockComponent,\n MasterPasswordPolicyComponent,\n NavbarComponent,\n NestedCheckboxComponent,\n OrganizationSwitcherComponent,\n OrgAccountComponent,\n OrgAddEditComponent,\n OrganizationBillingComponent,\n OrganizationLayoutComponent,\n OrganizationPlansComponent,\n OrganizationSubscriptionComponent,\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 OrgPoliciesComponent,\n OrgPolicyEditComponent,\n OrgResetPasswordComponent,\n OrgReusedPasswordsReportComponent,\n OrgSettingComponent,\n OrgToolsComponent,\n OrgTwoFactorSetupComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserAddEditComponent,\n OrgUserConfirmComponent,\n OrgUserGroupsComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordGeneratorPolicyComponent,\n PasswordRepromptComponent,\n PaymentComponent,\n PaymentMethodComponent,\n PersonalOwnershipPolicyComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n PremiumComponent,\n ProfileComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RegisterComponent,\n RemovePasswordComponent,\n RequireSsoPolicyComponent,\n ResetPasswordPolicyComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SendAddEditComponent,\n SendComponent,\n SendEffluxDatesComponent,\n SendOptionsPolicyComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SingleOrgPolicyComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n SubscriptionComponent,\n TaxInfoComponent,\n ToolsComponent,\n TwoFactorAuthenticationPolicyComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n UserBillingHistoryComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n UserVerificationComponent,\n VaultTimeoutInputComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n ],\n})\nexport class LooseComponentsModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { 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.service\";\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/collectionData\";\nimport { Collection } from \"@bitwarden/common/models/domain/collection\";\nimport { CollectionDetailsResponse } from \"@bitwarden/common/models/response/collectionResponse\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collectionView\";\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","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","export enum ThemeType {\n System = \"system\",\n Light = \"light\",\n Dark = \"dark\",\n Nord = \"nord\",\n SolarizedDark = \"solarizedDark\",\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 { 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 { EncString } from \"@bitwarden/common/models/domain/encString\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\n\nimport { IEncrypted } from \"../interfaces/IEncrypted\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\n\nexport abstract class AbstractEncryptService {\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}\n","import { SecretVerificationRequest } from \"@bitwarden/common/models/request/secretVerificationRequest\";\n\nexport abstract class AccountApiService {\n abstract deleteAccount(request: SecretVerificationRequest): Promise;\n}\n","import { Verification } from \"../../types/verification\";\n\nexport abstract class AccountService {\n abstract delete(verification: Verification): Promise;\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 { BreachAccountResponse } from \"../models/response/breachAccountResponse\";\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/authResult\";\nimport {\n ApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../models/domain/logInCredentials\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { TokenRequestTwoFactor } from \"../models/request/identityToken/tokenRequestTwoFactor\";\nimport { AuthRequestPushNotification } from \"../models/response/notificationResponse\";\n\nexport abstract class AuthService {\n masterPasswordHash: string;\n email: string;\n logIn: (\n credentials:\n | ApiLogInCredentials\n | PasswordLogInCredentials\n | SsoLogInCredentials\n | PasswordlessLogInCredentials\n ) => Promise;\n logInTwoFactor: (\n twoFactor: TokenRequestTwoFactor,\n captchaResponse: string\n ) => Promise;\n logOut: (callback: () => void) => void;\n makePreloginKey: (masterPassword: string, email: string) => Promise;\n authingWithApiKey: () => boolean;\n authingWithSso: () => boolean;\n authingWithPassword: () => boolean;\n getAuthStatus: (userId?: string) => Promise;\n authResponsePushNotifiction: (notification: AuthRequestPushNotification) => Promise;\n\n getPushNotifcationObs$: () => Observable;\n}\n","export interface MessageBase {\n command: string;\n}\n\nexport abstract class BroadcasterService {\n send: (message: MessageBase, id?: string) => void;\n subscribe: (id: string, messageCallback: (message: MessageBase) => void) => void;\n unsubscribe: (id: string) => void;\n}\n","import { ServerConfigResponse } from \"@bitwarden/common/models/response/server-config-response\";\n\nexport abstract class ConfigApiServiceAbstraction {\n get: () => Promise;\n}\n","import { DecryptParameters } from \"../models/domain/decryptParameters\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\n\nexport abstract class CryptoFunctionService {\n pbkdf2: (\n password: string | ArrayBuffer,\n salt: string | ArrayBuffer,\n algorithm: \"sha256\" | \"sha512\",\n iterations: number\n ) => Promise;\n hkdf: (\n ikm: ArrayBuffer,\n salt: string | ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hkdfExpand: (\n prk: ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hash: (\n value: string | ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"\n ) => Promise;\n hmac: (\n value: ArrayBuffer,\n key: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compare: (a: ArrayBuffer, b: ArrayBuffer) => Promise;\n hmacFast: (\n value: ArrayBuffer | string,\n key: ArrayBuffer | string,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compareFast: (a: ArrayBuffer | string, b: ArrayBuffer | string) => Promise;\n aesEncrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n aesDecryptFastParameters: (\n data: string,\n iv: string,\n mac: string,\n key: SymmetricCryptoKey\n ) => DecryptParameters;\n aesDecryptFast: (parameters: DecryptParameters) => Promise;\n aesDecrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n rsaEncrypt: (\n data: ArrayBuffer,\n publicKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaDecrypt: (\n data: ArrayBuffer,\n privateKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaExtractPublicKey: (privateKey: ArrayBuffer) => Promise;\n rsaGenerateKeyPair: (length: 1024 | 2048 | 4096) => Promise<[ArrayBuffer, ArrayBuffer]>;\n randomBytes: (length: number) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nexport type Urls = {\n base?: string;\n webVault?: string;\n api?: string;\n identity?: string;\n icons?: string;\n notifications?: string;\n events?: string;\n keyConnector?: string;\n 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 { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachmentUploadDataResponse\";\nimport { SendFileUploadDataResponse } from \"../models/response/sendFileUploadDataResponse\";\n\nexport abstract class FileUploadService {\n uploadSendFile: (\n uploadData: SendFileUploadDataResponse,\n fileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) => Promise;\n uploadCipherAttachment: (\n admin: boolean,\n uploadData: AttachmentUploadDataResponse,\n fileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) => Promise;\n}\n","import { Folder } from \"@bitwarden/common/models/domain/folder\";\nimport { FolderResponse } from \"@bitwarden/common/models/response/folderResponse\";\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 MessagingService {\n send: (subscriber: string, arg?: any) => void;\n}\n","export abstract class NotificationsService {\n init: () => Promise;\n updateConnection: (sync?: boolean) => Promise;\n reconnectFromActivity: () => Promise;\n disconnectFromInactivity: () => Promise;\n}\n","import { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\nimport { ImportDirectoryRequest } from \"../../models/request/importDirectoryRequest\";\nimport { OrganizationSsoRequest } from \"../../models/request/organization/organizationSsoRequest\";\nimport { OrganizationApiKeyRequest } from \"../../models/request/organizationApiKeyRequest\";\nimport { OrganizationCreateRequest } from \"../../models/request/organizationCreateRequest\";\nimport { OrganizationKeysRequest } from \"../../models/request/organizationKeysRequest\";\nimport { OrganizationSubscriptionUpdateRequest } from \"../../models/request/organizationSubscriptionUpdateRequest\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../../models/request/organizationTaxInfoUpdateRequest\";\nimport { OrganizationUpdateRequest } from \"../../models/request/organizationUpdateRequest\";\nimport { OrganizationUpgradeRequest } from \"../../models/request/organizationUpgradeRequest\";\nimport { PaymentRequest } from \"../../models/request/paymentRequest\";\nimport { SeatRequest } from \"../../models/request/seatRequest\";\nimport { SecretVerificationRequest } from \"../../models/request/secretVerificationRequest\";\nimport { StorageRequest } from \"../../models/request/storageRequest\";\nimport { VerifyBankRequest } from \"../../models/request/verifyBankRequest\";\nimport { ApiKeyResponse } from \"../../models/response/apiKeyResponse\";\nimport { BillingResponse } from \"../../models/response/billingResponse\";\nimport { ListResponse } from \"../../models/response/listResponse\";\nimport { OrganizationSsoResponse } from \"../../models/response/organization/organizationSsoResponse\";\nimport { OrganizationApiKeyInformationResponse } from \"../../models/response/organizationApiKeyInformationResponse\";\nimport { OrganizationAutoEnrollStatusResponse } from \"../../models/response/organizationAutoEnrollStatusResponse\";\nimport { OrganizationKeysResponse } from \"../../models/response/organizationKeysResponse\";\nimport { OrganizationResponse } from \"../../models/response/organizationResponse\";\nimport { OrganizationSubscriptionResponse } from \"../../models/response/organizationSubscriptionResponse\";\nimport { PaymentResponse } from \"../../models/response/paymentResponse\";\nimport { TaxInfoResponse } from \"../../models/response/taxInfoResponse\";\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 * as zxcvbn from \"zxcvbn\";\n\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { PasswordGeneratorPolicyOptions } from \"../models/domain/passwordGeneratorPolicyOptions\";\n\nexport abstract class PasswordGenerationService {\n generatePassword: (options: any) => Promise;\n generatePassphrase: (options: any) => Promise;\n getOptions: () => Promise<[any, PasswordGeneratorPolicyOptions]>;\n enforcePasswordGeneratorPoliciesOnOptions: (\n options: any\n ) => Promise<[any, PasswordGeneratorPolicyOptions]>;\n getPasswordGeneratorPolicyOptions: () => Promise;\n saveOptions: (options: any) => Promise;\n getHistory: () => Promise;\n addHistory: (password: string) => Promise;\n clear: (userId?: string) => Promise;\n passwordStrength: (password: string, userInputs?: string[]) => zxcvbn.ZXCVBNResult;\n normalizeOptions: (options: any, enforcedPolicyOptions: PasswordGeneratorPolicyOptions) => void;\n}\n","export abstract class PasswordRepromptService {\n protectedFields: () => string[];\n showPasswordPrompt: () => Promise;\n enabled: () => Promise;\n}\n","import { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/masterPasswordPolicyOptions\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { PolicyRequest } from \"@bitwarden/common/models/request/policyRequest\";\nimport { ListResponse } from \"@bitwarden/common/models/response/listResponse\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policyResponse\";\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 getPolicyForOrganization: (policyType: PolicyType, organizationId: string) => Promise;\n getMasterPasswordPoliciesForInvitedUsers: (orgId: string) => Promise;\n putPolicy: (organizationId: string, type: PolicyType, request: PolicyRequest) => Promise;\n}\n","import { ProviderData } from \"../models/data/providerData\";\nimport { Provider } from \"../models/domain/provider\";\n\nexport abstract class ProviderService {\n get: (id: string) => Promise;\n getAll: () => Promise;\n save: (providers: { [id: string]: ProviderData }) => Promise;\n}\n","import { CipherView } from \"../models/view/cipherView\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport abstract class SearchService {\n indexedEntityId?: string = null;\n clearIndex: () => void;\n isSearchable: (query: string) => boolean;\n indexCiphers: (indexedEntityGuid?: string, ciphersToIndex?: CipherView[]) => Promise;\n searchCiphers: (\n query: string,\n filter?: ((cipher: CipherView) => boolean) | ((cipher: CipherView) => boolean)[],\n ciphers?: CipherView[]\n ) => Promise;\n searchCiphersBasic: (ciphers: CipherView[], query: string, deleted?: boolean) => CipherView[];\n searchSends: (sends: SendView[], query: string) => SendView[];\n}\n","import { SendData } from \"../models/data/sendData\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { Send } from \"../models/domain/send\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport abstract class SendService {\n clearCache: () => Promise;\n encrypt: (\n model: SendView,\n file: File | ArrayBuffer,\n password: string,\n key?: SymmetricCryptoKey\n ) => Promise<[Send, EncArrayBuffer]>;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n saveWithServer: (sendData: [Send, EncArrayBuffer]) => Promise;\n upsert: (send: SendData | SendData[]) => Promise;\n replace: (sends: { [id: string]: SendData }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string) => Promise;\n removePasswordWithServer: (id: string) => Promise;\n}\n","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 StateMigrationService {\n needsMigration: () => Promise;\n migrate: () => Promise;\n}\n","import { MemoryStorageOptions, StorageOptions } from \"../models/domain/storageOptions\";\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 { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\n\nexport abstract class TokenService {\n setTokens: (\n accessToken: string,\n refreshToken: string,\n clientIdClientSecret: [string, string]\n ) => Promise;\n setToken: (token: string) => Promise;\n getToken: () => Promise;\n setRefreshToken: (refreshToken: string) => Promise;\n getRefreshToken: () => Promise;\n setClientId: (clientId: string) => Promise;\n getClientId: () => Promise;\n setClientSecret: (clientSecret: string) => Promise;\n getClientSecret: () => Promise;\n setTwoFactorToken: (tokenResponse: IdentityTokenResponse) => Promise;\n getTwoFactorToken: () => Promise;\n clearTwoFactorToken: () => Promise;\n clearToken: (userId?: string) => Promise;\n decodeToken: (token?: string) => any;\n getTokenExpirationDate: () => Promise;\n tokenSecondsRemaining: (offsetSeconds?: number) => Promise;\n tokenNeedsRefresh: (minutes?: number) => Promise;\n getUserId: () => Promise;\n getEmail: () => Promise;\n getEmailVerified: () => Promise;\n getName: () => Promise;\n getIssuer: () => Promise;\n getIsExternal: () => Promise;\n}\n","export abstract class TotpService {\n getCode: (key: string) => Promise;\n getTimeInterval: (key: string) => number;\n}\n","import { TwoFactorProviderType } from \"../enums/twoFactorProviderType\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identityTwoFactorResponse\";\n\nexport interface TwoFactorProviderDetails {\n type: TwoFactorProviderType;\n name: string;\n description: string;\n priority: number;\n sort: number;\n premium: boolean;\n}\n\nexport abstract class TwoFactorService {\n init: () => void;\n getSupportedProviders: (win: Window) => TwoFactorProviderDetails[];\n getDefaultProvider: (webAuthnSupported: boolean) => TwoFactorProviderType;\n setSelectedProvider: (type: TwoFactorProviderType) => void;\n clearSelectedProvider: () => void;\n\n setProviders: (response: IdentityTwoFactorResponse) => void;\n clearProviders: () => void;\n getProviders: () => Map;\n}\n","import { VerifyOTPRequest } from \"@bitwarden/common/models/request/account/verifyOTPRequest\";\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 VaultTimeoutService {\n checkVaultTimeout: () => Promise;\n lock: (userId?: string) => Promise;\n logOut: (userId?: string) => Promise;\n}\n","export abstract class VaultTimeoutSettingsService {\n setVaultTimeoutOptions: (vaultTimeout: number, vaultTimeoutAction: string) => Promise;\n getVaultTimeout: (userId?: string) => Promise;\n isPinLockSet: () => Promise<[boolean, boolean]>;\n isBiometricLockSet: () => Promise;\n clear: (userId?: string) => Promise;\n}\n","import { Account } from \"../models/domain/account\";\n\nexport class AccountFactory {\n private accountConstructor: new (init: Partial) => T;\n\n constructor(accountConstructor: new (init: Partial) => T) {\n this.accountConstructor = accountConstructor;\n }\n\n create(args: Partial) {\n return new this.accountConstructor(args);\n }\n}\n","import { GlobalState } from \"../models/domain/globalState\";\n\nexport class GlobalStateFactory {\n private globalStateConstructor: new (init: Partial) => T;\n\n constructor(globalStateConstructor: new (init: Partial) => T) {\n this.globalStateConstructor = globalStateConstructor;\n }\n\n create(args?: Partial) {\n return new this.globalStateConstructor(args);\n }\n}\n","import { Account } from \"../models/domain/account\";\nimport { GlobalState } from \"../models/domain/globalState\";\n\nimport { AccountFactory } from \"./accountFactory\";\nimport { GlobalStateFactory } from \"./globalStateFactory\";\n\nexport class StateFactory<\n TGlobal extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n private globalStateFactory: GlobalStateFactory;\n private accountFactory: AccountFactory;\n\n constructor(\n globalStateConstructor: new (init: Partial) => TGlobal,\n accountConstructor: new (init: Partial) => TAccount\n ) {\n this.globalStateFactory = new GlobalStateFactory(globalStateConstructor);\n this.accountFactory = new AccountFactory(accountConstructor);\n }\n\n createGlobal(args: Partial): TGlobal {\n return this.globalStateFactory.create(args);\n }\n\n createAccount(args: Partial): TAccount {\n return this.accountFactory.create(args);\n }\n}\n","import { 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\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","export enum StateVersion {\n One = 1, // Original flat key/value pair store\n Two = 2, // Move to a typed State object\n Three = 3, // Fix migration of users' premium status\n Four = 4, // Fix 'Never Lock' option by removing stale data\n Five = 5, // Migrate to new storage of encrypted organization keys\n Six = 6, // Delete account.keys.legacyEtmKey property\n Latest = Six,\n}\n","import { Except, Jsonify } from \"type-fest\";\n\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { DeepJsonify } from \"@bitwarden/common/types/deep-jsonify\";\n\nimport { AuthenticationStatus } from \"../../enums/authenticationStatus\";\nimport { KdfType } from \"../../enums/kdfType\";\nimport { UriMatchType } from \"../../enums/uriMatchType\";\nimport { CipherData } from \"../data/cipherData\";\nimport { CollectionData } from \"../data/collectionData\";\nimport { EncryptedOrganizationKeyData } from \"../data/encryptedOrganizationKeyData\";\nimport { EventData } from \"../data/eventData\";\nimport { FolderData } from \"../data/folderData\";\nimport { OrganizationData } from \"../data/organizationData\";\nimport { PolicyData } from \"../data/policyData\";\nimport { ProviderData } from \"../data/providerData\";\nimport { SendData } from \"../data/sendData\";\nimport { ServerConfigData } from \"../data/server-config.data\";\nimport { CipherView } from \"../view/cipherView\";\nimport { CollectionView } from \"../view/collectionView\";\nimport { SendView } from \"../view/sendView\";\n\nimport { EncString } from \"./encString\";\nimport { EnvironmentUrls } from \"./environmentUrls\";\nimport { GeneratedPasswordHistory } from \"./generatedPasswordHistory\";\nimport { Policy } from \"./policy\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class EncryptionPair {\n encrypted?: TEncrypted;\n decrypted?: TDecrypted;\n\n 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: Jsonify, 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 Object.assign(this as Except, {\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 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 enableGravitars?: boolean;\n environmentUrls: EnvironmentUrls = new EnvironmentUrls();\n equivalentDomains?: any;\n minimizeOnCopyToClipboard?: boolean;\n neverDomains?: { [id: string]: any };\n passwordGenerationOptions?: any;\n usernameGenerationOptions?: any;\n generatorOptions?: any;\n pinProtected?: EncryptionPair = new EncryptionPair();\n protectedPin?: string;\n settings?: 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?: { [id: string]: any };\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","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 { StateVersion } from \"../../enums/stateVersion\";\nimport { ThemeType } from \"../../enums/themeType\";\n\nimport { EnvironmentUrls } from \"./environmentUrls\";\nimport { WindowState } from \"./windowState\";\n\nexport class GlobalState {\n enableAlwaysOnTop?: boolean;\n installedVersion?: string;\n locale?: string;\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 \"./baseResponse\";\n\nexport class NotificationResponse extends BaseResponse {\n contextId: string;\n type: NotificationType;\n payload: any;\n\n constructor(response: any) {\n super(response);\n this.contextId = this.getResponseProperty(\"ContextId\");\n this.type = this.getResponseProperty(\"Type\");\n\n const payload = this.getResponseProperty(\"Payload\");\n switch (this.type) {\n case NotificationType.SyncCipherCreate:\n case NotificationType.SyncCipherDelete:\n case NotificationType.SyncCipherUpdate:\n case NotificationType.SyncLoginDelete:\n this.payload = new SyncCipherNotification(payload);\n break;\n case NotificationType.SyncFolderCreate:\n case NotificationType.SyncFolderDelete:\n case NotificationType.SyncFolderUpdate:\n this.payload = new SyncFolderNotification(payload);\n break;\n case NotificationType.SyncVault:\n case NotificationType.SyncCiphers:\n case NotificationType.SyncOrgKeys:\n case NotificationType.SyncSettings:\n case NotificationType.LogOut:\n this.payload = new UserNotification(payload);\n break;\n case NotificationType.SyncSendCreate:\n case NotificationType.SyncSendUpdate:\n case NotificationType.SyncSendDelete:\n this.payload = new SyncSendNotification(payload);\n break;\n 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","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","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/notificationResponse\";\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 \"../deviceRequest\";\n\nimport { TokenRequestTwoFactor } from \"./tokenRequestTwoFactor\";\n\nexport abstract class TokenRequest {\n protected device?: DeviceRequest;\n protected passwordlessAuthRequest: string;\n\n constructor(protected twoFactor: TokenRequestTwoFactor, device?: DeviceRequest) {\n this.device = device != null ? device : null;\n }\n\n // eslint-disable-next-line\n alterIdentityTokenHeaders(headers: Headers) {\n // Implemented in subclass if required\n }\n\n setTwoFactor(twoFactor: TokenRequestTwoFactor) {\n this.twoFactor = twoFactor;\n }\n\n 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 \"../deviceRequest\";\n\nimport { TokenRequest } from \"./tokenRequest\";\nimport { TokenRequestTwoFactor } from \"./tokenRequestTwoFactor\";\n\nexport class ApiTokenRequest extends TokenRequest {\n constructor(\n public clientId: string,\n public clientSecret: string,\n protected twoFactor: TokenRequestTwoFactor,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken() {\n const obj = super.toIdentityToken(this.clientId);\n\n obj.scope = this.clientId.startsWith(\"organization\") ? \"api.organization\" : \"api\";\n obj.grant_type = \"client_credentials\";\n obj.client_secret = this.clientSecret;\n\n return obj;\n }\n}\n","import { TwoFactorProviderType } from \"../../../enums/twoFactorProviderType\";\n\nexport class TokenRequestTwoFactor {\n constructor(\n public provider: TwoFactorProviderType = null,\n public token: string = null,\n public remember: boolean = false\n ) {}\n}\n","import { BaseResponse } from \"./baseResponse\";\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 \"./baseResponse\";\n\nexport class AttachmentResponse extends BaseResponse {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.url = this.getResponseProperty(\"Url\");\n this.fileName = this.getResponseProperty(\"FileName\");\n this.key = this.getResponseProperty(\"Key\");\n this.size = this.getResponseProperty(\"Size\");\n this.sizeName = this.getResponseProperty(\"SizeName\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class PasswordHistoryResponse extends BaseResponse {\n password: string;\n lastUsedDate: string;\n\n constructor(response: any) {\n super(response);\n this.password = this.getResponseProperty(\"Password\");\n this.lastUsedDate = this.getResponseProperty(\"LastUsedDate\");\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CardApi } from \"../api/cardApi\";\nimport { FieldApi } from \"../api/fieldApi\";\nimport { IdentityApi } from \"../api/identityApi\";\nimport { LoginApi } from \"../api/loginApi\";\nimport { SecureNoteApi } from \"../api/secureNoteApi\";\n\nimport { AttachmentResponse } from \"./attachmentResponse\";\nimport { BaseResponse } from \"./baseResponse\";\nimport { PasswordHistoryResponse } from \"./passwordHistoryResponse\";\n\nexport class CipherResponse extends BaseResponse {\n id: string;\n organizationId: string;\n folderId: string;\n type: number;\n name: string;\n notes: string;\n fields: FieldApi[];\n login: LoginApi;\n card: CardApi;\n identity: IdentityApi;\n secureNote: SecureNoteApi;\n favorite: boolean;\n edit: boolean;\n viewPassword: boolean;\n organizationUseTotp: boolean;\n revisionDate: string;\n attachments: AttachmentResponse[];\n passwordHistory: PasswordHistoryResponse[];\n collectionIds: string[];\n deletedDate: string;\n reprompt: CipherRepromptType;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.folderId = this.getResponseProperty(\"FolderId\") || null;\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.notes = this.getResponseProperty(\"Notes\");\n this.favorite = this.getResponseProperty(\"Favorite\") || false;\n this.edit = !!this.getResponseProperty(\"Edit\");\n if (this.getResponseProperty(\"ViewPassword\") == null) {\n this.viewPassword = true;\n } else {\n this.viewPassword = this.getResponseProperty(\"ViewPassword\");\n }\n this.organizationUseTotp = this.getResponseProperty(\"OrganizationUseTotp\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n this.collectionIds = this.getResponseProperty(\"CollectionIds\");\n this.deletedDate = this.getResponseProperty(\"DeletedDate\");\n\n const login = this.getResponseProperty(\"Login\");\n if (login != null) {\n this.login = new LoginApi(login);\n }\n\n const card = this.getResponseProperty(\"Card\");\n if (card != null) {\n this.card = new CardApi(card);\n }\n\n const identity = this.getResponseProperty(\"Identity\");\n if (identity != null) {\n this.identity = new IdentityApi(identity);\n }\n\n const secureNote = this.getResponseProperty(\"SecureNote\");\n if (secureNote != null) {\n this.secureNote = new SecureNoteApi(secureNote);\n }\n\n const fields = this.getResponseProperty(\"Fields\");\n if (fields != null) {\n this.fields = fields.map((f: any) => new FieldApi(f));\n }\n\n const attachments = this.getResponseProperty(\"Attachments\");\n if (attachments != null) {\n this.attachments = attachments.map((a: any) => new AttachmentResponse(a));\n }\n\n const passwordHistory = this.getResponseProperty(\"PasswordHistory\");\n if (passwordHistory != null) {\n this.passwordHistory = passwordHistory.map((h: any) => new PasswordHistoryResponse(h));\n }\n\n this.reprompt = this.getResponseProperty(\"Reprompt\") || CipherRepromptType.None;\n }\n}\n","import { FileUploadType } from \"../../enums/fileUploadType\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { CipherResponse } from \"./cipherResponse\";\n\nexport class AttachmentUploadDataResponse extends BaseResponse {\n attachmentId: string;\n fileUploadType: FileUploadType;\n cipherResponse: CipherResponse;\n cipherMiniResponse: CipherResponse;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.attachmentId = this.getResponseProperty(\"AttachmentId\");\n this.fileUploadType = this.getResponseProperty(\"FileUploadType\");\n const cipherResponse = this.getResponseProperty(\"CipherResponse\");\n const cipherMiniResponse = this.getResponseProperty(\"CipherMiniResponse\");\n this.cipherResponse = cipherResponse == null ? null : new CipherResponse(cipherResponse);\n this.cipherMiniResponse =\n cipherMiniResponse == null ? null : new CipherResponse(cipherMiniResponse);\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import { DeviceType } from \"@bitwarden/common/enums/deviceType\";\n\nimport { BaseResponse } from \"./baseResponse\";\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 \"../baseResponse\";\n\nimport { ICaptchaProtectedResponse } from \"./ICaptchaProtectedResponse\";\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 \"./baseResponse\";\n\nexport class BillingResponse extends BaseResponse {\n balance: number;\n paymentSource: BillingSourceResponse;\n invoices: BillingInvoiceResponse[] = [];\n transactions: BillingTransactionResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.balance = this.getResponseProperty(\"Balance\");\n const paymentSource = this.getResponseProperty(\"PaymentSource\");\n const transactions = this.getResponseProperty(\"Transactions\");\n const invoices = this.getResponseProperty(\"Invoices\");\n this.paymentSource = paymentSource == null ? null : new BillingSourceResponse(paymentSource);\n if (transactions != null) {\n this.transactions = transactions.map((t: any) => new BillingTransactionResponse(t));\n }\n if (invoices != null) {\n this.invoices = invoices.map((i: any) => new BillingInvoiceResponse(i));\n }\n }\n}\n\nexport class BillingSourceResponse extends BaseResponse {\n type: PaymentMethodType;\n cardBrand: string;\n description: string;\n needsVerification: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.cardBrand = this.getResponseProperty(\"CardBrand\");\n this.description = this.getResponseProperty(\"Description\");\n this.needsVerification = this.getResponseProperty(\"NeedsVerification\");\n }\n}\n\nexport class BillingInvoiceResponse extends BaseResponse {\n url: string;\n pdfUrl: string;\n number: string;\n paid: boolean;\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.url = this.getResponseProperty(\"Url\");\n this.pdfUrl = this.getResponseProperty(\"PdfUrl\");\n this.number = this.getResponseProperty(\"Number\");\n this.paid = this.getResponseProperty(\"Paid\");\n this.date = this.getResponseProperty(\"Date\");\n this.amount = this.getResponseProperty(\"Amount\");\n }\n}\n\nexport class BillingTransactionResponse extends BaseResponse {\n createdDate: string;\n amount: number;\n refunded: boolean;\n partiallyRefunded: boolean;\n refundedAmount: number;\n type: TransactionType;\n paymentMethodType: PaymentMethodType;\n details: string;\n\n constructor(response: any) {\n super(response);\n this.createdDate = this.getResponseProperty(\"CreatedDate\");\n this.amount = this.getResponseProperty(\"Amount\");\n this.refunded = this.getResponseProperty(\"Refunded\");\n this.partiallyRefunded = this.getResponseProperty(\"PartiallyRefunded\");\n this.refundedAmount = this.getResponseProperty(\"RefundedAmount\");\n this.type = this.getResponseProperty(\"Type\");\n this.paymentMethodType = this.getResponseProperty(\"PaymentMethodType\");\n this.details = this.getResponseProperty(\"Details\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { BillingInvoiceResponse, BillingTransactionResponse } from \"./billingResponse\";\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 \"./baseResponse\";\nimport { BillingSourceResponse } from \"./billingResponse\";\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 \"./baseResponse\";\n\nexport class BreachAccountResponse extends BaseResponse {\n addedDate: string;\n breachDate: string;\n dataClasses: string[];\n description: string;\n domain: string;\n isActive: boolean;\n isVerified: boolean;\n logoPath: string;\n modifiedDate: string;\n name: string;\n pwnCount: number;\n title: string;\n\n constructor(response: any) {\n super(response);\n this.addedDate = this.getResponseProperty(\"AddedDate\");\n this.breachDate = this.getResponseProperty(\"BreachDate\");\n this.dataClasses = this.getResponseProperty(\"DataClasses\");\n this.description = this.getResponseProperty(\"Description\");\n this.domain = this.getResponseProperty(\"Domain\");\n this.isActive = this.getResponseProperty(\"IsActive\");\n this.isVerified = this.getResponseProperty(\"IsVerified\");\n this.logoPath = this.getResponseProperty(\"LogoPath\");\n this.modifiedDate = this.getResponseProperty(\"ModifiedDate\");\n this.name = this.getResponseProperty(\"Name\");\n this.pwnCount = this.getResponseProperty(\"PwnCount\");\n this.title = this.getResponseProperty(\"Title\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class SelectionReadOnlyResponse extends BaseResponse {\n id: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.readOnly = this.getResponseProperty(\"ReadOnly\");\n this.hidePasswords = this.getResponseProperty(\"HidePasswords\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { SelectionReadOnlyResponse } from \"./selectionReadOnlyResponse\";\n\nexport class CollectionResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.name = this.getResponseProperty(\"Name\");\n this.externalId = this.getResponseProperty(\"ExternalId\");\n }\n}\n\nexport class CollectionDetailsResponse extends CollectionResponse {\n readOnly: boolean;\n\n constructor(response: any) {\n super(response);\n this.readOnly = this.getResponseProperty(\"ReadOnly\") || false;\n }\n}\n\nexport class CollectionGroupDetailsResponse extends CollectionResponse {\n groups: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const groups = this.getResponseProperty(\"Groups\");\n if (groups != null) {\n this.groups = groups.map((g: any) => new SelectionReadOnlyResponse(g));\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\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 \"./baseResponse\";\n\nexport class GlobalDomainResponse extends BaseResponse {\n type: number;\n domains: string[];\n excluded: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.domains = this.getResponseProperty(\"Domains\");\n this.excluded = this.getResponseProperty(\"Excluded\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { GlobalDomainResponse } from \"./globalDomainResponse\";\n\nexport class DomainsResponse extends BaseResponse {\n equivalentDomains: string[][];\n globalEquivalentDomains: GlobalDomainResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.equivalentDomains = this.getResponseProperty(\"EquivalentDomains\");\n const globalEquivalentDomains = this.getResponseProperty(\"GlobalEquivalentDomains\");\n if (globalEquivalentDomains != null) {\n this.globalEquivalentDomains = globalEquivalentDomains.map(\n (d: any) => new GlobalDomainResponse(d)\n );\n } else {\n this.globalEquivalentDomains = [];\n }\n }\n}\n","import { EmergencyAccessStatusType } from \"../../enums/emergencyAccessStatusType\";\nimport { EmergencyAccessType } from \"../../enums/emergencyAccessType\";\nimport { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { CipherResponse } from \"./cipherResponse\";\n\nexport class EmergencyAccessGranteeDetailsResponse extends BaseResponse {\n id: string;\n granteeId: string;\n name: string;\n email: string;\n type: EmergencyAccessType;\n status: EmergencyAccessStatusType;\n waitTimeDays: number;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.granteeId = this.getResponseProperty(\"GranteeId\");\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.waitTimeDays = this.getResponseProperty(\"WaitTimeDays\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n }\n}\n\nexport class EmergencyAccessGrantorDetailsResponse extends BaseResponse {\n id: string;\n grantorId: string;\n name: string;\n email: string;\n type: EmergencyAccessType;\n status: EmergencyAccessStatusType;\n waitTimeDays: number;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.grantorId = this.getResponseProperty(\"GrantorId\");\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.waitTimeDays = this.getResponseProperty(\"WaitTimeDays\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n }\n}\n\nexport class EmergencyAccessTakeoverResponse extends BaseResponse {\n keyEncrypted: string;\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n\n this.keyEncrypted = this.getResponseProperty(\"KeyEncrypted\");\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n }\n}\n\nexport class EmergencyAccessViewResponse extends BaseResponse {\n keyEncrypted: string;\n ciphers: CipherResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n this.keyEncrypted = this.getResponseProperty(\"KeyEncrypted\");\n\n const ciphers = this.getResponseProperty(\"Ciphers\");\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n }\n}\n","import { DeviceType } from \"../../enums/deviceType\";\nimport { EventType } from \"../../enums/eventType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class EventResponse extends BaseResponse {\n type: EventType;\n userId: string;\n organizationId: string;\n providerId: string;\n cipherId: string;\n collectionId: string;\n groupId: string;\n policyId: string;\n organizationUserId: string;\n providerUserId: string;\n providerOrganizationId: string;\n actingUserId: string;\n date: string;\n deviceType: DeviceType;\n ipAddress: string;\n installationId: string;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.cipherId = this.getResponseProperty(\"CipherId\");\n this.collectionId = this.getResponseProperty(\"CollectionId\");\n this.groupId = this.getResponseProperty(\"GroupId\");\n this.policyId = this.getResponseProperty(\"PolicyId\");\n this.organizationUserId = this.getResponseProperty(\"OrganizationUserId\");\n this.providerUserId = this.getResponseProperty(\"ProviderUserId\");\n this.providerOrganizationId = this.getResponseProperty(\"ProviderOrganizationId\");\n this.actingUserId = this.getResponseProperty(\"ActingUserId\");\n this.date = this.getResponseProperty(\"Date\");\n this.deviceType = this.getResponseProperty(\"DeviceType\");\n this.ipAddress = this.getResponseProperty(\"IpAddress\");\n this.installationId = this.getResponseProperty(\"InstallationId\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { SelectionReadOnlyResponse } from \"./selectionReadOnlyResponse\";\n\nexport class GroupResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n accessAll: boolean;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.name = this.getResponseProperty(\"Name\");\n this.accessAll = this.getResponseProperty(\"AccessAll\");\n this.externalId = this.getResponseProperty(\"ExternalId\");\n }\n}\n\nexport class GroupDetailsResponse extends GroupResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class IdentityCaptchaResponse extends BaseResponse {\n siteKey: string;\n\n constructor(response: any) {\n super(response);\n this.siteKey = this.getResponseProperty(\"HCaptcha_SiteKey\");\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class IdentityTokenResponse extends BaseResponse {\n accessToken: string;\n expiresIn: number;\n refreshToken: string;\n tokenType: string;\n\n resetMasterPassword: boolean;\n privateKey: string;\n key: string;\n twoFactorToken: string;\n kdf: KdfType;\n kdfIterations: number;\n forcePasswordReset: boolean;\n apiUseKeyConnector: boolean;\n keyConnectorUrl: string;\n\n constructor(response: any) {\n super(response);\n this.accessToken = response.access_token;\n this.expiresIn = response.expires_in;\n this.refreshToken = response.refresh_token;\n this.tokenType = response.token_type;\n\n this.resetMasterPassword = this.getResponseProperty(\"ResetMasterPassword\");\n this.privateKey = this.getResponseProperty(\"PrivateKey\");\n this.key = this.getResponseProperty(\"Key\");\n this.twoFactorToken = this.getResponseProperty(\"TwoFactorToken\");\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n this.forcePasswordReset = this.getResponseProperty(\"ForcePasswordReset\");\n this.apiUseKeyConnector = this.getResponseProperty(\"ApiUseKeyConnector\");\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n }\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class IdentityTwoFactorResponse extends BaseResponse {\n twoFactorProviders: TwoFactorProviderType[];\n twoFactorProviders2 = new Map();\n captchaToken: string;\n\n constructor(response: any) {\n super(response);\n this.captchaToken = this.getResponseProperty(\"CaptchaBypassToken\");\n this.twoFactorProviders = this.getResponseProperty(\"TwoFactorProviders\");\n const twoFactorProviders2 = this.getResponseProperty(\"TwoFactorProviders2\");\n if (twoFactorProviders2 != null) {\n for (const prop in twoFactorProviders2) {\n // eslint-disable-next-line\n if (twoFactorProviders2.hasOwnProperty(prop)) {\n this.twoFactorProviders2.set(parseInt(prop, null), twoFactorProviders2[prop]);\n }\n }\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class KeyConnectorUserKeyResponse extends BaseResponse {\n key: string;\n\n constructor(response: any) {\n super(response);\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class 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/billingSyncConfigApi\";\nimport { ScimConfigApi } from \"../api/scimConfigApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\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 \"./baseResponse\";\nimport { CipherResponse } from \"./cipherResponse\";\nimport { CollectionResponse } from \"./collectionResponse\";\nimport { ListResponse } from \"./listResponse\";\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 \"./baseResponse\";\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 \"./baseResponse\";\n\nexport class OrganizationUserBulkPublicKeyResponse extends BaseResponse {\n id: string;\n userId: string;\n key: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class OrganizationUserBulkResponse extends BaseResponse {\n id: string;\n error: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.error = this.getResponseProperty(\"Error\");\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class PermissionsApi extends BaseResponse {\n accessEventLogs: boolean;\n accessImportExport: boolean;\n accessReports: boolean;\n /**\n * @deprecated Sep 29 2021: This permission has been split out to `createNewCollections`, `editAnyCollection`, and\n * `deleteAnyCollection`. It exists here for backwards compatibility with Server versions <= 1.43.0\n */\n manageAllCollections: boolean;\n createNewCollections: boolean;\n editAnyCollection: boolean;\n deleteAnyCollection: boolean;\n /**\n * @deprecated Sep 29 2021: This permission has been split out to `editAssignedCollections` and\n * `deleteAssignedCollections`. It exists here for backwards compatibility with Server versions <= 1.43.0\n */\n manageAssignedCollections: boolean;\n editAssignedCollections: boolean;\n deleteAssignedCollections: boolean;\n manageCiphers: boolean;\n manageGroups: boolean;\n manageSso: boolean;\n managePolicies: boolean;\n manageUsers: boolean;\n manageResetPassword: boolean;\n 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/permissionsApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { SelectionReadOnlyResponse } from \"./selectionReadOnlyResponse\";\n\nexport class OrganizationUserResponse extends BaseResponse {\n id: string;\n userId: string;\n type: OrganizationUserType;\n status: OrganizationUserStatusType;\n accessAll: boolean;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"Permissions\"));\n this.accessAll = this.getResponseProperty(\"AccessAll\");\n this.resetPasswordEnrolled = this.getResponseProperty(\"ResetPasswordEnrolled\");\n }\n}\n\nexport class OrganizationUserUserDetailsResponse extends OrganizationUserResponse {\n name: string;\n email: string;\n twoFactorEnabled: boolean;\n usesKeyConnector: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.twoFactorEnabled = this.getResponseProperty(\"TwoFactorEnabled\");\n this.usesKeyConnector = this.getResponseProperty(\"UsesKeyConnector\") ?? false;\n }\n}\n\nexport class OrganizationUserDetailsResponse extends OrganizationUserResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n\nexport class OrganizationUserResetPasswordDetailsReponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n resetPasswordKey: string;\n encryptedPrivateKey: string;\n\n constructor(response: any) {\n super(response);\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n this.resetPasswordKey = this.getResponseProperty(\"ResetPasswordKey\");\n this.encryptedPrivateKey = this.getResponseProperty(\"EncryptedPrivateKey\");\n }\n}\n","import { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class ProfileOrganizationResponse extends BaseResponse {\n id: string;\n name: string;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useScim: 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.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 \"./profileOrganizationResponse\";\n\nexport class ProfileProviderOrganizationResponse extends ProfileOrganizationResponse {\n constructor(response: any) {\n super(response);\n this.keyConnectorEnabled = false;\n }\n}\n","import { ProviderUserStatusType } from \"../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../enums/providerUserType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class ProfileProviderResponse extends BaseResponse {\n id: string;\n name: string;\n key: string;\n status: ProviderUserStatusType;\n type: ProviderUserType;\n enabled: boolean;\n permissions: PermissionsApi;\n userId: string;\n useEvents: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.key = this.getResponseProperty(\"Key\");\n this.status = this.getResponseProperty(\"Status\");\n this.type = this.getResponseProperty(\"Type\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"permissions\"));\n this.userId = this.getResponseProperty(\"UserId\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { ProfileOrganizationResponse } from \"./profileOrganizationResponse\";\nimport { ProfileProviderOrganizationResponse } from \"./profileProviderOrganizationResponse\";\nimport { ProfileProviderResponse } from \"./profileProviderResponse\";\n\nexport class ProfileResponse extends BaseResponse {\n id: string;\n name: string;\n email: string;\n emailVerified: boolean;\n masterPasswordHint: string;\n 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 \"./baseResponse\";\nimport { ProfileResponse } from \"./profileResponse\";\n\nexport class PaymentResponse extends BaseResponse {\n userProfile: ProfileResponse;\n paymentIntentClientSecret: string;\n success: boolean;\n\n constructor(response: any) {\n super(response);\n const userProfile = this.getResponseProperty(\"UserProfile\");\n if (userProfile != null) {\n this.userProfile = new ProfileResponse(userProfile);\n }\n this.paymentIntentClientSecret = this.getResponseProperty(\"PaymentIntentClientSecret\");\n this.success = this.getResponseProperty(\"Success\");\n }\n}\n","import { PlanType } from \"../../enums/planType\";\nimport { ProductType } from \"../../enums/productType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class PlanResponse extends BaseResponse {\n type: PlanType;\n product: ProductType;\n name: string;\n isAnnual: boolean;\n nameLocalizationKey: string;\n descriptionLocalizationKey: string;\n canBeUsedByBusiness: boolean;\n baseSeats: number;\n baseStorageGb: number;\n maxCollections: number;\n maxUsers: number;\n\n hasAdditionalSeatsOption: boolean;\n maxAdditionalSeats: number;\n hasAdditionalStorageOption: boolean;\n maxAdditionalStorage: number;\n hasPremiumAccessOption: boolean;\n trialPeriodDays: number;\n\n hasSelfHost: boolean;\n hasPolicies: boolean;\n hasGroups: boolean;\n hasDirectory: boolean;\n hasEvents: boolean;\n hasTotp: boolean;\n has2fa: boolean;\n hasApi: boolean;\n hasSso: boolean;\n hasResetPassword: boolean;\n usersGetPremium: boolean;\n\n upgradeSortOrder: number;\n displaySortOrder: number;\n legacyYear: number;\n disabled: boolean;\n\n stripePlanId: string;\n stripeSeatPlanId: string;\n stripeStoragePlanId: string;\n stripePremiumAccessPlanId: string;\n basePrice: number;\n seatPrice: number;\n additionalStoragePricePerGb: number;\n premiumAccessOptionPrice: number;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.product = this.getResponseProperty(\"Product\");\n this.name = this.getResponseProperty(\"Name\");\n this.isAnnual = this.getResponseProperty(\"IsAnnual\");\n this.nameLocalizationKey = this.getResponseProperty(\"NameLocalizationKey\");\n this.descriptionLocalizationKey = this.getResponseProperty(\"DescriptionLocalizationKey\");\n this.canBeUsedByBusiness = this.getResponseProperty(\"CanBeUsedByBusiness\");\n this.baseSeats = this.getResponseProperty(\"BaseSeats\");\n this.baseStorageGb = this.getResponseProperty(\"BaseStorageGb\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxUsers = this.getResponseProperty(\"MaxUsers\");\n this.hasAdditionalSeatsOption = this.getResponseProperty(\"HasAdditionalSeatsOption\");\n this.maxAdditionalSeats = this.getResponseProperty(\"MaxAdditionalSeats\");\n this.hasAdditionalStorageOption = this.getResponseProperty(\"HasAdditionalStorageOption\");\n this.maxAdditionalStorage = this.getResponseProperty(\"MaxAdditionalStorage\");\n this.hasPremiumAccessOption = this.getResponseProperty(\"HasPremiumAccessOption\");\n this.trialPeriodDays = this.getResponseProperty(\"TrialPeriodDays\");\n this.hasSelfHost = this.getResponseProperty(\"HasSelfHost\");\n this.hasPolicies = this.getResponseProperty(\"HasPolicies\");\n this.hasGroups = this.getResponseProperty(\"HasGroups\");\n this.hasDirectory = this.getResponseProperty(\"HasDirectory\");\n this.hasEvents = this.getResponseProperty(\"HasEvents\");\n this.hasTotp = this.getResponseProperty(\"HasTotp\");\n this.has2fa = this.getResponseProperty(\"Has2fa\");\n this.hasApi = this.getResponseProperty(\"HasApi\");\n this.hasSso = this.getResponseProperty(\"HasSso\");\n this.hasResetPassword = this.getResponseProperty(\"HasResetPassword\");\n this.usersGetPremium = this.getResponseProperty(\"UsersGetPremium\");\n this.upgradeSortOrder = this.getResponseProperty(\"UpgradeSortOrder\");\n this.displaySortOrder = this.getResponseProperty(\"SortOrder\");\n this.legacyYear = this.getResponseProperty(\"LegacyYear\");\n this.disabled = this.getResponseProperty(\"Disabled\");\n this.stripePlanId = this.getResponseProperty(\"StripePlanId\");\n this.stripeSeatPlanId = this.getResponseProperty(\"StripeSeatPlanId\");\n this.stripeStoragePlanId = this.getResponseProperty(\"StripeStoragePlanId\");\n this.stripePremiumAccessPlanId = this.getResponseProperty(\"StripePremiumAccessPlanId\");\n this.basePrice = this.getResponseProperty(\"BasePrice\");\n this.seatPrice = this.getResponseProperty(\"SeatPrice\");\n this.additionalStoragePricePerGb = this.getResponseProperty(\"AdditionalStoragePricePerGb\");\n this.premiumAccessOptionPrice = this.getResponseProperty(\"PremiumAccessOptionPrice\");\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class PolicyResponse extends BaseResponse {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.type = this.getResponseProperty(\"Type\");\n this.data = this.getResponseProperty(\"Data\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class PreloginResponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n }\n}\n","import { BaseResponse } from \"../baseResponse\";\n\nexport class ProviderOrganizationResponse extends BaseResponse {\n id: string;\n providerId: string;\n organizationId: string;\n key: string;\n settings: string;\n creationDate: string;\n revisionDate: string;\n userCount: number;\n seats?: number;\n plan?: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.key = this.getResponseProperty(\"Key\");\n this.settings = this.getResponseProperty(\"Settings\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n this.userCount = this.getResponseProperty(\"UserCount\");\n this.seats = this.getResponseProperty(\"Seats\");\n this.plan = this.getResponseProperty(\"Plan\");\n }\n}\n\nexport class ProviderOrganizationOrganizationDetailsResponse extends ProviderOrganizationResponse {\n organizationName: string;\n\n constructor(response: any) {\n super(response);\n this.organizationName = this.getResponseProperty(\"OrganizationName\");\n }\n}\n","import { BaseResponse } from \"../baseResponse\";\n\nexport class ProviderResponse extends BaseResponse {\n id: string;\n name: string;\n businessName: string;\n billingEmail: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.businessName = this.getResponseProperty(\"BusinessName\");\n this.billingEmail = this.getResponseProperty(\"BillingEmail\");\n }\n}\n","import { OrganizationUserBulkPublicKeyResponse } from \"../organizationUserBulkPublicKeyResponse\";\n\nexport class ProviderUserBulkPublicKeyResponse extends OrganizationUserBulkPublicKeyResponse {}\n","import { BaseResponse } from \"../baseResponse\";\n\nexport class ProviderUserBulkResponse extends BaseResponse {\n id: string;\n error: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.error = this.getResponseProperty(\"Error\");\n }\n}\n","import { ProviderUserStatusType } from \"../../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../../enums/providerUserType\";\nimport { PermissionsApi } from \"../../api/permissionsApi\";\nimport { BaseResponse } from \"../baseResponse\";\n\nexport class ProviderUserResponse extends BaseResponse {\n id: string;\n userId: string;\n type: ProviderUserType;\n status: ProviderUserStatusType;\n permissions: PermissionsApi;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"Permissions\"));\n }\n}\n\nexport class ProviderUserUserDetailsResponse extends ProviderUserResponse {\n name: string;\n email: string;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\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/baseResponse\";\n\nexport class SendTextApi extends BaseResponse {\n text: string;\n hidden: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.text = this.getResponseProperty(\"Text\");\n this.hidden = this.getResponseProperty(\"Hidden\") || false;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/sendFileApi\";\nimport { SendTextApi } from \"../api/sendTextApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class SendAccessResponse extends BaseResponse {\n id: string;\n type: SendType;\n name: string;\n file: SendFileApi;\n text: SendTextApi;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n\n const text = this.getResponseProperty(\"Text\");\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty(\"File\");\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n\n this.expirationDate = this.getResponseProperty(\"ExpirationDate\");\n this.creatorIdentifier = this.getResponseProperty(\"CreatorIdentifier\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class SendFileDownloadDataResponse extends BaseResponse {\n id: string = null;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/sendFileApi\";\nimport { SendTextApi } from \"../api/sendTextApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class SendResponse extends BaseResponse {\n id: string;\n accessId: string;\n type: SendType;\n name: string;\n notes: string;\n file: SendFileApi;\n text: SendTextApi;\n key: string;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: string;\n expirationDate: string;\n deletionDate: string;\n password: string;\n disable: boolean;\n hideEmail: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.accessId = this.getResponseProperty(\"AccessId\");\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.notes = this.getResponseProperty(\"Notes\");\n this.key = this.getResponseProperty(\"Key\");\n this.maxAccessCount = this.getResponseProperty(\"MaxAccessCount\");\n this.accessCount = this.getResponseProperty(\"AccessCount\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n this.expirationDate = this.getResponseProperty(\"ExpirationDate\");\n this.deletionDate = this.getResponseProperty(\"DeletionDate\");\n this.password = this.getResponseProperty(\"Password\");\n this.disable = this.getResponseProperty(\"Disabled\") || false;\n this.hideEmail = this.getResponseProperty(\"HideEmail\") || false;\n\n const text = this.getResponseProperty(\"Text\");\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty(\"File\");\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n }\n}\n","import { FileUploadType } from \"../../enums/fileUploadType\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { SendResponse } from \"./sendResponse\";\n\nexport class SendFileUploadDataResponse extends BaseResponse {\n fileUploadType: FileUploadType;\n sendResponse: SendResponse;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.fileUploadType = this.getResponseProperty(\"FileUploadType\");\n const sendResponse = this.getResponseProperty(\"SendResponse\");\n this.sendResponse = sendResponse == null ? null : new SendResponse(sendResponse);\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\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 \"./baseResponse\";\n\nexport class SubscriptionResponse extends BaseResponse {\n storageName: string;\n storageGb: number;\n maxStorageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n license: any;\n expiration: string;\n usingInAppPurchase: boolean;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty(\"StorageName\");\n this.storageGb = this.getResponseProperty(\"StorageGb\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.license = this.getResponseProperty(\"License\");\n this.expiration = this.getResponseProperty(\"Expiration\");\n this.usingInAppPurchase = this.getResponseProperty(\"UsingInAppPurchase\");\n const subscription = this.getResponseProperty(\"Subscription\");\n const upcomingInvoice = this.getResponseProperty(\"UpcomingInvoice\");\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n this.upcomingInvoice =\n upcomingInvoice == null\n ? null\n : new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n }\n}\n\nexport class BillingSubscriptionResponse extends BaseResponse {\n trialStartDate: string;\n trialEndDate: string;\n periodStartDate: string;\n periodEndDate: string;\n cancelledDate: string;\n cancelAtEndDate: boolean;\n status: string;\n cancelled: boolean;\n items: BillingSubscriptionItemResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.trialEndDate = this.getResponseProperty(\"TrialStartDate\");\n this.trialEndDate = this.getResponseProperty(\"TrialEndDate\");\n this.periodStartDate = this.getResponseProperty(\"PeriodStartDate\");\n this.periodEndDate = this.getResponseProperty(\"PeriodEndDate\");\n this.cancelledDate = this.getResponseProperty(\"CancelledDate\");\n this.cancelAtEndDate = this.getResponseProperty(\"CancelAtEndDate\");\n this.status = this.getResponseProperty(\"Status\");\n this.cancelled = this.getResponseProperty(\"Cancelled\");\n const items = this.getResponseProperty(\"Items\");\n if (items != null) {\n this.items = items.map((i: any) => new BillingSubscriptionItemResponse(i));\n }\n }\n}\n\nexport class BillingSubscriptionItemResponse extends BaseResponse {\n name: string;\n amount: number;\n quantity: number;\n interval: string;\n sponsoredSubscriptionItem: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.amount = this.getResponseProperty(\"Amount\");\n this.quantity = this.getResponseProperty(\"Quantity\");\n this.interval = this.getResponseProperty(\"Interval\");\n this.sponsoredSubscriptionItem = this.getResponseProperty(\"SponsoredSubscriptionItem\");\n }\n}\n\nexport class BillingSubscriptionUpcomingInvoiceResponse extends BaseResponse {\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.date = this.getResponseProperty(\"Date\");\n this.amount = this.getResponseProperty(\"Amount\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class FolderResponse extends BaseResponse {\n id: string;\n name: string;\n revisionDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { CipherResponse } from \"./cipherResponse\";\nimport { CollectionDetailsResponse } from \"./collectionResponse\";\nimport { DomainsResponse } from \"./domainsResponse\";\nimport { FolderResponse } from \"./folderResponse\";\nimport { PolicyResponse } from \"./policyResponse\";\nimport { ProfileResponse } from \"./profileResponse\";\nimport { SendResponse } from \"./sendResponse\";\n\nexport class SyncResponse extends BaseResponse {\n profile?: ProfileResponse;\n folders: FolderResponse[] = [];\n collections: CollectionDetailsResponse[] = [];\n ciphers: CipherResponse[] = [];\n domains?: DomainsResponse;\n policies?: PolicyResponse[] = [];\n sends: SendResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n const profile = this.getResponseProperty(\"Profile\");\n if (profile != null) {\n this.profile = new ProfileResponse(profile);\n }\n\n const folders = this.getResponseProperty(\"Folders\");\n if (folders != null) {\n this.folders = folders.map((f: any) => new FolderResponse(f));\n }\n\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new CollectionDetailsResponse(c));\n }\n\n const ciphers = this.getResponseProperty(\"Ciphers\");\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n\n const domains = this.getResponseProperty(\"Domains\");\n if (domains != null) {\n this.domains = new DomainsResponse(domains);\n }\n\n const policies = this.getResponseProperty(\"Policies\");\n if (policies != null) {\n this.policies = policies.map((p: any) => new PolicyResponse(p));\n }\n\n const sends = this.getResponseProperty(\"Sends\");\n if (sends != null) {\n this.sends = sends.map((s: any) => new SendResponse(s));\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TaxInfoResponse extends BaseResponse {\n taxId: string;\n taxIdType: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n country: string;\n postalCode: string;\n\n constructor(response: any) {\n super(response);\n this.taxId = this.getResponseProperty(\"TaxIdNumber\");\n this.taxIdType = this.getResponseProperty(\"TaxIdType\");\n this.line1 = this.getResponseProperty(\"Line1\");\n this.line2 = this.getResponseProperty(\"Line2\");\n this.city = this.getResponseProperty(\"City\");\n this.state = this.getResponseProperty(\"State\");\n this.postalCode = this.getResponseProperty(\"PostalCode\");\n this.country = this.getResponseProperty(\"Country\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TaxRateResponse extends BaseResponse {\n id: string;\n country: string;\n state: string;\n postalCode: string;\n rate: number;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.country = this.getResponseProperty(\"Country\");\n this.state = this.getResponseProperty(\"State\");\n this.postalCode = this.getResponseProperty(\"PostalCode\");\n this.rate = this.getResponseProperty(\"Rate\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorAuthenticatorResponse extends BaseResponse {\n enabled: boolean;\n key: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorDuoResponse extends BaseResponse {\n enabled: boolean;\n host: string;\n secretKey: string;\n integrationKey: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.host = this.getResponseProperty(\"Host\");\n this.secretKey = this.getResponseProperty(\"SecretKey\");\n this.integrationKey = this.getResponseProperty(\"IntegrationKey\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorEmailResponse extends BaseResponse {\n enabled: boolean;\n email: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.email = this.getResponseProperty(\"Email\");\n }\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorProviderResponse extends BaseResponse {\n enabled: boolean;\n type: TwoFactorProviderType;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.type = this.getResponseProperty(\"Type\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorRecoverResponse extends BaseResponse {\n code: string;\n\n constructor(response: any) {\n super(response);\n this.code = this.getResponseProperty(\"Code\");\n }\n}\n","import { Utils } from \"../../misc/utils\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorWebAuthnResponse extends BaseResponse {\n enabled: boolean;\n keys: KeyResponse[];\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n const keys = this.getResponseProperty(\"Keys\");\n this.keys = keys == null ? null : keys.map((k: any) => new KeyResponse(k));\n }\n}\n\nexport class KeyResponse extends BaseResponse {\n name: string;\n id: number;\n migrated: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.id = this.getResponseProperty(\"Id\");\n this.migrated = this.getResponseProperty(\"Migrated\");\n }\n}\n\nexport class ChallengeResponse extends BaseResponse implements PublicKeyCredentialCreationOptions {\n attestation?: AttestationConveyancePreference;\n authenticatorSelection?: AuthenticatorSelectionCriteria;\n challenge: BufferSource;\n excludeCredentials?: PublicKeyCredentialDescriptor[];\n extensions?: AuthenticationExtensionsClientInputs;\n pubKeyCredParams: PublicKeyCredentialParameters[];\n rp: PublicKeyCredentialRpEntity;\n timeout?: number;\n user: PublicKeyCredentialUserEntity;\n\n constructor(response: any) {\n super(response);\n this.attestation = this.getResponseProperty(\"attestation\");\n this.authenticatorSelection = this.getResponseProperty(\"authenticatorSelection\");\n this.challenge = Utils.fromUrlB64ToArray(this.getResponseProperty(\"challenge\"));\n this.excludeCredentials = this.getResponseProperty(\"excludeCredentials\").map((c: any) => {\n c.id = Utils.fromUrlB64ToArray(c.id).buffer;\n return c;\n });\n this.extensions = this.getResponseProperty(\"extensions\");\n this.pubKeyCredParams = this.getResponseProperty(\"pubKeyCredParams\");\n this.rp = this.getResponseProperty(\"rp\");\n this.timeout = this.getResponseProperty(\"timeout\");\n\n const user = this.getResponseProperty(\"user\");\n user.id = Utils.fromUrlB64ToArray(user.id);\n\n this.user = user;\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorYubiKeyResponse extends BaseResponse {\n enabled: boolean;\n key1: string;\n key2: string;\n key3: string;\n key4: string;\n key5: string;\n nfc: boolean;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.key1 = this.getResponseProperty(\"Key1\");\n this.key2 = this.getResponseProperty(\"Key2\");\n this.key3 = this.getResponseProperty(\"Key3\");\n this.key4 = this.getResponseProperty(\"Key4\");\n this.key5 = this.getResponseProperty(\"Key5\");\n this.nfc = this.getResponseProperty(\"Nfc\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class UserKeyResponse extends BaseResponse {\n userId: string;\n publicKey: string;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty(\"UserId\");\n this.publicKey = this.getResponseProperty(\"PublicKey\");\n }\n}\n","export enum HtmlStorageLocation {\n Local = \"local\",\n Memory = \"memory\",\n Session = \"session\",\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { AuditService as AuditServiceAbstraction } from \"../abstractions/audit.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { throttle } from \"../misc/throttle\";\nimport { Utils } from \"../misc/utils\";\nimport { BreachAccountResponse } from \"../models/response/breachAccountResponse\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\n\nconst PwnedPasswordsApi = \"https://api.pwnedpasswords.com/range/\";\n\nexport class AuditService implements AuditServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService\n ) {}\n\n @throttle(100, () => \"passwordLeaked\")\n async passwordLeaked(password: string): Promise {\n const hashBytes = await this.cryptoFunctionService.hash(password, \"sha1\");\n const hash = Utils.fromBufferToHex(hashBytes).toUpperCase();\n const hashStart = hash.substr(0, 5);\n const hashEnding = hash.substr(5);\n\n const response = await this.apiService.nativeFetch(new Request(PwnedPasswordsApi + hashStart));\n const leakedHashes = await response.text();\n const match = leakedHashes.split(/\\r?\\n/).find((v) => {\n return v.split(\":\")[0] === hashEnding;\n });\n\n return match != null ? parseInt(match.split(\":\")[1], 10) : 0;\n }\n\n async breachedAccounts(username: string): Promise {\n try {\n return await this.apiService.getHibpBreach(username);\n } catch (e) {\n const error = e as ErrorResponse;\n if (error.statusCode === 404) {\n return [];\n }\n throw new Error();\n }\n }\n}\n","/**\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 AuthenticationStatus {\n LoggedOut = 0,\n Locked = 1,\n Unlocked = 2,\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","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","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","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 { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\nimport { Account, AccountProfile, AccountTokens } from \"../../models/domain/account\";\nimport { AuthResult } from \"../../models/domain/authResult\";\nimport {\n ApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../../models/domain/logInCredentials\";\nimport { DeviceRequest } from \"../../models/request/deviceRequest\";\nimport { ApiTokenRequest } from \"../../models/request/identityToken/apiTokenRequest\";\nimport { PasswordTokenRequest } from \"../../models/request/identityToken/passwordTokenRequest\";\nimport { SsoTokenRequest } from \"../../models/request/identityToken/ssoTokenRequest\";\nimport { TokenRequestTwoFactor } from \"../../models/request/identityToken/tokenRequestTwoFactor\";\nimport { KeysRequest } from \"../../models/request/keysRequest\";\nimport { IdentityCaptchaResponse } from \"../../models/response/identityCaptchaResponse\";\nimport { IdentityTokenResponse } from \"../../models/response/identityTokenResponse\";\nimport { IdentityTwoFactorResponse } from \"../../models/response/identityTwoFactorResponse\";\n\nexport abstract class LogInStrategy {\n protected abstract tokenRequest: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest;\n protected captchaBypassToken: string = null;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n protected tokenService: TokenService,\n protected appIdService: AppIdService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected logService: LogService,\n protected stateService: StateService,\n protected twoFactorService: TwoFactorService\n ) {}\n\n abstract logIn(\n credentials:\n | ApiLogInCredentials\n | PasswordLogInCredentials\n | SsoLogInCredentials\n | PasswordlessLogInCredentials\n ): Promise;\n\n async logInTwoFactor(\n twoFactor: TokenRequestTwoFactor,\n captchaResponse: string = null\n ): Promise {\n this.tokenRequest.setTwoFactor(twoFactor);\n return this.startLogIn();\n }\n\n protected async startLogIn(): Promise {\n this.twoFactorService.clearSelectedProvider();\n\n const response = await this.apiService.postIdentityToken(this.tokenRequest);\n\n if (response instanceof IdentityTwoFactorResponse) {\n return this.processTwoFactorResponse(response);\n } else if (response instanceof IdentityCaptchaResponse) {\n return this.processCaptchaResponse(response);\n } else if (response instanceof IdentityTokenResponse) {\n return this.processTokenResponse(response);\n }\n\n throw new Error(\"Invalid response object.\");\n }\n\n protected onSuccessfulLogin(response: IdentityTokenResponse): Promise {\n // Implemented in subclass if required\n return null;\n }\n\n protected async buildDeviceRequest() {\n const appId = await this.appIdService.getAppId();\n return new DeviceRequest(appId, this.platformUtilsService);\n }\n\n protected async buildTwoFactor(userProvidedTwoFactor?: TokenRequestTwoFactor) {\n if (userProvidedTwoFactor != null) {\n return userProvidedTwoFactor;\n }\n\n const storedTwoFactorToken = await this.tokenService.getTwoFactorToken();\n if (storedTwoFactorToken != null) {\n return new TokenRequestTwoFactor(TwoFactorProviderType.Remember, storedTwoFactorToken, false);\n }\n\n return new TokenRequestTwoFactor();\n }\n\n protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) {\n const accountInformation = await this.tokenService.decodeToken(tokenResponse.accessToken);\n await this.stateService.addAccount(\n new Account({\n profile: {\n ...new AccountProfile(),\n ...{\n userId: accountInformation.sub,\n email: accountInformation.email,\n hasPremiumPersonally: accountInformation.premium,\n kdfIterations: tokenResponse.kdfIterations,\n kdfType: tokenResponse.kdf,\n },\n },\n tokens: {\n ...new AccountTokens(),\n ...{\n accessToken: tokenResponse.accessToken,\n refreshToken: tokenResponse.refreshToken,\n },\n },\n })\n );\n }\n\n protected async processTokenResponse(response: IdentityTokenResponse): Promise {\n const result = new AuthResult();\n result.resetMasterPassword = response.resetMasterPassword;\n result.forcePasswordReset = response.forcePasswordReset;\n\n await this.saveAccountInformation(response);\n\n if (response.twoFactorToken != null) {\n await this.tokenService.setTwoFactorToken(response);\n }\n\n const newSsoUser = response.key == null;\n if (!newSsoUser) {\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(\n response.privateKey ?? (await this.createKeyPairForOldAccount())\n );\n }\n\n await this.onSuccessfulLogin(response);\n\n 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/logInCredentials\";\nimport { ApiTokenRequest } from \"../../models/request/identityToken/apiTokenRequest\";\nimport { IdentityTokenResponse } from \"../../models/response/identityTokenResponse\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class ApiLogInStrategy extends LogInStrategy {\n tokenRequest: ApiTokenRequest;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private environmentService: EnvironmentService,\n private keyConnectorService: KeyConnectorService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin(tokenResponse: IdentityTokenResponse) {\n if (tokenResponse.apiUseKeyConnector) {\n const keyConnectorUrl = this.environmentService.getKeyConnectorUrl();\n await this.keyConnectorService.getAndSetKey(keyConnectorUrl);\n }\n }\n\n async logIn(credentials: ApiLogInCredentials) {\n this.tokenRequest = new ApiTokenRequest(\n credentials.clientId,\n credentials.clientSecret,\n await this.buildTwoFactor(),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n\n protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) {\n await super.saveAccountInformation(tokenResponse);\n await this.stateService.setApiKeyClientId(this.tokenRequest.clientId);\n await this.stateService.setApiKeyClientSecret(this.tokenRequest.clientSecret);\n }\n}\n","import { ClientType } from \"../../../enums/clientType\";\nimport { Utils } from \"../../../misc/utils\";\nimport { CaptchaProtectedRequest } from \"../captchaProtectedRequest\";\nimport { DeviceRequest } from \"../deviceRequest\";\n\nimport { TokenRequest } from \"./tokenRequest\";\nimport { TokenRequestTwoFactor } from \"./tokenRequestTwoFactor\";\n\nexport class PasswordTokenRequest extends TokenRequest implements CaptchaProtectedRequest {\n constructor(\n public email: string,\n public masterPasswordHash: string,\n public captchaResponse: string,\n protected twoFactor: TokenRequestTwoFactor,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken(clientId: ClientType) {\n const obj = super.toIdentityToken(clientId);\n\n obj.grant_type = \"password\";\n obj.username = this.email;\n obj.password = this.masterPasswordHash;\n\n if (this.captchaResponse != null) {\n obj.captchaResponse = this.captchaResponse;\n }\n\n return obj;\n }\n\n alterIdentityTokenHeaders(headers: Headers) {\n headers.set(\"Auth-Email\", Utils.fromUtf8ToUrlB64(this.email));\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { AuthService } from \"../../abstractions/auth.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { HashPurpose } from \"../../enums/hashPurpose\";\nimport { AuthResult } from \"../../models/domain/authResult\";\nimport { PasswordLogInCredentials } from \"../../models/domain/logInCredentials\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetricCryptoKey\";\nimport { PasswordTokenRequest } from \"../../models/request/identityToken/passwordTokenRequest\";\nimport { TokenRequestTwoFactor } from \"../../models/request/identityToken/tokenRequestTwoFactor\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class PasswordLogInStrategy extends LogInStrategy {\n get email() {\n return this.tokenRequest.email;\n }\n\n get masterPasswordHash() {\n return this.tokenRequest.masterPasswordHash;\n }\n\n tokenRequest: PasswordTokenRequest;\n\n private localHashedPassword: string;\n private key: SymmetricCryptoKey;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private authService: AuthService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin() {\n await this.cryptoService.setKey(this.key);\n await this.cryptoService.setKeyHash(this.localHashedPassword);\n }\n\n async logInTwoFactor(\n twoFactor: TokenRequestTwoFactor,\n captchaResponse: string\n ): Promise {\n this.tokenRequest.captchaResponse = captchaResponse ?? this.captchaBypassToken;\n return super.logInTwoFactor(twoFactor);\n }\n\n async logIn(credentials: PasswordLogInCredentials) {\n const { email, masterPassword, captchaToken, twoFactor } = credentials;\n\n this.key = await this.authService.makePreloginKey(masterPassword, email);\n\n // Hash the password early (before authentication) so we don't persist it in memory in plaintext\n this.localHashedPassword = await this.cryptoService.hashPassword(\n masterPassword,\n this.key,\n HashPurpose.LocalAuthorization\n );\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, this.key);\n\n this.tokenRequest = new PasswordTokenRequest(\n email,\n hashedPassword,\n captchaToken,\n await this.buildTwoFactor(twoFactor),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { 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/authResult\";\nimport { PasswordlessLogInCredentials } from \"../../models/domain/logInCredentials\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetricCryptoKey\";\nimport { PasswordTokenRequest } from \"../../models/request/identityToken/passwordTokenRequest\";\nimport { TokenRequestTwoFactor } from \"../../models/request/identityToken/tokenRequestTwoFactor\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class PasswordlessLogInStrategy extends LogInStrategy {\n get email() {\n return this.tokenRequest.email;\n }\n\n get masterPasswordHash() {\n return this.tokenRequest.masterPasswordHash;\n }\n\n tokenRequest: PasswordTokenRequest;\n\n private localHashedPassword: string;\n private key: SymmetricCryptoKey;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private authService: AuthService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin() {\n await this.cryptoService.setKey(this.key);\n await this.cryptoService.setKeyHash(this.localHashedPassword);\n }\n\n async logInTwoFactor(\n twoFactor: TokenRequestTwoFactor,\n captchaResponse: string\n ): Promise {\n this.tokenRequest.captchaResponse = captchaResponse ?? this.captchaBypassToken;\n return super.logInTwoFactor(twoFactor);\n }\n\n async logIn(credentials: PasswordlessLogInCredentials) {\n this.localHashedPassword = credentials.localPasswordHash;\n this.key = credentials.decKey;\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 \"../deviceRequest\";\n\nimport { TokenRequest } from \"./tokenRequest\";\nimport { TokenRequestTwoFactor } from \"./tokenRequestTwoFactor\";\n\nexport class SsoTokenRequest extends TokenRequest {\n constructor(\n public code: string,\n public codeVerifier: string,\n public redirectUri: string,\n protected twoFactor: TokenRequestTwoFactor,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken(clientId: string) {\n const obj = super.toIdentityToken(clientId);\n\n obj.grant_type = \"authorization_code\";\n obj.code = this.code;\n obj.code_verifier = this.codeVerifier;\n obj.redirect_uri = this.redirectUri;\n\n return obj;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { SsoLogInCredentials } from \"../../models/domain/logInCredentials\";\nimport { SsoTokenRequest } from \"../../models/request/identityToken/ssoTokenRequest\";\nimport { IdentityTokenResponse } from \"../../models/response/identityTokenResponse\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class SsoLogInStrategy extends LogInStrategy {\n tokenRequest: SsoTokenRequest;\n orgId: string;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private keyConnectorService: KeyConnectorService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin(tokenResponse: IdentityTokenResponse) {\n const newSsoUser = tokenResponse.key == null;\n\n if (tokenResponse.keyConnectorUrl != null) {\n if (!newSsoUser) {\n await this.keyConnectorService.getAndSetKey(tokenResponse.keyConnectorUrl);\n } else {\n await this.keyConnectorService.convertNewSsoUserToKeyConnector(tokenResponse, this.orgId);\n }\n }\n }\n\n async logIn(credentials: SsoLogInCredentials) {\n this.orgId = credentials.orgId;\n this.tokenRequest = new SsoTokenRequest(\n credentials.code,\n credentials.codeVerifier,\n credentials.redirectUrl,\n await this.buildTwoFactor(credentials.twoFactor),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n}\n","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 \"@bitwarden/common/enums/encryptionType\";\nimport { IEncrypted } from \"@bitwarden/common/interfaces/IEncrypted\";\nimport { Utils } from \"@bitwarden/common/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/cipherView\";\n\nconst CacheTTL = 3000;\n\nexport class SortedCiphersCache {\n private readonly sortedCiphersByUrl: Map = new Map();\n private readonly timeouts: Map = new Map();\n\n constructor(private readonly comparator: (a: CipherView, b: CipherView) => number) {}\n\n isCached(url: string) {\n return this.sortedCiphersByUrl.has(url);\n }\n\n addCiphers(url: string, ciphers: CipherView[]) {\n ciphers.sort(this.comparator);\n this.sortedCiphersByUrl.set(url, new Ciphers(ciphers));\n this.resetTimer(url);\n }\n\n getLastUsed(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastUsed() : null;\n }\n\n getLastLaunched(url: string) {\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastLaunched() : null;\n }\n\n getNext(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getNext() : null;\n }\n\n updateLastUsedIndex(url: string) {\n if (this.isCached(url)) {\n this.sortedCiphersByUrl.get(url).updateLastUsedIndex();\n }\n }\n\n clear() {\n this.sortedCiphersByUrl.clear();\n this.timeouts.clear();\n }\n\n private resetTimer(url: string) {\n clearTimeout(this.timeouts.get(url));\n this.timeouts.set(\n url,\n setTimeout(() => {\n this.sortedCiphersByUrl.delete(url);\n this.timeouts.delete(url);\n }, CacheTTL)\n );\n }\n}\n\nclass Ciphers {\n lastUsedIndex = -1;\n\n constructor(private readonly ciphers: CipherView[]) {}\n\n getLastUsed() {\n this.lastUsedIndex = Math.max(this.lastUsedIndex, 0);\n return this.ciphers[this.lastUsedIndex];\n }\n\n getLastLaunched() {\n const usedCiphers = this.ciphers.filter((cipher) => cipher.localData?.lastLaunched);\n const sortedCiphers = usedCiphers.sort(\n (x, y) => y.localData.lastLaunched.valueOf() - x.localData.lastLaunched.valueOf()\n );\n return sortedCiphers[0];\n }\n\n getNextIndex() {\n return (this.lastUsedIndex + 1) % this.ciphers.length;\n }\n\n getNext() {\n return this.ciphers[this.getNextIndex()];\n }\n\n updateLastUsedIndex() {\n this.lastUsedIndex = this.getNextIndex();\n }\n}\n","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 \"./cipherRequest\";\n\nexport class CipherWithIdRequest extends CipherRequest {\n id: string;\n\n constructor(cipher: Cipher) {\n super(cipher);\n this.id = cipher.id;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherWithIdRequest } from \"./cipherWithIdRequest\";\n\nexport class CipherBulkShareRequest {\n ciphers: CipherWithIdRequest[];\n collectionIds: string[];\n\n constructor(ciphers: Cipher[], collectionIds: string[]) {\n if (ciphers != null) {\n this.ciphers = [];\n ciphers.forEach((c) => {\n this.ciphers.push(new CipherWithIdRequest(c));\n });\n }\n this.collectionIds = collectionIds;\n }\n}\n","export class CipherCollectionsRequest {\n collectionIds: string[];\n\n constructor(collectionIds: string[]) {\n this.collectionIds = collectionIds == null ? [] : collectionIds;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipherRequest\";\n\nexport class CipherCreateRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipherRequest\";\n\nexport class CipherShareRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { 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 { FileUploadService } from \"../abstractions/fileUpload.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { SearchService } from \"../abstractions/search.service\";\nimport { SettingsService } from \"../abstractions/settings.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { sequentialize } from \"../misc/sequentialize\";\nimport { Utils } from \"../misc/utils\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { 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/domainBase\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { Field } from \"../models/domain/field\";\nimport { Identity } from \"../models/domain/identity\";\nimport { Login } from \"../models/domain/login\";\nimport { LoginUri } from \"../models/domain/loginUri\";\nimport { Password } from \"../models/domain/password\";\nimport { SecureNote } from \"../models/domain/secureNote\";\nimport { SortedCiphersCache } from \"../models/domain/sortedCiphersCache\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { AttachmentRequest } from \"../models/request/attachmentRequest\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipherBulkDeleteRequest\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipherBulkMoveRequest\";\nimport { CipherBulkRestoreRequest } from \"../models/request/cipherBulkRestoreRequest\";\nimport { CipherBulkShareRequest } from \"../models/request/cipherBulkShareRequest\";\nimport { CipherCollectionsRequest } from \"../models/request/cipherCollectionsRequest\";\nimport { CipherCreateRequest } from \"../models/request/cipherCreateRequest\";\nimport { CipherRequest } from \"../models/request/cipherRequest\";\nimport { CipherShareRequest } from \"../models/request/cipherShareRequest\";\nimport { CipherResponse } from \"../models/response/cipherResponse\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\nimport { AttachmentView } from \"../models/view/attachmentView\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { FieldView } from \"../models/view/fieldView\";\nimport { PasswordHistoryView } from \"../models/view/passwordHistoryView\";\nimport { View } from \"../models/view/view\";\n\nconst DomainMatchBlacklist = new Map>([\n [\"google.com\", new Set([\"script.google.com\"])],\n]);\n\nexport class CipherService implements CipherServiceAbstraction {\n private sortedCiphersCache: SortedCiphersCache = new SortedCiphersCache(\n this.sortCiphersByLastUsed\n );\n\n constructor(\n private cryptoService: CryptoService,\n private settingsService: SettingsService,\n private apiService: ApiService,\n private fileUploadService: FileUploadService,\n private i18nService: I18nService,\n private searchService: () => SearchService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n async getDecryptedCipherCache(): Promise {\n const decryptedCiphers = await this.stateService.getDecryptedCiphers();\n return decryptedCiphers;\n }\n\n async setDecryptedCipherCache(value: CipherView[]) {\n await this.stateService.setDecryptedCiphers(value);\n if (this.searchService != null) {\n if (value == null) {\n this.searchService().clearIndex();\n } else {\n this.searchService().indexCiphers();\n }\n }\n }\n\n async clearCache(userId?: string): Promise {\n await this.clearDecryptedCiphersState(userId);\n }\n\n async encrypt(\n model: CipherView,\n key?: SymmetricCryptoKey,\n originalCipher: Cipher = null\n ): Promise {\n // Adjust password history\n if (model.id != null) {\n if (originalCipher == null) {\n originalCipher = await this.get(model.id);\n }\n if (originalCipher != null) {\n const existingCipher = await originalCipher.decrypt();\n model.passwordHistory = existingCipher.passwordHistory || [];\n if (model.type === CipherType.Login && existingCipher.type === CipherType.Login) {\n if (\n existingCipher.login.password != null &&\n existingCipher.login.password !== \"\" &&\n existingCipher.login.password !== model.login.password\n ) {\n const ph = new PasswordHistoryView();\n ph.password = existingCipher.login.password;\n ph.lastUsedDate = model.login.passwordRevisionDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n } else {\n model.login.passwordRevisionDate = existingCipher.login.passwordRevisionDate;\n }\n }\n if (existingCipher.hasFields) {\n const existingHiddenFields = existingCipher.fields.filter(\n (f) =>\n f.type === FieldType.Hidden &&\n f.name != null &&\n f.name !== \"\" &&\n f.value != null &&\n f.value !== \"\"\n );\n const hiddenFields =\n model.fields == null\n ? []\n : model.fields.filter(\n (f) => f.type === FieldType.Hidden && f.name != null && f.name !== \"\"\n );\n existingHiddenFields.forEach((ef) => {\n const matchedField = hiddenFields.find((f) => f.name === ef.name);\n if (matchedField == null || matchedField.value !== ef.value) {\n const ph = new PasswordHistoryView();\n ph.password = ef.name + \": \" + ef.value;\n ph.lastUsedDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n }\n });\n }\n }\n if (model.passwordHistory != null && model.passwordHistory.length === 0) {\n model.passwordHistory = null;\n } else if (model.passwordHistory != null && model.passwordHistory.length > 5) {\n // only save last 5 history\n model.passwordHistory = model.passwordHistory.slice(0, 5);\n }\n }\n\n const cipher = new Cipher();\n cipher.id = model.id;\n cipher.folderId = model.folderId;\n cipher.favorite = model.favorite;\n cipher.organizationId = model.organizationId;\n cipher.type = model.type;\n cipher.collectionIds = model.collectionIds;\n cipher.revisionDate = model.revisionDate;\n cipher.reprompt = model.reprompt;\n\n if (key == null && cipher.organizationId != null) {\n key = await this.cryptoService.getOrgKey(cipher.organizationId);\n if (key == null) {\n throw new Error(\"Cannot encrypt cipher for organization. No key.\");\n }\n }\n await Promise.all([\n this.encryptObjProperty(\n model,\n cipher,\n {\n name: null,\n notes: null,\n },\n key\n ),\n this.encryptCipherData(cipher, model, key),\n this.encryptFields(model.fields, key).then((fields) => {\n cipher.fields = fields;\n }),\n this.encryptPasswordHistories(model.passwordHistory, key).then((ph) => {\n cipher.passwordHistory = ph;\n }),\n this.encryptAttachments(model.attachments, key).then((attachments) => {\n cipher.attachments = attachments;\n }),\n ]);\n\n return cipher;\n }\n\n async encryptAttachments(\n attachmentsModel: AttachmentView[],\n key: SymmetricCryptoKey\n ): Promise {\n if (attachmentsModel == null || attachmentsModel.length === 0) {\n return null;\n }\n\n const promises: Promise[] = [];\n const encAttachments: Attachment[] = [];\n attachmentsModel.forEach(async (model) => {\n const attachment = new Attachment();\n attachment.id = model.id;\n attachment.size = model.size;\n attachment.sizeName = model.sizeName;\n attachment.url = model.url;\n const promise = this.encryptObjProperty(\n model,\n attachment,\n {\n fileName: null,\n },\n key\n ).then(async () => {\n if (model.key != null) {\n attachment.key = await this.cryptoService.encrypt(model.key.key, key);\n }\n encAttachments.push(attachment);\n });\n promises.push(promise);\n });\n\n await Promise.all(promises);\n return encAttachments;\n }\n\n async encryptFields(fieldsModel: FieldView[], key: SymmetricCryptoKey): Promise {\n if (!fieldsModel || !fieldsModel.length) {\n return null;\n }\n\n const self = this;\n const encFields: Field[] = [];\n await fieldsModel.reduce(async (promise, field) => {\n await promise;\n const encField = await self.encryptField(field, key);\n encFields.push(encField);\n }, Promise.resolve());\n\n return encFields;\n }\n\n async encryptField(fieldModel: FieldView, key: SymmetricCryptoKey): Promise {\n const field = new Field();\n field.type = fieldModel.type;\n field.linkedId = fieldModel.linkedId;\n // normalize boolean type field values\n if (fieldModel.type === FieldType.Boolean && fieldModel.value !== \"true\") {\n fieldModel.value = \"false\";\n }\n\n await this.encryptObjProperty(\n fieldModel,\n field,\n {\n name: null,\n value: null,\n },\n key\n );\n\n return field;\n }\n\n async encryptPasswordHistories(\n phModels: PasswordHistoryView[],\n key: SymmetricCryptoKey\n ): Promise {\n if (!phModels || !phModels.length) {\n return null;\n }\n\n const self = this;\n const encPhs: Password[] = [];\n await phModels.reduce(async (promise, ph) => {\n await promise;\n const encPh = await self.encryptPasswordHistory(ph, key);\n encPhs.push(encPh);\n }, Promise.resolve());\n\n return encPhs;\n }\n\n async encryptPasswordHistory(\n phModel: PasswordHistoryView,\n key: SymmetricCryptoKey\n ): Promise {\n const ph = new Password();\n ph.lastUsedDate = phModel.lastUsedDate;\n\n await this.encryptObjProperty(\n phModel,\n ph,\n {\n password: null,\n },\n key\n );\n\n return ph;\n }\n\n async get(id: string): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n // eslint-disable-next-line\n if (ciphers == null || !ciphers.hasOwnProperty(id)) {\n return null;\n }\n\n const localData = await this.stateService.getLocalData();\n return new Cipher(ciphers[id], 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 const userId = await this.stateService.getUserId();\n if ((await this.getDecryptedCipherCache()) != null) {\n if (\n this.searchService != null &&\n (this.searchService().indexedEntityId ?? userId) !== userId\n ) {\n await this.searchService().indexCiphers(userId, await this.getDecryptedCipherCache());\n }\n return await this.getDecryptedCipherCache();\n }\n\n const decCiphers: CipherView[] = [];\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const promises: Promise[] = [];\n const ciphers = await this.getAll();\n ciphers.forEach(async (cipher) => {\n promises.push(cipher.decrypt().then((c) => decCiphers.push(c)));\n });\n\n await Promise.all(promises);\n decCiphers.sort(this.getLocaleSortingFunction());\n await this.setDecryptedCipherCache(decCiphers);\n return decCiphers;\n }\n\n async getAllDecryptedForGrouping(groupingId: string, folder = true): Promise {\n const ciphers = await this.getAllDecrypted();\n\n return ciphers.filter((cipher) => {\n if (cipher.isDeleted) {\n return false;\n }\n if (folder && cipher.folderId === groupingId) {\n return true;\n } else if (\n !folder &&\n cipher.collectionIds != null &&\n cipher.collectionIds.indexOf(groupingId) > -1\n ) {\n return true;\n }\n\n return false;\n });\n }\n\n async getAllDecryptedForUrl(\n url: string,\n includeOtherTypes?: CipherType[],\n defaultMatch: UriMatchType = null\n ): Promise {\n if (url == null && includeOtherTypes == null) {\n return Promise.resolve([]);\n }\n\n const domain = Utils.getDomain(url);\n const eqDomainsPromise =\n domain == null\n ? Promise.resolve([])\n : 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 ciphers = await this.apiService.getCiphersOrganization(organizationId);\n if (ciphers != null && ciphers.data != null && ciphers.data.length) {\n const decCiphers: CipherView[] = [];\n const promises: any[] = [];\n ciphers.data.forEach((r) => {\n const data = new CipherData(r);\n const cipher = new Cipher(data);\n promises.push(cipher.decrypt().then((c) => decCiphers.push(c)));\n });\n await Promise.all(promises);\n decCiphers.sort(this.getLocaleSortingFunction());\n return decCiphers;\n } else {\n return [];\n }\n }\n\n async getLastUsedForUrl(url: string, autofillOnPageLoad = false): Promise {\n return this.getCipherForUrl(url, true, false, autofillOnPageLoad);\n }\n\n async getLastLaunchedForUrl(url: string, autofillOnPageLoad = false): Promise {\n return this.getCipherForUrl(url, false, true, autofillOnPageLoad);\n }\n\n async getNextCipherForUrl(url: string): Promise {\n return this.getCipherForUrl(url, false, false, false);\n }\n\n updateLastUsedIndexForUrl(url: string) {\n this.sortedCiphersCache.updateLastUsedIndex(url);\n }\n\n async updateLastUsedDate(id: string): Promise {\n let ciphersLocalData = await this.stateService.getLocalData();\n if (!ciphersLocalData) {\n ciphersLocalData = {};\n }\n\n if (ciphersLocalData[id]) {\n ciphersLocalData[id].lastUsedDate = new Date().getTime();\n } else {\n ciphersLocalData[id] = {\n lastUsedDate: new Date().getTime(),\n };\n }\n\n await this.stateService.setLocalData(ciphersLocalData);\n\n const decryptedCipherCache = await this.stateService.getDecryptedCiphers();\n if (!decryptedCipherCache) {\n return;\n }\n\n for (let i = 0; i < decryptedCipherCache.length; i++) {\n const cached = decryptedCipherCache[i];\n if (cached.id === id) {\n cached.localData = ciphersLocalData[id];\n break;\n }\n }\n await this.stateService.setDecryptedCiphers(decryptedCipherCache);\n }\n\n async updateLastLaunchedDate(id: string): Promise {\n let ciphersLocalData = await this.stateService.getLocalData();\n if (!ciphersLocalData) {\n ciphersLocalData = {};\n }\n\n if (ciphersLocalData[id]) {\n ciphersLocalData[id].lastLaunched = new Date().getTime();\n } else {\n ciphersLocalData[id] = {\n lastUsedDate: new Date().getTime(),\n };\n }\n\n await this.stateService.setLocalData(ciphersLocalData);\n\n const decryptedCipherCache = await this.stateService.getDecryptedCiphers();\n if (!decryptedCipherCache) {\n return;\n }\n\n for (let i = 0; i < decryptedCipherCache.length; i++) {\n const cached = decryptedCipherCache[i];\n if (cached.id === id) {\n cached.localData = ciphersLocalData[id];\n break;\n }\n }\n await this.stateService.setDecryptedCiphers(decryptedCipherCache);\n }\n\n async saveNeverDomain(domain: string): Promise {\n if (domain == null) {\n return;\n }\n\n let domains = await this.stateService.getNeverDomains();\n if (!domains) {\n domains = {};\n }\n domains[domain] = null;\n await this.stateService.setNeverDomains(domains);\n }\n\n async saveWithServer(cipher: Cipher): Promise {\n let response: CipherResponse;\n if (cipher.id == null) {\n if (cipher.collectionIds != null) {\n const request = new CipherCreateRequest(cipher);\n response = await this.apiService.postCipherCreate(request);\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.postCipher(request);\n }\n cipher.id = response.id;\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.putCipher(cipher.id, request);\n }\n\n const data = new CipherData(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 \"./baseResponse\";\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 \"@bitwarden/common/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 EEFLongWordList = [\n \"abacus\",\n \"abdomen\",\n \"abdominal\",\n \"abide\",\n \"abiding\",\n \"ability\",\n \"ablaze\",\n \"able\",\n \"abnormal\",\n \"abrasion\",\n \"abrasive\",\n \"abreast\",\n \"abridge\",\n \"abroad\",\n \"abruptly\",\n \"absence\",\n \"absentee\",\n \"absently\",\n \"absinthe\",\n \"absolute\",\n \"absolve\",\n \"abstain\",\n \"abstract\",\n \"absurd\",\n \"accent\",\n \"acclaim\",\n \"acclimate\",\n \"accompany\",\n \"account\",\n \"accuracy\",\n \"accurate\",\n \"accustom\",\n \"acetone\",\n \"achiness\",\n \"aching\",\n \"acid\",\n \"acorn\",\n \"acquaint\",\n \"acquire\",\n \"acre\",\n \"acrobat\",\n \"acronym\",\n \"acting\",\n \"action\",\n \"activate\",\n \"activator\",\n \"active\",\n \"activism\",\n \"activist\",\n \"activity\",\n \"actress\",\n \"acts\",\n \"acutely\",\n \"acuteness\",\n \"aeration\",\n \"aerobics\",\n \"aerosol\",\n \"aerospace\",\n \"afar\",\n \"affair\",\n \"affected\",\n \"affecting\",\n \"affection\",\n \"affidavit\",\n \"affiliate\",\n \"affirm\",\n \"affix\",\n \"afflicted\",\n \"affluent\",\n \"afford\",\n \"affront\",\n \"aflame\",\n \"afloat\",\n \"aflutter\",\n \"afoot\",\n \"afraid\",\n \"afterglow\",\n \"afterlife\",\n \"aftermath\",\n \"aftermost\",\n \"afternoon\",\n \"aged\",\n \"ageless\",\n \"agency\",\n \"agenda\",\n \"agent\",\n \"aggregate\",\n \"aghast\",\n \"agile\",\n \"agility\",\n \"aging\",\n \"agnostic\",\n \"agonize\",\n \"agonizing\",\n \"agony\",\n \"agreeable\",\n \"agreeably\",\n \"agreed\",\n \"agreeing\",\n \"agreement\",\n \"aground\",\n \"ahead\",\n \"ahoy\",\n \"aide\",\n \"aids\",\n \"aim\",\n \"ajar\",\n \"alabaster\",\n \"alarm\",\n \"albatross\",\n \"album\",\n \"alfalfa\",\n \"algebra\",\n \"algorithm\",\n \"alias\",\n \"alibi\",\n \"alienable\",\n \"alienate\",\n \"aliens\",\n \"alike\",\n \"alive\",\n \"alkaline\",\n \"alkalize\",\n \"almanac\",\n \"almighty\",\n \"almost\",\n \"aloe\",\n \"aloft\",\n \"aloha\",\n \"alone\",\n \"alongside\",\n \"aloof\",\n \"alphabet\",\n \"alright\",\n \"although\",\n \"altitude\",\n \"alto\",\n \"aluminum\",\n \"alumni\",\n \"always\",\n \"amaretto\",\n \"amaze\",\n \"amazingly\",\n \"amber\",\n \"ambiance\",\n \"ambiguity\",\n \"ambiguous\",\n \"ambition\",\n \"ambitious\",\n \"ambulance\",\n \"ambush\",\n \"amendable\",\n \"amendment\",\n \"amends\",\n \"amenity\",\n \"amiable\",\n \"amicably\",\n \"amid\",\n \"amigo\",\n \"amino\",\n \"amiss\",\n \"ammonia\",\n \"ammonium\",\n \"amnesty\",\n \"amniotic\",\n \"among\",\n \"amount\",\n \"amperage\",\n \"ample\",\n \"amplifier\",\n \"amplify\",\n \"amply\",\n \"amuck\",\n \"amulet\",\n \"amusable\",\n \"amused\",\n \"amusement\",\n \"amuser\",\n \"amusing\",\n \"anaconda\",\n \"anaerobic\",\n \"anagram\",\n \"anatomist\",\n \"anatomy\",\n \"anchor\",\n \"anchovy\",\n \"ancient\",\n \"android\",\n \"anemia\",\n \"anemic\",\n \"aneurism\",\n \"anew\",\n \"angelfish\",\n \"angelic\",\n \"anger\",\n \"angled\",\n \"angler\",\n \"angles\",\n \"angling\",\n \"angrily\",\n \"angriness\",\n \"anguished\",\n \"angular\",\n \"animal\",\n \"animate\",\n \"animating\",\n \"animation\",\n \"animator\",\n \"anime\",\n \"animosity\",\n \"ankle\",\n \"annex\",\n \"annotate\",\n \"announcer\",\n \"annoying\",\n \"annually\",\n \"annuity\",\n \"anointer\",\n \"another\",\n \"answering\",\n \"antacid\",\n \"antarctic\",\n \"anteater\",\n \"antelope\",\n \"antennae\",\n \"anthem\",\n \"anthill\",\n \"anthology\",\n \"antibody\",\n \"antics\",\n \"antidote\",\n \"antihero\",\n \"antiquely\",\n \"antiques\",\n \"antiquity\",\n \"antirust\",\n \"antitoxic\",\n \"antitrust\",\n \"antiviral\",\n \"antivirus\",\n \"antler\",\n \"antonym\",\n \"antsy\",\n \"anvil\",\n \"anybody\",\n \"anyhow\",\n \"anymore\",\n \"anyone\",\n \"anyplace\",\n \"anything\",\n \"anytime\",\n \"anyway\",\n \"anywhere\",\n \"aorta\",\n \"apache\",\n \"apostle\",\n \"appealing\",\n \"appear\",\n \"appease\",\n \"appeasing\",\n \"appendage\",\n \"appendix\",\n \"appetite\",\n \"appetizer\",\n \"applaud\",\n \"applause\",\n \"apple\",\n \"appliance\",\n \"applicant\",\n \"applied\",\n \"apply\",\n \"appointee\",\n \"appraisal\",\n \"appraiser\",\n \"apprehend\",\n \"approach\",\n \"approval\",\n \"approve\",\n \"apricot\",\n \"april\",\n \"apron\",\n \"aptitude\",\n \"aptly\",\n \"aqua\",\n \"aqueduct\",\n \"arbitrary\",\n \"arbitrate\",\n \"ardently\",\n \"area\",\n \"arena\",\n \"arguable\",\n \"arguably\",\n \"argue\",\n \"arise\",\n \"armadillo\",\n \"armband\",\n \"armchair\",\n \"armed\",\n \"armful\",\n \"armhole\",\n \"arming\",\n \"armless\",\n \"armoire\",\n \"armored\",\n \"armory\",\n \"armrest\",\n \"army\",\n \"aroma\",\n \"arose\",\n \"around\",\n \"arousal\",\n \"arrange\",\n \"array\",\n \"arrest\",\n \"arrival\",\n \"arrive\",\n \"arrogance\",\n \"arrogant\",\n \"arson\",\n \"art\",\n \"ascend\",\n \"ascension\",\n \"ascent\",\n \"ascertain\",\n \"ashamed\",\n \"ashen\",\n \"ashes\",\n \"ashy\",\n \"aside\",\n \"askew\",\n \"asleep\",\n \"asparagus\",\n \"aspect\",\n \"aspirate\",\n \"aspire\",\n \"aspirin\",\n \"astonish\",\n \"astound\",\n \"astride\",\n \"astrology\",\n \"astronaut\",\n \"astronomy\",\n \"astute\",\n \"atlantic\",\n \"atlas\",\n \"atom\",\n \"atonable\",\n \"atop\",\n \"atrium\",\n \"atrocious\",\n \"atrophy\",\n \"attach\",\n \"attain\",\n \"attempt\",\n \"attendant\",\n \"attendee\",\n \"attention\",\n \"attentive\",\n \"attest\",\n \"attic\",\n \"attire\",\n \"attitude\",\n \"attractor\",\n \"attribute\",\n \"atypical\",\n \"auction\",\n \"audacious\",\n \"audacity\",\n \"audible\",\n \"audibly\",\n \"audience\",\n \"audio\",\n \"audition\",\n \"augmented\",\n \"august\",\n \"authentic\",\n \"author\",\n \"autism\",\n \"autistic\",\n \"autograph\",\n \"automaker\",\n \"automated\",\n \"automatic\",\n \"autopilot\",\n \"available\",\n \"avalanche\",\n \"avatar\",\n \"avenge\",\n \"avenging\",\n \"avenue\",\n \"average\",\n \"aversion\",\n \"avert\",\n \"aviation\",\n \"aviator\",\n \"avid\",\n \"avoid\",\n \"await\",\n \"awaken\",\n \"award\",\n \"aware\",\n \"awhile\",\n \"awkward\",\n \"awning\",\n \"awoke\",\n \"awry\",\n \"axis\",\n \"babble\",\n \"babbling\",\n \"babied\",\n \"baboon\",\n \"backache\",\n \"backboard\",\n \"backboned\",\n \"backdrop\",\n \"backed\",\n \"backer\",\n \"backfield\",\n \"backfire\",\n \"backhand\",\n \"backing\",\n \"backlands\",\n \"backlash\",\n \"backless\",\n \"backlight\",\n \"backlit\",\n \"backlog\",\n \"backpack\",\n \"backpedal\",\n \"backrest\",\n \"backroom\",\n \"backshift\",\n \"backside\",\n \"backslid\",\n \"backspace\",\n \"backspin\",\n \"backstab\",\n \"backstage\",\n \"backtalk\",\n \"backtrack\",\n \"backup\",\n \"backward\",\n \"backwash\",\n \"backwater\",\n \"backyard\",\n \"bacon\",\n \"bacteria\",\n \"bacterium\",\n \"badass\",\n \"badge\",\n \"badland\",\n \"badly\",\n \"badness\",\n \"baffle\",\n \"baffling\",\n \"bagel\",\n \"bagful\",\n \"baggage\",\n \"bagged\",\n \"baggie\",\n \"bagginess\",\n \"bagging\",\n \"baggy\",\n \"bagpipe\",\n \"baguette\",\n \"baked\",\n \"bakery\",\n \"bakeshop\",\n \"baking\",\n \"balance\",\n \"balancing\",\n \"balcony\",\n \"balmy\",\n \"balsamic\",\n \"bamboo\",\n \"banana\",\n \"banish\",\n \"banister\",\n \"banjo\",\n \"bankable\",\n \"bankbook\",\n \"banked\",\n \"banker\",\n \"banking\",\n \"banknote\",\n \"bankroll\",\n \"banner\",\n \"bannister\",\n \"banshee\",\n \"banter\",\n \"barbecue\",\n \"barbed\",\n \"barbell\",\n \"barber\",\n \"barcode\",\n \"barge\",\n \"bargraph\",\n \"barista\",\n \"baritone\",\n \"barley\",\n \"barmaid\",\n \"barman\",\n \"barn\",\n \"barometer\",\n \"barrack\",\n \"barracuda\",\n \"barrel\",\n \"barrette\",\n \"barricade\",\n \"barrier\",\n \"barstool\",\n \"bartender\",\n \"barterer\",\n \"bash\",\n \"basically\",\n \"basics\",\n \"basil\",\n \"basin\",\n \"basis\",\n \"basket\",\n \"batboy\",\n \"batch\",\n \"bath\",\n \"baton\",\n \"bats\",\n \"battalion\",\n \"battered\",\n \"battering\",\n \"battery\",\n \"batting\",\n \"battle\",\n \"bauble\",\n \"bazooka\",\n \"blabber\",\n \"bladder\",\n \"blade\",\n \"blah\",\n \"blame\",\n \"blaming\",\n \"blanching\",\n \"blandness\",\n \"blank\",\n \"blaspheme\",\n \"blasphemy\",\n \"blast\",\n \"blatancy\",\n \"blatantly\",\n \"blazer\",\n \"blazing\",\n \"bleach\",\n \"bleak\",\n \"bleep\",\n \"blemish\",\n \"blend\",\n \"bless\",\n \"blighted\",\n \"blimp\",\n \"bling\",\n \"blinked\",\n \"blinker\",\n \"blinking\",\n \"blinks\",\n \"blip\",\n \"blissful\",\n \"blitz\",\n \"blizzard\",\n \"bloated\",\n \"bloating\",\n \"blob\",\n \"blog\",\n \"bloomers\",\n \"blooming\",\n \"blooper\",\n \"blot\",\n \"blouse\",\n \"blubber\",\n \"bluff\",\n \"bluish\",\n \"blunderer\",\n \"blunt\",\n \"blurb\",\n \"blurred\",\n \"blurry\",\n \"blurt\",\n \"blush\",\n \"blustery\",\n \"boaster\",\n \"boastful\",\n \"boasting\",\n \"boat\",\n \"bobbed\",\n \"bobbing\",\n \"bobble\",\n \"bobcat\",\n \"bobsled\",\n \"bobtail\",\n \"bodacious\",\n \"body\",\n \"bogged\",\n \"boggle\",\n \"bogus\",\n \"boil\",\n \"bok\",\n \"bolster\",\n \"bolt\",\n \"bonanza\",\n \"bonded\",\n \"bonding\",\n \"bondless\",\n \"boned\",\n \"bonehead\",\n \"boneless\",\n \"bonelike\",\n \"boney\",\n \"bonfire\",\n \"bonnet\",\n \"bonsai\",\n \"bonus\",\n \"bony\",\n \"boogeyman\",\n \"boogieman\",\n \"book\",\n \"boondocks\",\n \"booted\",\n \"booth\",\n \"bootie\",\n \"booting\",\n \"bootlace\",\n \"bootleg\",\n \"boots\",\n \"boozy\",\n \"borax\",\n \"boring\",\n \"borough\",\n \"borrower\",\n \"borrowing\",\n \"boss\",\n \"botanical\",\n \"botanist\",\n \"botany\",\n \"botch\",\n \"both\",\n \"bottle\",\n \"bottling\",\n \"bottom\",\n \"bounce\",\n \"bouncing\",\n \"bouncy\",\n \"bounding\",\n \"boundless\",\n \"bountiful\",\n \"bovine\",\n \"boxcar\",\n \"boxer\",\n \"boxing\",\n \"boxlike\",\n \"boxy\",\n \"breach\",\n \"breath\",\n \"breeches\",\n \"breeching\",\n \"breeder\",\n \"breeding\",\n \"breeze\",\n \"breezy\",\n \"brethren\",\n \"brewery\",\n \"brewing\",\n \"briar\",\n \"bribe\",\n \"brick\",\n \"bride\",\n \"bridged\",\n \"brigade\",\n \"bright\",\n \"brilliant\",\n \"brim\",\n \"bring\",\n \"brink\",\n \"brisket\",\n \"briskly\",\n \"briskness\",\n \"bristle\",\n \"brittle\",\n \"broadband\",\n \"broadcast\",\n \"broaden\",\n \"broadly\",\n \"broadness\",\n \"broadside\",\n \"broadways\",\n \"broiler\",\n \"broiling\",\n \"broken\",\n \"broker\",\n \"bronchial\",\n \"bronco\",\n \"bronze\",\n \"bronzing\",\n \"brook\",\n \"broom\",\n \"brought\",\n \"browbeat\",\n \"brownnose\",\n \"browse\",\n \"browsing\",\n \"bruising\",\n \"brunch\",\n \"brunette\",\n \"brunt\",\n \"brush\",\n \"brussels\",\n \"brute\",\n \"brutishly\",\n \"bubble\",\n \"bubbling\",\n \"bubbly\",\n \"buccaneer\",\n \"bucked\",\n \"bucket\",\n \"buckle\",\n \"buckshot\",\n \"buckskin\",\n \"bucktooth\",\n \"buckwheat\",\n \"buddhism\",\n \"buddhist\",\n \"budding\",\n \"buddy\",\n \"budget\",\n \"buffalo\",\n \"buffed\",\n \"buffer\",\n \"buffing\",\n \"buffoon\",\n \"buggy\",\n \"bulb\",\n \"bulge\",\n \"bulginess\",\n \"bulgur\",\n \"bulk\",\n \"bulldog\",\n \"bulldozer\",\n \"bullfight\",\n \"bullfrog\",\n \"bullhorn\",\n \"bullion\",\n \"bullish\",\n \"bullpen\",\n \"bullring\",\n \"bullseye\",\n \"bullwhip\",\n \"bully\",\n \"bunch\",\n \"bundle\",\n \"bungee\",\n \"bunion\",\n \"bunkbed\",\n \"bunkhouse\",\n \"bunkmate\",\n \"bunny\",\n \"bunt\",\n \"busboy\",\n \"bush\",\n \"busily\",\n \"busload\",\n \"bust\",\n \"busybody\",\n \"buzz\",\n \"cabana\",\n \"cabbage\",\n \"cabbie\",\n \"cabdriver\",\n \"cable\",\n \"caboose\",\n \"cache\",\n \"cackle\",\n \"cacti\",\n \"cactus\",\n \"caddie\",\n \"caddy\",\n \"cadet\",\n \"cadillac\",\n \"cadmium\",\n \"cage\",\n \"cahoots\",\n \"cake\",\n \"calamari\",\n \"calamity\",\n \"calcium\",\n \"calculate\",\n \"calculus\",\n \"caliber\",\n \"calibrate\",\n \"calm\",\n \"caloric\",\n \"calorie\",\n \"calzone\",\n \"camcorder\",\n \"cameo\",\n \"camera\",\n \"camisole\",\n \"camper\",\n \"campfire\",\n \"camping\",\n \"campsite\",\n \"campus\",\n \"canal\",\n \"canary\",\n \"cancel\",\n \"candied\",\n \"candle\",\n \"candy\",\n \"cane\",\n \"canine\",\n \"canister\",\n \"cannabis\",\n \"canned\",\n \"canning\",\n \"cannon\",\n \"cannot\",\n \"canola\",\n \"canon\",\n \"canopener\",\n \"canopy\",\n \"canteen\",\n \"canyon\",\n \"capable\",\n \"capably\",\n \"capacity\",\n \"cape\",\n \"capillary\",\n \"capital\",\n \"capitol\",\n \"capped\",\n \"capricorn\",\n \"capsize\",\n \"capsule\",\n \"caption\",\n \"captivate\",\n \"captive\",\n \"captivity\",\n \"capture\",\n \"caramel\",\n \"carat\",\n \"caravan\",\n \"carbon\",\n \"cardboard\",\n \"carded\",\n \"cardiac\",\n \"cardigan\",\n \"cardinal\",\n \"cardstock\",\n \"carefully\",\n \"caregiver\",\n \"careless\",\n \"caress\",\n \"caretaker\",\n \"cargo\",\n \"caring\",\n \"carless\",\n \"carload\",\n \"carmaker\",\n \"carnage\",\n \"carnation\",\n \"carnival\",\n \"carnivore\",\n \"carol\",\n \"carpenter\",\n \"carpentry\",\n \"carpool\",\n \"carport\",\n \"carried\",\n \"carrot\",\n \"carrousel\",\n \"carry\",\n \"cartel\",\n \"cartload\",\n \"carton\",\n \"cartoon\",\n \"cartridge\",\n \"cartwheel\",\n \"carve\",\n \"carving\",\n \"carwash\",\n \"cascade\",\n \"case\",\n \"cash\",\n \"casing\",\n \"casino\",\n \"casket\",\n \"cassette\",\n \"casually\",\n \"casualty\",\n \"catacomb\",\n \"catalog\",\n \"catalyst\",\n \"catalyze\",\n \"catapult\",\n \"cataract\",\n \"catatonic\",\n \"catcall\",\n \"catchable\",\n \"catcher\",\n \"catching\",\n \"catchy\",\n \"caterer\",\n \"catering\",\n \"catfight\",\n \"catfish\",\n \"cathedral\",\n \"cathouse\",\n \"catlike\",\n \"catnap\",\n \"catnip\",\n \"catsup\",\n \"cattail\",\n \"cattishly\",\n \"cattle\",\n \"catty\",\n \"catwalk\",\n \"caucasian\",\n \"caucus\",\n \"causal\",\n \"causation\",\n \"cause\",\n \"causing\",\n \"cauterize\",\n \"caution\",\n \"cautious\",\n \"cavalier\",\n \"cavalry\",\n \"caviar\",\n \"cavity\",\n \"cedar\",\n \"celery\",\n \"celestial\",\n \"celibacy\",\n \"celibate\",\n \"celtic\",\n \"cement\",\n \"census\",\n \"ceramics\",\n \"ceremony\",\n \"certainly\",\n \"certainty\",\n \"certified\",\n \"certify\",\n \"cesarean\",\n \"cesspool\",\n \"chafe\",\n \"chaffing\",\n \"chain\",\n \"chair\",\n \"chalice\",\n \"challenge\",\n \"chamber\",\n \"chamomile\",\n \"champion\",\n \"chance\",\n \"change\",\n \"channel\",\n \"chant\",\n \"chaos\",\n \"chaperone\",\n \"chaplain\",\n \"chapped\",\n \"chaps\",\n \"chapter\",\n \"character\",\n \"charbroil\",\n \"charcoal\",\n \"charger\",\n \"charging\",\n \"chariot\",\n \"charity\",\n \"charm\",\n \"charred\",\n \"charter\",\n \"charting\",\n \"chase\",\n \"chasing\",\n \"chaste\",\n \"chastise\",\n \"chastity\",\n \"chatroom\",\n \"chatter\",\n \"chatting\",\n \"chatty\",\n \"cheating\",\n \"cheddar\",\n \"cheek\",\n \"cheer\",\n \"cheese\",\n \"cheesy\",\n \"chef\",\n \"chemicals\",\n \"chemist\",\n \"chemo\",\n \"cherisher\",\n \"cherub\",\n \"chess\",\n \"chest\",\n \"chevron\",\n \"chevy\",\n \"chewable\",\n \"chewer\",\n \"chewing\",\n \"chewy\",\n \"chief\",\n \"chihuahua\",\n \"childcare\",\n \"childhood\",\n \"childish\",\n \"childless\",\n \"childlike\",\n \"chili\",\n \"chill\",\n \"chimp\",\n \"chip\",\n \"chirping\",\n \"chirpy\",\n \"chitchat\",\n \"chivalry\",\n \"chive\",\n \"chloride\",\n \"chlorine\",\n \"choice\",\n \"chokehold\",\n \"choking\",\n \"chomp\",\n \"chooser\",\n \"choosing\",\n \"choosy\",\n \"chop\",\n \"chosen\",\n \"chowder\",\n \"chowtime\",\n \"chrome\",\n \"chubby\",\n \"chuck\",\n \"chug\",\n \"chummy\",\n \"chump\",\n \"chunk\",\n \"churn\",\n \"chute\",\n \"cider\",\n \"cilantro\",\n \"cinch\",\n \"cinema\",\n \"cinnamon\",\n \"circle\",\n \"circling\",\n \"circular\",\n \"circulate\",\n \"circus\",\n \"citable\",\n \"citadel\",\n \"citation\",\n \"citizen\",\n \"citric\",\n \"citrus\",\n \"city\",\n \"civic\",\n \"civil\",\n \"clad\",\n \"claim\",\n \"clambake\",\n \"clammy\",\n \"clamor\",\n \"clamp\",\n \"clamshell\",\n \"clang\",\n \"clanking\",\n \"clapped\",\n \"clapper\",\n \"clapping\",\n \"clarify\",\n \"clarinet\",\n \"clarity\",\n \"clash\",\n \"clasp\",\n \"class\",\n \"clatter\",\n \"clause\",\n \"clavicle\",\n \"claw\",\n \"clay\",\n \"clean\",\n \"clear\",\n \"cleat\",\n \"cleaver\",\n \"cleft\",\n \"clench\",\n \"clergyman\",\n \"clerical\",\n \"clerk\",\n \"clever\",\n \"clicker\",\n \"client\",\n \"climate\",\n \"climatic\",\n \"cling\",\n \"clinic\",\n \"clinking\",\n \"clip\",\n \"clique\",\n \"cloak\",\n \"clobber\",\n \"clock\",\n \"clone\",\n \"cloning\",\n \"closable\",\n \"closure\",\n \"clothes\",\n \"clothing\",\n \"cloud\",\n \"clover\",\n \"clubbed\",\n \"clubbing\",\n \"clubhouse\",\n \"clump\",\n \"clumsily\",\n \"clumsy\",\n \"clunky\",\n \"clustered\",\n \"clutch\",\n \"clutter\",\n \"coach\",\n \"coagulant\",\n \"coastal\",\n \"coaster\",\n \"coasting\",\n \"coastland\",\n \"coastline\",\n \"coat\",\n \"coauthor\",\n \"cobalt\",\n \"cobbler\",\n \"cobweb\",\n \"cocoa\",\n \"coconut\",\n \"cod\",\n \"coeditor\",\n \"coerce\",\n \"coexist\",\n \"coffee\",\n \"cofounder\",\n \"cognition\",\n \"cognitive\",\n \"cogwheel\",\n \"coherence\",\n \"coherent\",\n \"cohesive\",\n \"coil\",\n \"coke\",\n \"cola\",\n \"cold\",\n \"coleslaw\",\n \"coliseum\",\n \"collage\",\n \"collapse\",\n \"collar\",\n \"collected\",\n \"collector\",\n \"collide\",\n \"collie\",\n \"collision\",\n \"colonial\",\n \"colonist\",\n \"colonize\",\n \"colony\",\n \"colossal\",\n \"colt\",\n \"coma\",\n \"come\",\n \"comfort\",\n \"comfy\",\n \"comic\",\n \"coming\",\n \"comma\",\n \"commence\",\n \"commend\",\n \"comment\",\n \"commerce\",\n \"commode\",\n \"commodity\",\n \"commodore\",\n \"common\",\n \"commotion\",\n \"commute\",\n \"commuting\",\n \"compacted\",\n \"compacter\",\n \"compactly\",\n \"compactor\",\n \"companion\",\n \"company\",\n \"compare\",\n \"compel\",\n \"compile\",\n \"comply\",\n \"component\",\n \"composed\",\n \"composer\",\n \"composite\",\n \"compost\",\n \"composure\",\n \"compound\",\n \"compress\",\n \"comprised\",\n \"computer\",\n \"computing\",\n \"comrade\",\n \"concave\",\n \"conceal\",\n \"conceded\",\n \"concept\",\n \"concerned\",\n \"concert\",\n \"conch\",\n \"concierge\",\n \"concise\",\n \"conclude\",\n \"concrete\",\n \"concur\",\n \"condense\",\n \"condiment\",\n \"condition\",\n \"condone\",\n \"conducive\",\n \"conductor\",\n \"conduit\",\n \"cone\",\n \"confess\",\n \"confetti\",\n \"confidant\",\n \"confident\",\n \"confider\",\n \"confiding\",\n \"configure\",\n \"confined\",\n \"confining\",\n \"confirm\",\n \"conflict\",\n \"conform\",\n \"confound\",\n \"confront\",\n \"confused\",\n \"confusing\",\n \"confusion\",\n \"congenial\",\n \"congested\",\n \"congrats\",\n \"congress\",\n \"conical\",\n \"conjoined\",\n \"conjure\",\n \"conjuror\",\n \"connected\",\n \"connector\",\n \"consensus\",\n \"consent\",\n \"console\",\n \"consoling\",\n \"consonant\",\n \"constable\",\n \"constant\",\n \"constrain\",\n \"constrict\",\n \"construct\",\n \"consult\",\n \"consumer\",\n \"consuming\",\n \"contact\",\n \"container\",\n \"contempt\",\n \"contend\",\n \"contented\",\n \"contently\",\n \"contents\",\n \"contest\",\n \"context\",\n \"contort\",\n \"contour\",\n \"contrite\",\n \"control\",\n \"contusion\",\n \"convene\",\n \"convent\",\n \"copartner\",\n \"cope\",\n \"copied\",\n \"copier\",\n \"copilot\",\n \"coping\",\n \"copious\",\n \"copper\",\n \"copy\",\n \"coral\",\n \"cork\",\n \"cornball\",\n \"cornbread\",\n \"corncob\",\n \"cornea\",\n \"corned\",\n \"corner\",\n \"cornfield\",\n \"cornflake\",\n \"cornhusk\",\n \"cornmeal\",\n \"cornstalk\",\n \"corny\",\n \"coronary\",\n \"coroner\",\n \"corporal\",\n \"corporate\",\n \"corral\",\n \"correct\",\n \"corridor\",\n \"corrode\",\n \"corroding\",\n \"corrosive\",\n \"corsage\",\n \"corset\",\n \"cortex\",\n \"cosigner\",\n \"cosmetics\",\n \"cosmic\",\n \"cosmos\",\n \"cosponsor\",\n \"cost\",\n \"cottage\",\n \"cotton\",\n \"couch\",\n \"cough\",\n \"could\",\n \"countable\",\n \"countdown\",\n \"counting\",\n \"countless\",\n \"country\",\n \"county\",\n \"courier\",\n \"covenant\",\n \"cover\",\n \"coveted\",\n \"coveting\",\n \"coyness\",\n \"cozily\",\n \"coziness\",\n \"cozy\",\n \"crabbing\",\n \"crabgrass\",\n \"crablike\",\n \"crabmeat\",\n \"cradle\",\n \"cradling\",\n \"crafter\",\n \"craftily\",\n \"craftsman\",\n \"craftwork\",\n \"crafty\",\n \"cramp\",\n \"cranberry\",\n \"crane\",\n \"cranial\",\n \"cranium\",\n \"crank\",\n \"crate\",\n \"crave\",\n \"craving\",\n \"crawfish\",\n \"crawlers\",\n \"crawling\",\n \"crayfish\",\n \"crayon\",\n \"crazed\",\n \"crazily\",\n \"craziness\",\n \"crazy\",\n \"creamed\",\n \"creamer\",\n \"creamlike\",\n \"crease\",\n \"creasing\",\n \"creatable\",\n \"create\",\n \"creation\",\n \"creative\",\n \"creature\",\n \"credible\",\n \"credibly\",\n \"credit\",\n \"creed\",\n \"creme\",\n \"creole\",\n \"crepe\",\n \"crept\",\n \"crescent\",\n \"crested\",\n \"cresting\",\n \"crestless\",\n \"crevice\",\n \"crewless\",\n \"crewman\",\n \"crewmate\",\n \"crib\",\n \"cricket\",\n \"cried\",\n \"crier\",\n \"crimp\",\n \"crimson\",\n \"cringe\",\n \"cringing\",\n \"crinkle\",\n \"crinkly\",\n \"crisped\",\n \"crisping\",\n \"crisply\",\n \"crispness\",\n \"crispy\",\n \"criteria\",\n \"critter\",\n \"croak\",\n \"crock\",\n \"crook\",\n \"croon\",\n \"crop\",\n \"cross\",\n \"crouch\",\n \"crouton\",\n \"crowbar\",\n \"crowd\",\n \"crown\",\n \"crucial\",\n \"crudely\",\n \"crudeness\",\n \"cruelly\",\n \"cruelness\",\n \"cruelty\",\n \"crumb\",\n \"crummiest\",\n \"crummy\",\n \"crumpet\",\n \"crumpled\",\n \"cruncher\",\n \"crunching\",\n \"crunchy\",\n \"crusader\",\n \"crushable\",\n \"crushed\",\n \"crusher\",\n \"crushing\",\n \"crust\",\n \"crux\",\n \"crying\",\n \"cryptic\",\n \"crystal\",\n \"cubbyhole\",\n \"cube\",\n \"cubical\",\n \"cubicle\",\n \"cucumber\",\n \"cuddle\",\n \"cuddly\",\n \"cufflink\",\n \"culinary\",\n \"culminate\",\n \"culpable\",\n \"culprit\",\n \"cultivate\",\n \"cultural\",\n \"culture\",\n \"cupbearer\",\n \"cupcake\",\n \"cupid\",\n \"cupped\",\n \"cupping\",\n \"curable\",\n \"curator\",\n \"curdle\",\n \"cure\",\n \"curfew\",\n \"curing\",\n \"curled\",\n \"curler\",\n \"curliness\",\n \"curling\",\n \"curly\",\n \"curry\",\n \"curse\",\n \"cursive\",\n \"cursor\",\n \"curtain\",\n \"curtly\",\n \"curtsy\",\n \"curvature\",\n \"curve\",\n \"curvy\",\n \"cushy\",\n \"cusp\",\n \"cussed\",\n \"custard\",\n \"custodian\",\n \"custody\",\n \"customary\",\n \"customer\",\n \"customize\",\n \"customs\",\n \"cut\",\n \"cycle\",\n \"cyclic\",\n \"cycling\",\n \"cyclist\",\n \"cylinder\",\n \"cymbal\",\n \"cytoplasm\",\n \"cytoplast\",\n \"dab\",\n \"dad\",\n \"daffodil\",\n \"dagger\",\n \"daily\",\n \"daintily\",\n \"dainty\",\n \"dairy\",\n \"daisy\",\n \"dallying\",\n \"dance\",\n \"dancing\",\n \"dandelion\",\n \"dander\",\n \"dandruff\",\n \"dandy\",\n \"danger\",\n \"dangle\",\n \"dangling\",\n \"daredevil\",\n \"dares\",\n \"daringly\",\n \"darkened\",\n \"darkening\",\n \"darkish\",\n \"darkness\",\n \"darkroom\",\n \"darling\",\n \"darn\",\n \"dart\",\n \"darwinism\",\n \"dash\",\n \"dastardly\",\n \"data\",\n \"datebook\",\n \"dating\",\n \"daughter\",\n \"daunting\",\n \"dawdler\",\n \"dawn\",\n \"daybed\",\n \"daybreak\",\n \"daycare\",\n \"daydream\",\n \"daylight\",\n \"daylong\",\n \"dayroom\",\n \"daytime\",\n \"dazzler\",\n \"dazzling\",\n \"deacon\",\n \"deafening\",\n \"deafness\",\n \"dealer\",\n \"dealing\",\n \"dealmaker\",\n \"dealt\",\n \"dean\",\n \"debatable\",\n \"debate\",\n \"debating\",\n \"debit\",\n \"debrief\",\n \"debtless\",\n \"debtor\",\n \"debug\",\n \"debunk\",\n \"decade\",\n \"decaf\",\n \"decal\",\n \"decathlon\",\n \"decay\",\n \"deceased\",\n \"deceit\",\n \"deceiver\",\n \"deceiving\",\n \"december\",\n \"decency\",\n \"decent\",\n \"deception\",\n \"deceptive\",\n \"decibel\",\n \"decidable\",\n \"decimal\",\n \"decimeter\",\n \"decipher\",\n \"deck\",\n \"declared\",\n \"decline\",\n \"decode\",\n \"decompose\",\n \"decorated\",\n \"decorator\",\n \"decoy\",\n \"decrease\",\n \"decree\",\n \"dedicate\",\n \"dedicator\",\n \"deduce\",\n \"deduct\",\n \"deed\",\n \"deem\",\n \"deepen\",\n \"deeply\",\n \"deepness\",\n \"deface\",\n \"defacing\",\n \"defame\",\n \"default\",\n \"defeat\",\n \"defection\",\n \"defective\",\n \"defendant\",\n \"defender\",\n \"defense\",\n \"defensive\",\n \"deferral\",\n \"deferred\",\n \"defiance\",\n \"defiant\",\n \"defile\",\n \"defiling\",\n \"define\",\n \"definite\",\n \"deflate\",\n \"deflation\",\n \"deflator\",\n \"deflected\",\n \"deflector\",\n \"defog\",\n \"deforest\",\n \"defraud\",\n \"defrost\",\n \"deftly\",\n \"defuse\",\n \"defy\",\n \"degraded\",\n \"degrading\",\n \"degrease\",\n \"degree\",\n \"dehydrate\",\n \"deity\",\n \"dejected\",\n \"delay\",\n \"delegate\",\n \"delegator\",\n \"delete\",\n \"deletion\",\n \"delicacy\",\n \"delicate\",\n \"delicious\",\n \"delighted\",\n \"delirious\",\n \"delirium\",\n \"deliverer\",\n \"delivery\",\n \"delouse\",\n \"delta\",\n \"deluge\",\n \"delusion\",\n \"deluxe\",\n \"demanding\",\n \"demeaning\",\n \"demeanor\",\n \"demise\",\n \"democracy\",\n \"democrat\",\n \"demote\",\n \"demotion\",\n \"demystify\",\n \"denatured\",\n \"deniable\",\n \"denial\",\n \"denim\",\n \"denote\",\n \"dense\",\n \"density\",\n \"dental\",\n \"dentist\",\n \"denture\",\n \"deny\",\n \"deodorant\",\n \"deodorize\",\n \"departed\",\n \"departure\",\n \"depict\",\n \"deplete\",\n \"depletion\",\n \"deplored\",\n \"deploy\",\n \"deport\",\n \"depose\",\n \"depraved\",\n \"depravity\",\n \"deprecate\",\n \"depress\",\n \"deprive\",\n \"depth\",\n \"deputize\",\n \"deputy\",\n \"derail\",\n \"deranged\",\n \"derby\",\n \"derived\",\n \"desecrate\",\n \"deserve\",\n \"deserving\",\n \"designate\",\n \"designed\",\n \"designer\",\n \"designing\",\n \"deskbound\",\n \"desktop\",\n \"deskwork\",\n \"desolate\",\n \"despair\",\n \"despise\",\n \"despite\",\n \"destiny\",\n \"destitute\",\n \"destruct\",\n \"detached\",\n \"detail\",\n \"detection\",\n \"detective\",\n \"detector\",\n \"detention\",\n \"detergent\",\n \"detest\",\n \"detonate\",\n \"detonator\",\n \"detoxify\",\n \"detract\",\n \"deuce\",\n \"devalue\",\n \"deviancy\",\n \"deviant\",\n \"deviate\",\n \"deviation\",\n \"deviator\",\n \"device\",\n \"devious\",\n \"devotedly\",\n \"devotee\",\n \"devotion\",\n \"devourer\",\n \"devouring\",\n \"devoutly\",\n \"dexterity\",\n \"dexterous\",\n \"diabetes\",\n \"diabetic\",\n \"diabolic\",\n \"diagnoses\",\n \"diagnosis\",\n \"diagram\",\n \"dial\",\n \"diameter\",\n \"diaper\",\n \"diaphragm\",\n \"diary\",\n \"dice\",\n \"dicing\",\n \"dictate\",\n \"dictation\",\n \"dictator\",\n \"difficult\",\n \"diffused\",\n \"diffuser\",\n \"diffusion\",\n \"diffusive\",\n \"dig\",\n \"dilation\",\n \"diligence\",\n \"diligent\",\n \"dill\",\n \"dilute\",\n \"dime\",\n \"diminish\",\n \"dimly\",\n \"dimmed\",\n \"dimmer\",\n \"dimness\",\n \"dimple\",\n \"diner\",\n \"dingbat\",\n \"dinghy\",\n \"dinginess\",\n \"dingo\",\n \"dingy\",\n \"dining\",\n \"dinner\",\n \"diocese\",\n \"dioxide\",\n \"diploma\",\n \"dipped\",\n \"dipper\",\n \"dipping\",\n \"directed\",\n \"direction\",\n \"directive\",\n \"directly\",\n \"directory\",\n \"direness\",\n \"dirtiness\",\n \"disabled\",\n \"disagree\",\n \"disallow\",\n \"disarm\",\n \"disarray\",\n \"disaster\",\n \"disband\",\n \"disbelief\",\n \"disburse\",\n \"discard\",\n \"discern\",\n \"discharge\",\n \"disclose\",\n \"discolor\",\n \"discount\",\n \"discourse\",\n \"discover\",\n \"discuss\",\n \"disdain\",\n \"disengage\",\n \"disfigure\",\n \"disgrace\",\n \"dish\",\n \"disinfect\",\n \"disjoin\",\n \"disk\",\n \"dislike\",\n \"disliking\",\n \"dislocate\",\n \"dislodge\",\n \"disloyal\",\n \"dismantle\",\n \"dismay\",\n \"dismiss\",\n \"dismount\",\n \"disobey\",\n \"disorder\",\n \"disown\",\n \"disparate\",\n \"disparity\",\n \"dispatch\",\n \"dispense\",\n \"dispersal\",\n \"dispersed\",\n \"disperser\",\n \"displace\",\n \"display\",\n \"displease\",\n \"disposal\",\n \"dispose\",\n \"disprove\",\n \"dispute\",\n \"disregard\",\n \"disrupt\",\n \"dissuade\",\n \"distance\",\n \"distant\",\n \"distaste\",\n \"distill\",\n \"distinct\",\n \"distort\",\n \"distract\",\n \"distress\",\n \"district\",\n \"distrust\",\n \"ditch\",\n \"ditto\",\n \"ditzy\",\n \"dividable\",\n \"divided\",\n \"dividend\",\n \"dividers\",\n \"dividing\",\n \"divinely\",\n \"diving\",\n \"divinity\",\n \"divisible\",\n \"divisibly\",\n \"division\",\n \"divisive\",\n \"divorcee\",\n \"dizziness\",\n \"dizzy\",\n \"doable\",\n \"docile\",\n \"dock\",\n \"doctrine\",\n \"document\",\n \"dodge\",\n \"dodgy\",\n \"doily\",\n \"doing\",\n \"dole\",\n \"dollar\",\n \"dollhouse\",\n \"dollop\",\n \"dolly\",\n \"dolphin\",\n \"domain\",\n \"domelike\",\n \"domestic\",\n \"dominion\",\n \"dominoes\",\n \"donated\",\n \"donation\",\n \"donator\",\n \"donor\",\n \"donut\",\n \"doodle\",\n \"doorbell\",\n \"doorframe\",\n \"doorknob\",\n \"doorman\",\n \"doormat\",\n \"doornail\",\n \"doorpost\",\n \"doorstep\",\n \"doorstop\",\n \"doorway\",\n \"doozy\",\n \"dork\",\n \"dormitory\",\n \"dorsal\",\n \"dosage\",\n \"dose\",\n \"dotted\",\n \"doubling\",\n \"douche\",\n \"dove\",\n \"down\",\n \"dowry\",\n \"doze\",\n \"drab\",\n \"dragging\",\n \"dragonfly\",\n \"dragonish\",\n \"dragster\",\n \"drainable\",\n \"drainage\",\n \"drained\",\n \"drainer\",\n \"drainpipe\",\n \"dramatic\",\n \"dramatize\",\n \"drank\",\n \"drapery\",\n \"drastic\",\n \"draw\",\n \"dreaded\",\n \"dreadful\",\n \"dreadlock\",\n \"dreamboat\",\n \"dreamily\",\n \"dreamland\",\n \"dreamless\",\n \"dreamlike\",\n \"dreamt\",\n \"dreamy\",\n \"drearily\",\n \"dreary\",\n \"drench\",\n \"dress\",\n \"drew\",\n \"dribble\",\n \"dried\",\n \"drier\",\n \"drift\",\n \"driller\",\n \"drilling\",\n \"drinkable\",\n \"drinking\",\n \"dripping\",\n \"drippy\",\n \"drivable\",\n \"driven\",\n \"driver\",\n \"driveway\",\n \"driving\",\n \"drizzle\",\n \"drizzly\",\n \"drone\",\n \"drool\",\n \"droop\",\n \"drop-down\",\n \"dropbox\",\n \"dropkick\",\n \"droplet\",\n \"dropout\",\n \"dropper\",\n \"drove\",\n \"drown\",\n \"drowsily\",\n \"drudge\",\n \"drum\",\n \"dry\",\n \"dubbed\",\n \"dubiously\",\n \"duchess\",\n \"duckbill\",\n \"ducking\",\n \"duckling\",\n \"ducktail\",\n \"ducky\",\n \"duct\",\n \"dude\",\n \"duffel\",\n \"dugout\",\n \"duh\",\n \"duke\",\n \"duller\",\n \"dullness\",\n \"duly\",\n \"dumping\",\n \"dumpling\",\n \"dumpster\",\n \"duo\",\n \"dupe\",\n \"duplex\",\n \"duplicate\",\n \"duplicity\",\n \"durable\",\n \"durably\",\n \"duration\",\n \"duress\",\n \"during\",\n \"dusk\",\n \"dust\",\n \"dutiful\",\n \"duty\",\n \"duvet\",\n \"dwarf\",\n \"dweeb\",\n \"dwelled\",\n \"dweller\",\n \"dwelling\",\n \"dwindle\",\n \"dwindling\",\n \"dynamic\",\n \"dynamite\",\n \"dynasty\",\n \"dyslexia\",\n \"dyslexic\",\n \"each\",\n \"eagle\",\n \"earache\",\n \"eardrum\",\n \"earflap\",\n \"earful\",\n \"earlobe\",\n \"early\",\n \"earmark\",\n \"earmuff\",\n \"earphone\",\n \"earpiece\",\n \"earplugs\",\n \"earring\",\n \"earshot\",\n \"earthen\",\n \"earthlike\",\n \"earthling\",\n \"earthly\",\n \"earthworm\",\n \"earthy\",\n \"earwig\",\n \"easeful\",\n \"easel\",\n \"easiest\",\n \"easily\",\n \"easiness\",\n \"easing\",\n \"eastbound\",\n \"eastcoast\",\n \"easter\",\n \"eastward\",\n \"eatable\",\n \"eaten\",\n \"eatery\",\n \"eating\",\n \"eats\",\n \"ebay\",\n \"ebony\",\n \"ebook\",\n \"ecard\",\n \"eccentric\",\n \"echo\",\n \"eclair\",\n \"eclipse\",\n \"ecologist\",\n \"ecology\",\n \"economic\",\n \"economist\",\n \"economy\",\n \"ecosphere\",\n \"ecosystem\",\n \"edge\",\n \"edginess\",\n \"edging\",\n \"edgy\",\n \"edition\",\n \"editor\",\n \"educated\",\n \"education\",\n \"educator\",\n \"eel\",\n \"effective\",\n \"effects\",\n \"efficient\",\n \"effort\",\n \"eggbeater\",\n \"egging\",\n \"eggnog\",\n \"eggplant\",\n \"eggshell\",\n \"egomaniac\",\n \"egotism\",\n \"egotistic\",\n \"either\",\n \"eject\",\n \"elaborate\",\n \"elastic\",\n \"elated\",\n \"elbow\",\n \"eldercare\",\n \"elderly\",\n \"eldest\",\n \"electable\",\n \"election\",\n \"elective\",\n \"elephant\",\n \"elevate\",\n \"elevating\",\n \"elevation\",\n \"elevator\",\n \"eleven\",\n \"elf\",\n \"eligible\",\n \"eligibly\",\n \"eliminate\",\n \"elite\",\n \"elitism\",\n \"elixir\",\n \"elk\",\n \"ellipse\",\n \"elliptic\",\n \"elm\",\n \"elongated\",\n \"elope\",\n \"eloquence\",\n \"eloquent\",\n \"elsewhere\",\n \"elude\",\n \"elusive\",\n \"elves\",\n \"email\",\n \"embargo\",\n \"embark\",\n \"embassy\",\n \"embattled\",\n \"embellish\",\n \"ember\",\n \"embezzle\",\n \"emblaze\",\n \"emblem\",\n \"embody\",\n \"embolism\",\n \"emboss\",\n \"embroider\",\n \"emcee\",\n \"emerald\",\n \"emergency\",\n \"emission\",\n \"emit\",\n \"emote\",\n \"emoticon\",\n \"emotion\",\n \"empathic\",\n \"empathy\",\n \"emperor\",\n \"emphases\",\n \"emphasis\",\n \"emphasize\",\n \"emphatic\",\n \"empirical\",\n \"employed\",\n \"employee\",\n \"employer\",\n \"emporium\",\n \"empower\",\n \"emptier\",\n \"emptiness\",\n \"empty\",\n \"emu\",\n \"enable\",\n \"enactment\",\n \"enamel\",\n \"enchanted\",\n \"enchilada\",\n \"encircle\",\n \"enclose\",\n \"enclosure\",\n \"encode\",\n \"encore\",\n \"encounter\",\n \"encourage\",\n \"encroach\",\n \"encrust\",\n \"encrypt\",\n \"endanger\",\n \"endeared\",\n \"endearing\",\n \"ended\",\n \"ending\",\n \"endless\",\n \"endnote\",\n \"endocrine\",\n \"endorphin\",\n \"endorse\",\n \"endowment\",\n \"endpoint\",\n \"endurable\",\n \"endurance\",\n \"enduring\",\n \"energetic\",\n \"energize\",\n \"energy\",\n \"enforced\",\n \"enforcer\",\n \"engaged\",\n \"engaging\",\n \"engine\",\n \"engorge\",\n \"engraved\",\n \"engraver\",\n \"engraving\",\n \"engross\",\n \"engulf\",\n \"enhance\",\n \"enigmatic\",\n \"enjoyable\",\n \"enjoyably\",\n \"enjoyer\",\n \"enjoying\",\n \"enjoyment\",\n \"enlarged\",\n \"enlarging\",\n \"enlighten\",\n \"enlisted\",\n \"enquirer\",\n \"enrage\",\n \"enrich\",\n \"enroll\",\n \"enslave\",\n \"ensnare\",\n \"ensure\",\n \"entail\",\n \"entangled\",\n \"entering\",\n \"entertain\",\n \"enticing\",\n \"entire\",\n \"entitle\",\n \"entity\",\n \"entomb\",\n \"entourage\",\n \"entrap\",\n \"entree\",\n \"entrench\",\n \"entrust\",\n \"entryway\",\n \"entwine\",\n \"enunciate\",\n \"envelope\",\n \"enviable\",\n \"enviably\",\n \"envious\",\n \"envision\",\n \"envoy\",\n \"envy\",\n \"enzyme\",\n \"epic\",\n \"epidemic\",\n \"epidermal\",\n \"epidermis\",\n \"epidural\",\n \"epilepsy\",\n \"epileptic\",\n \"epilogue\",\n \"epiphany\",\n \"episode\",\n \"equal\",\n \"equate\",\n \"equation\",\n \"equator\",\n \"equinox\",\n \"equipment\",\n \"equity\",\n \"equivocal\",\n \"eradicate\",\n \"erasable\",\n \"erased\",\n \"eraser\",\n \"erasure\",\n \"ergonomic\",\n \"errand\",\n \"errant\",\n \"erratic\",\n \"error\",\n \"erupt\",\n \"escalate\",\n \"escalator\",\n \"escapable\",\n \"escapade\",\n \"escapist\",\n \"escargot\",\n \"eskimo\",\n \"esophagus\",\n \"espionage\",\n \"espresso\",\n \"esquire\",\n \"essay\",\n \"essence\",\n \"essential\",\n \"establish\",\n \"estate\",\n \"esteemed\",\n \"estimate\",\n \"estimator\",\n \"estranged\",\n \"estrogen\",\n \"etching\",\n \"eternal\",\n \"eternity\",\n \"ethanol\",\n \"ether\",\n \"ethically\",\n \"ethics\",\n \"euphemism\",\n \"evacuate\",\n \"evacuee\",\n \"evade\",\n \"evaluate\",\n \"evaluator\",\n \"evaporate\",\n \"evasion\",\n \"evasive\",\n \"even\",\n \"everglade\",\n \"evergreen\",\n \"everybody\",\n \"everyday\",\n \"everyone\",\n \"evict\",\n \"evidence\",\n \"evident\",\n \"evil\",\n \"evoke\",\n \"evolution\",\n \"evolve\",\n \"exact\",\n \"exalted\",\n \"example\",\n \"excavate\",\n \"excavator\",\n \"exceeding\",\n \"exception\",\n \"excess\",\n \"exchange\",\n \"excitable\",\n \"exciting\",\n \"exclaim\",\n \"exclude\",\n \"excluding\",\n \"exclusion\",\n \"exclusive\",\n \"excretion\",\n \"excretory\",\n \"excursion\",\n \"excusable\",\n \"excusably\",\n \"excuse\",\n \"exemplary\",\n \"exemplify\",\n \"exemption\",\n \"exerciser\",\n \"exert\",\n \"exes\",\n \"exfoliate\",\n \"exhale\",\n \"exhaust\",\n \"exhume\",\n \"exile\",\n \"existing\",\n \"exit\",\n \"exodus\",\n \"exonerate\",\n \"exorcism\",\n \"exorcist\",\n \"expand\",\n \"expanse\",\n \"expansion\",\n \"expansive\",\n \"expectant\",\n \"expedited\",\n \"expediter\",\n \"expel\",\n \"expend\",\n \"expenses\",\n \"expensive\",\n \"expert\",\n \"expire\",\n \"expiring\",\n \"explain\",\n \"expletive\",\n \"explicit\",\n \"explode\",\n \"exploit\",\n \"explore\",\n \"exploring\",\n \"exponent\",\n \"exporter\",\n \"exposable\",\n \"expose\",\n \"exposure\",\n \"express\",\n \"expulsion\",\n \"exquisite\",\n \"extended\",\n \"extending\",\n \"extent\",\n \"extenuate\",\n \"exterior\",\n \"external\",\n \"extinct\",\n \"extortion\",\n \"extradite\",\n \"extras\",\n \"extrovert\",\n \"extrude\",\n \"extruding\",\n \"exuberant\",\n \"fable\",\n \"fabric\",\n \"fabulous\",\n \"facebook\",\n \"facecloth\",\n \"facedown\",\n \"faceless\",\n \"facelift\",\n \"faceplate\",\n \"faceted\",\n \"facial\",\n \"facility\",\n \"facing\",\n \"facsimile\",\n \"faction\",\n \"factoid\",\n \"factor\",\n \"factsheet\",\n \"factual\",\n \"faculty\",\n \"fade\",\n \"fading\",\n \"failing\",\n \"falcon\",\n \"fall\",\n \"false\",\n \"falsify\",\n \"fame\",\n \"familiar\",\n \"family\",\n \"famine\",\n \"famished\",\n \"fanatic\",\n \"fancied\",\n \"fanciness\",\n \"fancy\",\n \"fanfare\",\n \"fang\",\n \"fanning\",\n \"fantasize\",\n \"fantastic\",\n \"fantasy\",\n \"fascism\",\n \"fastball\",\n \"faster\",\n \"fasting\",\n \"fastness\",\n \"faucet\",\n \"favorable\",\n \"favorably\",\n \"favored\",\n \"favoring\",\n \"favorite\",\n \"fax\",\n \"feast\",\n \"federal\",\n \"fedora\",\n \"feeble\",\n \"feed\",\n \"feel\",\n \"feisty\",\n \"feline\",\n \"felt-tip\",\n \"feminine\",\n \"feminism\",\n \"feminist\",\n \"feminize\",\n \"femur\",\n \"fence\",\n \"fencing\",\n \"fender\",\n \"ferment\",\n \"fernlike\",\n \"ferocious\",\n \"ferocity\",\n \"ferret\",\n \"ferris\",\n \"ferry\",\n \"fervor\",\n \"fester\",\n \"festival\",\n \"festive\",\n \"festivity\",\n \"fetal\",\n \"fetch\",\n \"fever\",\n \"fiber\",\n \"fiction\",\n \"fiddle\",\n \"fiddling\",\n \"fidelity\",\n \"fidgeting\",\n \"fidgety\",\n \"fifteen\",\n \"fifth\",\n \"fiftieth\",\n \"fifty\",\n \"figment\",\n \"figure\",\n \"figurine\",\n \"filing\",\n \"filled\",\n \"filler\",\n \"filling\",\n \"film\",\n \"filter\",\n \"filth\",\n \"filtrate\",\n \"finale\",\n \"finalist\",\n \"finalize\",\n \"finally\",\n \"finance\",\n \"financial\",\n \"finch\",\n \"fineness\",\n \"finer\",\n \"finicky\",\n \"finished\",\n \"finisher\",\n \"finishing\",\n \"finite\",\n \"finless\",\n \"finlike\",\n \"fiscally\",\n \"fit\",\n \"five\",\n \"flaccid\",\n \"flagman\",\n \"flagpole\",\n \"flagship\",\n \"flagstick\",\n \"flagstone\",\n \"flail\",\n \"flakily\",\n \"flaky\",\n \"flame\",\n \"flammable\",\n \"flanked\",\n \"flanking\",\n \"flannels\",\n \"flap\",\n \"flaring\",\n \"flashback\",\n \"flashbulb\",\n \"flashcard\",\n \"flashily\",\n \"flashing\",\n \"flashy\",\n \"flask\",\n \"flatbed\",\n \"flatfoot\",\n \"flatly\",\n \"flatness\",\n \"flatten\",\n \"flattered\",\n \"flatterer\",\n \"flattery\",\n \"flattop\",\n \"flatware\",\n \"flatworm\",\n \"flavored\",\n \"flavorful\",\n \"flavoring\",\n \"flaxseed\",\n \"fled\",\n \"fleshed\",\n \"fleshy\",\n \"flick\",\n \"flier\",\n \"flight\",\n \"flinch\",\n \"fling\",\n \"flint\",\n \"flip\",\n \"flirt\",\n \"float\",\n \"flock\",\n \"flogging\",\n \"flop\",\n \"floral\",\n \"florist\",\n \"floss\",\n \"flounder\",\n \"flyable\",\n \"flyaway\",\n \"flyer\",\n \"flying\",\n \"flyover\",\n \"flypaper\",\n \"foam\",\n \"foe\",\n \"fog\",\n \"foil\",\n \"folic\",\n \"folk\",\n \"follicle\",\n \"follow\",\n \"fondling\",\n \"fondly\",\n \"fondness\",\n \"fondue\",\n \"font\",\n \"food\",\n \"fool\",\n \"footage\",\n \"football\",\n \"footbath\",\n \"footboard\",\n \"footer\",\n \"footgear\",\n \"foothill\",\n \"foothold\",\n \"footing\",\n \"footless\",\n \"footman\",\n \"footnote\",\n \"footpad\",\n \"footpath\",\n \"footprint\",\n \"footrest\",\n \"footsie\",\n \"footsore\",\n \"footwear\",\n \"footwork\",\n \"fossil\",\n \"foster\",\n \"founder\",\n \"founding\",\n \"fountain\",\n \"fox\",\n \"foyer\",\n \"fraction\",\n \"fracture\",\n \"fragile\",\n \"fragility\",\n \"fragment\",\n \"fragrance\",\n \"fragrant\",\n \"frail\",\n \"frame\",\n \"framing\",\n \"frantic\",\n \"fraternal\",\n \"frayed\",\n \"fraying\",\n \"frays\",\n \"freckled\",\n \"freckles\",\n \"freebase\",\n \"freebee\",\n \"freebie\",\n \"freedom\",\n \"freefall\",\n \"freehand\",\n \"freeing\",\n \"freeload\",\n \"freely\",\n \"freemason\",\n \"freeness\",\n \"freestyle\",\n \"freeware\",\n \"freeway\",\n \"freewill\",\n \"freezable\",\n \"freezing\",\n \"freight\",\n \"french\",\n \"frenzied\",\n \"frenzy\",\n \"frequency\",\n \"frequent\",\n \"fresh\",\n \"fretful\",\n \"fretted\",\n \"friction\",\n \"friday\",\n \"fridge\",\n \"fried\",\n \"friend\",\n \"frighten\",\n \"frightful\",\n \"frigidity\",\n \"frigidly\",\n \"frill\",\n \"fringe\",\n \"frisbee\",\n \"frisk\",\n \"fritter\",\n \"frivolous\",\n \"frolic\",\n \"from\",\n \"front\",\n \"frostbite\",\n \"frosted\",\n \"frostily\",\n \"frosting\",\n \"frostlike\",\n \"frosty\",\n \"froth\",\n \"frown\",\n \"frozen\",\n \"fructose\",\n \"frugality\",\n \"frugally\",\n \"fruit\",\n \"frustrate\",\n \"frying\",\n \"gab\",\n \"gaffe\",\n \"gag\",\n \"gainfully\",\n \"gaining\",\n \"gains\",\n \"gala\",\n \"gallantly\",\n \"galleria\",\n \"gallery\",\n \"galley\",\n \"gallon\",\n \"gallows\",\n \"gallstone\",\n \"galore\",\n \"galvanize\",\n \"gambling\",\n \"game\",\n \"gaming\",\n \"gamma\",\n \"gander\",\n \"gangly\",\n \"gangrene\",\n \"gangway\",\n \"gap\",\n \"garage\",\n \"garbage\",\n \"garden\",\n \"gargle\",\n \"garland\",\n \"garlic\",\n \"garment\",\n \"garnet\",\n \"garnish\",\n \"garter\",\n \"gas\",\n \"gatherer\",\n \"gathering\",\n \"gating\",\n \"gauging\",\n \"gauntlet\",\n \"gauze\",\n \"gave\",\n \"gawk\",\n \"gazing\",\n \"gear\",\n \"gecko\",\n \"geek\",\n \"geiger\",\n \"gem\",\n \"gender\",\n \"generic\",\n \"generous\",\n \"genetics\",\n \"genre\",\n \"gentile\",\n \"gentleman\",\n \"gently\",\n \"gents\",\n \"geography\",\n \"geologic\",\n \"geologist\",\n \"geology\",\n \"geometric\",\n \"geometry\",\n \"geranium\",\n \"gerbil\",\n \"geriatric\",\n \"germicide\",\n \"germinate\",\n \"germless\",\n \"germproof\",\n \"gestate\",\n \"gestation\",\n \"gesture\",\n \"getaway\",\n \"getting\",\n \"getup\",\n \"giant\",\n \"gibberish\",\n \"giblet\",\n \"giddily\",\n \"giddiness\",\n \"giddy\",\n \"gift\",\n \"gigabyte\",\n \"gigahertz\",\n \"gigantic\",\n \"giggle\",\n \"giggling\",\n \"giggly\",\n \"gigolo\",\n \"gilled\",\n \"gills\",\n \"gimmick\",\n \"girdle\",\n \"giveaway\",\n \"given\",\n \"giver\",\n \"giving\",\n \"gizmo\",\n \"gizzard\",\n \"glacial\",\n \"glacier\",\n \"glade\",\n \"gladiator\",\n \"gladly\",\n \"glamorous\",\n \"glamour\",\n \"glance\",\n \"glancing\",\n \"glandular\",\n \"glare\",\n \"glaring\",\n \"glass\",\n \"glaucoma\",\n \"glazing\",\n \"gleaming\",\n \"gleeful\",\n \"glider\",\n \"gliding\",\n \"glimmer\",\n \"glimpse\",\n \"glisten\",\n \"glitch\",\n \"glitter\",\n \"glitzy\",\n \"gloater\",\n \"gloating\",\n \"gloomily\",\n \"gloomy\",\n \"glorified\",\n \"glorifier\",\n \"glorify\",\n \"glorious\",\n \"glory\",\n \"gloss\",\n \"glove\",\n \"glowing\",\n \"glowworm\",\n \"glucose\",\n \"glue\",\n \"gluten\",\n \"glutinous\",\n \"glutton\",\n \"gnarly\",\n \"gnat\",\n \"goal\",\n \"goatskin\",\n \"goes\",\n \"goggles\",\n \"going\",\n \"goldfish\",\n \"goldmine\",\n \"goldsmith\",\n \"golf\",\n \"goliath\",\n \"gonad\",\n \"gondola\",\n \"gone\",\n \"gong\",\n \"good\",\n \"gooey\",\n \"goofball\",\n \"goofiness\",\n \"goofy\",\n \"google\",\n \"goon\",\n \"gopher\",\n \"gore\",\n \"gorged\",\n \"gorgeous\",\n \"gory\",\n \"gosling\",\n \"gossip\",\n \"gothic\",\n \"gotten\",\n \"gout\",\n \"gown\",\n \"grab\",\n \"graceful\",\n \"graceless\",\n \"gracious\",\n \"gradation\",\n \"graded\",\n \"grader\",\n \"gradient\",\n \"grading\",\n \"gradually\",\n \"graduate\",\n \"graffiti\",\n \"grafted\",\n \"grafting\",\n \"grain\",\n \"granddad\",\n \"grandkid\",\n \"grandly\",\n \"grandma\",\n \"grandpa\",\n \"grandson\",\n \"granite\",\n \"granny\",\n \"granola\",\n \"grant\",\n \"granular\",\n \"grape\",\n \"graph\",\n \"grapple\",\n \"grappling\",\n \"grasp\",\n \"grass\",\n \"gratified\",\n \"gratify\",\n \"grating\",\n \"gratitude\",\n \"gratuity\",\n \"gravel\",\n \"graveness\",\n \"graves\",\n \"graveyard\",\n \"gravitate\",\n \"gravity\",\n \"gravy\",\n \"gray\",\n \"grazing\",\n \"greasily\",\n \"greedily\",\n \"greedless\",\n \"greedy\",\n \"green\",\n \"greeter\",\n \"greeting\",\n \"grew\",\n \"greyhound\",\n \"grid\",\n \"grief\",\n \"grievance\",\n \"grieving\",\n \"grievous\",\n \"grill\",\n \"grimace\",\n \"grimacing\",\n \"grime\",\n \"griminess\",\n \"grimy\",\n \"grinch\",\n \"grinning\",\n \"grip\",\n \"gristle\",\n \"grit\",\n \"groggily\",\n \"groggy\",\n \"groin\",\n \"groom\",\n \"groove\",\n \"grooving\",\n \"groovy\",\n \"grope\",\n \"ground\",\n \"grouped\",\n \"grout\",\n \"grove\",\n \"grower\",\n \"growing\",\n \"growl\",\n \"grub\",\n \"grudge\",\n \"grudging\",\n \"grueling\",\n \"gruffly\",\n \"grumble\",\n \"grumbling\",\n \"grumbly\",\n \"grumpily\",\n \"grunge\",\n \"grunt\",\n \"guacamole\",\n \"guidable\",\n \"guidance\",\n \"guide\",\n \"guiding\",\n \"guileless\",\n \"guise\",\n \"gulf\",\n \"gullible\",\n \"gully\",\n \"gulp\",\n \"gumball\",\n \"gumdrop\",\n \"gumminess\",\n \"gumming\",\n \"gummy\",\n \"gurgle\",\n \"gurgling\",\n \"guru\",\n \"gush\",\n \"gusto\",\n \"gusty\",\n \"gutless\",\n \"guts\",\n \"gutter\",\n \"guy\",\n \"guzzler\",\n \"gyration\",\n \"habitable\",\n \"habitant\",\n \"habitat\",\n \"habitual\",\n \"hacked\",\n \"hacker\",\n \"hacking\",\n \"hacksaw\",\n \"had\",\n \"haggler\",\n \"haiku\",\n \"half\",\n \"halogen\",\n \"halt\",\n \"halved\",\n \"halves\",\n \"hamburger\",\n \"hamlet\",\n \"hammock\",\n \"hamper\",\n \"hamster\",\n \"hamstring\",\n \"handbag\",\n \"handball\",\n \"handbook\",\n \"handbrake\",\n \"handcart\",\n \"handclap\",\n \"handclasp\",\n \"handcraft\",\n \"handcuff\",\n \"handed\",\n \"handful\",\n \"handgrip\",\n \"handgun\",\n \"handheld\",\n \"handiness\",\n \"handiwork\",\n \"handlebar\",\n \"handled\",\n \"handler\",\n \"handling\",\n \"handmade\",\n \"handoff\",\n \"handpick\",\n \"handprint\",\n \"handrail\",\n \"handsaw\",\n \"handset\",\n \"handsfree\",\n \"handshake\",\n \"handstand\",\n \"handwash\",\n \"handwork\",\n \"handwoven\",\n \"handwrite\",\n \"handyman\",\n \"hangnail\",\n \"hangout\",\n \"hangover\",\n \"hangup\",\n \"hankering\",\n \"hankie\",\n \"hanky\",\n \"haphazard\",\n \"happening\",\n \"happier\",\n \"happiest\",\n \"happily\",\n \"happiness\",\n \"happy\",\n \"harbor\",\n \"hardcopy\",\n \"hardcore\",\n \"hardcover\",\n \"harddisk\",\n \"hardened\",\n \"hardener\",\n \"hardening\",\n \"hardhat\",\n \"hardhead\",\n \"hardiness\",\n \"hardly\",\n \"hardness\",\n \"hardship\",\n \"hardware\",\n \"hardwired\",\n \"hardwood\",\n \"hardy\",\n \"harmful\",\n \"harmless\",\n \"harmonica\",\n \"harmonics\",\n \"harmonize\",\n \"harmony\",\n \"harness\",\n \"harpist\",\n \"harsh\",\n \"harvest\",\n \"hash\",\n \"hassle\",\n \"haste\",\n \"hastily\",\n \"hastiness\",\n \"hasty\",\n \"hatbox\",\n \"hatchback\",\n \"hatchery\",\n \"hatchet\",\n \"hatching\",\n \"hatchling\",\n \"hate\",\n \"hatless\",\n \"hatred\",\n \"haunt\",\n \"haven\",\n \"hazard\",\n \"hazelnut\",\n \"hazily\",\n \"haziness\",\n \"hazing\",\n \"hazy\",\n \"headache\",\n \"headband\",\n \"headboard\",\n \"headcount\",\n \"headdress\",\n \"headed\",\n \"header\",\n \"headfirst\",\n \"headgear\",\n \"heading\",\n \"headlamp\",\n \"headless\",\n \"headlock\",\n \"headphone\",\n \"headpiece\",\n \"headrest\",\n \"headroom\",\n \"headscarf\",\n \"headset\",\n \"headsman\",\n \"headstand\",\n \"headstone\",\n \"headway\",\n \"headwear\",\n \"heap\",\n \"heat\",\n \"heave\",\n \"heavily\",\n \"heaviness\",\n \"heaving\",\n \"hedge\",\n \"hedging\",\n \"heftiness\",\n \"hefty\",\n \"helium\",\n \"helmet\",\n \"helper\",\n \"helpful\",\n \"helping\",\n \"helpless\",\n \"helpline\",\n \"hemlock\",\n \"hemstitch\",\n \"hence\",\n \"henchman\",\n \"henna\",\n \"herald\",\n \"herbal\",\n \"herbicide\",\n \"herbs\",\n \"heritage\",\n \"hermit\",\n \"heroics\",\n \"heroism\",\n \"herring\",\n \"herself\",\n \"hertz\",\n \"hesitancy\",\n \"hesitant\",\n \"hesitate\",\n \"hexagon\",\n \"hexagram\",\n \"hubcap\",\n \"huddle\",\n \"huddling\",\n \"huff\",\n \"hug\",\n \"hula\",\n \"hulk\",\n \"hull\",\n \"human\",\n \"humble\",\n \"humbling\",\n \"humbly\",\n \"humid\",\n \"humiliate\",\n \"humility\",\n \"humming\",\n \"hummus\",\n \"humongous\",\n \"humorist\",\n \"humorless\",\n \"humorous\",\n \"humpback\",\n \"humped\",\n \"humvee\",\n \"hunchback\",\n \"hundredth\",\n \"hunger\",\n \"hungrily\",\n \"hungry\",\n \"hunk\",\n \"hunter\",\n \"hunting\",\n \"huntress\",\n \"huntsman\",\n \"hurdle\",\n \"hurled\",\n \"hurler\",\n \"hurling\",\n \"hurray\",\n \"hurricane\",\n \"hurried\",\n \"hurry\",\n \"hurt\",\n \"husband\",\n \"hush\",\n \"husked\",\n \"huskiness\",\n \"hut\",\n \"hybrid\",\n \"hydrant\",\n \"hydrated\",\n \"hydration\",\n \"hydrogen\",\n \"hydroxide\",\n \"hyperlink\",\n \"hypertext\",\n \"hyphen\",\n \"hypnoses\",\n \"hypnosis\",\n \"hypnotic\",\n \"hypnotism\",\n \"hypnotist\",\n \"hypnotize\",\n \"hypocrisy\",\n \"hypocrite\",\n \"ibuprofen\",\n \"ice\",\n \"iciness\",\n \"icing\",\n \"icky\",\n \"icon\",\n \"icy\",\n \"idealism\",\n \"idealist\",\n \"idealize\",\n \"ideally\",\n \"idealness\",\n \"identical\",\n \"identify\",\n \"identity\",\n \"ideology\",\n \"idiocy\",\n \"idiom\",\n \"idly\",\n \"igloo\",\n \"ignition\",\n \"ignore\",\n \"iguana\",\n \"illicitly\",\n \"illusion\",\n \"illusive\",\n \"image\",\n \"imaginary\",\n \"imagines\",\n \"imaging\",\n \"imbecile\",\n \"imitate\",\n \"imitation\",\n \"immature\",\n \"immerse\",\n \"immersion\",\n \"imminent\",\n \"immobile\",\n \"immodest\",\n \"immorally\",\n \"immortal\",\n \"immovable\",\n \"immovably\",\n \"immunity\",\n \"immunize\",\n \"impaired\",\n \"impale\",\n \"impart\",\n \"impatient\",\n \"impeach\",\n \"impeding\",\n \"impending\",\n \"imperfect\",\n \"imperial\",\n \"impish\",\n \"implant\",\n \"implement\",\n \"implicate\",\n \"implicit\",\n \"implode\",\n \"implosion\",\n \"implosive\",\n \"imply\",\n \"impolite\",\n \"important\",\n \"importer\",\n \"impose\",\n \"imposing\",\n \"impotence\",\n \"impotency\",\n \"impotent\",\n \"impound\",\n \"imprecise\",\n \"imprint\",\n \"imprison\",\n \"impromptu\",\n \"improper\",\n \"improve\",\n \"improving\",\n \"improvise\",\n \"imprudent\",\n \"impulse\",\n \"impulsive\",\n \"impure\",\n \"impurity\",\n \"iodine\",\n \"iodize\",\n \"ion\",\n \"ipad\",\n \"iphone\",\n \"ipod\",\n \"irate\",\n \"irk\",\n \"iron\",\n \"irregular\",\n \"irrigate\",\n \"irritable\",\n \"irritably\",\n \"irritant\",\n \"irritate\",\n \"islamic\",\n \"islamist\",\n \"isolated\",\n \"isolating\",\n \"isolation\",\n \"isotope\",\n \"issue\",\n \"issuing\",\n \"italicize\",\n \"italics\",\n \"item\",\n \"itinerary\",\n \"itunes\",\n \"ivory\",\n \"ivy\",\n \"jab\",\n \"jackal\",\n \"jacket\",\n \"jackknife\",\n \"jackpot\",\n \"jailbird\",\n \"jailbreak\",\n \"jailer\",\n \"jailhouse\",\n \"jalapeno\",\n \"jam\",\n \"janitor\",\n \"january\",\n \"jargon\",\n \"jarring\",\n \"jasmine\",\n \"jaundice\",\n \"jaunt\",\n \"java\",\n \"jawed\",\n \"jawless\",\n \"jawline\",\n \"jaws\",\n \"jaybird\",\n \"jaywalker\",\n \"jazz\",\n \"jeep\",\n \"jeeringly\",\n \"jellied\",\n \"jelly\",\n \"jersey\",\n \"jester\",\n \"jet\",\n \"jiffy\",\n \"jigsaw\",\n \"jimmy\",\n \"jingle\",\n \"jingling\",\n \"jinx\",\n \"jitters\",\n \"jittery\",\n \"job\",\n \"jockey\",\n \"jockstrap\",\n \"jogger\",\n \"jogging\",\n \"john\",\n \"joining\",\n \"jokester\",\n \"jokingly\",\n \"jolliness\",\n \"jolly\",\n \"jolt\",\n \"jot\",\n \"jovial\",\n \"joyfully\",\n \"joylessly\",\n \"joyous\",\n \"joyride\",\n \"joystick\",\n \"jubilance\",\n \"jubilant\",\n \"judge\",\n \"judgingly\",\n \"judicial\",\n \"judiciary\",\n \"judo\",\n \"juggle\",\n \"juggling\",\n \"jugular\",\n \"juice\",\n \"juiciness\",\n \"juicy\",\n \"jujitsu\",\n \"jukebox\",\n \"july\",\n \"jumble\",\n \"jumbo\",\n \"jump\",\n \"junction\",\n \"juncture\",\n \"june\",\n \"junior\",\n \"juniper\",\n \"junkie\",\n \"junkman\",\n \"junkyard\",\n \"jurist\",\n \"juror\",\n \"jury\",\n \"justice\",\n \"justifier\",\n \"justify\",\n \"justly\",\n \"justness\",\n \"juvenile\",\n \"kabob\",\n \"kangaroo\",\n \"karaoke\",\n \"karate\",\n \"karma\",\n \"kebab\",\n \"keenly\",\n \"keenness\",\n \"keep\",\n \"keg\",\n \"kelp\",\n \"kennel\",\n \"kept\",\n \"kerchief\",\n \"kerosene\",\n \"kettle\",\n \"kick\",\n \"kiln\",\n \"kilobyte\",\n \"kilogram\",\n \"kilometer\",\n \"kilowatt\",\n \"kilt\",\n \"kimono\",\n \"kindle\",\n \"kindling\",\n \"kindly\",\n \"kindness\",\n \"kindred\",\n \"kinetic\",\n \"kinfolk\",\n \"king\",\n \"kinship\",\n \"kinsman\",\n \"kinswoman\",\n \"kissable\",\n \"kisser\",\n \"kissing\",\n \"kitchen\",\n \"kite\",\n \"kitten\",\n \"kitty\",\n \"kiwi\",\n \"kleenex\",\n \"knapsack\",\n \"knee\",\n \"knelt\",\n \"knickers\",\n \"knoll\",\n \"koala\",\n \"kooky\",\n \"kosher\",\n \"krypton\",\n \"kudos\",\n \"kung\",\n \"labored\",\n \"laborer\",\n \"laboring\",\n \"laborious\",\n \"labrador\",\n \"ladder\",\n \"ladies\",\n \"ladle\",\n \"ladybug\",\n \"ladylike\",\n \"lagged\",\n \"lagging\",\n \"lagoon\",\n \"lair\",\n \"lake\",\n \"lance\",\n \"landed\",\n \"landfall\",\n \"landfill\",\n \"landing\",\n \"landlady\",\n \"landless\",\n \"landline\",\n \"landlord\",\n \"landmark\",\n \"landmass\",\n \"landmine\",\n \"landowner\",\n \"landscape\",\n \"landside\",\n \"landslide\",\n \"language\",\n \"lankiness\",\n \"lanky\",\n \"lantern\",\n \"lapdog\",\n \"lapel\",\n \"lapped\",\n \"lapping\",\n \"laptop\",\n \"lard\",\n \"large\",\n \"lark\",\n \"lash\",\n \"lasso\",\n \"last\",\n \"latch\",\n \"late\",\n \"lather\",\n \"latitude\",\n \"latrine\",\n \"latter\",\n \"latticed\",\n \"launch\",\n \"launder\",\n \"laundry\",\n \"laurel\",\n \"lavender\",\n \"lavish\",\n \"laxative\",\n \"lazily\",\n \"laziness\",\n \"lazy\",\n \"lecturer\",\n \"left\",\n \"legacy\",\n \"legal\",\n \"legend\",\n \"legged\",\n \"leggings\",\n \"legible\",\n \"legibly\",\n \"legislate\",\n \"lego\",\n \"legroom\",\n \"legume\",\n \"legwarmer\",\n \"legwork\",\n \"lemon\",\n \"lend\",\n \"length\",\n \"lens\",\n \"lent\",\n \"leotard\",\n \"lesser\",\n \"letdown\",\n \"lethargic\",\n \"lethargy\",\n \"letter\",\n \"lettuce\",\n \"level\",\n \"leverage\",\n \"levers\",\n \"levitate\",\n \"levitator\",\n \"liability\",\n \"liable\",\n \"liberty\",\n \"librarian\",\n \"library\",\n \"licking\",\n \"licorice\",\n \"lid\",\n \"life\",\n \"lifter\",\n \"lifting\",\n \"liftoff\",\n \"ligament\",\n \"likely\",\n \"likeness\",\n \"likewise\",\n \"liking\",\n \"lilac\",\n \"lilly\",\n \"lily\",\n \"limb\",\n \"limeade\",\n \"limelight\",\n \"limes\",\n \"limit\",\n \"limping\",\n \"limpness\",\n \"line\",\n \"lingo\",\n \"linguini\",\n \"linguist\",\n \"lining\",\n \"linked\",\n \"linoleum\",\n \"linseed\",\n \"lint\",\n \"lion\",\n \"lip\",\n \"liquefy\",\n \"liqueur\",\n \"liquid\",\n \"lisp\",\n \"list\",\n \"litigate\",\n \"litigator\",\n \"litmus\",\n \"litter\",\n \"little\",\n \"livable\",\n \"lived\",\n \"lively\",\n \"liver\",\n \"livestock\",\n \"lividly\",\n \"living\",\n \"lizard\",\n \"lubricant\",\n \"lubricate\",\n \"lucid\",\n \"luckily\",\n \"luckiness\",\n \"luckless\",\n \"lucrative\",\n \"ludicrous\",\n \"lugged\",\n \"lukewarm\",\n \"lullaby\",\n \"lumber\",\n \"luminance\",\n \"luminous\",\n \"lumpiness\",\n \"lumping\",\n \"lumpish\",\n \"lunacy\",\n \"lunar\",\n \"lunchbox\",\n \"luncheon\",\n \"lunchroom\",\n \"lunchtime\",\n \"lung\",\n \"lurch\",\n \"lure\",\n \"luridness\",\n \"lurk\",\n \"lushly\",\n \"lushness\",\n \"luster\",\n \"lustfully\",\n \"lustily\",\n \"lustiness\",\n \"lustrous\",\n \"lusty\",\n \"luxurious\",\n \"luxury\",\n \"lying\",\n \"lyrically\",\n \"lyricism\",\n \"lyricist\",\n \"lyrics\",\n \"macarena\",\n \"macaroni\",\n \"macaw\",\n \"mace\",\n \"machine\",\n \"machinist\",\n \"magazine\",\n \"magenta\",\n \"maggot\",\n \"magical\",\n \"magician\",\n \"magma\",\n \"magnesium\",\n \"magnetic\",\n \"magnetism\",\n \"magnetize\",\n \"magnifier\",\n \"magnify\",\n \"magnitude\",\n \"magnolia\",\n \"mahogany\",\n \"maimed\",\n \"majestic\",\n \"majesty\",\n \"majorette\",\n \"majority\",\n \"makeover\",\n \"maker\",\n \"makeshift\",\n \"making\",\n \"malformed\",\n \"malt\",\n \"mama\",\n \"mammal\",\n \"mammary\",\n \"mammogram\",\n \"manager\",\n \"managing\",\n \"manatee\",\n \"mandarin\",\n \"mandate\",\n \"mandatory\",\n \"mandolin\",\n \"manger\",\n \"mangle\",\n \"mango\",\n \"mangy\",\n \"manhandle\",\n \"manhole\",\n \"manhood\",\n \"manhunt\",\n \"manicotti\",\n \"manicure\",\n \"manifesto\",\n \"manila\",\n \"mankind\",\n \"manlike\",\n \"manliness\",\n \"manly\",\n \"manmade\",\n \"manned\",\n \"mannish\",\n \"manor\",\n \"manpower\",\n \"mantis\",\n \"mantra\",\n \"manual\",\n \"many\",\n \"map\",\n \"marathon\",\n \"marauding\",\n \"marbled\",\n \"marbles\",\n \"marbling\",\n \"march\",\n \"mardi\",\n \"margarine\",\n \"margarita\",\n \"margin\",\n \"marigold\",\n \"marina\",\n \"marine\",\n \"marital\",\n \"maritime\",\n \"marlin\",\n \"marmalade\",\n \"maroon\",\n \"married\",\n \"marrow\",\n \"marry\",\n \"marshland\",\n \"marshy\",\n \"marsupial\",\n \"marvelous\",\n \"marxism\",\n \"mascot\",\n \"masculine\",\n \"mashed\",\n \"mashing\",\n \"massager\",\n \"masses\",\n \"massive\",\n \"mastiff\",\n \"matador\",\n \"matchbook\",\n \"matchbox\",\n \"matcher\",\n \"matching\",\n \"matchless\",\n \"material\",\n \"maternal\",\n \"maternity\",\n \"math\",\n \"mating\",\n \"matriarch\",\n \"matrimony\",\n \"matrix\",\n \"matron\",\n \"matted\",\n \"matter\",\n \"maturely\",\n \"maturing\",\n \"maturity\",\n \"mauve\",\n \"maverick\",\n \"maximize\",\n \"maximum\",\n \"maybe\",\n \"mayday\",\n \"mayflower\",\n \"moaner\",\n \"moaning\",\n \"mobile\",\n \"mobility\",\n \"mobilize\",\n \"mobster\",\n \"mocha\",\n \"mocker\",\n \"mockup\",\n \"modified\",\n \"modify\",\n \"modular\",\n \"modulator\",\n \"module\",\n \"moisten\",\n \"moistness\",\n \"moisture\",\n \"molar\",\n \"molasses\",\n \"mold\",\n \"molecular\",\n \"molecule\",\n \"molehill\",\n \"mollusk\",\n \"mom\",\n \"monastery\",\n \"monday\",\n \"monetary\",\n \"monetize\",\n \"moneybags\",\n \"moneyless\",\n \"moneywise\",\n \"mongoose\",\n \"mongrel\",\n \"monitor\",\n \"monkhood\",\n \"monogamy\",\n \"monogram\",\n \"monologue\",\n \"monopoly\",\n \"monorail\",\n \"monotone\",\n \"monotype\",\n \"monoxide\",\n \"monsieur\",\n \"monsoon\",\n \"monstrous\",\n \"monthly\",\n \"monument\",\n \"moocher\",\n \"moodiness\",\n \"moody\",\n \"mooing\",\n \"moonbeam\",\n \"mooned\",\n \"moonlight\",\n \"moonlike\",\n \"moonlit\",\n \"moonrise\",\n \"moonscape\",\n \"moonshine\",\n \"moonstone\",\n \"moonwalk\",\n \"mop\",\n \"morale\",\n \"morality\",\n \"morally\",\n \"morbidity\",\n \"morbidly\",\n \"morphine\",\n \"morphing\",\n \"morse\",\n \"mortality\",\n \"mortally\",\n \"mortician\",\n \"mortified\",\n \"mortify\",\n \"mortuary\",\n \"mosaic\",\n \"mossy\",\n \"most\",\n \"mothball\",\n \"mothproof\",\n \"motion\",\n \"motivate\",\n \"motivator\",\n \"motive\",\n \"motocross\",\n \"motor\",\n \"motto\",\n \"mountable\",\n \"mountain\",\n \"mounted\",\n \"mounting\",\n \"mourner\",\n \"mournful\",\n \"mouse\",\n \"mousiness\",\n \"moustache\",\n \"mousy\",\n \"mouth\",\n \"movable\",\n \"move\",\n \"movie\",\n \"moving\",\n \"mower\",\n \"mowing\",\n \"much\",\n \"muck\",\n \"mud\",\n \"mug\",\n \"mulberry\",\n \"mulch\",\n \"mule\",\n \"mulled\",\n \"mullets\",\n \"multiple\",\n \"multiply\",\n \"multitask\",\n \"multitude\",\n \"mumble\",\n \"mumbling\",\n \"mumbo\",\n \"mummified\",\n \"mummify\",\n \"mummy\",\n \"mumps\",\n \"munchkin\",\n \"mundane\",\n \"municipal\",\n \"muppet\",\n \"mural\",\n \"murkiness\",\n \"murky\",\n \"murmuring\",\n \"muscular\",\n \"museum\",\n \"mushily\",\n \"mushiness\",\n \"mushroom\",\n \"mushy\",\n \"music\",\n \"musket\",\n \"muskiness\",\n \"musky\",\n \"mustang\",\n \"mustard\",\n \"muster\",\n \"mustiness\",\n \"musty\",\n \"mutable\",\n \"mutate\",\n \"mutation\",\n \"mute\",\n \"mutilated\",\n \"mutilator\",\n \"mutiny\",\n \"mutt\",\n \"mutual\",\n \"muzzle\",\n \"myself\",\n \"myspace\",\n \"mystified\",\n \"mystify\",\n \"myth\",\n \"nacho\",\n \"nag\",\n \"nail\",\n \"name\",\n \"naming\",\n \"nanny\",\n \"nanometer\",\n \"nape\",\n \"napkin\",\n \"napped\",\n \"napping\",\n \"nappy\",\n \"narrow\",\n \"nastily\",\n \"nastiness\",\n \"national\",\n \"native\",\n \"nativity\",\n \"natural\",\n \"nature\",\n \"naturist\",\n \"nautical\",\n \"navigate\",\n \"navigator\",\n \"navy\",\n \"nearby\",\n \"nearest\",\n \"nearly\",\n \"nearness\",\n \"neatly\",\n \"neatness\",\n \"nebula\",\n \"nebulizer\",\n \"nectar\",\n \"negate\",\n \"negation\",\n \"negative\",\n \"neglector\",\n \"negligee\",\n \"negligent\",\n \"negotiate\",\n \"nemeses\",\n \"nemesis\",\n \"neon\",\n \"nephew\",\n \"nerd\",\n \"nervous\",\n \"nervy\",\n \"nest\",\n \"net\",\n \"neurology\",\n \"neuron\",\n \"neurosis\",\n \"neurotic\",\n \"neuter\",\n \"neutron\",\n \"never\",\n \"next\",\n \"nibble\",\n \"nickname\",\n \"nicotine\",\n \"niece\",\n \"nifty\",\n \"nimble\",\n \"nimbly\",\n \"nineteen\",\n \"ninetieth\",\n \"ninja\",\n \"nintendo\",\n \"ninth\",\n \"nuclear\",\n \"nuclei\",\n \"nucleus\",\n \"nugget\",\n \"nullify\",\n \"number\",\n \"numbing\",\n \"numbly\",\n \"numbness\",\n \"numeral\",\n \"numerate\",\n \"numerator\",\n \"numeric\",\n \"numerous\",\n \"nuptials\",\n \"nursery\",\n \"nursing\",\n \"nurture\",\n \"nutcase\",\n \"nutlike\",\n \"nutmeg\",\n \"nutrient\",\n \"nutshell\",\n \"nuttiness\",\n \"nutty\",\n \"nuzzle\",\n \"nylon\",\n \"oaf\",\n \"oak\",\n \"oasis\",\n \"oat\",\n \"obedience\",\n \"obedient\",\n \"obituary\",\n \"object\",\n \"obligate\",\n \"obliged\",\n \"oblivion\",\n \"oblivious\",\n \"oblong\",\n \"obnoxious\",\n \"oboe\",\n \"obscure\",\n \"obscurity\",\n \"observant\",\n \"observer\",\n \"observing\",\n \"obsessed\",\n \"obsession\",\n \"obsessive\",\n \"obsolete\",\n \"obstacle\",\n \"obstinate\",\n \"obstruct\",\n \"obtain\",\n \"obtrusive\",\n \"obtuse\",\n \"obvious\",\n \"occultist\",\n \"occupancy\",\n \"occupant\",\n \"occupier\",\n \"occupy\",\n \"ocean\",\n \"ocelot\",\n \"octagon\",\n \"octane\",\n \"october\",\n \"octopus\",\n \"ogle\",\n \"oil\",\n \"oink\",\n \"ointment\",\n \"okay\",\n \"old\",\n \"olive\",\n \"olympics\",\n \"omega\",\n \"omen\",\n \"ominous\",\n \"omission\",\n \"omit\",\n \"omnivore\",\n \"onboard\",\n \"oncoming\",\n \"ongoing\",\n \"onion\",\n \"online\",\n \"onlooker\",\n \"only\",\n \"onscreen\",\n \"onset\",\n \"onshore\",\n \"onslaught\",\n \"onstage\",\n \"onto\",\n \"onward\",\n \"onyx\",\n \"oops\",\n \"ooze\",\n \"oozy\",\n \"opacity\",\n \"opal\",\n \"open\",\n \"operable\",\n \"operate\",\n \"operating\",\n \"operation\",\n \"operative\",\n \"operator\",\n \"opium\",\n \"opossum\",\n \"opponent\",\n \"oppose\",\n \"opposing\",\n \"opposite\",\n \"oppressed\",\n \"oppressor\",\n \"opt\",\n \"opulently\",\n \"osmosis\",\n \"other\",\n \"otter\",\n \"ouch\",\n \"ought\",\n \"ounce\",\n \"outage\",\n \"outback\",\n \"outbid\",\n \"outboard\",\n \"outbound\",\n \"outbreak\",\n \"outburst\",\n \"outcast\",\n \"outclass\",\n \"outcome\",\n \"outdated\",\n \"outdoors\",\n \"outer\",\n \"outfield\",\n \"outfit\",\n \"outflank\",\n \"outgoing\",\n \"outgrow\",\n \"outhouse\",\n \"outing\",\n \"outlast\",\n \"outlet\",\n \"outline\",\n \"outlook\",\n \"outlying\",\n \"outmatch\",\n \"outmost\",\n \"outnumber\",\n \"outplayed\",\n \"outpost\",\n \"outpour\",\n \"output\",\n \"outrage\",\n \"outrank\",\n \"outreach\",\n \"outright\",\n \"outscore\",\n \"outsell\",\n \"outshine\",\n \"outshoot\",\n \"outsider\",\n \"outskirts\",\n \"outsmart\",\n \"outsource\",\n \"outspoken\",\n \"outtakes\",\n \"outthink\",\n \"outward\",\n \"outweigh\",\n \"outwit\",\n \"oval\",\n \"ovary\",\n \"oven\",\n \"overact\",\n \"overall\",\n \"overarch\",\n \"overbid\",\n \"overbill\",\n \"overbite\",\n \"overblown\",\n \"overboard\",\n \"overbook\",\n \"overbuilt\",\n \"overcast\",\n \"overcoat\",\n \"overcome\",\n \"overcook\",\n \"overcrowd\",\n \"overdraft\",\n \"overdrawn\",\n \"overdress\",\n \"overdrive\",\n \"overdue\",\n \"overeager\",\n \"overeater\",\n \"overexert\",\n \"overfed\",\n \"overfeed\",\n \"overfill\",\n \"overflow\",\n \"overfull\",\n \"overgrown\",\n \"overhand\",\n \"overhang\",\n \"overhaul\",\n \"overhead\",\n \"overhear\",\n \"overheat\",\n \"overhung\",\n \"overjoyed\",\n \"overkill\",\n \"overlabor\",\n \"overlaid\",\n \"overlap\",\n \"overlay\",\n \"overload\",\n \"overlook\",\n \"overlord\",\n \"overlying\",\n \"overnight\",\n \"overpass\",\n \"overpay\",\n \"overplant\",\n \"overplay\",\n \"overpower\",\n \"overprice\",\n \"overrate\",\n \"overreach\",\n \"overreact\",\n \"override\",\n \"overripe\",\n \"overrule\",\n \"overrun\",\n \"overshoot\",\n \"overshot\",\n \"oversight\",\n \"oversized\",\n \"oversleep\",\n \"oversold\",\n \"overspend\",\n \"overstate\",\n \"overstay\",\n \"overstep\",\n \"overstock\",\n \"overstuff\",\n \"oversweet\",\n \"overtake\",\n \"overthrow\",\n \"overtime\",\n \"overtly\",\n \"overtone\",\n \"overture\",\n \"overturn\",\n \"overuse\",\n \"overvalue\",\n \"overview\",\n \"overwrite\",\n \"owl\",\n \"oxford\",\n \"oxidant\",\n \"oxidation\",\n \"oxidize\",\n \"oxidizing\",\n \"oxygen\",\n \"oxymoron\",\n \"oyster\",\n \"ozone\",\n \"paced\",\n \"pacemaker\",\n \"pacific\",\n \"pacifier\",\n \"pacifism\",\n \"pacifist\",\n \"pacify\",\n \"padded\",\n \"padding\",\n \"paddle\",\n \"paddling\",\n \"padlock\",\n \"pagan\",\n \"pager\",\n \"paging\",\n \"pajamas\",\n \"palace\",\n \"palatable\",\n \"palm\",\n \"palpable\",\n \"palpitate\",\n \"paltry\",\n \"pampered\",\n \"pamperer\",\n \"pampers\",\n \"pamphlet\",\n \"panama\",\n \"pancake\",\n \"pancreas\",\n \"panda\",\n \"pandemic\",\n \"pang\",\n \"panhandle\",\n \"panic\",\n \"panning\",\n \"panorama\",\n \"panoramic\",\n \"panther\",\n \"pantomime\",\n \"pantry\",\n \"pants\",\n \"pantyhose\",\n \"paparazzi\",\n \"papaya\",\n \"paper\",\n \"paprika\",\n \"papyrus\",\n \"parabola\",\n \"parachute\",\n \"parade\",\n \"paradox\",\n \"paragraph\",\n \"parakeet\",\n \"paralegal\",\n \"paralyses\",\n \"paralysis\",\n \"paralyze\",\n \"paramedic\",\n \"parameter\",\n \"paramount\",\n \"parasail\",\n \"parasite\",\n \"parasitic\",\n \"parcel\",\n \"parched\",\n \"parchment\",\n \"pardon\",\n \"parish\",\n \"parka\",\n \"parking\",\n \"parkway\",\n \"parlor\",\n \"parmesan\",\n \"parole\",\n \"parrot\",\n \"parsley\",\n \"parsnip\",\n \"partake\",\n \"parted\",\n \"parting\",\n \"partition\",\n \"partly\",\n \"partner\",\n \"partridge\",\n \"party\",\n \"passable\",\n \"passably\",\n \"passage\",\n \"passcode\",\n \"passenger\",\n \"passerby\",\n \"passing\",\n \"passion\",\n \"passive\",\n \"passivism\",\n \"passover\",\n \"passport\",\n \"password\",\n \"pasta\",\n \"pasted\",\n \"pastel\",\n \"pastime\",\n \"pastor\",\n \"pastrami\",\n \"pasture\",\n \"pasty\",\n \"patchwork\",\n \"patchy\",\n \"paternal\",\n \"paternity\",\n \"path\",\n \"patience\",\n \"patient\",\n \"patio\",\n \"patriarch\",\n \"patriot\",\n \"patrol\",\n \"patronage\",\n \"patronize\",\n \"pauper\",\n \"pavement\",\n \"paver\",\n \"pavestone\",\n \"pavilion\",\n \"paving\",\n \"pawing\",\n \"payable\",\n \"payback\",\n \"paycheck\",\n \"payday\",\n \"payee\",\n \"payer\",\n \"paying\",\n \"payment\",\n \"payphone\",\n \"payroll\",\n \"pebble\",\n \"pebbly\",\n \"pecan\",\n \"pectin\",\n \"peculiar\",\n \"peddling\",\n \"pediatric\",\n \"pedicure\",\n \"pedigree\",\n \"pedometer\",\n \"pegboard\",\n \"pelican\",\n \"pellet\",\n \"pelt\",\n \"pelvis\",\n \"penalize\",\n \"penalty\",\n \"pencil\",\n \"pendant\",\n \"pending\",\n \"penholder\",\n \"penknife\",\n \"pennant\",\n \"penniless\",\n \"penny\",\n \"penpal\",\n \"pension\",\n \"pentagon\",\n \"pentagram\",\n \"pep\",\n \"perceive\",\n \"percent\",\n \"perch\",\n \"percolate\",\n \"perennial\",\n \"perfected\",\n \"perfectly\",\n \"perfume\",\n \"periscope\",\n \"perish\",\n \"perjurer\",\n \"perjury\",\n \"perkiness\",\n \"perky\",\n \"perm\",\n \"peroxide\",\n \"perpetual\",\n \"perplexed\",\n \"persecute\",\n \"persevere\",\n \"persuaded\",\n \"persuader\",\n \"pesky\",\n \"peso\",\n \"pessimism\",\n \"pessimist\",\n \"pester\",\n \"pesticide\",\n \"petal\",\n \"petite\",\n \"petition\",\n \"petri\",\n \"petroleum\",\n \"petted\",\n \"petticoat\",\n \"pettiness\",\n \"petty\",\n \"petunia\",\n \"phantom\",\n \"phobia\",\n \"phoenix\",\n \"phonebook\",\n \"phoney\",\n \"phonics\",\n \"phoniness\",\n \"phony\",\n \"phosphate\",\n \"photo\",\n \"phrase\",\n \"phrasing\",\n \"placard\",\n \"placate\",\n \"placidly\",\n \"plank\",\n \"planner\",\n \"plant\",\n \"plasma\",\n \"plaster\",\n \"plastic\",\n \"plated\",\n \"platform\",\n \"plating\",\n \"platinum\",\n \"platonic\",\n \"platter\",\n \"platypus\",\n \"plausible\",\n \"plausibly\",\n \"playable\",\n \"playback\",\n \"player\",\n \"playful\",\n \"playgroup\",\n \"playhouse\",\n \"playing\",\n \"playlist\",\n \"playmaker\",\n \"playmate\",\n \"playoff\",\n \"playpen\",\n \"playroom\",\n \"playset\",\n \"plaything\",\n \"playtime\",\n \"plaza\",\n \"pleading\",\n \"pleat\",\n \"pledge\",\n \"plentiful\",\n \"plenty\",\n \"plethora\",\n \"plexiglas\",\n \"pliable\",\n \"plod\",\n \"plop\",\n \"plot\",\n \"plow\",\n \"ploy\",\n \"pluck\",\n \"plug\",\n \"plunder\",\n \"plunging\",\n \"plural\",\n \"plus\",\n \"plutonium\",\n \"plywood\",\n \"poach\",\n \"pod\",\n \"poem\",\n \"poet\",\n \"pogo\",\n \"pointed\",\n \"pointer\",\n \"pointing\",\n \"pointless\",\n \"pointy\",\n \"poise\",\n \"poison\",\n \"poker\",\n \"poking\",\n \"polar\",\n \"police\",\n \"policy\",\n \"polio\",\n \"polish\",\n \"politely\",\n \"polka\",\n \"polo\",\n \"polyester\",\n \"polygon\",\n \"polygraph\",\n \"polymer\",\n \"poncho\",\n \"pond\",\n \"pony\",\n \"popcorn\",\n \"pope\",\n \"poplar\",\n \"popper\",\n \"poppy\",\n \"popsicle\",\n \"populace\",\n \"popular\",\n \"populate\",\n \"porcupine\",\n \"pork\",\n \"porous\",\n \"porridge\",\n \"portable\",\n \"portal\",\n \"portfolio\",\n \"porthole\",\n \"portion\",\n \"portly\",\n \"portside\",\n \"poser\",\n \"posh\",\n \"posing\",\n \"possible\",\n \"possibly\",\n \"possum\",\n \"postage\",\n \"postal\",\n \"postbox\",\n \"postcard\",\n \"posted\",\n \"poster\",\n \"posting\",\n \"postnasal\",\n \"posture\",\n \"postwar\",\n \"pouch\",\n \"pounce\",\n \"pouncing\",\n \"pound\",\n \"pouring\",\n \"pout\",\n \"powdered\",\n \"powdering\",\n \"powdery\",\n \"power\",\n \"powwow\",\n \"pox\",\n \"praising\",\n \"prance\",\n \"prancing\",\n \"pranker\",\n \"prankish\",\n \"prankster\",\n \"prayer\",\n \"praying\",\n \"preacher\",\n \"preaching\",\n \"preachy\",\n \"preamble\",\n \"precinct\",\n \"precise\",\n \"precision\",\n \"precook\",\n \"precut\",\n \"predator\",\n \"predefine\",\n \"predict\",\n \"preface\",\n \"prefix\",\n \"preflight\",\n \"preformed\",\n \"pregame\",\n \"pregnancy\",\n \"pregnant\",\n \"preheated\",\n \"prelaunch\",\n \"prelaw\",\n \"prelude\",\n \"premiere\",\n \"premises\",\n \"premium\",\n \"prenatal\",\n \"preoccupy\",\n \"preorder\",\n \"prepaid\",\n \"prepay\",\n \"preplan\",\n \"preppy\",\n \"preschool\",\n \"prescribe\",\n \"preseason\",\n \"preset\",\n \"preshow\",\n \"president\",\n \"presoak\",\n \"press\",\n \"presume\",\n \"presuming\",\n \"preteen\",\n \"pretended\",\n \"pretender\",\n \"pretense\",\n \"pretext\",\n \"pretty\",\n \"pretzel\",\n \"prevail\",\n \"prevalent\",\n \"prevent\",\n \"preview\",\n \"previous\",\n \"prewar\",\n \"prewashed\",\n \"prideful\",\n \"pried\",\n \"primal\",\n \"primarily\",\n \"primary\",\n \"primate\",\n \"primer\",\n \"primp\",\n \"princess\",\n \"print\",\n \"prior\",\n \"prism\",\n \"prison\",\n \"prissy\",\n \"pristine\",\n \"privacy\",\n \"private\",\n \"privatize\",\n \"prize\",\n \"proactive\",\n \"probable\",\n \"probably\",\n \"probation\",\n \"probe\",\n \"probing\",\n \"probiotic\",\n \"problem\",\n \"procedure\",\n \"process\",\n \"proclaim\",\n \"procreate\",\n \"procurer\",\n \"prodigal\",\n \"prodigy\",\n \"produce\",\n \"product\",\n \"profane\",\n \"profanity\",\n \"professed\",\n \"professor\",\n \"profile\",\n \"profound\",\n \"profusely\",\n \"progeny\",\n \"prognosis\",\n \"program\",\n \"progress\",\n \"projector\",\n \"prologue\",\n \"prolonged\",\n \"promenade\",\n \"prominent\",\n \"promoter\",\n \"promotion\",\n \"prompter\",\n \"promptly\",\n \"prone\",\n \"prong\",\n \"pronounce\",\n \"pronto\",\n \"proofing\",\n \"proofread\",\n \"proofs\",\n \"propeller\",\n \"properly\",\n \"property\",\n \"proponent\",\n \"proposal\",\n \"propose\",\n \"props\",\n \"prorate\",\n \"protector\",\n \"protegee\",\n \"proton\",\n \"prototype\",\n \"protozoan\",\n \"protract\",\n \"protrude\",\n \"proud\",\n \"provable\",\n \"proved\",\n \"proven\",\n \"provided\",\n \"provider\",\n \"providing\",\n \"province\",\n \"proving\",\n \"provoke\",\n \"provoking\",\n \"provolone\",\n \"prowess\",\n \"prowler\",\n \"prowling\",\n \"proximity\",\n \"proxy\",\n \"prozac\",\n \"prude\",\n \"prudishly\",\n \"prune\",\n \"pruning\",\n \"pry\",\n \"psychic\",\n \"public\",\n \"publisher\",\n \"pucker\",\n \"pueblo\",\n \"pug\",\n \"pull\",\n \"pulmonary\",\n \"pulp\",\n \"pulsate\",\n \"pulse\",\n \"pulverize\",\n \"puma\",\n \"pumice\",\n \"pummel\",\n \"punch\",\n \"punctual\",\n \"punctuate\",\n \"punctured\",\n \"pungent\",\n \"punisher\",\n \"punk\",\n \"pupil\",\n \"puppet\",\n \"puppy\",\n \"purchase\",\n \"pureblood\",\n \"purebred\",\n \"purely\",\n \"pureness\",\n \"purgatory\",\n \"purge\",\n \"purging\",\n \"purifier\",\n \"purify\",\n \"purist\",\n \"puritan\",\n \"purity\",\n \"purple\",\n \"purplish\",\n \"purposely\",\n \"purr\",\n \"purse\",\n \"pursuable\",\n \"pursuant\",\n \"pursuit\",\n \"purveyor\",\n \"pushcart\",\n \"pushchair\",\n \"pusher\",\n \"pushiness\",\n \"pushing\",\n \"pushover\",\n \"pushpin\",\n \"pushup\",\n \"pushy\",\n \"putdown\",\n \"putt\",\n \"puzzle\",\n \"puzzling\",\n \"pyramid\",\n \"pyromania\",\n \"python\",\n \"quack\",\n \"quadrant\",\n \"quail\",\n \"quaintly\",\n \"quake\",\n \"quaking\",\n \"qualified\",\n \"qualifier\",\n \"qualify\",\n \"quality\",\n \"qualm\",\n \"quantum\",\n \"quarrel\",\n \"quarry\",\n \"quartered\",\n \"quarterly\",\n \"quarters\",\n \"quartet\",\n \"quench\",\n \"query\",\n \"quicken\",\n \"quickly\",\n \"quickness\",\n \"quicksand\",\n \"quickstep\",\n \"quiet\",\n \"quill\",\n \"quilt\",\n \"quintet\",\n \"quintuple\",\n \"quirk\",\n \"quit\",\n \"quiver\",\n \"quizzical\",\n \"quotable\",\n \"quotation\",\n \"quote\",\n \"rabid\",\n \"race\",\n \"racing\",\n \"racism\",\n \"rack\",\n \"racoon\",\n \"radar\",\n \"radial\",\n \"radiance\",\n \"radiantly\",\n \"radiated\",\n \"radiation\",\n \"radiator\",\n \"radio\",\n \"radish\",\n \"raffle\",\n \"raft\",\n \"rage\",\n \"ragged\",\n \"raging\",\n \"ragweed\",\n \"raider\",\n \"railcar\",\n \"railing\",\n \"railroad\",\n \"railway\",\n \"raisin\",\n \"rake\",\n \"raking\",\n \"rally\",\n \"ramble\",\n \"rambling\",\n \"ramp\",\n \"ramrod\",\n \"ranch\",\n \"rancidity\",\n \"random\",\n \"ranged\",\n \"ranger\",\n \"ranging\",\n \"ranked\",\n \"ranking\",\n \"ransack\",\n \"ranting\",\n \"rants\",\n \"rare\",\n \"rarity\",\n \"rascal\",\n \"rash\",\n \"rasping\",\n \"ravage\",\n \"raven\",\n \"ravine\",\n \"raving\",\n \"ravioli\",\n \"ravishing\",\n \"reabsorb\",\n \"reach\",\n \"reacquire\",\n \"reaction\",\n \"reactive\",\n \"reactor\",\n \"reaffirm\",\n \"ream\",\n \"reanalyze\",\n \"reappear\",\n \"reapply\",\n \"reappoint\",\n \"reapprove\",\n \"rearrange\",\n \"rearview\",\n \"reason\",\n \"reassign\",\n \"reassure\",\n \"reattach\",\n \"reawake\",\n \"rebalance\",\n \"rebate\",\n \"rebel\",\n \"rebirth\",\n \"reboot\",\n \"reborn\",\n \"rebound\",\n \"rebuff\",\n \"rebuild\",\n \"rebuilt\",\n \"reburial\",\n \"rebuttal\",\n \"recall\",\n \"recant\",\n \"recapture\",\n \"recast\",\n \"recede\",\n \"recent\",\n \"recess\",\n \"recharger\",\n \"recipient\",\n \"recital\",\n \"recite\",\n \"reckless\",\n \"reclaim\",\n \"recliner\",\n \"reclining\",\n \"recluse\",\n \"reclusive\",\n \"recognize\",\n \"recoil\",\n \"recollect\",\n \"recolor\",\n \"reconcile\",\n \"reconfirm\",\n \"reconvene\",\n \"recopy\",\n \"record\",\n \"recount\",\n \"recoup\",\n \"recovery\",\n \"recreate\",\n \"rectal\",\n \"rectangle\",\n \"rectified\",\n \"rectify\",\n \"recycled\",\n \"recycler\",\n \"recycling\",\n \"reemerge\",\n \"reenact\",\n \"reenter\",\n \"reentry\",\n \"reexamine\",\n \"referable\",\n \"referee\",\n \"reference\",\n \"refill\",\n \"refinance\",\n \"refined\",\n \"refinery\",\n \"refining\",\n \"refinish\",\n \"reflected\",\n \"reflector\",\n \"reflex\",\n \"reflux\",\n \"refocus\",\n \"refold\",\n \"reforest\",\n \"reformat\",\n \"reformed\",\n \"reformer\",\n \"reformist\",\n \"refract\",\n \"refrain\",\n \"refreeze\",\n \"refresh\",\n \"refried\",\n \"refueling\",\n \"refund\",\n \"refurbish\",\n \"refurnish\",\n \"refusal\",\n \"refuse\",\n \"refusing\",\n \"refutable\",\n \"refute\",\n \"regain\",\n \"regalia\",\n \"regally\",\n \"reggae\",\n \"regime\",\n \"region\",\n \"register\",\n \"registrar\",\n \"registry\",\n \"regress\",\n \"regretful\",\n \"regroup\",\n \"regular\",\n \"regulate\",\n \"regulator\",\n \"rehab\",\n \"reheat\",\n \"rehire\",\n \"rehydrate\",\n \"reimburse\",\n \"reissue\",\n \"reiterate\",\n \"rejoice\",\n \"rejoicing\",\n \"rejoin\",\n \"rekindle\",\n \"relapse\",\n \"relapsing\",\n \"relatable\",\n \"related\",\n \"relation\",\n \"relative\",\n \"relax\",\n \"relay\",\n \"relearn\",\n \"release\",\n \"relenting\",\n \"reliable\",\n \"reliably\",\n \"reliance\",\n \"reliant\",\n \"relic\",\n \"relieve\",\n \"relieving\",\n \"relight\",\n \"relish\",\n \"relive\",\n \"reload\",\n \"relocate\",\n \"relock\",\n \"reluctant\",\n \"rely\",\n \"remake\",\n \"remark\",\n \"remarry\",\n \"rematch\",\n \"remedial\",\n \"remedy\",\n \"remember\",\n \"reminder\",\n \"remindful\",\n \"remission\",\n \"remix\",\n \"remnant\",\n \"remodeler\",\n \"remold\",\n \"remorse\",\n \"remote\",\n \"removable\",\n \"removal\",\n \"removed\",\n \"remover\",\n \"removing\",\n \"rename\",\n \"renderer\",\n \"rendering\",\n \"rendition\",\n \"renegade\",\n \"renewable\",\n \"renewably\",\n \"renewal\",\n \"renewed\",\n \"renounce\",\n \"renovate\",\n \"renovator\",\n \"rentable\",\n \"rental\",\n \"rented\",\n \"renter\",\n \"reoccupy\",\n \"reoccur\",\n \"reopen\",\n \"reorder\",\n \"repackage\",\n \"repacking\",\n \"repaint\",\n \"repair\",\n \"repave\",\n \"repaying\",\n \"repayment\",\n \"repeal\",\n \"repeated\",\n \"repeater\",\n \"repent\",\n \"rephrase\",\n \"replace\",\n \"replay\",\n \"replica\",\n \"reply\",\n \"reporter\",\n \"repose\",\n \"repossess\",\n \"repost\",\n \"repressed\",\n \"reprimand\",\n \"reprint\",\n \"reprise\",\n \"reproach\",\n \"reprocess\",\n \"reproduce\",\n \"reprogram\",\n \"reps\",\n \"reptile\",\n \"reptilian\",\n \"repugnant\",\n \"repulsion\",\n \"repulsive\",\n \"repurpose\",\n \"reputable\",\n \"reputably\",\n \"request\",\n \"require\",\n \"requisite\",\n \"reroute\",\n \"rerun\",\n \"resale\",\n \"resample\",\n \"rescuer\",\n \"reseal\",\n \"research\",\n \"reselect\",\n \"reseller\",\n \"resemble\",\n \"resend\",\n \"resent\",\n \"reset\",\n \"reshape\",\n \"reshoot\",\n \"reshuffle\",\n \"residence\",\n \"residency\",\n \"resident\",\n \"residual\",\n \"residue\",\n \"resigned\",\n \"resilient\",\n \"resistant\",\n \"resisting\",\n \"resize\",\n \"resolute\",\n \"resolved\",\n \"resonant\",\n \"resonate\",\n \"resort\",\n \"resource\",\n \"respect\",\n \"resubmit\",\n \"result\",\n \"resume\",\n \"resupply\",\n \"resurface\",\n \"resurrect\",\n \"retail\",\n \"retainer\",\n \"retaining\",\n \"retake\",\n \"retaliate\",\n \"retention\",\n \"rethink\",\n \"retinal\",\n \"retired\",\n \"retiree\",\n \"retiring\",\n \"retold\",\n \"retool\",\n \"retorted\",\n \"retouch\",\n \"retrace\",\n \"retract\",\n \"retrain\",\n \"retread\",\n \"retreat\",\n \"retrial\",\n \"retrieval\",\n \"retriever\",\n \"retry\",\n \"return\",\n \"retying\",\n \"retype\",\n \"reunion\",\n \"reunite\",\n \"reusable\",\n \"reuse\",\n \"reveal\",\n \"reveler\",\n \"revenge\",\n \"revenue\",\n \"reverb\",\n \"revered\",\n \"reverence\",\n \"reverend\",\n \"reversal\",\n \"reverse\",\n \"reversing\",\n \"reversion\",\n \"revert\",\n \"revisable\",\n \"revise\",\n \"revision\",\n \"revisit\",\n \"revivable\",\n \"revival\",\n \"reviver\",\n \"reviving\",\n \"revocable\",\n \"revoke\",\n \"revolt\",\n \"revolver\",\n \"revolving\",\n \"reward\",\n \"rewash\",\n \"rewind\",\n \"rewire\",\n \"reword\",\n \"rework\",\n \"rewrap\",\n \"rewrite\",\n \"rhyme\",\n \"ribbon\",\n \"ribcage\",\n \"rice\",\n \"riches\",\n \"richly\",\n \"richness\",\n \"rickety\",\n \"ricotta\",\n \"riddance\",\n \"ridden\",\n \"ride\",\n \"riding\",\n \"rifling\",\n \"rift\",\n \"rigging\",\n \"rigid\",\n \"rigor\",\n \"rimless\",\n \"rimmed\",\n \"rind\",\n \"rink\",\n \"rinse\",\n \"rinsing\",\n \"riot\",\n \"ripcord\",\n \"ripeness\",\n \"ripening\",\n \"ripping\",\n \"ripple\",\n \"rippling\",\n \"riptide\",\n \"rise\",\n \"rising\",\n \"risk\",\n \"risotto\",\n \"ritalin\",\n \"ritzy\",\n \"rival\",\n \"riverbank\",\n \"riverbed\",\n \"riverboat\",\n \"riverside\",\n \"riveter\",\n \"riveting\",\n \"roamer\",\n \"roaming\",\n \"roast\",\n \"robbing\",\n \"robe\",\n \"robin\",\n \"robotics\",\n \"robust\",\n \"rockband\",\n \"rocker\",\n \"rocket\",\n \"rockfish\",\n \"rockiness\",\n \"rocking\",\n \"rocklike\",\n \"rockslide\",\n \"rockstar\",\n \"rocky\",\n \"rogue\",\n \"roman\",\n \"romp\",\n \"rope\",\n \"roping\",\n \"roster\",\n \"rosy\",\n \"rotten\",\n \"rotting\",\n \"rotunda\",\n \"roulette\",\n \"rounding\",\n \"roundish\",\n \"roundness\",\n \"roundup\",\n \"roundworm\",\n \"routine\",\n \"routing\",\n \"rover\",\n \"roving\",\n \"royal\",\n \"rubbed\",\n \"rubber\",\n \"rubbing\",\n \"rubble\",\n \"rubdown\",\n \"ruby\",\n \"ruckus\",\n \"rudder\",\n \"rug\",\n \"ruined\",\n \"rule\",\n \"rumble\",\n \"rumbling\",\n \"rummage\",\n \"rumor\",\n \"runaround\",\n \"rundown\",\n \"runner\",\n \"running\",\n \"runny\",\n \"runt\",\n \"runway\",\n \"rupture\",\n \"rural\",\n \"ruse\",\n \"rush\",\n \"rust\",\n \"rut\",\n \"sabbath\",\n \"sabotage\",\n \"sacrament\",\n \"sacred\",\n \"sacrifice\",\n \"sadden\",\n \"saddlebag\",\n \"saddled\",\n \"saddling\",\n \"sadly\",\n \"sadness\",\n \"safari\",\n \"safeguard\",\n \"safehouse\",\n \"safely\",\n \"safeness\",\n \"saffron\",\n \"saga\",\n \"sage\",\n \"sagging\",\n \"saggy\",\n \"said\",\n \"saint\",\n \"sake\",\n \"salad\",\n \"salami\",\n \"salaried\",\n \"salary\",\n \"saline\",\n \"salon\",\n \"saloon\",\n \"salsa\",\n \"salt\",\n \"salutary\",\n \"salute\",\n \"salvage\",\n \"salvaging\",\n \"salvation\",\n \"same\",\n \"sample\",\n \"sampling\",\n \"sanction\",\n \"sanctity\",\n \"sanctuary\",\n \"sandal\",\n \"sandbag\",\n \"sandbank\",\n \"sandbar\",\n \"sandblast\",\n \"sandbox\",\n \"sanded\",\n \"sandfish\",\n \"sanding\",\n \"sandlot\",\n \"sandpaper\",\n \"sandpit\",\n \"sandstone\",\n \"sandstorm\",\n \"sandworm\",\n \"sandy\",\n \"sanitary\",\n \"sanitizer\",\n \"sank\",\n \"santa\",\n \"sapling\",\n \"sappiness\",\n \"sappy\",\n \"sarcasm\",\n \"sarcastic\",\n \"sardine\",\n \"sash\",\n \"sasquatch\",\n \"sassy\",\n \"satchel\",\n \"satiable\",\n \"satin\",\n \"satirical\",\n \"satisfied\",\n \"satisfy\",\n \"saturate\",\n \"saturday\",\n \"sauciness\",\n \"saucy\",\n \"sauna\",\n \"savage\",\n \"savanna\",\n \"saved\",\n \"savings\",\n \"savior\",\n \"savor\",\n \"saxophone\",\n \"say\",\n \"scabbed\",\n \"scabby\",\n \"scalded\",\n \"scalding\",\n \"scale\",\n \"scaling\",\n \"scallion\",\n \"scallop\",\n \"scalping\",\n \"scam\",\n \"scandal\",\n \"scanner\",\n \"scanning\",\n \"scant\",\n \"scapegoat\",\n \"scarce\",\n \"scarcity\",\n \"scarecrow\",\n \"scared\",\n \"scarf\",\n \"scarily\",\n \"scariness\",\n \"scarring\",\n \"scary\",\n \"scavenger\",\n \"scenic\",\n \"schedule\",\n \"schematic\",\n \"scheme\",\n \"scheming\",\n \"schilling\",\n \"schnapps\",\n \"scholar\",\n \"science\",\n \"scientist\",\n \"scion\",\n \"scoff\",\n \"scolding\",\n \"scone\",\n \"scoop\",\n \"scooter\",\n \"scope\",\n \"scorch\",\n \"scorebook\",\n \"scorecard\",\n \"scored\",\n \"scoreless\",\n \"scorer\",\n \"scoring\",\n \"scorn\",\n \"scorpion\",\n \"scotch\",\n \"scoundrel\",\n \"scoured\",\n \"scouring\",\n \"scouting\",\n \"scouts\",\n \"scowling\",\n \"scrabble\",\n \"scraggly\",\n \"scrambled\",\n \"scrambler\",\n \"scrap\",\n \"scratch\",\n \"scrawny\",\n \"screen\",\n \"scribble\",\n \"scribe\",\n \"scribing\",\n \"scrimmage\",\n \"script\",\n \"scroll\",\n \"scrooge\",\n \"scrounger\",\n \"scrubbed\",\n \"scrubber\",\n \"scruffy\",\n \"scrunch\",\n \"scrutiny\",\n \"scuba\",\n \"scuff\",\n \"sculptor\",\n \"sculpture\",\n \"scurvy\",\n \"scuttle\",\n \"secluded\",\n \"secluding\",\n \"seclusion\",\n \"second\",\n \"secrecy\",\n \"secret\",\n \"sectional\",\n \"sector\",\n \"secular\",\n \"securely\",\n \"security\",\n \"sedan\",\n \"sedate\",\n \"sedation\",\n \"sedative\",\n \"sediment\",\n \"seduce\",\n \"seducing\",\n \"segment\",\n \"seismic\",\n \"seizing\",\n \"seldom\",\n \"selected\",\n \"selection\",\n \"selective\",\n \"selector\",\n \"self\",\n \"seltzer\",\n \"semantic\",\n \"semester\",\n \"semicolon\",\n \"semifinal\",\n \"seminar\",\n \"semisoft\",\n \"semisweet\",\n \"senate\",\n \"senator\",\n \"send\",\n \"senior\",\n \"senorita\",\n \"sensation\",\n \"sensitive\",\n \"sensitize\",\n \"sensually\",\n \"sensuous\",\n \"sepia\",\n \"september\",\n \"septic\",\n \"septum\",\n \"sequel\",\n \"sequence\",\n \"sequester\",\n \"series\",\n \"sermon\",\n \"serotonin\",\n \"serpent\",\n \"serrated\",\n \"serve\",\n \"service\",\n \"serving\",\n \"sesame\",\n \"sessions\",\n \"setback\",\n \"setting\",\n \"settle\",\n \"settling\",\n \"setup\",\n \"sevenfold\",\n \"seventeen\",\n \"seventh\",\n \"seventy\",\n \"severity\",\n \"shabby\",\n \"shack\",\n \"shaded\",\n \"shadily\",\n \"shadiness\",\n \"shading\",\n \"shadow\",\n \"shady\",\n \"shaft\",\n \"shakable\",\n \"shakily\",\n \"shakiness\",\n \"shaking\",\n \"shaky\",\n \"shale\",\n \"shallot\",\n \"shallow\",\n \"shame\",\n \"shampoo\",\n \"shamrock\",\n \"shank\",\n \"shanty\",\n \"shape\",\n \"shaping\",\n \"share\",\n \"sharpener\",\n \"sharper\",\n \"sharpie\",\n \"sharply\",\n \"sharpness\",\n \"shawl\",\n \"sheath\",\n \"shed\",\n \"sheep\",\n \"sheet\",\n \"shelf\",\n \"shell\",\n \"shelter\",\n \"shelve\",\n \"shelving\",\n \"sherry\",\n \"shield\",\n \"shifter\",\n \"shifting\",\n \"shiftless\",\n \"shifty\",\n \"shimmer\",\n \"shimmy\",\n \"shindig\",\n \"shine\",\n \"shingle\",\n \"shininess\",\n \"shining\",\n \"shiny\",\n \"ship\",\n \"shirt\",\n \"shivering\",\n \"shock\",\n \"shone\",\n \"shoplift\",\n \"shopper\",\n \"shopping\",\n \"shoptalk\",\n \"shore\",\n \"shortage\",\n \"shortcake\",\n \"shortcut\",\n \"shorten\",\n \"shorter\",\n \"shorthand\",\n \"shortlist\",\n \"shortly\",\n \"shortness\",\n \"shorts\",\n \"shortwave\",\n \"shorty\",\n \"shout\",\n \"shove\",\n \"showbiz\",\n \"showcase\",\n \"showdown\",\n \"shower\",\n \"showgirl\",\n \"showing\",\n \"showman\",\n \"shown\",\n \"showoff\",\n \"showpiece\",\n \"showplace\",\n \"showroom\",\n \"showy\",\n \"shrank\",\n \"shrapnel\",\n \"shredder\",\n \"shredding\",\n \"shrewdly\",\n \"shriek\",\n \"shrill\",\n \"shrimp\",\n \"shrine\",\n \"shrink\",\n \"shrivel\",\n \"shrouded\",\n \"shrubbery\",\n \"shrubs\",\n \"shrug\",\n \"shrunk\",\n \"shucking\",\n \"shudder\",\n \"shuffle\",\n \"shuffling\",\n \"shun\",\n \"shush\",\n \"shut\",\n \"shy\",\n \"siamese\",\n \"siberian\",\n \"sibling\",\n \"siding\",\n \"sierra\",\n \"siesta\",\n \"sift\",\n \"sighing\",\n \"silenced\",\n \"silencer\",\n \"silent\",\n \"silica\",\n \"silicon\",\n \"silk\",\n \"silliness\",\n \"silly\",\n \"silo\",\n \"silt\",\n \"silver\",\n \"similarly\",\n \"simile\",\n \"simmering\",\n \"simple\",\n \"simplify\",\n \"simply\",\n \"sincere\",\n \"sincerity\",\n \"singer\",\n \"singing\",\n \"single\",\n \"singular\",\n \"sinister\",\n \"sinless\",\n \"sinner\",\n \"sinuous\",\n \"sip\",\n \"siren\",\n \"sister\",\n \"sitcom\",\n \"sitter\",\n \"sitting\",\n \"situated\",\n \"situation\",\n \"sixfold\",\n \"sixteen\",\n \"sixth\",\n \"sixties\",\n \"sixtieth\",\n \"sixtyfold\",\n \"sizable\",\n \"sizably\",\n \"size\",\n \"sizing\",\n \"sizzle\",\n \"sizzling\",\n \"skater\",\n \"skating\",\n \"skedaddle\",\n \"skeletal\",\n \"skeleton\",\n \"skeptic\",\n \"sketch\",\n \"skewed\",\n \"skewer\",\n \"skid\",\n \"skied\",\n \"skier\",\n \"skies\",\n \"skiing\",\n \"skilled\",\n \"skillet\",\n \"skillful\",\n \"skimmed\",\n \"skimmer\",\n \"skimming\",\n \"skimpily\",\n \"skincare\",\n \"skinhead\",\n \"skinless\",\n \"skinning\",\n \"skinny\",\n \"skintight\",\n \"skipper\",\n \"skipping\",\n \"skirmish\",\n \"skirt\",\n \"skittle\",\n \"skydiver\",\n \"skylight\",\n \"skyline\",\n \"skype\",\n \"skyrocket\",\n \"skyward\",\n \"slab\",\n \"slacked\",\n \"slacker\",\n \"slacking\",\n \"slackness\",\n \"slacks\",\n \"slain\",\n \"slam\",\n \"slander\",\n \"slang\",\n \"slapping\",\n \"slapstick\",\n \"slashed\",\n \"slashing\",\n \"slate\",\n \"slather\",\n \"slaw\",\n \"sled\",\n \"sleek\",\n \"sleep\",\n \"sleet\",\n \"sleeve\",\n \"slept\",\n \"sliceable\",\n \"sliced\",\n \"slicer\",\n \"slicing\",\n \"slick\",\n \"slider\",\n \"slideshow\",\n \"sliding\",\n \"slighted\",\n \"slighting\",\n \"slightly\",\n \"slimness\",\n \"slimy\",\n \"slinging\",\n \"slingshot\",\n \"slinky\",\n \"slip\",\n \"slit\",\n \"sliver\",\n \"slobbery\",\n \"slogan\",\n \"sloped\",\n \"sloping\",\n \"sloppily\",\n \"sloppy\",\n \"slot\",\n \"slouching\",\n \"slouchy\",\n \"sludge\",\n \"slug\",\n \"slum\",\n \"slurp\",\n \"slush\",\n \"sly\",\n \"small\",\n \"smartly\",\n \"smartness\",\n \"smasher\",\n \"smashing\",\n \"smashup\",\n \"smell\",\n \"smelting\",\n \"smile\",\n \"smilingly\",\n \"smirk\",\n \"smite\",\n \"smith\",\n \"smitten\",\n \"smock\",\n \"smog\",\n \"smoked\",\n \"smokeless\",\n \"smokiness\",\n \"smoking\",\n \"smoky\",\n \"smolder\",\n \"smooth\",\n \"smother\",\n \"smudge\",\n \"smudgy\",\n \"smuggler\",\n \"smuggling\",\n \"smugly\",\n \"smugness\",\n \"snack\",\n \"snagged\",\n \"snaking\",\n \"snap\",\n \"snare\",\n \"snarl\",\n \"snazzy\",\n \"sneak\",\n \"sneer\",\n \"sneeze\",\n \"sneezing\",\n \"snide\",\n \"sniff\",\n \"snippet\",\n \"snipping\",\n \"snitch\",\n \"snooper\",\n \"snooze\",\n \"snore\",\n \"snoring\",\n \"snorkel\",\n \"snort\",\n \"snout\",\n \"snowbird\",\n \"snowboard\",\n \"snowbound\",\n \"snowcap\",\n \"snowdrift\",\n \"snowdrop\",\n \"snowfall\",\n \"snowfield\",\n \"snowflake\",\n \"snowiness\",\n \"snowless\",\n \"snowman\",\n \"snowplow\",\n \"snowshoe\",\n \"snowstorm\",\n \"snowsuit\",\n \"snowy\",\n \"snub\",\n \"snuff\",\n \"snuggle\",\n \"snugly\",\n \"snugness\",\n \"speak\",\n \"spearfish\",\n \"spearhead\",\n \"spearman\",\n \"spearmint\",\n \"species\",\n \"specimen\",\n \"specked\",\n \"speckled\",\n \"specks\",\n \"spectacle\",\n \"spectator\",\n \"spectrum\",\n \"speculate\",\n \"speech\",\n \"speed\",\n \"spellbind\",\n \"speller\",\n \"spelling\",\n \"spendable\",\n \"spender\",\n \"spending\",\n \"spent\",\n \"spew\",\n \"sphere\",\n \"spherical\",\n \"sphinx\",\n \"spider\",\n \"spied\",\n \"spiffy\",\n \"spill\",\n \"spilt\",\n \"spinach\",\n \"spinal\",\n \"spindle\",\n \"spinner\",\n \"spinning\",\n \"spinout\",\n \"spinster\",\n \"spiny\",\n \"spiral\",\n \"spirited\",\n \"spiritism\",\n \"spirits\",\n \"spiritual\",\n \"splashed\",\n \"splashing\",\n \"splashy\",\n \"splatter\",\n \"spleen\",\n \"splendid\",\n \"splendor\",\n \"splice\",\n \"splicing\",\n \"splinter\",\n \"splotchy\",\n \"splurge\",\n \"spoilage\",\n \"spoiled\",\n \"spoiler\",\n \"spoiling\",\n \"spoils\",\n \"spoken\",\n \"spokesman\",\n \"sponge\",\n \"spongy\",\n \"sponsor\",\n \"spoof\",\n \"spookily\",\n \"spooky\",\n \"spool\",\n \"spoon\",\n \"spore\",\n \"sporting\",\n \"sports\",\n \"sporty\",\n \"spotless\",\n \"spotlight\",\n \"spotted\",\n \"spotter\",\n \"spotting\",\n \"spotty\",\n \"spousal\",\n \"spouse\",\n \"spout\",\n \"sprain\",\n \"sprang\",\n \"sprawl\",\n \"spray\",\n \"spree\",\n \"sprig\",\n \"spring\",\n \"sprinkled\",\n \"sprinkler\",\n \"sprint\",\n \"sprite\",\n \"sprout\",\n \"spruce\",\n \"sprung\",\n \"spry\",\n \"spud\",\n \"spur\",\n \"sputter\",\n \"spyglass\",\n \"squabble\",\n \"squad\",\n \"squall\",\n \"squander\",\n \"squash\",\n \"squatted\",\n \"squatter\",\n \"squatting\",\n \"squeak\",\n \"squealer\",\n \"squealing\",\n \"squeamish\",\n \"squeegee\",\n \"squeeze\",\n \"squeezing\",\n \"squid\",\n \"squiggle\",\n \"squiggly\",\n \"squint\",\n \"squire\",\n \"squirt\",\n \"squishier\",\n \"squishy\",\n \"stability\",\n \"stabilize\",\n \"stable\",\n \"stack\",\n \"stadium\",\n \"staff\",\n \"stage\",\n \"staging\",\n \"stagnant\",\n \"stagnate\",\n \"stainable\",\n \"stained\",\n \"staining\",\n \"stainless\",\n \"stalemate\",\n \"staleness\",\n \"stalling\",\n \"stallion\",\n \"stamina\",\n \"stammer\",\n \"stamp\",\n \"stand\",\n \"stank\",\n \"staple\",\n \"stapling\",\n \"starboard\",\n \"starch\",\n \"stardom\",\n \"stardust\",\n \"starfish\",\n \"stargazer\",\n \"staring\",\n \"stark\",\n \"starless\",\n \"starlet\",\n \"starlight\",\n \"starlit\",\n \"starring\",\n \"starry\",\n \"starship\",\n \"starter\",\n \"starting\",\n \"startle\",\n \"startling\",\n \"startup\",\n \"starved\",\n \"starving\",\n \"stash\",\n \"state\",\n \"static\",\n \"statistic\",\n \"statue\",\n \"stature\",\n \"status\",\n \"statute\",\n \"statutory\",\n \"staunch\",\n \"stays\",\n \"steadfast\",\n \"steadier\",\n \"steadily\",\n \"steadying\",\n \"steam\",\n \"steed\",\n \"steep\",\n \"steerable\",\n \"steering\",\n \"steersman\",\n \"stegosaur\",\n \"stellar\",\n \"stem\",\n \"stench\",\n \"stencil\",\n \"step\",\n \"stereo\",\n \"sterile\",\n \"sterility\",\n \"sterilize\",\n \"sterling\",\n \"sternness\",\n \"sternum\",\n \"stew\",\n \"stick\",\n \"stiffen\",\n \"stiffly\",\n \"stiffness\",\n \"stifle\",\n \"stifling\",\n \"stillness\",\n \"stilt\",\n \"stimulant\",\n \"stimulate\",\n \"stimuli\",\n \"stimulus\",\n \"stinger\",\n \"stingily\",\n \"stinging\",\n \"stingray\",\n \"stingy\",\n \"stinking\",\n \"stinky\",\n \"stipend\",\n \"stipulate\",\n \"stir\",\n \"stitch\",\n \"stock\",\n \"stoic\",\n \"stoke\",\n \"stole\",\n \"stomp\",\n \"stonewall\",\n \"stoneware\",\n \"stonework\",\n \"stoning\",\n \"stony\",\n \"stood\",\n \"stooge\",\n \"stool\",\n \"stoop\",\n \"stoplight\",\n \"stoppable\",\n \"stoppage\",\n \"stopped\",\n \"stopper\",\n \"stopping\",\n \"stopwatch\",\n \"storable\",\n \"storage\",\n \"storeroom\",\n \"storewide\",\n \"storm\",\n \"stout\",\n \"stove\",\n \"stowaway\",\n \"stowing\",\n \"straddle\",\n \"straggler\",\n \"strained\",\n \"strainer\",\n \"straining\",\n \"strangely\",\n \"stranger\",\n \"strangle\",\n \"strategic\",\n \"strategy\",\n \"stratus\",\n \"straw\",\n \"stray\",\n \"streak\",\n \"stream\",\n \"street\",\n \"strength\",\n \"strenuous\",\n \"strep\",\n \"stress\",\n \"stretch\",\n \"strewn\",\n \"stricken\",\n \"strict\",\n \"stride\",\n \"strife\",\n \"strike\",\n \"striking\",\n \"strive\",\n \"striving\",\n \"strobe\",\n \"strode\",\n \"stroller\",\n \"strongbox\",\n \"strongly\",\n \"strongman\",\n \"struck\",\n \"structure\",\n \"strudel\",\n \"struggle\",\n \"strum\",\n \"strung\",\n \"strut\",\n \"stubbed\",\n \"stubble\",\n \"stubbly\",\n \"stubborn\",\n \"stucco\",\n \"stuck\",\n \"student\",\n \"studied\",\n \"studio\",\n \"study\",\n \"stuffed\",\n \"stuffing\",\n \"stuffy\",\n \"stumble\",\n \"stumbling\",\n \"stump\",\n \"stung\",\n \"stunned\",\n \"stunner\",\n \"stunning\",\n \"stunt\",\n \"stupor\",\n \"sturdily\",\n \"sturdy\",\n \"styling\",\n \"stylishly\",\n \"stylist\",\n \"stylized\",\n \"stylus\",\n \"suave\",\n \"subarctic\",\n \"subatomic\",\n \"subdivide\",\n \"subdued\",\n \"subduing\",\n \"subfloor\",\n \"subgroup\",\n \"subheader\",\n \"subject\",\n \"sublease\",\n \"sublet\",\n \"sublevel\",\n \"sublime\",\n \"submarine\",\n \"submerge\",\n \"submersed\",\n \"submitter\",\n \"subpanel\",\n \"subpar\",\n \"subplot\",\n \"subprime\",\n \"subscribe\",\n \"subscript\",\n \"subsector\",\n \"subside\",\n \"subsiding\",\n \"subsidize\",\n \"subsidy\",\n \"subsoil\",\n \"subsonic\",\n \"substance\",\n \"subsystem\",\n \"subtext\",\n \"subtitle\",\n \"subtly\",\n \"subtotal\",\n \"subtract\",\n \"subtype\",\n \"suburb\",\n \"subway\",\n \"subwoofer\",\n \"subzero\",\n \"succulent\",\n \"such\",\n \"suction\",\n \"sudden\",\n \"sudoku\",\n \"suds\",\n \"sufferer\",\n \"suffering\",\n \"suffice\",\n \"suffix\",\n \"suffocate\",\n \"suffrage\",\n \"sugar\",\n \"suggest\",\n \"suing\",\n \"suitable\",\n \"suitably\",\n \"suitcase\",\n \"suitor\",\n \"sulfate\",\n \"sulfide\",\n \"sulfite\",\n \"sulfur\",\n \"sulk\",\n \"sullen\",\n \"sulphate\",\n \"sulphuric\",\n \"sultry\",\n \"superbowl\",\n \"superglue\",\n \"superhero\",\n \"superior\",\n \"superjet\",\n \"superman\",\n \"supermom\",\n \"supernova\",\n \"supervise\",\n \"supper\",\n \"supplier\",\n \"supply\",\n \"support\",\n \"supremacy\",\n \"supreme\",\n \"surcharge\",\n \"surely\",\n \"sureness\",\n \"surface\",\n \"surfacing\",\n \"surfboard\",\n \"surfer\",\n \"surgery\",\n \"surgical\",\n \"surging\",\n \"surname\",\n \"surpass\",\n \"surplus\",\n \"surprise\",\n \"surreal\",\n \"surrender\",\n \"surrogate\",\n \"surround\",\n \"survey\",\n \"survival\",\n \"survive\",\n \"surviving\",\n \"survivor\",\n \"sushi\",\n \"suspect\",\n \"suspend\",\n \"suspense\",\n \"sustained\",\n \"sustainer\",\n \"swab\",\n \"swaddling\",\n \"swagger\",\n \"swampland\",\n \"swan\",\n \"swapping\",\n \"swarm\",\n \"sway\",\n \"swear\",\n \"sweat\",\n \"sweep\",\n \"swell\",\n \"swept\",\n \"swerve\",\n \"swifter\",\n \"swiftly\",\n \"swiftness\",\n \"swimmable\",\n \"swimmer\",\n \"swimming\",\n \"swimsuit\",\n \"swimwear\",\n \"swinger\",\n \"swinging\",\n \"swipe\",\n \"swirl\",\n \"switch\",\n \"swivel\",\n \"swizzle\",\n \"swooned\",\n \"swoop\",\n \"swoosh\",\n \"swore\",\n \"sworn\",\n \"swung\",\n \"sycamore\",\n \"sympathy\",\n \"symphonic\",\n \"symphony\",\n \"symptom\",\n \"synapse\",\n \"syndrome\",\n \"synergy\",\n \"synopses\",\n \"synopsis\",\n \"synthesis\",\n \"synthetic\",\n \"syrup\",\n \"system\",\n \"t-shirt\",\n \"tabasco\",\n \"tabby\",\n \"tableful\",\n \"tables\",\n \"tablet\",\n \"tableware\",\n \"tabloid\",\n \"tackiness\",\n \"tacking\",\n \"tackle\",\n \"tackling\",\n \"tacky\",\n \"taco\",\n \"tactful\",\n \"tactical\",\n \"tactics\",\n \"tactile\",\n \"tactless\",\n \"tadpole\",\n \"taekwondo\",\n \"tag\",\n \"tainted\",\n \"take\",\n \"taking\",\n \"talcum\",\n \"talisman\",\n \"tall\",\n \"talon\",\n \"tamale\",\n \"tameness\",\n \"tamer\",\n \"tamper\",\n \"tank\",\n \"tanned\",\n \"tannery\",\n \"tanning\",\n \"tantrum\",\n \"tapeless\",\n \"tapered\",\n \"tapering\",\n \"tapestry\",\n \"tapioca\",\n \"tapping\",\n \"taps\",\n \"tarantula\",\n \"target\",\n \"tarmac\",\n \"tarnish\",\n \"tarot\",\n \"tartar\",\n \"tartly\",\n \"tartness\",\n \"task\",\n \"tassel\",\n \"taste\",\n \"tastiness\",\n \"tasting\",\n \"tasty\",\n \"tattered\",\n \"tattle\",\n \"tattling\",\n \"tattoo\",\n \"taunt\",\n \"tavern\",\n \"thank\",\n \"that\",\n \"thaw\",\n \"theater\",\n \"theatrics\",\n \"thee\",\n \"theft\",\n \"theme\",\n \"theology\",\n \"theorize\",\n \"thermal\",\n \"thermos\",\n \"thesaurus\",\n \"these\",\n \"thesis\",\n \"thespian\",\n \"thicken\",\n \"thicket\",\n \"thickness\",\n \"thieving\",\n \"thievish\",\n \"thigh\",\n \"thimble\",\n \"thing\",\n \"think\",\n \"thinly\",\n \"thinner\",\n \"thinness\",\n \"thinning\",\n \"thirstily\",\n \"thirsting\",\n \"thirsty\",\n \"thirteen\",\n \"thirty\",\n \"thong\",\n \"thorn\",\n \"those\",\n \"thousand\",\n \"thrash\",\n \"thread\",\n \"threaten\",\n \"threefold\",\n \"thrift\",\n \"thrill\",\n \"thrive\",\n \"thriving\",\n \"throat\",\n \"throbbing\",\n \"throng\",\n \"throttle\",\n \"throwaway\",\n \"throwback\",\n \"thrower\",\n \"throwing\",\n \"thud\",\n \"thumb\",\n \"thumping\",\n \"thursday\",\n \"thus\",\n \"thwarting\",\n \"thyself\",\n \"tiara\",\n \"tibia\",\n \"tidal\",\n \"tidbit\",\n \"tidiness\",\n \"tidings\",\n \"tidy\",\n \"tiger\",\n \"tighten\",\n \"tightly\",\n \"tightness\",\n \"tightrope\",\n \"tightwad\",\n \"tigress\",\n \"tile\",\n \"tiling\",\n \"till\",\n \"tilt\",\n \"timid\",\n \"timing\",\n \"timothy\",\n \"tinderbox\",\n \"tinfoil\",\n \"tingle\",\n \"tingling\",\n \"tingly\",\n \"tinker\",\n \"tinkling\",\n \"tinsel\",\n \"tinsmith\",\n \"tint\",\n \"tinwork\",\n \"tiny\",\n \"tipoff\",\n \"tipped\",\n \"tipper\",\n \"tipping\",\n \"tiptoeing\",\n \"tiptop\",\n \"tiring\",\n \"tissue\",\n \"trace\",\n \"tracing\",\n \"track\",\n \"traction\",\n \"tractor\",\n \"trade\",\n \"trading\",\n \"tradition\",\n \"traffic\",\n \"tragedy\",\n \"trailing\",\n \"trailside\",\n \"train\",\n \"traitor\",\n \"trance\",\n \"tranquil\",\n \"transfer\",\n \"transform\",\n \"translate\",\n \"transpire\",\n \"transport\",\n \"transpose\",\n \"trapdoor\",\n \"trapeze\",\n \"trapezoid\",\n \"trapped\",\n \"trapper\",\n \"trapping\",\n \"traps\",\n \"trash\",\n \"travel\",\n \"traverse\",\n \"travesty\",\n \"tray\",\n \"treachery\",\n \"treading\",\n \"treadmill\",\n \"treason\",\n \"treat\",\n \"treble\",\n \"tree\",\n \"trekker\",\n \"tremble\",\n \"trembling\",\n \"tremor\",\n \"trench\",\n \"trend\",\n \"trespass\",\n \"triage\",\n \"trial\",\n \"triangle\",\n \"tribesman\",\n \"tribunal\",\n \"tribune\",\n \"tributary\",\n \"tribute\",\n \"triceps\",\n \"trickery\",\n \"trickily\",\n \"tricking\",\n \"trickle\",\n \"trickster\",\n \"tricky\",\n \"tricolor\",\n \"tricycle\",\n \"trident\",\n \"tried\",\n \"trifle\",\n \"trifocals\",\n \"trillion\",\n \"trilogy\",\n \"trimester\",\n \"trimmer\",\n \"trimming\",\n \"trimness\",\n \"trinity\",\n \"trio\",\n \"tripod\",\n \"tripping\",\n \"triumph\",\n \"trivial\",\n \"trodden\",\n \"trolling\",\n \"trombone\",\n \"trophy\",\n \"tropical\",\n \"tropics\",\n \"trouble\",\n \"troubling\",\n \"trough\",\n \"trousers\",\n \"trout\",\n \"trowel\",\n \"truce\",\n \"truck\",\n \"truffle\",\n \"trump\",\n \"trunks\",\n \"trustable\",\n \"trustee\",\n \"trustful\",\n \"trusting\",\n \"trustless\",\n \"truth\",\n \"try\",\n \"tubby\",\n \"tubeless\",\n \"tubular\",\n \"tucking\",\n \"tuesday\",\n \"tug\",\n \"tuition\",\n \"tulip\",\n \"tumble\",\n \"tumbling\",\n \"tummy\",\n \"turban\",\n \"turbine\",\n \"turbofan\",\n \"turbojet\",\n \"turbulent\",\n \"turf\",\n \"turkey\",\n \"turmoil\",\n \"turret\",\n \"turtle\",\n \"tusk\",\n \"tutor\",\n \"tutu\",\n \"tux\",\n \"tweak\",\n \"tweed\",\n \"tweet\",\n \"tweezers\",\n \"twelve\",\n \"twentieth\",\n \"twenty\",\n \"twerp\",\n \"twice\",\n \"twiddle\",\n \"twiddling\",\n \"twig\",\n \"twilight\",\n \"twine\",\n \"twins\",\n \"twirl\",\n \"twistable\",\n \"twisted\",\n \"twister\",\n \"twisting\",\n \"twisty\",\n \"twitch\",\n \"twitter\",\n \"tycoon\",\n \"tying\",\n \"tyke\",\n \"udder\",\n \"ultimate\",\n \"ultimatum\",\n \"ultra\",\n \"umbilical\",\n \"umbrella\",\n \"umpire\",\n \"unabashed\",\n \"unable\",\n \"unadorned\",\n \"unadvised\",\n \"unafraid\",\n \"unaired\",\n \"unaligned\",\n \"unaltered\",\n \"unarmored\",\n \"unashamed\",\n \"unaudited\",\n \"unawake\",\n \"unaware\",\n \"unbaked\",\n \"unbalance\",\n \"unbeaten\",\n \"unbend\",\n \"unbent\",\n \"unbiased\",\n \"unbitten\",\n \"unblended\",\n \"unblessed\",\n \"unblock\",\n \"unbolted\",\n \"unbounded\",\n \"unboxed\",\n \"unbraided\",\n \"unbridle\",\n \"unbroken\",\n \"unbuckled\",\n \"unbundle\",\n \"unburned\",\n \"unbutton\",\n \"uncanny\",\n \"uncapped\",\n \"uncaring\",\n \"uncertain\",\n \"unchain\",\n \"unchanged\",\n \"uncharted\",\n \"uncheck\",\n \"uncivil\",\n \"unclad\",\n \"unclaimed\",\n \"unclamped\",\n \"unclasp\",\n \"uncle\",\n \"unclip\",\n \"uncloak\",\n \"unclog\",\n \"unclothed\",\n \"uncoated\",\n \"uncoiled\",\n \"uncolored\",\n \"uncombed\",\n \"uncommon\",\n \"uncooked\",\n \"uncork\",\n \"uncorrupt\",\n \"uncounted\",\n \"uncouple\",\n \"uncouth\",\n \"uncover\",\n \"uncross\",\n \"uncrown\",\n \"uncrushed\",\n \"uncured\",\n \"uncurious\",\n \"uncurled\",\n \"uncut\",\n \"undamaged\",\n \"undated\",\n \"undaunted\",\n \"undead\",\n \"undecided\",\n \"undefined\",\n \"underage\",\n \"underarm\",\n \"undercoat\",\n \"undercook\",\n \"undercut\",\n \"underdog\",\n \"underdone\",\n \"underfed\",\n \"underfeed\",\n \"underfoot\",\n \"undergo\",\n \"undergrad\",\n \"underhand\",\n \"underline\",\n \"underling\",\n \"undermine\",\n \"undermost\",\n \"underpaid\",\n \"underpass\",\n \"underpay\",\n \"underrate\",\n \"undertake\",\n \"undertone\",\n \"undertook\",\n \"undertow\",\n \"underuse\",\n \"underwear\",\n \"underwent\",\n \"underwire\",\n \"undesired\",\n \"undiluted\",\n \"undivided\",\n \"undocked\",\n \"undoing\",\n \"undone\",\n \"undrafted\",\n \"undress\",\n \"undrilled\",\n \"undusted\",\n \"undying\",\n \"unearned\",\n \"unearth\",\n \"unease\",\n \"uneasily\",\n \"uneasy\",\n \"uneatable\",\n \"uneaten\",\n \"unedited\",\n \"unelected\",\n \"unending\",\n \"unengaged\",\n \"unenvied\",\n \"unequal\",\n \"unethical\",\n \"uneven\",\n \"unexpired\",\n \"unexposed\",\n \"unfailing\",\n \"unfair\",\n \"unfasten\",\n \"unfazed\",\n \"unfeeling\",\n \"unfiled\",\n \"unfilled\",\n \"unfitted\",\n \"unfitting\",\n \"unfixable\",\n \"unfixed\",\n \"unflawed\",\n \"unfocused\",\n \"unfold\",\n \"unfounded\",\n \"unframed\",\n \"unfreeze\",\n \"unfrosted\",\n \"unfrozen\",\n \"unfunded\",\n \"unglazed\",\n \"ungloved\",\n \"unglue\",\n \"ungodly\",\n \"ungraded\",\n \"ungreased\",\n \"unguarded\",\n \"unguided\",\n \"unhappily\",\n \"unhappy\",\n \"unharmed\",\n \"unhealthy\",\n \"unheard\",\n \"unhearing\",\n \"unheated\",\n \"unhelpful\",\n \"unhidden\",\n \"unhinge\",\n \"unhitched\",\n \"unholy\",\n \"unhook\",\n \"unicorn\",\n \"unicycle\",\n \"unified\",\n \"unifier\",\n \"uniformed\",\n \"uniformly\",\n \"unify\",\n \"unimpeded\",\n \"uninjured\",\n \"uninstall\",\n \"uninsured\",\n \"uninvited\",\n \"union\",\n \"uniquely\",\n \"unisexual\",\n \"unison\",\n \"unissued\",\n \"unit\",\n \"universal\",\n \"universe\",\n \"unjustly\",\n \"unkempt\",\n \"unkind\",\n \"unknotted\",\n \"unknowing\",\n \"unknown\",\n \"unlaced\",\n \"unlatch\",\n \"unlawful\",\n \"unleaded\",\n \"unlearned\",\n \"unleash\",\n \"unless\",\n \"unleveled\",\n \"unlighted\",\n \"unlikable\",\n \"unlimited\",\n \"unlined\",\n \"unlinked\",\n \"unlisted\",\n \"unlit\",\n \"unlivable\",\n \"unloaded\",\n \"unloader\",\n \"unlocked\",\n \"unlocking\",\n \"unlovable\",\n \"unloved\",\n \"unlovely\",\n \"unloving\",\n \"unluckily\",\n \"unlucky\",\n \"unmade\",\n \"unmanaged\",\n \"unmanned\",\n \"unmapped\",\n \"unmarked\",\n \"unmasked\",\n \"unmasking\",\n \"unmatched\",\n \"unmindful\",\n \"unmixable\",\n \"unmixed\",\n \"unmolded\",\n \"unmoral\",\n \"unmovable\",\n \"unmoved\",\n \"unmoving\",\n \"unnamable\",\n \"unnamed\",\n \"unnatural\",\n \"unneeded\",\n \"unnerve\",\n \"unnerving\",\n \"unnoticed\",\n \"unopened\",\n \"unopposed\",\n \"unpack\",\n \"unpadded\",\n \"unpaid\",\n \"unpainted\",\n \"unpaired\",\n \"unpaved\",\n \"unpeeled\",\n \"unpicked\",\n \"unpiloted\",\n \"unpinned\",\n \"unplanned\",\n \"unplanted\",\n \"unpleased\",\n \"unpledged\",\n \"unplowed\",\n \"unplug\",\n \"unpopular\",\n \"unproven\",\n \"unquote\",\n \"unranked\",\n \"unrated\",\n \"unraveled\",\n \"unreached\",\n \"unread\",\n \"unreal\",\n \"unreeling\",\n \"unrefined\",\n \"unrelated\",\n \"unrented\",\n \"unrest\",\n \"unretired\",\n \"unrevised\",\n \"unrigged\",\n \"unripe\",\n \"unrivaled\",\n \"unroasted\",\n \"unrobed\",\n \"unroll\",\n \"unruffled\",\n \"unruly\",\n \"unrushed\",\n \"unsaddle\",\n \"unsafe\",\n \"unsaid\",\n \"unsalted\",\n \"unsaved\",\n \"unsavory\",\n \"unscathed\",\n \"unscented\",\n \"unscrew\",\n \"unsealed\",\n \"unseated\",\n \"unsecured\",\n \"unseeing\",\n \"unseemly\",\n \"unseen\",\n \"unselect\",\n \"unselfish\",\n \"unsent\",\n \"unsettled\",\n \"unshackle\",\n \"unshaken\",\n \"unshaved\",\n \"unshaven\",\n \"unsheathe\",\n \"unshipped\",\n \"unsightly\",\n \"unsigned\",\n \"unskilled\",\n \"unsliced\",\n \"unsmooth\",\n \"unsnap\",\n \"unsocial\",\n \"unsoiled\",\n \"unsold\",\n \"unsolved\",\n \"unsorted\",\n \"unspoiled\",\n \"unspoken\",\n \"unstable\",\n \"unstaffed\",\n \"unstamped\",\n \"unsteady\",\n \"unsterile\",\n \"unstirred\",\n \"unstitch\",\n \"unstopped\",\n \"unstuck\",\n \"unstuffed\",\n \"unstylish\",\n \"unsubtle\",\n \"unsubtly\",\n \"unsuited\",\n \"unsure\",\n \"unsworn\",\n \"untagged\",\n \"untainted\",\n \"untaken\",\n \"untamed\",\n \"untangled\",\n \"untapped\",\n \"untaxed\",\n \"unthawed\",\n \"unthread\",\n \"untidy\",\n \"untie\",\n \"until\",\n \"untimed\",\n \"untimely\",\n \"untitled\",\n \"untoasted\",\n \"untold\",\n \"untouched\",\n \"untracked\",\n \"untrained\",\n \"untreated\",\n \"untried\",\n \"untrimmed\",\n \"untrue\",\n \"untruth\",\n \"unturned\",\n \"untwist\",\n \"untying\",\n \"unusable\",\n \"unused\",\n \"unusual\",\n \"unvalued\",\n \"unvaried\",\n \"unvarying\",\n \"unveiled\",\n \"unveiling\",\n \"unvented\",\n \"unviable\",\n \"unvisited\",\n \"unvocal\",\n \"unwanted\",\n \"unwarlike\",\n \"unwary\",\n \"unwashed\",\n \"unwatched\",\n \"unweave\",\n \"unwed\",\n \"unwelcome\",\n \"unwell\",\n \"unwieldy\",\n \"unwilling\",\n \"unwind\",\n \"unwired\",\n \"unwitting\",\n \"unwomanly\",\n \"unworldly\",\n \"unworn\",\n \"unworried\",\n \"unworthy\",\n \"unwound\",\n \"unwoven\",\n \"unwrapped\",\n \"unwritten\",\n \"unzip\",\n \"upbeat\",\n \"upchuck\",\n \"upcoming\",\n \"upcountry\",\n \"update\",\n \"upfront\",\n \"upgrade\",\n \"upheaval\",\n \"upheld\",\n \"uphill\",\n \"uphold\",\n \"uplifted\",\n \"uplifting\",\n \"upload\",\n \"upon\",\n \"upper\",\n \"upright\",\n \"uprising\",\n \"upriver\",\n \"uproar\",\n \"uproot\",\n \"upscale\",\n \"upside\",\n \"upstage\",\n \"upstairs\",\n \"upstart\",\n \"upstate\",\n \"upstream\",\n \"upstroke\",\n \"upswing\",\n \"uptake\",\n \"uptight\",\n \"uptown\",\n \"upturned\",\n \"upward\",\n \"upwind\",\n \"uranium\",\n \"urban\",\n \"urchin\",\n \"urethane\",\n \"urgency\",\n \"urgent\",\n \"urging\",\n \"urologist\",\n \"urology\",\n \"usable\",\n \"usage\",\n \"useable\",\n \"used\",\n \"uselessly\",\n \"user\",\n \"usher\",\n \"usual\",\n \"utensil\",\n \"utility\",\n \"utilize\",\n \"utmost\",\n \"utopia\",\n \"utter\",\n \"vacancy\",\n \"vacant\",\n \"vacate\",\n \"vacation\",\n \"vagabond\",\n \"vagrancy\",\n \"vagrantly\",\n \"vaguely\",\n \"vagueness\",\n \"valiant\",\n \"valid\",\n \"valium\",\n \"valley\",\n \"valuables\",\n \"value\",\n \"vanilla\",\n \"vanish\",\n \"vanity\",\n \"vanquish\",\n \"vantage\",\n \"vaporizer\",\n \"variable\",\n \"variably\",\n \"varied\",\n \"variety\",\n \"various\",\n \"varmint\",\n \"varnish\",\n \"varsity\",\n \"varying\",\n \"vascular\",\n \"vaseline\",\n \"vastly\",\n \"vastness\",\n \"veal\",\n \"vegan\",\n \"veggie\",\n \"vehicular\",\n \"velcro\",\n \"velocity\",\n \"velvet\",\n \"vendetta\",\n \"vending\",\n \"vendor\",\n \"veneering\",\n \"vengeful\",\n \"venomous\",\n \"ventricle\",\n \"venture\",\n \"venue\",\n \"venus\",\n \"verbalize\",\n \"verbally\",\n \"verbose\",\n \"verdict\",\n \"verify\",\n \"verse\",\n \"version\",\n \"versus\",\n \"vertebrae\",\n \"vertical\",\n \"vertigo\",\n \"very\",\n \"vessel\",\n \"vest\",\n \"veteran\",\n \"veto\",\n \"vexingly\",\n \"viability\",\n \"viable\",\n \"vibes\",\n \"vice\",\n \"vicinity\",\n \"victory\",\n \"video\",\n \"viewable\",\n \"viewer\",\n \"viewing\",\n \"viewless\",\n \"viewpoint\",\n \"vigorous\",\n \"village\",\n \"villain\",\n \"vindicate\",\n \"vineyard\",\n \"vintage\",\n \"violate\",\n \"violation\",\n \"violator\",\n \"violet\",\n \"violin\",\n \"viper\",\n \"viral\",\n \"virtual\",\n \"virtuous\",\n \"virus\",\n \"visa\",\n \"viscosity\",\n \"viscous\",\n \"viselike\",\n \"visible\",\n \"visibly\",\n \"vision\",\n \"visiting\",\n \"visitor\",\n \"visor\",\n \"vista\",\n \"vitality\",\n \"vitalize\",\n \"vitally\",\n \"vitamins\",\n \"vivacious\",\n \"vividly\",\n \"vividness\",\n \"vixen\",\n \"vocalist\",\n \"vocalize\",\n \"vocally\",\n \"vocation\",\n \"voice\",\n \"voicing\",\n \"void\",\n \"volatile\",\n \"volley\",\n \"voltage\",\n \"volumes\",\n \"voter\",\n \"voting\",\n \"voucher\",\n \"vowed\",\n \"vowel\",\n \"voyage\",\n \"wackiness\",\n \"wad\",\n \"wafer\",\n \"waffle\",\n \"waged\",\n \"wager\",\n \"wages\",\n \"waggle\",\n \"wagon\",\n \"wake\",\n \"waking\",\n \"walk\",\n \"walmart\",\n \"walnut\",\n \"walrus\",\n \"waltz\",\n \"wand\",\n \"wannabe\",\n \"wanted\",\n \"wanting\",\n \"wasabi\",\n \"washable\",\n \"washbasin\",\n \"washboard\",\n \"washbowl\",\n \"washcloth\",\n \"washday\",\n \"washed\",\n \"washer\",\n \"washhouse\",\n \"washing\",\n \"washout\",\n \"washroom\",\n \"washstand\",\n \"washtub\",\n \"wasp\",\n \"wasting\",\n \"watch\",\n \"water\",\n \"waviness\",\n \"waving\",\n \"wavy\",\n \"whacking\",\n \"whacky\",\n \"wham\",\n \"wharf\",\n \"wheat\",\n \"whenever\",\n \"whiff\",\n \"whimsical\",\n \"whinny\",\n \"whiny\",\n \"whisking\",\n \"whoever\",\n \"whole\",\n \"whomever\",\n \"whoopee\",\n \"whooping\",\n \"whoops\",\n \"why\",\n \"wick\",\n \"widely\",\n \"widen\",\n \"widget\",\n \"widow\",\n \"width\",\n \"wieldable\",\n \"wielder\",\n \"wife\",\n \"wifi\",\n \"wikipedia\",\n \"wildcard\",\n \"wildcat\",\n \"wilder\",\n \"wildfire\",\n \"wildfowl\",\n \"wildland\",\n \"wildlife\",\n \"wildly\",\n \"wildness\",\n \"willed\",\n \"willfully\",\n \"willing\",\n \"willow\",\n \"willpower\",\n \"wilt\",\n \"wimp\",\n \"wince\",\n \"wincing\",\n \"wind\",\n \"wing\",\n \"winking\",\n \"winner\",\n \"winnings\",\n \"winter\",\n \"wipe\",\n \"wired\",\n \"wireless\",\n \"wiring\",\n \"wiry\",\n \"wisdom\",\n \"wise\",\n \"wish\",\n \"wisplike\",\n \"wispy\",\n \"wistful\",\n \"wizard\",\n \"wobble\",\n \"wobbling\",\n \"wobbly\",\n \"wok\",\n \"wolf\",\n \"wolverine\",\n \"womanhood\",\n \"womankind\",\n \"womanless\",\n \"womanlike\",\n \"womanly\",\n \"womb\",\n \"woof\",\n \"wooing\",\n \"wool\",\n \"woozy\",\n \"word\",\n \"work\",\n \"worried\",\n \"worrier\",\n \"worrisome\",\n \"worry\",\n \"worsening\",\n \"worshiper\",\n \"worst\",\n \"wound\",\n \"woven\",\n \"wow\",\n \"wrangle\",\n \"wrath\",\n \"wreath\",\n \"wreckage\",\n \"wrecker\",\n \"wrecking\",\n \"wrench\",\n \"wriggle\",\n \"wriggly\",\n \"wrinkle\",\n \"wrinkly\",\n \"wrist\",\n \"writing\",\n \"written\",\n \"wrongdoer\",\n \"wronged\",\n \"wrongful\",\n \"wrongly\",\n \"wrongness\",\n \"wrought\",\n \"xbox\",\n \"xerox\",\n \"yahoo\",\n \"yam\",\n \"yanking\",\n \"yapping\",\n \"yard\",\n \"yarn\",\n \"yeah\",\n \"yearbook\",\n \"yearling\",\n \"yearly\",\n \"yearning\",\n \"yeast\",\n \"yelling\",\n \"yelp\",\n \"yen\",\n \"yesterday\",\n \"yiddish\",\n \"yield\",\n \"yin\",\n \"yippee\",\n \"yo-yo\",\n \"yodel\",\n \"yoga\",\n \"yogurt\",\n \"yonder\",\n \"yoyo\",\n \"yummy\",\n \"zap\",\n \"zealous\",\n \"zebra\",\n \"zen\",\n \"zeppelin\",\n \"zero\",\n \"zestfully\",\n \"zesty\",\n \"zigzagged\",\n \"zipfile\",\n \"zipping\",\n \"zippy\",\n \"zips\",\n \"zit\",\n \"zodiac\",\n \"zombie\",\n \"zone\",\n \"zoning\",\n \"zookeeper\",\n \"zoologist\",\n \"zoology\",\n \"zoom\",\n];\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { EncryptedOrganizationKeyData } from \"../../models/data/encryptedOrganizationKeyData\";\n\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\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 { AbstractEncryptService } from \"../abstractions/abstractEncrypt.service\";\nimport { CryptoService as CryptoServiceAbstraction } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { EncryptionType } from \"../enums/encryptionType\";\nimport { HashPurpose } from \"../enums/hashPurpose\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { KeySuffixOptions } from \"../enums/keySuffixOptions\";\nimport { sequentialize } from \"../misc/sequentialize\";\nimport { Utils } from \"../misc/utils\";\nimport { EEFLongWordList } from \"../misc/wordlist\";\nimport { EncryptedOrganizationKeyData } from \"../models/data/encryptedOrganizationKeyData\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { BaseEncryptedOrganizationKey } from \"../models/domain/encryptedOrganizationKey\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { ProfileOrganizationResponse } from \"../models/response/profileOrganizationResponse\";\nimport { ProfileProviderOrganizationResponse } from \"../models/response/profileProviderOrganizationResponse\";\nimport { ProfileProviderResponse } from \"../models/response/profileProviderResponse\";\n\nexport class CryptoService implements CryptoServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private encryptService: AbstractEncryptService,\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(EEFLongWordList.length) / Math.log(2);\n let numWords = Math.ceil(minimumEntropy / entropyPerWord);\n\n const hashArr = Array.from(new Uint8Array(hash));\n const entropyAvailable = hashArr.length * 4;\n if (numWords * entropyPerWord > entropyAvailable) {\n throw new Error(\"Output entropy of hash function is too small\");\n }\n\n const phrase: string[] = [];\n let hashNumber = bigInt.fromArray(hashArr, 256);\n while (numWords--) {\n const remainder = hashNumber.mod(EEFLongWordList.length);\n hashNumber = hashNumber.divide(EEFLongWordList.length);\n phrase.push(EEFLongWordList[remainder as any]);\n }\n return phrase;\n }\n\n private async buildEncKey(\n key: SymmetricCryptoKey,\n encKey: ArrayBuffer\n ): Promise<[SymmetricCryptoKey, EncString]> {\n let encKeyEnc: EncString = null;\n if (key.key.byteLength === 32) {\n const newKey = await this.stretchKey(key);\n encKeyEnc = await this.encrypt(encKey, newKey);\n } else if (key.key.byteLength === 64) {\n encKeyEnc = await this.encrypt(encKey, key);\n } else {\n throw new Error(\"Invalid key size.\");\n }\n return [new SymmetricCryptoKey(encKey), encKeyEnc];\n }\n\n private async clearSecretKeyStore(userId?: string): Promise {\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n await this.stateService.setCryptoMasterKeyBiometric(null, { userId: userId });\n }\n\n private async getEncKeyHelper(key: SymmetricCryptoKey = null): Promise {\n const inMemoryKey = await this.stateService.getDecryptedCryptoSymmetricKey();\n if (inMemoryKey != null) {\n return inMemoryKey;\n }\n\n const encKey = await this.stateService.getEncryptedCryptoSymmetricKey();\n if (encKey == null) {\n return null;\n }\n\n if (key == null) {\n key = await this.getKey();\n }\n if (key == null) {\n return null;\n }\n\n let decEncKey: ArrayBuffer;\n const encKeyCipher = new EncString(encKey);\n if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_B64) {\n decEncKey = await this.decryptToBytes(encKeyCipher, key);\n } else if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) {\n const newKey = await this.stretchKey(key);\n decEncKey = await this.decryptToBytes(encKeyCipher, newKey);\n } else {\n throw new Error(\"Unsupported encKey type.\");\n }\n if (decEncKey == null) {\n return null;\n }\n const symmetricCryptoKey = new SymmetricCryptoKey(decEncKey);\n await this.stateService.setDecryptedCryptoSymmetricKey(symmetricCryptoKey);\n return symmetricCryptoKey;\n }\n}\n","import { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class EncryptedObject {\n iv: ArrayBuffer;\n data: ArrayBuffer;\n mac: ArrayBuffer;\n key: SymmetricCryptoKey;\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 { 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/eventView\";\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/encArrayBuffer\";\n\nconst MAX_SINGLE_BLOB_UPLOAD_SIZE = 256 * 1024 * 1024; // 256 MiB\nconst MAX_BLOCKS_PER_BLOB = 50000;\n\nexport class AzureFileUploadService {\n constructor(private logService: LogService) {}\n\n async upload(url: string, data: EncArrayBuffer, renewalCallback: () => Promise) {\n if (data.buffer.byteLength <= MAX_SINGLE_BLOB_UPLOAD_SIZE) {\n return await this.azureUploadBlob(url, data);\n } else {\n return await this.azureUploadBlocks(url, data, renewalCallback);\n }\n }\n private async azureUploadBlob(url: string, data: EncArrayBuffer) {\n const urlObject = Utils.getUrl(url);\n const headers = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": urlObject.searchParams.get(\"sv\"),\n \"Content-Length\": data.buffer.byteLength.toString(),\n \"x-ms-blob-type\": \"BlockBlob\",\n });\n\n const request = new Request(url, {\n body: data.buffer,\n cache: \"no-store\",\n method: \"PUT\",\n headers: headers,\n });\n\n const blobResponse = await fetch(request);\n\n if (blobResponse.status !== 201) {\n throw new Error(`Failed to create Azure blob: ${blobResponse.status}`);\n }\n }\n private async azureUploadBlocks(\n url: string,\n data: EncArrayBuffer,\n renewalCallback: () => Promise\n ) {\n const baseUrl = Utils.getUrl(url);\n const blockSize = this.getMaxBlockSize(baseUrl.searchParams.get(\"sv\"));\n let blockIndex = 0;\n const numBlocks = Math.ceil(data.buffer.byteLength / blockSize);\n const blocksStaged: string[] = [];\n\n if (numBlocks > MAX_BLOCKS_PER_BLOB) {\n throw new Error(\n `Cannot upload file, exceeds maximum size of ${blockSize * MAX_BLOCKS_PER_BLOB}`\n );\n }\n\n // eslint-disable-next-line\n try {\n while (blockIndex < numBlocks) {\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockUrl = Utils.getUrl(url);\n const blockId = this.encodedBlockId(blockIndex);\n blockUrl.searchParams.append(\"comp\", \"block\");\n blockUrl.searchParams.append(\"blockid\", blockId);\n const start = blockIndex * blockSize;\n const blockData = data.buffer.slice(start, start + blockSize);\n const blockHeaders = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": blockUrl.searchParams.get(\"sv\"),\n \"Content-Length\": blockData.byteLength.toString(),\n });\n\n const blockRequest = new Request(blockUrl.toString(), {\n body: blockData,\n cache: \"no-store\",\n method: \"PUT\",\n headers: blockHeaders,\n });\n\n const blockResponse = await fetch(blockRequest);\n\n if (blockResponse.status !== 201) {\n const message = `Unsuccessful block PUT. Received status ${blockResponse.status}`;\n this.logService.error(message + \"\\n\" + (await blockResponse.json()));\n throw new Error(message);\n }\n\n blocksStaged.push(blockId);\n blockIndex++;\n }\n\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockListUrl = Utils.getUrl(url);\n const blockListXml = this.blockListXml(blocksStaged);\n blockListUrl.searchParams.append(\"comp\", \"blocklist\");\n const headers = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": blockListUrl.searchParams.get(\"sv\"),\n \"Content-Length\": blockListXml.length.toString(),\n });\n\n const request = new Request(blockListUrl.toString(), {\n body: blockListXml,\n cache: \"no-store\",\n method: \"PUT\",\n headers: headers,\n });\n\n const response = await fetch(request);\n\n if (response.status !== 201) {\n const message = `Unsuccessful block list PUT. Received status ${response.status}`;\n this.logService.error(message + \"\\n\" + (await response.json()));\n throw new Error(message);\n }\n } catch (e) {\n throw e;\n }\n }\n\n private async renewUrlIfNecessary(\n url: string,\n renewalCallback: () => Promise\n ): Promise {\n const urlObject = Utils.getUrl(url);\n const expiry = new Date(urlObject.searchParams.get(\"se\") ?? \"\");\n\n if (isNaN(expiry.getTime())) {\n expiry.setTime(Date.now() + 3600000);\n }\n\n if (expiry.getTime() < Date.now() + 1000) {\n return await renewalCallback();\n }\n return url;\n }\n\n private encodedBlockId(blockIndex: number) {\n // Encoded blockId max size is 64, so pre-encoding max size is 48\n const utfBlockId = (\n \"000000000000000000000000000000000000000000000000\" + blockIndex.toString()\n ).slice(-48);\n return Utils.fromUtf8ToB64(utfBlockId);\n }\n\n private blockListXml(blockIdList: string[]) {\n let xml = '';\n blockIdList.forEach((blockId) => {\n xml += `${blockId}`;\n });\n xml += \"\";\n return xml;\n }\n\n private getMaxBlockSize(version: string) {\n if (Version.compare(version, \"2019-12-12\") >= 0) {\n return 4000 * 1024 * 1024; // 4000 MiB\n } else if (Version.compare(version, \"2016-05-31\") >= 0) {\n return 100 * 1024 * 1024; // 100 MiB\n } else {\n return 4 * 1024 * 1024; // 4 MiB\n }\n }\n}\n\nclass Version {\n /**\n * Compares two Azure Versions against each other\n * @param a Version to compare\n * @param b Version to compare\n * @returns a number less than zero if b is newer than a, 0 if equal,\n * and greater than zero if a is newer than b\n */\n static compare(a: Required | string, b: Required | string) {\n if (typeof a === \"string\") {\n a = new Version(a);\n }\n\n if (typeof b === \"string\") {\n b = new Version(b);\n }\n\n return a.year !== b.year\n ? a.year - b.year\n : a.month !== b.month\n ? a.month - b.month\n : a.day !== b.day\n ? a.day - b.day\n : 0;\n }\n year = 0;\n month = 0;\n day = 0;\n\n constructor(version: string) {\n try {\n const parts = version.split(\"-\").map((v) => Number.parseInt(v, 10));\n this.year = parts[0];\n this.month = parts[1];\n this.day = parts[2];\n } catch {\n // Ignore error\n }\n }\n /**\n * Compares two Azure Versions against each other\n * @param compareTo Version to compare against\n * @returns a number less than zero if compareTo is newer, 0 if equal,\n * and greater than zero if this is greater than compareTo\n */\n compare(compareTo: Required | string) {\n return Version.compare(this, compareTo);\n }\n}\n","import { Utils } from \"../misc/utils\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\n\nexport class BitwardenFileUploadService {\n async upload(\n encryptedFileName: string,\n encryptedFileData: EncArrayBuffer,\n apiCall: (fd: FormData) => Promise\n ) {\n const fd = new FormData();\n try {\n const blob = new Blob([encryptedFileData.buffer], { type: \"application/octet-stream\" });\n fd.append(\"data\", blob, encryptedFileName);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\n \"data\",\n Buffer.from(encryptedFileData.buffer) as any,\n {\n filepath: encryptedFileName,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n\n await apiCall(fd);\n }\n}\n","import { FolderResponse } from \"../response/folderResponse\";\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","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 \"../keysRequest\";\n\nexport class SetKeyConnectorKeyRequest {\n key: string;\n keys: KeysRequest;\n kdf: KdfType;\n kdfIterations: number;\n orgIdentifier: string;\n\n constructor(\n key: string,\n kdf: KdfType,\n kdfIterations: number,\n orgIdentifier: string,\n keys: KeysRequest\n ) {\n this.key = key;\n this.kdf = kdf;\n this.kdfIterations = kdfIterations;\n this.orgIdentifier = orgIdentifier;\n this.keys = keys;\n }\n}\n","export class KeyConnectorUserKeyRequest {\n key: string;\n\n constructor(key: string) {\n this.key = key;\n }\n}\n","export enum OrganizationUserStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n Revoked = -1,\n}\n","import { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\nimport { OrganizationData } from \"../data/organizationData\";\n\nexport class Organization {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useScim: 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.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","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 {\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"../../enums/ssoEnums\";\nimport { BaseResponse } from \"../response/baseResponse\";\nimport { SsoConfigView } from \"../view/ssoConfigView\";\n\nexport class SsoConfigApi extends BaseResponse {\n static fromView(view: SsoConfigView, api = new SsoConfigApi()) {\n api.configType = view.configType;\n\n api.keyConnectorEnabled = view.keyConnectorEnabled;\n api.keyConnectorUrl = view.keyConnectorUrl;\n\n if (api.configType === SsoType.OpenIdConnect) {\n api.authority = view.openId.authority;\n api.clientId = view.openId.clientId;\n api.clientSecret = view.openId.clientSecret;\n api.metadataAddress = view.openId.metadataAddress;\n api.redirectBehavior = view.openId.redirectBehavior;\n api.getClaimsFromUserInfoEndpoint = view.openId.getClaimsFromUserInfoEndpoint;\n api.additionalScopes = view.openId.additionalScopes;\n api.additionalUserIdClaimTypes = view.openId.additionalUserIdClaimTypes;\n api.additionalEmailClaimTypes = view.openId.additionalEmailClaimTypes;\n api.additionalNameClaimTypes = view.openId.additionalNameClaimTypes;\n api.acrValues = view.openId.acrValues;\n api.expectedReturnAcrValue = view.openId.expectedReturnAcrValue;\n } else if (api.configType === SsoType.Saml2) {\n api.spNameIdFormat = view.saml.spNameIdFormat;\n api.spOutboundSigningAlgorithm = view.saml.spOutboundSigningAlgorithm;\n api.spSigningBehavior = view.saml.spSigningBehavior;\n api.spMinIncomingSigningAlgorithm = view.saml.spMinIncomingSigningAlgorithm;\n api.spWantAssertionsSigned = view.saml.spWantAssertionsSigned;\n api.spValidateCertificates = view.saml.spValidateCertificates;\n\n api.idpEntityId = view.saml.idpEntityId;\n api.idpBindingType = view.saml.idpBindingType;\n api.idpSingleSignOnServiceUrl = view.saml.idpSingleSignOnServiceUrl;\n api.idpSingleLogoutServiceUrl = view.saml.idpSingleLogoutServiceUrl;\n api.idpX509PublicCert = view.saml.idpX509PublicCert;\n api.idpOutboundSigningAlgorithm = view.saml.idpOutboundSigningAlgorithm;\n api.idpAllowUnsolicitedAuthnResponse = view.saml.idpAllowUnsolicitedAuthnResponse;\n api.idpWantAuthnRequestsSigned = view.saml.idpWantAuthnRequestsSigned;\n\n // Value is inverted in the api model (disable instead of allow)\n api.idpDisableOutboundLogoutRequests = !view.saml.idpAllowOutboundLogoutRequests;\n }\n\n return api;\n }\n configType: SsoType;\n\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n\n // OpenId\n authority: string;\n clientId: string;\n clientSecret: string;\n metadataAddress: string;\n redirectBehavior: OpenIdConnectRedirectBehavior;\n getClaimsFromUserInfoEndpoint: boolean;\n additionalScopes: string;\n additionalUserIdClaimTypes: string;\n additionalEmailClaimTypes: string;\n additionalNameClaimTypes: string;\n acrValues: string;\n expectedReturnAcrValue: string;\n\n // SAML\n spNameIdFormat: Saml2NameIdFormat;\n spOutboundSigningAlgorithm: string;\n spSigningBehavior: Saml2SigningBehavior;\n spMinIncomingSigningAlgorithm: boolean;\n spWantAssertionsSigned: boolean;\n spValidateCertificates: boolean;\n\n idpEntityId: string;\n idpBindingType: Saml2BindingType;\n idpSingleSignOnServiceUrl: string;\n idpSingleLogoutServiceUrl: string;\n idpX509PublicCert: string;\n idpOutboundSigningAlgorithm: string;\n idpAllowUnsolicitedAuthnResponse: boolean;\n idpDisableOutboundLogoutRequests: boolean;\n idpWantAuthnRequestsSigned: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n\n this.configType = this.getResponseProperty(\"ConfigType\");\n\n this.keyConnectorEnabled = this.getResponseProperty(\"KeyConnectorEnabled\");\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n\n this.authority = this.getResponseProperty(\"Authority\");\n this.clientId = this.getResponseProperty(\"ClientId\");\n this.clientSecret = this.getResponseProperty(\"ClientSecret\");\n this.metadataAddress = this.getResponseProperty(\"MetadataAddress\");\n this.redirectBehavior = this.getResponseProperty(\"RedirectBehavior\");\n this.getClaimsFromUserInfoEndpoint = this.getResponseProperty(\"GetClaimsFromUserInfoEndpoint\");\n this.additionalScopes = this.getResponseProperty(\"AdditionalScopes\");\n this.additionalUserIdClaimTypes = this.getResponseProperty(\"AdditionalUserIdClaimTypes\");\n this.additionalEmailClaimTypes = this.getResponseProperty(\"AdditionalEmailClaimTypes\");\n this.additionalNameClaimTypes = this.getResponseProperty(\"AdditionalNameClaimTypes\");\n this.acrValues = this.getResponseProperty(\"AcrValues\");\n this.expectedReturnAcrValue = this.getResponseProperty(\"ExpectedReturnAcrValue\");\n\n this.spNameIdFormat = this.getResponseProperty(\"SpNameIdFormat\");\n this.spOutboundSigningAlgorithm = this.getResponseProperty(\"SpOutboundSigningAlgorithm\");\n this.spSigningBehavior = this.getResponseProperty(\"SpSigningBehavior\");\n this.spMinIncomingSigningAlgorithm = this.getResponseProperty(\"SpMinIncomingSigningAlgorithm\");\n this.spWantAssertionsSigned = this.getResponseProperty(\"SpWantAssertionsSigned\");\n this.spValidateCertificates = this.getResponseProperty(\"SpValidateCertificates\");\n\n this.idpEntityId = this.getResponseProperty(\"IdpEntityId\");\n this.idpBindingType = this.getResponseProperty(\"IdpBindingType\");\n this.idpSingleSignOnServiceUrl = this.getResponseProperty(\"IdpSingleSignOnServiceUrl\");\n this.idpSingleLogoutServiceUrl = this.getResponseProperty(\"IdpSingleLogoutServiceUrl\");\n this.idpX509PublicCert = this.getResponseProperty(\"IdpX509PublicCert\");\n this.idpOutboundSigningAlgorithm = this.getResponseProperty(\"IdpOutboundSigningAlgorithm\");\n this.idpAllowUnsolicitedAuthnResponse = this.getResponseProperty(\n \"IdpAllowUnsolicitedAuthnResponse\"\n );\n this.idpDisableOutboundLogoutRequests = this.getResponseProperty(\n \"IdpDisableOutboundLogoutRequests\"\n );\n this.idpWantAuthnRequestsSigned = this.getResponseProperty(\"IdpWantAuthnRequestsSigned\");\n }\n}\n","import { SsoConfigApi } from \"../../api/ssoConfigApi\";\nimport { BaseResponse } from \"../baseResponse\";\n\nexport class OrganizationSsoResponse extends BaseResponse {\n enabled: boolean;\n data: SsoConfigApi;\n urls: SsoUrls;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.data =\n this.getResponseProperty(\"Data\") != null\n ? new SsoConfigApi(this.getResponseProperty(\"Data\"))\n : null;\n this.urls = new SsoUrls(this.getResponseProperty(\"Urls\"));\n }\n}\n\nclass SsoUrls extends BaseResponse {\n callbackPath: string;\n signedOutCallbackPath: string;\n spEntityId: string;\n spMetadataUrl: string;\n spAcsUrl: string;\n\n constructor(response: any) {\n super(response);\n this.callbackPath = this.getResponseProperty(\"CallbackPath\");\n this.signedOutCallbackPath = this.getResponseProperty(\"SignedOutCallbackPath\");\n this.spEntityId = this.getResponseProperty(\"SpEntityId\");\n this.spMetadataUrl = this.getResponseProperty(\"SpMetadataUrl\");\n this.spAcsUrl = this.getResponseProperty(\"SpAcsUrl\");\n }\n}\n","import { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\n\nimport { BaseResponse } from \"./baseResponse\";\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 \"./baseResponse\";\n\nexport class OrganizationAutoEnrollStatusResponse extends BaseResponse {\n id: string;\n resetPasswordEnabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.resetPasswordEnabled = this.getResponseProperty(\"ResetPasswordEnabled\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class KeysResponse extends BaseResponse {\n privateKey: string;\n publicKey: string;\n\n constructor(response: any) {\n super(response);\n this.privateKey = this.getResponseProperty(\"PrivateKey\");\n this.publicKey = this.getResponseProperty(\"PublicKey\");\n }\n}\n","import { KeysResponse } from \"./keysResponse\";\n\nexport class OrganizationKeysResponse extends KeysResponse {\n constructor(response: any) {\n super(response);\n }\n}\n","import { PlanType } from \"../../enums/planType\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { PlanResponse } from \"./planResponse\";\n\nexport class OrganizationResponse extends BaseResponse {\n id: string;\n identifier: string;\n name: string;\n businessName: string;\n businessAddress1: string;\n businessAddress2: string;\n businessAddress3: string;\n businessCountry: string;\n businessTaxNumber: string;\n billingEmail: string;\n plan: PlanResponse;\n planType: PlanType;\n seats: number;\n maxAutoscaleSeats: number;\n maxCollections: number;\n maxStorageGb: number;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useResetPassword: boolean;\n hasPublicAndPrivateKeys: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.identifier = this.getResponseProperty(\"Identifier\");\n this.name = this.getResponseProperty(\"Name\");\n this.businessName = this.getResponseProperty(\"BusinessName\");\n this.businessAddress1 = this.getResponseProperty(\"BusinessAddress1\");\n this.businessAddress2 = this.getResponseProperty(\"BusinessAddress2\");\n this.businessAddress3 = this.getResponseProperty(\"BusinessAddress3\");\n this.businessCountry = this.getResponseProperty(\"BusinessCountry\");\n this.businessTaxNumber = this.getResponseProperty(\"BusinessTaxNumber\");\n this.billingEmail = this.getResponseProperty(\"BillingEmail\");\n const plan = this.getResponseProperty(\"Plan\");\n this.plan = plan == null ? null : new PlanResponse(plan);\n this.planType = this.getResponseProperty(\"PlanType\");\n this.seats = this.getResponseProperty(\"Seats\");\n this.maxAutoscaleSeats = this.getResponseProperty(\"MaxAutoscaleSeats\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.useGroups = this.getResponseProperty(\"UseGroups\");\n this.useDirectory = this.getResponseProperty(\"UseDirectory\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n this.useTotp = this.getResponseProperty(\"UseTotp\");\n this.use2fa = this.getResponseProperty(\"Use2fa\");\n this.useApi = this.getResponseProperty(\"UseApi\");\n this.useResetPassword = this.getResponseProperty(\"UseResetPassword\");\n this.hasPublicAndPrivateKeys = this.getResponseProperty(\"HasPublicAndPrivateKeys\");\n }\n}\n","import { OrganizationResponse } from \"./organizationResponse\";\nimport {\n BillingSubscriptionResponse,\n BillingSubscriptionUpcomingInvoiceResponse,\n} from \"./subscriptionResponse\";\n\nexport class OrganizationSubscriptionResponse extends OrganizationResponse {\n storageName: string;\n storageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n expiration: string;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty(\"StorageName\");\n this.storageGb = this.getResponseProperty(\"StorageGb\");\n const subscription = this.getResponseProperty(\"Subscription\");\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n const upcomingInvoice = this.getResponseProperty(\"UpcomingInvoice\");\n this.upcomingInvoice =\n upcomingInvoice == null\n ? null\n : new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n this.expiration = this.getResponseProperty(\"Expiration\");\n }\n}\n","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 Domain from \"./domainBase\";\n\nexport class PasswordGeneratorPolicyOptions extends Domain {\n defaultType = \"\";\n minLength = 0;\n useUppercase = false;\n useLowercase = false;\n useNumbers = false;\n numberCount = 0;\n useSpecial = false;\n specialCount = 0;\n minNumberWords = 0;\n capitalize = false;\n includeNumber = false;\n\n inEffect() {\n return (\n this.defaultType !== \"\" ||\n this.minLength > 0 ||\n this.numberCount > 0 ||\n this.specialCount > 0 ||\n this.useUppercase ||\n this.useLowercase ||\n this.useNumbers ||\n this.useSpecial ||\n this.minNumberWords > 0 ||\n this.capitalize ||\n this.includeNumber\n );\n }\n}\n","import * 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 { EEFLongWordList } from \"../misc/wordlist\";\nimport { EncString } from \"../models/domain/encString\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { PasswordGeneratorPolicyOptions } from \"../models/domain/passwordGeneratorPolicyOptions\";\nimport { Policy } from \"../models/domain/policy\";\n\nconst DefaultOptions = {\n length: 14,\n ambiguous: false,\n number: true,\n minNumber: 1,\n uppercase: true,\n minUppercase: 0,\n lowercase: true,\n minLowercase: 0,\n special: false,\n minSpecial: 1,\n type: \"password\",\n numWords: 3,\n wordSeparator: \"-\",\n capitalize: false,\n includeNumber: false,\n};\n\nconst MaxPasswordsInHistory = 100;\n\nexport class PasswordGenerationService implements PasswordGenerationServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private policyService: PolicyService,\n private stateService: StateService\n ) {}\n\n async generatePassword(options: any): Promise {\n // overload defaults with given options\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.type === \"passphrase\") {\n return this.generatePassphrase(options);\n }\n\n // sanitize\n this.sanitizePasswordLength(o, true);\n\n const minLength: number = o.minUppercase + o.minLowercase + o.minNumber + o.minSpecial;\n if (o.length < minLength) {\n o.length = minLength;\n }\n\n const positions: string[] = [];\n if (o.lowercase && o.minLowercase > 0) {\n for (let i = 0; i < o.minLowercase; i++) {\n positions.push(\"l\");\n }\n }\n if (o.uppercase && o.minUppercase > 0) {\n for (let i = 0; i < o.minUppercase; i++) {\n positions.push(\"u\");\n }\n }\n if (o.number && o.minNumber > 0) {\n for (let i = 0; i < o.minNumber; i++) {\n positions.push(\"n\");\n }\n }\n if (o.special && o.minSpecial > 0) {\n for (let i = 0; i < o.minSpecial; i++) {\n positions.push(\"s\");\n }\n }\n while (positions.length < o.length) {\n positions.push(\"a\");\n }\n\n // shuffle\n await this.shuffleArray(positions);\n\n // build out the char sets\n let allCharSet = \"\";\n\n let lowercaseCharSet = \"abcdefghijkmnopqrstuvwxyz\";\n if (o.ambiguous) {\n lowercaseCharSet += \"l\";\n }\n if (o.lowercase) {\n allCharSet += lowercaseCharSet;\n }\n\n let uppercaseCharSet = \"ABCDEFGHJKLMNPQRSTUVWXYZ\";\n if (o.ambiguous) {\n uppercaseCharSet += \"IO\";\n }\n if (o.uppercase) {\n allCharSet += uppercaseCharSet;\n }\n\n let numberCharSet = \"23456789\";\n if (o.ambiguous) {\n numberCharSet += \"01\";\n }\n if (o.number) {\n allCharSet += numberCharSet;\n }\n\n const specialCharSet = \"!@#$%^&*\";\n if (o.special) {\n allCharSet += specialCharSet;\n }\n\n let password = \"\";\n for (let i = 0; i < o.length; i++) {\n let positionChars: string;\n switch (positions[i]) {\n case \"l\":\n positionChars = lowercaseCharSet;\n break;\n case \"u\":\n positionChars = uppercaseCharSet;\n break;\n case \"n\":\n positionChars = numberCharSet;\n break;\n case \"s\":\n positionChars = specialCharSet;\n break;\n case \"a\":\n positionChars = allCharSet;\n break;\n default:\n break;\n }\n\n const randomCharIndex = await this.cryptoService.randomNumber(0, positionChars.length - 1);\n password += positionChars.charAt(randomCharIndex);\n }\n\n return password;\n }\n\n async generatePassphrase(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.numWords == null || o.numWords <= 2) {\n o.numWords = DefaultOptions.numWords;\n }\n if (o.wordSeparator == null || o.wordSeparator.length === 0 || o.wordSeparator.length > 1) {\n o.wordSeparator = \" \";\n }\n if (o.capitalize == null) {\n o.capitalize = false;\n }\n if (o.includeNumber == null) {\n o.includeNumber = false;\n }\n\n const listLength = EEFLongWordList.length - 1;\n const wordList = new Array(o.numWords);\n for (let i = 0; i < o.numWords; i++) {\n const wordIndex = await this.cryptoService.randomNumber(0, listLength);\n if (o.capitalize) {\n wordList[i] = this.capitalize(EEFLongWordList[wordIndex]);\n } else {\n wordList[i] = EEFLongWordList[wordIndex];\n }\n }\n\n if (o.includeNumber) {\n await this.appendRandomNumberToRandomWord(wordList);\n }\n return wordList.join(o.wordSeparator);\n }\n\n async getOptions(): Promise<[any, PasswordGeneratorPolicyOptions]> {\n let options = await this.stateService.getPasswordGenerationOptions();\n if (options == null) {\n options = 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: any\n ): Promise<[any, PasswordGeneratorPolicyOptions]> {\n let enforcedPolicyOptions = await this.getPasswordGeneratorPolicyOptions();\n if (enforcedPolicyOptions != null) {\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (enforcedPolicyOptions.useUppercase) {\n options.uppercase = true;\n }\n\n if (enforcedPolicyOptions.useLowercase) {\n options.lowercase = true;\n }\n\n if (enforcedPolicyOptions.useNumbers) {\n options.number = true;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (enforcedPolicyOptions.useSpecial) {\n options.special = true;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n // Must normalize these fields because the receiving call expects all options to pass the current rules\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (enforcedPolicyOptions.capitalize) {\n options.capitalize = true;\n }\n\n if (enforcedPolicyOptions.includeNumber) {\n options.includeNumber = true;\n }\n\n // Force default type if password/passphrase selected via policy\n if (\n enforcedPolicyOptions.defaultType === \"password\" ||\n enforcedPolicyOptions.defaultType === \"passphrase\"\n ) {\n options.type = enforcedPolicyOptions.defaultType;\n }\n } else {\n // UI layer expects an instantiated object to prevent more explicit null checks\n enforcedPolicyOptions = new PasswordGeneratorPolicyOptions();\n }\n return [options, enforcedPolicyOptions];\n }\n\n async getPasswordGeneratorPolicyOptions(): Promise {\n const policies: Policy[] =\n this.policyService == null\n ? null\n : await this.policyService.getAll(PolicyType.PasswordGenerator);\n let enforcedOptions: PasswordGeneratorPolicyOptions = null;\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach((currentPolicy) => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new PasswordGeneratorPolicyOptions();\n }\n\n // Password wins in multi-org collisions\n if (currentPolicy.data.defaultType != null && enforcedOptions.defaultType !== \"password\") {\n enforcedOptions.defaultType = currentPolicy.data.defaultType;\n }\n\n if (\n currentPolicy.data.minLength != null &&\n currentPolicy.data.minLength > enforcedOptions.minLength\n ) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.useUpper) {\n enforcedOptions.useUppercase = true;\n }\n\n if (currentPolicy.data.useLower) {\n enforcedOptions.useLowercase = true;\n }\n\n if (currentPolicy.data.useNumbers) {\n enforcedOptions.useNumbers = true;\n }\n\n if (\n currentPolicy.data.minNumbers != null &&\n currentPolicy.data.minNumbers > enforcedOptions.numberCount\n ) {\n enforcedOptions.numberCount = currentPolicy.data.minNumbers;\n }\n\n if (currentPolicy.data.useSpecial) {\n enforcedOptions.useSpecial = true;\n }\n\n if (\n currentPolicy.data.minSpecial != null &&\n currentPolicy.data.minSpecial > enforcedOptions.specialCount\n ) {\n enforcedOptions.specialCount = currentPolicy.data.minSpecial;\n }\n\n if (\n currentPolicy.data.minNumberWords != null &&\n currentPolicy.data.minNumberWords > enforcedOptions.minNumberWords\n ) {\n enforcedOptions.minNumberWords = currentPolicy.data.minNumberWords;\n }\n\n if (currentPolicy.data.capitalize) {\n enforcedOptions.capitalize = true;\n }\n\n if (currentPolicy.data.includeNumber) {\n enforcedOptions.includeNumber = true;\n }\n });\n\n return enforcedOptions;\n }\n\n async saveOptions(options: any) {\n await this.stateService.setPasswordGenerationOptions(options);\n }\n\n async getHistory(): Promise {\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return new Array();\n }\n\n if ((await this.stateService.getDecryptedPasswordGenerationHistory()) == null) {\n const encrypted = await this.stateService.getEncryptedPasswordGenerationHistory();\n const decrypted = await this.decryptHistory(encrypted);\n await this.stateService.setDecryptedPasswordGenerationHistory(decrypted);\n }\n\n const passwordGenerationHistory =\n await this.stateService.getDecryptedPasswordGenerationHistory();\n return passwordGenerationHistory != null\n ? passwordGenerationHistory\n : new Array();\n }\n\n async addHistory(password: string): Promise {\n // Cannot add new history if no key is available\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return;\n }\n\n const currentHistory = await this.getHistory();\n\n // Prevent duplicates\n if (this.matchesPrevious(password, currentHistory)) {\n return;\n }\n\n currentHistory.unshift(new GeneratedPasswordHistory(password, Date.now()));\n\n // Remove old items.\n if (currentHistory.length > MaxPasswordsInHistory) {\n currentHistory.pop();\n }\n\n const newHistory = await this.encryptHistory(currentHistory);\n 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(options: any, enforcedPolicyOptions: PasswordGeneratorPolicyOptions) {\n options.minLowercase = 0;\n options.minUppercase = 0;\n\n if (!options.length || options.length < 5) {\n options.length = 5;\n } else if (options.length > 128) {\n options.length = 128;\n }\n\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (!options.minNumber) {\n options.minNumber = 0;\n } else if (options.minNumber > options.length) {\n options.minNumber = options.length;\n } else if (options.minNumber > 9) {\n options.minNumber = 9;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (!options.minSpecial) {\n options.minSpecial = 0;\n } else if (options.minSpecial > options.length) {\n options.minSpecial = options.length;\n } else if (options.minSpecial > 9) {\n options.minSpecial = 9;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords == null || options.length < 3) {\n options.numWords = 3;\n } else if (options.numWords > 20) {\n options.numWords = 20;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (options.wordSeparator != null && options.wordSeparator.length > 1) {\n options.wordSeparator = options.wordSeparator[0];\n }\n\n this.sanitizePasswordLength(options, false);\n }\n\n private capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n private async appendRandomNumberToRandomWord(wordList: string[]) {\n if (wordList == null || wordList.length <= 0) {\n return;\n }\n const index = await this.cryptoService.randomNumber(0, wordList.length - 1);\n const num = await this.cryptoService.randomNumber(0, 9);\n wordList[index] = wordList[index] + num;\n }\n\n private async encryptHistory(\n history: GeneratedPasswordHistory[]\n ): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async (item) => {\n const encrypted = await this.cryptoService.encrypt(item.password);\n return new GeneratedPasswordHistory(encrypted.encryptedString, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private async decryptHistory(\n history: GeneratedPasswordHistory[]\n ): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async (item) => {\n const decrypted = await this.cryptoService.decryptToUtf8(new EncString(item.password));\n return new GeneratedPasswordHistory(decrypted, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private matchesPrevious(password: string, history: GeneratedPasswordHistory[]): boolean {\n if (history == null || history.length === 0) {\n return false;\n }\n\n return history[history.length - 1].password === password;\n }\n\n // ref: https://stackoverflow.com/a/12646864/1090359\n private async shuffleArray(array: string[]) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = await this.cryptoService.randomNumber(0, i);\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n\n private sanitizePasswordLength(options: any, forGeneration: boolean) {\n let minUppercaseCalc = 0;\n let minLowercaseCalc = 0;\n let minNumberCalc: number = options.minNumber;\n let minSpecialCalc: number = options.minSpecial;\n\n if (options.uppercase && options.minUppercase <= 0) {\n minUppercaseCalc = 1;\n } else if (!options.uppercase) {\n minUppercaseCalc = 0;\n }\n\n if (options.lowercase && options.minLowercase <= 0) {\n minLowercaseCalc = 1;\n } else if (!options.lowercase) {\n minLowercaseCalc = 0;\n }\n\n if (options.number && options.minNumber <= 0) {\n minNumberCalc = 1;\n } else if (!options.number) {\n minNumberCalc = 0;\n }\n\n if (options.special && options.minSpecial <= 0) {\n minSpecialCalc = 1;\n } else if (!options.special) {\n minSpecialCalc = 0;\n }\n\n // This should never happen but is a final safety net\n if (!options.length || options.length < 1) {\n options.length = 10;\n }\n\n const minLength: number = minUppercaseCalc + minLowercaseCalc + minNumberCalc + minSpecialCalc;\n // Normalize and Generation both require this modification\n if (options.length < minLength) {\n options.length = minLength;\n }\n\n // Apply other changes if the options object passed in is for generation\n if (forGeneration) {\n options.minUppercase = minUppercaseCalc;\n options.minLowercase = minLowercaseCalc;\n options.minNumber = minNumberCalc;\n options.minSpecial = minSpecialCalc;\n }\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\nimport { PolicyResponse } from \"../response/policyResponse\";\n\nexport class PolicyData {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: PolicyResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.type = response.type;\n this.data = response.data;\n this.enabled = response.enabled;\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\nimport { PolicyData } from \"../data/policyData\";\n\nimport Domain from \"./domainBase\";\n\nexport class Policy extends Domain {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(obj?: PolicyData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.organizationId = obj.organizationId;\n this.type = obj.type;\n this.data = obj.data;\n this.enabled = obj.enabled;\n }\n}\n","import Domain from \"./domainBase\";\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/providerData\";\n\nexport class Provider {\n id: string;\n name: string;\n status: ProviderUserStatusType;\n type: ProviderUserType;\n enabled: boolean;\n userId: string;\n useEvents: boolean;\n\n constructor(obj?: ProviderData) {\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.name = obj.name;\n this.status = obj.status;\n this.type = obj.type;\n this.enabled = obj.enabled;\n this.userId = obj.userId;\n this.useEvents = obj.useEvents;\n }\n\n get canAccess() {\n if (this.isProviderAdmin) {\n return true;\n }\n return this.enabled && this.status === ProviderUserStatusType.Confirmed;\n }\n\n get canCreateOrganizations() {\n return this.enabled && this.isProviderAdmin;\n }\n\n get canManageUsers() {\n return this.isProviderAdmin;\n }\n\n get canAccessEventLogs() {\n return this.isProviderAdmin;\n }\n\n get isProviderAdmin() {\n return this.type === ProviderUserType.ProviderAdmin;\n }\n}\n","export enum SendType {\n Text = 0,\n File = 1,\n}\n","import * as lunr from \"lunr\";\n\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { SearchService as SearchServiceAbstraction } from \"../abstractions/search.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport class SearchService implements SearchServiceAbstraction {\n 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 { SendFileApi } from \"../api/sendFileApi\";\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/sendTextApi\";\n\nexport class SendTextData {\n text: string;\n hidden: boolean;\n\n constructor(data?: SendTextApi) {\n if (data == null) {\n return;\n }\n\n this.text = data.text;\n this.hidden = data.hidden;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendResponse } from \"../response/sendResponse\";\n\nimport { SendFileData } from \"./sendFileData\";\nimport { SendTextData } from \"./sendTextData\";\n\nexport class SendData {\n id: string;\n accessId: string;\n 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 { SendFile } from \"../domain/sendFile\";\n\nimport { View } from \"./view\";\n\nexport class SendFileView implements View {\n id: string = null;\n size: string = null;\n sizeName: string = null;\n fileName: string = null;\n\n constructor(f?: SendFile) {\n if (!f) {\n return;\n }\n\n this.id = f.id;\n this.size = f.size;\n this.sizeName = f.sizeName;\n }\n\n get fileSize(): number {\n try {\n if (this.size != null) {\n return parseInt(this.size, null);\n }\n } catch {\n // Invalid file size.\n }\n return 0;\n }\n}\n","import { SendText } from \"../domain/sendText\";\n\nimport { View } from \"./view\";\n\nexport class SendTextView implements View {\n text: string = null;\n hidden: boolean;\n\n constructor(t?: SendText) {\n if (!t) {\n return;\n }\n\n this.hidden = t.hidden;\n }\n\n get maskedText(): string {\n return this.text != null ? \"••••••••\" : null;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { Utils } from \"../../misc/utils\";\nimport { Send } from \"../domain/send\";\nimport { SymmetricCryptoKey } from \"../domain/symmetricCryptoKey\";\n\nimport { SendFileView } from \"./sendFileView\";\nimport { SendTextView } from \"./sendTextView\";\nimport { View } from \"./view\";\n\nexport class SendView implements View {\n id: string = null;\n accessId: string = null;\n name: string = null;\n notes: string = null;\n key: ArrayBuffer;\n cryptoKey: SymmetricCryptoKey;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n maxAccessCount?: number = null;\n accessCount = 0;\n revisionDate: Date = null;\n deletionDate: Date = null;\n expirationDate: Date = null;\n password: string = null;\n disabled = false;\n hideEmail = false;\n\n constructor(s?: Send) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.accessId = s.accessId;\n this.type = s.type;\n this.maxAccessCount = s.maxAccessCount;\n this.accessCount = s.accessCount;\n this.revisionDate = s.revisionDate;\n this.deletionDate = s.deletionDate;\n this.expirationDate = s.expirationDate;\n this.disabled = s.disabled;\n this.password = s.password;\n this.hideEmail = s.hideEmail;\n }\n\n get urlB64Key(): string {\n return Utils.fromBufferToUrlB64(this.key);\n }\n\n get maxAccessCountReached(): boolean {\n if (this.maxAccessCount == null) {\n return false;\n }\n return this.accessCount >= this.maxAccessCount;\n }\n\n get expired(): boolean {\n if (this.expirationDate == null) {\n return false;\n }\n return this.expirationDate <= new Date();\n }\n\n get pendingDelete(): boolean {\n return this.deletionDate <= new Date();\n }\n}\n","import { SendFileData } from \"../data/sendFileData\";\nimport { SendFileView } from \"../view/sendFileView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class SendFile extends Domain {\n id: string;\n size: string;\n sizeName: string;\n fileName: EncString;\n\n constructor(obj?: SendFileData) {\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/sendTextData\";\nimport { SendTextView } from \"../view/sendTextView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class SendText extends Domain {\n text: EncString;\n hidden: boolean;\n\n constructor(obj?: SendTextData) {\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/sendData\";\nimport { SendView } from \"../view/sendView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SendFile } from \"./sendFile\";\nimport { SendText } from \"./sendText\";\n\nexport class Send extends Domain {\n id: string;\n accessId: string;\n 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/sendFileApi\";\nimport { SendTextApi } from \"../api/sendTextApi\";\nimport { Send } from \"../domain/send\";\n\nexport class SendRequest {\n type: SendType;\n fileLength?: number;\n name: string;\n notes: string;\n key: string;\n maxAccessCount?: number;\n expirationDate: string;\n deletionDate: string;\n text: SendTextApi;\n file: SendFileApi;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(send: Send, fileLength?: number) {\n this.type = send.type;\n this.fileLength = fileLength;\n this.name = send.name ? send.name.encryptedString : null;\n this.notes = send.notes ? send.notes.encryptedString : null;\n this.maxAccessCount = send.maxAccessCount;\n this.expirationDate = send.expirationDate != null ? send.expirationDate.toISOString() : null;\n this.deletionDate = send.deletionDate != null ? send.deletionDate.toISOString() : null;\n this.key = send.key != null ? send.key.encryptedString : null;\n this.password = send.password;\n this.disabled = send.disabled;\n this.hideEmail = send.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendTextApi();\n this.text.text = send.text.text != null ? send.text.text.encryptedString : null;\n this.text.hidden = send.text.hidden;\n break;\n case SendType.File:\n this.file = new SendFileApi();\n this.file.fileName = send.file.fileName != null ? send.file.fileName.encryptedString : null;\n break;\n default:\n break;\n }\n }\n}\n","export enum StorageLocation {\n Both = \"both\",\n Disk = \"disk\",\n Memory = \"memory\",\n}\n","import { ProviderUserStatusType } from \"../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../enums/providerUserType\";\nimport { ProfileProviderResponse } from \"../response/profileProviderResponse\";\n\nexport class ProviderData {\n id: string;\n name: string;\n status: ProviderUserStatusType;\n type: ProviderUserType;\n enabled: boolean;\n userId: string;\n useEvents: boolean;\n\n constructor(response: ProfileProviderResponse) {\n this.id = response.id;\n this.name = response.name;\n this.status = response.status;\n this.type = response.type;\n this.enabled = response.enabled;\n this.userId = response.userId;\n this.useEvents = response.useEvents;\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { Account } from \"./account\";\nimport { GlobalState } from \"./globalState\";\n\nexport class State<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n accounts: { [userId: string]: TAccount } = {};\n globals: TGlobalState;\n activeUserId: string;\n authenticatedAccounts: string[] = [];\n accountActivity: { [userId: string]: number } = {};\n\n constructor(globals: TGlobalState) {\n this.globals = globals;\n }\n\n // TODO, make Jsonify work. It currently doesn't because Globals doesn't implement Jsonify.\n static fromJSON(\n obj: any\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),\n });\n }\n\n private static buildAccountMapFromJSON(\n jsonAccounts: Jsonify<{ [userId: string]: Jsonify }>\n ) {\n if (!jsonAccounts) {\n return {};\n }\n const accounts: { [userId: string]: Account } = {};\n for (const userId in jsonAccounts) {\n accounts[userId] = Account.fromJSON(jsonAccounts[userId]);\n }\n return accounts;\n }\n}\n","import { BehaviorSubject, concatMap } from \"rxjs\";\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 { CipherData } from \"../models/data/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { EncryptedOrganizationKeyData } from \"../models/data/encryptedOrganizationKeyData\";\nimport { EventData } from \"../models/data/eventData\";\nimport { FolderData } from \"../models/data/folderData\";\nimport { LocalData } from \"../models/data/localData\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { SendData } from \"../models/data/sendData\";\nimport { 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/encString\";\nimport { EnvironmentUrls } from \"../models/domain/environmentUrls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { GlobalState } from \"../models/domain/globalState\";\nimport { Policy } from \"../models/domain/policy\";\nimport { State } from \"../models/domain/state\";\nimport { StorageOptions } from \"../models/domain/storageOptions\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { WindowState } from \"../models/domain/windowState\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { CollectionView } from \"../models/view/collectionView\";\nimport { SendView } from \"../models/view/sendView\";\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 private activeAccountSubject = new BehaviorSubject(null);\n activeAccount$ = this.activeAccountSubject.asObservable();\n\n private activeAccountUnlockedSubject = new BehaviorSubject(false);\n activeAccountUnlocked$ = this.activeAccountUnlockedSubject.asObservable();\n\n private hasBeenInited = false;\n private isRecoveredSession = false;\n\n private accountDiskCache = new Map();\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 this.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 = this.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 this.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 = this.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 getEnableGravitars(options?: StorageOptions): Promise {\n return (\n (\n await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n )\n )?.settings?.enableGravitars ?? false\n );\n }\n\n async setEnableGravitars(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.enableGravitars = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEnableMinimizeToTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableMinimizeToTray ?? false\n );\n }\n\n async setEnableMinimizeToTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableMinimizeToTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableStartToTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableStartToTray ?? false\n );\n }\n\n async setEnableStartToTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableStartToTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableTray ?? false\n );\n }\n\n async setEnableTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n @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 async getOrganizations(options?: StorageOptions): Promise<{ [id: string]: OrganizationData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.organizations;\n }\n\n async setOrganizations(\n value: { [id: string]: OrganizationData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.organizations = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getPasswordGenerationOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.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.get(options.userId);\n if (cachedAccount != null) {\n return cachedAccount;\n }\n }\n\n const account = options?.useSecureStorage\n ? (await this.secureStorageService.get(options.userId, options)) ??\n (await this.storageService.get(\n options.userId,\n this.reconcileOptions(options, { htmlStorageLocation: HtmlStorageLocation.Local })\n ))\n : await this.storageService.get(options.userId, options);\n\n if (this.useAccountCache) {\n this.accountDiskCache.set(options.userId, account);\n }\n return account;\n }\n\n protected useMemory(storageLocation: StorageLocation) {\n return storageLocation === StorageLocation.Memory || storageLocation === StorageLocation.Both;\n }\n\n protected useDisk(storageLocation: StorageLocation) {\n return storageLocation === StorageLocation.Disk || storageLocation === StorageLocation.Both;\n }\n\n protected async saveAccount(\n account: TAccount,\n options: StorageOptions = {\n storageLocation: StorageLocation.Both,\n useSecureStorage: false,\n }\n ) {\n return this.useMemory(options.storageLocation)\n ? await this.saveAccountToMemory(account)\n : await this.saveAccountToDisk(account, options);\n }\n\n protected async saveAccountToDisk(account: TAccount, options: StorageOptions): Promise {\n const storageLocation = options.useSecureStorage\n ? this.secureStorageService\n : this.storageService;\n\n await storageLocation.save(`${options.userId}`, account, options);\n\n if (this.useAccountCache) {\n this.accountDiskCache.delete(options.userId);\n }\n }\n\n protected async saveAccountToMemory(account: TAccount): Promise {\n if (this.getAccountFromMemory({ userId: account.profile.userId }) !== null) {\n 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 if (this.useAccountCache) {\n this.accountDiskCache.delete(userId);\n }\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),\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 mapToRecord(map: Map): Record {\n return map == null ? null : Object.fromEntries(map);\n }\n\n private recordToMap(record: Record): Map {\n return record == null ? null : new Map(Object.entries(record));\n }\n}\n\nexport function withPrototype(\n constructor: new (...args: any[]) => T,\n converter: (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 return result == null ||\n result.constructor.name === constructor.prototype.constructor.name\n ? converter(result as T)\n : converter(\n Object.create(constructor.prototype, Object.getOwnPropertyDescriptors(result)) as T\n );\n });\n },\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 ? memberConverter(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 { StateService } from \"../abstractions/state.service\";\nimport { TokenService as TokenServiceAbstraction } from \"../abstractions/token.service\";\nimport { Utils } from \"../misc/utils\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\n\nexport class TokenService implements TokenServiceAbstraction {\n static decodeToken(token: string): Promise {\n if (token == null) {\n throw new Error(\"Token not provided.\");\n }\n\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n throw new Error(\"JWT must have 3 parts\");\n }\n\n const decoded = Utils.fromUrlB64ToUtf8(parts[1]);\n if (decoded == null) {\n throw new Error(\"Cannot decode the token\");\n }\n\n const decodedToken = JSON.parse(decoded);\n return decodedToken;\n }\n\n constructor(private stateService: StateService) {}\n\n async setTokens(\n accessToken: string,\n refreshToken: string,\n clientIdClientSecret: [string, string]\n ): Promise {\n await this.setToken(accessToken);\n await this.setRefreshToken(refreshToken);\n if (clientIdClientSecret != null) {\n await this.setClientId(clientIdClientSecret[0]);\n await this.setClientSecret(clientIdClientSecret[1]);\n }\n }\n\n async setClientId(clientId: string): Promise {\n return await this.stateService.setApiKeyClientId(clientId);\n }\n\n async getClientId(): Promise {\n return await this.stateService.getApiKeyClientId();\n }\n\n async setClientSecret(clientSecret: string): Promise {\n return await this.stateService.setApiKeyClientSecret(clientSecret);\n }\n\n async getClientSecret(): Promise {\n return await this.stateService.getApiKeyClientSecret();\n }\n\n async setToken(token: string): Promise {\n await this.stateService.setAccessToken(token);\n }\n\n async getToken(): Promise {\n return await this.stateService.getAccessToken();\n }\n\n async setRefreshToken(refreshToken: string): Promise {\n return await this.stateService.setRefreshToken(refreshToken);\n }\n\n async getRefreshToken(): Promise {\n return await this.stateService.getRefreshToken();\n }\n\n async setTwoFactorToken(tokenResponse: IdentityTokenResponse): Promise {\n return await this.stateService.setTwoFactorToken(tokenResponse.twoFactorToken);\n }\n\n async getTwoFactorToken(): Promise {\n return await this.stateService.getTwoFactorToken();\n }\n\n async clearTwoFactorToken(): Promise {\n return await this.stateService.setTwoFactorToken(null);\n }\n\n async clearToken(userId?: string): Promise {\n await this.stateService.setAccessToken(null, { userId: userId });\n await this.stateService.setRefreshToken(null, { userId: userId });\n await this.stateService.setApiKeyClientId(null, { userId: userId });\n await this.stateService.setApiKeyClientSecret(null, { userId: userId });\n }\n\n // jwthelper methods\n // ref https://github.com/auth0/angular-jwt/blob/master/src/angularJwt/services/jwt.js\n\n async decodeToken(token?: string): Promise {\n 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/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { EventData } from \"../models/data/eventData\";\nimport { FolderData } from \"../models/data/folderData\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { SendData } from \"../models/data/sendData\";\nimport {\n Account,\n AccountSettings,\n AccountSettingsSettings,\n EncryptionPair,\n} from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/encString\";\nimport { EnvironmentUrls } from \"../models/domain/environmentUrls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { GlobalState } from \"../models/domain/globalState\";\nimport { StorageOptions } from \"../models/domain/storageOptions\";\n\nimport { TokenService } from \"./token.service\";\n\n// Originally (before January 2022) storage was handled as a flat key/value pair store.\n// With the move to a typed object for state storage these keys should no longer be in use anywhere outside of this migration.\nconst v1Keys: { [key: string]: string } = {\n accessToken: \"accessToken\",\n alwaysShowDock: \"alwaysShowDock\",\n autoConfirmFingerprints: \"autoConfirmFingerprints\",\n autoFillOnPageLoadDefault: \"autoFillOnPageLoadDefault\",\n biometricAwaitingAcceptance: \"biometricAwaitingAcceptance\",\n biometricFingerprintValidated: \"biometricFingerprintValidated\",\n biometricText: \"biometricText\",\n biometricUnlock: \"biometric\",\n clearClipboard: \"clearClipboardKey\",\n clientId: \"apikey_clientId\",\n clientSecret: \"apikey_clientSecret\",\n collapsedGroupings: \"collapsedGroupings\",\n convertAccountToKeyConnector: \"convertAccountToKeyConnector\",\n defaultUriMatch: \"defaultUriMatch\",\n disableAddLoginNotification: \"disableAddLoginNotification\",\n disableAutoBiometricsPrompt: \"noAutoPromptBiometrics\",\n disableAutoTotpCopy: \"disableAutoTotpCopy\",\n disableBadgeCounter: \"disableBadgeCounter\",\n disableChangedPasswordNotification: \"disableChangedPasswordNotification\",\n disableContextMenuItem: \"disableContextMenuItem\",\n disableFavicon: \"disableFavicon\",\n disableGa: \"disableGa\",\n dontShowCardsCurrentTab: \"dontShowCardsCurrentTab\",\n dontShowIdentitiesCurrentTab: \"dontShowIdentitiesCurrentTab\",\n emailVerified: \"emailVerified\",\n enableAlwaysOnTop: \"enableAlwaysOnTopKey\",\n enableAutoFillOnPageLoad: \"enableAutoFillOnPageLoad\",\n enableBiometric: \"enabledBiometric\",\n enableBrowserIntegration: \"enableBrowserIntegration\",\n enableBrowserIntegrationFingerprint: \"enableBrowserIntegrationFingerprint\",\n enableCloseToTray: \"enableCloseToTray\",\n enableFullWidth: \"enableFullWidth\",\n enableGravatars: \"enableGravatars\",\n enableMinimizeToTray: \"enableMinimizeToTray\",\n enableStartToTray: \"enableStartToTrayKey\",\n enableTray: \"enableTray\",\n encKey: \"encKey\", // Generated Symmetric Key\n encOrgKeys: \"encOrgKeys\",\n encPrivate: \"encPrivateKey\",\n encProviderKeys: \"encProviderKeys\",\n entityId: \"entityId\",\n entityType: \"entityType\",\n environmentUrls: \"environmentUrls\",\n equivalentDomains: \"equivalentDomains\",\n eventCollection: \"eventCollection\",\n forcePasswordReset: \"forcePasswordReset\",\n history: \"generatedPasswordHistory\",\n installedVersion: \"installedVersion\",\n kdf: \"kdf\",\n kdfIterations: \"kdfIterations\",\n key: \"key\", // Master Key\n keyHash: \"keyHash\",\n lastActive: \"lastActive\",\n localData: \"sitesLocalData\",\n locale: \"locale\",\n mainWindowSize: \"mainWindowSize\",\n minimizeOnCopyToClipboard: \"minimizeOnCopyToClipboardKey\",\n neverDomains: \"neverDomains\",\n noAutoPromptBiometricsText: \"noAutoPromptBiometricsText\",\n openAtLogin: \"openAtLogin\",\n passwordGenerationOptions: \"passwordGenerationOptions\",\n pinProtected: \"pinProtectedKey\",\n protectedPin: \"protectedPin\",\n refreshToken: \"refreshToken\",\n ssoCodeVerifier: \"ssoCodeVerifier\",\n ssoIdentifier: \"ssoOrgIdentifier\",\n ssoState: \"ssoState\",\n stamp: \"securityStamp\",\n theme: \"theme\",\n userEmail: \"userEmail\",\n userId: \"userId\",\n usesConnector: \"usesKeyConnector\",\n vaultTimeoutAction: \"vaultTimeoutAction\",\n vaultTimeout: \"lockOption\",\n rememberedEmail: \"rememberedEmail\",\n};\n\nconst v1KeyPrefixes: { [key: string]: string } = {\n ciphers: \"ciphers_\",\n collections: \"collections_\",\n folders: \"folders_\",\n lastSync: \"lastSync_\",\n policies: \"policies_\",\n twoFactorToken: \"twoFactorToken_\",\n organizations: \"organizations_\",\n providers: \"providers_\",\n sends: \"sends_\",\n settings: \"settings_\",\n};\n\nconst keys = {\n global: \"global\",\n authenticatedAccounts: \"authenticatedAccounts\",\n activeUserId: \"activeUserId\",\n tempAccountSettings: \"tempAccountSettings\", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication\n accountActivity: \"accountActivity\",\n};\n\nconst partialKeys = {\n autoKey: \"_masterkey_auto\",\n biometricKey: \"_masterkey_biometric\",\n masterKey: \"_masterkey\",\n};\n\nexport class StateMigrationService<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n constructor(\n protected storageService: 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 enableGravitars:\n (await this.get(v1Keys.enableGravatars)) ??\n defaultAccount.settings.enableGravitars,\n environmentUrls: globals.environmentUrls ?? defaultAccount.settings.environmentUrls,\n equivalentDomains:\n (await this.get(v1Keys.equivalentDomains)) ??\n defaultAccount.settings.equivalentDomains,\n minimizeOnCopyToClipboard:\n (await this.get(v1Keys.minimizeOnCopyToClipboard)) ??\n defaultAccount.settings.minimizeOnCopyToClipboard,\n neverDomains:\n (await this.get(v1Keys.neverDomains)) ?? defaultAccount.settings.neverDomains,\n passwordGenerationOptions:\n (await this.get(v1Keys.passwordGenerationOptions)) ??\n defaultAccount.settings.passwordGenerationOptions,\n pinProtected: 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/permissionsApi\";\nimport { ProfileOrganizationResponse } from \"../response/profileOrganizationResponse\";\n\nexport class OrganizationData {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useScim: 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.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 { Subject } from \"rxjs\";\n\nimport { 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 { OrganizationService } from \"../../abstractions/organization.service\";\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/cipherData\";\nimport { CollectionData } from \"../../models/data/collectionData\";\nimport { FolderData } from \"../../models/data/folderData\";\nimport { OrganizationData } from \"../../models/data/organizationData\";\nimport { PolicyData } from \"../../models/data/policyData\";\nimport { ProviderData } from \"../../models/data/providerData\";\nimport { SendData } from \"../../models/data/sendData\";\nimport { CipherResponse } from \"../../models/response/cipherResponse\";\nimport { CollectionDetailsResponse } from \"../../models/response/collectionResponse\";\nimport { DomainsResponse } from \"../../models/response/domainsResponse\";\nimport { FolderResponse } from \"../../models/response/folderResponse\";\nimport {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../../models/response/notificationResponse\";\nimport { PolicyResponse } from \"../../models/response/policyResponse\";\nimport { ProfileResponse } from \"../../models/response/profileResponse\";\nimport { SendResponse } from \"../../models/response/sendResponse\";\nimport { SyncEventArgs } from \"../../types/syncEventArgs\";\n\nexport class SyncService implements SyncServiceAbstraction {\n syncInProgress = false;\n\n private _sync = new Subject();\n\n sync$ = this._sync.asObservable();\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 organizationService: OrganizationService,\n private providerService: ProviderService,\n private folderApiService: FolderApiServiceAbstraction,\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 this._sync.next({ status: \"Started\" });\n }\n\n private syncCompleted(successfully: boolean): boolean {\n this.syncInProgress = false;\n this.messagingService.send(\"syncCompleted\", { successfully: successfully });\n this._sync.next({ status: successfully ? \"SuccessfullyCompleted\" : \"UnsuccessfullyCompleted\" });\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.save(organizations);\n await this.providerService.save(providers);\n\n if (await this.keyConnectorService.userNeedsMigration()) {\n await this.keyConnectorService.setConvertAccountRequired(true);\n this.messagingService.send(\"convertAccountToKeyConnector\");\n } else {\n this.keyConnectorService.removeConvertAccountRequired();\n }\n }\n\n private async syncFolders(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","import { I18nService } from \"../abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport {\n TwoFactorProviderDetails,\n TwoFactorService as TwoFactorServiceAbstraction,\n} from \"../abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"../enums/twoFactorProviderType\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identityTwoFactorResponse\";\n\nexport const TwoFactorProviders: Partial> =\n {\n [TwoFactorProviderType.Authenticator]: {\n type: TwoFactorProviderType.Authenticator,\n name: null as string,\n description: null as string,\n priority: 1,\n sort: 1,\n premium: false,\n },\n [TwoFactorProviderType.Yubikey]: {\n type: TwoFactorProviderType.Yubikey,\n name: null as string,\n description: null as string,\n priority: 3,\n sort: 2,\n premium: true,\n },\n [TwoFactorProviderType.Duo]: {\n type: TwoFactorProviderType.Duo,\n name: \"Duo\",\n description: null as string,\n priority: 2,\n sort: 3,\n premium: true,\n },\n [TwoFactorProviderType.OrganizationDuo]: {\n type: TwoFactorProviderType.OrganizationDuo,\n name: \"Duo (Organization)\",\n description: null as string,\n priority: 10,\n sort: 4,\n premium: false,\n },\n [TwoFactorProviderType.Email]: {\n type: TwoFactorProviderType.Email,\n name: null as string,\n description: null as string,\n priority: 0,\n sort: 6,\n premium: false,\n },\n [TwoFactorProviderType.WebAuthn]: {\n type: TwoFactorProviderType.WebAuthn,\n name: null as string,\n description: null as string,\n priority: 4,\n sort: 5,\n premium: true,\n },\n };\n\nexport class TwoFactorService implements TwoFactorServiceAbstraction {\n private twoFactorProvidersData: Map;\n private selectedTwoFactorProviderType: TwoFactorProviderType = null;\n\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n init() {\n TwoFactorProviders[TwoFactorProviderType.Email].name = this.i18nService.t(\"emailTitle\");\n TwoFactorProviders[TwoFactorProviderType.Email].description = this.i18nService.t(\"emailDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Authenticator].name =\n this.i18nService.t(\"authenticatorAppTitle\");\n TwoFactorProviders[TwoFactorProviderType.Authenticator].description =\n this.i18nService.t(\"authenticatorAppDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Duo].description = this.i18nService.t(\"duoDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].name =\n \"Duo (\" + this.i18nService.t(\"organization\") + \")\";\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].description =\n this.i18nService.t(\"duoOrganizationDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].name = this.i18nService.t(\"webAuthnTitle\");\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].description =\n this.i18nService.t(\"webAuthnDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Yubikey].name = this.i18nService.t(\"yubiKeyTitle\");\n TwoFactorProviders[TwoFactorProviderType.Yubikey].description =\n this.i18nService.t(\"yubiKeyDesc\");\n }\n\n getSupportedProviders(win: Window): TwoFactorProviderDetails[] {\n const providers: any[] = [];\n if (this.twoFactorProvidersData == null) {\n return providers;\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.OrganizationDuo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.OrganizationDuo]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Authenticator)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Authenticator]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Yubikey)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Yubikey]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.Duo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Duo]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.WebAuthn) &&\n this.platformUtilsService.supportsWebAuthn(win)\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.WebAuthn]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Email)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Email]);\n }\n\n return providers;\n }\n\n getDefaultProvider(webAuthnSupported: boolean): TwoFactorProviderType {\n if (this.twoFactorProvidersData == null) {\n return null;\n }\n\n if (\n this.selectedTwoFactorProviderType != null &&\n this.twoFactorProvidersData.has(this.selectedTwoFactorProviderType)\n ) {\n return this.selectedTwoFactorProviderType;\n }\n\n let providerType: TwoFactorProviderType = null;\n let providerPriority = -1;\n this.twoFactorProvidersData.forEach((_value, type) => {\n const provider = (TwoFactorProviders as any)[type];\n if (provider != null && provider.priority > providerPriority) {\n if (type === TwoFactorProviderType.WebAuthn && !webAuthnSupported) {\n return;\n }\n\n providerType = type;\n providerPriority = provider.priority;\n }\n });\n\n return providerType;\n }\n\n setSelectedProvider(type: TwoFactorProviderType) {\n this.selectedTwoFactorProviderType = type;\n }\n\n clearSelectedProvider() {\n this.selectedTwoFactorProviderType = null;\n }\n\n setProviders(response: IdentityTwoFactorResponse) {\n this.twoFactorProvidersData = response.twoFactorProviders2;\n }\n\n clearProviders() {\n this.twoFactorProvidersData = null;\n }\n\n getProviders() {\n return this.twoFactorProvidersData;\n }\n}\n","export class VerifyOTPRequest {\n OTP: string;\n\n constructor(OTP: string) {\n this.OTP = OTP;\n }\n}\n","export class SecretVerificationRequest {\n masterPasswordHash: string;\n otp: string;\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 { EEFLongWordList } 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, EEFLongWordList.length - 1);\n let word = EEFLongWordList[wordIndex];\n if (o.wordCapitalize) {\n word = word.charAt(0).toUpperCase() + word.slice(1);\n }\n if (o.wordIncludeNumber) {\n const num = await this.cryptoService.randomNumber(1, 9999);\n word = word + this.zeroPad(num.toString(), 4);\n }\n return word;\n }\n\n async generateSubaddress(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n const subaddressEmail = o.subaddressEmail;\n if (subaddressEmail == null || subaddressEmail.length < 3) {\n return o.subaddressEmail;\n }\n const atIndex = subaddressEmail.indexOf(\"@\");\n if (atIndex < 1 || atIndex >= subaddressEmail.length - 1) {\n return subaddressEmail;\n }\n if (o.subaddressType == null) {\n o.subaddressType = \"random\";\n }\n\n const emailBeginning = subaddressEmail.substr(0, atIndex);\n const emailEnding = subaddressEmail.substr(atIndex + 1, subaddressEmail.length);\n\n let subaddressString = \"\";\n if (o.subaddressType === \"random\") {\n subaddressString = await this.randomString(8);\n } else if (o.subaddressType === \"website-name\") {\n subaddressString = o.website;\n }\n return emailBeginning + \"+\" + subaddressString + \"@\" + emailEnding;\n }\n\n async generateCatchall(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.catchallDomain == null || o.catchallDomain === \"\") {\n return null;\n }\n if (o.catchallType == null) {\n o.catchallType = \"random\";\n }\n\n let startString = \"\";\n if (o.catchallType === \"random\") {\n startString = await this.randomString(8);\n } else if (o.catchallType === \"website-name\") {\n startString = o.website;\n }\n return startString + \"@\" + o.catchallDomain;\n }\n\n async 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 { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable()\nexport class AuthGuard implements CanActivate {\n constructor(\n private authService: AuthService,\n private router: Router,\n private messagingService: MessagingService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n this.messagingService.send(\"authBlocked\", { url: routerState.url });\n return false;\n }\n\n if (authStatus === AuthenticationStatus.Locked) {\n if (routerState != null) {\n this.messagingService.send(\"lockedUrl\", { url: routerState.url });\n }\n return this.router.createUrlTree([\"lock\"], { queryParams: { promptBiometric: true } });\n }\n\n if (\n !routerState.url.includes(\"remove-password\") &&\n (await this.keyConnectorService.getConvertAccountRequired())\n ) {\n return this.router.createUrlTree([\"/remove-password\"]);\n }\n\n return true;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable()\nexport class LockGuard implements CanActivate {\n protected homepage = \"vault\";\n protected loginpage = \"login\";\n constructor(private authService: AuthService, private router: Router) {}\n\n async canActivate() {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.Locked) {\n return true;\n }\n\n const redirectUrl =\n authStatus === AuthenticationStatus.LoggedOut ? this.loginpage : this.homepage;\n\n return this.router.createUrlTree([redirectUrl]);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable()\nexport class UnauthGuard implements CanActivate {\n protected homepage = \"vault\";\n constructor(private authService: AuthService, private router: Router) {}\n\n async canActivate() {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n return true;\n }\n\n if (authStatus === AuthenticationStatus.Locked) {\n return this.router.createUrlTree([\"lock\"]);\n }\n\n return this.router.createUrlTree([this.homepage]);\n }\n}\n","import { 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 { Injector, LOCALE_ID, NgModule } from \"@angular/core\";\n\nimport { ThemingService } from \"@bitwarden/angular/services/theming/theming.service\";\nimport { AbstractThemingService } from \"@bitwarden/angular/services/theming/theming.service.abstraction\";\nimport { AbstractEncryptService } from \"@bitwarden/common/abstractions/abstractEncrypt.service\";\nimport { AccountApiService as AccountApiServiceAbstraction } from \"@bitwarden/common/abstractions/account/account-api.service.abstraction\";\nimport { AccountService as AccountServiceAbstraction } from \"@bitwarden/common/abstractions/account/account.service.abstraction\";\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 { 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 { MessagingService as MessagingServiceAbstraction } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"@bitwarden/common/abstractions/notifications.service\";\nimport { OrganizationService as OrganizationServiceAbstraction } from \"@bitwarden/common/abstractions/organization.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.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 { 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 { 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 { Account } from \"@bitwarden/common/models/domain/account\";\nimport { GlobalState } from \"@bitwarden/common/models/domain/globalState\";\nimport { AccountApiService } from \"@bitwarden/common/services/account/account-api.service\";\nimport { AccountService } 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 { EncryptService } from \"@bitwarden/common/services/encrypt.service\";\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 { NotificationsService } from \"@bitwarden/common/services/notifications.service\";\nimport { OrganizationService } from \"@bitwarden/common/services/organization.service\";\nimport { OrganizationApiService } from \"@bitwarden/common/services/organization/organization-api.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 { 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 { 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 { ValidationService } from \"./validation.service\";\n\n@NgModule({\n declarations: [],\n providers: [\n ValidationService,\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 ) =>\n new CipherService(\n cryptoService,\n settingsService,\n apiService,\n fileUploadService,\n i18nService,\n () => injector.get(SearchServiceAbstraction),\n logService,\n stateService\n ),\n deps: [\n CryptoServiceAbstraction,\n SettingsServiceAbstraction,\n ApiServiceAbstraction,\n FileUploadServiceAbstraction,\n I18nServiceAbstraction,\n Injector, // TODO: Get rid of this circular dependency!\n LogService,\n StateServiceAbstraction,\n ],\n },\n {\n provide: FolderServiceAbstraction,\n useClass: FolderService,\n deps: [\n CryptoServiceAbstraction,\n 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: AccountApiService,\n deps: [ApiServiceAbstraction],\n },\n {\n provide: AccountServiceAbstraction,\n useClass: AccountService,\n deps: [\n AccountApiServiceAbstraction,\n UserVerificationServiceAbstraction,\n MessagingServiceAbstraction,\n LogService,\n ],\n },\n { provide: LogService, useFactory: () => new ConsoleLogService(false) },\n {\n provide: CollectionServiceAbstraction,\n useClass: CollectionService,\n deps: [CryptoServiceAbstraction, I18nServiceAbstraction, StateServiceAbstraction],\n },\n {\n provide: EnvironmentServiceAbstraction,\n useClass: EnvironmentService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: TotpServiceAbstraction,\n useClass: TotpService,\n deps: [CryptoFunctionServiceAbstraction, LogService, StateServiceAbstraction],\n },\n { provide: TokenServiceAbstraction, useClass: TokenService, deps: [StateServiceAbstraction] },\n {\n provide: CryptoServiceAbstraction,\n useClass: CryptoService,\n deps: [\n CryptoFunctionServiceAbstraction,\n AbstractEncryptService,\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 OrganizationServiceAbstraction,\n ProviderServiceAbstraction,\n FolderApiServiceAbstraction,\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: AbstractEncryptService,\n useClass: EncryptService,\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 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: 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 deps: [ApiServiceAbstraction],\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})\nexport class JslibServicesModule {}\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/authResult\";\nimport {\n ApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../models/domain/logInCredentials\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { TokenRequestTwoFactor } from \"../models/request/identityToken/tokenRequestTwoFactor\";\nimport { PreloginRequest } from \"../models/request/preloginRequest\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\nimport { AuthRequestPushNotification } from \"../models/response/notificationResponse\";\n\nconst sessionTimeoutLength = 2 * 60 * 1000; // 2 minutes\n\nexport class AuthService implements AuthServiceAbstraction {\n get email(): string {\n return this.logInStrategy instanceof PasswordLogInStrategy ? this.logInStrategy.email : null;\n }\n\n get masterPasswordHash(): string {\n return this.logInStrategy instanceof PasswordLogInStrategy\n ? this.logInStrategy.masterPasswordHash\n : null;\n }\n\n private logInStrategy:\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: TokenRequestTwoFactor,\n captchaResponse: string\n ): Promise {\n if (this.logInStrategy == null) {\n throw new Error(this.i18nService.t(\"sessionTimeout\"));\n }\n\n try {\n const result = await this.logInStrategy.logInTwoFactor(twoFactor, captchaResponse);\n\n // Only clear state if 2FA token has been accepted, otherwise we need to be able to try again\n if (!result.requiresTwoFactor && !result.requiresCaptcha) {\n this.clearState();\n }\n return result;\n } catch (e) {\n // API exceptions are okay, but if there are any unhandled client-side errors then clear state to be safe\n if (!(e instanceof ErrorResponse)) {\n this.clearState();\n }\n throw e;\n }\n }\n\n logOut(callback: () => void) {\n callback();\n this.messagingService.send(\"loggedOut\");\n }\n\n authingWithApiKey(): boolean {\n return this.logInStrategy instanceof ApiLogInStrategy;\n }\n\n authingWithSso(): boolean {\n return this.logInStrategy instanceof SsoLogInStrategy;\n }\n\n authingWithPassword(): boolean {\n return this.logInStrategy instanceof PasswordLogInStrategy;\n }\n\n async 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/cipherData\";\nimport { FolderData } from \"../../models/data/folderData\";\nimport { Folder } from \"../../models/domain/folder\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetricCryptoKey\";\nimport { FolderView } from \"../../models/view/folderView\";\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 \"@bitwarden/common/abstractions/api.service\";\nimport { FolderApiServiceAbstraction } from \"@bitwarden/common/abstractions/folder/folder-api.service.abstraction\";\nimport { InternalFolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { FolderData } from \"@bitwarden/common/models/data/folderData\";\nimport { Folder } from \"@bitwarden/common/models/domain/folder\";\nimport { FolderRequest } from \"@bitwarden/common/models/request/folderRequest\";\nimport { FolderResponse } from \"@bitwarden/common/models/response/folderResponse\";\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 as AccountApiServiceAbstraction } from \"@bitwarden/common/abstractions/account/account-api.service.abstraction\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/models/request/secretVerificationRequest\";\n\nexport class AccountApiService implements AccountApiServiceAbstraction {\n constructor(private apiService: ApiService) {}\n\n deleteAccount(request: SecretVerificationRequest): Promise {\n return this.apiService.send(\"DELETE\", \"/accounts\", request, true, false);\n }\n}\n","import { AccountApiService } from \"@bitwarden/common/abstractions/account/account-api.service.abstraction\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\n\nimport { AccountService as AccountServiceAbstraction } from \"../../abstractions/account/account.service.abstraction\";\nimport { Verification } from \"../../types/verification\";\n\nexport class AccountService implements AccountServiceAbstraction {\n constructor(\n private accountApiService: AccountApiService,\n private userVerificationService: UserVerificationService,\n private messagingService: MessagingService,\n private logService: LogService\n ) {}\n\n async delete(verification: Verification): Promise {\n try {\n const verificationRequest = await this.userVerificationService.buildRequest(verification);\n await this.accountApiService.deleteAccount(verificationRequest);\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/collectionData\";\nimport { Collection } from \"../models/domain/collection\";\nimport { TreeNode } from \"../models/domain/treeNode\";\nimport { CollectionView } from \"../models/view/collectionView\";\n\nconst NestingDelimiter = \"/\";\n\nexport class CollectionService implements CollectionServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private stateService: StateService\n ) {}\n\n async clearCache(userId?: string): Promise {\n await this.stateService.setDecryptedCollections(null, { userId: userId });\n }\n\n async encrypt(model: CollectionView): Promise {\n if (model.organizationId == null) {\n throw new Error(\"Collection has no organization id.\");\n }\n const key = await this.cryptoService.getOrgKey(model.organizationId);\n if (key == null) {\n throw new Error(\"No key for this collection's organization.\");\n }\n const collection = new Collection();\n collection.id = model.id;\n collection.organizationId = model.organizationId;\n collection.readOnly = model.readOnly;\n collection.name = await this.cryptoService.encrypt(model.name, key);\n return collection;\n }\n\n async decryptMany(collections: Collection[]): Promise {\n if (collections == null) {\n return [];\n }\n const decCollections: CollectionView[] = [];\n const promises: Promise[] = [];\n collections.forEach((collection) => {\n promises.push(collection.decrypt().then((c) => decCollections.push(c)));\n });\n await Promise.all(promises);\n return decCollections.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n\n async get(id: string): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n // eslint-disable-next-line\n if (collections == null || !collections.hasOwnProperty(id)) {\n return null;\n }\n\n return new Collection(collections[id]);\n }\n\n async getAll(): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n const response: Collection[] = [];\n for (const id in collections) {\n // eslint-disable-next-line\n if (collections.hasOwnProperty(id)) {\n response.push(new Collection(collections[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n let decryptedCollections = await this.stateService.getDecryptedCollections();\n if (decryptedCollections != null) {\n return decryptedCollections;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const collections = await this.getAll();\n decryptedCollections = await this.decryptMany(collections);\n\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/environmentUrls\";\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/setKeyConnectorKeyRequest\";\nimport { AttachmentRequest } from \"../models/request/attachmentRequest\";\nimport { BitPayInvoiceRequest } from \"../models/request/bitPayInvoiceRequest\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipherBulkDeleteRequest\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipherBulkMoveRequest\";\nimport { CipherBulkShareRequest } from \"../models/request/cipherBulkShareRequest\";\nimport { CipherCollectionsRequest } from \"../models/request/cipherCollectionsRequest\";\nimport { CipherCreateRequest } from \"../models/request/cipherCreateRequest\";\nimport { CipherRequest } from \"../models/request/cipherRequest\";\nimport { CipherShareRequest } from \"../models/request/cipherShareRequest\";\nimport { CollectionRequest } from \"../models/request/collectionRequest\";\nimport { DeleteRecoverRequest } from \"../models/request/deleteRecoverRequest\";\nimport { DeviceRequest } from \"../models/request/deviceRequest\";\nimport { DeviceVerificationRequest } from \"../models/request/deviceVerificationRequest\";\nimport { EmailRequest } from \"../models/request/emailRequest\";\nimport { EmailTokenRequest } from \"../models/request/emailTokenRequest\";\nimport { EmergencyAccessAcceptRequest } from \"../models/request/emergencyAccessAcceptRequest\";\nimport { EmergencyAccessConfirmRequest } from \"../models/request/emergencyAccessConfirmRequest\";\nimport { EmergencyAccessInviteRequest } from \"../models/request/emergencyAccessInviteRequest\";\nimport { EmergencyAccessPasswordRequest } from \"../models/request/emergencyAccessPasswordRequest\";\nimport { EmergencyAccessUpdateRequest } from \"../models/request/emergencyAccessUpdateRequest\";\nimport { EventRequest } from \"../models/request/eventRequest\";\nimport { GroupRequest } from \"../models/request/groupRequest\";\nimport { IapCheckRequest } from \"../models/request/iapCheckRequest\";\nimport { ApiTokenRequest } from \"../models/request/identityToken/apiTokenRequest\";\nimport { PasswordTokenRequest } from \"../models/request/identityToken/passwordTokenRequest\";\nimport { SsoTokenRequest } from \"../models/request/identityToken/ssoTokenRequest\";\nimport { TokenRequestTwoFactor } from \"../models/request/identityToken/tokenRequestTwoFactor\";\nimport { ImportCiphersRequest } from \"../models/request/importCiphersRequest\";\nimport { ImportOrganizationCiphersRequest } from \"../models/request/importOrganizationCiphersRequest\";\nimport { KdfRequest } from \"../models/request/kdfRequest\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/keyConnectorUserKeyRequest\";\nimport { KeysRequest } from \"../models/request/keysRequest\";\nimport { OrganizationSponsorshipCreateRequest } from \"../models/request/organization/organizationSponsorshipCreateRequest\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../models/request/organization/organizationSponsorshipRedeemRequest\";\nimport { OrganizationConnectionRequest } from \"../models/request/organizationConnectionRequest\";\nimport { OrganizationImportRequest } from \"../models/request/organizationImportRequest\";\nimport { OrganizationUserAcceptRequest } from \"../models/request/organizationUserAcceptRequest\";\nimport { OrganizationUserBulkConfirmRequest } from \"../models/request/organizationUserBulkConfirmRequest\";\nimport { OrganizationUserBulkRequest } from \"../models/request/organizationUserBulkRequest\";\nimport { OrganizationUserConfirmRequest } from \"../models/request/organizationUserConfirmRequest\";\nimport { OrganizationUserInviteRequest } from \"../models/request/organizationUserInviteRequest\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"../models/request/organizationUserResetPasswordEnrollmentRequest\";\nimport { OrganizationUserResetPasswordRequest } from \"../models/request/organizationUserResetPasswordRequest\";\nimport { OrganizationUserUpdateGroupsRequest } from \"../models/request/organizationUserUpdateGroupsRequest\";\nimport { OrganizationUserUpdateRequest } from \"../models/request/organizationUserUpdateRequest\";\nimport { PasswordHintRequest } from \"../models/request/passwordHintRequest\";\nimport { PasswordRequest } from \"../models/request/passwordRequest\";\nimport { PasswordlessCreateAuthRequest } from \"../models/request/passwordlessCreateAuthRequest\";\nimport { PaymentRequest } from \"../models/request/paymentRequest\";\nimport { PreloginRequest } from \"../models/request/preloginRequest\";\nimport { ProviderAddOrganizationRequest } from \"../models/request/provider/providerAddOrganizationRequest\";\nimport { ProviderOrganizationCreateRequest } from \"../models/request/provider/providerOrganizationCreateRequest\";\nimport { ProviderSetupRequest } from \"../models/request/provider/providerSetupRequest\";\nimport { ProviderUpdateRequest } from \"../models/request/provider/providerUpdateRequest\";\nimport { ProviderUserAcceptRequest } from \"../models/request/provider/providerUserAcceptRequest\";\nimport { ProviderUserBulkConfirmRequest } from \"../models/request/provider/providerUserBulkConfirmRequest\";\nimport { ProviderUserBulkRequest } from \"../models/request/provider/providerUserBulkRequest\";\nimport { ProviderUserConfirmRequest } from \"../models/request/provider/providerUserConfirmRequest\";\nimport { ProviderUserInviteRequest } from \"../models/request/provider/providerUserInviteRequest\";\nimport { ProviderUserUpdateRequest } from \"../models/request/provider/providerUserUpdateRequest\";\nimport { RegisterRequest } from \"../models/request/registerRequest\";\nimport { SecretVerificationRequest } from \"../models/request/secretVerificationRequest\";\nimport { SelectionReadOnlyRequest } from \"../models/request/selectionReadOnlyRequest\";\nimport { SendAccessRequest } from \"../models/request/sendAccessRequest\";\nimport { SendRequest } from \"../models/request/sendRequest\";\nimport { SetPasswordRequest } from \"../models/request/setPasswordRequest\";\nimport { StorageRequest } from \"../models/request/storageRequest\";\nimport { TaxInfoUpdateRequest } from \"../models/request/taxInfoUpdateRequest\";\nimport { TwoFactorEmailRequest } from \"../models/request/twoFactorEmailRequest\";\nimport { TwoFactorProviderRequest } from \"../models/request/twoFactorProviderRequest\";\nimport { TwoFactorRecoveryRequest } from \"../models/request/twoFactorRecoveryRequest\";\nimport { UpdateDomainsRequest } from \"../models/request/updateDomainsRequest\";\nimport { UpdateKeyRequest } from \"../models/request/updateKeyRequest\";\nimport { UpdateProfileRequest } from \"../models/request/updateProfileRequest\";\nimport { UpdateTempPasswordRequest } from \"../models/request/updateTempPasswordRequest\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../models/request/updateTwoFactorAuthenticatorRequest\";\nimport { UpdateTwoFactorDuoRequest } from \"../models/request/updateTwoFactorDuoRequest\";\nimport { UpdateTwoFactorEmailRequest } from \"../models/request/updateTwoFactorEmailRequest\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../models/request/updateTwoFactorWebAuthnDeleteRequest\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../models/request/updateTwoFactorWebAuthnRequest\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../models/request/updateTwoFactorYubioOtpRequest\";\nimport { VerifyDeleteRecoverRequest } from \"../models/request/verifyDeleteRecoverRequest\";\nimport { VerifyEmailRequest } from \"../models/request/verifyEmailRequest\";\nimport { ApiKeyResponse } from \"../models/response/apiKeyResponse\";\nimport { AttachmentResponse } from \"../models/response/attachmentResponse\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachmentUploadDataResponse\";\nimport { AuthRequestResponse } from \"../models/response/authRequestResponse\";\nimport { RegisterResponse } from \"../models/response/authentication/registerResponse\";\nimport { BillingHistoryResponse } from \"../models/response/billingHistoryResponse\";\nimport { BillingPaymentResponse } from \"../models/response/billingPaymentResponse\";\nimport { BreachAccountResponse } from \"../models/response/breachAccountResponse\";\nimport { CipherResponse } from \"../models/response/cipherResponse\";\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from \"../models/response/collectionResponse\";\nimport { DeviceVerificationResponse } from \"../models/response/deviceVerificationResponse\";\nimport { DomainsResponse } from \"../models/response/domainsResponse\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse,\n} from \"../models/response/emergencyAccessResponse\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\nimport { EventResponse } from \"../models/response/eventResponse\";\nimport { GroupDetailsResponse, GroupResponse } from \"../models/response/groupResponse\";\nimport { IdentityCaptchaResponse } from \"../models/response/identityCaptchaResponse\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identityTwoFactorResponse\";\nimport { KeyConnectorUserKeyResponse } from \"../models/response/keyConnectorUserKeyResponse\";\nimport { ListResponse } from \"../models/response/listResponse\";\nimport {\n OrganizationConnectionConfigApis,\n OrganizationConnectionResponse,\n} from \"../models/response/organizationConnectionResponse\";\nimport { OrganizationExportResponse } from \"../models/response/organizationExportResponse\";\nimport { OrganizationSponsorshipSyncStatusResponse } from \"../models/response/organizationSponsorshipSyncStatusResponse\";\nimport { OrganizationUserBulkPublicKeyResponse } from \"../models/response/organizationUserBulkPublicKeyResponse\";\nimport { OrganizationUserBulkResponse } from \"../models/response/organizationUserBulkResponse\";\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n OrganizationUserUserDetailsResponse,\n} from \"../models/response/organizationUserResponse\";\nimport { PaymentResponse } from \"../models/response/paymentResponse\";\nimport { PlanResponse } from \"../models/response/planResponse\";\nimport { PolicyResponse } from \"../models/response/policyResponse\";\nimport { PreloginResponse } from \"../models/response/preloginResponse\";\nimport { ProfileResponse } from \"../models/response/profileResponse\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../models/response/provider/providerOrganizationResponse\";\nimport { ProviderResponse } from \"../models/response/provider/providerResponse\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../models/response/provider/providerUserBulkPublicKeyResponse\";\nimport { ProviderUserBulkResponse } from \"../models/response/provider/providerUserBulkResponse\";\nimport {\n ProviderUserResponse,\n ProviderUserUserDetailsResponse,\n} from \"../models/response/provider/providerUserResponse\";\nimport { SelectionReadOnlyResponse } from \"../models/response/selectionReadOnlyResponse\";\nimport { SendAccessResponse } from \"../models/response/sendAccessResponse\";\nimport { SendFileDownloadDataResponse } from \"../models/response/sendFileDownloadDataResponse\";\nimport { SendFileUploadDataResponse } from \"../models/response/sendFileUploadDataResponse\";\nimport { SendResponse } from \"../models/response/sendResponse\";\nimport { SsoPreValidateResponse } from \"../models/response/ssoPreValidateResponse\";\nimport { SubscriptionResponse } from \"../models/response/subscriptionResponse\";\nimport { SyncResponse } from \"../models/response/syncResponse\";\nimport { TaxInfoResponse } from \"../models/response/taxInfoResponse\";\nimport { TaxRateResponse } from \"../models/response/taxRateResponse\";\nimport { TwoFactorAuthenticatorResponse } from \"../models/response/twoFactorAuthenticatorResponse\";\nimport { TwoFactorDuoResponse } from \"../models/response/twoFactorDuoResponse\";\nimport { TwoFactorEmailResponse } from \"../models/response/twoFactorEmailResponse\";\nimport { TwoFactorProviderResponse } from \"../models/response/twoFactorProviderResponse\";\nimport { TwoFactorRecoverResponse } from \"../models/response/twoFactorRescoverResponse\";\nimport {\n TwoFactorWebAuthnResponse,\n ChallengeResponse,\n} from \"../models/response/twoFactorWebAuthnResponse\";\nimport { TwoFactorYubiKeyResponse } from \"../models/response/twoFactorYubiKeyResponse\";\nimport { UserKeyResponse } from \"../models/response/userKeyResponse\";\nimport { SendAccessView } from \"../models/view/sendAccessView\";\n\nexport class ApiService implements ApiServiceAbstraction {\n private device: DeviceType;\n private deviceType: string;\n private isWebClient = false;\n private isDesktopClient = false;\n\n constructor(\n private tokenService: TokenService,\n private platformUtilsService: PlatformUtilsService,\n private environmentService: EnvironmentService,\n private appIdService: AppIdService,\n private logoutCallback: (expired: boolean) => Promise,\n private customUserAgent: string = null\n ) {\n this.device = platformUtilsService.getDevice();\n this.deviceType = this.device.toString();\n this.isWebClient =\n this.device === DeviceType.IEBrowser ||\n this.device === DeviceType.ChromeBrowser ||\n this.device === DeviceType.EdgeBrowser ||\n this.device === DeviceType.FirefoxBrowser ||\n this.device === DeviceType.OperaBrowser ||\n this.device === DeviceType.SafariBrowser ||\n this.device === DeviceType.UnknownBrowser ||\n this.device === DeviceType.VivaldiBrowser;\n this.isDesktopClient =\n this.device === DeviceType.WindowsDesktop ||\n this.device === DeviceType.MacOsDesktop ||\n this.device === DeviceType.LinuxDesktop;\n }\n\n // Auth APIs\n\n async postIdentityToken(\n request: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest\n ): Promise {\n const headers = new Headers({\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n request.alterIdentityTokenHeaders(headers);\n\n const identityToken =\n request instanceof ApiTokenRequest\n ? request.toIdentityToken()\n : request.toIdentityToken(this.platformUtilsService.getClientType());\n\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + \"/connect/token\", {\n body: this.qsStringify(identityToken),\n credentials: this.getCredentials(),\n cache: \"no-store\",\n headers: headers,\n method: \"POST\",\n })\n );\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n }\n\n if (responseJson != null) {\n if (response.status === 200) {\n return new IdentityTokenResponse(responseJson);\n } else if (\n response.status === 400 &&\n responseJson.TwoFactorProviders2 &&\n Object.keys(responseJson.TwoFactorProviders2).length\n ) {\n await this.tokenService.clearTwoFactorToken();\n return new IdentityTwoFactorResponse(responseJson);\n } else if (\n response.status === 400 &&\n responseJson.HCaptcha_SiteKey &&\n Object.keys(responseJson.HCaptcha_SiteKey).length\n ) {\n return new IdentityCaptchaResponse(responseJson);\n }\n }\n\n return Promise.reject(new ErrorResponse(responseJson, response.status, true));\n }\n\n async refreshIdentityToken(): Promise {\n try {\n await this.doAuthRefresh();\n } catch (e) {\n return Promise.reject(null);\n }\n }\n\n 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.platformUtilsService.isDev()\n ? this.environmentService.getIdentityUrl()\n : this.environmentService.getApiUrl()\n );\n return new PreloginResponse(r);\n }\n\n postEmailToken(request: EmailTokenRequest): Promise {\n return this.send(\"POST\", \"/accounts/email-token\", request, true, false);\n }\n\n postEmail(request: EmailRequest): Promise {\n return this.send(\"POST\", \"/accounts/email\", request, true, false);\n }\n\n postPassword(request: PasswordRequest): Promise {\n return this.send(\"POST\", \"/accounts/password\", request, true, false);\n }\n\n setPassword(request: SetPasswordRequest): Promise {\n return this.send(\"POST\", \"/accounts/set-password\", request, true, false);\n }\n\n postSetKeyConnectorKey(request: SetKeyConnectorKeyRequest): Promise {\n return this.send(\"POST\", \"/accounts/set-key-connector-key\", request, true, false);\n }\n\n postSecurityStamp(request: SecretVerificationRequest): Promise {\n return this.send(\"POST\", \"/accounts/security-stamp\", request, true, false);\n }\n\n 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.platformUtilsService.isDev()\n ? this.environmentService.getIdentityUrl()\n : this.environmentService.getApiUrl()\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 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 // 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.getApplicationVersion()\n );\n return this.nativeFetch(request);\n }\n\n nativeFetch(request: Request): Promise {\n return fetch(request);\n }\n\n async preValidateSso(identifier: string): Promise {\n if (identifier == null || identifier === \"\") {\n throw new Error(\"Organization Identifier was not provided.\");\n }\n const headers = new Headers({\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const path = `/account/prevalidate?domainHint=${encodeURIComponent(identifier)}`;\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + path, {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n headers: headers,\n method: \"GET\",\n })\n );\n\n if (response.status === 200) {\n 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 TokenRequestTwoFactor(),\n deviceRequest\n );\n\n const response = await this.postIdentityToken(tokenRequest);\n if (!(response instanceof IdentityTokenResponse)) {\n throw new Error(\"Invalid response received when refreshing api token\");\n }\n\n await this.tokenService.setToken(response.accessToken);\n }\n\n 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 if (\n authed &&\n ((tokenError && response.status === 400) ||\n response.status === 401 ||\n response.status === 403)\n ) {\n await this.logoutCallback(true);\n return null;\n }\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n } else if (this.isTextResponse(response)) {\n responseJson = { Message: await response.text() };\n }\n\n return new ErrorResponse(responseJson, response.status, tokenError);\n }\n\n private qsStringify(params: any): string {\n return Object.keys(params)\n .map((key) => {\n return encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]);\n })\n .join(\"&\");\n }\n\n private getCredentials(): RequestCredentials {\n if (!this.isWebClient || this.environmentService.hasBaseUrl()) {\n return \"include\";\n }\n return undefined;\n }\n\n private addEventParameters(base: string, start: string, end: string, token: string) {\n if (start != null) {\n base += \"?start=\" + start;\n }\n if (end != null) {\n base += base.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n base += \"end=\" + end;\n }\n if (token != null) {\n base += base.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n base += \"continuationToken=\" + token;\n }\n return base;\n }\n\n private isJsonResponse(response: Response): boolean {\n const typeHeader = response.headers.get(\"content-type\");\n return typeHeader != null && typeHeader.indexOf(\"application/json\") > -1;\n }\n\n private isTextResponse(response: Response): boolean {\n const typeHeader = response.headers.get(\"content-type\");\n return typeHeader != null && typeHeader.indexOf(\"text\") > -1;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { FileUploadService as FileUploadServiceAbstraction } from \"../abstractions/fileUpload.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { FileUploadType } from \"../enums/fileUploadType\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachmentUploadDataResponse\";\nimport { SendFileUploadDataResponse } from \"../models/response/sendFileUploadDataResponse\";\n\nimport { AzureFileUploadService } from \"./azureFileUpload.service\";\nimport { BitwardenFileUploadService } from \"./bitwardenFileUpload.service\";\n\nexport class FileUploadService implements FileUploadServiceAbstraction {\n private azureFileUploadService: AzureFileUploadService;\n private bitwardenFileUploadService: BitwardenFileUploadService;\n\n constructor(private logService: LogService, private apiService: ApiService) {\n this.azureFileUploadService = new AzureFileUploadService(logService);\n this.bitwardenFileUploadService = new BitwardenFileUploadService();\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 private _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/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport { Collection } from \"../models/domain/collection\";\nimport { Folder } from \"../models/domain/folder\";\nimport { CipherWithIdExport as CipherExport } from \"../models/export/cipherWithIdsExport\";\nimport { CollectionWithIdExport as CollectionExport } from \"../models/export/collectionWithIdExport\";\nimport { EventExport } from \"../models/export/eventExport\";\nimport { FolderWithIdExport as FolderExport } from \"../models/export/folderWithIdExport\";\nimport { CollectionDetailsResponse } from \"../models/response/collectionResponse\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { CollectionView } from \"../models/view/collectionView\";\nimport { EventView } from \"../models/view/eventView\";\nimport { FolderView } from \"../models/view/folderView\";\n\nexport class ExportService implements ExportServiceAbstraction {\n constructor(\n private folderService: FolderService,\n private cipherService: CipherService,\n private apiService: ApiService,\n private cryptoService: CryptoService,\n private cryptoFunctionService: CryptoFunctionService\n ) {}\n\n async getExport(format: ExportFormat = \"csv\", organizationId?: string): Promise {\n if (organizationId) {\n return await this.getOrganizationExport(organizationId, format);\n }\n\n if (format === \"encrypted_json\") {\n return this.getEncryptedExport();\n } else {\n return this.getDecryptedExport(format);\n }\n }\n\n async getPasswordProtectedExport(password: string, organizationId?: string): Promise {\n const clearText = organizationId\n ? await this.getOrganizationExport(organizationId, \"json\")\n : await this.getExport(\"json\");\n\n const salt = Utils.fromBufferToB64(await this.cryptoFunctionService.randomBytes(16));\n const kdfIterations = DEFAULT_KDF_ITERATIONS;\n const key = await this.cryptoService.makePinKey(\n password,\n salt,\n KdfType.PBKDF2_SHA256,\n kdfIterations\n );\n\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid(), key);\n const encText = await this.cryptoService.encrypt(clearText, key);\n\n const jsonDoc: any = {\n encrypted: true,\n passwordProtected: true,\n salt: salt,\n kdfIterations: kdfIterations,\n kdfType: KdfType.PBKDF2_SHA256,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n data: encText.encryptedString,\n };\n\n return JSON.stringify(jsonDoc, null, \" \");\n }\n\n async getOrganizationExport(\n organizationId: string,\n format: ExportFormat = \"csv\"\n ): Promise {\n if (format === \"encrypted_json\") {\n return this.getOrganizationEncryptedExport(organizationId);\n } else {\n return this.getOrganizationDecryptedExport(organizationId, format);\n }\n }\n\n async getEventExport(events: EventView[]): Promise {\n return papa.unparse(events.map((e) => new 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/notificationResponse\";\n\nexport class NotificationsService implements NotificationsServiceAbstraction {\n private signalrConnection: signalR.HubConnection;\n private url: string;\n private connected = false;\n private inited = false;\n private inactive = false;\n private reconnectTimer: any = null;\n\n constructor(\n private syncService: SyncService,\n private appIdService: AppIdService,\n private apiService: ApiService,\n private 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/decryptParameters\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\n\nexport class WebCryptoFunctionService implements CryptoFunctionService {\n private crypto: Crypto;\n private subtle: SubtleCrypto;\n\n constructor(win: Window | 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 { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EncString } from \"@bitwarden/common/models/domain/encString\";\nimport { EncryptedObject } from \"@bitwarden/common/models/domain/encryptedObject\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\n\nimport { AbstractEncryptService } from \"../abstractions/abstractEncrypt.service\";\nimport { EncryptionType } from \"../enums/encryptionType\";\nimport { IEncrypted } from \"../interfaces/IEncrypted\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\n\nexport class EncryptService implements AbstractEncryptService {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private logService: LogService,\n private 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 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 { ApiService } from \"../abstractions/api.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { EventService as EventServiceAbstraction } from \"../abstractions/event.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { OrganizationService } from \"../abstractions/organization.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { EventType } from \"../enums/eventType\";\nimport { EventData } from \"../models/data/eventData\";\nimport { EventRequest } from \"../models/request/eventRequest\";\n\nexport class EventService implements EventServiceAbstraction {\n private inited = false;\n\n constructor(\n private apiService: ApiService,\n private cipherService: CipherService,\n private stateService: StateService,\n private logService: LogService,\n private organizationService: OrganizationService\n ) {}\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.uploadEvents();\n setInterval(() => this.uploadEvents(), 60 * 1000); // check every 60 seconds\n }\n }\n\n async collect(\n eventType: EventType,\n cipherId: string = null,\n uploadImmediately = false,\n 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 { OrganizationService } from \"../../abstractions/organization.service\";\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 { PolicyData } from \"../../models/data/policyData\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/masterPasswordPolicyOptions\";\nimport { Organization } from \"../../models/domain/organization\";\nimport { Policy } from \"../../models/domain/policy\";\nimport { ResetPasswordPolicyOptions } from \"../../models/domain/resetPasswordPolicyOptions\";\nimport { ListResponse } from \"../../models/response/listResponse\";\nimport { PolicyResponse } from \"../../models/response/policyResponse\";\n\nexport class PolicyService implements InternalPolicyServiceAbstraction {\n policyCache: Policy[];\n\n constructor(\n private stateService: StateService,\n private organizationService: OrganizationService\n ) {}\n\n async getAll(type?: PolicyType, userId?: string): Promise {\n let response: Policy[] = [];\n const decryptedPolicies = await this.stateService.getDecryptedPolicies({ userId: userId });\n if (decryptedPolicies != null) {\n response = decryptedPolicies;\n } else {\n const diskPolicies = await this.stateService.getEncryptedPolicies({ userId: userId });\n for (const id in diskPolicies) {\n // eslint-disable-next-line\n if (diskPolicies.hasOwnProperty(id)) {\n response.push(new Policy(diskPolicies[id]));\n }\n }\n await this.stateService.setDecryptedPolicies(response, { userId: userId });\n }\n if (type != null) {\n return response.filter((policy) => policy.type === type);\n } else {\n return response;\n }\n }\n\n async getMasterPasswordPolicyOptions(policies?: Policy[]): Promise {\n let enforcedOptions: MasterPasswordPolicyOptions = null;\n\n if (policies == null) {\n policies = await this.getAll(PolicyType.MasterPassword);\n } else {\n policies = policies.filter((p) => p.type === PolicyType.MasterPassword);\n }\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach((currentPolicy) => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new MasterPasswordPolicyOptions();\n }\n\n if (\n currentPolicy.data.minComplexity != null &&\n currentPolicy.data.minComplexity > enforcedOptions.minComplexity\n ) {\n enforcedOptions.minComplexity = currentPolicy.data.minComplexity;\n }\n\n if (\n currentPolicy.data.minLength != null &&\n currentPolicy.data.minLength > enforcedOptions.minLength\n ) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.requireUpper) {\n enforcedOptions.requireUpper = true;\n }\n\n if (currentPolicy.data.requireLower) {\n enforcedOptions.requireLower = true;\n }\n\n if (currentPolicy.data.requireNumbers) {\n enforcedOptions.requireNumbers = true;\n }\n\n if (currentPolicy.data.requireSpecial) {\n enforcedOptions.requireSpecial = true;\n }\n });\n\n return enforcedOptions;\n }\n\n evaluateMasterPassword(\n passwordStrength: number,\n newPassword: string,\n enforcedPolicyOptions: MasterPasswordPolicyOptions\n ): boolean {\n if (enforcedPolicyOptions == null) {\n return true;\n }\n\n if (\n enforcedPolicyOptions.minComplexity > 0 &&\n enforcedPolicyOptions.minComplexity > passwordStrength\n ) {\n return false;\n }\n\n if (\n enforcedPolicyOptions.minLength > 0 &&\n enforcedPolicyOptions.minLength > newPassword.length\n ) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireUpper && newPassword.toLocaleLowerCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireLower && newPassword.toLocaleUpperCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireNumbers && !/[0-9]/.test(newPassword)) {\n return false;\n }\n\n // eslint-disable-next-line\n if (enforcedPolicyOptions.requireSpecial && !/[!@#$%\\^&*]/g.test(newPassword)) {\n return false;\n }\n\n return true;\n }\n\n getResetPasswordPolicyOptions(\n policies: Policy[],\n orgId: string\n ): [ResetPasswordPolicyOptions, boolean] {\n const resetPasswordPolicyOptions = new ResetPasswordPolicyOptions();\n\n if (policies == null || orgId == null) {\n return [resetPasswordPolicyOptions, false];\n }\n\n const policy = policies.find(\n (p) => p.organizationId === orgId && p.type === PolicyType.ResetPassword && p.enabled\n );\n resetPasswordPolicyOptions.autoEnrollEnabled = policy?.data?.autoEnrollEnabled ?? false;\n\n return [resetPasswordPolicyOptions, policy?.enabled ?? false];\n }\n\n mapPoliciesFromToken(policiesResponse: ListResponse): Policy[] {\n if (policiesResponse == null || policiesResponse.data == null) {\n return null;\n }\n\n const policiesData = policiesResponse.data.map((p) => new PolicyData(p));\n return policiesData.map((p) => new Policy(p));\n }\n\n async policyAppliesToUser(\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean,\n userId?: string\n ) {\n const policies = await this.getAll(policyType, userId);\n const organizations = await this.organizationService.getAll(userId);\n let filteredPolicies;\n\n if (policyFilter != null) {\n filteredPolicies = policies.filter((p) => p.enabled && policyFilter(p));\n } else {\n filteredPolicies = policies.filter((p) => p.enabled);\n }\n\n const policySet = new Set(filteredPolicies.map((p) => p.organizationId));\n\n return organizations.some(\n (o) =>\n o.enabled &&\n o.status >= OrganizationUserStatusType.Accepted &&\n o.usePolicies &&\n !this.isExcemptFromPolicies(o, policyType) &&\n policySet.has(o.id)\n );\n }\n\n 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.stateService.setDecryptedPolicies(null);\n await this.stateService.setEncryptedPolicies(policies);\n }\n\n async replace(policies: { [id: string]: PolicyData }): Promise {\n await this.stateService.setDecryptedPolicies(null);\n await this.stateService.setEncryptedPolicies(policies);\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setDecryptedPolicies(null, { userId: userId });\n await this.stateService.setEncryptedPolicies(null, { userId: userId });\n }\n\n private isExcemptFromPolicies(organization: Organization, policyType: PolicyType) {\n if (policyType === PolicyType.MaximumVaultTimeout) {\n return organization.type === OrganizationUserType.Owner;\n }\n\n return organization.isExemptFromPolicies;\n }\n}\n","import { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { InternalPolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { PolicyData } from \"@bitwarden/common/models/data/policyData\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/masterPasswordPolicyOptions\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { PolicyRequest } from \"@bitwarden/common/models/request/policyRequest\";\nimport { ListResponse } from \"@bitwarden/common/models/response/listResponse\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policyResponse\";\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 getPolicyForOrganization(policyType: PolicyType, organizationId: string): Promise {\n const org = await this.organizationService.get(organizationId);\n if (org?.isProviderUser) {\n const orgPolicies = await this.getPolicies(organizationId);\n const policy = orgPolicies.data.find((p) => p.organizationId === organizationId);\n\n if (policy == null) {\n return null;\n }\n\n return new Policy(new PolicyData(policy));\n }\n\n const policies = await this.policyService.getAll(policyType);\n return policies.find((p) => p.organizationId === organizationId);\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 this.policyService.getMasterPasswordPolicyOptions(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/sendData\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { Send } from \"../models/domain/send\";\nimport { SendFile } from \"../models/domain/sendFile\";\nimport { SendText } from \"../models/domain/sendText\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { SendRequest } from \"../models/request/sendRequest\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\nimport { SendResponse } from \"../models/response/sendResponse\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport class SendService implements SendServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private apiService: ApiService,\n private fileUploadService: FileUploadService,\n private i18nService: I18nService,\n private cryptoFunctionService: CryptoFunctionService,\n private stateService: StateService\n ) {}\n\n async clearCache(): Promise {\n await this.stateService.setDecryptedSends(null);\n }\n\n async encrypt(\n model: SendView,\n file: File | ArrayBuffer,\n password: string,\n key?: SymmetricCryptoKey\n ): Promise<[Send, EncArrayBuffer]> {\n let fileData: EncArrayBuffer = null;\n const send = new Send();\n send.id = model.id;\n send.type = model.type;\n send.disabled = model.disabled;\n send.hideEmail = model.hideEmail;\n send.maxAccessCount = model.maxAccessCount;\n if (model.key == null) {\n model.key = await this.cryptoFunctionService.randomBytes(16);\n model.cryptoKey = await this.cryptoService.makeSendKey(model.key);\n }\n if (password != null) {\n const passwordHash = await this.cryptoFunctionService.pbkdf2(\n password,\n model.key,\n \"sha256\",\n SEND_KDF_ITERATIONS\n );\n send.password = Utils.fromBufferToB64(passwordHash);\n }\n send.key = await this.cryptoService.encrypt(model.key, key);\n send.name = await this.cryptoService.encrypt(model.name, model.cryptoKey);\n send.notes = await this.cryptoService.encrypt(model.notes, model.cryptoKey);\n if (send.type === SendType.Text) {\n send.text = new SendText();\n send.text.text = await this.cryptoService.encrypt(model.text.text, model.cryptoKey);\n send.text.hidden = model.text.hidden;\n } else if (send.type === SendType.File) {\n send.file = new SendFile();\n if (file != null) {\n if (file instanceof ArrayBuffer) {\n const [name, data] = await this.encryptFileData(\n model.file.fileName,\n file,\n model.cryptoKey\n );\n send.file.fileName = name;\n fileData = data;\n } else {\n fileData = await this.parseFile(send, file, model.cryptoKey);\n }\n }\n }\n\n return [send, fileData];\n }\n\n async get(id: string): Promise {\n const sends = await this.stateService.getEncryptedSends();\n // eslint-disable-next-line\n if (sends == null || !sends.hasOwnProperty(id)) {\n return null;\n }\n\n return new Send(sends[id]);\n }\n\n async getAll(): Promise {\n const sends = await this.stateService.getEncryptedSends();\n const response: Send[] = [];\n for (const id in sends) {\n // eslint-disable-next-line\n if (sends.hasOwnProperty(id)) {\n response.push(new Send(sends[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n let decSends = await this.stateService.getDecryptedSends();\n if (decSends != null) {\n return decSends;\n }\n\n decSends = [];\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const promises: Promise[] = [];\n const sends = await this.getAll();\n sends.forEach((send) => {\n promises.push(send.decrypt().then((f) => decSends.push(f)));\n });\n\n await Promise.all(promises);\n decSends.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n\n await this.stateService.setDecryptedSends(decSends);\n return decSends;\n }\n\n async saveWithServer(sendData: [Send, EncArrayBuffer]): Promise {\n const request = new SendRequest(sendData[0], sendData[1]?.buffer.byteLength);\n let response: SendResponse;\n if (sendData[0].id == null) {\n if (sendData[0].type === SendType.Text) {\n response = await this.apiService.postSend(request);\n } else {\n try {\n const uploadDataResponse = await this.apiService.postFileTypeSend(request);\n response = uploadDataResponse.sendResponse;\n\n await this.fileUploadService.uploadSendFile(\n uploadDataResponse,\n sendData[0].file.fileName,\n sendData[1]\n );\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n response = await this.legacyServerSendFileUpload(sendData, request);\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n }\n sendData[0].id = response.id;\n sendData[0].accessId = response.accessId;\n } else {\n response = await this.apiService.putSend(sendData[0].id, request);\n }\n\n const 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.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { OrganizationUserType } from \"../enums/organizationUserType\";\nimport { Utils } from \"../misc/utils\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/setKeyConnectorKeyRequest\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/keyConnectorUserKeyRequest\";\nimport { KeysRequest } from \"../models/request/keysRequest\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\n\nexport class KeyConnectorService implements KeyConnectorServiceAbstraction {\n constructor(\n private stateService: StateService,\n private cryptoService: CryptoService,\n private apiService: ApiService,\n private tokenService: TokenService,\n private logService: LogService,\n private organizationService: OrganizationService,\n private cryptoFunctionService: CryptoFunctionService,\n 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/verifyOTPRequest\";\nimport { SecretVerificationRequest } from \"../../models/request/secretVerificationRequest\";\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 { OrganizationService as OrganizationServiceAbstraction } from \"../abstractions/organization.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { Organization } from \"../models/domain/organization\";\n\nexport class OrganizationService implements OrganizationServiceAbstraction {\n constructor(private stateService: StateService) {}\n\n async get(id: string): Promise {\n const organizations = await this.stateService.getOrganizations();\n // eslint-disable-next-line\n if (organizations == null || !organizations.hasOwnProperty(id)) {\n return null;\n }\n\n return new Organization(organizations[id]);\n }\n\n async getByIdentifier(identifier: string): Promise {\n const organizations = await this.getAll();\n if (organizations == null || organizations.length === 0) {\n return null;\n }\n\n return organizations.find((o) => o.identifier === identifier);\n }\n\n async getAll(userId?: string): Promise {\n const organizations = await this.stateService.getOrganizations({ userId: userId });\n const response: Organization[] = [];\n for (const id in organizations) {\n // eslint-disable-next-line\n if (organizations.hasOwnProperty(id) && !organizations[id].isProviderUser) {\n response.push(new Organization(organizations[id]));\n }\n }\n const sortedResponse = response.sort((a, b) => a.name.localeCompare(b.name));\n return sortedResponse;\n }\n\n async save(organizations: { [id: string]: OrganizationData }) {\n return await this.stateService.setOrganizations(organizations);\n }\n\n async canManageSponsorships(): Promise {\n const orgs = await this.getAll();\n return orgs.some(\n (o) => o.familySponsorshipAvailable || o.familySponsorshipFriendlyName !== null\n );\n }\n\n async hasOrganizations(userId?: string): Promise {\n const organizations = await this.getAll(userId);\n return organizations.length > 0;\n }\n}\n","import { ProviderService as ProviderServiceAbstraction } from \"../abstractions/provider.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { Provider } from \"../models/domain/provider\";\n\nexport class ProviderService implements ProviderServiceAbstraction {\n constructor(private stateService: StateService) {}\n\n async get(id: string): Promise {\n const providers = await this.stateService.getProviders();\n // eslint-disable-next-line\n if (providers == null || !providers.hasOwnProperty(id)) {\n return null;\n }\n\n return new Provider(providers[id]);\n }\n\n async getAll(): Promise {\n const providers = await this.stateService.getProviders();\n const response: Provider[] = [];\n for (const id in providers) {\n // eslint-disable-next-line\n if (providers.hasOwnProperty(id)) {\n response.push(new Provider(providers[id]));\n }\n }\n return response;\n }\n\n async save(providers: { [id: string]: ProviderData }) {\n await this.stateService.setProviders(providers);\n }\n}\n","import { 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/verifyOTPRequest\";\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 { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\nimport { ImportDirectoryRequest } from \"../../models/request/importDirectoryRequest\";\nimport { OrganizationSsoRequest } from \"../../models/request/organization/organizationSsoRequest\";\nimport { OrganizationApiKeyRequest } from \"../../models/request/organizationApiKeyRequest\";\nimport { OrganizationCreateRequest } from \"../../models/request/organizationCreateRequest\";\nimport { OrganizationKeysRequest } from \"../../models/request/organizationKeysRequest\";\nimport { OrganizationSubscriptionUpdateRequest } from \"../../models/request/organizationSubscriptionUpdateRequest\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../../models/request/organizationTaxInfoUpdateRequest\";\nimport { OrganizationUpdateRequest } from \"../../models/request/organizationUpdateRequest\";\nimport { OrganizationUpgradeRequest } from \"../../models/request/organizationUpgradeRequest\";\nimport { PaymentRequest } from \"../../models/request/paymentRequest\";\nimport { SeatRequest } from \"../../models/request/seatRequest\";\nimport { SecretVerificationRequest } from \"../../models/request/secretVerificationRequest\";\nimport { StorageRequest } from \"../../models/request/storageRequest\";\nimport { VerifyBankRequest } from \"../../models/request/verifyBankRequest\";\nimport { ApiKeyResponse } from \"../../models/response/apiKeyResponse\";\nimport { BillingResponse } from \"../../models/response/billingResponse\";\nimport { ListResponse } from \"../../models/response/listResponse\";\nimport { OrganizationSsoResponse } from \"../../models/response/organization/organizationSsoResponse\";\nimport { OrganizationApiKeyInformationResponse } from \"../../models/response/organizationApiKeyInformationResponse\";\nimport { OrganizationAutoEnrollStatusResponse } from \"../../models/response/organizationAutoEnrollStatusResponse\";\nimport { OrganizationKeysResponse } from \"../../models/response/organizationKeysResponse\";\nimport { OrganizationResponse } from \"../../models/response/organizationResponse\";\nimport { OrganizationSubscriptionResponse } from \"../../models/response/organizationSubscriptionResponse\";\nimport { PaymentResponse } from \"../../models/response/paymentResponse\";\nimport { TaxInfoResponse } from \"../../models/response/taxInfoResponse\";\n\nexport class OrganizationApiService implements OrganizationApiServiceAbstraction {\n constructor(private apiService: ApiService) {}\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 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 return new OrganizationResponse(r);\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 return 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 return this.apiService.send(\"POST\", \"/organizations/\" + id + \"/leave\", null, true, false);\n }\n\n async delete(id: string, request: SecretVerificationRequest): Promise {\n return this.apiService.send(\"DELETE\", \"/organizations/\" + id, request, true, false);\n }\n\n async updateLicense(id: string, data: FormData): Promise {\n return 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 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 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 return new OrganizationSsoResponse(r);\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 { ServerConfigData } from \"@bitwarden/common/models/data/server-config.data\";\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\";\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 \"@bitwarden/common/abstractions/api.service\";\nimport { ConfigApiServiceAbstraction as ConfigApiServiceAbstraction } from \"@bitwarden/common/abstractions/config/config-api.service.abstraction\";\nimport { ServerConfigResponse } from \"@bitwarden/common/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 {\n AbstractStorageService,\n MemoryStorageServiceInterface,\n} from \"@bitwarden/common/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 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 { 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 { EventResponse } from \"@bitwarden/common/models/response/eventResponse\";\n\n@Injectable()\nexport class EventService {\n constructor(private i18nService: I18nService, private policyService: PolicyService) {}\n\n getDefaultDateFilters() {\n const d = new Date();\n const end = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59);\n d.setDate(d.getDate() - 30);\n const start = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0);\n return [this.toDateTimeLocalString(start), this.toDateTimeLocalString(end)];\n }\n\n formatDateFilters(filterStart: string, filterEnd: string) {\n const start: Date = new Date(filterStart);\n const end: Date = new Date(filterEnd + \":59.999\");\n if (isNaN(start.getTime()) || isNaN(end.getTime()) || end < start) {\n throw new Error(\"Invalid date range.\");\n }\n return [start.toISOString(), end.toISOString()];\n }\n\n async getEventInfo(ev: EventResponse, options = new EventOptions()): Promise {\n const appInfo = this.getAppInfo(ev.deviceType);\n const { message, humanReadableMessage } = await this.getEventMessage(ev, options);\n return {\n message: message,\n humanReadableMessage: humanReadableMessage,\n appIcon: appInfo[0],\n appName: appInfo[1],\n };\n }\n\n private async getEventMessage(ev: EventResponse, options: EventOptions) {\n let msg = \"\";\n let humanReadableMsg = \"\";\n switch (ev.type) {\n // User\n case EventType.User_LoggedIn:\n msg = humanReadableMsg = this.i18nService.t(\"loggedIn\");\n break;\n case EventType.User_ChangedPassword:\n msg = humanReadableMsg = this.i18nService.t(\"changedPassword\");\n break;\n case EventType.User_Updated2fa:\n msg = humanReadableMsg = this.i18nService.t(\"enabledUpdated2fa\");\n break;\n case EventType.User_Disabled2fa:\n msg = humanReadableMsg = this.i18nService.t(\"disabled2fa\");\n break;\n case EventType.User_Recovered2fa:\n msg = humanReadableMsg = this.i18nService.t(\"recovered2fa\");\n break;\n case EventType.User_FailedLogIn:\n msg = humanReadableMsg = this.i18nService.t(\"failedLogin\");\n break;\n case EventType.User_FailedLogIn2fa:\n msg = humanReadableMsg = this.i18nService.t(\"failedLogin2fa\");\n break;\n case EventType.User_ClientExportedVault:\n msg = humanReadableMsg = this.i18nService.t(\"exportedVault\");\n break;\n case EventType.User_UpdatedTempPassword:\n msg = humanReadableMsg = this.i18nService.t(\"updatedMasterPassword\");\n break;\n case EventType.User_MigratedKeyToKeyConnector:\n msg = humanReadableMsg = this.i18nService.t(\"migratedKeyConnector\");\n break;\n // Cipher\n case EventType.Cipher_Created:\n msg = this.i18nService.t(\"createdItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"createdItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Updated:\n msg = this.i18nService.t(\"editedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"editedItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Deleted:\n msg = this.i18nService.t(\"permanentlyDeletedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"permanentlyDeletedItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_SoftDeleted:\n msg = this.i18nService.t(\"deletedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"deletedItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Restored:\n msg = this.i18nService.t(\"restoredItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"restoredItemId\", this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_AttachmentCreated:\n msg = this.i18nService.t(\"createdAttachmentForItem\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"createdAttachmentForItem\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_AttachmentDeleted:\n msg = this.i18nService.t(\"deletedAttachmentForItem\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"deletedAttachmentForItem\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_Shared:\n msg = this.i18nService.t(\"movedItemIdToOrg\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"movedItemIdToOrg\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientViewed:\n msg = this.i18nService.t(\"viewedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"viewedItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientToggledPasswordVisible:\n msg = this.i18nService.t(\"viewedPasswordItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"viewedPasswordItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientToggledHiddenFieldVisible:\n msg = this.i18nService.t(\"viewedHiddenFieldItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"viewedHiddenFieldItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientToggledCardCodeVisible:\n msg = this.i18nService.t(\"viewedSecurityCodeItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"viewedSecurityCodeItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientCopiedHiddenField:\n msg = this.i18nService.t(\"copiedHiddenFieldItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"copiedHiddenFieldItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientCopiedPassword:\n msg = this.i18nService.t(\"copiedPasswordItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"copiedPasswordItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientCopiedCardCode:\n msg = this.i18nService.t(\"copiedSecurityCodeItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"copiedSecurityCodeItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientAutofilled:\n msg = this.i18nService.t(\"autofilledItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"autofilledItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_UpdatedCollections:\n msg = this.i18nService.t(\"editedCollectionsForItem\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"editedCollectionsForItem\",\n this.getShortId(ev.cipherId)\n );\n break;\n // Collection\n case EventType.Collection_Created:\n msg = this.i18nService.t(\"createdCollectionId\", this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t(\n \"createdCollectionId\",\n this.getShortId(ev.collectionId)\n );\n break;\n case EventType.Collection_Updated:\n msg = this.i18nService.t(\"editedCollectionId\", this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t(\n \"editedCollectionId\",\n this.getShortId(ev.collectionId)\n );\n break;\n case EventType.Collection_Deleted:\n msg = this.i18nService.t(\"deletedCollectionId\", this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t(\n \"deletedCollectionId\",\n this.getShortId(ev.collectionId)\n );\n break;\n // Group\n case EventType.Group_Created:\n msg = this.i18nService.t(\"createdGroupId\", this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t(\"createdGroupId\", this.getShortId(ev.groupId));\n break;\n case EventType.Group_Updated:\n msg = this.i18nService.t(\"editedGroupId\", this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t(\"editedGroupId\", this.getShortId(ev.groupId));\n break;\n case EventType.Group_Deleted:\n msg = this.i18nService.t(\"deletedGroupId\", this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t(\"deletedGroupId\", this.getShortId(ev.groupId));\n break;\n // Org user\n case EventType.OrganizationUser_Invited:\n msg = this.i18nService.t(\"invitedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"invitedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Confirmed:\n msg = this.i18nService.t(\"confirmedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"confirmedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Updated:\n msg = this.i18nService.t(\"editedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"editedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Removed:\n msg = this.i18nService.t(\"removedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"removedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_UpdatedGroups:\n msg = this.i18nService.t(\"editedGroupsForUser\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"editedGroupsForUser\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_UnlinkedSso:\n msg = this.i18nService.t(\"unlinkedSsoUser\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"unlinkedSsoUser\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_ResetPassword_Enroll:\n msg = this.i18nService.t(\"eventEnrollPasswordReset\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventEnrollPasswordReset\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_ResetPassword_Withdraw:\n msg = this.i18nService.t(\"eventWithdrawPasswordReset\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventWithdrawPasswordReset\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_AdminResetPassword:\n msg = this.i18nService.t(\"eventAdminPasswordReset\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventAdminPasswordReset\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_ResetSsoLink:\n msg = this.i18nService.t(\"eventResetSsoLink\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventResetSsoLink\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_FirstSsoLogin:\n msg = this.i18nService.t(\"firstSsoLogin\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"firstSsoLogin\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n 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 policies = await this.policyService.getAll();\n const policy = policies.filter((p) => p.id === ev.policyId)[0];\n let p1 = this.getShortId(ev.policyId);\n if (policy != null) {\n p1 = PolicyType[policy.type];\n }\n\n humanReadableMsg = this.i18nService.t(\"modifiedPolicyId\", p1);\n break;\n }\n // Provider users:\n case EventType.ProviderUser_Invited:\n msg = this.i18nService.t(\"invitedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\"invitedUserId\", this.getShortId(ev.providerUserId));\n break;\n case EventType.ProviderUser_Confirmed:\n msg = this.i18nService.t(\"confirmedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"confirmedUserId\",\n this.getShortId(ev.providerUserId)\n );\n break;\n case EventType.ProviderUser_Updated:\n msg = this.i18nService.t(\"editedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\"editedUserId\", this.getShortId(ev.providerUserId));\n break;\n case EventType.ProviderUser_Removed:\n msg = this.i18nService.t(\"removedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\"removedUserId\", this.getShortId(ev.providerUserId));\n break;\n case EventType.ProviderOrganization_Created:\n msg = this.i18nService.t(\"createdOrganizationId\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"createdOrganizationId\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n case EventType.ProviderOrganization_Added:\n msg = this.i18nService.t(\"addedOrganizationId\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"addedOrganizationId\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n case EventType.ProviderOrganization_Removed:\n msg = this.i18nService.t(\"removedOrganizationId\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"removedOrganizationId\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n case EventType.ProviderOrganization_VaultAccessed:\n msg = this.i18nService.t(\"accessedClientVault\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"accessedClientVault\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n default:\n break;\n }\n return {\n message: msg === \"\" ? null : msg,\n humanReadableMessage: humanReadableMsg === \"\" ? null : humanReadableMsg,\n };\n }\n\n private getAppInfo(deviceType: DeviceType): [string, string] {\n switch (deviceType) {\n case DeviceType.Android:\n return [\"bwi-android\", this.i18nService.t(\"mobile\") + \" - Android\"];\n case DeviceType.iOS:\n return [\"bwi-apple\", this.i18nService.t(\"mobile\") + \" - iOS\"];\n case DeviceType.UWP:\n return [\"bwi-windows\", this.i18nService.t(\"mobile\") + \" - Windows\"];\n case DeviceType.ChromeExtension:\n return [\"bwi-chrome\", this.i18nService.t(\"extension\") + \" - Chrome\"];\n case DeviceType.FirefoxExtension:\n return [\"bwi-firefox\", this.i18nService.t(\"extension\") + \" - Firefox\"];\n case DeviceType.OperaExtension:\n return [\"bwi-opera\", this.i18nService.t(\"extension\") + \" - Opera\"];\n case DeviceType.EdgeExtension:\n return [\"bwi-edge\", this.i18nService.t(\"extension\") + \" - Edge\"];\n case DeviceType.VivaldiExtension:\n return [\"bwi-puzzle\", this.i18nService.t(\"extension\") + \" - Vivaldi\"];\n case DeviceType.SafariExtension:\n return [\"bwi-safari\", this.i18nService.t(\"extension\") + \" - Safari\"];\n case DeviceType.WindowsDesktop:\n return [\"bwi-windows\", this.i18nService.t(\"desktop\") + \" - Windows\"];\n case DeviceType.MacOsDesktop:\n return [\"bwi-apple\", this.i18nService.t(\"desktop\") + \" - macOS\"];\n case DeviceType.LinuxDesktop:\n return [\"bwi-linux\", this.i18nService.t(\"desktop\") + \" - Linux\"];\n case DeviceType.ChromeBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Chrome\"];\n case DeviceType.FirefoxBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Firefox\"];\n case DeviceType.OperaBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Opera\"];\n case DeviceType.SafariBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Safari\"];\n case DeviceType.VivaldiBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Vivaldi\"];\n case DeviceType.EdgeBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Edge\"];\n case DeviceType.IEBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - IE\"];\n case DeviceType.UnknownBrowser:\n return [\n \"bwi-globe\",\n this.i18nService.t(\"webVault\") + \" - \" + this.i18nService.t(\"unknown\"),\n ];\n default:\n return [\"bwi-globe\", this.i18nService.t(\"unknown\")];\n }\n }\n\n private formatCipherId(ev: EventResponse, options: EventOptions) {\n const shortId = this.getShortId(ev.cipherId);\n if (ev.organizationId == null || !options.cipherInfo) {\n return \"\" + shortId + \"\";\n }\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" +\n ev.organizationId +\n \"/vault?search=\" +\n shortId +\n \"&viewEvents=\" +\n ev.cipherId\n );\n return a.outerHTML;\n }\n\n private formatGroupId(ev: EventResponse) {\n const shortId = this.getShortId(ev.groupId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" + ev.organizationId + \"/manage/groups?search=\" + shortId\n );\n return a.outerHTML;\n }\n\n private formatCollectionId(ev: EventResponse) {\n const shortId = this.getShortId(ev.collectionId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" + ev.organizationId + \"/manage/collections?search=\" + shortId\n );\n return a.outerHTML;\n }\n\n private formatOrgUserId(ev: EventResponse) {\n const shortId = this.getShortId(ev.organizationUserId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" +\n ev.organizationId +\n \"/manage/people?search=\" +\n shortId +\n \"&viewEvents=\" +\n ev.organizationUserId\n );\n return a.outerHTML;\n }\n\n private formatProviderUserId(ev: EventResponse) {\n const shortId = this.getShortId(ev.providerUserId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/providers/\" +\n ev.providerId +\n \"/manage/people?search=\" +\n shortId +\n \"&viewEvents=\" +\n ev.providerUserId\n );\n return a.outerHTML;\n }\n\n private formatProviderOrganizationId(ev: EventResponse) {\n const shortId = this.getShortId(ev.providerOrganizationId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\"href\", \"#/providers/\" + ev.providerId + \"/clients?search=\" + shortId);\n return a.outerHTML;\n }\n\n private formatPolicyId(ev: EventResponse) {\n const shortId = this.getShortId(ev.policyId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" + ev.organizationId + \"/manage/policies?policyId=\" + ev.policyId\n );\n return a.outerHTML;\n }\n\n private makeAnchor(shortId: string) {\n const a = document.createElement(\"a\");\n a.title = this.i18nService.t(\"view\");\n a.innerHTML = \"\" + shortId + \"\";\n return a;\n }\n\n private getShortId(id: string) {\n return id?.substring(0, 8);\n }\n\n private toDateTimeLocalString(date: Date) {\n return (\n date.getFullYear() +\n \"-\" +\n this.pad(date.getMonth() + 1) +\n \"-\" +\n this.pad(date.getDate()) +\n \"T\" +\n this.pad(date.getHours()) +\n \":\" +\n this.pad(date.getMinutes())\n );\n }\n\n private pad(num: number) {\n const norm = Math.floor(Math.abs(num));\n return (norm < 10 ? \"0\" : \"\") + norm;\n }\n}\n\nexport class EventInfo {\n message: string;\n humanReadableMessage: string;\n appIcon: string;\n appName: string;\n}\n\nexport class EventOptions {\n cipherInfo = true;\n}\n","import { 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/storageOptions\";\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 { AbstractEncryptService } from \"../abstractions/abstractEncrypt.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\n\nexport class ContainerService {\n constructor(\n private cryptoService: CryptoService,\n private encryptService: AbstractEncryptService\n ) {}\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(): AbstractEncryptService {\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 { AbstractEncryptService } from \"@bitwarden/common/abstractions/abstractEncrypt.service\";\nimport { CryptoService as CryptoServiceAbstraction } from \"@bitwarden/common/abstractions/crypto.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: AbstractEncryptService\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","import { BasePolicy } from \"../organizations/policies/base-policy.component\";\n\nexport class PolicyListService {\n private policies: BasePolicy[] = [];\n\n addPolicies(policies: BasePolicy[]) {\n this.policies.push(...policies);\n }\n\n getPolicies(): BasePolicy[] {\n return this.policies;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Title } from \"@angular/platform-browser\";\nimport { ActivatedRoute, NavigationEnd, Router } from \"@angular/router\";\nimport { filter } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\n@Injectable()\nexport class RouterService {\n private previousUrl: string = undefined;\n private currentUrl: string = undefined;\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private titleService: Title,\n i18nService: I18nService\n ) {\n this.currentUrl = this.router.url;\n\n router.events\n .pipe(filter((e) => e instanceof NavigationEnd))\n .subscribe((event: NavigationEnd) => {\n this.currentUrl = event.url;\n\n let title = i18nService.t(\"pageTitle\", \"Bitwarden\");\n let child = this.activatedRoute.firstChild;\n while (child.firstChild) {\n child = child.firstChild;\n }\n\n const titleId: string = child?.snapshot?.data?.titleId;\n const rawTitle: string = child?.snapshot?.data?.title;\n const updateUrl = !child?.snapshot?.data?.doNotSaveUrl ?? true;\n\n if (titleId != null || rawTitle != null) {\n const newTitle = rawTitle != null ? rawTitle : i18nService.t(titleId);\n if (newTitle != null && newTitle !== \"\") {\n title = newTitle + \" | \" + title;\n }\n }\n this.titleService.setTitle(title);\n if (updateUrl) {\n this.setPreviousUrl(this.currentUrl);\n }\n });\n }\n\n getPreviousUrl() {\n return this.previousUrl;\n }\n\n setPreviousUrl(url: string) {\n this.previousUrl = url;\n }\n}\n","import {\n Account as BaseAccount,\n AccountSettings as BaseAccountSettings,\n} from \"@bitwarden/common/models/domain/account\";\n\nexport class AccountSettings extends BaseAccountSettings {\n vaultTimeout: number = process.env.NODE_ENV === \"development\" ? null : 15;\n}\n\nexport class Account extends BaseAccount {\n settings?: AccountSettings = new AccountSettings();\n\n constructor(init: Partial) {\n super(init);\n Object.assign(this.settings, {\n ...new AccountSettings(),\n ...this.settings,\n });\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\n\nimport {\n MEMORY_STORAGE,\n SECURE_STORAGE,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n} from \"@bitwarden/angular/services/injection-tokens\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { StateMigrationService } from \"@bitwarden/common/abstractions/stateMigration.service\";\nimport { AbstractStorageService } from \"@bitwarden/common/abstractions/storage.service\";\nimport { StateFactory } from \"@bitwarden/common/factories/stateFactory\";\nimport { CipherData } from \"@bitwarden/common/models/data/cipherData\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collectionData\";\nimport { FolderData } from \"@bitwarden/common/models/data/folderData\";\nimport { SendData } from \"@bitwarden/common/models/data/sendData\";\nimport { StorageOptions } from \"@bitwarden/common/models/domain/storageOptions\";\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","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 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 { 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 { 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})\nexport class CoreModule {\n constructor(@Optional() @SkipSelf() parentModule?: CoreModule) {\n if (parentModule) {\n throw new Error(\"CoreModule is already loaded. Import it in the AppModule only\");\n }\n }\n}\n","import { ThemeType } from \"@bitwarden/common/enums/themeType\";\nimport { GlobalState as BaseGlobalState } from \"@bitwarden/common/models/domain/globalState\";\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","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/policyRequest\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policyResponse\";\n\nexport abstract class BasePolicy {\n abstract name: string;\n abstract description: string;\n abstract type: PolicyType;\n abstract component: any;\n\n display(organization: Organization) {\n return true;\n }\n}\n\n@Directive()\nexport abstract class BasePolicyComponent implements OnInit {\n @Input() policyResponse: PolicyResponse;\n @Input() policy: BasePolicy;\n\n enabled = new 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.service\";\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/policyRequest\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class RequireSsoPolicy extends BasePolicy {\n name = \"requireSso\";\n description = \"requireSsoPolicyDesc\";\n type = PolicyType.RequireSso;\n component = RequireSsoPolicyComponent;\n\n display(organization: Organization) {\n return organization.useSso;\n }\n}\n\n@Component({\n selector: \"policy-require-sso\",\n templateUrl: \"require-sso.component.html\",\n})\nexport class RequireSsoPolicyComponent extends BasePolicyComponent {\n constructor(private i18nService: I18nService) {\n super();\n }\n\n buildRequest(policiesEnabledMap: Map): Promise {\n const singleOrgEnabled = policiesEnabledMap.get(PolicyType.SingleOrg) ?? false;\n if (this.enabled.value && !singleOrgEnabled) {\n throw new Error(this.i18nService.t(\"requireSsoPolicyReqError\"));\n }\n\n return super.buildRequest(policiesEnabledMap);\n }\n}\n","\n {{ \"requireSsoPolicyReq\" | i18n }}\n\n\n {{ \"requireSsoExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","\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.service\";\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/policyRequest\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class SingleOrgPolicy extends BasePolicy {\n name = \"singleOrg\";\n description = \"singleOrgDesc\";\n type = PolicyType.SingleOrg;\n component = SingleOrgPolicyComponent;\n}\n\n@Component({\n selector: \"policy-single-org\",\n templateUrl: \"single-org.component.html\",\n})\nexport class SingleOrgPolicyComponent extends BasePolicyComponent {\n constructor(private i18nService: I18nService) {\n super();\n }\n\n buildRequest(policiesEnabledMap: Map): Promise {\n if (!this.enabled.value) {\n if (policiesEnabledMap.get(PolicyType.RequireSso) ?? false) {\n throw new Error(\n this.i18nService.t(\"disableRequiredError\", this.i18nService.t(\"requireSso\"))\n );\n }\n\n if (policiesEnabledMap.get(PolicyType.MaximumVaultTimeout) ?? false) {\n throw new Error(\n this.i18nService.t(\"disableRequiredError\", this.i18nService.t(\"maximumVaultTimeoutLabel\"))\n );\n }\n }\n\n return super.buildRequest(policiesEnabledMap);\n }\n}\n","\n {{ \"singleOrgPolicyWarning\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"@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","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 { DisableSendPolicy } from \"./organizations/policies/disable-send.component\";\nimport { MasterPasswordPolicy } from \"./organizations/policies/master-password.component\";\nimport { PasswordGeneratorPolicy } from \"./organizations/policies/password-generator.component\";\nimport { PersonalOwnershipPolicy } from \"./organizations/policies/personal-ownership.component\";\nimport { RequireSsoPolicy } from \"./organizations/policies/require-sso.component\";\nimport { ResetPasswordPolicy } from \"./organizations/policies/reset-password.component\";\nimport { SendOptionsPolicy } from \"./organizations/policies/send-options.component\";\nimport { SingleOrgPolicy } from \"./organizations/policies/single-org.component\";\nimport { TwoFactorAuthenticationPolicy } from \"./organizations/policies/two-factor-authentication.component\";\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","// required to avoid linting errors when there are no flags\n/* eslint-disable @typescript-eslint/ban-types */\nexport type SharedFlags = {};\n\n// required to avoid linting errors when there are no flags\n/* eslint-disable @typescript-eslint/ban-types */\nexport type SharedDevFlags = {};\n\nfunction getFlags(envFlags: string | T): T {\n if (typeof envFlags === \"string\") {\n return JSON.parse(envFlags) as T;\n } else {\n return envFlags as T;\n }\n}\n\n/**\n * Gets the value of a feature flag from environment.\n * All flags default to \"on\" (true).\n * Only use for shared code in `libs`, otherwise use the client-specific function.\n * @param flag The name of the feature flag to check\n * @returns The value of the flag\n */\nexport function flagEnabled(flag: keyof Flags): boolean {\n const flags = getFlags(process.env.FLAGS);\n return flags[flag] == null || !!flags[flag];\n}\n\n/**\n * Gets the value of a dev flag from environment.\n * Will always return false unless in development.\n * Only use for shared code in `libs`, otherwise use the client-specific function.\n * @param flag The name of the dev flag to check\n * @returns The value of the flag\n */\nexport function devFlagEnabled(flag: keyof DevFlags): boolean {\n if (process.env.ENV !== \"development\") {\n return false;\n }\n\n const devFlags = getFlags(process.env.DEV_FLAGS);\n return devFlags[flag] == null || !!devFlags[flag];\n}\n\n/**\n * Gets the value of a dev flag from environment.\n * Will always return false unless in development.\n * @param flag The name of the dev flag to check\n * @returns The value of the flag\n * @throws Error if the flag is not enabled\n */\nexport function devFlagValue(\n flag: keyof DevFlags\n): DevFlags[keyof DevFlags] {\n if (!devFlagEnabled(flag)) {\n throw new Error(`This method should not be called, it is protected by a disabled dev flag.`);\n }\n\n const devFlags = getFlags(process.env.DEV_FLAGS);\n return devFlags[flag];\n}\n","import {\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","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/emergencyAccessAcceptRequest\";\n\nimport { BaseAcceptComponent } from \"../common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-emergency\",\n templateUrl: \"accept-emergency.component.html\",\n})\nexport class AcceptEmergencyComponent extends BaseAcceptComponent {\n name: string;\n\n protected requiredParameters: string[] = [\"id\", \"name\", \"email\", \"token\"];\n protected failedShortMessage = \"emergencyInviteAcceptFailedShort\";\n protected failedMessage = \"emergencyInviteAcceptFailed\";\n\n constructor(\n router: Router,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n route: ActivatedRoute,\n private apiService: ApiService,\n stateService: StateService\n ) {\n super(router, platformUtilsService, i18nService, route, stateService);\n }\n\n async authedHandler(qParams: 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/organizationUserAcceptRequest\";\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 { 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 { 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 ) {\n super(router, i18nService, apiService, platformUtilsService, logService);\n }\n}\n","import { 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 { PasswordHintRequest } from \"@bitwarden/common/models/request/passwordHintRequest\";\n\nexport class HintComponent {\n email = \"\";\n formPromise: Promise;\n\n protected successRoute = \"login\";\n protected onSuccessfulSubmit: () => void;\n\n constructor(\n protected router: Router,\n protected i18nService: I18nService,\n protected apiService: ApiService,\n protected platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async submit() {\n if (this.email == null || this.email === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"emailRequired\")\n );\n return;\n }\n if (this.email.indexOf(\"@\") === -1) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidEmail\")\n );\n return;\n }\n\n try {\n this.formPromise = this.apiService.postPasswordHint(new PasswordHintRequest(this.email));\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"masterPassSent\"));\n if (this.onSuccessfulSubmit != null) {\n this.onSuccessfulSubmit();\n } else if (this.router != null) {\n this.router.navigate([this.successRoute]);\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\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/encString\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/models/request/secretVerificationRequest\";\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 { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\n\nimport { AuthenticationType } from \"../../enums/authenticationType\";\nimport { TokenRequestTwoFactor } from \"../request/identityToken/tokenRequestTwoFactor\";\n\nexport class PasswordLogInCredentials {\n readonly type = AuthenticationType.Password;\n\n constructor(\n public email: string,\n public masterPassword: string,\n public captchaToken?: string,\n public twoFactor?: TokenRequestTwoFactor\n ) {}\n}\n\nexport class SsoLogInCredentials {\n readonly type = AuthenticationType.Sso;\n\n constructor(\n public code: string,\n public codeVerifier: string,\n public redirectUrl: string,\n public orgId: string,\n public twoFactor?: TokenRequestTwoFactor\n ) {}\n}\n\nexport class ApiLogInCredentials {\n readonly type = AuthenticationType.Api;\n\n constructor(public clientId: string, public clientSecret: string) {}\n}\n\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?: TokenRequestTwoFactor\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 { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { AuthRequestType } from \"@bitwarden/common/enums/authRequestType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { PasswordlessLogInCredentials } from \"@bitwarden/common/models/domain/logInCredentials\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\nimport { PasswordlessCreateAuthRequest } from \"@bitwarden/common/models/request/passwordlessCreateAuthRequest\";\nimport { AuthRequestResponse } from \"@bitwarden/common/models/response/authRequestResponse\";\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\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"vault\";\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 private stateService: StateService,\n environmentService: EnvironmentService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n private anonymousHubService: AnonymousHubService\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 await this.authService.logIn(credentials);\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 } catch (error) {\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 { Router } from \"@angular/router\";\nimport { take } from \"rxjs/operators\";\n\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 { 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/authResult\";\nimport { PasswordLogInCredentials } from \"@bitwarden/common/models/domain/logInCredentials\";\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 selfHosted = false;\n\n formGroup = this.formBuilder.group({\n email: [\"\", [Validators.required, Validators.email]],\n masterPassword: [\"\", [Validators.required, Validators.minLength(8)]],\n rememberEmail: [true],\n });\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"vault\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n protected alwaysRememberEmail = false;\n\n constructor(\n protected authService: AuthService,\n protected router: Router,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n protected stateService: StateService,\n environmentService: EnvironmentService,\n protected passwordGenerationService: PasswordGenerationService,\n protected cryptoFunctionService: CryptoFunctionService,\n protected logService: LogService,\n protected ngZone: NgZone,\n protected formBuilder: FormBuilder,\n protected formValidationErrorService: FormValidationErrorsService\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 let email = this.formGroup.get(\"email\")?.value;\n if (email == null || email === \"\") {\n email = await this.stateService.getRememberedEmail();\n this.formGroup.get(\"email\")?.setValue(email);\n\n if (email == null) {\n this.formGroup.get(\"email\")?.setValue(\"\");\n }\n }\n if (!this.alwaysRememberEmail) {\n const rememberEmail = (await this.stateService.getRememberedEmail()) != null;\n this.formGroup.get(\"rememberEmail\")?.setValue(rememberEmail);\n }\n }\n\n async submit(showToast = true) {\n const email = this.formGroup.get(\"email\")?.value;\n const masterPassword = this.formGroup.get(\"masterPassword\")?.value;\n const rememberEmail = this.formGroup.get(\"rememberEmail\")?.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 email,\n masterPassword,\n this.captchaToken,\n null\n );\n this.formPromise = this.authService.logIn(credentials);\n const response = await this.formPromise;\n if (rememberEmail || this.alwaysRememberEmail) {\n await this.stateService.setRememberedEmail(email);\n } else {\n await this.stateService.setRememberedEmail(null);\n }\n if (this.handleCaptchaRequired(response)) {\n return;\n } else if (response.requiresTwoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute]);\n }\n } else if (response.forcePasswordReset) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n if (this.ngZone.isStable) {\n document.getElementById(\"masterPassword\").focus();\n } else {\n this.ngZone.onStable\n .pipe(take(1))\n .subscribe(() => document.getElementById(\"masterPassword\").focus());\n }\n }\n\n async launchSsoBrowser(clientId: string, ssoRedirectUri: string) {\n // Generate necessary sso params\n const passwordOptions: any = {\n type: \"password\",\n length: 64,\n uppercase: true,\n lowercase: true,\n numbers: true,\n special: false,\n };\n const state = await this.passwordGenerationService.generatePassword(passwordOptions);\n const ssoCodeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n const codeVerifierHash = await this.cryptoFunctionService.hash(ssoCodeVerifier, \"sha256\");\n const codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n\n // Save sso params\n await this.stateService.setSsoState(state);\n await this.stateService.setSsoCodeVerifier(ssoCodeVerifier);\n\n // Build URI\n const webUrl = this.environmentService.getWebVaultUrl();\n\n // Launch browser\n this.platformUtilsService.launchUri(\n webUrl +\n \"/#/sso?clientId=\" +\n clientId +\n \"&redirectUri=\" +\n encodeURIComponent(ssoRedirectUri) +\n \"&state=\" +\n state +\n \"&codeChallenge=\" +\n codeChallenge\n );\n }\n\n 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 protected focusInput() {\n const email = this.formGroup.get(\"email\")?.value;\n document.getElementById(email == null || email === \"\" ? \"email\" : \"masterPassword\").focus();\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","\n \n
\n \n

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

\n \n \n {{ \"resetPasswordAutoEnrollInviteWarning\" | i18n }}\n \n\n
\n \n {{ \"emailAddress\" | i18n }}\n \n \n
\n\n
\n \n {{ \"masterPass\" | i18n }}\n \n \n \n {{ \"getMasterPasswordHint\" | i18n }}\n \n \n
\n\n
\n
\n \n
\n \n {{ \"rememberEmail\" | i18n }}\n \n
\n\n
\n\n
\n \n
\n\n
\n \n {{ \"logIn\" | i18n }} \n \n\n \n \n {{ \"createAccount\" | i18n }}\n \n
\n\n
\n \n {{ \"loginWithDevice\" | i18n }} \n \n
\n\n \n
\n \n \n\n","import { Component, NgZone } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\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 { 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 { 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/policyData\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/masterPasswordPolicyOptions\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { ListResponse } from \"@bitwarden/common/models/response/listResponse\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policyResponse\";\n\nimport { flagEnabled } from \"../../../utils/flags\";\nimport { RouterService, StateService } from \"../../core\";\n\n@Component({\n selector: \"app-login\",\n templateUrl: \"login.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class LoginComponent extends BaseLoginComponent {\n showResetPasswordAutoEnrollWarning = false;\n enforcedPasswordPolicyOptions: MasterPasswordPolicyOptions;\n policies: ListResponse;\n showPasswordless = false;\n\n constructor(\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n private route: ActivatedRoute,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n passwordGenerationService: PasswordGenerationService,\n cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService,\n private 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 ) {\n super(\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 );\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.email != null && qParams.email.indexOf(\"@\") > -1) {\n this.formGroup.get(\"email\")?.setValue(qParams.email);\n }\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 const rememberEmail = await this.stateService.getRememberEmail();\n this.formGroup.get(\"rememberEmail\")?.setValue(rememberEmail);\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.enforcedPasswordPolicyOptions =\n await this.policyService.getMasterPasswordPolicyOptions(policyList);\n }\n }\n }\n\n async goAfterLogIn() {\n const masterPassword = this.formGroup.get(\"masterPassword\")?.value;\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.router.navigate([this.successRoute]);\n }\n }\n\n async submit() {\n const rememberEmail = this.formGroup.get(\"rememberEmail\")?.value;\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.get(\"email\")?.value;\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/deleteRecoverRequest\";\n\n@Component({\n selector: \"app-recover-delete\",\n templateUrl: \"recover-delete.component.html\",\n})\nexport class RecoverDeleteComponent {\n email: string;\n formPromise: Promise;\n\n constructor(\n private router: Router,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const request = new DeleteRecoverRequest();\n request.email = this.email.trim().toLowerCase();\n this.formPromise = this.apiService.postAccountRecoverDelete(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deleteRecoverEmailSent\")\n );\n this.router.navigate([\"/\"]);\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n
\n

{{ \"deleteAccount\" | i18n }}

\n
\n
\n

{{ \"deleteRecoverDesc\" | i18n }}

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

{{ \"recoverAccountTwoStep\" | i18n }}

\n
\n
\n

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

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n {{ \"submit\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { 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 { KdfType } from \"../../enums/kdfType\";\n\nimport { CaptchaProtectedRequest } from \"./captchaProtectedRequest\";\nimport { KeysRequest } from \"./keysRequest\";\nimport { ReferenceEventRequest } from \"./referenceEventRequest\";\n\nexport class RegisterRequest implements CaptchaProtectedRequest {\n masterPasswordHint: string;\n keys: KeysRequest;\n token: string;\n organizationUserId: string;\n\n constructor(\n public email: string,\n public name: string,\n public masterPasswordHash: string,\n masterPasswordHint: string,\n public key: string,\n public kdf: KdfType,\n public kdfIterations: number,\n public referenceData: ReferenceEventRequest,\n public captchaResponse: string\n ) {\n this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null;\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { AbstractControl, UntypedFormBuilder, ValidatorFn, Validators } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\n\nimport { InputsFieldMatch } from \"@bitwarden/angular/validators/inputsFieldMatch.validator\";\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/logInCredentials\";\nimport { KeysRequest } from \"@bitwarden/common/models/request/keysRequest\";\nimport { ReferenceEventRequest } from \"@bitwarden/common/models/request/referenceEventRequest\";\nimport { RegisterRequest } from \"@bitwarden/common/models/request/registerRequest\";\nimport { RegisterResponse } from \"@bitwarden/common/models/response/authentication/registerResponse\";\n\nimport { PasswordColorText } from \"../shared/components/password-strength/password-strength.component\";\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.get(\"email\")?.value;\n email = email.trim().toLowerCase();\n let name = this.formGroup.get(\"name\")?.value;\n name = name === \"\" ? null : name; // Why do we do this?\n const masterPassword = this.formGroup.get(\"masterPassword\")?.value;\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.get(\"email\")?.value);\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.get(\"hint\")?.value;\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 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/masterPasswordPolicyOptions\";\nimport { ReferenceEventRequest } from \"@bitwarden/common/models/request/referenceEventRequest\";\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.get(\"masterPassword\")?.value,\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 } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\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/policyData\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/masterPasswordPolicyOptions\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { ReferenceEventRequest } from \"@bitwarden/common/models/request/referenceEventRequest\";\n\nimport { RouterService } from \"../core\";\n\n@Component({\n selector: \"app-register\",\n templateUrl: \"register.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class RegisterComponent extends BaseRegisterComponent {\n email = \"\";\n showCreateOrgMessage = false;\n layout = \"\";\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n\n private policies: Policy[];\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.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(\n this.policies\n );\n }\n\n await super.ngOnInit();\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 { 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 apiService: ApiService,\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).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"leftOrganization\"));\n await this.keyConnectorService.removeConvertAccountRequired();\n this.router.navigate([\"\"]);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), e);\n }\n }\n}\n","
\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 \"./secretVerificationRequest\";\n\nexport class OrganizationUserResetPasswordEnrollmentRequest extends SecretVerificationRequest {\n resetPasswordKey: string;\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { KeysRequest } from \"./keysRequest\";\n\nexport class SetPasswordRequest {\n masterPasswordHash: string;\n key: string;\n masterPasswordHint: string;\n keys: KeysRequest;\n kdf: KdfType;\n kdfIterations: number;\n orgIdentifier: string;\n\n constructor(\n masterPasswordHash: string,\n key: string,\n masterPasswordHint: string,\n kdf: KdfType,\n kdfIterations: number,\n orgIdentifier: string,\n keys: KeysRequest\n ) {\n this.masterPasswordHash = masterPasswordHash;\n this.key = key;\n this.masterPasswordHint = masterPasswordHint;\n this.kdf = kdf;\n this.kdfIterations = kdfIterations;\n this.orgIdentifier = orgIdentifier;\n this.keys = keys;\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\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/encString\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/masterPasswordPolicyOptions\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\n\nimport { PasswordColorText } from \"../shared/components/password-strength/password-strength.component\";\n\n@Directive()\nexport class ChangePasswordComponent implements OnInit {\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 constructor(\n protected i18nService: I18nService,\n protected cryptoService: CryptoService,\n protected messagingService: MessagingService,\n protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService,\n protected policyService: PolicyService,\n protected stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.email = await this.stateService.getEmail();\n this.enforcedPolicyOptions ??= await this.policyService.getMasterPasswordPolicyOptions();\n }\n\n async submit() {\n if (!(await this.strongPassword())) {\n return;\n }\n\n if (!(await this.setupSubmitActions())) {\n return;\n }\n\n const email = await this.stateService.getEmail();\n if (this.kdf == null) {\n this.kdf = await this.stateService.getKdfType();\n }\n if (this.kdfIterations == null) {\n this.kdfIterations = await this.stateService.getKdfIterations();\n }\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n email.trim().toLowerCase(),\n this.kdf,\n this.kdfIterations\n );\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n let encKey: [SymmetricCryptoKey, EncString] = null;\n const existingEncKey = await this.cryptoService.getEncKey();\n if (existingEncKey == null) {\n encKey = await this.cryptoService.makeEncKey(key);\n } else {\n encKey = await this.cryptoService.remakeEncKey(key);\n }\n\n await this.performSubmitActions(masterPasswordHash, key, encKey);\n }\n\n async setupSubmitActions(): Promise {\n // Override in sub-class\n // Can be used for additional validation and/or other processes the should occur before changing passwords\n return true;\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n // Override in sub-class\n }\n\n async strongPassword(): Promise {\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"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/encString\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\nimport { KeysRequest } from \"@bitwarden/common/models/request/keysRequest\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/models/request/organizationUserResetPasswordEnrollmentRequest\";\nimport { SetPasswordRequest } from \"@bitwarden/common/models/request/setPasswordRequest\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"./change-password.component\";\n\n@Directive()\nexport class SetPasswordComponent extends BaseChangePasswordComponent {\n syncLoading = true;\n showPassword = false;\n hint = \"\";\n identifier: string = null;\n orgId: string;\n resetPasswordAutoEnroll = false;\n\n onSuccessfulChangePassword: () => Promise;\n successRoute = \"vault\";\n\n constructor(\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n 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/authResult\";\nimport { SsoLogInCredentials } from \"@bitwarden/common/models/domain/logInCredentials\";\nimport { SsoPreValidateResponse } from \"@bitwarden/common/models/response/ssoPreValidateResponse\";\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","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 ProductType {\n Free = 0,\n Families = 1,\n Teams = 2,\n Enterprise = 3,\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","
\n \n {{ \"organizationName\" | i18n }}\n \n \n
\n
\n

{{ \"generalInformation\" | i18n }}

\n
\n \n {{ \"organizationName\" | i18n }}\n \n \n \n {{ \"billingEmail\" | i18n }}\n \n \n \n {{ \"clientOwnerEmail\" | i18n }}\n \n \n
\n
\n \n {{ \"accountOwnedBusiness\" | i18n }}\n
\n \n {{ \"businessName\" | i18n }}\n \n \n
\n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { UntypedFormGroup } from \"@angular/forms\";\n\n@Component({\n selector: \"app-org-info\",\n templateUrl: \"organization-information.component.html\",\n})\nexport class OrganizationInformationComponent {\n @Input() nameOnly = false;\n @Input() createOrganization = true;\n @Input() isProvider = false;\n @Input() acceptingSponsorship = false;\n @Input() formGroup: UntypedFormGroup;\n @Output() changedBusinessOwned = new EventEmitter();\n}\n","import { 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","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","
\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","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\nimport { PlanType } from \"../../enums/planType\";\n\nimport { OrganizationKeysRequest } from \"./organizationKeysRequest\";\n\nexport class OrganizationCreateRequest {\n name: string;\n businessName: string;\n billingEmail: string;\n planType: PlanType;\n key: string;\n keys: OrganizationKeysRequest;\n paymentMethodType: PaymentMethodType;\n paymentToken: string;\n additionalSeats: number;\n maxAutoscaleSeats: number;\n additionalStorageGb: number;\n premiumAccessAddon: boolean;\n collectionName: string;\n taxIdNumber: string;\n billingAddressLine1: string;\n billingAddressLine2: string;\n billingAddressCity: string;\n billingAddressState: string;\n billingAddressPostalCode: string;\n billingAddressCountry: string;\n}\n","import { KeysRequest } from \"./keysRequest\";\n\nexport class OrganizationKeysRequest extends KeysRequest {\n constructor(publicKey: string, encryptedPrivateKey: string) {\n super(publicKey, encryptedPrivateKey);\n }\n}\n","import { PlanType } from \"../../enums/planType\";\n\nimport { OrganizationKeysRequest } from \"./organizationKeysRequest\";\n\nexport class OrganizationUpgradeRequest {\n businessName: string;\n planType: PlanType;\n additionalSeats: number;\n additionalStorageGb: number;\n premiumAccessAddon: boolean;\n billingAddressCountry: string;\n billingAddressPostalCode: string;\n keys: OrganizationKeysRequest;\n}\n","import { OrganizationCreateRequest } from \"../organizationCreateRequest\";\n\nexport class ProviderOrganizationCreateRequest {\n constructor(\n public clientOwnerEmail: string,\n public organizationCreateRequest: OrganizationCreateRequest\n ) {}\n}\n","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n
\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\";\nimport { ThemeType } from \"@bitwarden/common/enums/themeType\";\n\nimport ThemeVariables from \"../../scss/export.module.scss\";\n\nconst lightInputColor = ThemeVariables.lightInputColor;\nconst lightInputPlaceholderColor = ThemeVariables.lightInputPlaceholderColor;\nconst darkInputColor = ThemeVariables.darkInputColor;\nconst darkInputPlaceholderColor = ThemeVariables.darkInputPlaceholderColor;\n\n@Component({\n selector: \"app-payment\",\n templateUrl: \"payment.component.html\",\n})\nexport class PaymentComponent implements OnInit, 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 await this.setTheme();\n window.document.head.appendChild(this.stripeScript);\n if (!this.hidePaypal) {\n window.document.head.appendChild(this.btScript);\n }\n }\n\n ngOnDestroy() {\n 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 async setTheme() {\n this.themingService.theme$.pipe(takeUntil(this.destroy$)).subscribe((theme) => {\n if (theme.effectiveTheme === ThemeType.Dark) {\n this.StripeElementStyle.base.color = darkInputColor;\n this.StripeElementStyle.base[\"::placeholder\"].color = darkInputPlaceholderColor;\n this.StripeElementStyle.invalid.color = darkInputColor;\n } else {\n this.StripeElementStyle.base.color = lightInputColor;\n this.StripeElementStyle.base[\"::placeholder\"].color = lightInputPlaceholderColor;\n this.StripeElementStyle.invalid.color = lightInputColor;\n }\n });\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"darkInputColor\":\"#fff\",\"darkInputPlaceholderColor\":\"#bac0ce\",\"lightInputColor\":\"#465057\",\"lightInputPlaceholderColor\":\"#b6b8b8\"};","export class TaxInfoUpdateRequest {\n country: string;\n postalCode: string;\n}\n","import { TaxInfoUpdateRequest } from \"./taxInfoUpdateRequest\";\n\nexport class OrganizationTaxInfoUpdateRequest extends TaxInfoUpdateRequest {\n taxId: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n}\n","
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\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/organizationTaxInfoUpdateRequest\";\nimport { TaxInfoUpdateRequest } from \"@bitwarden/common/models/request/taxInfoUpdateRequest\";\nimport { TaxInfoResponse } from \"@bitwarden/common/models/response/taxInfoResponse\";\nimport { TaxRateResponse } from \"@bitwarden/common/models/response/taxRateResponse\";\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","\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 { Component, EventEmitter, Input, OnInit, Output, ViewChild } from \"@angular/core\";\nimport { UntypedFormBuilder, Validators } 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 { OrganizationService } from \"@bitwarden/common/abstractions/organization.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 { 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/encString\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\nimport { OrganizationCreateRequest } from \"@bitwarden/common/models/request/organizationCreateRequest\";\nimport { OrganizationKeysRequest } from \"@bitwarden/common/models/request/organizationKeysRequest\";\nimport { OrganizationUpgradeRequest } from \"@bitwarden/common/models/request/organizationUpgradeRequest\";\nimport { ProviderOrganizationCreateRequest } from \"@bitwarden/common/models/request/provider/providerOrganizationCreateRequest\";\nimport { PlanResponse } from \"@bitwarden/common/models/response/planResponse\";\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 {\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 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.loading = false;\n }\n\n get createOrganization() {\n return this.organizationId == null;\n }\n\n get selectedPlan() {\n return this.plans.find((plan) => plan.type === this.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 this.singleOrgPolicyBlock = await this.userHasBlockingSingleOrgPolicy();\n\n if (this.singleOrgPolicyBlock) {\n return;\n }\n\n try {\n const doSubmit = async (): Promise => {\n let orgId: string = null;\n if (this.createOrganization) {\n const shareKey = await this.cryptoService.makeShareKey();\n const key = shareKey[0].encryptedString;\n const collection = await this.cryptoService.encrypt(\n this.i18nService.t(\"defaultCollection\"),\n shareKey[1]\n );\n const collectionCt = collection.encryptedString;\n const orgKeys = await this.cryptoService.makeKeyPair(shareKey[1]);\n\n if (this.selfHosted) {\n orgId = await this.createSelfHosted(key, collectionCt, orgKeys);\n } else {\n orgId = await this.createCloudHosted(key, collectionCt, orgKeys, shareKey[1]);\n }\n\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"organizationCreated\"),\n this.i18nService.t(\"organizationReadyToGo\")\n );\n } else {\n orgId = await this.updateOrganization(orgId);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"organizationUpgraded\")\n );\n }\n\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n\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 userHasBlockingSingleOrgPolicy() {\n return this.policyService.policyAppliesToUser(PolicyType.SingleOrg);\n }\n\n private async updateOrganization(orgId: string) {\n const request = new OrganizationUpgradeRequest();\n request.businessName = this.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","
\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 { OrganizationService } from \"@bitwarden/common/abstractions/organization.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 { 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.get(\"name\")?.value,\n billingEmail: this.orgInfoForm.get(\"email\")?.value,\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, OnInit, ViewChild } from \"@angular/core\";\nimport { UntypedFormBuilder, Validators } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } 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/policyData\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/masterPasswordPolicyOptions\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { ReferenceEventRequest } from \"@bitwarden/common/models/request/referenceEventRequest\";\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})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class TrialInitiationComponent implements OnInit {\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 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.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(\n this.policies\n );\n }\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 { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class TwoFactorEmailRequest extends SecretVerificationRequest {\n email: string;\n deviceIdentifier: string;\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 { 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/authResult\";\nimport { TokenRequestTwoFactor } from \"@bitwarden/common/models/request/identityToken/tokenRequestTwoFactor\";\nimport { TwoFactorEmailRequest } from \"@bitwarden/common/models/request/twoFactorEmailRequest\";\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 ) {\n super(environmentService, i18nService, platformUtilsService);\n this.webAuthnSupported = this.platformUtilsService.supportsWebAuthn(win);\n }\n\n async ngOnInit() {\n if (!this.authing || this.twoFactorService.getProviders() == null) {\n this.router.navigate([this.loginRoute]);\n return;\n }\n\n this.route.queryParams.pipe(first()).subscribe((qParams) => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n }\n });\n\n if (this.needsLock) {\n this.successRoute = \"lock\";\n }\n\n if (this.win != null && this.webAuthnSupported) {\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n this.webAuthn = new WebAuthnIFrame(\n this.win,\n webVaultUrl,\n this.webAuthnNewTab,\n this.platformUtilsService,\n this.i18nService,\n (token: string) => {\n this.token = token;\n this.submit();\n },\n (error: string) => {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), error);\n },\n (info: string) => {\n if (info === \"ready\") {\n this.webAuthnReady = true;\n }\n }\n );\n }\n\n this.selectedProviderType = this.twoFactorService.getDefaultProvider(this.webAuthnSupported);\n await this.init();\n }\n\n ngOnDestroy(): void {\n this.cleanupWebAuthn();\n this.webAuthn = null;\n }\n\n async init() {\n if (this.selectedProviderType == null) {\n this.title = this.i18nService.t(\"loginUnavailable\");\n return;\n }\n\n this.cleanupWebAuthn();\n this.title = (TwoFactorProviders as any)[this.selectedProviderType].name;\n const providerData = this.twoFactorService.getProviders().get(this.selectedProviderType);\n switch (this.selectedProviderType) {\n case TwoFactorProviderType.WebAuthn:\n if (!this.webAuthnNewTab) {\n setTimeout(() => {\n this.authWebAuthn();\n }, 500);\n }\n break;\n case TwoFactorProviderType.Duo:\n case TwoFactorProviderType.OrganizationDuo:\n setTimeout(() => {\n DuoWebSDK.init({\n iframe: undefined,\n host: providerData.Host,\n sig_request: providerData.Signature,\n submit_callback: async (f: HTMLFormElement) => {\n const sig = f.querySelector('input[name=\"sig_response\"]') as HTMLInputElement;\n if (sig != null) {\n this.token = sig.value;\n await this.submit();\n }\n },\n });\n }, 0);\n break;\n case TwoFactorProviderType.Email:\n this.twoFactorEmail = providerData.Email;\n if (this.twoFactorService.getProviders().size > 1) {\n await this.sendEmail(false);\n }\n break;\n default:\n break;\n }\n }\n\n async submit() {\n await this.setupCaptcha();\n\n if (this.token == null || this.token === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"verificationCodeRequired\")\n );\n return;\n }\n\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn) {\n if (this.webAuthn != null) {\n this.webAuthn.stop();\n } else {\n return;\n }\n } else if (\n this.selectedProviderType === TwoFactorProviderType.Email ||\n this.selectedProviderType === TwoFactorProviderType.Authenticator\n ) {\n this.token = this.token.replace(\" \", \"\").trim();\n }\n\n try {\n await this.doSubmit();\n } catch {\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn && this.webAuthn != null) {\n this.webAuthn.start();\n }\n }\n }\n\n async doSubmit() {\n this.formPromise = this.authService.logInTwoFactor(\n new TokenRequestTwoFactor(this.selectedProviderType, this.token, this.remember),\n this.captchaToken\n );\n const response: AuthResult = await this.formPromise;\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n if (this.handleCaptchaRequired(response)) {\n return;\n }\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (response.resetMasterPassword) {\n this.successRoute = \"set-password\";\n }\n if (response.forcePasswordReset) {\n this.successRoute = \"update-temp-password\";\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.identifier,\n },\n });\n }\n }\n\n async sendEmail(doToast: boolean) {\n if (this.selectedProviderType !== TwoFactorProviderType.Email) {\n return;\n }\n\n if (this.emailPromise != null) {\n return;\n }\n\n try {\n const request = new TwoFactorEmailRequest();\n request.email = this.authService.email;\n request.masterPasswordHash = this.authService.masterPasswordHash;\n request.deviceIdentifier = await this.appIdService.getAppId();\n this.emailPromise = this.apiService.postTwoFactorEmail(request);\n await this.emailPromise;\n if (doToast) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"verificationCodeEmailSent\", this.twoFactorEmail)\n );\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n this.emailPromise = null;\n }\n\n authWebAuthn() {\n const providerData = this.twoFactorService.getProviders().get(this.selectedProviderType);\n\n if (!this.webAuthnSupported || this.webAuthn == null) {\n return;\n }\n\n this.webAuthn.init(providerData);\n }\n\n private cleanupWebAuthn() {\n if (this.webAuthn != null) {\n this.webAuthn.stop();\n this.webAuthn.cleanup();\n }\n }\n\n get authing(): boolean {\n return (\n this.authService.authingWithPassword() ||\n this.authService.authingWithSso() ||\n this.authService.authingWithApiKey()\n );\n }\n\n get needsLock(): boolean {\n return this.authService.authingWithSso() || this.authService.authingWithApiKey();\n }\n}\n","import { Directive, 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 { 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 ) {\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 );\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 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 \"./secretVerificationRequest\";\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/encString\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/masterPasswordPolicyOptions\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\nimport { PasswordRequest } from \"@bitwarden/common/models/request/passwordRequest\";\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 \"./organizationUserResetPasswordRequest\";\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/encString\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/masterPasswordPolicyOptions\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\nimport { UpdateTempPasswordRequest } from \"@bitwarden/common/models/request/updateTempPasswordRequest\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"./change-password.component\";\n\n@Directive()\nexport class UpdateTempPasswordComponent extends BaseChangePasswordComponent {\n hint: string;\n key: string;\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n showPassword = false;\n\n onSuccessfulChangePassword: () => Promise;\n\n constructor(\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n private apiService: ApiService,\n stateService: StateService,\n private syncService: SyncService,\n private logService: LogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n await this.syncService.fullSync(true);\n super.ngOnInit();\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n async setupSubmitActions(): Promise {\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions();\n this.email = await this.stateService.getEmail();\n this.kdf = await this.stateService.getKdfType();\n this.kdfIterations = await this.stateService.getKdfIterations();\n return true;\n }\n\n async submit() {\n // Validation\n if (!(await this.strongPassword())) {\n return;\n }\n\n if (!(await this.setupSubmitActions())) {\n return;\n }\n\n try {\n // Create new key and hash new password\n const newKey = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email.trim().toLowerCase(),\n this.kdf,\n this.kdfIterations\n );\n const newPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey);\n\n // Grab user's current enc key\n const userEncKey = await this.cryptoService.getEncKey();\n\n // Create new encKey for the User\n const newEncKey = await this.cryptoService.remakeEncKey(newKey, userEncKey);\n\n await this.performSubmitActions(newPasswordHash, newKey, newEncKey);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n try {\n // Create request\n const request = new UpdateTempPasswordRequest();\n request.key = encKey[1].encryptedString;\n request.newMasterPasswordHash = masterPasswordHash;\n request.masterPasswordHint = this.hint;\n\n // Update user's password\n this.formPromise = this.apiService.putUpdateTempPassword(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"updatedMasterPassword\")\n );\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.messagingService.send(\"logout\");\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\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/verifyEmailRequest\";\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/verifyDeleteRecoverRequest\";\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 © {{ year }} Bitwarden Inc. (Powered by Vaultwarden)
\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
© {{ year }} Bitwarden Inc. (Powered by Vaultwarden)
\n
\n
\n {{ \"versionNumber\" | i18n: version }}\n
\n
\n
\n","import { Component, Input, OnChanges, OnInit } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\n\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Component({\n selector: \"app-avatar\",\n template:\n '\",\n})\nexport class AvatarComponent implements OnChanges, OnInit {\n @Input() data: string;\n @Input() email: string;\n @Input() size = 45;\n @Input() charCount = 2;\n @Input() textColor = \"#ffffff\";\n @Input() fontSize = 20;\n @Input() fontWeight = 300;\n @Input() dynamic = false;\n @Input() circle = false;\n\n src: string;\n\n constructor(\n public sanitizer: DomSanitizer,\n private cryptoFunctionService: CryptoFunctionService,\n private stateService: StateService\n ) {}\n\n ngOnInit() {\n if (!this.dynamic) {\n this.generate();\n }\n }\n\n ngOnChanges() {\n if (this.dynamic) {\n this.generate();\n }\n }\n\n private async generate() {\n const enableGravatars = await this.stateService.getEnableGravitars();\n if (enableGravatars && this.email != null) {\n const hashBytes = await this.cryptoFunctionService.hash(\n this.email.toLowerCase().trim(),\n \"md5\"\n );\n const hash = Utils.fromBufferToHex(hashBytes).toLowerCase();\n this.src = \"https://www.gravatar.com/avatar/\" + hash + \"?s=\" + this.size + \"&r=pg&d=retro\";\n } else {\n let chars: string = null;\n const upperData = this.data.toUpperCase();\n\n if (this.charCount > 1) {\n chars = this.getFirstLetters(upperData, this.charCount);\n }\n if (chars == null) {\n chars = this.unicodeSafeSubstring(upperData, this.charCount);\n }\n\n // If the chars contain an emoji, only show it.\n if (chars.match(Utils.regexpEmojiPresentation)) {\n chars = chars.match(Utils.regexpEmojiPresentation)[0];\n }\n\n const charObj = this.getCharText(chars);\n const color = Utils.stringToColor(upperData);\n const svg = this.getSvg(this.size, color);\n svg.appendChild(charObj);\n const html = window.document.createElement(\"div\").appendChild(svg).outerHTML;\n const svgHtml = window.btoa(unescape(encodeURIComponent(html)));\n this.src = \"data:image/svg+xml;base64,\" + svgHtml;\n }\n }\n\n private getFirstLetters(data: string, count: number): string {\n const parts = data.split(\" \");\n if (parts.length > 1) {\n let text = \"\";\n for (let i = 0; i < count; i++) {\n text += this.unicodeSafeSubstring(parts[i], 1);\n }\n return text;\n }\n return null;\n }\n\n private getSvg(size: number, color: string): HTMLElement {\n const svgTag = window.document.createElement(\"svg\");\n svgTag.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n svgTag.setAttribute(\"pointer-events\", \"none\");\n svgTag.setAttribute(\"width\", size.toString());\n svgTag.setAttribute(\"height\", size.toString());\n svgTag.style.backgroundColor = color;\n svgTag.style.width = size + \"px\";\n svgTag.style.height = size + \"px\";\n return svgTag;\n }\n\n private getCharText(character: string): HTMLElement {\n const textTag = window.document.createElement(\"text\");\n textTag.setAttribute(\"text-anchor\", \"middle\");\n textTag.setAttribute(\"y\", \"50%\");\n textTag.setAttribute(\"x\", \"50%\");\n textTag.setAttribute(\"dy\", \"0.35em\");\n textTag.setAttribute(\"pointer-events\", \"auto\");\n textTag.setAttribute(\"fill\", this.textColor);\n textTag.setAttribute(\n \"font-family\",\n '\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,' +\n 'sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\"'\n );\n textTag.textContent = character;\n textTag.style.fontWeight = this.fontWeight.toString();\n textTag.style.fontSize = this.fontSize + \"px\";\n return textTag;\n }\n\n private unicodeSafeSubstring(str: string, count: number) {\n const characters = str.match(/./gu);\n return characters != null ? characters.slice(0, count).join(\"\") : \"\";\n }\n}\n","import { 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 { 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, NgZone, OnInit } from \"@angular/core\";\n\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\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 { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\n\nimport { canAccessOrgAdmin } from \"../organizations/navigation-permissions\";\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 organizations: Organization[] = [];\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 private broadcasterService: BroadcasterService,\n private ngZone: NgZone\n ) {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.name = await this.tokenService.getName();\n this.email = await this.tokenService.getEmail();\n if (this.name == null || this.name.trim() === \"\") {\n this.name = this.email;\n }\n\n // Ensure 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 = await this.buildOrganizations();\n\n this.broadcasterService.subscribe(this.constructor.name, async (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"organizationCreated\":\n if (this.organizations.length < 1) {\n this.organizations = await this.buildOrganizations();\n }\n break;\n }\n });\n });\n }\n\n async buildOrganizations() {\n const allOrgs = await this.organizationService.getAll();\n return allOrgs.filter(canAccessOrgAdmin).sort(Utils.getSortFunction(this.i18nService, \"name\"));\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","
\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\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\nimport { canAccessOrgAdmin } from \"../organizations/navigation-permissions\";\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: Organization[] = [];\n\n loaded = false;\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n const orgs = await this.organizationService.getAll();\n this.organizations = orgs\n .filter(canAccessOrgAdmin)\n .sort(Utils.getSortFunction(this.i18nService, \"name\"));\n\n this.loaded = true;\n }\n}\n","\n\n\n\n","import { Component, NgZone, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\nimport {\n canAccessManageTab,\n canAccessSettingsTab,\n canAccessToolsTab,\n} from \"../navigation-permissions\";\n\nconst BroadcasterSubscriptionId = \"OrganizationLayoutComponent\";\n\n@Component({\n selector: \"app-organization-layout\",\n templateUrl: \"organization-layout.component.html\",\n})\nexport class OrganizationLayoutComponent implements OnInit, OnDestroy {\n organization: Organization;\n businessTokenPromise: Promise;\n private organizationId: string;\n\n constructor(\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private broadcasterService: BroadcasterService,\n private ngZone: NgZone\n ) {}\n\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.params.subscribe(async (params: any) => {\n this.organizationId = params.organizationId;\n await this.load();\n });\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"updatedOrgLicense\":\n await this.load();\n break;\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async load() {\n this.organization = await this.organizationService.get(this.organizationId);\n }\n\n get showManageTab(): boolean {\n return canAccessManageTab(this.organization);\n }\n\n get showToolsTab(): boolean {\n return canAccessToolsTab(this.organization);\n }\n\n get showSettingsTab(): boolean {\n return canAccessSettingsTab(this.organization);\n }\n\n get toolsRoute(): string {\n return this.organization.canAccessImportExport\n ? \"tools/import\"\n : \"tools/exposed-passwords-report\";\n }\n\n get manageRoute(): string {\n let route: string;\n switch (true) {\n case this.organization.canManageUsers:\n route = \"manage/people\";\n break;\n case this.organization.canViewAssignedCollections || this.organization.canViewAllCollections:\n route = \"manage/collections\";\n break;\n case this.organization.canManageGroups:\n route = \"manage/groups\";\n break;\n case this.organization.canManagePolicies:\n route = \"manage/policies\";\n break;\n case this.organization.canManageSso:\n route = \"manage/sso\";\n break;\n case this.organization.canManageScim:\n route = \"manage/scim\";\n break;\n case this.organization.canAccessEventLogs:\n route = \"manage/events\";\n break;\n }\n return route;\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.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EncString } from \"@bitwarden/common/models/domain/encString\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\nimport { CollectionRequest } from \"@bitwarden/common/models/request/collectionRequest\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selectionReadOnlyRequest\";\nimport { GroupResponse } from \"@bitwarden/common/models/response/groupResponse\";\n\n@Component({\n selector: \"app-collection-add-edit\",\n templateUrl: \"collection-add-edit.component.html\",\n})\nexport class CollectionAddEditComponent implements OnInit {\n @Input() collectionId: string;\n @Input() organizationId: string;\n @Input() canSave: boolean;\n @Input() canDelete: boolean;\n @Output() onSavedCollection = new EventEmitter();\n @Output() onDeletedCollection = new EventEmitter();\n\n loading = true;\n editMode = false;\n accessGroups = false;\n title: string;\n name: string;\n externalId: string;\n groups: GroupResponse[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n\n private orgKey: SymmetricCryptoKey;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private logService: LogService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n const organization = await this.organizationService.get(this.organizationId);\n this.accessGroups = organization.useGroups;\n this.editMode = this.loading = this.collectionId != null;\n if (this.accessGroups) {\n const groupsResponse = await this.apiService.getGroups(this.organizationId);\n this.groups = groupsResponse.data\n .map((r) => r)\n .sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n this.orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editCollection\");\n try {\n const collection = await this.apiService.getCollectionDetails(\n this.organizationId,\n this.collectionId\n );\n this.name = await this.cryptoService.decryptToUtf8(\n new EncString(collection.name),\n this.orgKey\n );\n this.externalId = collection.externalId;\n if (collection.groups != null && this.groups.length > 0) {\n collection.groups.forEach((s) => {\n const group = this.groups.filter((g) => !g.accessAll && g.id === s.id);\n if (group != null && group.length > 0) {\n (group[0] as any).checked = true;\n (group[0] as any).readOnly = s.readOnly;\n (group[0] as any).hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"addCollection\");\n }\n\n this.groups.forEach((g) => {\n if (g.accessAll) {\n (g as any).checked = true;\n }\n });\n\n this.loading = false;\n }\n\n check(g: GroupResponse, select?: boolean) {\n if (g.accessAll) {\n return;\n }\n (g as any).checked = select == null ? !(g as any).checked : select;\n if (!(g as any).checked) {\n (g as any).readOnly = false;\n (g as any).hidePasswords = false;\n }\n }\n\n selectAll(select: boolean) {\n this.groups.forEach((g) => this.check(g, select));\n }\n\n async submit() {\n if (this.orgKey == null) {\n throw new Error(\"No encryption key for this organization.\");\n }\n\n const request = new CollectionRequest();\n request.name = (await this.cryptoService.encrypt(this.name, this.orgKey)).encryptedString;\n request.externalId = this.externalId;\n request.groups = this.groups\n .filter((g) => (g as any).checked && !g.accessAll)\n .map(\n (g) => new SelectionReadOnlyRequest(g.id, !!(g as any).readOnly, !!(g as any).hidePasswords)\n );\n\n try {\n if (this.editMode) {\n this.formPromise = this.apiService.putCollection(\n this.organizationId,\n this.collectionId,\n request\n );\n } else {\n this.formPromise = this.apiService.postCollection(this.organizationId, request);\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedCollectionId\" : \"createdCollectionId\", this.name)\n );\n this.onSavedCollection.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteCollectionConfirmation\"),\n this.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteCollection(this.organizationId, this.collectionId);\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedCollectionId\", this.name)\n );\n this.onDeletedCollection.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","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","
\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 \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/selectionReadOnlyRequest\";\nimport { OrganizationUserUserDetailsResponse } from \"@bitwarden/common/models/response/organizationUserResponse\";\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.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collectionData\";\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/collectionResponse\";\nimport { ListResponse } from \"@bitwarden/common/models/response/listResponse\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collectionView\";\n\nimport { CollectionAddEditComponent } from \"./collection-add-edit.component\";\nimport { EntityUsersComponent } from \"./entity-users.component\";\n\n@Component({\n selector: \"app-org-manage-collections\",\n templateUrl: \"collections.component.html\",\n})\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 { EventType } from \"../../enums/eventType\";\n\nexport class EventView {\n message: string;\n humanReadableMessage: string;\n appIcon: string;\n appName: string;\n userId: string;\n userName: string;\n userEmail: string;\n date: string;\n ip: string;\n type: EventType;\n installationId: string;\n\n constructor(data: Required) {\n this.message = data.message;\n this.humanReadableMessage = data.humanReadableMessage;\n this.appIcon = data.appIcon;\n this.appName = data.appName;\n this.userId = data.userId;\n this.userName = data.userName;\n this.userEmail = data.userEmail;\n this.date = data.date;\n this.ip = data.ip;\n this.type = data.type;\n this.installationId = data.installationId;\n }\n}\n","import { Directive } from \"@angular/core\";\n\nimport { ExportService } from \"@bitwarden/common/abstractions/export.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { EventResponse } from \"@bitwarden/common/models/response/eventResponse\";\nimport { ListResponse } from \"@bitwarden/common/models/response/listResponse\";\nimport { EventView } from \"@bitwarden/common/models/view/eventView\";\n\nimport { EventService } from \"../core\";\n\n@Directive()\nexport abstract class BaseEventsComponent {\n loading = true;\n loaded = false;\n events: EventView[];\n start: string;\n end: string;\n dirtyDates = true;\n continuationToken: string;\n refreshPromise: Promise;\n exportPromise: Promise;\n morePromise: Promise;\n\n abstract readonly exportFileName: string;\n\n constructor(\n protected eventService: EventService,\n protected i18nService: I18nService,\n protected exportService: ExportService,\n protected platformUtilsService: PlatformUtilsService,\n protected logService: LogService,\n protected fileDownloadService: FileDownloadService\n ) {\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n }\n\n async exportEvents() {\n if (this.appApiPromiseUnfulfilled() || this.dirtyDates) {\n return;\n }\n\n this.loading = true;\n\n const dates = this.parseDates();\n if (dates == null) {\n return;\n }\n\n try {\n this.exportPromise = this.export(dates[0], dates[1]);\n\n await this.exportPromise;\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n\n this.exportPromise = null;\n this.loading = false;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.appApiPromiseUnfulfilled()) {\n return;\n }\n\n const dates = this.parseDates();\n if (dates == null) {\n return;\n }\n\n this.loading = true;\n let events: EventView[] = [];\n try {\n const promise = this.loadAndParseEvents(\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n const result = await promise;\n this.continuationToken = result.continuationToken;\n events = result.events;\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.dirtyDates = false;\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n\n protected abstract requestEvents(\n startDate: string,\n endDate: string,\n continuationToken: string\n ): Promise>;\n protected abstract getUserName(r: EventResponse, userId: string): { name: string; email: string };\n\n protected async loadAndParseEvents(\n startDate: string,\n endDate: string,\n continuationToken: string\n ) {\n const response = await this.requestEvents(startDate, endDate, continuationToken);\n\n const events = await Promise.all(\n response.data.map(async (r) => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = await this.eventService.getEventInfo(r);\n const user = this.getUserName(r, userId);\n const userName = user != null ? user.name : this.i18nService.t(\"unknown\");\n\n return new EventView({\n message: eventInfo.message,\n humanReadableMessage: eventInfo.humanReadableMessage,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: r.installationId != null ? `Installation: ${r.installationId}` : userName,\n userEmail: user != null ? user.email : \"\",\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n installationId: r.installationId,\n });\n })\n );\n return { continuationToken: response.continuationToken, events: events };\n }\n\n protected parseDates() {\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidDateRange\")\n );\n return null;\n }\n return dates;\n }\n\n protected appApiPromiseUnfulfilled() {\n return this.refreshPromise != null || this.morePromise != null || this.exportPromise != null;\n }\n\n private async export(start: string, end: string) {\n let continuationToken = this.continuationToken;\n let events = [].concat(this.events);\n\n while (continuationToken != null) {\n const result = await this.loadAndParseEvents(start, end, continuationToken);\n continuationToken = result.continuationToken;\n events = events.concat(result.events);\n }\n\n const data = await this.exportService.getEventExport(events);\n const fileName = this.exportService.getFileName(this.exportFileName, \"csv\");\n this.fileDownloadService.download({\n fileName,\n blobData: data,\n blobOptions: { type: \"text/plain\" },\n });\n }\n}\n","
\n

{{ \"eventLogs\" | i18n }}

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

{{ \"noEventsInList\" | i18n }}

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"timestamp\" | i18n }}\n {{ \"device\" | i18n }}\n {{ \"user\" | i18n }}{{ \"event\" | i18n }}
{{ e.date | date: \"medium\" }}\n \n {{ e.appName }}, {{ e.ip }}\n \n {{ e.userName }}\n
\n \n \n {{ \"loadMore\" | i18n }}\n \n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { ExportService } from \"@bitwarden/common/abstractions/export.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { EventResponse } from \"@bitwarden/common/models/response/eventResponse\";\n\nimport { BaseEventsComponent } from \"../../common/base.events.component\";\nimport { EventService } from \"../../core\";\n\n@Component({\n selector: \"app-org-events\",\n templateUrl: \"events.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class EventsComponent extends BaseEventsComponent implements OnInit {\n exportFileName = \"org-events\";\n organizationId: string;\n organization: Organization;\n\n private orgUsersUserIdMap = new Map();\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n eventService: EventService,\n i18nService: I18nService,\n exportService: ExportService,\n platformUtilsService: PlatformUtilsService,\n private router: Router,\n logService: LogService,\n private userNamePipe: UserNamePipe,\n private organizationService: OrganizationService,\n private providerService: ProviderService,\n fileDownloadService: FileDownloadService\n ) {\n super(\n eventService,\n i18nService,\n exportService,\n platformUtilsService,\n logService,\n fileDownloadService\n );\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n this.organization = await this.organizationService.get(this.organizationId);\n if (this.organization == null || !this.organization.useEvents) {\n this.router.navigate([\"/organizations\", this.organizationId]);\n return;\n }\n\n await this.load();\n });\n }\n\n async load() {\n const response = await this.apiService.getOrganizationUsers(this.organizationId);\n response.data.forEach((u) => {\n const name = this.userNamePipe.transform(u);\n this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n });\n\n if (this.organization.providerId != null) {\n try {\n const provider = await this.providerService.get(this.organization.providerId);\n if (\n provider != null &&\n (await this.providerService.get(this.organization.providerId)).canManageUsers\n ) {\n const providerUsersResponse = await this.apiService.getProviderUsers(\n this.organization.providerId\n );\n providerUsersResponse.data.forEach((u) => {\n const name = this.userNamePipe.transform(u);\n this.orgUsersUserIdMap.set(u.userId, {\n name: `${name} (${this.organization.providerName})`,\n email: u.email,\n });\n });\n }\n } catch (e) {\n this.logService.warning(e);\n }\n }\n\n await this.loadEvents(true);\n this.loaded = true;\n }\n\n protected requestEvents(startDate: string, endDate: string, continuationToken: string) {\n return this.apiService.getEventsOrganization(\n this.organizationId,\n startDate,\n endDate,\n continuationToken\n );\n }\n\n protected getUserName(r: EventResponse, userId: string) {\n if (userId == null) {\n return null;\n }\n\n if (this.orgUsersUserIdMap.has(userId)) {\n return this.orgUsersUserIdMap.get(userId);\n }\n\n if (r.providerId != null && r.providerId === this.organization.providerId) {\n return {\n name: this.organization.providerName,\n };\n }\n\n return null;\n }\n}\n","import { SelectionReadOnlyRequest } from \"./selectionReadOnlyRequest\";\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/collectionData\";\nimport { Collection } from \"@bitwarden/common/models/domain/collection\";\nimport { GroupRequest } from \"@bitwarden/common/models/request/groupRequest\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selectionReadOnlyRequest\";\nimport { CollectionDetailsResponse } from \"@bitwarden/common/models/response/collectionResponse\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collectionView\";\n\n@Component({\n selector: \"app-group-add-edit\",\n templateUrl: \"group-add-edit.component.html\",\n})\nexport class GroupAddEditComponent implements OnInit {\n @Input() groupId: string;\n @Input() organizationId: string;\n @Output() onSavedGroup = new EventEmitter();\n @Output() onDeletedGroup = new EventEmitter();\n\n loading = true;\n editMode = false;\n title: string;\n name: string;\n externalId: string;\n access: \"all\" | \"selected\" = \"selected\";\n collections: CollectionView[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.editMode = this.loading = this.groupId != null;\n await this.loadCollections();\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editGroup\");\n try {\n const group = await this.apiService.getGroupDetails(this.organizationId, this.groupId);\n this.access = group.accessAll ? \"all\" : \"selected\";\n this.name = group.name;\n this.externalId = group.externalId;\n if (group.collections != null && this.collections != null) {\n group.collections.forEach((s) => {\n const collection = this.collections.filter((c) => c.id === s.id);\n if (collection != null && collection.length > 0) {\n (collection[0] as any).checked = true;\n collection[0].readOnly = s.readOnly;\n collection[0].hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"addGroup\");\n }\n\n this.loading = false;\n }\n\n async loadCollections() {\n const response = await this.apiService.getCollections(this.organizationId);\n const collections = response.data.map(\n (r) => new Collection(new CollectionData(r as CollectionDetailsResponse))\n );\n this.collections = await this.collectionService.decryptMany(collections);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n if (!(c as any).checked) {\n c.readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.collections.forEach((c) => this.check(c, select));\n }\n\n async submit() {\n const request = new GroupRequest();\n request.name = this.name;\n request.externalId = this.externalId;\n request.accessAll = this.access === \"all\";\n if (!request.accessAll) {\n request.collections = this.collections\n .filter((c) => (c as any).checked)\n .map((c) => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));\n }\n\n try {\n if (this.editMode) {\n this.formPromise = this.apiService.putGroup(this.organizationId, this.groupId, request);\n } else {\n this.formPromise = this.apiService.postGroup(this.organizationId, request);\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedGroupId\" : \"createdGroupId\", this.name)\n );\n this.onSavedGroup.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteGroupConfirmation\"),\n this.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteGroup(this.organizationId, this.groupId);\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedGroupId\", this.name)\n );\n this.onDeletedGroup.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n

{{ \"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/groupResponse\";\n\nimport { EntityUsersComponent } from \"./entity-users.component\";\nimport { GroupAddEditComponent } from \"./group-add-edit.component\";\n\n@Component({\n selector: \"app-org-groups\",\n templateUrl: \"groups.component.html\",\n})\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.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 {{ \"people\" | i18n }}\n \n \n {{ \"collections\" | i18n }}\n \n \n {{ \"groups\" | i18n }}\n \n \n {{ \"policies\" | i18n }}\n \n \n {{ \"singleSignOn\" | i18n }}\n \n \n {{ \"scim\" | i18n }}\n \n \n {{ \"eventLogs\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\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 { ValidationService } from \"@bitwarden/angular/services/validation.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 { 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/listResponse\";\nimport { OrganizationUserUserDetailsResponse } from \"@bitwarden/common/models/response/organizationUserResponse\";\nimport { ProviderUserUserDetailsResponse } from \"@bitwarden/common/models/response/provider/providerUserResponse\";\n\nimport { UserConfirmComponent } from \"../organizations/manage/user-confirm.component\";\n\ntype StatusType = OrganizationUserStatusType | ProviderUserStatusType;\n\nconst MaxCheckedCount = 500;\n\n@Directive()\nexport abstract class BasePeopleComponent<\n UserType extends ProviderUserUserDetailsResponse | OrganizationUserUserDetailsResponse\n> {\n @ViewChild(\"confirmTemplate\", { read: ViewContainerRef, static: true })\n confirmModalRef: ViewContainerRef;\n\n get allCount() {\n return this.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(Utils.getSortFunction(this.i18nService, \"email\"));\n this.allUsers.forEach((u) => {\n if (!this.statusMap.has(u.status)) {\n this.statusMap.set(u.status, [u]);\n } else {\n this.statusMap.get(u.status).push(u);\n }\n 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/organizationUserBulkConfirmRequest\";\nimport { OrganizationUserBulkRequest } from \"@bitwarden/common/models/request/organizationUserBulkRequest\";\n\nimport { BulkUserDetails } from \"./bulk-status.component\";\n\n@Component({\n selector: \"app-bulk-confirm\",\n templateUrl: \"bulk-confirm.component.html\",\n})\nexport class BulkConfirmComponent implements OnInit {\n @Input() organizationId: string;\n @Input() users: BulkUserDetails[];\n\n excludedUsers: BulkUserDetails[];\n filteredUsers: BulkUserDetails[];\n publicKeys: Map = new Map();\n fingerprints: Map = new Map();\n statuses: Map = new Map();\n\n loading = true;\n done = false;\n error: string;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n this.excludedUsers = this.users.filter((u) => !this.isAccepted(u));\n this.filteredUsers = this.users.filter((u) => this.isAccepted(u));\n\n if (this.filteredUsers.length <= 0) {\n this.done = true;\n }\n\n const response = await this.getPublicKeys();\n\n for (const entry of response.data) {\n const publicKey = Utils.fromB64ToArray(entry.key);\n const fingerprint = await this.cryptoService.getFingerprint(entry.userId, publicKey.buffer);\n if (fingerprint != null) {\n this.publicKeys.set(entry.id, publicKey);\n this.fingerprints.set(entry.id, fingerprint.join(\"-\"));\n }\n }\n\n this.loading = false;\n }\n\n async submit() {\n this.loading = true;\n try {\n const key = await this.getCryptoKey();\n const userIdsWithKeys: any[] = [];\n for (const user of this.filteredUsers) {\n const publicKey = this.publicKeys.get(user.id);\n if (publicKey == null) {\n continue;\n }\n const encryptedKey = await this.cryptoService.rsaEncrypt(key.key, publicKey.buffer);\n userIdsWithKeys.push({\n id: user.id,\n key: encryptedKey.encryptedString,\n });\n }\n const response = await this.postConfirmRequest(userIdsWithKeys);\n\n response.data.forEach((entry) => {\n const error = entry.error !== \"\" ? entry.error : this.i18nService.t(\"bulkConfirmMessage\");\n this.statuses.set(entry.id, error);\n });\n\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n this.loading = false;\n }\n\n protected isAccepted(user: BulkUserDetails) {\n return user.status === OrganizationUserStatusType.Accepted;\n }\n\n protected async getPublicKeys() {\n const request = new OrganizationUserBulkRequest(this.filteredUsers.map((user) => user.id));\n return await this.apiService.postOrganizationUsersPublicKey(this.organizationId, request);\n }\n\n protected getCryptoKey() {\n return this.cryptoService.getOrgKey(this.organizationId);\n }\n\n protected async postConfirmRequest(userIdsWithKeys: any[]) {\n const request = new OrganizationUserBulkConfirmRequest(userIdsWithKeys);\n return await this.apiService.postOrganizationUserBulkConfirm(this.organizationId, request);\n }\n}\n","
\n
\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 \n {{ user.email }}\n {{ user.name }}\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}{{ \"status\" | i18n }}
\n \n \n \n {{ user.email }}\n {{ user.name }}\n \n {{ statuses.get(user.id) }}\n \n {{ \"bulkFilteredMessage\" | i18n }}\n
\n
\n
\n
\n 0\"\n [disabled]=\"loading\"\n (click)=\"submit()\"\n >\n \n {{ \"removeUsers\" | i18n }}\n \n \n
\n
\n
\n
\n","import { Component, 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/organizationUserBulkRequest\";\n\nimport { BulkUserDetails } from \"./bulk-status.component\";\n\n@Component({\n selector: \"app-bulk-remove\",\n templateUrl: \"bulk-remove.component.html\",\n})\nexport class BulkRemoveComponent {\n @Input() organizationId: string;\n @Input() users: BulkUserDetails[];\n\n statuses: Map = new Map();\n\n loading = false;\n done = false;\n error: string;\n\n constructor(protected apiService: ApiService, protected i18nService: I18nService) {}\n\n async submit() {\n this.loading = true;\n try {\n const response = await this.deleteUsers();\n\n response.data.forEach((entry) => {\n const error = entry.error !== \"\" ? entry.error : this.i18nService.t(\"bulkRemovedMessage\");\n this.statuses.set(entry.id, error);\n });\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n\n this.loading = false;\n }\n\n protected async deleteUsers() {\n const request = new OrganizationUserBulkRequest(this.users.map((user) => user.id));\n return await this.apiService.deleteManyOrganizationUsers(this.organizationId, request);\n }\n\n 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 \n {{ user.email }}\n {{ user.name }}\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}{{ \"status\" | i18n }}
\n \n \n \n {{ user.email }}\n {{ user.name }}\n \n {{ statuses.get(user.id) }}\n \n {{ \"bulkFilteredMessage\" | i18n }}\n
\n
\n
\n
\n 0\"\n [disabled]=\"loading\"\n (click)=\"submit()\"\n >\n \n {{ 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/organizationUserBulkRequest\";\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/eventResponse\";\nimport { ListResponse } from \"@bitwarden/common/models/response/listResponse\";\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 { Component, EventEmitter, Input, OnInit, Output, ViewChild } from \"@angular/core\";\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/encString\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/masterPasswordPolicyOptions\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\nimport { OrganizationUserResetPasswordRequest } from \"@bitwarden/common/models/request/organizationUserResetPasswordRequest\";\n\n@Component({\n selector: \"app-reset-password\",\n templateUrl: \"reset-password.component.html\",\n})\nexport class ResetPasswordComponent implements OnInit {\n @Input() name: string;\n @Input() email: string;\n @Input() id: string;\n @Input() organizationId: string;\n @Output() onPasswordReset = new EventEmitter();\n @ViewChild(PasswordStrengthComponent) passwordStrengthComponent: PasswordStrengthComponent;\n\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n newPassword: string = null;\n showPassword = false;\n passwordStrengthResult: zxcvbn.ZXCVBNResult;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private passwordGenerationService: PasswordGenerationService,\n private policyService: PolicyService,\n private cryptoService: CryptoService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n // Get Enforced Policy Options\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions();\n }\n\n get loggedOutWarningName() {\n return this.name != null ? this.name : this.i18nService.t(\"thisUser\");\n }\n\n async generatePassword() {\n const options = (await this.passwordGenerationService.getOptions())[0];\n this.newPassword = await this.passwordGenerationService.generatePassword(options);\n this.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/permissionsApi\";\n\nimport { SelectionReadOnlyRequest } from \"./selectionReadOnlyRequest\";\n\nexport class OrganizationUserInviteRequest {\n emails: string[] = [];\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","import { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\n\nimport { SelectionReadOnlyRequest } from \"./selectionReadOnlyRequest\";\n\nexport class OrganizationUserUpdateRequest {\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","
\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
\n \n

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

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

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

\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n  \n {{ \"name\" | i18n }}\n {{ \"hidePasswords\" | i18n }}\n {{ \"readOnly\" | i18n }}\n \n \n \n \n \n \n \n \n {{ c.name }}\n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n \n
\n \n \n {{ \"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 { 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/permissionsApi\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collectionData\";\nimport { Collection } from \"@bitwarden/common/models/domain/collection\";\nimport { OrganizationUserInviteRequest } from \"@bitwarden/common/models/request/organizationUserInviteRequest\";\nimport { OrganizationUserUpdateRequest } from \"@bitwarden/common/models/request/organizationUserUpdateRequest\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selectionReadOnlyRequest\";\nimport { CollectionDetailsResponse } from \"@bitwarden/common/models/response/collectionResponse\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collectionView\";\n\n@Component({\n selector: \"app-user-add-edit\",\n templateUrl: \"user-add-edit.component.html\",\n})\nexport class UserAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() organizationUserId: string;\n @Input() organizationId: string;\n @Input() usesKeyConnector = false;\n @Output() onSavedUser = new EventEmitter();\n @Output() onDeletedUser = new EventEmitter();\n @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\n manageAllCollectionsCheckboxes = [\n {\n id: \"createNewCollections\",\n get: () => this.permissions.createNewCollections,\n set: (v: boolean) => (this.permissions.createNewCollections = v),\n },\n {\n id: \"editAnyCollection\",\n get: () => this.permissions.editAnyCollection,\n set: (v: boolean) => (this.permissions.editAnyCollection = v),\n },\n {\n id: \"deleteAnyCollection\",\n get: () => this.permissions.deleteAnyCollection,\n set: (v: boolean) => (this.permissions.deleteAnyCollection = v),\n },\n ];\n\n manageAssignedCollectionsCheckboxes = [\n {\n id: \"editAssignedCollections\",\n get: () => this.permissions.editAssignedCollections,\n set: (v: boolean) => (this.permissions.editAssignedCollections = v),\n },\n {\n id: \"deleteAssignedCollections\",\n get: () => this.permissions.deleteAssignedCollections,\n set: (v: boolean) => (this.permissions.deleteAssignedCollections = v),\n },\n ];\n\n get customUserTypeSelected(): boolean {\n return this.type === OrganizationUserType.Custom;\n }\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.editMode = this.loading = this.organizationUserId != null;\n await this.loadCollections();\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editUser\");\n try {\n const user = await this.apiService.getOrganizationUser(\n this.organizationId,\n this.organizationUserId\n );\n this.access = user.accessAll ? \"all\" : \"selected\";\n this.type = user.type;\n 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 let collections: SelectionReadOnlyRequest[] = null;\n if (this.access !== \"all\") {\n collections = this.collections\n .filter((c) => (c as any).checked)\n .map((c) => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));\n }\n\n try {\n if (this.editMode) {\n const request = new OrganizationUserUpdateRequest();\n request.accessAll = this.access === \"all\";\n request.type = this.type;\n request.collections = collections;\n request.permissions = this.setRequestPermissions(\n request.permissions ?? new PermissionsApi(),\n request.type !== OrganizationUserType.Custom\n );\n this.formPromise = this.apiService.putOrganizationUser(\n this.organizationId,\n this.organizationUserId,\n request\n );\n } else {\n const request = new OrganizationUserInviteRequest();\n request.emails = [...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 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","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/organizationUserUpdateGroupsRequest\";\nimport { GroupResponse } from \"@bitwarden/common/models/response/groupResponse\";\n\n@Component({\n selector: \"app-user-groups\",\n templateUrl: \"user-groups.component.html\",\n})\nexport class UserGroupsComponent implements OnInit {\n @Input() name: string;\n @Input() organizationUserId: string;\n @Input() organizationId: string;\n @Output() onSavedUser = new EventEmitter();\n\n loading = true;\n groups: GroupResponse[] = [];\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n const groupsResponse = await this.apiService.getGroups(this.organizationId);\n const groups = groupsResponse.data.map((r) => r);\n groups.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n this.groups = groups;\n\n try {\n const userGroups = await this.apiService.getOrganizationUserGroups(\n this.organizationId,\n this.organizationUserId\n );\n if (userGroups != null && this.groups != null) {\n userGroups.forEach((ug) => {\n const group = this.groups.filter((g) => g.id === ug);\n if (group != null && group.length > 0) {\n (group[0] as any).checked = true;\n }\n });\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n this.loading = false;\n }\n\n check(g: GroupResponse, select?: boolean) {\n (g as any).checked = select == null ? !(g as any).checked : select;\n if (!(g as any).checked) {\n (g as any).readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.groups.forEach((g) => this.check(g, select));\n }\n\n async submit() {\n const request = new OrganizationUserUpdateGroupsRequest();\n request.groupIds = this.groups.filter((g) => (g as any).checked).map((g) => g.id);\n\n try {\n this.formPromise = this.apiService.putOrganizationUserGroups(\n this.organizationId,\n this.organizationUserId,\n request\n );\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"editedGroupsForUser\", this.name)\n );\n this.onSavedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n

{{ \"people\" | i18n }}

\n
\n
\n \n {{ \"all\" | i18n }}\n {{ allCount }}\n \n \n {{ \"invited\" | i18n }}\n {{ invitedCount }}\n \n \n {{ \"accepted\" | i18n }}\n {{ acceptedCount }}\n \n \n {{ \"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 \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, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ValidationService } from \"@bitwarden/angular/services/validation.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 { OrganizationService } from \"@bitwarden/common/abstractions/organization.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 { 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 { 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/organizationKeysRequest\";\nimport { OrganizationUserBulkRequest } from \"@bitwarden/common/models/request/organizationUserBulkRequest\";\nimport { OrganizationUserConfirmRequest } from \"@bitwarden/common/models/request/organizationUserConfirmRequest\";\nimport { ListResponse } from \"@bitwarden/common/models/response/listResponse\";\nimport { OrganizationUserBulkResponse } from \"@bitwarden/common/models/response/organizationUserBulkResponse\";\nimport { OrganizationUserUserDetailsResponse } from \"@bitwarden/common/models/response/organizationUserResponse\";\n\nimport { BasePeopleComponent } from \"../../common/base.people.component\";\n\nimport { BulkConfirmComponent } from \"./bulk/bulk-confirm.component\";\nimport { BulkRemoveComponent } from \"./bulk/bulk-remove.component\";\nimport { 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})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class PeopleComponent\n extends BasePeopleComponent\n implements OnInit\n{\n @ViewChild(\"addEdit\", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild(\"groupsTemplate\", { read: ViewContainerRef, static: true })\n groupsModalRef: ViewContainerRef;\n @ViewChild(\"eventsTemplate\", { read: ViewContainerRef, static: true })\n eventsModalRef: ViewContainerRef;\n @ViewChild(\"confirmTemplate\", { read: ViewContainerRef, static: true })\n confirmModalRef: ViewContainerRef;\n @ViewChild(\"resetPasswordTemplate\", { read: ViewContainerRef, static: true })\n resetPasswordModalRef: ViewContainerRef;\n @ViewChild(\"bulkStatusTemplate\", { read: ViewContainerRef, static: true })\n bulkStatusModalRef: ViewContainerRef;\n @ViewChild(\"bulkConfirmTemplate\", { read: ViewContainerRef, static: true })\n bulkConfirmModalRef: ViewContainerRef;\n @ViewChild(\"bulkRemoveTemplate\", { read: ViewContainerRef, static: true })\n bulkRemoveModalRef: ViewContainerRef;\n\n userType = OrganizationUserType;\n userStatusType = OrganizationUserStatusType;\n\n organizationId: string;\n status: OrganizationUserStatusType = null;\n accessEvents = false;\n accessGroups = false;\n canResetPassword = false; // User permission (admin/custom)\n orgUseResetPassword = false; // Org plan ability\n orgHasKeys = false; // Org public/private keys\n orgResetPasswordPolicyEnabled = false;\n callingUserType: OrganizationUserType = null;\n\n constructor(\n apiService: ApiService,\n private route: ActivatedRoute,\n i18nService: I18nService,\n modalService: ModalService,\n platformUtilsService: PlatformUtilsService,\n cryptoService: CryptoService,\n private router: Router,\n searchService: SearchService,\n validationService: ValidationService,\n private policyApiService: PolicyApiServiceAbstraction,\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 // 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 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(this.organizationId, request);\n if (response != null) {\n this.orgHasKeys = response.publicKey != null && response.privateKey != null;\n await this.syncService.fullSync(true); // Replace oganizations with new data\n } else {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n }\n\n await this.load();\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n this.searchText = qParams.search;\n if (qParams.viewEvents != null) {\n const user = this.users.filter((u) => u.id === qParams.viewEvents);\n if (user.length > 0 && user[0].status === OrganizationUserStatusType.Confirmed) {\n this.events(user[0]);\n }\n }\n });\n });\n }\n\n async load() {\n const resetPasswordPolicy = await this.policyApiService.getPolicyForOrganization(\n PolicyType.ResetPassword,\n this.organizationId\n );\n this.orgResetPasswordPolicyEnabled = resetPasswordPolicy?.enabled;\n super.load();\n }\n\n getUsers(): Promise> {\n return this.apiService.getOrganizationUsers(this.organizationId);\n }\n\n deleteUser(id: string): Promise {\n return this.apiService.deleteOrganizationUser(this.organizationId, id);\n }\n\n 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","
\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/policyRequest\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policyResponse\";\n\nimport { BasePolicy, BasePolicyComponent } from \"../policies/base-policy.component\";\n\n@Component({\n selector: \"app-policy-edit\",\n templateUrl: \"policy-edit.component.html\",\n})\nexport class PolicyEditComponent {\n @Input() policy: BasePolicy;\n @Input() organizationId: string;\n @Input() policiesEnabledMap: Map = new Map();\n @Output() onSavedPolicy = new EventEmitter();\n\n @ViewChild(\"policyForm\", { read: ViewContainerRef, static: true })\n policyFormRef: ViewContainerRef;\n\n policyType = PolicyType;\n loading = true;\n enabled = false;\n formPromise: Promise;\n defaultTypes: any[];\n policyComponent: BasePolicyComponent;\n\n private policyResponse: PolicyResponse;\n\n constructor(\n private 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.service\";\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/policyResponse\";\n\nimport { PolicyListService } from \"../../core\";\nimport { BasePolicy } from \"../policies/base-policy.component\";\n\nimport { PolicyEditComponent } from \"./policy-edit.component\";\n\n@Component({\n selector: \"app-org-policies\",\n templateUrl: \"policies.component.html\",\n})\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 \"./organizationKeysRequest\";\n\nexport class OrganizationUpdateRequest {\n name: string;\n identifier: string;\n businessName: string;\n billingEmail: string;\n keys: OrganizationKeysRequest;\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/secretVerificationRequest\";\nimport { ApiKeyResponse } from \"@bitwarden/common/models/response/apiKeyResponse\";\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","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

{{ \"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 { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.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/cipherView\";\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

{{ \"myOrganization\" | i18n }}

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

{{ \"apiKey\" | i18n }}

\n
\n

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

\n \n \n
\n
\n

{{ \"taxInformation\" | i18n }}

\n
\n

{{ \"taxInformationDesc\" | i18n }}

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

{{ \"dangerZone\" | i18n }}

\n
\n
\n
\n

{{ \"dangerZoneDesc\" | i18n }}

\n \n \n
\n
\n\n\n\n\n","import { Component, 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 { 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.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 { OrganizationKeysRequest } from \"@bitwarden/common/models/request/organizationKeysRequest\";\nimport { OrganizationUpdateRequest } from \"@bitwarden/common/models/request/organizationUpdateRequest\";\nimport { OrganizationResponse } from \"@bitwarden/common/models/response/organizationResponse\";\n\nimport { ApiKeyComponent } from \"../../settings/api-key.component\";\nimport { PurgeVaultComponent } from \"../../settings/purge-vault.component\";\nimport { TaxInfoComponent } from \"../../settings/tax-info.component\";\n\nimport { DeleteOrganizationComponent } from \"./delete-organization.component\";\n\n@Component({\n selector: \"app-org-account\",\n templateUrl: \"account.component.html\",\n})\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 @ViewChild(TaxInfoComponent) taxInfo: TaxInfoComponent;\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 apiService: ApiService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private syncService: SyncService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private logService: LogService,\n private router: Router,\n 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 = (\n await this.organizationService.get(this.organizationId)\n ).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).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"organizationUpdated\")\n );\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async submitTaxInfo() {\n this.taxFormPromise = this.taxInfo.submitTaxInfo();\n await this.taxFormPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"taxInfoUpdated\"));\n }\n\n async deleteOrganization() {\n await this.modalService.openViewRef(\n DeleteOrganizationComponent,\n this.deleteModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n // 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","export enum TransactionType {\n Charge = 0,\n Credit = 1,\n PromotionalCredit = 2,\n ReferralCredit = 3,\n Refund = 4,\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.service\";\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/bitPayInvoiceRequest\";\n\n@Component({\n selector: \"app-add-credit\",\n templateUrl: \"add-credit.component.html\",\n})\nexport class AddCreditComponent implements OnInit {\n @Input() creditAmount: string;\n @Input() showOptions = true;\n @Input() method = PaymentMethodType.PayPal;\n @Input() organizationId: string;\n @Output() onAdded = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n @ViewChild(\"ppButtonForm\", { read: ElementRef, static: true }) ppButtonFormRef: ElementRef;\n\n paymentMethodType = PaymentMethodType;\n ppButtonFormAction: string;\n ppButtonBusinessId: string;\n ppButtonCustomField: string;\n ppLoading = false;\n subject: string;\n returnUrl: string;\n formPromise: Promise;\n\n private userId: string;\n private name: string;\n private email: string;\n\n constructor(\n private stateService: StateService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private organizationService: OrganizationService,\n private logService: LogService\n ) {\n const payPalConfig = process.env.PAYPAL_CONFIG as PayPalConfig;\n this.ppButtonFormAction = payPalConfig.buttonAction;\n this.ppButtonBusinessId = payPalConfig.businessId;\n }\n\n async ngOnInit() {\n if (this.organizationId != null) {\n if (this.creditAmount == null) {\n this.creditAmount = \"20.00\";\n }\n this.ppButtonCustomField = \"organization_id:\" + this.organizationId;\n const org = await this.organizationService.get(this.organizationId);\n if (org != null) {\n this.subject = org.name;\n this.name = org.name;\n }\n } else {\n if (this.creditAmount == null) {\n this.creditAmount = \"10.00\";\n }\n this.userId = await this.stateService.getUserId();\n this.subject = await this.stateService.getEmail();\n this.email = this.subject;\n this.ppButtonCustomField = \"user_id:\" + this.userId;\n }\n this.ppButtonCustomField += \",account_credit:1\";\n this.returnUrl = window.location.href;\n }\n\n async submit() {\n if (this.creditAmount == null || this.creditAmount === \"\") {\n return;\n }\n\n if (this.method === PaymentMethodType.PayPal) {\n this.ppButtonFormRef.nativeElement.submit();\n this.ppLoading = true;\n return;\n }\n if (this.method === PaymentMethodType.BitPay) {\n try {\n const req = new BitPayInvoiceRequest();\n req.email = this.email;\n req.name = this.name;\n req.credit = true;\n req.amount = this.creditAmountNumber;\n req.organizationId = this.organizationId;\n req.userId = this.userId;\n req.returnUrl = this.returnUrl;\n this.formPromise = this.apiService.postBitPayInvoice(req);\n const bitPayUrl: string = await this.formPromise;\n this.platformUtilsService.launchUri(bitPayUrl);\n } catch (e) {\n this.logService.error(e);\n }\n return;\n }\n try {\n this.onAdded.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n formatAmount() {\n try {\n if (this.creditAmount != null && this.creditAmount !== \"\") {\n const floatAmount = Math.abs(parseFloat(this.creditAmount));\n if (floatAmount > 0) {\n this.creditAmount = parseFloat((Math.round(floatAmount * 100) / 100).toString())\n .toFixed(2)\n .toString();\n return;\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.creditAmount = \"\";\n }\n\n get creditAmountNumber(): number {\n if (this.creditAmount != null && this.creditAmount !== \"\") {\n try {\n return parseFloat(this.creditAmount);\n } catch (e) {\n this.logService.error(e);\n }\n }\n return null;\n }\n}\n","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../request/organizationTaxInfoUpdateRequest\";\n\nexport class PaymentRequest extends OrganizationTaxInfoUpdateRequest {\n paymentMethodType: PaymentMethodType;\n paymentToken: string;\n}\n","import { 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/paymentRequest\";\n\nimport { PaymentComponent } from \"./payment.component\";\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\n selector: \"app-adjust-payment\",\n templateUrl: \"adjust-payment.component.html\",\n})\nexport class AdjustPaymentComponent {\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent, { static: true }) taxInfoComponent: TaxInfoComponent;\n\n @Input() currentType?: PaymentMethodType;\n @Input() organizationId: string;\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n paymentMethodType = PaymentMethodType;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService,\n 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 {{ \"billing\" | i18n }}\n

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

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

\n

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

\n

{{ \"creditAppliedDesc\" | i18n }}

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

{{ \"paymentMethod\" | i18n }}

\n

{{ \"noPaymentMethod\" | i18n }}

\n \n \n

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

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

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

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

{{ \"invoices\" | i18n }}

\n

{{ \"noInvoices\" | i18n }}

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

{{ \"transactions\" | i18n }}

\n

{{ \"noTransactions\" | i18n }}

\n \n \n \n \n \n \n \n {{ t.amount | currency: \"$\" }}\n \n \n \n
{{ t.createdDate | date: \"mediumDate\" }}\n \n {{ \"chargeNoun\" | i18n }}\n \n {{ \"refundNoun\" | i18n }}\n \n \n {{ t.details }}\n
\n * {{ \"chargesStatement\" | i18n: \"BITWARDEN\" }}\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { 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 { TransactionType } from \"@bitwarden/common/enums/transactionType\";\nimport { VerifyBankRequest } from \"@bitwarden/common/models/request/verifyBankRequest\";\nimport { BillingResponse } from \"@bitwarden/common/models/response/billingResponse\";\n\n@Component({\n selector: \"app-org-billing\",\n templateUrl: \"./organization-billing.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class OrganizationBillingComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n showAdjustPayment = false;\n showAddCredit = false;\n billing: BillingResponse;\n paymentMethodType = PaymentMethodType;\n transactionType = TransactionType;\n organizationId: string;\n verifyAmount1: number;\n verifyAmount2: number;\n\n verifyBankPromise: Promise;\n\n // TODO - Make sure to properly split out the billing/invoice and payment method/account during org admin refresh\n\n constructor(\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private platformUtilsService: PlatformUtilsService,\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 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 if (this.organizationId != null) {\n this.billing = await this.organizationApiService.getBilling(this.organizationId);\n }\n this.loading = false;\n }\n\n async verifyBank() {\n if (this.loading) {\n return;\n }\n\n try {\n const request = new VerifyBankRequest();\n request.amount1 = this.verifyAmount1;\n request.amount2 = this.verifyAmount2;\n this.verifyBankPromise = this.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 addCredit() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"cannotPerformInAppPurchase\"),\n this.i18nService.t(\"addCredit\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n this.showAddCredit = true;\n }\n\n closeAddCredit(load: boolean) {\n this.showAddCredit = false;\n if (load) {\n this.load();\n }\n }\n\n changePayment() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"cannotPerformInAppPurchase\"),\n this.i18nService.t(\"changePaymentMethod\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n this.showAdjustPayment = true;\n }\n\n closePayment(load: boolean) {\n this.showAdjustPayment = false;\n if (load) {\n this.load();\n }\n }\n\n get isCreditBalance() {\n return this.billing == null || this.billing.balance <= 0;\n }\n\n get creditOrBalance() {\n return Math.abs(this.billing != null ? this.billing.balance : 0);\n }\n\n get paymentSource() {\n return this.billing != null ? this.billing.paymentSource : null;\n }\n\n get paymentSourceInApp() {\n return (\n this.paymentSource != null &&\n (this.paymentSource.type === PaymentMethodType.AppleInApp ||\n this.paymentSource.type === PaymentMethodType.GoogleInApp)\n );\n }\n\n get invoices() {\n return this.billing != null ? this.billing.invoices : null;\n }\n\n get transactions() {\n return this.billing != null ? this.billing.transactions : null;\n }\n}\n","export enum OrganizationApiKeyType {\n Default = 0,\n BillingSync = 1,\n Scim = 2,\n}\n","export enum OrganizationConnectionType {\n CloudBillingSync = 1,\n Scim = 2,\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class BillingSyncConfigApi extends BaseResponse {\n billingSyncKey: string;\n\n constructor(data: any) {\n super(data);\n if (data == null) {\n return;\n }\n this.billingSyncKey = this.getResponseProperty(\"BillingSyncKey\");\n }\n}\n","export class BillingSyncConfigRequest {\n constructor(private billingSyncKey: string) {}\n}\n","import { OrganizationConnectionType } from \"../../enums/organizationConnectionType\";\n\nimport { BillingSyncConfigRequest } from \"./billingSyncConfigRequest\";\nimport { ScimConfigRequest } from \"./scimConfigRequest\";\n\n/**API request config types for OrganizationConnectionRequest */\nexport type OrganizationConnectionRequestConfigs = BillingSyncConfigRequest | ScimConfigRequest;\n\nexport class OrganizationConnectionRequest {\n constructor(\n public organizationId: string,\n public type: OrganizationConnectionType,\n public enabled: boolean,\n public config: OrganizationConnectionRequestConfigs\n ) {}\n}\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationConnectionType } from \"@bitwarden/common/enums/organizationConnectionType\";\nimport { BillingSyncConfigApi } from \"@bitwarden/common/models/api/billingSyncConfigApi\";\nimport { BillingSyncConfigRequest } from \"@bitwarden/common/models/request/billingSyncConfigRequest\";\nimport { OrganizationConnectionRequest } from \"@bitwarden/common/models/request/organizationConnectionRequest\";\nimport { OrganizationConnectionResponse } from \"@bitwarden/common/models/response/organizationConnectionResponse\";\n\n@Component({\n selector: \"app-billing-sync-key\",\n templateUrl: \"billing-sync-key.component.html\",\n})\nexport class BillingSyncKeyComponent {\n entityId: string;\n existingConnectionId: string;\n billingSyncKey: string;\n setParentConnection: (connection: OrganizationConnectionResponse) => void;\n\n formPromise: Promise> | Promise;\n\n constructor(private apiService: ApiService, private logService: LogService) {}\n\n async submit() {\n try {\n const request = new OrganizationConnectionRequest(\n this.entityId,\n OrganizationConnectionType.CloudBillingSync,\n true,\n new BillingSyncConfigRequest(this.billingSyncKey)\n );\n if (this.existingConnectionId == null) {\n this.formPromise = this.apiService.createOrganizationConnection(\n request,\n BillingSyncConfigApi\n );\n } else {\n this.formPromise = this.apiService.updateOrganizationConnection(\n request,\n BillingSyncConfigApi,\n this.existingConnectionId\n );\n }\n const response = (await this\n .formPromise) as OrganizationConnectionResponse;\n this.existingConnectionId = response?.id;\n this.billingSyncKey = response?.config?.billingSyncKey;\n this.setParentConnection(response);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async deleteConnection() {\n this.formPromise = this.apiService.deleteOrganizationConnection(this.existingConnectionId);\n await this.formPromise;\n this.setParentConnection(null);\n }\n}\n","
\n
\n \n
\n

{{ \"manageBillingSync\" | i18n }}

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

{{ \"billingSyncKeyDesc\" | i18n }}

\n
\n
\n
\n
\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\n\nimport { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class OrganizationApiKeyRequest extends SecretVerificationRequest {\n type: OrganizationApiKeyType = OrganizationApiKeyType.Default;\n}\n","
\n
\n \n
\n

\n {{ (hasBillingToken ? \"viewBillingSyncToken\" : \"generateBillingSyncToken\") | i18n }}\n

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

{{ \"rotateBillingSyncTokenTitle\" | i18n }}

\n \n {{ \"rotateBillingSyncTokenWarning\" | i18n }}\n \n
\n\n
\n

{{ \"copyPasteBillingSync\" | i18n }}

\n \n
\n \n
\n \n \n \n
\n
\n
\n {{ \"lastSync\" | i18n }}:\n {{ lastSyncDate | date: \"medium\" }}\n
\n
\n \n {{\n (daysBetween === 1 ? \"awaitingSyncSingular\" : \"awaitingSyncPlural\")\n | i18n: daysBetween\n }}\n
\n
\n
\n
\n \n \n \n {{ submitButtonText }}\n \n \n \n {{ \"close\" | i18n }}\n \n \n {{ \"cancel\" | i18n }}\n \n \n {{ \"rotateToken\" | i18n }}\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 { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { OrganizationApiKeyType } from \"@bitwarden/common/enums/organizationApiKeyType\";\nimport { OrganizationApiKeyRequest } from \"@bitwarden/common/models/request/organizationApiKeyRequest\";\nimport { ApiKeyResponse } from \"@bitwarden/common/models/response/apiKeyResponse\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\n@Component({\n selector: \"app-billing-sync-api-key\",\n templateUrl: \"billing-sync-api-key.component.html\",\n})\nexport class BillingSyncApiKeyComponent {\n organizationId: string;\n hasBillingToken: boolean;\n\n showRotateScreen: boolean;\n masterPassword: Verification;\n formPromise: Promise;\n clientSecret?: string;\n keyRevisionDate?: Date;\n lastSyncDate?: Date = null;\n\n constructor(\n private userVerificationService: UserVerificationService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n copy() {\n this.platformUtilsService.copyToClipboard(this.clientSecret);\n }\n\n async submit() {\n if (this.showRotateScreen) {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword, OrganizationApiKeyRequest)\n .then((request) => {\n request.type = OrganizationApiKeyType.BillingSync;\n return this.organizationApiService.rotateApiKey(this.organizationId, request);\n });\n const response = await this.formPromise;\n await this.load(response);\n this.showRotateScreen = false;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"billingSyncApiKeyRotated\")\n );\n } else {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword, OrganizationApiKeyRequest)\n .then((request) => {\n request.type = OrganizationApiKeyType.BillingSync;\n return this.organizationApiService.getOrCreateApiKey(this.organizationId, request);\n });\n const response = await this.formPromise;\n await this.load(response);\n }\n }\n\n async load(response: ApiKeyResponse) {\n this.clientSecret = response.apiKey;\n this.keyRevisionDate = response.revisionDate;\n this.hasBillingToken = true;\n const syncStatus = await this.apiService.getSponsorshipSyncStatus(this.organizationId);\n this.lastSyncDate = syncStatus.lastSyncDate;\n }\n\n cancelRotate() {\n this.showRotateScreen = false;\n }\n\n rotateToken() {\n this.showRotateScreen = true;\n }\n\n private dayDiff(date1: Date, date2: Date): number {\n const diffTime = Math.abs(date2.getTime() - date1.getTime());\n return Math.round(diffTime / (1000 * 60 * 60 * 24));\n }\n\n get submitButtonText(): string {\n if (this.showRotateScreen) {\n return this.i18nService.t(\"rotateToken\");\n }\n\n return this.i18nService.t(this.hasBillingToken ? \"continue\" : \"generateToken\");\n }\n\n get showLastSyncText(): boolean {\n // If the keyRevisionDate is later than the lastSyncDate we need to show\n // a warning that they need to put the billing sync key in their self hosted install\n return this.lastSyncDate && this.lastSyncDate > this.keyRevisionDate;\n }\n\n get showAwaitingSyncText(): boolean {\n return this.lastSyncDate && this.lastSyncDate <= this.keyRevisionDate;\n }\n\n get daysBetween(): number {\n return this.dayDiff(this.keyRevisionDate, new Date());\n }\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/storageRequest\";\nimport { PaymentResponse } from \"@bitwarden/common/models/response/paymentResponse\";\n\nimport { PaymentComponent } from \"./payment.component\";\n\n@Component({\n selector: \"app-adjust-storage\",\n templateUrl: \"adjust-storage.component.html\",\n})\nexport class AdjustStorageComponent {\n @Input() storageGbPrice = 0;\n @Input() add = true;\n @Input() organizationId: string;\n @Input() interval = \"year\";\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n\n storageAdjustment = 0;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private logService: LogService,\n 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","export class OrganizationSubscriptionUpdateRequest {\n constructor(public seatAdjustment: number, public maxAutoscaleSeats?: number) {}\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\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 { OrganizationSubscriptionUpdateRequest } from \"@bitwarden/common/models/request/organizationSubscriptionUpdateRequest\";\n\n@Component({\n selector: \"app-adjust-subscription\",\n templateUrl: \"adjust-subscription.component.html\",\n})\nexport class AdjustSubscription {\n @Input() organizationId: string;\n @Input() maxAutoscaleSeats: number;\n @Input() currentSeatCount: number;\n @Input() seatPrice = 0;\n @Input() interval = \"year\";\n @Output() onAdjusted = new EventEmitter();\n\n formPromise: Promise;\n limitSubscription: boolean;\n newSeatCount: number;\n newMaxSeats: number;\n\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n ngOnInit() {\n this.limitSubscription = this.maxAutoscaleSeats != null;\n this.newSeatCount = this.currentSeatCount;\n this.newMaxSeats = this.maxAutoscaleSeats;\n }\n\n async submit() {\n try {\n const seatAdjustment = this.newSeatCount - this.currentSeatCount;\n const request = new OrganizationSubscriptionUpdateRequest(seatAdjustment, this.newMaxSeats);\n this.formPromise = this.organizationApiService.updateSubscription(\n this.organizationId,\n request\n );\n\n await this.formPromise;\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"subscriptionUpdated\")\n );\n } catch (e) {\n this.logService.error(e);\n }\n this.onAdjusted.emit();\n }\n\n limitSubscriptionChanged() {\n if (!this.limitSubscription) {\n this.newMaxSeats = null;\n }\n }\n\n get adjustedSeatTotal(): number {\n return this.newSeatCount * this.seatPrice;\n }\n\n get maxSeatTotal(): number {\n return this.newMaxSeats * this.seatPrice;\n }\n}\n","
\n
\n
\n
\n \n \n \n {{ \"total\" | i18n }}: {{ newSeatCount || 0 }} ×\n {{ seatPrice | currency: \"$\" }} = {{ adjustedSeatTotal | currency: \"$\" }} /\n {{ interval | i18n }}\n \n
\n
\n
\n
\n
\n \n \n
\n {{ \"limitSubscriptionDesc\" | i18n }}\n
\n
\n
\n
\n \n \n \n {{ \"maxSeatCost\" | i18n }}: {{ newMaxSeats || 0 }} ×\n {{ seatPrice | currency: \"$\" }} = {{ maxSeatTotal | currency: \"$\" }} /\n {{ interval | i18n }}\n \n
\n
\n \n
\n
\n\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlanType } from \"@bitwarden/common/enums/planType\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\n\n@Component({\n selector: \"app-change-plan\",\n templateUrl: \"change-plan.component.html\",\n})\nexport class ChangePlanComponent {\n @Input() organizationId: string;\n @Output() onChanged = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n formPromise: Promise;\n defaultUpgradePlan: PlanType = PlanType.FamiliesAnnually;\n defaultUpgradeProduct: ProductType = ProductType.Families;\n\n constructor(private logService: LogService) {}\n\n async submit() {\n try {\n this.onChanged.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","
\n
\n \n

{{ \"changeBillingPlan\" | i18n }}

\n

{{ \"changeBillingPlanUpgrade\" | i18n }}

\n \n \n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\n\n@Component({\n selector: \"app-download-license\",\n templateUrl: \"download-license.component.html\",\n})\nexport class DownloadLicenseComponent {\n @Input() organizationId: string;\n @Output() onDownloaded = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n installationId: string;\n formPromise: Promise;\n\n constructor(\n private fileDownloadService: FileDownloadService,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async submit() {\n if (this.installationId == null || this.installationId === \"\") {\n return;\n }\n\n try {\n this.formPromise = this.organizationApiService.getLicense(\n this.organizationId,\n this.installationId\n );\n const license = await this.formPromise;\n const licenseString = JSON.stringify(license, null, 2);\n this.fileDownloadService.download({\n fileName: \"bitwarden_organization_license.json\",\n blobData: licenseString,\n });\n this.onDownloaded.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","
\n
\n \n

{{ \"downloadLicense\" | i18n }}

\n
\n
\n
\n \n \n \n \n
\n \n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\n// Component is used so that the SVG can embed CSS color variables\n@Component({\n selector: \"app-image-org-subscription-hidden\",\n templateUrl: \"image-subscription-hidden.component.svg\",\n})\nexport class ImageSubscriptionHiddenComponent {}\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\";\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","
\n

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

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

{{ \"billingManagedByProvider\" | i18n: this.userOrg.providerName }}

\n

{{ \"billingContactProviderForAssistance\" | i18n }}

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

{{ \"subscriptionPendingCanceled\" | i18n }}

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

{{ \"manageSubscription\" | i18n }}

\n

{{ subscriptionDesc }}

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

{{ \"storage\" | i18n }}

\n

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

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

{{ \"selfHostingTitle\" | i18n }}

\n

\n {{ \"selfHostingEnterpriseOrganizationSectionCopy\" | i18n }}\n

\n
\n \n {{ \"downloadLicense\" | i18n }}\n \n \n {{ (hasBillingSyncToken ? \"manageBillingSync\" : \"setUpBillingSync\") | i18n }}\n \n
\n
\n \n
\n

{{ \"additionalOptions\" | i18n }}

\n

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

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

{{ \"updateLicense\" | i18n }}

\n \n
\n
\n
\n

\n {{ \"billingSync\" | i18n }}\n

\n

\n {{ \"billingSyncDesc\" | i18n }}\n

\n \n {{ \"manageBillingSync\" | i18n }}\n \n \n {{ \"lastSync\" | i18n }}:\n \n {{ userOrg.familySponsorshipLastSyncDate | date: \"medium\" }}\n \n \n {{ \"never\" | i18n | lowercase }}\n \n \n
\n
\n\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\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 { 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.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { OrganizationApiKeyType } from \"@bitwarden/common/enums/organizationApiKeyType\";\nimport { OrganizationConnectionType } from \"@bitwarden/common/enums/organizationConnectionType\";\nimport { PlanType } from \"@bitwarden/common/enums/planType\";\nimport { BillingSyncConfigApi } from \"@bitwarden/common/models/api/billingSyncConfigApi\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { OrganizationConnectionResponse } from \"@bitwarden/common/models/response/organizationConnectionResponse\";\nimport { OrganizationSubscriptionResponse } from \"@bitwarden/common/models/response/organizationSubscriptionResponse\";\n\nimport { BillingSyncKeyComponent } from \"../../settings/billing-sync-key.component\";\n\nimport { BillingSyncApiKeyComponent } from \"./billing-sync-api-key.component\";\n\n@Component({\n selector: \"app-org-subscription\",\n templateUrl: \"organization-subscription.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class OrganizationSubscriptionComponent implements OnInit {\n @ViewChild(\"setupBillingSyncTemplate\", { read: ViewContainerRef, static: true })\n setupBillingSyncModalRef: ViewContainerRef;\n\n loading = false;\n firstLoaded = false;\n organizationId: string;\n adjustSeatsAdd = true;\n showAdjustSeats = false;\n showAdjustSeatAutoscale = false;\n adjustStorageAdd = true;\n showAdjustStorage = false;\n showUpdateLicense = false;\n showBillingSyncKey = false;\n showDownloadLicense = false;\n showChangePlan = false;\n sub: OrganizationSubscriptionResponse;\n selfHosted = false;\n hasBillingSyncToken: boolean;\n\n userOrg: Organization;\n existingBillingSyncConnection: OrganizationConnectionResponse;\n\n removeSponsorshipPromise: Promise;\n cancelPromise: Promise;\n reinstatePromise: Promise;\n\n @ViewChild(\"rotateBillingSyncKeyTemplate\", { read: ViewContainerRef, static: true })\n billingSyncKeyViewContainerRef: ViewContainerRef;\n billingSyncKeyRef: [ModalRef, BillingSyncKeyComponent];\n\n constructor(\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private messagingService: MessagingService,\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private logService: LogService,\n private modalService: ModalService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\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 this.firstLoaded = true;\n });\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n\n this.loading = true;\n this.userOrg = await this.organizationService.get(this.organizationId);\n if (this.userOrg.canManageBilling) {\n this.sub = await this.organizationApiService.getSubscription(this.organizationId);\n }\n const apiKeyResponse = await this.organizationApiService.getApiKeyInformation(\n this.organizationId\n );\n this.hasBillingSyncToken = apiKeyResponse.data.some(\n (i) => i.keyType === OrganizationApiKeyType.BillingSync\n );\n\n if (this.selfHosted) {\n this.showBillingSyncKey = await this.apiService.getCloudCommunicationsEnabled();\n }\n\n if (this.showBillingSyncKey) {\n this.existingBillingSyncConnection = await this.apiService.getOrganizationConnection(\n this.organizationId,\n OrganizationConnectionType.CloudBillingSync,\n BillingSyncConfigApi\n );\n }\n\n this.loading = false;\n }\n\n async reinstate() {\n if (this.loading) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"reinstateConfirmation\"),\n this.i18nService.t(\"reinstateSubscription\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"cancel\")\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.reinstatePromise = this.organizationApiService.reinstate(this.organizationId);\n await this.reinstatePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"reinstated\"));\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async cancel() {\n if (this.loading) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"cancelConfirmation\"),\n this.i18nService.t(\"cancelSubscription\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.cancelPromise = this.organizationApiService.cancel(this.organizationId);\n await this.cancelPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"canceledSubscription\")\n );\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async changePlan() {\n this.showChangePlan = !this.showChangePlan;\n }\n\n closeChangePlan(changed: boolean) {\n this.showChangePlan = false;\n }\n\n downloadLicense() {\n this.showDownloadLicense = !this.showDownloadLicense;\n }\n\n async manageBillingSync() {\n const [ref] = await this.modalService.openViewRef(\n BillingSyncApiKeyComponent,\n this.setupBillingSyncModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.hasBillingToken = this.hasBillingSyncToken;\n }\n );\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n ref.onClosed.subscribe(async () => {\n await this.load();\n });\n }\n\n closeDownloadLicense() {\n this.showDownloadLicense = false;\n }\n\n updateLicense() {\n if (this.loading) {\n return;\n }\n this.showUpdateLicense = true;\n }\n\n closeUpdateLicense(updated: boolean) {\n this.showUpdateLicense = false;\n if (updated) {\n this.load();\n this.messagingService.send(\"updatedOrgLicense\");\n }\n }\n\n subscriptionAdjusted() {\n this.load();\n }\n\n adjustStorage(add: boolean) {\n this.adjustStorageAdd = add;\n this.showAdjustStorage = true;\n }\n\n closeStorage(load: boolean) {\n this.showAdjustStorage = false;\n if (load) {\n this.load();\n }\n }\n\n async removeSponsorship() {\n const isConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removeSponsorshipConfirmation\"),\n this.i18nService.t(\"removeSponsorship\"),\n this.i18nService.t(\"remove\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n\n if (!isConfirmed) {\n return;\n }\n\n try {\n this.removeSponsorshipPromise = this.apiService.deleteRemoveSponsorship(this.organizationId);\n await this.removeSponsorshipPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removeSponsorshipSuccess\")\n );\n await this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async manageBillingSyncSelfHosted() {\n this.billingSyncKeyRef = await this.modalService.openViewRef(\n BillingSyncKeyComponent,\n this.billingSyncKeyViewContainerRef,\n (comp) => {\n comp.entityId = this.organizationId;\n comp.existingConnectionId = this.existingBillingSyncConnection?.id;\n comp.billingSyncKey = this.existingBillingSyncConnection?.config?.billingSyncKey;\n comp.setParentConnection = (\n connection: OrganizationConnectionResponse\n ) => {\n this.existingBillingSyncConnection = connection;\n this.billingSyncKeyRef[0].close();\n };\n }\n );\n }\n\n get isExpired() {\n return (\n this.sub != null && this.sub.expiration != null && new Date(this.sub.expiration) < new Date()\n );\n }\n\n get subscriptionMarkedForCancel() {\n return (\n this.subscription != null && !this.subscription.cancelled && this.subscription.cancelAtEndDate\n );\n }\n\n get subscription() {\n return this.sub != null ? this.sub.subscription : null;\n }\n\n get nextInvoice() {\n return this.sub != null ? this.sub.upcomingInvoice : null;\n }\n\n get storagePercentage() {\n return this.sub != null && this.sub.maxStorageGb\n ? +(100 * (this.sub.storageGb / this.sub.maxStorageGb)).toFixed(2)\n : 0;\n }\n\n get storageProgressWidth() {\n return this.storagePercentage < 5 ? 5 : 0;\n }\n\n get billingInterval() {\n const monthly = !this.sub.plan.isAnnual;\n return monthly ? \"month\" : \"year\";\n }\n\n get storageGbPrice() {\n return this.sub.plan.additionalStoragePricePerGb;\n }\n\n get seatPrice() {\n return this.sub.plan.seatPrice;\n }\n\n get seats() {\n return this.sub.seats;\n }\n\n get maxAutoscaleSeats() {\n return this.sub.maxAutoscaleSeats;\n }\n\n get canAdjustSeats() {\n return this.sub.plan.hasAdditionalSeatsOption;\n }\n\n get isSponsoredSubscription(): boolean {\n return this.sub.subscription?.items.some((i) => i.sponsoredSubscriptionItem);\n }\n\n get canDownloadLicense() {\n return (\n (this.sub.planType !== PlanType.Free && this.subscription == null) ||\n (this.subscription != null && !this.subscription.cancelled)\n );\n }\n\n get canManageBillingSync() {\n return (\n !this.selfHosted &&\n (this.sub.planType === PlanType.EnterpriseAnnually ||\n this.sub.planType === PlanType.EnterpriseMonthly ||\n this.sub.planType === PlanType.EnterpriseAnnually2019 ||\n this.sub.planType === PlanType.EnterpriseMonthly2019)\n );\n }\n\n get subscriptionDesc() {\n if (this.sub.planType === PlanType.Free) {\n return this.i18nService.t(\"subscriptionFreePlan\", this.sub.seats.toString());\n } else if (\n this.sub.planType === PlanType.FamiliesAnnually ||\n this.sub.planType === PlanType.FamiliesAnnually2019\n ) {\n if (this.isSponsoredSubscription) {\n return this.i18nService.t(\"subscriptionSponsoredFamiliesPlan\", this.sub.seats.toString());\n } else {\n return this.i18nService.t(\"subscriptionFamiliesPlan\", this.sub.seats.toString());\n }\n } else if (this.sub.maxAutoscaleSeats === this.sub.seats && this.sub.seats != null) {\n return this.i18nService.t(\"subscriptionMaxReached\", this.sub.seats.toString());\n } else if (this.sub.maxAutoscaleSeats == null) {\n return this.i18nService.t(\"subscriptionUserSeatsUnlimitedAutoscale\");\n } else {\n return this.i18nService.t(\n \"subscriptionUserSeatsLimitedAutoscale\",\n this.sub.maxAutoscaleSeats.toString()\n );\n }\n }\n\n get showChangePlanButton() {\n return this.subscription == null && this.sub.planType === PlanType.Free && !this.showChangePlan;\n }\n\n get billingSyncSetUp() {\n return this.existingBillingSyncConnection?.id != null;\n }\n}\n","
\n
\n
\n
\n
{{ \"settings\" | i18n }}
\n
\n \n {{ \"myOrganization\" | i18n }}\n \n \n {{ \"subscription\" | i18n }}\n \n \n {{ \"billing\" | i18n }}\n \n \n {{ \"twoStepLogin\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-org-settings\",\n templateUrl: \"settings.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class SettingsComponent {\n access2fa = false;\n showBilling: boolean;\n\n constructor(\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.params.subscribe(async (params) => {\n const organization = await this.organizationService.get(params.organizationId);\n this.showBilling = !this.platformUtilsService.isSelfHost() && organization.canManageBilling;\n this.access2fa = organization.use2fa;\n });\n }\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorDuoRequest extends SecretVerificationRequest {\n integrationKey: string;\n secretKey: string;\n host: string;\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class TwoFactorProviderRequest extends SecretVerificationRequest {\n type: TwoFactorProviderType;\n}\n","import { 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/secretVerificationRequest\";\nimport { TwoFactorProviderRequest } from \"@bitwarden/common/models/request/twoFactorProviderRequest\";\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 { 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/secretVerificationRequest\";\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","
\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/updateTwoFactorDuoRequest\";\nimport { TwoFactorDuoResponse } from \"@bitwarden/common/models/response/twoFactorDuoResponse\";\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","export class DeviceVerificationRequest {\n unknownDeviceVerificationEnabled: boolean;\n\n constructor(unknownDeviceVerificationEnabled: boolean) {\n this.unknownDeviceVerificationEnabled = unknownDeviceVerificationEnabled;\n }\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\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/updateTwoFactorAuthenticatorRequest\";\nimport { TwoFactorAuthenticatorResponse } from \"@bitwarden/common/models/response/twoFactorAuthenticatorResponse\";\nimport { AuthResponse } from \"@bitwarden/common/types/authResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n// NOTE: There are additional options available but these are just the ones we are current using.\n// See: https://github.com/neocotic/qrious#examples\ninterface QRiousOptions {\n element: HTMLElement;\n value: string;\n size: number;\n}\n\ndeclare global {\n interface Window {\n QRious: new (options: QRiousOptions) => unknown;\n }\n}\n\n@Component({\n selector: \"app-two-factor-authenticator\",\n templateUrl: \"two-factor-authenticator.component.html\",\n})\nexport class TwoFactorAuthenticatorComponent\n extends TwoFactorBaseComponent\n implements OnInit, OnDestroy\n{\n type = TwoFactorProviderType.Authenticator;\n key: string;\n token: string;\n formPromise: Promise;\n\n private qrScript: HTMLScriptElement;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n userVerificationService: UserVerificationService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n private stateService: StateService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n this.qrScript = window.document.createElement(\"script\");\n this.qrScript.src = \"scripts/qrious.min.js\";\n this.qrScript.async = true;\n }\n\n ngOnInit() {\n window.document.body.appendChild(this.qrScript);\n }\n\n ngOnDestroy() {\n window.document.body.removeChild(this.qrScript);\n }\n\n auth(authResponse: AuthResponse) {\n super.auth(authResponse);\n return this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n protected async enable() {\n const request = await this.buildRequestModel(UpdateTwoFactorAuthenticatorRequest);\n request.token = this.token;\n request.key = this.key;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorAuthenticator(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private async processResponse(response: TwoFactorAuthenticatorResponse) {\n this.token = null;\n this.enabled = response.enabled;\n this.key = response.key;\n const email = await this.stateService.getEmail();\n window.setTimeout(() => {\n new window.QRious({\n element: document.getElementById(\"qr\"),\n value:\n \"otpauth://totp/Bitwarden:\" +\n encodeURIComponent(email) +\n \"?secret=\" +\n encodeURIComponent(this.key) +\n \"&issuer=Bitwarden\",\n size: 160,\n });\n }, 100);\n }\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\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/twoFactorEmailRequest\";\nimport { UpdateTwoFactorEmailRequest } from \"@bitwarden/common/models/request/updateTwoFactorEmailRequest\";\nimport { TwoFactorEmailResponse } from \"@bitwarden/common/models/response/twoFactorEmailResponse\";\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/twoFactorRescoverResponse\";\n\n@Component({\n selector: \"app-two-factor-recovery\",\n templateUrl: \"two-factor-recovery.component.html\",\n})\nexport class TwoFactorRecoveryComponent {\n type = -1;\n code: string;\n authed: boolean;\n twoFactorProviderType = TwoFactorProviderType;\n\n constructor(private i18nService: I18nService) {}\n\n auth(authResponse: any) {\n this.authed = true;\n this.processResponse(authResponse.response);\n }\n\n print() {\n const w = window.open();\n w.document.write(\n '
' +\n \"

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

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

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

\"\n );\n w.onafterprint = () => w.close();\n w.print();\n }\n\n private formatString(s: string) {\n if (s == null) {\n return null;\n }\n return s\n .replace(/(.{4})/g, \"$1 \")\n .trim()\n .toUpperCase();\n }\n\n private processResponse(response: TwoFactorRecoverResponse) {\n this.code = this.formatString(response.code);\n }\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorWebAuthnDeleteRequest extends SecretVerificationRequest {\n id: number;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorWebAuthnRequest extends SecretVerificationRequest {\n deviceResponse: PublicKeyCredential;\n name: string;\n id: number;\n}\n","
\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/secretVerificationRequest\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"@bitwarden/common/models/request/updateTwoFactorWebAuthnDeleteRequest\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"@bitwarden/common/models/request/updateTwoFactorWebAuthnRequest\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"@bitwarden/common/models/response/twoFactorWebAuthnResponse\";\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 \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorYubioOtpRequest extends SecretVerificationRequest {\n key1: string;\n key2: string;\n key3: string;\n key4: string;\n key5: string;\n nfc: boolean;\n}\n","
\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/updateTwoFactorYubioOtpRequest\";\nimport { TwoFactorYubiKeyResponse } from \"@bitwarden/common/models/response/twoFactorYubiKeyResponse\";\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 { 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","
\n

{{ \"twoStepLogin\" | i18n }}

\n
\n

{{ \"twoStepLoginDesc\" | i18n }}

\n

{{ \"twoStepLoginOrganizationDesc\" | i18n }}

\n\n

{{ \"twoStepLoginRecoveryWarning\" | i18n }}

\n \n
\n

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

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

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

    \n {{ p.description }}\n
    \n
    \n \n {{ \"manage\" | i18n }}\n \n
    \n
  • \n
\n
\n
\n
\n

\n {{ \"deviceVerification\" | i18n }}\n

\n
\n
\n \n \n
\n {{ \"deviceVerificationDesc\" | i18n }}\n
\n \n {{ \"save\" | i18n }}\n \n
\n
\n
\n\n\n\n\n\n\n\n","import { Component, OnInit, Type, ViewChild, ViewContainerRef } from \"@angular/core\";\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 { 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 { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { DeviceVerificationRequest } from \"@bitwarden/common/models/request/deviceVerificationRequest\";\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})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class TwoFactorSetupComponent implements OnInit {\n @ViewChild(\"recoveryTemplate\", { read: ViewContainerRef, static: true })\n recoveryModalRef: ViewContainerRef;\n @ViewChild(\"authenticatorTemplate\", { read: ViewContainerRef, static: true })\n authenticatorModalRef: ViewContainerRef;\n @ViewChild(\"yubikeyTemplate\", { read: ViewContainerRef, static: true })\n yubikeyModalRef: ViewContainerRef;\n @ViewChild(\"duoTemplate\", { read: ViewContainerRef, static: true }) duoModalRef: ViewContainerRef;\n @ViewChild(\"emailTemplate\", { read: ViewContainerRef, static: true })\n emailModalRef: ViewContainerRef;\n @ViewChild(\"webAuthnTemplate\", { read: ViewContainerRef, static: true })\n webAuthnModalRef: ViewContainerRef;\n\n organizationId: string;\n providers: any[] = [];\n canAccessPremium: boolean;\n showPolicyWarning = false;\n loading = true;\n enableDeviceVerification: boolean;\n isDeviceVerificationSectionEnabled: boolean;\n modal: ModalRef;\n formPromise: Promise;\n\n constructor(\n protected apiService: ApiService,\n protected modalService: ModalService,\n protected messagingService: MessagingService,\n protected policyService: PolicyService,\n private stateService: StateService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n try {\n const deviceVerificationSettings = await this.apiService.getDeviceVerificationSettings();\n this.isDeviceVerificationSectionEnabled =\n deviceVerificationSettings.isDeviceVerificationSectionEnabled;\n this.enableDeviceVerification = deviceVerificationSettings.unknownDeviceVerificationEnabled;\n } catch (e) {\n this.logService.error(e);\n }\n\n for (const key in TwoFactorProviders) {\n // eslint-disable-next-line\n if (!TwoFactorProviders.hasOwnProperty(key)) {\n continue;\n }\n\n const p = (TwoFactorProviders as any)[key];\n if (this.filterProvider(p.type)) {\n continue;\n }\n\n this.providers.push({\n type: p.type,\n name: p.name,\n description: p.description,\n enabled: false,\n premium: p.premium,\n sort: p.sort,\n });\n }\n\n this.providers.sort((a: any, b: any) => a.sort - b.sort);\n await this.load();\n }\n\n async load() {\n this.loading = true;\n const providerList = await this.getTwoFactorProviders();\n providerList.data.forEach((p) => {\n this.providers.forEach((p2) => {\n if (p.type === p2.type) {\n p2.enabled = p.enabled;\n }\n });\n });\n this.evaluatePolicies();\n this.loading = false;\n }\n\n async manage(type: TwoFactorProviderType) {\n switch (type) {\n case TwoFactorProviderType.Authenticator: {\n const authComp = await this.openModal(\n this.authenticatorModalRef,\n TwoFactorAuthenticatorComponent\n );\n // 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 = await this.policyService.policyAppliesToUser(\n PolicyType.TwoFactorAuthentication\n );\n } else {\n this.showPolicyWarning = false;\n }\n }\n\n async submit() {\n try {\n if (this.enableDeviceVerification) {\n const email = await this.stateService.getEmail();\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\n \"areYouSureYouWantToEnableDeviceVerificationTheVerificationCodeEmailsWillArriveAtX\",\n email\n ),\n this.i18nService.t(\"deviceVerification\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n }\n\n this.formPromise = this.apiService.putDeviceVerificationSettings(\n new DeviceVerificationRequest(this.enableDeviceVerification)\n );\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"updatedDeviceVerification\")\n );\n } catch (e) {\n this.logService.error(e);\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 { 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 { 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 platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n logService: LogService\n ) {\n super(\n apiService,\n modalService,\n messagingService,\n policyService,\n stateService,\n platformUtilsService,\n i18nService,\n logService\n );\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.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 { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { Observable } 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.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 { 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/cardView\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipherView\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collectionView\";\nimport { FolderView } from \"@bitwarden/common/models/view/folderView\";\nimport { IdentityView } from \"@bitwarden/common/models/view/identityView\";\nimport { LoginUriView } from \"@bitwarden/common/models/view/loginUriView\";\nimport { LoginView } from \"@bitwarden/common/models/view/loginView\";\nimport { SecureNoteView } from \"@bitwarden/common/models/view/secureNoteView\";\n\n@Directive()\nexport class AddEditComponent implements OnInit {\n @Input() cloneMode = false;\n @Input() folderId: string = null;\n @Input() cipherId: string;\n @Input() type: CipherType;\n @Input() collectionIds: string[];\n @Input() organizationId: string = null;\n @Output() onSavedCipher = new EventEmitter();\n @Output() onDeletedCipher = new EventEmitter();\n @Output() onRestoredCipher = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n @Output() onEditAttachments = new EventEmitter();\n @Output() onShareCipher = new EventEmitter();\n @Output() onEditCollections = new EventEmitter();\n @Output() onGeneratePassword = new EventEmitter();\n @Output() onGenerateUsername = new EventEmitter();\n\n editMode = false;\n cipher: CipherView;\n folders$: 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 writeableCollections: CollectionView[];\n private previousCipherId: string;\n\n constructor(\n protected cipherService: CipherService,\n protected folderService: FolderService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected auditService: AuditService,\n protected stateService: StateService,\n protected collectionService: CollectionService,\n protected messagingService: MessagingService,\n protected eventService: EventService,\n protected policyService: PolicyService,\n private logService: LogService,\n protected passwordRepromptService: PasswordRepromptService,\n private organizationService: OrganizationService\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"typeLogin\"), value: CipherType.Login },\n { name: i18nService.t(\"typeCard\"), value: CipherType.Card },\n { name: i18nService.t(\"typeIdentity\"), value: CipherType.Identity },\n { name: i18nService.t(\"typeSecureNote\"), value: CipherType.SecureNote },\n ];\n this.cardBrandOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: \"Visa\", value: \"Visa\" },\n { name: \"Mastercard\", value: \"Mastercard\" },\n { name: \"American Express\", value: \"Amex\" },\n { name: \"Discover\", value: \"Discover\" },\n { name: \"Diners Club\", value: \"Diners Club\" },\n { name: \"JCB\", value: \"JCB\" },\n { name: \"Maestro\", value: \"Maestro\" },\n { name: \"UnionPay\", value: \"UnionPay\" },\n { name: \"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 await this.init();\n }\n\n async init() {\n if (this.ownershipOptions.length) {\n this.ownershipOptions = [];\n }\n if (await this.policyService.policyAppliesToUser(PolicyType.PersonalOwnership)) {\n this.allowPersonal = false;\n } else {\n const myEmail = await this.stateService.getEmail();\n this.ownershipOptions.push({ name: myEmail, value: null });\n }\n\n const orgs = await this.organizationService.getAll();\n orgs.sort(Utils.getSortFunction(this.i18nService, \"name\")).forEach((o) => {\n if (o.enabled && o.status === OrganizationUserStatusType.Confirmed) {\n this.ownershipOptions.push({ name: o.name, value: o.id });\n }\n });\n if (!this.allowPersonal) {\n this.organizationId = this.ownershipOptions[0].value;\n }\n\n this.writeableCollections = await this.loadCollections();\n\n this.canUseReprompt = await this.passwordRepromptService.enabled();\n }\n\n async load() {\n this.editMode = this.cipherId != null;\n if (this.editMode) {\n this.editMode = true;\n if (this.cloneMode) {\n this.cloneMode = true;\n this.title = this.i18nService.t(\"addItem\");\n } else {\n this.title = this.i18nService.t(\"editItem\");\n }\n } else {\n this.title = this.i18nService.t(\"addItem\");\n }\n\n const addEditCipherInfo: any = await this.stateService.getAddEditCipherInfo();\n if (addEditCipherInfo != null) {\n this.cipher = addEditCipherInfo.cipher;\n this.collectionIds = addEditCipherInfo.collectionIds;\n }\n await this.stateService.setAddEditCipherInfo(null);\n\n if (this.cipher == null) {\n if (this.editMode) {\n const cipher = await this.loadCipher();\n this.cipher = await cipher.decrypt();\n\n // Adjust Cipher Name if Cloning\n if (this.cloneMode) {\n this.cipher.name += \" - \" + this.i18nService.t(\"clone\");\n // If not allowing personal ownership, update cipher's org Id to prompt downstream changes\n if (this.cipher.organizationId == null && !this.allowPersonal) {\n this.cipher.organizationId = this.organizationId;\n }\n }\n } else {\n this.cipher = new CipherView();\n this.cipher.organizationId = this.organizationId == null ? null : this.organizationId;\n this.cipher.folderId = this.folderId;\n this.cipher.type = this.type == null ? CipherType.Login : this.type;\n this.cipher.login = new LoginView();\n this.cipher.login.uris = [new LoginUriView()];\n this.cipher.card = new CardView();\n this.cipher.identity = new IdentityView();\n this.cipher.secureNote = new SecureNoteView();\n this.cipher.secureNote.type = SecureNoteType.Generic;\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n if (this.cipher != null && (!this.editMode || addEditCipherInfo != null || this.cloneMode)) {\n await this.organizationChanged();\n if (\n this.collectionIds != null &&\n this.collectionIds.length > 0 &&\n this.collections.length > 0\n ) {\n this.collections.forEach((c) => {\n if (this.collectionIds.indexOf(c.id) > -1) {\n (c as any).checked = true;\n }\n });\n }\n }\n\n this.folders$ = 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 trackByFunction(index: number, item: any) {\n return index;\n }\n\n cancel() {\n this.onCancelled.emit(this.cipher);\n }\n\n attachments() {\n this.onEditAttachments.emit(this.cipher);\n }\n\n share() {\n this.onShareCipher.emit(this.cipher);\n }\n\n editCollections() {\n this.onEditCollections.emit(this.cipher);\n }\n\n async delete(): Promise {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\n this.cipher.isDeleted ? \"permanentlyDeleteItemConfirmation\" : \"deleteItemConfirmation\"\n ),\n this.i18nService.t(\"deleteItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.deleteCipher();\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.cipher.isDeleted ? \"permanentlyDeletedItem\" : \"deletedItem\")\n );\n this.onDeletedCipher.emit(this.cipher);\n this.messagingService.send(\n this.cipher.isDeleted ? \"permanentlyDeletedCipher\" : \"deletedCipher\"\n );\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n async restore(): Promise {\n if (!this.cipher.isDeleted) {\n return false;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"restoreItemConfirmation\"),\n this.i18nService.t(\"restoreItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.restorePromise = this.restoreCipher();\n await this.restorePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItem\"));\n this.onRestoredCipher.emit(this.cipher);\n this.messagingService.send(\"restoredCipher\");\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n async generateUsername(): Promise {\n if (this.cipher.login?.username?.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"overwriteUsernameConfirmation\"),\n this.i18nService.t(\"overwriteUsername\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\")\n );\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGenerateUsername.emit();\n return true;\n }\n\n async generatePassword(): Promise {\n if (this.cipher.login?.password?.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"overwritePasswordConfirmation\"),\n this.i18nService.t(\"overwritePassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\")\n );\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGeneratePassword.emit();\n return true;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"loginPassword\").focus();\n if (this.editMode && this.showPassword) {\n this.eventService.collect(EventType.Cipher_ClientToggledPasswordVisible, this.cipherId);\n }\n }\n\n async toggleCardNumber() {\n this.showCardNumber = !this.showCardNumber;\n if (this.showCardNumber) {\n this.eventService.collect(EventType.Cipher_ClientToggledCardNumberVisible, this.cipherId);\n }\n }\n\n toggleCardCode() {\n this.showCardCode = !this.showCardCode;\n document.getElementById(\"cardCode\").focus();\n if (this.editMode && this.showCardCode) {\n this.eventService.collect(EventType.Cipher_ClientToggledCardCodeVisible, this.cipherId);\n }\n }\n\n toggleUriOptions(uri: LoginUriView) {\n const u = uri as any;\n u.showOptions = u.showOptions == null && uri.match != null ? false : !u.showOptions;\n }\n\n loginUriMatchChanged(uri: LoginUriView) {\n const u = uri as any;\n u.showOptions = u.showOptions == null ? true : u.showOptions;\n }\n\n async organizationChanged() {\n if (this.writeableCollections != null) {\n this.writeableCollections.forEach((c) => ((c as any).checked = false));\n }\n if (this.cipher.organizationId != null) {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.cipher.organizationId\n );\n const org = await this.organizationService.get(this.cipher.organizationId);\n if (org != null) {\n this.cipher.organizationUseTotp = org.useTotp;\n }\n } else {\n this.collections = [];\n }\n }\n\n async checkPassword() {\n if (this.checkPasswordPromise != null) {\n return;\n }\n\n if (\n this.cipher.login == null ||\n this.cipher.login.password == null ||\n this.cipher.login.password === \"\"\n ) {\n return;\n }\n\n this.checkPasswordPromise = this.auditService.passwordLeaked(this.cipher.login.password);\n const matches = await this.checkPasswordPromise;\n this.checkPasswordPromise = null;\n\n if (matches > 0) {\n this.platformUtilsService.showToast(\n \"warning\",\n null,\n this.i18nService.t(\"passwordExposed\", matches.toString())\n );\n } else {\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"passwordSafe\"));\n }\n }\n\n repromptChanged() {\n this.reprompt = !this.reprompt;\n if (this.reprompt) {\n this.cipher.reprompt = CipherRepromptType.Password;\n } else {\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter((c) => !c.readOnly);\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected encryptCipher() {\n return this.cipherService.encrypt(this.cipher);\n }\n\n protected saveCipher(cipher: Cipher) {\n return this.cipherService.saveWithServer(cipher);\n }\n\n protected deleteCipher() {\n return this.cipher.isDeleted\n ? this.cipherService.deleteWithServer(this.cipher.id)\n : this.cipherService.softDeleteWithServer(this.cipher.id);\n }\n\n protected restoreCipher() {\n return this.cipherService.restoreWithServer(this.cipher.id);\n }\n}\n","import { 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/cipherView\";\nimport { FieldView } from \"@bitwarden/common/models/view/fieldView\";\n\n@Directive()\nexport class AddEditCustomFieldsComponent implements OnChanges {\n @Input() cipher: CipherView;\n @Input() thisCipherType: CipherType;\n @Input() editMode: boolean;\n\n addFieldType: FieldType = FieldType.Text;\n addFieldTypeOptions: any[];\n addFieldLinkedTypeOption: any;\n linkedFieldOptions: any[] = [];\n\n cipherType = CipherType;\n fieldType = FieldType;\n eventType = EventType;\n\n constructor(private i18nService: I18nService, private eventService: EventService) {\n this.addFieldTypeOptions = [\n { name: i18nService.t(\"cfTypeText\"), value: FieldType.Text },\n { name: i18nService.t(\"cfTypeHidden\"), value: FieldType.Hidden },\n { name: i18nService.t(\"cfTypeBoolean\"), value: FieldType.Boolean },\n ];\n this.addFieldLinkedTypeOption = {\n name: this.i18nService.t(\"cfTypeLinked\"),\n value: FieldType.Linked,\n };\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.thisCipherType != null) {\n this.setLinkedFieldOptions();\n\n if (!changes.thisCipherType.firstChange) {\n this.resetCipherLinkedFields();\n }\n }\n }\n\n addField() {\n if (this.cipher.fields == null) {\n this.cipher.fields = [];\n }\n\n const f = new FieldView();\n f.type = this.addFieldType;\n f.newField = true;\n\n if (f.type === FieldType.Linked) {\n f.linkedId = this.linkedFieldOptions[0].value;\n }\n\n this.cipher.fields.push(f);\n }\n\n removeField(field: FieldView) {\n const i = this.cipher.fields.indexOf(field);\n if (i > -1) {\n this.cipher.fields.splice(i, 1);\n }\n }\n\n toggleFieldValue(field: FieldView) {\n const f = field as any;\n f.showValue = !f.showValue;\n if (this.editMode && f.showValue) {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipher.id);\n }\n }\n\n trackByFunction(index: number, item: any) {\n return index;\n }\n\n drop(event: CdkDragDrop) {\n moveItemInArray(this.cipher.fields, event.previousIndex, event.currentIndex);\n }\n\n private setLinkedFieldOptions() {\n if (this.cipher.linkedFieldOptions == null) {\n return;\n }\n\n const options: any = [];\n this.cipher.linkedFieldOptions.forEach((linkedFieldOption, id) =>\n options.push({ name: this.i18nService.t(linkedFieldOption.i18nKey), value: id })\n );\n this.linkedFieldOptions = options.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n\n private resetCipherLinkedFields() {\n if (this.cipher.fields == null || this.cipher.fields.length === 0) {\n return;\n }\n\n // Delete any Linked custom fields if the item type does not support them\n if (this.cipher.linkedFieldOptions == null) {\n this.cipher.fields = this.cipher.fields.filter((f) => f.type !== FieldType.Linked);\n return;\n }\n\n this.cipher.fields\n .filter((f) => f.type === FieldType.Linked)\n .forEach((f) => (f.linkedId = this.linkedFieldOptions[0].value));\n }\n}\n","import { Directive, 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","
\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

{{ \"ownership\" | i18n }}

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

{{ \"collections\" | i18n }}

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

{{ \"options\" | i18n }}

\n
\n \n \n \n \n \n
\n
\n \n
\n \n \n {{ (cipher?.isDeleted ? \"restore\" : \"save\") | i18n }}\n \n \n
\n \n \n \n \n \n \n \n
\n
\n \n \n\n","import { Component } from \"@angular/core\";\n\nimport { 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.service\";\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/loginUriView\";\n\n@Component({\n selector: \"app-vault-add-edit\",\n templateUrl: \"add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n canAccessPremium: boolean;\n totpCode: string;\n totpCodeFormatted: string;\n totpDash: number;\n totpSec: number;\n totpLow: boolean;\n showRevisionDate = false;\n hasPasswordHistory = false;\n viewingPasswordHistory = false;\n viewOnly = false;\n\n protected totpInterval: number;\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n protected totpService: TotpService,\n protected passwordGenerationService: PasswordGenerationService,\n protected messagingService: MessagingService,\n eventService: EventService,\n protected policyService: PolicyService,\n organizationService: OrganizationService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n messagingService,\n eventService,\n policyService,\n logService,\n passwordRepromptService,\n organizationService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n this.showRevisionDate = this.cipher.passwordRevisionDisplayDate != null;\n this.hasPasswordHistory = this.cipher.hasPasswordHistory;\n this.cleanUp();\n\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n if (\n this.cipher.type === CipherType.Login &&\n this.cipher.login.totp &&\n (this.cipher.organizationUseTotp || this.canAccessPremium)\n ) {\n await this.totpUpdateCode();\n const interval = this.totpService.getTimeInterval(this.cipher.login.totp);\n await this.totpTick(interval);\n\n this.totpInterval = window.setInterval(async () => {\n await this.totpTick(interval);\n }, 1000);\n }\n }\n\n toggleFavorite() {\n this.cipher.favorite = !this.cipher.favorite;\n }\n\n launch(uri: LoginUriView) {\n if (!uri.canLaunch) {\n return;\n }\n\n this.platformUtilsService.launchUri(uri.launchUri);\n }\n\n copy(value: string, typeI18nKey: string, aType: string) {\n if (value == null) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(typeI18nKey))\n );\n\n if (this.editMode) {\n if (typeI18nKey === \"password\") {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipherId);\n } else if (typeI18nKey === \"securityCode\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId);\n } else if (aType === \"H_Field\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedHiddenField, this.cipherId);\n }\n }\n }\n\n async generatePassword(): Promise {\n const confirmed = await super.generatePassword();\n if (confirmed) {\n const options = (await this.passwordGenerationService.getOptions())[0];\n this.cipher.login.password = await this.passwordGenerationService.generatePassword(options);\n }\n return confirmed;\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n\n upgradeOrganization() {\n this.messagingService.send(\"upgradeOrganization\", {\n organizationId: this.cipher.organizationId,\n });\n }\n\n 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 { 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.service\";\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/cipherData\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherCreateRequest } from \"@bitwarden/common/models/request/cipherCreateRequest\";\nimport { CipherRequest } from \"@bitwarden/common/models/request/cipherRequest\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"../../vault/add-edit.component\";\n\n@Component({\n selector: \"app-org-vault-add-edit\",\n templateUrl: \"../../vault/add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n organization: Organization;\n originalCipher: Cipher = null;\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n totpService: TotpService,\n passwordGenerationService: PasswordGenerationService,\n private apiService: ApiService,\n messagingService: MessagingService,\n eventService: EventService,\n policyService: PolicyService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService,\n organizationService: OrganizationService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n totpService,\n passwordGenerationService,\n messagingService,\n eventService,\n policyService,\n organizationService,\n logService,\n passwordRepromptService\n );\n }\n\n protected allowOwnershipAssignment() {\n if (\n this.ownershipOptions != null &&\n (this.ownershipOptions.length > 1 || !this.allowPersonal)\n ) {\n if (this.organization != null) {\n return this.cloneMode && this.organization.canEditAnyCollection;\n } else {\n return !this.editMode || this.cloneMode;\n }\n }\n return false;\n }\n\n protected loadCollections() {\n if (!this.organization.canEditAnyCollection) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected async loadCipher() {\n if (!this.organization.canEditAnyCollection) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n const data = new CipherData(response);\n this.originalCipher = new Cipher(data);\n return new Cipher(data);\n }\n\n protected encryptCipher() {\n if (!this.organization.canEditAnyCollection) {\n return super.encryptCipher();\n }\n return this.cipherService.encrypt(this.cipher, null, this.originalCipher);\n }\n\n protected async saveCipher(cipher: Cipher) {\n if (!this.organization.canEditAnyCollection || cipher.organizationId == null) {\n return super.saveCipher(cipher);\n }\n if (this.editMode && !this.cloneMode) {\n const request = new CipherRequest(cipher);\n return this.apiService.putCipherAdmin(this.cipherId, request);\n } else {\n const request = new CipherCreateRequest(cipher);\n return this.apiService.postCipherAdmin(request);\n }\n }\n\n protected async deleteCipher() {\n if (!this.organization.canEditAnyCollection) {\n return super.deleteCipher();\n }\n return this.cipher.isDeleted\n ? this.apiService.deleteCipherAdmin(this.cipherId)\n : this.apiService.putDeleteCipherAdmin(this.cipherId);\n }\n}\n","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/cipherView\";\n\nimport { AddEditComponent as OrgAddEditComponent } from \"../../organizations/vault/add-edit.component\";\nimport { AddEditComponent } from \"../../vault/add-edit.component\";\n\n@Directive()\nexport class CipherReportComponent {\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n\n loading = false;\n hasLoaded = false;\n ciphers: CipherView[] = [];\n organization: Organization;\n\n constructor(\n private modalService: ModalService,\n protected messagingService: MessagingService,\n public requiresPaid: boolean,\n private stateService: StateService,\n protected passwordRepromptService: PasswordRepromptService\n ) {}\n\n async load() {\n this.loading = true;\n await this.setCiphers();\n this.loading = false;\n this.hasLoaded = true;\n }\n\n async selectCipher(cipher: CipherView) {\n if (!(await this.repromptCipher(cipher))) {\n return;\n }\n\n const type = this.organization != null ? OrgAddEditComponent : AddEditComponent;\n\n const [modal, childComponent] = await this.modalService.openViewRef(\n type,\n this.cipherAddEditModalRef,\n (comp: OrgAddEditComponent | AddEditComponent) => {\n if (this.organization != null) {\n (comp as OrgAddEditComponent).organization = this.organization;\n comp.organizationId = this.organization.id;\n }\n\n comp.cipherId = cipher == null ? null : cipher.id;\n // 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","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/cipherView\";\n\n/**\n * Provides a mapping from supported card brands to\n * the filenames of icon that should be present in images/cards folder of clients.\n */\nconst cardIcons: Record = {\n Visa: \"card-visa\",\n Mastercard: \"card-mastercard\",\n Amex: \"card-amex\",\n Discover: \"card-discover\",\n \"Diners Club\": \"card-diners-club\",\n JCB: \"card-jcb\",\n Maestro: \"card-maestro\",\n UnionPay: \"card-union-pay\",\n 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","
\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/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-exposed-passwords-report\",\n templateUrl: \"exposed-passwords-report.component.html\",\n})\nexport class ExposedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n exposedPasswordMap = new Map();\n\n constructor(\n protected cipherService: CipherService,\n protected auditService: AuditService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n ngOnInit() {\n this.checkAccess();\n }\n\n async load() {\n if (await this.checkAccess()) {\n super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const exposedPasswordCiphers: CipherView[] = [];\n const promises: Promise[] = [];\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n c.login.password == null ||\n c.login.password === \"\" ||\n c.isDeleted\n ) {\n return;\n }\n const promise = this.auditService.passwordLeaked(c.login.password).then((exposedCount) => {\n if (exposedCount > 0) {\n exposedPasswordCiphers.push(c);\n this.exposedPasswordMap.set(c.id, exposedCount);\n }\n });\n promises.push(promise);\n });\n await Promise.all(promises);\n this.ciphers = exposedPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from the org view;\n return true;\n }\n}\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\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 { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipherView\";\n\n// eslint-disable-next-line no-restricted-imports\nimport { ExposedPasswordsReportComponent as BaseExposedPasswordsReportComponent } from \"../../reports/pages/exposed-passwords-report.component\";\n\n@Component({\n selector: \"app-org-exposed-passwords-report\",\n templateUrl: \"../../reports/pages/exposed-passwords-report.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class ExposedPasswordsReportComponent extends BaseExposedPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(\n cipherService: CipherService,\n auditService: AuditService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private organizationService: OrganizationService,\n private route: ActivatedRoute,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(\n cipherService,\n auditService,\n modalService,\n messagingService,\n stateService,\n passwordRepromptService\n );\n }\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n await this.checkAccess();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some((x) => x.id === c.id);\n }\n}\n","
\n

\n {{ \"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/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-inactive-two-factor-report\",\n templateUrl: \"inactive-two-factor-report.component.html\",\n})\nexport class InactiveTwoFactorReportComponent extends CipherReportComponent implements OnInit {\n services = new Map();\n cipherDocs = new Map();\n\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private logService: LogService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n try {\n await this.load2fa();\n } catch (e) {\n this.logService.error(e);\n }\n\n if (this.services.size > 0) {\n const allCiphers = await this.getAllCiphers();\n const inactive2faCiphers: CipherView[] = [];\n const promises: Promise[] = [];\n const docs = new Map();\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n (c.login.totp != null && c.login.totp !== \"\") ||\n !c.login.hasUris ||\n c.isDeleted\n ) {\n return;\n }\n for (let i = 0; i < c.login.uris.length; i++) {\n const u = c.login.uris[i];\n if (u.uri != null && u.uri !== \"\") {\n const uri = u.uri.replace(\"www.\", \"\");\n const domain = Utils.getDomain(uri);\n if (domain != null && this.services.has(domain)) {\n if (this.services.get(domain) != null) {\n docs.set(c.id, this.services.get(domain));\n }\n inactive2faCiphers.push(c);\n }\n }\n }\n });\n await Promise.all(promises);\n this.ciphers = inactive2faCiphers;\n this.cipherDocs = docs;\n }\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n private async load2fa() {\n if (this.services.size > 0) {\n return;\n }\n const response = await fetch(new Request(\"https://2fa.directory/api/v3/totp.json\"));\n if (response.status !== 200) {\n throw new Error();\n }\n const responseJson = await response.json();\n for (const service of responseJson) {\n const serviceData = service[1];\n if (serviceData.domain == null) {\n continue;\n }\n if (serviceData.documentation == null) {\n continue;\n }\n if (serviceData[\"additional-domains\"] != null) {\n for (const additionalDomain of serviceData[\"additional-domains\"]) {\n this.services.set(additionalDomain, serviceData.documentation);\n }\n }\n this.services.set(serviceData.domain, serviceData.documentation);\n }\n }\n}\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\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 { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipherView\";\n\n// eslint-disable-next-line no-restricted-imports\nimport { InactiveTwoFactorReportComponent as BaseInactiveTwoFactorReportComponent } from \"../../reports/pages/inactive-two-factor-report.component\";\n\n@Component({\n selector: \"app-inactive-two-factor-report\",\n templateUrl: \"../../reports/pages/inactive-two-factor-report.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class InactiveTwoFactorReportComponent extends BaseInactiveTwoFactorReportComponent {\n constructor(\n cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private route: ActivatedRoute,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService,\n private organizationService: OrganizationService\n ) {\n super(\n cipherService,\n modalService,\n messagingService,\n stateService,\n logService,\n passwordRepromptService\n );\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n}\n","
\n

\n {{ \"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/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-reused-passwords-report\",\n templateUrl: \"reused-passwords-report.component.html\",\n})\nexport class ReusedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n passwordUseMap: Map;\n\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const ciphersWithPasswords: CipherView[] = [];\n this.passwordUseMap = new Map();\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n c.login.password == null ||\n c.login.password === \"\" ||\n c.isDeleted\n ) {\n return;\n }\n ciphersWithPasswords.push(c);\n if (this.passwordUseMap.has(c.login.password)) {\n this.passwordUseMap.set(c.login.password, this.passwordUseMap.get(c.login.password) + 1);\n } else {\n this.passwordUseMap.set(c.login.password, 1);\n }\n });\n const reusedPasswordCiphers = ciphersWithPasswords.filter(\n (c) =>\n this.passwordUseMap.has(c.login.password) && this.passwordUseMap.get(c.login.password) > 1\n );\n this.ciphers = reusedPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from an organization view\n return true;\n }\n}\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\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 { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipherView\";\n\n// eslint-disable-next-line no-restricted-imports\nimport { ReusedPasswordsReportComponent as BaseReusedPasswordsReportComponent } from \"../../reports/pages/reused-passwords-report.component\";\n\n@Component({\n selector: \"app-reused-passwords-report\",\n templateUrl: \"../../reports/pages/reused-passwords-report.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class ReusedPasswordsReportComponent extends BaseReusedPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(\n cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(cipherService, modalService, messagingService, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some((x) => x.id === c.id);\n }\n}\n","
\n \n \n {{ \"loading\" | i18n }}\n \n \n
\n
\n \n
\n
\n {{ \"reports\" | i18n }}\n
\n \n {{ \"upgrade\" | i18n }}\n \n
\n
\n
\n \n {{ \"exposedPasswordsReport\" | i18n }}\n \n \n {{ \"reusedPasswordsReport\" | i18n }}\n \n \n {{ \"weakPasswordsReport\" | i18n }}\n \n \n {{ \"unsecuredWebsitesReport\" | i18n }}\n \n \n {{ \"inactive2faReport\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-org-tools\",\n templateUrl: \"tools.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class ToolsComponent {\n organization: Organization;\n accessReports = false;\n loading = true;\n\n constructor(\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private messagingService: MessagingService\n ) {}\n\n ngOnInit() {\n // 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 // TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now\n // since all paid plans include useTotp\n this.accessReports = this.organization.useTotp;\n this.loading = false;\n });\n }\n\n upgradeOrganization() {\n this.messagingService.send(\"upgradeOrganization\", { organizationId: this.organization.id });\n }\n}\n","
\n

\n {{ \"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/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-unsecured-websites-report\",\n templateUrl: \"unsecured-websites-report.component.html\",\n})\nexport class UnsecuredWebsitesReportComponent extends CipherReportComponent implements OnInit {\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const unsecuredCiphers = allCiphers.filter((c) => {\n if (c.type !== CipherType.Login || !c.login.hasUris || c.isDeleted) {\n return false;\n }\n return c.login.uris.some((u) => u.uri != null && u.uri.indexOf(\"http://\") === 0);\n });\n this.ciphers = unsecuredCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n}\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\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 { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipherView\";\n\n// eslint-disable-next-line no-restricted-imports\nimport { UnsecuredWebsitesReportComponent as BaseUnsecuredWebsitesReportComponent } from \"../../reports/pages/unsecured-websites-report.component\";\n\n@Component({\n selector: \"app-unsecured-websites-report\",\n templateUrl: \"../../reports/pages/unsecured-websites-report.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class UnsecuredWebsitesReportComponent extends BaseUnsecuredWebsitesReportComponent {\n constructor(\n cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(cipherService, modalService, messagingService, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n}\n","
\n

\n {{ \"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/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-weak-passwords-report\",\n templateUrl: \"weak-passwords-report.component.html\",\n})\nexport class WeakPasswordsReportComponent extends CipherReportComponent implements OnInit {\n passwordStrengthMap = new Map();\n\n private passwordStrengthCache = new Map();\n\n constructor(\n protected cipherService: CipherService,\n protected passwordGenerationService: PasswordGenerationService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const weakPasswordCiphers: CipherView[] = [];\n const isUserNameNotEmpty = (c: CipherView): boolean => {\n return c.login.username != null && c.login.username.trim() !== \"\";\n };\n const getCacheKey = (c: CipherView): string => {\n return c.login.password + \"_____\" + (isUserNameNotEmpty(c) ? c.login.username : \"\");\n };\n\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n c.login.password == null ||\n c.login.password === \"\" ||\n c.isDeleted\n ) {\n return;\n }\n const hasUserName = isUserNameNotEmpty(c);\n const cacheKey = getCacheKey(c);\n if (!this.passwordStrengthCache.has(cacheKey)) {\n let userInput: string[] = [];\n if (hasUserName) {\n const atPosition = c.login.username.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput\n .concat(\n c.login.username\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n )\n .filter((i) => i.length >= 3);\n } else {\n userInput = c.login.username\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n .filter((i) => i.length >= 3);\n }\n }\n const result = this.passwordGenerationService.passwordStrength(\n c.login.password,\n userInput.length > 0 ? userInput : null\n );\n this.passwordStrengthCache.set(cacheKey, result.score);\n }\n const score = this.passwordStrengthCache.get(cacheKey);\n if (score != null && score <= 2) {\n this.passwordStrengthMap.set(c.id, this.scoreKey(score));\n weakPasswordCiphers.push(c);\n }\n });\n weakPasswordCiphers.sort((a, b) => {\n return (\n this.passwordStrengthCache.get(getCacheKey(a)) -\n this.passwordStrengthCache.get(getCacheKey(b))\n );\n });\n this.ciphers = weakPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from the org view;\n return true;\n }\n\n private scoreKey(score: number): [string, string] {\n switch (score) {\n case 4:\n return [\"strong\", \"success\"];\n case 3:\n return [\"good\", \"primary\"];\n case 2:\n return [\"weak\", \"warning\"];\n default:\n return [\"veryWeak\", \"danger\"];\n }\n }\n}\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\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 { OrganizationService } from \"@bitwarden/common/abstractions/organization.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 { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipherView\";\n\n// eslint-disable-next-line no-restricted-imports\nimport { WeakPasswordsReportComponent as BaseWeakPasswordsReportComponent } from \"../../reports/pages/weak-passwords-report.component\";\n\n@Component({\n selector: \"app-weak-passwords-report\",\n templateUrl: \"../../reports/pages/weak-passwords-report.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class WeakPasswordsReportComponent extends BaseWeakPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(\n cipherService: CipherService,\n passwordGenerationService: PasswordGenerationService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(\n cipherService,\n passwordGenerationService,\n modalService,\n messagingService,\n stateService,\n passwordRepromptService\n );\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some((x) => x.id === c.id);\n }\n}\n","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/cipherView\";\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/encArrayBuffer\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/errorResponse\";\nimport { AttachmentView } from \"@bitwarden/common/models/view/attachmentView\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipherView\";\n\n@Directive()\nexport class AttachmentsComponent implements OnInit {\n @Input() cipherId: string;\n @Output() onUploadedAttachment = new EventEmitter();\n @Output() onDeletedAttachment = new EventEmitter();\n @Output() onReuploadedAttachment = new EventEmitter();\n\n cipher: CipherView;\n cipherDomain: Cipher;\n hasUpdatedKey: boolean;\n canAccessAttachments: boolean;\n formPromise: Promise;\n deletePromises: { [id: string]: Promise } = {};\n reuploadPromises: { [id: string]: Promise } = {};\n emergencyAccessId?: string = null;\n\n constructor(\n protected cipherService: CipherService,\n protected i18nService: I18nService,\n protected cryptoService: CryptoService,\n protected platformUtilsService: PlatformUtilsService,\n protected apiService: ApiService,\n protected win: Window,\n protected logService: LogService,\n protected stateService: StateService,\n 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/attachmentView\";\n\n@Component({\n selector: \"app-vault-attachments\",\n templateUrl: \"attachments.component.html\",\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n\n constructor(\n cipherService: CipherService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n logService: LogService,\n 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/cipherData\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { AttachmentView } from \"@bitwarden/common/models/view/attachmentView\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"../../vault/attachments.component\";\n\n@Component({\n selector: \"app-org-vault-attachments\",\n templateUrl: \"../../vault/attachments.component.html\",\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n organization: Organization;\n\n constructor(\n cipherService: CipherService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n logService: LogService,\n 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/cipherView\";\n\n@Directive()\nexport class CiphersComponent {\n @Input() activeCipherId: string = null;\n @Output() onCipherClicked = new EventEmitter();\n @Output() onCipherRightClicked = new EventEmitter();\n @Output() onAddCipher = new EventEmitter();\n @Output() onAddCipherOptions = new EventEmitter();\n\n loaded = false;\n ciphers: CipherView[] = [];\n searchText: string;\n searchPlaceholder: string = null;\n filter: (cipher: CipherView) => boolean = null;\n deleted = false;\n\n protected searchPending = false;\n\n private searchTimeout: any = null;\n\n constructor(protected searchService: SearchService) {}\n\n async load(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n this.deleted = deleted || false;\n await this.applyFilter(filter);\n this.loaded = true;\n }\n\n async reload(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n this.loaded = false;\n await this.load(filter, deleted);\n }\n\n async refresh() {\n await this.reload(this.filter, this.deleted);\n }\n\n async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n this.filter = filter;\n await this.search(null);\n }\n\n async search(timeout: number = null, indexedCiphers?: CipherView[]) {\n this.searchPending = false;\n if (this.searchTimeout != null) {\n clearTimeout(this.searchTimeout);\n }\n if (timeout == null) {\n await this.doSearch(indexedCiphers);\n return;\n }\n this.searchPending = true;\n this.searchTimeout = setTimeout(async () => {\n await this.doSearch(indexedCiphers);\n this.searchPending = false;\n }, timeout);\n }\n\n selectCipher(cipher: CipherView) {\n this.onCipherClicked.emit(cipher);\n }\n\n rightClickCipher(cipher: CipherView) {\n this.onCipherRightClicked.emit(cipher);\n }\n\n addCipher() {\n this.onAddCipher.emit();\n }\n\n addCipherOptions() {\n this.onAddCipherOptions.emit();\n }\n\n isSearching() {\n return !this.searchPending && this.searchService.isSearchable(this.searchText);\n }\n\n protected deletedFilter: (cipher: CipherView) => boolean = (c) => c.isDeleted === this.deleted;\n\n protected async doSearch(indexedCiphers?: CipherView[]) {\n this.ciphers = await this.searchService.searchCiphers(\n this.searchText,\n [this.filter, this.deletedFilter],\n indexedCiphers\n );\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: \"ellipsis\",\n})\nexport class EllipsisPipe implements PipeTransform {\n transform(value: string, limit = 25, completeWords = false, ellipsis = \"...\") {\n if (value.length <= limit) {\n return value;\n }\n limit -= ellipsis.length;\n if (completeWords && value.length > limit && value.indexOf(\" \") > 0) {\n limit = value.substring(0, limit).lastIndexOf(\" \");\n }\n return value.substring(0, limit) + ellipsis;\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { 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.service\";\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/cipherView\";\n\nconst MaxCheckedCount = 500;\n\n@Component({\n selector: \"app-vault-ciphers\",\n templateUrl: \"ciphers.component.html\",\n})\nexport class CiphersComponent extends BaseCiphersComponent implements OnDestroy {\n @Input() showAddNew = true;\n @Output() onAttachmentsClicked = new EventEmitter();\n @Output() onShareClicked = new EventEmitter();\n @Output() onCollectionsClicked = new EventEmitter();\n @Output() onCloneClicked = new EventEmitter();\n @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\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.service\";\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/cipherView\";\n\nimport { CiphersComponent as BaseCiphersComponent } from \"../../vault/ciphers.component\";\n\n@Component({\n selector: \"app-org-vault-ciphers\",\n templateUrl: \"../../vault/ciphers.component.html\",\n})\nexport class CiphersComponent extends BaseCiphersComponent {\n @Output() onEventsClicked = new EventEmitter();\n\n organization: Organization;\n accessEvents = false;\n\n protected allCiphers: CipherView[] = [];\n\n constructor(\n searchService: SearchService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n cipherService: CipherService,\n 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/cipherView\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collectionView\";\n\n@Directive()\nexport class CollectionsComponent implements OnInit {\n @Input() cipherId: string;\n @Input() allowSelectNone = false;\n @Output() onSavedCollections = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collectionIds: string[];\n collections: CollectionView[] = [];\n\n protected cipherDomain: Cipher;\n\n constructor(\n protected collectionService: CollectionService,\n protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService,\n protected cipherService: CipherService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n this.cipherDomain = await this.loadCipher();\n this.collectionIds = this.loadCipherCollections();\n this.cipher = await this.cipherDomain.decrypt();\n this.collections = await this.loadCollections();\n\n this.collections.forEach((c) => ((c as any).checked = false));\n if (this.collectionIds != null) {\n this.collections.forEach((c) => {\n (c as any).checked = this.collectionIds != null && this.collectionIds.indexOf(c.id) > -1;\n });\n }\n }\n\n async submit() {\n const selectedCollectionIds = this.collections\n .filter((c) => !!(c as any).checked)\n .map((c) => c.id);\n if (!this.allowSelectNone && selectedCollectionIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectOneCollection\")\n );\n return;\n }\n this.cipherDomain.collectionIds = selectedCollectionIds;\n try {\n this.formPromise = this.saveCollections();\n await this.formPromise;\n this.onSavedCollections.emit();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"editedItem\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected loadCipherCollections() {\n return this.cipherDomain.collectionIds;\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter(\n (c) => !c.readOnly && c.organizationId === this.cipher.organizationId\n );\n }\n\n protected saveCollections() {\n return this.cipherService.saveCollectionsWithServer(this.cipherDomain);\n }\n}\n","
\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/collectionView\";\n\n@Component({\n selector: \"app-vault-collections\",\n templateUrl: \"collections.component.html\",\n})\nexport class CollectionsComponent extends BaseCollectionsComponent implements OnDestroy {\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n logService: LogService\n ) {\n super(collectionService, platformUtilsService, i18nService, cipherService, logService);\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n this.collections.forEach((c) => this.check(c, select));\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { 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/cipherData\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherCollectionsRequest } from \"@bitwarden/common/models/request/cipherCollectionsRequest\";\n\nimport { CollectionsComponent as BaseCollectionsComponent } from \"../../vault/collections.component\";\n\n@Component({\n selector: \"app-org-vault-collections\",\n templateUrl: \"../../vault/collections.component.html\",\n})\nexport class CollectionsComponent extends BaseCollectionsComponent {\n organization: Organization;\n\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n private apiService: ApiService,\n logService: LogService\n ) {\n super(collectionService, platformUtilsService, i18nService, cipherService, logService);\n this.allowSelectNone = true;\n }\n\n protected async loadCipher() {\n if (!this.organization.canViewAllCollections) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n return new Cipher(new CipherData(response));\n }\n\n protected loadCipherCollections() {\n if (!this.organization.canViewAllCollections) {\n return super.loadCipherCollections();\n }\n return this.collectionIds;\n }\n\n protected loadCollections() {\n if (!this.organization.canViewAllCollections) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected saveCollections() {\n if (this.organization.canEditAnyCollection) {\n const request = new CipherCollectionsRequest(this.cipherDomain.collectionIds);\n return this.apiService.putCipherCollectionsAdmin(this.cipherId, request);\n } else {\n return super.saveCollections();\n }\n }\n}\n","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/treeNode\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collectionView\";\nimport { FolderView } from \"@bitwarden/common/models/view/folderView\";\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/treeNode\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collectionView\";\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/treeNode\";\nimport { FolderView } from \"@bitwarden/common/models/view/folderView\";\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/treeNode\";\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/treeNode\";\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/organizationUserResetPasswordEnrollmentRequest\";\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 } from \"@angular/core\";\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/organizationUserResetPasswordEnrollmentRequest\";\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 {\n actionPromise: Promise;\n policies: Policy[];\n loaded = false;\n\n @Input() organization: Organization;\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 await this.load();\n }\n\n async load() {\n this.policies = await this.policyService.getAll(PolicyType.ResetPassword);\n this.loaded = true;\n }\n\n allowEnrollmentChanges(org: Organization): boolean {\n if (org.usePolicies && org.useResetPassword && org.hasPublicAndPrivateKeys) {\n const policy = this.policies.find((p) => p.organizationId === org.id);\n if (policy != null && policy.enabled) {\n return org.resetPasswordEnrolled && policy.data.autoEnrollEnabled ? false : true;\n }\n }\n\n return false;\n }\n\n showEnrolledStatus(org: Organization): boolean {\n return (\n org.useResetPassword &&\n org.resetPasswordEnrolled &&\n this.policies.some((p) => p.organizationId === org.id && p.enabled)\n );\n }\n\n async unlinkSso(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"unlinkSsoConfirmation\"),\n org.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.apiService.deleteSsoUser(org.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, \"Unlinked SSO\");\n await this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async leave(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"leaveOrganizationConfirmation\"),\n org.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.organizationApiService.leave(org.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"leftOrganization\"));\n await this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async toggleResetPasswordEnrollment(org: Organization) {\n 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/cipherBulkDeleteRequest\";\n\n@Component({\n selector: \"app-vault-bulk-delete\",\n templateUrl: \"bulk-delete.component.html\",\n})\nexport class BulkDeleteComponent {\n @Input() cipherIds: string[] = [];\n @Input() permanent = false;\n @Input() organization: Organization;\n @Output() onDeleted = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private apiService: ApiService\n ) {}\n\n async submit() {\n if (!this.organization || !this.organization.canEditAnyCollection) {\n await this.deleteCiphers();\n } else {\n await this.deleteCiphersAdmin();\n }\n\n await this.formPromise;\n\n this.onDeleted.emit();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.permanent ? \"permanentlyDeletedItems\" : \"deletedItems\")\n );\n }\n\n private async deleteCiphers() {\n if (this.permanent) {\n this.formPromise = await this.cipherService.deleteManyWithServer(this.cipherIds);\n } else {\n this.formPromise = await this.cipherService.softDeleteManyWithServer(this.cipherIds);\n }\n }\n\n private async deleteCiphersAdmin() {\n const deleteRequest = new CipherBulkDeleteRequest(this.cipherIds, this.organization.id);\n if (this.permanent) {\n this.formPromise = await this.apiService.deleteManyCiphersAdmin(deleteRequest);\n } else {\n this.formPromise = await this.apiService.putDeleteManyCiphersAdmin(deleteRequest);\n }\n }\n}\n","
\n
\n
\n
\n

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

\n \n ×\n \n
\n
\n {{\n (permanent ? \"permanentlyDeleteSelectedItemsDesc\" : \"deleteSelectedItemsDesc\")\n | i18n: cipherIds.length\n }}\n
\n
\n \n \n {{ (permanent ? \"permanentlyDelete\" : \"delete\") | i18n }}\n \n \n
\n
\n
\n
\n","
\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/folderView\";\n\n@Component({\n selector: \"app-vault-bulk-move\",\n templateUrl: \"bulk-move.component.html\",\n})\nexport class BulkMoveComponent implements OnInit {\n @Input() cipherIds: string[] = [];\n @Output() onMoved = new EventEmitter();\n\n folderId: string = null;\n folders$: 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","
\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.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipherView\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collectionView\";\n\n@Component({\n selector: \"app-vault-bulk-share\",\n templateUrl: \"bulk-share.component.html\",\n})\nexport class BulkShareComponent implements OnInit {\n @Input() ciphers: CipherView[] = [];\n @Input() organizationId: string;\n @Output() onShared = new EventEmitter();\n\n nonShareableCount = 0;\n collections: CollectionView[] = [];\n organizations: Organization[] = [];\n shareableCiphers: CipherView[] = [];\n formPromise: Promise;\n\n private writeableCollections: CollectionView[] = [];\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private organizationService: OrganizationService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.shareableCiphers = this.ciphers.filter(\n (c) => !c.hasOldAttachments && c.organizationId == null\n );\n this.nonShareableCount = this.ciphers.length - this.shareableCiphers.length;\n const allCollections = await this.collectionService.getAllDecrypted();\n this.writeableCollections = allCollections.filter((c) => !c.readOnly);\n this.organizations = await this.organizationService.getAll();\n if (this.organizationId == null && this.organizations.length > 0) {\n this.organizationId = this.organizations[0].id;\n }\n this.filterCollections();\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n filterCollections() {\n this.selectAll(false);\n if (this.organizationId == null || this.writeableCollections.length === 0) {\n this.collections = [];\n } else {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.organizationId\n );\n }\n }\n\n async submit() {\n const checkedCollectionIds = this.collections\n .filter((c) => (c as any).checked)\n .map((c) => c.id);\n try {\n this.formPromise = this.cipherService.shareManyWithServer(\n this.shareableCiphers,\n this.organizationId,\n checkedCollectionIds\n );\n await this.formPromise;\n this.onShared.emit();\n const orgName =\n this.organizations.find((o) => o.id === this.organizationId)?.name ??\n this.i18nService.t(\"organization\");\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"movedItemsToOrg\", orgName)\n );\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n const collections = select ? this.collections : this.writeableCollections;\n collections.forEach((c) => this.check(c, select));\n }\n\n get canSave() {\n if (\n this.shareableCiphers != null &&\n this.shareableCiphers.length > 0 &&\n this.collections != null\n ) {\n for (let i = 0; i < this.collections.length; i++) {\n if ((this.collections[i] as any).checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","
\n \n \n \n
\n \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.service\";\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/cipherView\";\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 await this.ciphersComponent.reload(\n this.activeFilter.buildFilter(),\n vaultFilter.status === \"trash\"\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 { Organization } from \"@bitwarden/common/models/domain/organization\";\n\nimport { OrganizationPermissionsGuard } from \"./guards/org-permissions.guard\";\nimport { OrganizationLayoutComponent } from \"./layouts/organization-layout.component\";\nimport { CollectionsComponent } from \"./manage/collections.component\";\nimport { EventsComponent } from \"./manage/events.component\";\nimport { GroupsComponent } from \"./manage/groups.component\";\nimport { ManageComponent } from \"./manage/manage.component\";\nimport { PeopleComponent } from \"./manage/people.component\";\nimport { PoliciesComponent } from \"./manage/policies.component\";\nimport {\n canAccessOrgAdmin,\n canAccessManageTab,\n canAccessSettingsTab,\n canAccessToolsTab,\n} from \"./navigation-permissions\";\nimport { AccountComponent } from \"./settings/account.component\";\nimport { OrganizationBillingComponent } from \"./settings/organization-billing.component\";\nimport { OrganizationSubscriptionComponent } from \"./settings/organization-subscription.component\";\nimport { SettingsComponent } from \"./settings/settings.component\";\nimport { TwoFactorSetupComponent } from \"./settings/two-factor-setup.component\";\nimport { ExposedPasswordsReportComponent } from \"./tools/exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent } from \"./tools/inactive-two-factor-report.component\";\nimport { ReusedPasswordsReportComponent } from \"./tools/reused-passwords-report.component\";\nimport { ToolsComponent } from \"./tools/tools.component\";\nimport { UnsecuredWebsitesReportComponent } from \"./tools/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent } from \"./tools/weak-passwords-report.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: \"tools\",\n component: ToolsComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: canAccessToolsTab,\n },\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n redirectTo: \"import\",\n },\n {\n path: \"\",\n loadChildren: () =>\n import(\"./tools/import-export/org-import-export.module\").then(\n (m) => m.OrganizationImportExportModule\n ),\n },\n {\n path: \"exposed-passwords-report\",\n component: ExposedPasswordsReportComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"exposedPasswordsReport\",\n organizationPermissions: (org: Organization) => org.canAccessReports,\n },\n },\n {\n path: \"inactive-two-factor-report\",\n component: InactiveTwoFactorReportComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"inactive2faReport\",\n organizationPermissions: (org: Organization) => org.canAccessReports,\n },\n },\n {\n path: \"reused-passwords-report\",\n component: ReusedPasswordsReportComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"reusedPasswordsReport\",\n organizationPermissions: (org: Organization) => org.canAccessReports,\n },\n },\n {\n path: \"unsecured-websites-report\",\n component: UnsecuredWebsitesReportComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"unsecuredWebsitesReport\",\n organizationPermissions: (org: Organization) => org.canAccessReports,\n },\n },\n {\n path: \"weak-passwords-report\",\n component: WeakPasswordsReportComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"weakPasswordsReport\",\n organizationPermissions: (org: Organization) => org.canAccessReports,\n },\n },\n ],\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 redirectTo: \"people\",\n },\n {\n path: \"collections\",\n component: CollectionsComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"collections\",\n organizationPermissions: (org: Organization) =>\n org.canCreateNewCollections ||\n org.canEditAnyCollection ||\n org.canDeleteAnyCollection ||\n org.canEditAssignedCollections ||\n org.canDeleteAssignedCollections,\n },\n },\n {\n path: \"events\",\n component: EventsComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"eventLogs\",\n organizationPermissions: (org: Organization) => org.canAccessEventLogs,\n },\n },\n {\n path: \"groups\",\n component: GroupsComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"groups\",\n organizationPermissions: (org: Organization) => org.canManageGroups,\n },\n },\n {\n path: \"people\",\n component: PeopleComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"people\",\n organizationPermissions: (org: Organization) =>\n org.canManageUsers || org.canManageUsersPassword,\n },\n },\n {\n path: \"policies\",\n component: PoliciesComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"policies\",\n organizationPermissions: (org: Organization) => org.canManagePolicies,\n },\n },\n ],\n },\n {\n path: \"settings\",\n component: SettingsComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: { organizationPermissions: canAccessSettingsTab },\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"account\" },\n { path: \"account\", component: AccountComponent, data: { titleId: \"myOrganization\" } },\n {\n path: \"two-factor\",\n component: TwoFactorSetupComponent,\n data: { titleId: \"twoStepLogin\" },\n },\n {\n path: \"billing\",\n component: OrganizationBillingComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"billing\",\n organizationPermissions: (org: Organization) => org.canManageBilling,\n },\n },\n {\n path: \"subscription\",\n component: OrganizationSubscriptionComponent,\n data: { titleId: \"subscription\" },\n },\n ],\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class OrganizationsRoutingModule {}\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, 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 { ValidationService } from \"@bitwarden/angular/services/validation.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\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/organizationSponsorshipRedeemRequest\";\n\nimport { OrganizationPlansComponent } from \"../../settings/organization-plans.component\";\nimport { DeleteOrganizationComponent } from \"../settings/delete-organization.component\";\n\n@Component({\n selector: \"families-for-enterprise-setup\",\n templateUrl: \"families-for-enterprise-setup.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class FamiliesForEnterpriseSetupComponent implements OnInit {\n @ViewChild(OrganizationPlansComponent, { static: false })\n set organizationPlansComponent(value: OrganizationPlansComponent) {\n if (!value) {\n return;\n }\n\n value.plan = PlanType.FamiliesAnnually;\n value.product = ProductType.Families;\n value.acceptingSponsorship = true;\n // 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\n showNewOrganization = false;\n _organizationPlansComponent: OrganizationPlansComponent;\n _selectedFamilyOrganizationId = \"\";\n\n constructor(\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private apiService: ApiService,\n private syncService: SyncService,\n private validationService: ValidationService,\n private organizationService: OrganizationService,\n private modalService: ModalService\n ) {}\n\n async ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n // 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 this.existingFamilyOrganizations = (await this.organizationService.getAll()).filter(\n (o) => o.planProductType === ProductType.Families\n );\n\n if (this.existingFamilyOrganizations.length === 0) {\n this.selectedFamilyOrganizationId = \"createNew\";\n }\n });\n }\n\n async submit() {\n this.formPromise = this.doSubmit(this._selectedFamilyOrganizationId);\n await this.formPromise;\n this.formPromise = null;\n }\n\n get selectedFamilyOrganizationId() {\n return this._selectedFamilyOrganizationId;\n }\n\n set selectedFamilyOrganizationId(value: string) {\n this._selectedFamilyOrganizationId = value;\n this.showNewOrganization = value === \"createNew\";\n }\n\n private async doSubmit(organizationId: string) {\n try {\n const request = new OrganizationSponsorshipRedeemRequest();\n request.planSponsorshipType = PlanSponsorshipType.FamiliesForEnterprise;\n request.sponsoredOrganizationId = organizationId;\n\n await this.apiService.postRedeemSponsorship(this.token, request);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"sponsoredFamiliesOfferRedeemed\")\n );\n await this.syncService.fullSync(true);\n\n this.router.navigate([\"/\"]);\n } catch (e) {\n if (this.showNewOrganization) {\n await this.modalService.openViewRef(\n DeleteOrganizationComponent,\n this.deleteModalRef,\n (comp) => {\n comp.organizationId = organizationId;\n comp.deleteOrganizationRequestType = \"InvalidFamiliesForEnterprise\";\n // 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 { 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","export enum ReportVariant {\n Enabled = \"Enabled\",\n RequiresPremium = \"RequiresPremium\",\n RequiresUpgrade = \"RequiresUpgrade\",\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/breachAccountResponse\";\n\n@Component({\n selector: \"app-breach-report\",\n templateUrl: \"breach-report.component.html\",\n})\nexport class BreachReportComponent implements OnInit {\n error = false;\n username: string;\n checkedUsername: string;\n breachedAccounts: BreachAccountResponse[] = [];\n formPromise: Promise;\n\n constructor(private auditService: AuditService, private stateService: StateService) {}\n\n async ngOnInit() {\n this.username = await this.stateService.getEmail();\n }\n\n async submit() {\n this.error = false;\n this.username = this.username.toLowerCase();\n try {\n this.formPromise = this.auditService.breachedAccounts(this.username);\n this.breachedAccounts = await this.formPromise;\n } catch {\n this.error = true;\n }\n this.checkedUsername = this.username;\n }\n}\n","class Icon {\n constructor(readonly svg: string) {}\n}\n\n// We only export the type to prohibit the creation of Icons without using\n// the `svgIcon` template literal tag.\nexport type { Icon };\n\nexport function isIcon(icon: unknown): icon is Icon {\n return icon instanceof Icon;\n}\n\nexport class DynamicContentNotAllowedError extends Error {\n constructor() {\n super(\"Dynamic content in icons is not allowed due to risk of user-injected XSS.\");\n }\n}\n\nexport function svgIcon(strings: TemplateStringsArray, ...values: unknown[]): Icon {\n if (values.length > 0) {\n throw new DynamicContentNotAllowedError();\n }\n\n return new Icon(strings[0]);\n}\n","import { svgIcon } from \"@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 \"./models/report-entry\";\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 { 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 constructor(private domSanitizer: DomSanitizer) {}\n\n @HostBinding(\"innerHtml\")\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","\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","import { Component, OnInit } from \"@angular/core\";\n\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\nimport { ReportEntry } from \"../models/report-entry\";\nimport { ReportVariant } from \"../models/report-variant\";\nimport { reports, ReportType } from \"../reports\";\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","
\n

{{ \"reports\" | i18n }}

\n
\n\n

{{ \"reportsDesc\" | i18n }}

\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 { ReportCardComponent } from \"./report-card/report-card.component\";\nimport { ReportListComponent } from \"./report-list/report-list.component\";\nimport { ReportsLayoutComponent } from \"./reports-layout.component\";\nimport { ReportsRoutingModule } from \"./reports-routing.module\";\n\n@NgModule({\n imports: [CommonModule, SharedModule, ReportsRoutingModule],\n declarations: [\n BreachReportComponent,\n ExposedPasswordsReportComponent,\n InactiveTwoFactorReportComponent,\n ReportCardComponent,\n ReportListComponent,\n ReportsLayoutComponent,\n ReportsHomeComponent,\n ReusedPasswordsReportComponent,\n UnsecuredWebsitesReportComponent,\n WeakPasswordsReportComponent,\n WeakPasswordsReportComponent,\n ],\n})\nexport class ReportsModule {}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendAccess } from \"../domain/sendAccess\";\n\nimport { SendFileView } from \"./sendFileView\";\nimport { SendTextView } from \"./sendTextView\";\nimport { View } from \"./view\";\n\nexport class SendAccessView implements View {\n id: string = null;\n name: string = null;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n expirationDate: Date = null;\n creatorIdentifier: string = null;\n\n constructor(s?: SendAccess) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.type = s.type;\n this.expirationDate = s.expirationDate;\n this.creatorIdentifier = s.creatorIdentifier;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendAccessResponse } from \"../response/sendAccessResponse\";\nimport { SendAccessView } from \"../view/sendAccessView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SendFile } from \"./sendFile\";\nimport { SendText } from \"./sendText\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class SendAccess extends Domain {\n id: string;\n type: SendType;\n name: EncString;\n file: SendFile;\n text: SendText;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(obj?: SendAccessResponse) {\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/encArrayBuffer\";\nimport { SendAccess } from \"@bitwarden/common/models/domain/sendAccess\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\nimport { SendAccessRequest } from \"@bitwarden/common/models/request/sendAccessRequest\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/errorResponse\";\nimport { SendAccessResponse } from \"@bitwarden/common/models/response/sendAccessResponse\";\nimport { SendAccessView } from \"@bitwarden/common/models/view/sendAccessView\";\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, OnInit } from \"@angular/core\";\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/sendView\";\n\n@Directive()\nexport class SendComponent implements OnInit {\n disableSend = false;\n sendType = SendType;\n loaded = false;\n loading = true;\n refreshing = false;\n expired = false;\n type: SendType = null;\n sends: SendView[] = [];\n filteredSends: SendView[] = [];\n searchText: string;\n selectedType: SendType;\n selectedAll: boolean;\n searchPlaceholder: string;\n filter: (cipher: SendView) => boolean;\n searchPending = false;\n hasSearched = false; // search() function called - returns true if text qualifies for search\n\n actionPromise: any;\n onSuccessfulRemovePassword: () => Promise;\n onSuccessfulDelete: () => Promise;\n onSuccessfulLoad: () => Promise;\n\n private searchTimeout: any;\n\n constructor(\n protected sendService: SendService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected environmentService: EnvironmentService,\n protected ngZone: NgZone,\n protected searchService: SearchService,\n protected policyService: PolicyService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.disableSend = await this.policyService.policyAppliesToUser(PolicyType.DisableSend);\n }\n\n async load(filter: (send: SendView) => boolean = null) {\n this.loading = true;\n const sends = await this.sendService.getAllDecrypted();\n this.sends = sends;\n if (this.onSuccessfulLoad != null) {\n await this.onSuccessfulLoad();\n } else {\n // Default action\n this.selectAll();\n }\n this.loading = false;\n this.loaded = true;\n }\n\n async reload(filter: (send: SendView) => boolean = null) {\n this.loaded = false;\n this.sends = [];\n await this.load(filter);\n }\n\n async refresh() {\n try {\n this.refreshing = true;\n await this.reload(this.filter);\n } finally {\n this.refreshing = false;\n }\n }\n\n async applyFilter(filter: (send: SendView) => boolean = null) {\n this.filter = filter;\n await this.search(null);\n }\n\n async search(timeout: number = null) {\n this.searchPending = false;\n if (this.searchTimeout != null) {\n clearTimeout(this.searchTimeout);\n }\n if (timeout == null) {\n this.hasSearched = this.searchService.isSearchable(this.searchText);\n this.filteredSends = this.sends.filter((s) => this.filter == null || this.filter(s));\n this.applyTextSearch();\n return;\n }\n this.searchPending = true;\n this.searchTimeout = setTimeout(async () => {\n this.hasSearched = this.searchService.isSearchable(this.searchText);\n this.filteredSends = this.sends.filter((s) => this.filter == null || this.filter(s));\n this.applyTextSearch();\n this.searchPending = false;\n }, timeout);\n }\n\n async removePassword(s: SendView): Promise {\n if (this.actionPromise != null || s.password == null) {\n return;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removePasswordConfirmation\"),\n this.i18nService.t(\"removePassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendService.removePasswordWithServer(s.id);\n await this.actionPromise;\n if (this.onSuccessfulRemovePassword != null) {\n this.onSuccessfulRemovePassword();\n } else {\n // Default actions\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"removedPassword\"));\n await this.load();\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n\n async delete(s: SendView): Promise {\n if (this.actionPromise != null) {\n return false;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteSendConfirmation\"),\n this.i18nService.t(\"deleteSend\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendService.deleteWithServer(s.id);\n await this.actionPromise;\n\n if (this.onSuccessfulDelete != null) {\n this.onSuccessfulDelete();\n } else {\n // Default actions\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedSend\"));\n await this.refresh();\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n return true;\n }\n\n copy(s: SendView) {\n const sendLinkBaseUrl = this.environmentService.getSendUrl();\n const link = sendLinkBaseUrl + s.accessId + \"/\" + s.urlB64Key;\n this.platformUtilsService.copyToClipboard(link);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"sendLink\"))\n );\n }\n\n searchTextChanged() {\n this.search(200);\n }\n\n selectAll() {\n this.clearSelections();\n this.selectedAll = true;\n this.applyFilter(null);\n }\n\n selectType(type: SendType) {\n this.clearSelections();\n this.selectedType = type;\n this.applyFilter((s) => s.type === type);\n }\n\n clearSelections() {\n this.selectedAll = false;\n this.selectedType = null;\n }\n\n private applyTextSearch() {\n if (this.searchText != null) {\n this.filteredSends = this.searchService.searchSends(this.filteredSends, this.searchText);\n }\n }\n}\n","import { 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, OnInit, Output } from \"@angular/core\";\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/encArrayBuffer\";\nimport { Send } from \"@bitwarden/common/models/domain/send\";\nimport { SendFileView } from \"@bitwarden/common/models/view/sendFileView\";\nimport { SendTextView } from \"@bitwarden/common/models/view/sendTextView\";\nimport { SendView } from \"@bitwarden/common/models/view/sendView\";\n\n@Directive()\nexport class AddEditComponent implements OnInit {\n @Input() sendId: string;\n @Input() type: SendType;\n\n @Output() onSavedSend = new EventEmitter();\n @Output() onDeletedSend = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n\n copyLink = false;\n disableSend = false;\n disableHideEmail = false;\n send: SendView;\n deletionDate: string;\n expirationDate: string;\n hasPassword: boolean;\n password: string;\n showPassword = false;\n formPromise: Promise;\n deletePromise: Promise;\n sendType = SendType;\n typeOptions: any[];\n canAccessPremium = true;\n emailVerified = true;\n alertShown = false;\n showOptions = false;\n\n private sendLinkBaseUrl: string;\n\n constructor(\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected environmentService: EnvironmentService,\n protected datePipe: DatePipe,\n protected sendService: SendService,\n protected messagingService: MessagingService,\n protected policyService: PolicyService,\n private logService: LogService,\n protected stateService: StateService\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"sendTypeFile\"), value: SendType.File },\n { name: i18nService.t(\"sendTypeText\"), value: SendType.Text },\n ];\n this.sendLinkBaseUrl = this.environmentService.getSendUrl();\n }\n\n get link(): string {\n if (this.send.id != null && this.send.accessId != null) {\n return this.sendLinkBaseUrl + this.send.accessId + \"/\" + this.send.urlB64Key;\n }\n return null;\n }\n\n get isSafari() {\n return this.platformUtilsService.isSafari();\n }\n\n get isDateTimeLocalSupported(): boolean {\n return !(this.platformUtilsService.isFirefox() || this.platformUtilsService.isSafari());\n }\n\n async ngOnInit() {\n await this.load();\n }\n\n get editMode(): boolean {\n return this.sendId != null;\n }\n\n get title(): string {\n return this.i18nService.t(this.editMode ? \"editSend\" : \"createSend\");\n }\n\n setDates(event: { deletionDate: string; expirationDate: string }) {\n this.deletionDate = event.deletionDate;\n this.expirationDate = event.expirationDate;\n }\n\n async load() {\n this.disableSend = await this.policyService.policyAppliesToUser(PolicyType.DisableSend);\n this.disableHideEmail = await this.policyService.policyAppliesToUser(\n PolicyType.SendOptions,\n (p) => p.data.disableHideEmail\n );\n\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n this.emailVerified = await this.stateService.getEmailVerified();\n if (!this.canAccessPremium || !this.emailVerified) {\n this.type = SendType.Text;\n }\n\n if (this.send == null) {\n if (this.editMode) {\n const send = await this.loadSend();\n this.send = await send.decrypt();\n } else {\n this.send = new SendView();\n this.send.type = this.type == null ? SendType.File : this.type;\n this.send.file = new SendFileView();\n this.send.text = new SendTextView();\n this.send.deletionDate = new Date();\n this.send.deletionDate.setDate(this.send.deletionDate.getDate() + 7);\n }\n }\n\n this.hasPassword = this.send.password != null && this.send.password.trim() !== \"\";\n }\n\n async submit(): Promise {\n if (this.disableSend) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"sendDisabledWarning\")\n );\n return false;\n }\n\n if (this.send.name == null || this.send.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n let file: File = null;\n if (this.send.type === SendType.File && !this.editMode) {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n file = files[0];\n if (files[0].size > 524288000) {\n // 500 MB\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"maxFileSize\")\n );\n return;\n }\n }\n\n if (this.password != null && this.password.trim() === \"\") {\n this.password = null;\n }\n\n this.formPromise = this.encryptSend(file).then(async (encSend) => {\n const uploadPromise = this.sendService.saveWithServer(encSend);\n await uploadPromise;\n if (this.send.id == null) {\n this.send.id = encSend[0].id;\n }\n if (this.send.accessId == null) {\n this.send.accessId = encSend[0].accessId;\n }\n this.onSavedSend.emit(this.send);\n if (this.copyLink && this.link != null) {\n const copySuccess = await this.copyLinkToClipboard(this.link);\n if (copySuccess ?? true) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedSend\" : \"createdSend\")\n );\n } else {\n await this.platformUtilsService.showDialog(\n this.i18nService.t(this.editMode ? \"editedSend\" : \"createdSend\"),\n null,\n this.i18nService.t(\"ok\"),\n null,\n \"success\",\n null\n );\n await this.copyLinkToClipboard(this.link);\n }\n }\n });\n try {\n await this.formPromise;\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n return false;\n }\n\n async copyLinkToClipboard(link: string): Promise {\n return Promise.resolve(this.platformUtilsService.copyToClipboard(link));\n }\n\n async delete(): Promise {\n if (this.deletePromise != null) {\n return false;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteSendConfirmation\"),\n this.i18nService.t(\"deleteSend\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.sendService.deleteWithServer(this.send.id);\n await this.deletePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedSend\"));\n await this.load();\n this.onDeletedSend.emit(this.send);\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n typeChanged() {\n if (this.send.type === SendType.File && !this.alertShown) {\n if (!this.canAccessPremium) {\n this.alertShown = true;\n this.messagingService.send(\"premiumRequired\");\n } else if (!this.emailVerified) {\n this.alertShown = true;\n this.messagingService.send(\"emailVerificationRequired\");\n }\n }\n }\n\n toggleOptions() {\n this.showOptions = !this.showOptions;\n }\n\n protected async loadSend(): Promise {\n return this.sendService.get(this.sendId);\n }\n\n protected async encryptSend(file: File): Promise<[Send, EncArrayBuffer]> {\n const sendData = await this.sendService.encrypt(this.send, file, this.password, null);\n\n // Parse dates\n try {\n sendData[0].deletionDate = this.deletionDate == null ? null : new Date(this.deletionDate);\n } catch {\n sendData[0].deletionDate = null;\n }\n try {\n sendData[0].expirationDate =\n this.expirationDate == null ? null : new Date(this.expirationDate);\n } catch {\n sendData[0].expirationDate = null;\n }\n\n return sendData;\n }\n\n protected togglePasswordVisible() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"password\").focus();\n }\n}\n","
\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 {{ \"sendTypeText\" | i18n }}\n \n \n
  • \n
  • \n \n \n {{ \"sendTypeFile\" | i18n }}\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/sendView\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\n\nconst BroadcasterSubscriptionId = \"SendComponent\";\n\n@Component({\n selector: \"app-send\",\n templateUrl: \"send.component.html\",\n})\nexport class SendComponent extends BaseSendComponent {\n @ViewChild(\"sendAddEdit\", { read: ViewContainerRef, static: true })\n sendAddEditModalRef: ViewContainerRef;\n\n constructor(\n sendService: SendService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n ngZone: NgZone,\n searchService: SearchService,\n policyService: PolicyService,\n private modalService: ModalService,\n private broadcasterService: BroadcasterService,\n logService: LogService\n ) {\n super(\n sendService,\n i18nService,\n platformUtilsService,\n environmentService,\n ngZone,\n searchService,\n policyService,\n logService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n\n // Broadcaster subscription - load if sync completes in the background\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"syncCompleted\":\n if (message.successfully) {\n await this.load();\n }\n break;\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async addSend() {\n if (this.disableSend) {\n return;\n }\n\n const component = await this.editSend(null);\n component.type = this.type;\n }\n\n async editSend(send: SendView) {\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.sendAddEditModalRef,\n (comp) => {\n comp.sendId = send == null ? null : send.id;\n // 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 { AccountService } from \"@bitwarden/common/abstractions/account/account.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 { 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 accountService: AccountService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const verification = this.deleteForm.get(\"verification\").value;\n this.formPromise = this.accountService.delete(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 \"./secretVerificationRequest\";\n\nexport class EmailTokenRequest extends SecretVerificationRequest {\n newEmail: string;\n masterPasswordHash: string;\n}\n","import { EmailTokenRequest } from \"./emailTokenRequest\";\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 { EmailRequest } from \"@bitwarden/common/models/request/emailRequest\";\nimport { EmailTokenRequest } from \"@bitwarden/common/models/request/emailTokenRequest\";\n\n@Component({\n selector: \"app-change-email\",\n templateUrl: \"change-email.component.html\",\n})\nexport class ChangeEmailComponent implements OnInit {\n masterPassword: string;\n newEmail: string;\n token: string;\n tokenSent = false;\n showTwoFactorEmailWarning = false;\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n const twoFactorProviders = await this.apiService.getTwoFactorProviders();\n this.showTwoFactorEmailWarning = twoFactorProviders.data.some(\n (p) => p.type === TwoFactorProviderType.Email && p.enabled\n );\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"updateKey\"));\n return;\n }\n\n this.newEmail = this.newEmail.trim().toLowerCase();\n if (!this.tokenSent) {\n const request = new EmailTokenRequest();\n request.newEmail = this.newEmail;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.postEmailToken(request);\n await this.formPromise;\n this.tokenSent = true;\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n const request = new EmailRequest();\n request.token = this.token;\n request.newEmail = this.newEmail;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n const kdf = await this.stateService.getKdfType();\n const kdfIterations = await this.stateService.getKdfIterations();\n const newKey = await this.cryptoService.makeKey(\n this.masterPassword,\n this.newEmail,\n kdf,\n kdfIterations\n );\n request.newMasterPasswordHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n newKey\n );\n const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n request.key = newEncKey[1].encryptedString;\n try {\n this.formPromise = this.apiService.postEmail(request);\n await this.formPromise;\n this.reset();\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"emailChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n }\n\n reset() {\n this.token = this.newEmail = this.masterPassword = null;\n this.tokenSent = false;\n }\n}\n","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

\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/updateProfileRequest\";\nimport { ProfileResponse } from \"@bitwarden/common/models/response/profileResponse\";\n\n@Component({\n selector: \"app-profile\",\n templateUrl: \"profile.component.html\",\n})\nexport class ProfileComponent implements OnInit {\n loading = true;\n profile: ProfileResponse;\n fingerprint: string;\n\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/updateDomainsRequest\";\n\n@Component({\n selector: \"app-domain-rules\",\n templateUrl: \"domain-rules.component.html\",\n})\nexport class DomainRulesComponent implements OnInit {\n loading = true;\n custom: string[] = [];\n global: any[] = [];\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n const response = await this.apiService.getSettingsDomains();\n this.loading = false;\n if (response.equivalentDomains != null) {\n this.custom = response.equivalentDomains.map((d) => d.join(\", \"));\n }\n if (response.globalEquivalentDomains != null) {\n this.global = response.globalEquivalentDomains.map((d) => {\n return {\n domains: d.domains.join(\", \"),\n excluded: d.excluded,\n key: d.type,\n };\n });\n }\n }\n\n toggleExcluded(globalDomain: any) {\n globalDomain.excluded = !globalDomain.excluded;\n }\n\n customize(globalDomain: any) {\n globalDomain.excluded = true;\n this.custom.push(globalDomain.domains);\n }\n\n remove(index: number) {\n this.custom.splice(index, 1);\n }\n\n add() {\n this.custom.push(\"\");\n }\n\n async submit() {\n const request = new UpdateDomainsRequest();\n request.excludedGlobalEquivalentDomains = this.global\n .filter((d) => d.excluded)\n .map((d) => d.key);\n if (request.excludedGlobalEquivalentDomains.length === 0) {\n request.excludedGlobalEquivalentDomains = null;\n }\n request.equivalentDomains = this.custom\n .filter((d) => d != null && d.trim() !== \"\")\n .map((d) => d.split(\",\").map((d2) => d2.trim()));\n if (request.equivalentDomains.length === 0) {\n request.equivalentDomains = null;\n }\n\n try {\n this.formPromise = this.apiService.putSettingsDomains(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"domainsUpdated\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n indexTrackBy(index: number, obj: any): any {\n return index;\n }\n}\n","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/attachmentView\";\n\n@Component({\n selector: \"emergency-access-attachments\",\n templateUrl: \"../vault/attachments.component.html\",\n})\nexport class EmergencyAccessAttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = true;\n canAccessAttachments = true;\n\n constructor(\n cipherService: CipherService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n logService: LogService,\n 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.service\";\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/cipherData\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\nimport { EmergencyAccessViewResponse } from \"@bitwarden/common/models/response/emergencyAccessResponse\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipherView\";\n\nimport { EmergencyAccessAttachmentsComponent } from \"./emergency-access-attachments.component\";\nimport { EmergencyAddEditComponent } from \"./emergency-add-edit.component\";\n\n@Component({\n selector: \"emergency-access-view\",\n templateUrl: \"emergency-access-view.component.html\",\n})\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/emergencyAccessInviteRequest\";\nimport { EmergencyAccessUpdateRequest } from \"@bitwarden/common/models/request/emergencyAccessUpdateRequest\";\n\n@Component({\n selector: \"emergency-access-add-edit\",\n templateUrl: \"emergency-access-add-edit.component.html\",\n})\nexport class EmergencyAccessAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() emergencyAccessId: string;\n @Output() onSaved = new EventEmitter();\n @Output() onDeleted = new EventEmitter();\n\n loading = true;\n readOnly = false;\n editMode = false;\n title: string;\n email: string;\n type: EmergencyAccessType = EmergencyAccessType.View;\n\n formPromise: Promise;\n\n emergencyAccessType = EmergencyAccessType;\n waitTimes: { name: string; value: number }[];\n waitTime: number;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.editMode = this.loading = this.emergencyAccessId != null;\n\n this.waitTimes = [\n { name: this.i18nService.t(\"oneDay\"), value: 1 },\n { name: this.i18nService.t(\"days\", \"2\"), value: 2 },\n { name: this.i18nService.t(\"days\", \"7\"), value: 7 },\n { name: this.i18nService.t(\"days\", \"14\"), value: 14 },\n { name: this.i18nService.t(\"days\", \"30\"), value: 30 },\n { name: this.i18nService.t(\"days\", \"90\"), value: 90 },\n ];\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editEmergencyContact\");\n try {\n const emergencyAccess = await this.apiService.getEmergencyAccess(this.emergencyAccessId);\n this.type = emergencyAccess.type;\n this.waitTime = emergencyAccess.waitTimeDays;\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"inviteEmergencyContact\");\n this.waitTime = this.waitTimes[2].value;\n }\n\n this.loading = false;\n }\n\n async submit() {\n try {\n if (this.editMode) {\n const request = new EmergencyAccessUpdateRequest();\n request.type = this.type;\n request.waitTimeDays = this.waitTime;\n\n this.formPromise = this.apiService.putEmergencyAccess(this.emergencyAccessId, request);\n } else {\n const request = new EmergencyAccessInviteRequest();\n request.email = this.email.trim();\n request.type = this.type;\n request.waitTimeDays = this.waitTime;\n\n this.formPromise = this.apiService.postEmergencyAccessInvite(request);\n }\n\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedUserId\" : \"invitedUsers\", this.name)\n );\n this.onSaved.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n this.onDeleted.emit();\n }\n}\n","
\n \n
\n","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, OnInit, Output } from \"@angular/core\";\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/policyData\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\nimport { EmergencyAccessPasswordRequest } from \"@bitwarden/common/models/request/emergencyAccessPasswordRequest\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policyResponse\";\n\n@Component({\n selector: \"emergency-access-takeover\",\n templateUrl: \"emergency-access-takeover.component.html\",\n})\nexport class EmergencyAccessTakeoverComponent extends ChangePasswordComponent implements OnInit {\n @Output() onDone = new EventEmitter();\n @Input() emergencyAccessId: string;\n @Input() name: string;\n @Input() email: string;\n @Input() kdf: KdfType;\n @Input() kdfIterations: number;\n\n formPromise: Promise;\n\n constructor(\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n private apiService: ApiService,\n private logService: LogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n const response = await this.apiService.getEmergencyGrantorPolicies(this.emergencyAccessId);\n if (response.data != null && response.data.length > 0) {\n const policies = response.data.map(\n (policyResponse: PolicyResponse) => new Policy(new PolicyData(policyResponse))\n );\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(\n policies\n );\n }\n }\n\n async submit() {\n if (!(await this.strongPassword())) {\n return;\n }\n\n const takeoverResponse = await this.apiService.postEmergencyAccessTakeover(\n this.emergencyAccessId\n );\n\n const oldKeyBuffer = await this.cryptoService.rsaDecrypt(takeoverResponse.keyEncrypted);\n const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n if (oldEncKey == null) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"unexpectedError\")\n );\n return;\n }\n\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email,\n takeoverResponse.kdf,\n takeoverResponse.kdfIterations\n );\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n const encKey = await this.cryptoService.remakeEncKey(key, oldEncKey);\n\n const request = new EmergencyAccessPasswordRequest();\n request.newMasterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n\n this.apiService.postEmergencyAccessPassword(this.emergencyAccessId, request);\n\n try {\n this.onDone.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n

{{ \"emergencyAccess\" | i18n }}

\n
\n

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

\n\n

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

\n\n
\n

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

\n
\n \n \n {{ \"addEmergencyContact\" | i18n }}\n \n
\n
\n\n\n \n \n \n \n \n \n \n
\n \n \n \n {{ c.email }}\n {{ \"invited\" | i18n }}\n {{ \"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 \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.service\";\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/emergencyAccessConfirmRequest\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n} from \"@bitwarden/common/models/response/emergencyAccessResponse\";\n\nimport { EmergencyAccessAddEditComponent } from \"./emergency-access-add-edit.component\";\nimport { EmergencyAccessConfirmComponent } from \"./emergency-access-confirm.component\";\nimport { EmergencyAccessTakeoverComponent } from \"./emergency-access-takeover.component\";\n\n@Component({\n selector: \"emergency-access\",\n templateUrl: \"emergency-access.component.html\",\n})\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, OnInit } from \"@angular/core\";\nimport {\n AbstractControl,\n ControlValueAccessor,\n UntypedFormBuilder,\n ValidationErrors,\n Validator,\n} from \"@angular/forms\";\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 implements ControlValueAccessor, Validator, OnInit {\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\n constructor(\n private formBuilder: UntypedFormBuilder,\n private policyService: PolicyService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n if (await this.policyService.policyAppliesToUser(PolicyType.MaximumVaultTimeout)) {\n const vaultTimeoutPolicy = await this.policyService.getAll(PolicyType.MaximumVaultTimeout);\n\n this.vaultTimeoutPolicy = vaultTimeoutPolicy[0];\n this.vaultTimeoutPolicyHours = Math.floor(this.vaultTimeoutPolicy.data.minutes / 60);\n this.vaultTimeoutPolicyMinutes = this.vaultTimeoutPolicy.data.minutes % 60;\n\n this.vaultTimeouts = this.vaultTimeouts.filter(\n (t) =>\n t.value <= this.vaultTimeoutPolicy.data.minutes &&\n (t.value > 0 || t.value === VaultTimeoutInputComponent.CUSTOM_VALUE) &&\n t.value != null\n );\n this.validatorChange();\n }\n\n // 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 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.get(\"custom.hours\")?.value * 60 + this.form.get(\"custom.minutes\")?.value;\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 \n \n
\n {{ \"enableGravatarsDesc\" | i18n }}\n
\n
\n
\n \n \n
\n {{ \"enableFullWidthDesc\" | i18n }}\n
\n
\n
\n
\n \n \n {{ \"themeDesc\" | i18n }}\n
\n
\n
\n \n
\n","import { Component, 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 enableGravatars: boolean;\n enableFullWidth: boolean;\n theme: ThemeType;\n locale: string;\n vaultTimeouts: { name: string; value: number }[];\n localeOptions: any[];\n themeOptions: any[];\n\n vaultTimeout: 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.enableGravatars = await this.stateService.getEnableGravitars();\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.setEnableGravitars(this.enableGravatars);\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 \"./folderRequest\";\n\nexport class FolderWithIdRequest extends FolderRequest {\n id: string;\n\n constructor(folder: Folder) {\n super(folder);\n this.id = folder.id;\n }\n}\n","import { Send } from \"../domain/send\";\n\nimport { SendRequest } from \"./sendRequest\";\n\nexport class SendWithIdRequest extends SendRequest {\n id: string;\n\n constructor(send: Send) {\n super(send);\n this.id = send.id;\n }\n}\n","import { CipherWithIdRequest } from \"./cipherWithIdRequest\";\nimport { FolderWithIdRequest } from \"./folderWithIdRequest\";\nimport { SendWithIdRequest } from \"./sendWithIdRequest\";\n\nexport class UpdateKeyRequest {\n ciphers: CipherWithIdRequest[] = [];\n folders: FolderWithIdRequest[] = [];\n sends: SendWithIdRequest[] = [];\n masterPasswordHash: string;\n privateKey: string;\n key: string;\n}\n","
\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 { OrganizationService } from \"@bitwarden/common/abstractions/organization.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 { 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/encString\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetricCryptoKey\";\nimport { CipherWithIdRequest } from \"@bitwarden/common/models/request/cipherWithIdRequest\";\nimport { EmergencyAccessUpdateRequest } from \"@bitwarden/common/models/request/emergencyAccessUpdateRequest\";\nimport { FolderWithIdRequest } from \"@bitwarden/common/models/request/folderWithIdRequest\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/models/request/organizationUserResetPasswordEnrollmentRequest\";\nimport { PasswordRequest } from \"@bitwarden/common/models/request/passwordRequest\";\nimport { SendWithIdRequest } from \"@bitwarden/common/models/request/sendWithIdRequest\";\nimport { UpdateKeyRequest } from \"@bitwarden/common/models/request/updateKeyRequest\";\n\n@Component({\n selector: \"app-change-password\",\n templateUrl: \"change-password.component.html\",\n})\nexport class ChangePasswordComponent extends BaseChangePasswordComponent {\n rotateEncKey = false;\n currentMasterPassword: string;\n 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 \"./passwordRequest\";\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/kdfRequest\";\n\n@Component({\n selector: \"app-change-kdf\",\n templateUrl: \"change-kdf.component.html\",\n})\nexport class ChangeKdfComponent implements OnInit {\n masterPassword: string;\n kdfIterations: number;\n kdf = KdfType.PBKDF2_SHA256;\n kdfOptions: any[] = [];\n formPromise: Promise;\n recommendedKdfIterations = DEFAULT_KDF_ITERATIONS;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private logService: LogService,\n private stateService: StateService\n ) {\n this.kdfOptions = [{ name: \"PBKDF2 SHA-256\", value: KdfType.PBKDF2_SHA256 }];\n }\n\n async ngOnInit() {\n this.kdf = await this.stateService.getKdfType();\n this.kdfIterations = await this.stateService.getKdfIterations();\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"updateKey\"));\n return;\n }\n\n const request = new KdfRequest();\n request.kdf = this.kdf;\n request.kdfIterations = this.kdfIterations;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n const email = await this.stateService.getEmail();\n const newKey = await this.cryptoService.makeKey(\n this.masterPassword,\n email,\n this.kdf,\n this.kdfIterations\n );\n request.newMasterPasswordHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n newKey\n );\n const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n request.key = newEncKey[1].encryptedString;\n try {\n this.formPromise = this.apiService.postAccountKdf(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"encKeySettingsChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","\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.service\";\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, OnInit } from \"@angular/core\";\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from \"@angular/forms\";\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.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 { PlanSponsorshipType } from \"@bitwarden/common/enums/planSponsorshipType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-sponsored-families\",\n templateUrl: \"sponsored-families.component.html\",\n})\nexport class SponsoredFamiliesComponent implements OnInit {\n loading = false;\n\n availableSponsorshipOrgs: Organization[] = [];\n activeSponsorshipOrgs: Organization[] = [];\n\n // Conditional display properties\n formPromise: Promise;\n\n sponsorshipForm: UntypedFormGroup;\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: UntypedFormBuilder,\n private stateService: StateService\n ) {\n this.sponsorshipForm = this.formBuilder.group({\n selectedSponsorshipOrgId: [\n \"\",\n {\n validators: [Validators.required],\n },\n ],\n sponsorshipEmail: [\n \"\",\n {\n validators: [Validators.email],\n asyncValidators: [\n notAllowedValueAsync(async () => await this.stateService.getEmail(), true),\n ],\n updateOn: \"blur\",\n },\n ],\n });\n }\n\n async ngOnInit() {\n await this.load();\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.load(true);\n }\n\n async load(forceReload = false) {\n if (this.loading) {\n return;\n }\n\n this.loading = true;\n if (forceReload) {\n await this.syncService.fullSync(true);\n }\n\n const allOrgs = await this.organizationService.getAll();\n this.availableSponsorshipOrgs = allOrgs.filter((org) => org.familySponsorshipAvailable);\n\n this.activeSponsorshipOrgs = allOrgs.filter(\n (org) => org.familySponsorshipFriendlyName !== null\n );\n\n if (this.availableSponsorshipOrgs.length === 1) {\n this.sponsorshipForm.patchValue({\n selectedSponsorshipOrgId: this.availableSponsorshipOrgs[0].id,\n });\n }\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 anyActiveSponsorships(): boolean {\n return this.activeSponsorshipOrgs.length > 0;\n }\n\n get anyOrgsAvailable(): boolean {\n return this.availableSponsorshipOrgs.length > 0;\n }\n\n get isSelfHosted(): boolean {\n return this.platformUtilsService.isSelfHost();\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 \n {{ \"inAppPurchase\" | i18n }}\n {{ paymentSource.description }}\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 { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\nimport { BillingPaymentResponse } from \"@bitwarden/common/models/response/billingPaymentResponse\";\n\n@Component({\n selector: \"app-payment-method\",\n templateUrl: \"payment-method.component.html\",\n})\nexport class PaymentMethodComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n showAdjustPayment = false;\n showAddCredit = false;\n billing: BillingPaymentResponse;\n paymentMethodType = PaymentMethodType;\n\n constructor(\n protected apiService: ApiService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n private router: Router\n ) {}\n\n async ngOnInit() {\n if (this.platformUtilsService.isSelfHost()) {\n this.router.navigate([\"/settings/subscription\"]);\n }\n await this.load();\n this.firstLoaded = true;\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n this.loading = true;\n this.billing = await this.apiService.getUserBillingPayment();\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 get isCreditBalance() {\n return this.billing == null || this.billing.balance <= 0;\n }\n\n get creditOrBalance() {\n return Math.abs(this.billing != null ? this.billing.balance : 0);\n }\n\n get paymentSource() {\n return this.billing != null ? this.billing.paymentSource : null;\n }\n\n get paymentSourceInApp() {\n return (\n this.paymentSource != null &&\n (this.paymentSource.type === PaymentMethodType.AppleInApp ||\n this.paymentSource.type === PaymentMethodType.GoogleInApp)\n );\n }\n}\n","
\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 {{ \"billingHistory\" | i18n }}\n

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

{{ \"invoices\" | i18n }}

\n

{{ \"noInvoices\" | i18n }}

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

{{ \"transactions\" | i18n }}

\n

{{ \"noTransactions\" | i18n }}

\n \n \n \n \n \n \n \n {{ t.amount | currency: \"$\" }}\n \n \n \n
{{ t.createdDate | date: \"mediumDate\" }}\n \n {{ \"chargeNoun\" | i18n }}\n \n {{ \"refundNoun\" | i18n }}\n \n \n {{ t.details }}\n
\n * {{ \"chargesStatement\" | i18n: \"BITWARDEN\" }}\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { 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 { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\nimport { TransactionType } from \"@bitwarden/common/enums/transactionType\";\nimport { BillingHistoryResponse } from \"@bitwarden/common/models/response/billingHistoryResponse\";\n\n@Component({\n selector: \"app-user-billing\",\n templateUrl: \"user-billing-history.component.html\",\n})\nexport class UserBillingHistoryComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n billing: BillingHistoryResponse;\n paymentMethodType = PaymentMethodType;\n transactionType = TransactionType;\n\n constructor(\n protected apiService: ApiService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n private router: Router\n ) {}\n\n async ngOnInit() {\n if (this.platformUtilsService.isSelfHost()) {\n this.router.navigate([\"/settings/subscription\"]);\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 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","\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/subscriptionResponse\";\n\n@Component({\n selector: \"app-user-subscription\",\n templateUrl: \"user-subscription.component.html\",\n})\nexport class UserSubscriptionComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n adjustStorageAdd = true;\n showAdjustStorage = false;\n showUpdateLicense = false;\n sub: SubscriptionResponse;\n selfHosted = false;\n\n cancelPromise: Promise;\n reinstatePromise: Promise;\n\n constructor(\n private 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 { PaymentMethodComponent } from \"./payment-method.component\";\nimport { PremiumComponent } from \"./premium.component\";\nimport { SubscriptionComponent } from \"./subscription.component\";\nimport { UserBillingHistoryComponent } from \"./user-billing-history.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: UserBillingHistoryComponent,\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/passwordGeneratorPolicyOptions\";\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/generatedPasswordHistory\";\n\n@Directive()\nexport class PasswordGeneratorHistoryComponent implements OnInit {\n history: GeneratedPasswordHistory[] = [];\n\n constructor(\n protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService,\n private win: Window\n ) {}\n\n async ngOnInit() {\n this.history = await this.passwordGenerationService.getHistory();\n }\n\n clear() {\n this.history = [];\n this.passwordGenerationService.clear();\n }\n\n copy(password: string) {\n const copyOptions = this.win != null ? { window: this.win } : null;\n this.platformUtilsService.copyToClipboard(password, copyOptions);\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"password\"))\n );\n }\n}\n","import { Directive, 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 }\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/encString\";\nimport { CipherWithIdRequest } from \"@bitwarden/common/models/request/cipherWithIdRequest\";\nimport { FolderWithIdRequest } from \"@bitwarden/common/models/request/folderWithIdRequest\";\nimport { UpdateKeyRequest } from \"@bitwarden/common/models/request/updateKeyRequest\";\n\n@Component({\n selector: \"app-update-key\",\n templateUrl: \"update-key.component.html\",\n})\nexport class UpdateKeyComponent {\n masterPassword: string;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private syncService: SyncService,\n private folderService: FolderService,\n private cipherService: CipherService,\n private logService: LogService\n ) {}\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (hasEncKey) {\n return;\n }\n\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"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/folderView\";\n\n@Directive()\nexport class FolderAddEditComponent implements OnInit {\n @Input() folderId: string;\n @Output() onSavedFolder = new EventEmitter();\n @Output() onDeletedFolder = new EventEmitter();\n\n editMode = false;\n folder: FolderView = new FolderView();\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n\n constructor(\n protected folderService: FolderService,\n protected 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, 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.service\";\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/cipherView\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collectionView\";\n\n@Directive()\nexport class ShareComponent implements OnInit {\n @Input() cipherId: string;\n @Input() organizationId: string;\n @Output() onSharedCipher = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collections: CollectionView[] = [];\n organizations: Organization[] = [];\n\n protected writeableCollections: CollectionView[] = [];\n\n constructor(\n protected collectionService: CollectionService,\n protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService,\n protected cipherService: CipherService,\n private logService: LogService,\n protected organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n const allCollections = await this.collectionService.getAllDecrypted();\n this.writeableCollections = allCollections.map((c) => c).filter((c) => !c.readOnly);\n const orgs = await this.organizationService.getAll();\n this.organizations = orgs\n .sort(Utils.getSortFunction(this.i18nService, \"name\"))\n .filter((o) => o.enabled && o.status === OrganizationUserStatusType.Confirmed);\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n this.cipher = await cipherDomain.decrypt();\n if (this.organizationId == null && this.organizations.length > 0) {\n this.organizationId = this.organizations[0].id;\n }\n this.filterCollections();\n }\n\n filterCollections() {\n this.writeableCollections.forEach((c) => ((c as any).checked = false));\n if (this.organizationId == null || this.writeableCollections.length === 0) {\n this.collections = [];\n } else {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.organizationId\n );\n }\n }\n\n async submit(): Promise {\n const selectedCollectionIds = this.collections\n .filter((c) => !!(c as any).checked)\n .map((c) => c.id);\n if (selectedCollectionIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectOneCollection\")\n );\n return;\n }\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n const cipherView = await cipherDomain.decrypt();\n const orgName =\n this.organizations.find((o) => o.id === this.organizationId)?.name ??\n this.i18nService.t(\"organization\");\n\n try {\n this.formPromise = this.cipherService\n .shareWithServer(cipherView, this.organizationId, selectedCollectionIds)\n .then(async () => {\n this.onSharedCipher.emit();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"movedItemToOrg\", cipherView.name, orgName)\n );\n });\n await this.formPromise;\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n return false;\n }\n\n get canSave() {\n if (this.collections != null) {\n for (let i = 0; i < this.collections.length; i++) {\n if ((this.collections[i] as any).checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","
\n
\n
\n
\n

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

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

{{ \"moveToOrgDesc\" | i18n }}

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

{{ \"collections\" | i18n }}

\n
\n \n \n
\n
\n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n
\n \n \n {{ c.name }}\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n {{ \"newOrganization\" | i18n }}\n \n \n
\n
\n
\n
\n","import { 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.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collectionView\";\n\n@Component({\n selector: \"app-vault-share\",\n templateUrl: \"share.component.html\",\n})\nexport class ShareComponent extends BaseShareComponent implements OnDestroy {\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n organizationService: OrganizationService,\n logService: LogService\n ) {\n super(\n collectionService,\n platformUtilsService,\n i18nService,\n cipherService,\n logService,\n organizationService\n );\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n const collections = select ? this.collections : this.writeableCollections;\n collections.forEach((c) => this.check(c, select));\n }\n}\n","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\";\n\n@Component({\n selector: \"app-verify-email\",\n templateUrl: \"verify-email.component.html\",\n})\nexport class VerifyEmailComponent {\n actionPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async send() {\n if (this.actionPromise != null) {\n return;\n }\n try {\n this.actionPromise = this.apiService.postAccountVerifyEmail();\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"checkInboxForVerification\")\n );\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n}\n","
\n
\n {{ \"verifyEmail\" | i18n }}\n
\n
\n

{{ \"verifyEmailDesc\" | i18n }}

\n \n \n \n {{ \"sendEmail\" | i18n }}\n \n \n
\n
\n","
\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 {{ \"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.service\";\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/cipherView\";\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 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 { OrganizationsRoutingModule } from \"./organizations/organization-routing.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: () => OrganizationsRoutingModule,\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\";\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/masterPasswordPolicyOptions\";\n\n@Component({\n selector: \"app-callout\",\n templateUrl: \"callout.component.html\",\n})\nexport class CalloutComponent implements OnInit {\n @Input() type = \"info\";\n @Input() icon: string;\n @Input() title: string;\n @Input() clickable: boolean;\n @Input() enforcedPolicyOptions: MasterPasswordPolicyOptions;\n @Input() enforcedPolicyMessage: string;\n @Input() useAlertRole = false;\n\n calloutStyle: string;\n\n constructor(private i18nService: I18nService) {}\n\n ngOnInit() {\n this.calloutStyle = this.type;\n\n if (this.enforcedPolicyMessage === undefined) {\n this.enforcedPolicyMessage = this.i18nService.t(\"masterPasswordPolicyInEffect\");\n }\n\n if (this.type === \"warning\" || this.type === \"danger\") {\n if (this.type === \"danger\") {\n this.calloutStyle = \"danger\";\n }\n if (this.title === undefined) {\n this.title = this.i18nService.t(\"warning\");\n }\n if (this.icon === undefined) {\n this.icon = \"bwi-exclamation-triangle\";\n }\n } else if (this.type === \"error\") {\n this.calloutStyle = \"danger\";\n if (this.title === undefined) {\n this.title = this.i18nService.t(\"error\");\n }\n if (this.icon === undefined) {\n this.icon = \"bwi-error\";\n }\n } else if (this.type === \"tip\") {\n this.calloutStyle = \"success\";\n if (this.title === undefined) {\n this.title = this.i18nService.t(\"tip\");\n }\n if (this.icon === undefined) {\n this.icon = \"bwi-lightbulb\";\n }\n }\n }\n\n getPasswordScoreAlertDisplay() {\n if (this.enforcedPolicyOptions == null) {\n return \"\";\n }\n\n let str: string;\n switch (this.enforcedPolicyOptions.minComplexity) {\n case 4:\n str = this.i18nService.t(\"strong\");\n break;\n case 3:\n str = this.i18nService.t(\"good\");\n break;\n default:\n str = this.i18nService.t(\"weak\");\n break;\n }\n return str + \" (\" + this.enforcedPolicyOptions.minComplexity + \")\";\n }\n}\n","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 { ErrorResponse } from \"@bitwarden/common/models/response/errorResponse\";\n\nimport { ValidationService } from \"../services/validation.service\";\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 { 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 { 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 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 { Injectable } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/errorResponse\";\n\n@Injectable()\nexport class ValidationService {\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n showError(data: any): string[] {\n const defaultErrorMessage = this.i18nService.t(\"unexpectedError\");\n let errors: string[] = [];\n\n if (data != null && typeof data === \"string\") {\n errors.push(data);\n } else if (data == null || typeof data !== \"object\") {\n errors.push(defaultErrorMessage);\n } else if (data.validationErrors != null) {\n errors = errors.concat((data as ErrorResponse).getAllMessages());\n } else {\n errors.push(data.message ? data.message : defaultErrorMessage);\n }\n\n if (errors.length === 1) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), errors[0]);\n } else if (errors.length > 1) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), errors, {\n timeout: 5000 * errors.length,\n });\n }\n\n return errors;\n }\n}\n","import { TreeNode } from \"@bitwarden/common/models/domain/treeNode\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collectionView\";\nimport { FolderView } from \"@bitwarden/common/models/view/folderView\";\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 { OrganizationService } from \"@bitwarden/common/abstractions/organization.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 { ServiceUtils } from \"@bitwarden/common/misc/serviceUtils\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { TreeNode } from \"@bitwarden/common/models/domain/treeNode\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collectionView\";\nimport { FolderView } from \"@bitwarden/common/models/view/folderView\";\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 return await this.organizationService.getAll();\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 this.policyService.policyAppliesToUser(PolicyType.SingleOrg);\n }\n\n async checkForPersonalOwnershipPolicy(): Promise {\n return await this.policyService.policyAppliesToUser(PolicyType.PersonalOwnership);\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/setKeyConnectorKeyRequest\";\nimport { AttachmentRequest } from \"../models/request/attachmentRequest\";\nimport { BitPayInvoiceRequest } from \"../models/request/bitPayInvoiceRequest\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipherBulkDeleteRequest\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipherBulkMoveRequest\";\nimport { CipherBulkRestoreRequest } from \"../models/request/cipherBulkRestoreRequest\";\nimport { CipherBulkShareRequest } from \"../models/request/cipherBulkShareRequest\";\nimport { CipherCollectionsRequest } from \"../models/request/cipherCollectionsRequest\";\nimport { CipherCreateRequest } from \"../models/request/cipherCreateRequest\";\nimport { CipherRequest } from \"../models/request/cipherRequest\";\nimport { CipherShareRequest } from \"../models/request/cipherShareRequest\";\nimport { CollectionRequest } from \"../models/request/collectionRequest\";\nimport { DeleteRecoverRequest } from \"../models/request/deleteRecoverRequest\";\nimport { DeviceVerificationRequest } from \"../models/request/deviceVerificationRequest\";\nimport { EmailRequest } from \"../models/request/emailRequest\";\nimport { EmailTokenRequest } from \"../models/request/emailTokenRequest\";\nimport { EmergencyAccessAcceptRequest } from \"../models/request/emergencyAccessAcceptRequest\";\nimport { EmergencyAccessConfirmRequest } from \"../models/request/emergencyAccessConfirmRequest\";\nimport { EmergencyAccessInviteRequest } from \"../models/request/emergencyAccessInviteRequest\";\nimport { EmergencyAccessPasswordRequest } from \"../models/request/emergencyAccessPasswordRequest\";\nimport { EmergencyAccessUpdateRequest } from \"../models/request/emergencyAccessUpdateRequest\";\nimport { EventRequest } from \"../models/request/eventRequest\";\nimport { GroupRequest } from \"../models/request/groupRequest\";\nimport { IapCheckRequest } from \"../models/request/iapCheckRequest\";\nimport { ApiTokenRequest } from \"../models/request/identityToken/apiTokenRequest\";\nimport { PasswordTokenRequest } from \"../models/request/identityToken/passwordTokenRequest\";\nimport { SsoTokenRequest } from \"../models/request/identityToken/ssoTokenRequest\";\nimport { ImportCiphersRequest } from \"../models/request/importCiphersRequest\";\nimport { ImportOrganizationCiphersRequest } from \"../models/request/importOrganizationCiphersRequest\";\nimport { KdfRequest } from \"../models/request/kdfRequest\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/keyConnectorUserKeyRequest\";\nimport { KeysRequest } from \"../models/request/keysRequest\";\nimport { OrganizationSponsorshipCreateRequest } from \"../models/request/organization/organizationSponsorshipCreateRequest\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../models/request/organization/organizationSponsorshipRedeemRequest\";\nimport { OrganizationConnectionRequest } from \"../models/request/organizationConnectionRequest\";\nimport { OrganizationImportRequest } from \"../models/request/organizationImportRequest\";\nimport { OrganizationUserAcceptRequest } from \"../models/request/organizationUserAcceptRequest\";\nimport { OrganizationUserBulkConfirmRequest } from \"../models/request/organizationUserBulkConfirmRequest\";\nimport { OrganizationUserBulkRequest } from \"../models/request/organizationUserBulkRequest\";\nimport { OrganizationUserConfirmRequest } from \"../models/request/organizationUserConfirmRequest\";\nimport { OrganizationUserInviteRequest } from \"../models/request/organizationUserInviteRequest\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"../models/request/organizationUserResetPasswordEnrollmentRequest\";\nimport { OrganizationUserResetPasswordRequest } from \"../models/request/organizationUserResetPasswordRequest\";\nimport { OrganizationUserUpdateGroupsRequest } from \"../models/request/organizationUserUpdateGroupsRequest\";\nimport { OrganizationUserUpdateRequest } from \"../models/request/organizationUserUpdateRequest\";\nimport { PasswordHintRequest } from \"../models/request/passwordHintRequest\";\nimport { PasswordRequest } from \"../models/request/passwordRequest\";\nimport { PasswordlessCreateAuthRequest } from \"../models/request/passwordlessCreateAuthRequest\";\nimport { PaymentRequest } from \"../models/request/paymentRequest\";\nimport { PreloginRequest } from \"../models/request/preloginRequest\";\nimport { ProviderAddOrganizationRequest } from \"../models/request/provider/providerAddOrganizationRequest\";\nimport { ProviderOrganizationCreateRequest } from \"../models/request/provider/providerOrganizationCreateRequest\";\nimport { ProviderSetupRequest } from \"../models/request/provider/providerSetupRequest\";\nimport { ProviderUpdateRequest } from \"../models/request/provider/providerUpdateRequest\";\nimport { ProviderUserAcceptRequest } from \"../models/request/provider/providerUserAcceptRequest\";\nimport { ProviderUserBulkConfirmRequest } from \"../models/request/provider/providerUserBulkConfirmRequest\";\nimport { ProviderUserBulkRequest } from \"../models/request/provider/providerUserBulkRequest\";\nimport { ProviderUserConfirmRequest } from \"../models/request/provider/providerUserConfirmRequest\";\nimport { ProviderUserInviteRequest } from \"../models/request/provider/providerUserInviteRequest\";\nimport { ProviderUserUpdateRequest } from \"../models/request/provider/providerUserUpdateRequest\";\nimport { RegisterRequest } from \"../models/request/registerRequest\";\nimport { SecretVerificationRequest } from \"../models/request/secretVerificationRequest\";\nimport { SelectionReadOnlyRequest } from \"../models/request/selectionReadOnlyRequest\";\nimport { SendAccessRequest } from \"../models/request/sendAccessRequest\";\nimport { SendRequest } from \"../models/request/sendRequest\";\nimport { SetPasswordRequest } from \"../models/request/setPasswordRequest\";\nimport { StorageRequest } from \"../models/request/storageRequest\";\nimport { TaxInfoUpdateRequest } from \"../models/request/taxInfoUpdateRequest\";\nimport { TwoFactorEmailRequest } from \"../models/request/twoFactorEmailRequest\";\nimport { TwoFactorProviderRequest } from \"../models/request/twoFactorProviderRequest\";\nimport { TwoFactorRecoveryRequest } from \"../models/request/twoFactorRecoveryRequest\";\nimport { UpdateDomainsRequest } from \"../models/request/updateDomainsRequest\";\nimport { UpdateKeyRequest } from \"../models/request/updateKeyRequest\";\nimport { UpdateProfileRequest } from \"../models/request/updateProfileRequest\";\nimport { UpdateTempPasswordRequest } from \"../models/request/updateTempPasswordRequest\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../models/request/updateTwoFactorAuthenticatorRequest\";\nimport { UpdateTwoFactorDuoRequest } from \"../models/request/updateTwoFactorDuoRequest\";\nimport { UpdateTwoFactorEmailRequest } from \"../models/request/updateTwoFactorEmailRequest\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../models/request/updateTwoFactorWebAuthnDeleteRequest\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../models/request/updateTwoFactorWebAuthnRequest\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../models/request/updateTwoFactorYubioOtpRequest\";\nimport { VerifyDeleteRecoverRequest } from \"../models/request/verifyDeleteRecoverRequest\";\nimport { VerifyEmailRequest } from \"../models/request/verifyEmailRequest\";\nimport { ApiKeyResponse } from \"../models/response/apiKeyResponse\";\nimport { AttachmentResponse } from \"../models/response/attachmentResponse\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachmentUploadDataResponse\";\nimport { AuthRequestResponse } from \"../models/response/authRequestResponse\";\nimport { RegisterResponse } from \"../models/response/authentication/registerResponse\";\nimport { BillingHistoryResponse } from \"../models/response/billingHistoryResponse\";\nimport { BillingPaymentResponse } from \"../models/response/billingPaymentResponse\";\nimport { BreachAccountResponse } from \"../models/response/breachAccountResponse\";\nimport { CipherResponse } from \"../models/response/cipherResponse\";\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from \"../models/response/collectionResponse\";\nimport { DeviceVerificationResponse } from \"../models/response/deviceVerificationResponse\";\nimport { DomainsResponse } from \"../models/response/domainsResponse\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse,\n} from \"../models/response/emergencyAccessResponse\";\nimport { EventResponse } from \"../models/response/eventResponse\";\nimport { GroupDetailsResponse, GroupResponse } from \"../models/response/groupResponse\";\nimport { IdentityCaptchaResponse } from \"../models/response/identityCaptchaResponse\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identityTwoFactorResponse\";\nimport { KeyConnectorUserKeyResponse } from \"../models/response/keyConnectorUserKeyResponse\";\nimport { ListResponse } from \"../models/response/listResponse\";\nimport {\n OrganizationConnectionConfigApis,\n OrganizationConnectionResponse,\n} from \"../models/response/organizationConnectionResponse\";\nimport { OrganizationExportResponse } from \"../models/response/organizationExportResponse\";\nimport { OrganizationSponsorshipSyncStatusResponse } from \"../models/response/organizationSponsorshipSyncStatusResponse\";\nimport { OrganizationUserBulkPublicKeyResponse } from \"../models/response/organizationUserBulkPublicKeyResponse\";\nimport { OrganizationUserBulkResponse } from \"../models/response/organizationUserBulkResponse\";\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n OrganizationUserUserDetailsResponse,\n} from \"../models/response/organizationUserResponse\";\nimport { PaymentResponse } from \"../models/response/paymentResponse\";\nimport { PlanResponse } from \"../models/response/planResponse\";\nimport { PolicyResponse } from \"../models/response/policyResponse\";\nimport { PreloginResponse } from \"../models/response/preloginResponse\";\nimport { ProfileResponse } from \"../models/response/profileResponse\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../models/response/provider/providerOrganizationResponse\";\nimport { ProviderResponse } from \"../models/response/provider/providerResponse\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../models/response/provider/providerUserBulkPublicKeyResponse\";\nimport { ProviderUserBulkResponse } from \"../models/response/provider/providerUserBulkResponse\";\nimport {\n ProviderUserResponse,\n ProviderUserUserDetailsResponse,\n} from \"../models/response/provider/providerUserResponse\";\nimport { SelectionReadOnlyResponse } from \"../models/response/selectionReadOnlyResponse\";\nimport { SendAccessResponse } from \"../models/response/sendAccessResponse\";\nimport { SendFileDownloadDataResponse } from \"../models/response/sendFileDownloadDataResponse\";\nimport { SendFileUploadDataResponse } from \"../models/response/sendFileUploadDataResponse\";\nimport { SendResponse } from \"../models/response/sendResponse\";\nimport { SsoPreValidateResponse } from \"../models/response/ssoPreValidateResponse\";\nimport { SubscriptionResponse } from \"../models/response/subscriptionResponse\";\nimport { SyncResponse } from \"../models/response/syncResponse\";\nimport { TaxInfoResponse } from \"../models/response/taxInfoResponse\";\nimport { TaxRateResponse } from \"../models/response/taxRateResponse\";\nimport { TwoFactorAuthenticatorResponse } from \"../models/response/twoFactorAuthenticatorResponse\";\nimport { TwoFactorDuoResponse } from \"../models/response/twoFactorDuoResponse\";\nimport { TwoFactorEmailResponse } from \"../models/response/twoFactorEmailResponse\";\nimport { TwoFactorProviderResponse } from \"../models/response/twoFactorProviderResponse\";\nimport { TwoFactorRecoverResponse } from \"../models/response/twoFactorRescoverResponse\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"../models/response/twoFactorWebAuthnResponse\";\nimport { TwoFactorYubiKeyResponse } from \"../models/response/twoFactorYubiKeyResponse\";\nimport { UserKeyResponse } from \"../models/response/userKeyResponse\";\nimport { SendAccessView } from \"../models/view/sendAccessView\";\n\nexport abstract class ApiService {\n 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 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\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 { CipherType } from \"../enums/cipherType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport { Field } from \"../models/domain/field\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { FieldView } from \"../models/view/fieldView\";\n\nexport abstract class CipherService {\n clearCache: (userId?: string) => Promise;\n encrypt: (\n model: CipherView,\n key?: SymmetricCryptoKey,\n originalCipher?: Cipher\n ) => Promise;\n encryptFields: (fieldsModel: FieldView[], key: SymmetricCryptoKey) => Promise;\n encryptField: (fieldModel: FieldView, key: SymmetricCryptoKey) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllDecryptedForGrouping: (groupingId: string, folder?: boolean) => Promise;\n getAllDecryptedForUrl: (\n url: string,\n includeOtherTypes?: CipherType[],\n defaultMatch?: UriMatchType\n ) => Promise;\n getAllFromApiForOrganization: (organizationId: string) => Promise;\n getLastUsedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise;\n getLastLaunchedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise;\n getNextCipherForUrl: (url: string) => Promise;\n updateLastUsedIndexForUrl: (url: string) => void;\n updateLastUsedDate: (id: string) => Promise;\n updateLastLaunchedDate: (id: string) => Promise;\n saveNeverDomain: (domain: string) => Promise;\n saveWithServer: (cipher: Cipher) => Promise;\n shareWithServer: (\n cipher: CipherView,\n organizationId: string,\n collectionIds: string[]\n ) => Promise;\n shareManyWithServer: (\n ciphers: CipherView[],\n organizationId: string,\n collectionIds: string[]\n ) => Promise;\n saveAttachmentWithServer: (\n cipher: Cipher,\n unencryptedFile: any,\n admin?: boolean\n ) => Promise;\n saveAttachmentRawWithServer: (\n cipher: Cipher,\n filename: string,\n data: ArrayBuffer,\n admin?: boolean\n ) => Promise;\n saveCollectionsWithServer: (cipher: Cipher) => Promise;\n upsert: (cipher: CipherData | CipherData[]) => Promise;\n replace: (ciphers: { [id: string]: CipherData }) => Promise;\n clear: (userId: string) => Promise;\n moveManyWithServer: (ids: string[], folderId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string) => Promise;\n deleteManyWithServer: (ids: string[]) => Promise;\n deleteAttachment: (id: string, attachmentId: string) => Promise;\n deleteAttachmentWithServer: (id: string, attachmentId: string) => Promise;\n sortCiphersByLastUsed: (a: any, b: any) => number;\n sortCiphersByLastUsedThenName: (a: any, b: any) => number;\n getLocaleSortingFunction: () => (a: CipherView, b: CipherView) => number;\n softDelete: (id: string | string[]) => Promise;\n softDeleteWithServer: (id: string) => Promise;\n softDeleteManyWithServer: (ids: string[]) => Promise;\n restore: (\n cipher: { id: string; revisionDate: string } | { id: string; revisionDate: string }[]\n ) => Promise;\n restoreWithServer: (id: string) => Promise;\n restoreManyWithServer: (ids: string[]) => Promise;\n}\n","import { CollectionData } from \"../models/data/collectionData\";\nimport { Collection } from \"../models/domain/collection\";\nimport { TreeNode } from \"../models/domain/treeNode\";\nimport { CollectionView } from \"../models/view/collectionView\";\n\nexport abstract class CollectionService {\n clearCache: (userId?: string) => Promise;\n encrypt: (model: CollectionView) => Promise;\n decryptMany: (collections: Collection[]) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllNested: (collections?: CollectionView[]) => Promise[]>;\n getNested: (id: string) => Promise>;\n upsert: (collection: CollectionData | CollectionData[]) => Promise;\n replace: (collections: { [id: string]: CollectionData }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n}\n","import { HashPurpose } from \"../enums/hashPurpose\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { KeySuffixOptions } from \"../enums/keySuffixOptions\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { ProfileOrganizationResponse } from \"../models/response/profileOrganizationResponse\";\nimport { ProfileProviderOrganizationResponse } from \"../models/response/profileProviderOrganizationResponse\";\nimport { ProfileProviderResponse } from \"../models/response/profileProviderResponse\";\n\nexport abstract class CryptoService {\n setKey: (key: SymmetricCryptoKey) => Promise;\n setKeyHash: (keyHash: string) => Promise;\n setEncKey: (encKey: string) => Promise;\n setEncPrivateKey: (encPrivateKey: string) => Promise;\n setOrgKeys: (\n orgs: ProfileOrganizationResponse[],\n providerOrgs: ProfileProviderOrganizationResponse[]\n ) => Promise;\n setProviderKeys: (orgs: ProfileProviderResponse[]) => Promise;\n getKey: (keySuffix?: KeySuffixOptions, userId?: string) => Promise;\n getKeyFromStorage: (keySuffix: KeySuffixOptions, userId?: string) => Promise;\n getKeyHash: () => Promise;\n compareAndUpdateKeyHash: (masterPassword: string, key: SymmetricCryptoKey) => Promise;\n getEncKey: (key?: SymmetricCryptoKey) => Promise;\n getPublicKey: () => Promise;\n getPrivateKey: () => Promise;\n getFingerprint: (userId: string, publicKey?: ArrayBuffer) => Promise;\n getOrgKeys: () => Promise>;\n getOrgKey: (orgId: string) => Promise;\n getProviderKey: (providerId: string) => Promise;\n 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 { 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/eventView\";\n\nexport type ExportFormat = \"csv\" | \"json\" | \"encrypted_json\";\n\nexport abstract class ExportService {\n getExport: (format?: ExportFormat, organizationId?: string) => Promise;\n getPasswordProtectedExport: (password: string, organizationId?: string) => Promise;\n getOrganizationExport: (organizationId: string, format?: ExportFormat) => Promise;\n getEventExport: (events: EventView[]) => Promise;\n getFileName: (prefix?: string, extension?: string) => string;\n}\n","import { 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/folderData\";\nimport { Folder } from \"../../models/domain/folder\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetricCryptoKey\";\nimport { FolderView } from \"../../models/view/folderView\";\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/identityTokenResponse\";\n\nexport abstract class KeyConnectorService {\n getAndSetKey: (url?: string) => Promise;\n getManagingOrganization: () => Promise;\n getUsesKeyConnector: () => Promise;\n migrateUser: () => Promise;\n userNeedsMigration: () => Promise;\n convertNewSsoUserToKeyConnector: (\n tokenResponse: IdentityTokenResponse,\n orgId: string\n ) => Promise;\n setUsesKeyConnector: (enabled: boolean) => Promise;\n setConvertAccountRequired: (status: boolean) => Promise;\n getConvertAccountRequired: () => Promise;\n removeConvertAccountRequired: () => Promise;\n clear: () => Promise;\n}\n","import { LogLevelType } from \"../enums/logLevelType\";\n\nexport abstract class LogService {\n debug: (message: string) => void;\n info: (message: string) => void;\n warning: (message: string) => void;\n error: (message: string) => void;\n write: (level: LogLevelType, message: string) => void;\n}\n","import { OrganizationData } from \"../models/data/organizationData\";\nimport { Organization } from \"../models/domain/organization\";\n\nexport abstract class OrganizationService {\n get: (id: string) => Promise;\n getByIdentifier: (identifier: string) => Promise;\n getAll: (userId?: string) => Promise;\n save: (orgs: { [id: string]: OrganizationData }) => Promise;\n canManageSponsorships: () => Promise;\n hasOrganizations: (userId?: string) => Promise;\n}\n","import { 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 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 { PolicyData } from \"../../models/data/policyData\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/masterPasswordPolicyOptions\";\nimport { Policy } from \"../../models/domain/policy\";\nimport { ResetPasswordPolicyOptions } from \"../../models/domain/resetPasswordPolicyOptions\";\nimport { ListResponse } from \"../../models/response/listResponse\";\nimport { PolicyResponse } from \"../../models/response/policyResponse\";\n\nexport abstract class PolicyService {\n getAll: (type?: PolicyType, userId?: string) => Promise;\n\n getMasterPasswordPolicyOptions: (policies?: Policy[]) => Promise;\n evaluateMasterPassword: (\n passwordStrength: number,\n newPassword: string,\n enforcedPolicyOptions?: MasterPasswordPolicyOptions\n ) => boolean;\n getResetPasswordPolicyOptions: (\n policies: Policy[],\n orgId: string\n ) => [ResetPasswordPolicyOptions, boolean];\n mapPoliciesFromToken: (policiesResponse: ListResponse) => Policy[];\n policyAppliesToUser: (\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean,\n userId?: string\n ) => Promise;\n}\n\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 { 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/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { EncryptedOrganizationKeyData } from \"../models/data/encryptedOrganizationKeyData\";\nimport { EventData } from \"../models/data/eventData\";\nimport { FolderData } from \"../models/data/folderData\";\nimport { LocalData } from \"../models/data/localData\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { SendData } from \"../models/data/sendData\";\nimport { ServerConfigData } from \"../models/data/server-config.data\";\nimport { Account, AccountSettingsSettings } from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/encString\";\nimport { EnvironmentUrls } from \"../models/domain/environmentUrls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { Policy } from \"../models/domain/policy\";\nimport { StorageOptions } from \"../models/domain/storageOptions\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { WindowState } from \"../models/domain/windowState\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { CollectionView } from \"../models/view/collectionView\";\nimport { SendView } from \"../models/view/sendView\";\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 getDecryptedPolicies: (options?: StorageOptions) => Promise;\n setDecryptedPolicies: (value: Policy[], options?: StorageOptions) => Promise;\n getDecryptedPrivateKey: (options?: StorageOptions) => Promise;\n setDecryptedPrivateKey: (value: ArrayBuffer, options?: StorageOptions) => Promise;\n getDecryptedProviderKeys: (options?: StorageOptions) => Promise>;\n setDecryptedProviderKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n getDecryptedSends: (options?: StorageOptions) => Promise;\n setDecryptedSends: (value: SendView[], options?: StorageOptions) => Promise;\n getDefaultUriMatch: (options?: StorageOptions) => Promise;\n setDefaultUriMatch: (value: UriMatchType, options?: StorageOptions) => Promise;\n getDisableAddLoginNotification: (options?: StorageOptions) => Promise;\n setDisableAddLoginNotification: (value: boolean, options?: StorageOptions) => Promise;\n getDisableAutoBiometricsPrompt: (options?: StorageOptions) => Promise;\n setDisableAutoBiometricsPrompt: (value: boolean, options?: StorageOptions) => Promise;\n getDisableAutoTotpCopy: (options?: StorageOptions) => Promise;\n setDisableAutoTotpCopy: (value: boolean, options?: StorageOptions) => Promise;\n getDisableBadgeCounter: (options?: StorageOptions) => Promise;\n setDisableBadgeCounter: (value: boolean, options?: StorageOptions) => Promise;\n getDisableChangedPasswordNotification: (options?: StorageOptions) => Promise;\n setDisableChangedPasswordNotification: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getDisableContextMenuItem: (options?: StorageOptions) => Promise;\n setDisableContextMenuItem: (value: boolean, options?: StorageOptions) => Promise;\n getDisableFavicon: (options?: StorageOptions) => Promise;\n setDisableFavicon: (value: boolean, options?: StorageOptions) => Promise;\n getDisableGa: (options?: StorageOptions) => Promise;\n setDisableGa: (value: boolean, options?: StorageOptions) => Promise;\n getDontShowCardsCurrentTab: (options?: StorageOptions) => Promise;\n setDontShowCardsCurrentTab: (value: boolean, options?: StorageOptions) => Promise;\n getDontShowIdentitiesCurrentTab: (options?: StorageOptions) => Promise;\n setDontShowIdentitiesCurrentTab: (value: boolean, options?: StorageOptions) => Promise;\n 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 getEnableGravitars: (options?: StorageOptions) => Promise;\n setEnableGravitars: (value: boolean, options?: StorageOptions) => Promise;\n getEnableMinimizeToTray: (options?: StorageOptions) => Promise;\n setEnableMinimizeToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableStartToTray: (options?: StorageOptions) => Promise;\n setEnableStartToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableTray: (options?: StorageOptions) => Promise;\n setEnableTray: (value: boolean, options?: StorageOptions) => Promise;\n getEncryptedCiphers: (options?: StorageOptions) => Promise<{ [id: string]: CipherData }>;\n setEncryptedCiphers: (\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedCollections: (options?: StorageOptions) => Promise<{ [id: string]: CollectionData }>;\n setEncryptedCollections: (\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise;\n setEncryptedCryptoSymmetricKey: (value: string, options?: StorageOptions) => Promise;\n /**\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 getEncryptedPolicies: (options?: StorageOptions) => Promise<{ [id: string]: PolicyData }>;\n setEncryptedPolicies: (\n value: { [id: string]: PolicyData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedPrivateKey: (options?: StorageOptions) => Promise;\n setEncryptedPrivateKey: (value: string, options?: StorageOptions) => Promise;\n getEncryptedProviderKeys: (options?: StorageOptions) => Promise;\n setEncryptedProviderKeys: (value: any, options?: StorageOptions) => Promise;\n getEncryptedSends: (options?: StorageOptions) => Promise<{ [id: string]: SendData }>;\n setEncryptedSends: (value: { [id: string]: SendData }, options?: StorageOptions) => Promise;\n getEntityId: (options?: StorageOptions) => Promise;\n setEntityId: (value: string, options?: StorageOptions) => Promise;\n getEntityType: (options?: StorageOptions) => Promise;\n setEntityType: (value: string, options?: StorageOptions) => Promise;\n getEnvironmentUrls: (options?: StorageOptions) => Promise;\n setEnvironmentUrls: (value: EnvironmentUrls, options?: StorageOptions) => Promise;\n getEquivalentDomains: (options?: StorageOptions) => Promise;\n setEquivalentDomains: (value: string, options?: StorageOptions) => Promise;\n getEventCollection: (options?: StorageOptions) => Promise;\n setEventCollection: (value: EventData[], options?: StorageOptions) => Promise;\n getEverBeenUnlocked: (options?: StorageOptions) => Promise;\n setEverBeenUnlocked: (value: boolean, options?: StorageOptions) => Promise;\n getForcePasswordReset: (options?: StorageOptions) => Promise;\n setForcePasswordReset: (value: boolean, options?: StorageOptions) => Promise;\n getInstalledVersion: (options?: StorageOptions) => Promise;\n setInstalledVersion: (value: string, options?: StorageOptions) => Promise;\n getIsAuthenticated: (options?: StorageOptions) => Promise;\n getKdfIterations: (options?: StorageOptions) => Promise;\n setKdfIterations: (value: number, options?: StorageOptions) => Promise;\n getKdfType: (options?: StorageOptions) => Promise;\n setKdfType: (value: KdfType, options?: StorageOptions) => Promise;\n getKeyHash: (options?: StorageOptions) => Promise;\n setKeyHash: (value: string, options?: StorageOptions) => Promise;\n getLastActive: (options?: StorageOptions) => Promise;\n setLastActive: (value: number, options?: StorageOptions) => Promise;\n getLastSync: (options?: StorageOptions) => Promise;\n setLastSync: (value: string, options?: StorageOptions) => Promise;\n 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 getOrganizations: (options?: StorageOptions) => Promise<{ [id: string]: OrganizationData }>;\n setOrganizations: (\n value: { [id: string]: OrganizationData },\n options?: StorageOptions\n ) => Promise;\n getPasswordGenerationOptions: (options?: StorageOptions) => Promise;\n setPasswordGenerationOptions: (value: any, options?: StorageOptions) => Promise;\n getUsernameGenerationOptions: (options?: StorageOptions) => Promise;\n setUsernameGenerationOptions: (value: any, options?: StorageOptions) => Promise;\n getGeneratorOptions: (options?: StorageOptions) => Promise;\n setGeneratorOptions: (value: any, options?: StorageOptions) => Promise;\n getProtectedPin: (options?: StorageOptions) => Promise;\n setProtectedPin: (value: string, options?: StorageOptions) => Promise;\n getProviders: (options?: StorageOptions) => Promise<{ [id: string]: ProviderData }>;\n setProviders: (value: { [id: string]: ProviderData }, options?: StorageOptions) => Promise;\n getPublicKey: (options?: StorageOptions) => Promise;\n setPublicKey: (value: ArrayBuffer, options?: StorageOptions) => Promise;\n getRefreshToken: (options?: StorageOptions) => Promise;\n setRefreshToken: (value: string, options?: StorageOptions) => Promise;\n getRememberedEmail: (options?: StorageOptions) => Promise;\n setRememberedEmail: (value: string, options?: StorageOptions) => Promise;\n getSecurityStamp: (options?: StorageOptions) => Promise;\n setSecurityStamp: (value: string, options?: StorageOptions) => Promise;\n /**\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","import { Observable } from \"rxjs\";\n\nimport {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../../models/response/notificationResponse\";\nimport { SyncEventArgs } from \"../../types/syncEventArgs\";\n\nexport abstract class SyncService {\n syncInProgress: boolean;\n\n sync$: Observable;\n\n getLastSync: () => Promise;\n setLastSync: (date: Date, userId?: string) => Promise;\n fullSync: (forceSync: boolean, allowThrowOnError?: boolean) => Promise;\n syncUpsertFolder: (notification: SyncFolderNotification, isEdit: boolean) => Promise;\n syncDeleteFolder: (notification: SyncFolderNotification) => Promise;\n syncUpsertCipher: (notification: SyncCipherNotification, isEdit: boolean) => Promise;\n syncDeleteCipher: (notification: SyncFolderNotification) => Promise;\n syncUpsertSend: (notification: SyncSendNotification, isEdit: boolean) => Promise;\n syncDeleteSend: (notification: SyncSendNotification) => Promise;\n}\n","import { SecretVerificationRequest } from \"../../models/request/secretVerificationRequest\";\nimport { Verification } from \"../../types/verification\";\n\nexport abstract class UserVerificationService {\n buildRequest: (\n verification: Verification,\n requestClass?: new () => T,\n alreadyHashed?: boolean\n ) => Promise;\n verifyUser: (verification: Verification) => Promise;\n requestOTP: () => Promise;\n}\n","export 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 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 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 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 SecureNoteType {\n Generic = 0,\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/itemView\";\n\nexport class LinkedMetadata {\n constructor(readonly propertyKey: string, private readonly _i18nKey?: string) {}\n\n get i18nKey() {\n return this._i18nKey ?? this.propertyKey;\n }\n}\n\n/**\n * A decorator used to set metadata used by Linked custom fields. Apply it to a class property or getter to make it\n * available as a Linked custom field option.\n * @param id - A unique value that is saved in the Field model. It is used to look up the decorated class property.\n * @param i18nKey - The i18n key used to describe the decorated class property in the UI. If it is null, then the name\n * of the class property will be used as the i18n key.\n */\nexport function linkedFieldOption(id: LinkedIdType, i18nKey?: string) {\n return (prototype: ItemView, propertyKey: string) => {\n if (prototype.linkedFieldOptions == null) {\n prototype.linkedFieldOptions = new Map();\n }\n\n prototype.linkedFieldOptions.set(id, new LinkedMetadata(propertyKey, i18nKey));\n };\n}\n","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/treeNode\";\n\nexport class ServiceUtils {\n static nestedTraverse(\n nodeTree: TreeNode[],\n partIndex: number,\n parts: string[],\n obj: ITreeNodeObject,\n parent: ITreeNodeObject,\n delimiter: string\n ) {\n if (parts.length <= partIndex) {\n return;\n }\n\n const end = partIndex === parts.length - 1;\n const partName = parts[partIndex];\n\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.name !== parts[partIndex]) {\n continue;\n }\n if (end && nodeTree[i].node.id !== obj.id) {\n // Another node with the same name.\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n ServiceUtils.nestedTraverse(\n nodeTree[i].children,\n partIndex + 1,\n parts,\n obj,\n nodeTree[i].node,\n delimiter\n );\n return;\n }\n\n if (nodeTree.filter((n) => n.node.name === partName).length === 0) {\n if (end) {\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n const newPartName = parts[partIndex] + delimiter + parts[partIndex + 1];\n ServiceUtils.nestedTraverse(\n nodeTree,\n 0,\n [newPartName, ...parts.slice(partIndex + 2)],\n obj,\n parent,\n delimiter\n );\n }\n }\n\n static getTreeNodeObject(\n nodeTree: TreeNode[],\n id: string\n ): TreeNode {\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.id === id) {\n return nodeTree[i];\n } else if (nodeTree[i].children != null) {\n const node = ServiceUtils.getTreeNodeObject(nodeTree[i].children, id);\n if (node !== null) {\n return node;\n }\n }\n }\n return null;\n }\n}\n","export function getDomain(host: string): string | null {\n return null;\n}\n\nexport function isValid(host: string): boolean {\n return true;\n}\n","/* eslint-disable no-useless-escape */\nimport * as tldjs from \"tldjs\";\n\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\n\nimport { AbstractEncryptService } from \"../abstractions/abstractEncrypt.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: () => AbstractEncryptService;\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 static tldEndingRegex =\n /.*\\.(com|net|org|edu|uk|gov|ca|de|jp|fr|au|ru|ch|io|es|us|co|xyz|info|ly|mil)$/;\n // Transpiled version of /\\p{Emoji_Presentation}/gu using https://mothereff.in/regexpu. Used for compatability in older browsers.\n static regexpEmojiPresentation =\n /(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])/g;\n\n static init() {\n if (Utils.inited) {\n return;\n }\n\n Utils.inited = true;\n Utils.isNode =\n typeof process !== \"undefined\" &&\n (process as any).release != null &&\n (process as any).release.name === \"node\";\n Utils.isBrowser = typeof window !== \"undefined\";\n\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 (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 (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 const url = Utils.getUrl(uriString);\n try {\n return url != null && url.hostname !== \"\" ? url.hostname : null;\n } catch {\n return null;\n }\n }\n\n static getHost(uriString: string): string {\n const url = Utils.getUrl(uriString);\n try {\n return url != null && url.host !== \"\" ? url.host : null;\n } catch {\n return null;\n }\n }\n\n static getDomain(uriString: string): string {\n if (uriString == null) {\n return null;\n }\n\n uriString = uriString.trim();\n if (uriString === \"\") {\n return null;\n }\n\n if (uriString.startsWith(\"data:\")) {\n return null;\n }\n\n let httpUrl = uriString.startsWith(\"http://\") || uriString.startsWith(\"https://\");\n if (\n !httpUrl &&\n uriString.indexOf(\"://\") < 0 &&\n Utils.tldEndingRegex.test(uriString) &&\n uriString.indexOf(\"@\") < 0\n ) {\n uriString = \"http://\" + uriString;\n httpUrl = true;\n }\n\n if (httpUrl) {\n try {\n const url = Utils.getUrlObject(uriString);\n const validHostname = tldjs?.isValid != null ? tldjs.isValid(url.hostname) : true;\n if (!validHostname) {\n return null;\n }\n\n if (url.hostname === \"localhost\" || Utils.validIpAddress(url.hostname)) {\n return url.hostname;\n }\n\n const urlDomain =\n tldjs != null && tldjs.getDomain != null ? tldjs.getDomain(url.hostname) : null;\n return urlDomain != null ? urlDomain : url.hostname;\n } catch (e) {\n // Invalid domain, try another approach below.\n }\n }\n\n try {\n const domain = tldjs != null && tldjs.getDomain != null ? tldjs.getDomain(uriString) : null;\n\n if (domain != null) {\n return domain;\n }\n } catch {\n return null;\n }\n\n return null;\n }\n\n static getQueryParams(uriString: string): Map {\n const url = Utils.getUrl(uriString);\n if (url == null || url.search == null || url.search === \"\") {\n return null;\n }\n const map = new Map();\n const pairs = (url.search[0] === \"?\" ? url.search.substr(1) : url.search).split(\"&\");\n pairs.forEach((pair) => {\n const parts = pair.split(\"=\");\n if (parts.length < 1) {\n return;\n }\n map.set(\n decodeURIComponent(parts[0]).toLowerCase(),\n parts[1] == null ? \"\" : decodeURIComponent(parts[1])\n );\n });\n return map;\n }\n\n static getSortFunction(i18nService: I18nService, prop: string) {\n return (a: any, b: any) => {\n if (a[prop] == null && b[prop] != null) {\n return -1;\n }\n if (a[prop] != null && b[prop] == null) {\n return 1;\n }\n if (a[prop] == null && b[prop] == null) {\n return 0;\n }\n\n return i18nService.collator\n ? i18nService.collator.compare(a[prop], b[prop])\n : a[prop].localeCompare(b[prop]);\n };\n }\n\n static isNullOrWhitespace(str: string): boolean {\n return str == null || typeof str !== \"string\" || str.trim() === \"\";\n }\n\n static isNullOrEmpty(str: string): boolean {\n return str == null || typeof str !== \"string\" || str == \"\";\n }\n\n static nameOf(name: string & keyof T) {\n return name;\n }\n\n static assign(target: T, source: Partial): T {\n return Object.assign(target, source);\n }\n\n static iterateEnum(obj: O) {\n return (Object.keys(obj).filter((k) => Number.isNaN(+k)) as K[]).map((k) => obj[k]);\n }\n\n static getUrl(uriString: string): URL {\n if (uriString == null) {\n return null;\n }\n\n uriString = uriString.trim();\n if (uriString === \"\") {\n return null;\n }\n\n let url = Utils.getUrlObject(uriString);\n if (url == null) {\n const hasHttpProtocol =\n uriString.indexOf(\"http://\") === 0 || uriString.indexOf(\"https://\") === 0;\n if (!hasHttpProtocol && uriString.indexOf(\".\") > -1) {\n url = Utils.getUrlObject(\"http://\" + uriString);\n }\n }\n return url;\n }\n\n static camelToPascalCase(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n\n /**\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 private static validIpAddress(ipString: string): boolean {\n const ipRegex =\n /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n return ipRegex.test(ipString);\n }\n\n private static isMobile(win: Window) {\n let mobile = false;\n ((a) => {\n if (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\n a\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\n a.substr(0, 4)\n )\n ) {\n mobile = true;\n }\n })(win.navigator.userAgent || win.navigator.vendor || (win as any).opera);\n return mobile || win.navigator.userAgent.match(/iPad/i) != null;\n }\n\n private static isAppleMobile(win: Window) {\n return (\n win.navigator.userAgent.match(/iPhone/i) != null ||\n win.navigator.userAgent.match(/iPad/i) != null\n );\n }\n\n private static getUrlObject(uriString: string): URL {\n try {\n if (nodeURL != null) {\n return new nodeURL.URL(uriString);\n } else if (typeof URL === \"function\") {\n return new URL(uriString);\n } else if (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/baseResponse\";\n\nexport class CardApi extends BaseResponse {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.cardholderName = this.getResponseProperty(\"CardholderName\");\n this.brand = this.getResponseProperty(\"Brand\");\n this.number = this.getResponseProperty(\"Number\");\n this.expMonth = this.getResponseProperty(\"ExpMonth\");\n this.expYear = this.getResponseProperty(\"ExpYear\");\n this.code = this.getResponseProperty(\"Code\");\n }\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { BaseResponse } from \"../response/baseResponse\";\n\nexport class FieldApi extends BaseResponse {\n name: string;\n value: string;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.value = this.getResponseProperty(\"Value\");\n this.linkedId = this.getResponseProperty(\"linkedId\");\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class IdentityApi extends BaseResponse {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.title = this.getResponseProperty(\"Title\");\n this.firstName = this.getResponseProperty(\"FirstName\");\n this.middleName = this.getResponseProperty(\"MiddleName\");\n this.lastName = this.getResponseProperty(\"LastName\");\n this.address1 = this.getResponseProperty(\"Address1\");\n this.address2 = this.getResponseProperty(\"Address2\");\n this.address3 = this.getResponseProperty(\"Address3\");\n this.city = this.getResponseProperty(\"City\");\n this.state = this.getResponseProperty(\"State\");\n this.postalCode = this.getResponseProperty(\"PostalCode\");\n this.country = this.getResponseProperty(\"Country\");\n this.company = this.getResponseProperty(\"Company\");\n this.email = this.getResponseProperty(\"Email\");\n this.phone = this.getResponseProperty(\"Phone\");\n this.ssn = this.getResponseProperty(\"SSN\");\n this.username = this.getResponseProperty(\"Username\");\n this.passportNumber = this.getResponseProperty(\"PassportNumber\");\n this.licenseNumber = this.getResponseProperty(\"LicenseNumber\");\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nimport { LoginUriApi } from \"./loginUriApi\";\n\nexport class LoginApi extends BaseResponse {\n uris: LoginUriApi[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n autofillOnPageLoad: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.username = this.getResponseProperty(\"Username\");\n this.password = this.getResponseProperty(\"Password\");\n this.passwordRevisionDate = this.getResponseProperty(\"PasswordRevisionDate\");\n this.totp = this.getResponseProperty(\"Totp\");\n this.autofillOnPageLoad = this.getResponseProperty(\"AutofillOnPageLoad\");\n\n const uris = this.getResponseProperty(\"Uris\");\n if (uris != null) {\n this.uris = uris.map((u: any) => new LoginUriApi(u));\n }\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { BaseResponse } from \"../response/baseResponse\";\n\nexport class LoginUriApi extends BaseResponse {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.uri = this.getResponseProperty(\"Uri\");\n const match = this.getResponseProperty(\"Match\");\n this.match = match != null ? match : null;\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { BaseResponse } from \"../response/baseResponse\";\n\nexport class SecureNoteApi extends BaseResponse {\n type: SecureNoteType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty(\"Type\");\n }\n}\n","import { AttachmentResponse } from \"../response/attachmentResponse\";\n\nexport class AttachmentData {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response?: AttachmentResponse) {\n if (response == null) {\n return;\n }\n this.id = response.id;\n this.url = response.url;\n this.fileName = response.fileName;\n this.key = response.key;\n this.size = response.size;\n this.sizeName = response.sizeName;\n }\n}\n","import { CardApi } from \"../api/cardApi\";\n\nexport class CardData {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data?: CardApi) {\n if (data == null) {\n return;\n }\n\n this.cardholderName = data.cardholderName;\n this.brand = data.brand;\n this.number = data.number;\n this.expMonth = data.expMonth;\n this.expYear = data.expYear;\n this.code = data.code;\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { CipherResponse } from \"../response/cipherResponse\";\n\nimport { AttachmentData } from \"./attachmentData\";\nimport { CardData } from \"./cardData\";\nimport { FieldData } from \"./fieldData\";\nimport { IdentityData } from \"./identityData\";\nimport { LoginData } from \"./loginData\";\nimport { PasswordHistoryData } from \"./passwordHistoryData\";\nimport { SecureNoteData } from \"./secureNoteData\";\n\nexport class CipherData {\n id: string;\n organizationId: string;\n folderId: string;\n 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 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.deletedDate = response.deletedDate;\n this.reprompt = response.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginData(response.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteData(response.secureNote);\n break;\n case CipherType.Card:\n this.card = new CardData(response.card);\n break;\n case CipherType.Identity:\n this.identity = new IdentityData(response.identity);\n break;\n default:\n break;\n }\n\n if (response.fields != null) {\n this.fields = response.fields.map((f) => new FieldData(f));\n }\n if (response.attachments != null) {\n this.attachments = response.attachments.map((a) => new AttachmentData(a));\n }\n if (response.passwordHistory != null) {\n this.passwordHistory = response.passwordHistory.map((ph) => new PasswordHistoryData(ph));\n }\n }\n}\n","import { CollectionDetailsResponse } from \"../response/collectionResponse\";\n\nexport class CollectionData {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n readOnly: boolean;\n\n constructor(response: CollectionDetailsResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.name = response.name;\n this.externalId = response.externalId;\n this.readOnly = response.readOnly;\n }\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { FieldApi } from \"../api/fieldApi\";\n\nexport class FieldData {\n type: FieldType;\n name: string;\n value: string;\n linkedId: LinkedIdType;\n\n constructor(response?: FieldApi) {\n if (response == null) {\n return;\n }\n this.type = response.type;\n this.name = response.name;\n this.value = response.value;\n this.linkedId = response.linkedId;\n }\n}\n","import { IdentityApi } from \"../api/identityApi\";\n\nexport class IdentityData {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data?: IdentityApi) {\n if (data == null) {\n return;\n }\n\n this.title = data.title;\n this.firstName = data.firstName;\n this.middleName = data.middleName;\n this.lastName = data.lastName;\n this.address1 = data.address1;\n this.address2 = data.address2;\n this.address3 = data.address3;\n this.city = data.city;\n this.state = data.state;\n this.postalCode = data.postalCode;\n this.country = data.country;\n this.company = data.company;\n this.email = data.email;\n this.phone = data.phone;\n this.ssn = data.ssn;\n this.username = data.username;\n this.passportNumber = data.passportNumber;\n this.licenseNumber = data.licenseNumber;\n }\n}\n","import { LoginApi } from \"../api/loginApi\";\n\nimport { LoginUriData } from \"./loginUriData\";\n\nexport class LoginData {\n uris: LoginUriData[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n autofillOnPageLoad: boolean;\n\n constructor(data?: LoginApi) {\n if (data == null) {\n return;\n }\n\n this.username = data.username;\n this.password = data.password;\n this.passwordRevisionDate = data.passwordRevisionDate;\n this.totp = data.totp;\n this.autofillOnPageLoad = data.autofillOnPageLoad;\n\n if (data.uris) {\n this.uris = data.uris.map((u) => new LoginUriData(u));\n }\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { LoginUriApi } from \"../api/loginUriApi\";\n\nexport class LoginUriData {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data?: LoginUriApi) {\n if (data == null) {\n return;\n }\n this.uri = data.uri;\n this.match = data.match;\n }\n}\n","import { PasswordHistoryResponse } from \"../response/passwordHistoryResponse\";\n\nexport class PasswordHistoryData {\n password: string;\n lastUsedDate: string;\n\n constructor(response?: PasswordHistoryResponse) {\n if (response == null) {\n return;\n }\n\n this.password = response.password;\n this.lastUsedDate = response.lastUsedDate;\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNoteApi } from \"../api/secureNoteApi\";\n\nexport class SecureNoteData {\n type: SecureNoteType;\n\n constructor(data?: SecureNoteApi) {\n if (data == null) {\n return;\n }\n\n this.type = data.type;\n }\n}\n","import { Utils } from \"../../misc/utils\";\nimport { AttachmentData } from \"../data/attachmentData\";\nimport { AttachmentView } from \"../view/attachmentView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Attachment extends Domain {\n id: string;\n url: string;\n size: string;\n sizeName: string; // 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","import { CardData } from \"../data/cardData\";\nimport { CardView } from \"../view/cardView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Card extends Domain {\n cardholderName: EncString;\n brand: EncString;\n number: EncString;\n expMonth: EncString;\n expYear: EncString;\n code: EncString;\n\n constructor(obj?: CardData) {\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","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { CipherData } from \"../data/cipherData\";\nimport { LocalData } from \"../data/localData\";\nimport { CipherView } from \"../view/cipherView\";\n\nimport { Attachment } from \"./attachment\";\nimport { Card } from \"./card\";\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { Field } from \"./field\";\nimport { Identity } from \"./identity\";\nimport { Login } from \"./login\";\nimport { Password } from \"./password\";\nimport { SecureNote } from \"./secureNote\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Cipher extends Domain {\n id: string;\n organizationId: string;\n folderId: string;\n name: EncString;\n notes: EncString;\n type: CipherType;\n favorite: boolean;\n organizationUseTotp: boolean;\n edit: boolean;\n viewPassword: boolean;\n revisionDate: Date;\n localData: 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 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.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.deletedDate = this.deletedDate != null ? this.deletedDate.toISOString() : null;\n c.reprompt = this.reprompt;\n\n this.buildDataModel(this, c, {\n name: null,\n notes: null,\n });\n\n switch (c.type) {\n case CipherType.Login:\n c.login = this.login.toLoginData();\n break;\n case CipherType.SecureNote:\n c.secureNote = this.secureNote.toSecureNoteData();\n break;\n case CipherType.Card:\n c.card = this.card.toCardData();\n break;\n case CipherType.Identity:\n c.identity = this.identity.toIdentityData();\n break;\n default:\n break;\n }\n\n if (this.fields != null) {\n c.fields = this.fields.map((f) => f.toFieldData());\n }\n if (this.attachments != null) {\n c.attachments = this.attachments.map((a) => a.toAttachmentData());\n }\n if (this.passwordHistory != null) {\n c.passwordHistory = this.passwordHistory.map((ph) => ph.toPasswordHistoryData());\n }\n return c;\n }\n}\n","import { CollectionData } from \"../data/collectionData\";\nimport { CollectionView } from \"../view/collectionView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\n\nexport class Collection extends Domain {\n id: string;\n organizationId: string;\n name: EncString;\n externalId: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(obj?: CollectionData) {\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 \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\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 { IEncrypted } from \"@bitwarden/common/interfaces/IEncrypted\";\n\nimport { EncryptionType } from \"../../enums/encryptionType\";\nimport { Utils } from \"../../misc/utils\";\n\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\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 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 { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { FieldData } from \"../data/fieldData\";\nimport { FieldView } from \"../view/fieldView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Field extends Domain {\n name: EncString;\n value: EncString;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(obj?: FieldData) {\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","import { Jsonify } from \"type-fest\";\n\nimport { FolderData } from \"../data/folderData\";\nimport { FolderView } from \"../view/folderView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\n\nexport class Folder extends Domain {\n id: string;\n name: EncString;\n revisionDate: Date;\n\n constructor(obj?: FolderData) {\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","import { IdentityData } from \"../data/identityData\";\nimport { IdentityView } from \"../view/identityView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Identity extends Domain {\n title: EncString;\n firstName: EncString;\n middleName: EncString;\n lastName: EncString;\n address1: EncString;\n address2: EncString;\n address3: EncString;\n city: EncString;\n state: EncString;\n postalCode: EncString;\n country: EncString;\n company: EncString;\n email: EncString;\n phone: EncString;\n ssn: EncString;\n username: EncString;\n passportNumber: EncString;\n licenseNumber: EncString;\n\n constructor(obj?: IdentityData) {\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","import { LoginData } from \"../data/loginData\";\nimport { LoginView } from \"../view/loginView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { LoginUri } from \"./loginUri\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Login extends Domain {\n uris: LoginUri[];\n username: EncString;\n password: EncString;\n passwordRevisionDate?: Date;\n totp: EncString;\n autofillOnPageLoad: boolean;\n\n constructor(obj?: LoginData) {\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","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { LoginUriData } from \"../data/loginUriData\";\nimport { LoginUriView } from \"../view/loginUriView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class LoginUri extends Domain {\n uri: EncString;\n match: UriMatchType;\n\n constructor(obj?: LoginUriData) {\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","import Domain from \"./domainBase\";\n\nexport class MasterPasswordPolicyOptions extends Domain {\n minComplexity = 0;\n minLength = 0;\n requireUpper = false;\n requireLower = false;\n requireNumbers = false;\n requireSpecial = false;\n}\n","import { PasswordHistoryData } from \"../data/passwordHistoryData\";\nimport { PasswordHistoryView } from \"../view/passwordHistoryView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Password extends Domain {\n password: EncString;\n lastUsedDate: Date;\n\n constructor(obj?: PasswordHistoryData) {\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","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNoteData } from \"../data/secureNoteData\";\nimport { SecureNoteView } from \"../view/secureNoteView\";\n\nimport Domain from \"./domainBase\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class SecureNote extends Domain {\n type: SecureNoteType;\n\n constructor(obj?: SecureNoteData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.type = obj.type;\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return Promise.resolve(new SecureNoteView(this));\n }\n\n toSecureNoteData(): SecureNoteData {\n const n = new SecureNoteData();\n n.type = this.type;\n return n;\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\nimport { EncryptionType } from \"../../enums/encryptionType\";\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","import { Card as CardDomain } from \"../domain/card\";\nimport { EncString } from \"../domain/encString\";\nimport { CardView } from \"../view/cardView\";\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/encString\";\nimport { Field as FieldDomain } from \"../domain/field\";\nimport { FieldView } from \"../view/fieldView\";\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/encString\";\nimport { Identity as IdentityDomain } from \"../domain/identity\";\nimport { IdentityView } from \"../view/identityView\";\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/encString\";\nimport { LoginUri as LoginUriDomain } from \"../domain/loginUri\";\nimport { LoginUriView } from \"../view/loginUriView\";\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/encString\";\nimport { Login as LoginDomain } from \"../domain/login\";\nimport { LoginView } from \"../view/loginView\";\n\nimport { LoginUriExport } from \"./loginUriExport\";\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/secureNote\";\nimport { SecureNoteView } from \"../view/secureNoteView\";\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/encString\";\nimport { CipherView } from \"../view/cipherView\";\n\nimport { CardExport } from \"./cardExport\";\nimport { FieldExport } from \"./fieldExport\";\nimport { IdentityExport } from \"./identityExport\";\nimport { LoginExport } from \"./loginExport\";\nimport { SecureNoteExport } from \"./secureNoteExport\";\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/cipherView\";\n\nimport { CipherExport } from \"./cipherExport\";\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/encString\";\nimport { CollectionView } from \"../view/collectionView\";\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/collectionView\";\n\nimport { CollectionExport } from \"./collectionExport\";\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/encString\";\nimport { Folder as FolderDomain } from \"../domain/folder\";\nimport { FolderView } from \"../view/folderView\";\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/folderView\";\n\nimport { FolderExport } from \"./folderExport\";\n\nexport class FolderWithIdExport extends FolderExport {\n id: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView | FolderDomain) {\n this.id = o.id;\n super.build(o);\n }\n}\n","export class 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/cardApi\";\nimport { FieldApi } from \"../api/fieldApi\";\nimport { IdentityApi } from \"../api/identityApi\";\nimport { LoginApi } from \"../api/loginApi\";\nimport { LoginUriApi } from \"../api/loginUriApi\";\nimport { SecureNoteApi } from \"../api/secureNoteApi\";\nimport { Cipher } from \"../domain/cipher\";\n\nimport { AttachmentRequest } from \"./attachmentRequest\";\nimport { PasswordHistoryRequest } from \"./passwordHistoryRequest\";\n\nexport class CipherRequest {\n type: CipherType;\n folderId: string;\n organizationId: string;\n name: string;\n notes: string;\n favorite: boolean;\n login: LoginApi;\n secureNote: SecureNoteApi;\n card: CardApi;\n identity: IdentityApi;\n fields: FieldApi[];\n passwordHistory: PasswordHistoryRequest[];\n // Deprecated, remove at some point and rename attachments2 to attachments\n attachments: { [id: string]: string };\n attachments2: { [id: string]: AttachmentRequest };\n lastKnownRevisionDate: Date;\n reprompt: CipherRepromptType;\n\n constructor(cipher: Cipher) {\n this.type = cipher.type;\n this.folderId = cipher.folderId;\n this.organizationId = cipher.organizationId;\n this.name = cipher.name ? cipher.name.encryptedString : null;\n this.notes = cipher.notes ? cipher.notes.encryptedString : null;\n this.favorite = cipher.favorite;\n this.lastKnownRevisionDate = cipher.revisionDate;\n this.reprompt = cipher.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginApi();\n this.login.uris = null;\n this.login.username = cipher.login.username ? cipher.login.username.encryptedString : null;\n this.login.password = cipher.login.password ? cipher.login.password.encryptedString : null;\n this.login.passwordRevisionDate =\n cipher.login.passwordRevisionDate != null\n ? cipher.login.passwordRevisionDate.toISOString()\n : null;\n this.login.totp = cipher.login.totp ? cipher.login.totp.encryptedString : null;\n this.login.autofillOnPageLoad = cipher.login.autofillOnPageLoad;\n\n if (cipher.login.uris != null) {\n this.login.uris = cipher.login.uris.map((u) => {\n const uri = new LoginUriApi();\n uri.uri = u.uri != null ? u.uri.encryptedString : null;\n uri.match = u.match != null ? u.match : null;\n return uri;\n });\n }\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteApi();\n this.secureNote.type = cipher.secureNote.type;\n break;\n case CipherType.Card:\n this.card = new CardApi();\n this.card.cardholderName =\n cipher.card.cardholderName != null ? cipher.card.cardholderName.encryptedString : null;\n this.card.brand = cipher.card.brand != null ? cipher.card.brand.encryptedString : null;\n this.card.number = cipher.card.number != null ? cipher.card.number.encryptedString : null;\n this.card.expMonth =\n cipher.card.expMonth != null ? cipher.card.expMonth.encryptedString : null;\n this.card.expYear =\n cipher.card.expYear != null ? cipher.card.expYear.encryptedString : null;\n this.card.code = cipher.card.code != null ? cipher.card.code.encryptedString : null;\n break;\n case CipherType.Identity:\n this.identity = new IdentityApi();\n this.identity.title =\n cipher.identity.title != null ? cipher.identity.title.encryptedString : null;\n this.identity.firstName =\n cipher.identity.firstName != null ? cipher.identity.firstName.encryptedString : null;\n this.identity.middleName =\n cipher.identity.middleName != null ? cipher.identity.middleName.encryptedString : null;\n this.identity.lastName =\n cipher.identity.lastName != null ? cipher.identity.lastName.encryptedString : null;\n this.identity.address1 =\n cipher.identity.address1 != null ? cipher.identity.address1.encryptedString : null;\n this.identity.address2 =\n cipher.identity.address2 != null ? cipher.identity.address2.encryptedString : null;\n this.identity.address3 =\n cipher.identity.address3 != null ? cipher.identity.address3.encryptedString : null;\n this.identity.city =\n cipher.identity.city != null ? cipher.identity.city.encryptedString : null;\n this.identity.state =\n cipher.identity.state != null ? cipher.identity.state.encryptedString : null;\n this.identity.postalCode =\n cipher.identity.postalCode != null ? cipher.identity.postalCode.encryptedString : null;\n this.identity.country =\n cipher.identity.country != null ? cipher.identity.country.encryptedString : null;\n this.identity.company =\n cipher.identity.company != null ? cipher.identity.company.encryptedString : null;\n this.identity.email =\n cipher.identity.email != null ? cipher.identity.email.encryptedString : null;\n this.identity.phone =\n cipher.identity.phone != null ? cipher.identity.phone.encryptedString : null;\n this.identity.ssn =\n cipher.identity.ssn != null ? cipher.identity.ssn.encryptedString : null;\n this.identity.username =\n cipher.identity.username != null ? cipher.identity.username.encryptedString : null;\n this.identity.passportNumber =\n cipher.identity.passportNumber != null\n ? cipher.identity.passportNumber.encryptedString\n : null;\n this.identity.licenseNumber =\n cipher.identity.licenseNumber != null\n ? cipher.identity.licenseNumber.encryptedString\n : null;\n break;\n default:\n break;\n }\n\n if (cipher.fields != null) {\n this.fields = cipher.fields.map((f) => {\n const field = new FieldApi();\n field.type = f.type;\n field.name = f.name ? f.name.encryptedString : null;\n field.value = f.value ? f.value.encryptedString : null;\n field.linkedId = f.linkedId;\n return field;\n });\n }\n\n if (cipher.passwordHistory != null) {\n this.passwordHistory = [];\n cipher.passwordHistory.forEach((ph) => {\n this.passwordHistory.push({\n lastUsedDate: ph.lastUsedDate,\n password: ph.password ? ph.password.encryptedString : null,\n });\n });\n }\n\n if (cipher.attachments != null) {\n this.attachments = {};\n this.attachments2 = {};\n cipher.attachments.forEach((attachment) => {\n const fileName = attachment.fileName ? attachment.fileName.encryptedString : null;\n this.attachments[attachment.id] = fileName;\n const attachmentRequest = new AttachmentRequest();\n attachmentRequest.fileName = fileName;\n if (attachment.key != null) {\n attachmentRequest.key = attachment.key.encryptedString;\n }\n this.attachments2[attachment.id] = attachmentRequest;\n });\n }\n }\n}\n","import { Collection } from \"../domain/collection\";\n\nimport { SelectionReadOnlyRequest } from \"./selectionReadOnlyRequest\";\n\nexport class CollectionRequest {\n name: string;\n externalId: string;\n groups: SelectionReadOnlyRequest[] = [];\n\n constructor(collection?: Collection) {\n if (collection == null) {\n return;\n }\n this.name = collection.name ? collection.name.encryptedString : null;\n this.externalId = collection.externalId;\n }\n}\n","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 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 \"./baseResponse\";\n\nexport class ErrorResponse extends BaseResponse {\n message: string;\n validationErrors: { [key: string]: string[] };\n statusCode: number;\n captchaRequired: boolean;\n captchaSiteKey: string;\n\n constructor(response: any, status: number, identityResponse?: boolean) {\n super(response);\n let errorModel = null;\n if (response != null) {\n const responseErrorModel = this.getResponseProperty(\"ErrorModel\");\n if (responseErrorModel && identityResponse) {\n errorModel = responseErrorModel;\n } else {\n errorModel = response;\n }\n }\n\n if (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 { Jsonify } from \"type-fest\";\n\nimport { Attachment } from \"../domain/attachment\";\nimport { SymmetricCryptoKey } from \"../domain/symmetricCryptoKey\";\n\nimport { View } from \"./view\";\n\nexport class AttachmentView implements View {\n id: string = null;\n url: string = null;\n size: string = null;\n sizeName: string = null;\n fileName: string = null;\n key: SymmetricCryptoKey = null;\n\n constructor(a?: Attachment) {\n if (!a) {\n return;\n }\n\n this.id = a.id;\n this.url = a.url;\n this.size = a.size;\n this.sizeName = a.sizeName;\n }\n\n get fileSize(): number {\n try {\n if (this.size != null) {\n return parseInt(this.size, null);\n }\n } catch {\n // Invalid file size.\n }\n return 0;\n }\n\n 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 \"./itemView\";\n\nexport class CardView extends ItemView {\n @linkedFieldOption(LinkedId.CardholderName)\n cardholderName: string = null;\n @linkedFieldOption(LinkedId.ExpMonth, \"expirationMonth\")\n expMonth: string = null;\n @linkedFieldOption(LinkedId.ExpYear, \"expirationYear\")\n expYear: string = null;\n @linkedFieldOption(LinkedId.Code, \"securityCode\")\n code: string = null;\n\n private _brand: string = null;\n private _number: string = null;\n private _subTitle: string = null;\n\n 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 { LocalData } from \"../data/localData\";\nimport { Cipher } from \"../domain/cipher\";\n\nimport { AttachmentView } from \"./attachmentView\";\nimport { CardView } from \"./cardView\";\nimport { FieldView } from \"./fieldView\";\nimport { IdentityView } from \"./identityView\";\nimport { LoginView } from \"./loginView\";\nimport { PasswordHistoryView } from \"./passwordHistoryView\";\nimport { SecureNoteView } from \"./secureNoteView\";\nimport { View } from \"./view\";\n\nexport class CipherView implements View {\n id: string = null;\n organizationId: string = null;\n folderId: string = null;\n name: string = null;\n notes: string = null;\n type: CipherType = null;\n favorite = false;\n organizationUseTotp = false;\n edit = false;\n viewPassword = true;\n localData: 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 deletedDate: Date = null;\n reprompt: CipherRepromptType = CipherRepromptType.None;\n\n constructor(c?: Cipher) {\n if (!c) {\n return;\n }\n\n this.id = c.id;\n this.organizationId = c.organizationId;\n this.folderId = c.folderId;\n this.favorite = c.favorite;\n this.organizationUseTotp = c.organizationUseTotp;\n this.edit = c.edit;\n this.viewPassword = c.viewPassword;\n this.type = c.type;\n this.localData = c.localData;\n this.collectionIds = c.collectionIds;\n this.revisionDate = c.revisionDate;\n this.deletedDate = c.deletedDate;\n // Old locally stored ciphers might have reprompt == null. If so set it to None.\n this.reprompt = c.reprompt ?? CipherRepromptType.None;\n }\n\n private get item() {\n switch (this.type) {\n case CipherType.Login:\n return this.login;\n case CipherType.SecureNote:\n return this.secureNote;\n case CipherType.Card:\n return this.card;\n case CipherType.Identity:\n return this.identity;\n default:\n break;\n }\n\n return null;\n }\n\n get subTitle(): string {\n return this.item.subTitle;\n }\n\n get hasPasswordHistory(): boolean {\n return this.passwordHistory && this.passwordHistory.length > 0;\n }\n\n get hasAttachments(): boolean {\n return this.attachments && this.attachments.length > 0;\n }\n\n get hasOldAttachments(): boolean {\n if (this.hasAttachments) {\n for (let i = 0; i < this.attachments.length; i++) {\n if (this.attachments[i].key == null) {\n return true;\n }\n }\n }\n return false;\n }\n\n get hasFields(): boolean {\n return this.fields && this.fields.length > 0;\n }\n\n get passwordRevisionDisplayDate(): Date {\n if (this.type !== CipherType.Login || this.login == null) {\n return null;\n } else if (this.login.password == null || this.login.password === \"\") {\n return null;\n }\n return this.login.passwordRevisionDate;\n }\n\n get isDeleted(): boolean {\n return this.deletedDate != null;\n }\n\n get linkedFieldOptions() {\n return this.item.linkedFieldOptions;\n }\n\n linkedFieldValue(id: LinkedIdType) {\n const linkedFieldOption = this.linkedFieldOptions?.get(id);\n if (linkedFieldOption == null) {\n return null;\n }\n\n const item = this.item;\n return this.item[linkedFieldOption.propertyKey as keyof typeof item];\n }\n\n linkedFieldI18nKey(id: LinkedIdType): string {\n return this.linkedFieldOptions.get(id)?.i18nKey;\n }\n\n 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/treeNode\";\nimport { CollectionGroupDetailsResponse } from \"../response/collectionResponse\";\n\nimport { View } from \"./view\";\n\nexport class CollectionView implements View, ITreeNodeObject {\n id: string = null;\n organizationId: string = null;\n name: string = null;\n externalId: string = null;\n readOnly: boolean = null;\n hidePasswords: boolean = null;\n\n constructor(c?: Collection | CollectionGroupDetailsResponse) {\n if (!c) {\n return;\n }\n\n this.id = c.id;\n this.organizationId = c.organizationId;\n this.externalId = c.externalId;\n if (c instanceof Collection) {\n this.readOnly = c.readOnly;\n this.hidePasswords = c.hidePasswords;\n }\n }\n}\n","import { 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/treeNode\";\n\nimport { View } from \"./view\";\n\nexport class FolderView implements View, ITreeNodeObject {\n id: string = null;\n name: string = null;\n revisionDate: Date = null;\n\n constructor(f?: Folder) {\n if (!f) {\n return;\n }\n\n this.id = f.id;\n this.revisionDate = f.revisionDate;\n }\n\n 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 \"./itemView\";\n\nexport class IdentityView extends ItemView {\n @linkedFieldOption(LinkedId.Title)\n title: string = null;\n @linkedFieldOption(LinkedId.MiddleName)\n middleName: string = null;\n @linkedFieldOption(LinkedId.Address1)\n address1: string = null;\n @linkedFieldOption(LinkedId.Address2)\n address2: string = null;\n @linkedFieldOption(LinkedId.Address3)\n address3: string = null;\n @linkedFieldOption(LinkedId.City, \"cityTown\")\n city: string = null;\n @linkedFieldOption(LinkedId.State, \"stateProvince\")\n state: string = null;\n @linkedFieldOption(LinkedId.PostalCode, \"zipPostalCode\")\n postalCode: string = null;\n @linkedFieldOption(LinkedId.Country)\n country: string = null;\n @linkedFieldOption(LinkedId.Company)\n company: string = null;\n @linkedFieldOption(LinkedId.Email)\n email: string = null;\n @linkedFieldOption(LinkedId.Phone)\n phone: string = null;\n @linkedFieldOption(LinkedId.Ssn)\n ssn: string = null;\n @linkedFieldOption(LinkedId.Username)\n username: string = null;\n @linkedFieldOption(LinkedId.PassportNumber)\n passportNumber: string = null;\n @linkedFieldOption(LinkedId.LicenseNumber)\n licenseNumber: string = null;\n\n private _firstName: string = null;\n private _lastName: string = null;\n private _subTitle: string = null;\n\n constructor() {\n super();\n }\n\n @linkedFieldOption(LinkedId.FirstName)\n get firstName(): string {\n return this._firstName;\n }\n set firstName(value: string) {\n this._firstName = value;\n this._subTitle = null;\n }\n\n @linkedFieldOption(LinkedId.LastName)\n get lastName(): string {\n return this._lastName;\n }\n set lastName(value: string) {\n this._lastName = value;\n this._subTitle = null;\n }\n\n get subTitle(): string {\n if (this._subTitle == null && (this.firstName != null || this.lastName != null)) {\n this._subTitle = \"\";\n if (this.firstName != null) {\n this._subTitle = this.firstName;\n }\n if (this.lastName != null) {\n if (this._subTitle !== \"\") {\n this._subTitle += \" \";\n }\n this._subTitle += this.lastName;\n }\n }\n\n return this._subTitle;\n }\n\n @linkedFieldOption(LinkedId.FullName)\n get fullName(): string {\n if (\n this.title != null ||\n this.firstName != null ||\n this.middleName != null ||\n this.lastName != null\n ) {\n let name = \"\";\n if (this.title != null) {\n name += this.title + \" \";\n }\n if (this.firstName != null) {\n name += this.firstName + \" \";\n }\n if (this.middleName != null) {\n name += this.middleName + \" \";\n }\n if (this.lastName != null) {\n name += this.lastName;\n }\n return name.trim();\n }\n\n return null;\n }\n\n get fullAddress(): string {\n let address = this.address1;\n if (!Utils.isNullOrWhitespace(this.address2)) {\n if (!Utils.isNullOrWhitespace(address)) {\n address += \", \";\n }\n address += this.address2;\n }\n if (!Utils.isNullOrWhitespace(this.address3)) {\n if (!Utils.isNullOrWhitespace(address)) {\n address += \", \";\n }\n address += this.address3;\n }\n return address;\n }\n\n get fullAddressPart2(): string {\n if (this.city == null && this.state == null && this.postalCode == null) {\n return null;\n }\n const city = this.city || \"-\";\n const state = this.state;\n const postalCode = this.postalCode || \"-\";\n let addressPart2 = city;\n if (!Utils.isNullOrWhitespace(state)) {\n addressPart2 += \", \" + state;\n }\n addressPart2 += \", \" + postalCode;\n return addressPart2;\n }\n\n 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/loginUri\";\n\nimport { View } from \"./view\";\n\nconst CanLaunchWhitelist = [\n \"https://\",\n \"http://\",\n \"ssh://\",\n \"ftp://\",\n \"sftp://\",\n \"irc://\",\n \"vnc://\",\n // https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-uri\n \"rdp://\", // Legacy RDP URI scheme\n \"ms-rd:\", // Preferred RDP URI scheme\n \"chrome://\",\n \"iosapp://\",\n \"androidapp://\",\n];\n\nexport class LoginUriView implements View {\n match: UriMatchType = null;\n\n private _uri: string = null;\n private _domain: string = null;\n private _hostname: string = null;\n private _host: string = null;\n private _canLaunch: boolean = null;\n\n constructor(u?: LoginUri) {\n if (!u) {\n return;\n }\n\n this.match = u.match;\n }\n\n get uri(): string {\n return this._uri;\n }\n set uri(value: string) {\n this._uri = value;\n this._domain = null;\n this._canLaunch = null;\n }\n\n get domain(): string {\n if (this._domain == null && this.uri != null) {\n this._domain = Utils.getDomain(this.uri);\n if (this._domain === \"\") {\n this._domain = null;\n }\n }\n\n return this._domain;\n }\n\n get hostname(): string {\n if (this.match === UriMatchType.RegularExpression) {\n return null;\n }\n if (this._hostname == null && this.uri != null) {\n this._hostname = Utils.getHostname(this.uri);\n if (this._hostname === \"\") {\n this._hostname = null;\n }\n }\n\n return this._hostname;\n }\n\n get host(): string {\n if (this.match === UriMatchType.RegularExpression) {\n return null;\n }\n if (this._host == null && this.uri != null) {\n this._host = Utils.getHost(this.uri);\n if (this._host === \"\") {\n this._host = null;\n }\n }\n\n return this._host;\n }\n\n get hostnameOrUri(): string {\n return this.hostname != null ? this.hostname : this.uri;\n }\n\n get hostOrUri(): string {\n return this.host != null ? this.host : this.uri;\n }\n\n get isWebsite(): boolean {\n return (\n this.uri != null &&\n (this.uri.indexOf(\"http://\") === 0 ||\n this.uri.indexOf(\"https://\") === 0 ||\n (this.uri.indexOf(\"://\") < 0 && Utils.tldEndingRegex.test(this.uri)))\n );\n }\n\n get canLaunch(): boolean {\n if (this._canLaunch != null) {\n return this._canLaunch;\n }\n if (this.uri != null && this.match !== UriMatchType.RegularExpression) {\n const uri = this.launchUri;\n for (let i = 0; i < CanLaunchWhitelist.length; i++) {\n if (uri.indexOf(CanLaunchWhitelist[i]) === 0) {\n this._canLaunch = true;\n return this._canLaunch;\n }\n }\n }\n this._canLaunch = false;\n return this._canLaunch;\n }\n\n get launchUri(): string {\n return this.uri.indexOf(\"://\") < 0 && Utils.tldEndingRegex.test(this.uri)\n ? \"http://\" + this.uri\n : this.uri;\n }\n\n 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 \"./itemView\";\nimport { LoginUriView } from \"./loginUriView\";\n\nexport class LoginView extends ItemView {\n @linkedFieldOption(LinkedId.Username)\n username: string = null;\n @linkedFieldOption(LinkedId.Password)\n password: string = null;\n\n passwordRevisionDate?: Date = null;\n totp: string = null;\n uris: LoginUriView[] = null;\n autofillOnPageLoad: boolean = null;\n\n constructor(l?: Login) {\n super();\n if (!l) {\n return;\n }\n\n this.passwordRevisionDate = l.passwordRevisionDate;\n this.autofillOnPageLoad = l.autofillOnPageLoad;\n }\n\n get uri(): string {\n return this.hasUris ? this.uris[0].uri : null;\n }\n\n get maskedPassword(): string {\n return this.password != null ? \"••••••••\" : null;\n }\n\n get subTitle(): string {\n return this.username;\n }\n\n get canLaunch(): boolean {\n return this.hasUris && this.uris.some((u) => u.canLaunch);\n }\n\n get hasTotp(): boolean {\n return !Utils.isNullOrWhitespace(this.totp);\n }\n\n get launchUri(): string {\n if (this.hasUris) {\n const uri = this.uris.find((u) => u.canLaunch);\n if (uri != null) {\n return uri.launchUri;\n }\n }\n return null;\n }\n\n get hasUris(): boolean {\n return this.uris != null && this.uris.length > 0;\n }\n\n 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/secureNote\";\n\nimport { ItemView } from \"./itemView\";\n\nexport class SecureNoteView extends ItemView {\n type: SecureNoteType = null;\n\n constructor(n?: SecureNote) {\n super();\n if (!n) {\n return;\n }\n\n this.type = n.type;\n }\n\n get subTitle(): string {\n return null;\n }\n\n static fromJSON(obj: Partial>): SecureNoteView {\n return Object.assign(new SecureNoteView(), obj);\n }\n}\n","export enum LogLevelType {\n Debug,\n Info,\n Warning,\n Error,\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","import { Input, HostBinding, Component } from \"@angular/core\";\n\nexport type ButtonTypes = \"primary\" | \"secondary\" | \"danger\";\n\nconst buttonStyles: Record = {\n primary: [\n \"tw-border-primary-500\",\n \"tw-bg-primary-500\",\n \"!tw-text-contrast\",\n \"hover:tw-bg-primary-700\",\n \"hover:tw-border-primary-700\",\n \"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})\nexport class ButtonComponent {\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","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 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 { BitInputDirective } from \"../input/input.directive\";\n\nimport { BitErrorComponent } from \"./error.component\";\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(BitInputDirective) input: BitInputDirective;\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\";\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 { NgModule } from \"@angular/core\";\n\nimport { BitInputDirective } from \"../input/input.directive\";\nimport { InputModule } from \"../input/input.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],\n exports: [\n BitErrorComponent,\n BitErrorSummary,\n BitFormFieldComponent,\n BitHintComponent,\n BitInputDirective,\n BitLabel,\n BitPrefixDirective,\n BitSuffixDirective,\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 { Directive, HostBinding, Input, Optional, Self } from \"@angular/core\";\nimport { NgControl, Validators } from \"@angular/forms\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Directive({\n selector: \"input[bitInput], select[bitInput], textarea[bitInput]\",\n})\nexport class BitInputDirective {\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 @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","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","// 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 + \".\" + {\"182\":\"ccd7649ae6212d250b80\",\"290\":\"df3b8945ca6bd783424b\",\"584\":\"238f402a694e2a33f299\",\"754\":\"7f59f9ff82e4a152da9a\"}[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 + \"../\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t148: 0\n};\n\n__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__(49522)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","RegisterFormModule","OrganizationCreateModule","OrganizationPermissionsGuard","constructor","router","organizationService","platformUtilsService","i18nService","syncService","canActivate","route","state","this","getLastSync","fullSync","org","get","params","organizationId","createUrlTree","isOwner","enabled","showToast","t","permissionsCallback","data","organizationPermissions","cipherId","root","queryParamMap","queryParams","itemId","id","canAccessToolsTab","canAccessImportExport","canAccessReports","canAccessSettingsTab","canAccessManageTab","canCreateNewCollections","canEditAnyCollection","canDeleteAnyCollection","canEditAssignedCollections","canDeleteAssignedCollections","canAccessEventLogs","canManageGroups","canManageUsers","canManagePolicies","canManageSso","canManageScim","canAccessOrgAdmin","remove","BitwardenToast","toastrService","toastPackage","super","opacity","BitwardenToastGlobalConfig","toastComponent","BitwardenToastModule","static","config","ngModule","providers","provide","useValue","default","numberFormats","Visa","cardLength","blocks","Mastercard","Maestro","Discover","JCB","UnionPay","Amex","Mir","Other","CreditCardNumberPipe","transform","creditCardNumber","brand","rules","length","matchingRule","find","r","chunks","total","forEach","c","push","slice","join","JslibModule","forRoot","maxOpened","autoDismiss","closeButton","BadgeModule","ButtonModule","CalloutModule","MenuModule","IconModule","SharedModule","LooseComponentsModule","OrganizationBadgeModule","VaultFilterSharedModule","VaultFilterService","stateService","folderService","cipherService","collectionService","policyService","apiService","_collapsedFilterNodes","collapsedFilterNodes$","asObservable","buildCollapsedFilterNodes","nodes","next","storeCollapsedFilterNodes","collapsedFilterNodes","ensureVaultFiltersAreExpanded","has","delete","buildAdminCollections","result","collectionResponse","getCollections","collectionDomains","map","decryptMany","noneCollection","name","nestedCollections","getAllNested","fullList","nestedList","VaultFilterModule","WINDOW","MEMORY_STORAGE","SECURE_STORAGE","STATE_FACTORY","STATE_SERVICE_USE_CACHE","LOGOUT_CALLBACK","LOCKED_CALLBACK","LOCALES_DIRECTORY","SYSTEM_LANGUAGE","LOG_MAC_FAILURES","ThemeType","ThemeBuilder","configuredTheme","systemTheme","effectiveTheme","System","updateSystemTheme","updateConfiguredTheme","ThemingService","window","document","_theme","BehaviorSubject","theme$","pipe","filter","x","monitorThemeChanges","getTheme","getSystemTheme","monitorConfiguredThemeChanges","monitorSystemThemeChanges","getValue","theme","setTheme","subscribe","documentElement","classList","Light","Dark","Nord","SolarizedDark","add","matchMedia","matches","fromEvent","event","AbstractThemingService","AbstractEncryptService","AccountApiService","AccountService","AnonymousHubService","AppIdService","AuditService","AuthService","BroadcasterService","ConfigApiServiceAbstraction","CryptoFunctionService","EnvironmentService","FileUploadService","FolderApiServiceAbstraction","FormValidationErrorsService","MessagingService","NotificationsService","OrganizationApiServiceAbstraction","PasswordGenerationService","PasswordRepromptService","PolicyApiServiceAbstraction","ProviderService","SearchService","indexedEntityId","SendService","SettingsService","StateMigrationService","AbstractStorageService","TokenService","TotpService","TwoFactorService","UserVerificationApiServiceAbstraction","UsernameGenerationService","VaultTimeoutService","VaultTimeoutSettingsService","AccountFactory","accountConstructor","create","args","GlobalStateFactory","globalStateConstructor","StateFactory","globalStateFactory","accountFactory","createGlobal","createAccount","ServerConfigData","serverConfigResponse","version","gitHash","server","ThirdPartyServerConfigData","utcDate","Date","toISOString","environment","EnvironmentServerConfigData","obj","Object","assign","fromJSON","response","url","vault","api","identity","notifications","sso","EnvironmentUrls","base","icons","events","webVault","keyConnector","StateVersion","EncryptionPair","toJSON","encrypted","decrypted","ArrayBuffer","decryptedFromJson","encryptedFromJson","pair","DataEncryptionPair","TemporaryDataEncryption","AccountData","ciphers","folders","sends","collections","policies","passwordGenerationHistory","AccountKeys","cryptoSymmetricKey","organizationKeys","providerKeys","privateKey","publicKey","cryptoMasterKey","initRecordEncryptionPairsFromJSON","decObj","buffer","record","AccountProfile","environmentUrls","pinProtected","vaultTimeoutAction","serverConfig","AccountTokens","init","keys","profile","settings","tokens","json","WindowState","stateVersion","One","NotificationType","NotificationResponse","contextId","getResponseProperty","type","payload","SyncCipherCreate","SyncCipherDelete","SyncCipherUpdate","SyncLoginDelete","SyncCipherNotification","SyncFolderCreate","SyncFolderDelete","SyncFolderUpdate","SyncFolderNotification","SyncVault","SyncCiphers","SyncOrgKeys","SyncSettings","LogOut","UserNotification","SyncSendCreate","SyncSendUpdate","SyncSendDelete","SyncSendNotification","AuthRequest","AuthRequestResponse","AuthRequestPushNotification","userId","collectionIds","revisionDate","date","DeviceType","environmentService","authService","logService","createHubConnection","token","getNotificationsUrl","anonHubConnection","HubConnectionBuilder","withUrl","skipNegotiation","transport","withHubProtocol","MessagePackHubProtocol","build","start","catch","error","on","ProcessNotification","stopHubConnection","stop","notification","authResponsePushNotifiction","DeviceRequest","appId","getDevice","getDeviceString","identifier","pushToken","TokenRequest","twoFactor","device","alterIdentityTokenHeaders","headers","setTwoFactor","setPasswordlessAccessCode","accessCode","passwordlessAuthRequest","toIdentityToken","clientId","scope","client_id","deviceType","deviceIdentifier","deviceName","authRequest","provider","twoFactorToken","twoFactorProvider","twoFactorRemember","remember","ApiTokenRequest","clientSecret","startsWith","grant_type","client_secret","TokenRequestTwoFactor","ApiKeyResponse","apiKey","AttachmentResponse","fileName","key","size","sizeName","PasswordHistoryResponse","password","lastUsedDate","CipherResponse","folderId","notes","favorite","edit","viewPassword","organizationUseTotp","deletedDate","login","card","secureNote","fields","f","attachments","a","passwordHistory","h","reprompt","AttachmentUploadDataResponse","attachmentId","fileUploadType","cipherResponse","cipherMiniResponse","requestDeviceType","requestIpAddress","masterPasswordHash","creationDate","requestApproved","RegisterResponse","captchaBypassToken","BillingResponse","invoices","transactions","balance","paymentSource","BillingSourceResponse","BillingTransactionResponse","i","BillingInvoiceResponse","cardBrand","description","needsVerification","pdfUrl","number","paid","amount","createdDate","refunded","partiallyRefunded","refundedAmount","paymentMethodType","details","BillingHistoryResponse","hasNoHistory","BillingPaymentResponse","BreachAccountResponse","addedDate","breachDate","dataClasses","domain","isActive","isVerified","logoPath","modifiedDate","pwnCount","title","SelectionReadOnlyResponse","readOnly","hidePasswords","CollectionResponse","externalId","CollectionDetailsResponse","CollectionGroupDetailsResponse","groups","g","DeviceVerificationResponse","isDeviceVerificationSectionEnabled","unknownDeviceVerificationEnabled","GlobalDomainResponse","domains","excluded","DomainsResponse","globalEquivalentDomains","equivalentDomains","d","EmergencyAccessGranteeDetailsResponse","granteeId","email","status","waitTimeDays","EmergencyAccessGrantorDetailsResponse","grantorId","EmergencyAccessTakeoverResponse","keyEncrypted","kdf","kdfIterations","EmergencyAccessViewResponse","EventResponse","providerId","collectionId","groupId","policyId","organizationUserId","providerUserId","providerOrganizationId","actingUserId","ipAddress","installationId","GroupResponse","accessAll","GroupDetailsResponse","IdentityCaptchaResponse","siteKey","IdentityTokenResponse","accessToken","access_token","expiresIn","expires_in","refreshToken","refresh_token","tokenType","token_type","resetMasterPassword","forcePasswordReset","apiUseKeyConnector","keyConnectorUrl","IdentityTwoFactorResponse","twoFactorProviders2","Map","captchaToken","twoFactorProviders","prop","hasOwnProperty","set","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","useTotp","use2fa","useApi","useSso","useKeyConnector","useScim","useResetPassword","selfHost","usersGetPremium","seats","maxCollections","maxStorageGb","hasPublicAndPrivateKeys","ssoBound","providerName","familySponsorshipFriendlyName","familySponsorshipAvailable","planProductType","keyConnectorEnabled","familySponsorshipLastSyncDateString","familySponsorshipLastSyncDate","familySponsorshipValidUntilString","familySponsorshipValidUntil","familySponsorshipToDelete","ProfileProviderOrganizationResponse","ProfileProviderResponse","ProfileResponse","organizations","providerOrganizations","emailVerified","masterPasswordHint","premiumPersonally","premiumFromOrganization","culture","securityStamp","o","PaymentResponse","userProfile","paymentIntentClientSecret","success","PlanResponse","product","isAnnual","nameLocalizationKey","descriptionLocalizationKey","canBeUsedByBusiness","baseSeats","baseStorageGb","maxUsers","hasAdditionalSeatsOption","maxAdditionalSeats","hasAdditionalStorageOption","maxAdditionalStorage","hasPremiumAccessOption","trialPeriodDays","hasSelfHost","hasPolicies","hasGroups","hasDirectory","hasEvents","hasTotp","has2fa","hasApi","hasSso","hasResetPassword","upgradeSortOrder","displaySortOrder","legacyYear","disabled","stripePlanId","stripeSeatPlanId","stripeStoragePlanId","stripePremiumAccessPlanId","basePrice","seatPrice","additionalStoragePricePerGb","premiumAccessOptionPrice","PolicyResponse","PreloginResponse","ProviderOrganizationResponse","userCount","plan","ProviderOrganizationOrganizationDetailsResponse","organizationName","ProviderResponse","businessName","billingEmail","ProviderUserBulkPublicKeyResponse","ProviderUserBulkResponse","ProviderUserResponse","ProviderUserUserDetailsResponse","SendFileApi","SendTextApi","text","hidden","SendAccessResponse","file","expirationDate","creatorIdentifier","SendFileDownloadDataResponse","SendResponse","accessId","maxAccessCount","accessCount","deletionDate","disable","hideEmail","SendFileUploadDataResponse","sendResponse","SsoPreValidateResponse","SubscriptionResponse","storageName","storageGb","license","expiration","usingInAppPurchase","subscription","upcomingInvoice","BillingSubscriptionResponse","BillingSubscriptionUpcomingInvoiceResponse","items","trialEndDate","periodStartDate","periodEndDate","cancelledDate","cancelAtEndDate","cancelled","BillingSubscriptionItemResponse","quantity","interval","sponsoredSubscriptionItem","FolderResponse","SyncResponse","p","s","TaxInfoResponse","taxId","taxIdType","line1","line2","city","postalCode","country","TaxRateResponse","rate","TwoFactorAuthenticatorResponse","TwoFactorDuoResponse","host","secretKey","integrationKey","TwoFactorEmailResponse","TwoFactorProviderResponse","TwoFactorRecoverResponse","code","TwoFactorWebAuthnResponse","k","KeyResponse","migrated","ChallengeResponse","attestation","authenticatorSelection","challenge","excludeCredentials","extensions","pubKeyCredParams","rp","timeout","user","TwoFactorYubiKeyResponse","key1","key2","key3","key4","key5","nfc","UserKeyResponse","HtmlStorageLocation","cryptoFunctionService","passwordLeaked","hashBytes","hash","toUpperCase","hashStart","substr","hashEnding","nativeFetch","Request","match","split","v","breachedAccounts","username","getHibpBreach","e","statusCode","Error","limit","throttleKey","AuthenticationStatus","KeySuffixOptions","TwoFactorProviderType","target","propertyKey","descriptor","originalMethod","value","allThrottles","throttles","getThrottles","argsThrottleKey","queue","Promise","resolve","reject","exec","onFinally","splice","indexOf","apply","then","val","err","AuthenticationType","AuthResult","captchaSiteKey","requiresCaptcha","requiresTwoFactor","KeysRequest","LogInStrategy","cryptoService","tokenService","appIdService","messagingService","twoFactorService","logInTwoFactor","captchaResponse","tokenRequest","startLogIn","clearSelectedProvider","postIdentityToken","processTwoFactorResponse","processCaptchaResponse","processTokenResponse","onSuccessfulLogin","buildDeviceRequest","getAppId","buildTwoFactor","userProvidedTwoFactor","storedTwoFactorToken","getTwoFactorToken","Remember","saveAccountInformation","tokenResponse","accountInformation","decodeToken","addAccount","sub","hasPremiumPersonally","premium","kdfType","setTwoFactorToken","setEncKey","setEncPrivateKey","createKeyPairForOldAccount","send","setProviders","makeKeyPair","postAccountKeys","encryptedString","HashPurpose","ApiLogInStrategy","keyConnectorService","getKeyConnectorUrl","getAndSetKey","logIn","credentials","setApiKeyClientId","setApiKeyClientSecret","PasswordTokenRequest","PasswordLogInStrategy","setKey","setKeyHash","localHashedPassword","masterPassword","makePreloginKey","hashPassword","LocalAuthorization","hashedPassword","PasswordlessLogInStrategy","localPasswordHash","decKey","authRequestId","SsoTokenRequest","codeVerifier","redirectUri","code_verifier","redirect_uri","SsoLogInStrategy","newSsoUser","convertNewSsoUserToKeyConnector","orgId","redirectUrl","PreloginRequest","sequentialize","cacheKey","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","sort","Ciphers","resetTimer","getLastUsed","getLastLaunched","getNext","updateLastUsedIndex","clear","clearTimeout","setTimeout","lastUsedIndex","Math","max","cipher","localData","lastLaunched","y","valueOf","getNextIndex","CipherBulkDeleteRequest","ids","CipherBulkMoveRequest","CipherBulkRestoreRequest","CipherWithIdRequest","CipherBulkShareRequest","CipherCollectionsRequest","CipherCreateRequest","CipherShareRequest","DomainMatchBlacklist","Set","CipherService","settingsService","fileUploadService","searchService","sortedCiphersCache","sortCiphersByLastUsed","getDecryptedCipherCache","getDecryptedCiphers","setDecryptedCipherCache","setDecryptedCiphers","clearIndex","indexCiphers","clearCache","clearDecryptedCiphersState","encrypt","model","originalCipher","existingCipher","decrypt","ph","passwordRevisionDate","hasFields","existingHiddenFields","hiddenFields","ef","matchedField","getOrgKey","all","encryptObjProperty","encryptCipherData","encryptFields","encryptPasswordHistories","encryptAttachments","attachmentsModel","promises","encAttachments","attachment","promise","fieldsModel","self","encFields","reduce","field","encField","encryptField","fieldModel","linkedId","phModels","encPhs","encPh","encryptPasswordHistory","phModel","getEncryptedCiphers","getLocalData","getAll","getAllDecrypted","getUserId","decCiphers","hasKey","getLocaleSortingFunction","getAllDecryptedForGrouping","groupingId","folder","isDeleted","getAllDecryptedForUrl","includeOtherTypes","defaultMatch","eqDomainsPromise","firstValueFrom","settings$","eqDomain","concat","matchingDomains","getDefaultUriMatch","uris","u","uri","domainUrlHost","urlHost","RegExp","test","getAllFromApiForOrganization","getCiphersOrganization","getLastUsedForUrl","autofillOnPageLoad","getCipherForUrl","getLastLaunchedForUrl","getNextCipherForUrl","updateLastUsedIndexForUrl","updateLastUsedDate","ciphersLocalData","getTime","setLocalData","decryptedCipherCache","cached","updateLastLaunchedDate","saveNeverDomain","getNeverDomains","setNeverDomains","saveWithServer","request","postCipherCreate","postCipher","putCipher","upsert","shareWithServer","attachmentPromises","shareAttachmentWithServer","encCipher","putShareCipher","shareManyWithServer","encCiphers","putShareCiphers","toCipherData","saveAttachmentWithServer","unencryptedFile","admin","reader","FileReader","readAsArrayBuffer","onload","evt","cData","saveAttachmentRawWithServer","onerror","filename","encFileName","dataEncKey","makeEncKey","encData","encryptToBytes","fileSize","byteLength","adminRequest","uploadDataResponse","postCipherAttachment","uploadCipherAttachment","getSingleMessage","legacyServerAttachmentFileUpload","fd","FormData","blob","Blob","append","Buffer","from","filepath","contentType","postCipherAttachmentAdminLegacy","postCipherAttachmentLegacy","saveCollectionsWithServer","putCipherCollections","replace","setEncryptedCiphers","clearEncryptedCiphersState","moveManyWithServer","putMoveCiphers","deleteWithServer","deleteCipher","deleteManyWithServer","deleteManyCiphers","deleteAttachment","deleteAttachmentWithServer","deleteCipherAttachment","b","aLastUsed","bLastUsed","bothNotNull","sortCiphersByLastUsedThenName","aName","bName","collator","compare","localeCompare","softDelete","setDeletedDate","softDeleteWithServer","putDeleteCipher","softDeleteManyWithServer","putDeleteManyCiphers","restore","clearDeletedDate","Array","restoreWithServer","putRestoreCipher","restoreManyWithServer","putRestoreManyCiphers","restores","attachmentView","attachmentResponse","toString","encBuf","fromResponse","decBuf","decryptFromBytes","postShareCipherAttachment","theProp","theObj","modelProp","totp","loginUri","cardholderName","expMonth","expYear","firstName","middleName","lastName","address1","address2","address3","company","phone","ssn","passportNumber","licenseNumber","lastUsed","autofillOnPageLoadDefault","getAutoFillOnPageLoadDefault","clearSortedCiphers","ServerConfigResponse","ThirdPartyServerConfigResponse","EnvironmentServerConfigResponse","ServerConfig","serverConfigData","getAgeInMilliseconds","isValid","expiresSoon","EEFLongWordList","BaseEncryptedOrganizationKey","EncryptedOrganizationKey","ProviderEncryptedOrganizationKey","decValue","rsaDecrypt","toData","providerKey","getProviderKey","decryptToBytes","CryptoService","encryptService","platformUtilService","setCryptoMasterKey","storeKey","keyHash","encKey","setDecryptedCryptoSymmetricKey","setEncryptedCryptoSymmetricKey","encPrivateKey","setDecryptedPrivateKey","setEncryptedPrivateKey","setOrgKeys","orgs","providerOrgs","encOrgKeyData","setDecryptedOrganizationKeys","setEncryptedOrganizationKeys","setProviderKeys","setDecryptedProviderKeys","setEncryptedProviderKeys","getKey","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","getOrgKeys","decryptedOrganizationKeys","getDecryptedOrganizationKeys","getEncryptedOrganizationKeys","encOrgKey","fromData","decOrgKey","orgKeys","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","clearKeys","toggleKey","makeKey","salt","pbkdf2","makeKeyFromPin","pin","protectedKeyCs","pinProtectedKey","getEncryptedPinProtected","pinKey","makePinKey","makeShareKey","shareKey","randomBytes","rsaEncrypt","keyPair","rsaGenerateKeyPair","stretchKey","makeSendKey","keyMaterial","sendKey","hkdf","hashPurpose","iterations","theKey","getKeyForUserEncryption","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","log","numWords","hashArr","phrase","hashNumber","remainder","mod","divide","encKeyEnc","getDecryptedCryptoSymmetricKey","decEncKey","encKeyCipher","symmetricCryptoKey","EncryptedObject","EventData","EventRequest","EventExport","message","humanReadableMessage","appIcon","appName","userName","userEmail","ip","FileUploadType","AzureFileUploadService","upload","renewalCallback","azureUploadBlob","azureUploadBlocks","urlObject","Headers","toUTCString","searchParams","body","method","blobResponse","fetch","baseUrl","blockSize","getMaxBlockSize","blockIndex","numBlocks","blocksStaged","renewUrlIfNecessary","blockUrl","blockId","encodedBlockId","blockData","blockHeaders","blockRequest","blockResponse","blockListUrl","blockListXml","expiry","isNaN","setTime","now","utfBlockId","blockIdList","xml","Version","year","month","day","parts","Number","compareTo","BitwardenFileUploadService","encryptedFileName","encryptedFileData","apiCall","FolderData","OrganizationUserType","SetKeyConnectorKeyRequest","orgIdentifier","KeyConnectorUserKeyRequest","OrganizationUserStatusType","Organization","isProviderUser","canAccess","Owner","Confirmed","isManager","Manager","Admin","isAdmin","canViewAllCollections","canViewAssignedCollections","canManageUsersPassword","isExemptFromPolicies","canManageBilling","hasProvider","SsoType","OpenIdConnectRedirectBehavior","Saml2BindingType","Saml2NameIdFormat","Saml2SigningBehavior","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","OrganizationApiKeyInformationResponse","keyType","OrganizationAutoEnrollStatusResponse","resetPasswordEnabled","KeysResponse","OrganizationKeysResponse","OrganizationResponse","businessAddress1","businessAddress2","businessAddress3","businessCountry","businessTaxNumber","planType","maxAutoscaleSeats","OrganizationSubscriptionResponse","GeneratedPasswordHistory","PasswordGeneratorPolicyOptions","defaultType","minLength","useUppercase","useLowercase","useNumbers","numberCount","useSpecial","specialCount","minNumberWords","capitalize","includeNumber","inEffect","DefaultOptions","ambiguous","minNumber","uppercase","minUppercase","lowercase","minLowercase","special","minSpecial","wordSeparator","PolicyData","Policy","ResetPasswordPolicyOptions","autoEnrollEnabled","ProviderUserStatusType","ProviderUserType","Provider","isProviderAdmin","canCreateOrganizations","ProviderAdmin","SendType","indexing","index","immediateSearchLocales","defaultSearchableMinLength","searchableMinLength","locale$","locale","registeredPipeline","lunr","Pipeline","registerFunction","normalizeAccentsPipelineFunction","isSearchable","query","normalizeSearchQuery","builder","Builder","pipeline","ref","boost","extractor","subTitle","uriExtractor","fieldExtractor","attachmentExtractor","info","searchCiphers","results","trim","toLowerCase","isArray","every","getIndexForSearch","searchCiphersBasic","ciphersMap","searchResults","search","soWild","Query","wildcard","LEADING","TRAILING","q","tokenizer","term","deleted","hasUris","some","searchSends","toLocaleLowerCase","sendsMatched","lowPriorityMatched","joined","hasAttachments","lastIndexOf","hostname","protocolIndex","queryIndex","substring","searchableFields","metadata","includes","normalize","SendFileData","SendTextData","SendData","Text","File","SendFileView","SendTextView","maskedText","SendView","urlB64Key","maxAccessCountReached","expired","pendingDelete","SendFile","buildDomainModel","decryptObj","SendText","Send","getCryptoService","cryptoKey","SendRequest","fileLength","StorageLocation","ProviderData","State","globals","accounts","authenticatedAccounts","accountActivity","buildAccountMapFromJSON","jsonAccounts","partialKeys","DDG_SHARED_KEY","storageService","secureStorageService","memoryStorageService","stateMigrationService","stateFactory","useAccountCache","activeAccountSubject","activeAccount$","activeAccountUnlockedSubject","activeAccountUnlocked$","hasBeenInited","isRecoveredSession","accountDiskCache","concatMap","needsMigration","migrate","setState","createGlobals","initAccountState","updateState","syncAccountFromDisk","storedActiveUser","activeUserId","pushAccounts","diskAccount","getAccountFromDisk","account","setAccountEnvironmentUrls","save","scaffoldNewAccountStorage","setLastActive","setActiveUser","clearDecryptedDataForActiveUser","clean","options","reconcileOptions","defaultInMemoryOptions","deAuthenticateAccount","dynamicallySetActiveUser","removeAccountFromDisk","removeAccountFromMemory","getAccessToken","getTimeoutBasedStorageOptions","getAccount","setAccessToken","saveAccount","getAddEditCipherInfo","addEditCipherInfo","setAddEditCipherInfo","getAlwaysShowDock","getGlobals","defaultOnDiskOptions","alwaysShowDock","setAlwaysShowDock","saveGlobals","getApiKeyClientId","apiKeyClientId","getApiKeyClientSecret","apiKeyClientSecret","getAutoConfirmFingerPrints","autoConfirmFingerPrints","setAutoConfirmFingerprints","autoFillOnPageLoadDefault","setAutoFillOnPageLoadDefault","getBiometricAwaitingAcceptance","biometricAwaitingAcceptance","setBiometricAwaitingAcceptance","getBiometricFingerprintValidated","biometricFingerprintValidated","setBiometricFingerprintValidated","getBiometricText","biometricText","setBiometricText","biometricUnlock","setBiometricUnlock","getCanAccessPremium","getIsAuthenticated","getHasPremiumPersonally","getHasPremiumFromOrganization","setHasPremiumPersonally","hasPremiumFromOrganization","getOrganizations","setHasPremiumFromOrganization","getClearClipboard","defaultOnDiskLocalOptions","clearClipboard","setClearClipboard","getCollapsedGroupings","collapsedGroupings","setCollapsedGroupings","getConvertAccountToKeyConnector","convertAccountToKeyConnector","setConvertAccountToKeyConnector","nextValue","defaultSecureStorageOptions","saveSecureStorageKey","getCryptoMasterKeyB64","setCryptoMasterKeyB64","getDecryptedCollections","setDecryptedCollections","recordToMap","mapToRecord","getDecryptedPasswordGenerationHistory","setDecryptedPasswordGenerationHistory","getDecryptedPinProtected","setDecryptedPinProtected","getDecryptedPolicies","setDecryptedPolicies","getDecryptedSends","setDecryptedSends","defaultUriMatch","setDefaultUriMatch","getDisableAddLoginNotification","disableAddLoginNotification","setDisableAddLoginNotification","getDisableAutoBiometricsPrompt","disableAutoBiometricsPrompt","setDisableAutoBiometricsPrompt","getDisableAutoTotpCopy","disableAutoTotpCopy","setDisableAutoTotpCopy","getDisableBadgeCounter","disableBadgeCounter","setDisableBadgeCounter","getDisableChangedPasswordNotification","disableChangedPasswordNotification","setDisableChangedPasswordNotification","getDisableContextMenuItem","disableContextMenuItem","setDisableContextMenuItem","getDisableFavicon","disableFavicon","setDisableFavicon","getDisableGa","disableGa","setDisableGa","getDontShowCardsCurrentTab","dontShowCardsCurrentTab","setDontShowCardsCurrentTab","getDontShowIdentitiesCurrentTab","dontShowIdentitiesCurrentTab","setDontShowIdentitiesCurrentTab","getDuckDuckGoSharedKey","setDuckDuckGoSharedKey","getEmail","setEmail","getEmailVerified","setEmailVerified","getEnableAlwaysOnTop","accountPreference","enableAlwaysOnTop","globalPreference","setEnableAlwaysOnTop","getEnableAutoFillOnPageLoad","enableAutoFillOnPageLoad","setEnableAutoFillOnPageLoad","getEnableBiometric","enableBiometrics","setEnableBiometric","getEnableBrowserIntegration","enableBrowserIntegration","setEnableBrowserIntegration","getEnableBrowserIntegrationFingerprint","enableBrowserIntegrationFingerprint","setEnableBrowserIntegrationFingerprint","getEnableCloseToTray","enableCloseToTray","setEnableCloseToTray","getEnableDuckDuckGoBrowserIntegration","enableDuckDuckGoBrowserIntegration","setEnableDuckDuckGoBrowserIntegration","getEnableFullWidth","enableFullWidth","setEnableFullWidth","getEnableGravitars","enableGravitars","setEnableGravitars","getEnableMinimizeToTray","enableMinimizeToTray","setEnableMinimizeToTray","getEnableStartToTray","enableStartToTray","setEnableStartToTray","getEnableTray","enableTray","setEnableTray","defaultOnDiskMemoryOptions","getEncryptedCollections","setEncryptedCollections","getEncryptedFolders","setEncryptedFolders","getEncryptedPasswordGenerationHistory","setEncryptedPasswordGenerationHistory","getEncryptedPolicies","setEncryptedPolicies","getEncryptedSends","setEncryptedSends","getEntityId","entityId","setEntityId","getEntityType","entityType","setEntityType","getEnvironmentUrls","getGlobalEnvironmentUrls","setEnvironmentUrls","getEquivalentDomains","setEquivalentDomains","getEventCollection","eventCollection","setEventCollection","getEverBeenUnlocked","everBeenUnlocked","setEverBeenUnlocked","getForcePasswordReset","setForcePasswordReset","getInstalledVersion","installedVersion","setInstalledVersion","getKdfIterations","setKdfIterations","getKdfType","setKdfType","getLastActive","lastSync","setLastSync","getLocale","setLocale","getMainWindowSize","mainWindowSize","setMainWindowSize","getMinimizeOnCopyToClipboard","minimizeOnCopyToClipboard","setMinimizeOnCopyToClipboard","neverDomains","getNoAutoPromptBiometrics","noAutoPromptBiometrics","setNoAutoPromptBiometrics","getNoAutoPromptBiometricsText","noAutoPromptBiometricsText","setNoAutoPromptBiometricsText","getOpenAtLogin","openAtLogin","setOpenAtLogin","getOrganizationInvitation","organizationInvitation","setOrganizationInvitation","setOrganizations","getPasswordGenerationOptions","passwordGenerationOptions","setPasswordGenerationOptions","getUsernameGenerationOptions","usernameGenerationOptions","setUsernameGenerationOptions","getGeneratorOptions","generatorOptions","setGeneratorOptions","getProtectedPin","protectedPin","setProtectedPin","getProviders","getRefreshToken","setRefreshToken","getRememberedEmail","rememberedEmail","setRememberedEmail","getSecurityStamp","setSecurityStamp","getSettings","setSettings","getSsoCodeVerifier","ssoCodeVerifier","setSsoCodeVerifier","getSsoOrgIdentifier","ssoOrganizationIdentifier","setSsoOrganizationIdentifier","getSsoState","ssoState","setSsoState","getUsesKeyConnector","setUsesKeyConnector","vaultTimeout","setVaultTimeout","getVaultTimeoutAction","accountVaultTimeoutAction","globalVaultTimeoutAction","setVaultTimeoutAction","getStateVersion","setStateVersion","getWindow","setWindow","setServerConfig","getServerConfig","useMemory","storageLocation","getGlobalsFromMemory","useDisk","getGlobalsFromDisk","saveGlobalsToMemory","saveGlobalsToDisk","useSecureStorage","getAccountFromMemory","getUserIdFromMemory","cachedAccount","htmlStorageLocation","Local","Memory","Both","Disk","saveAccountToMemory","saveAccountToDisk","deepClone","JSON","parse","stringify","scaffoldNewAccountLocalStorage","scaffoldNewAccountSessionStorage","scaffoldNewAccountMemoryStorage","storedAccount","pruneInMemoryAccounts","requestedOptions","defaultOptions","Session","getActiveUserIdFromStorage","removeAccountFromLocalStorage","resetAccount","removeAccountFromSessionStorage","removeAccountFromSecureStorage","persistentAccountInformation","timeoutAction","deserializer","stateUpdater","updatedState","fromEntries","entries","withPrototypeForArrayMembers","memberConstructor","memberConverter","originalResult","String","prototype","getOwnPropertyDescriptors","withPrototypeForObjectValues","valuesConstructor","valuesConverter","decoded","setTokens","clientIdClientSecret","setToken","setClientId","setClientSecret","getClientId","getClientSecret","getToken","clearTwoFactorToken","clearToken","getTokenExpirationDate","exp","setUTCSeconds","tokenSecondsRemaining","offsetSeconds","msRemaining","round","tokenNeedsRefresh","minutes","email_verified","getName","getIssuer","iss","getIsExternal","amr","v1Keys","autoConfirmFingerprints","enableBiometric","enableGravatars","encOrgKeys","encPrivate","history","lastActive","ssoIdentifier","stamp","usesConnector","v1KeyPrefixes","currentStateVersion","getCurrentStateVersion","Latest","migrateStateFrom1To2","Two","migrateStateFrom2To3","Three","migrateStateFrom3To4","Four","getAuthenticatedAccounts","migratedAccount","migrateAccountFrom4To5","setCurrentStateVersion","Five","migrateAccountFrom5To6","Six","clearV1Keys","clearingUserId","keyPrefix","defaultAccount","accountSettings","cryptoMasterKeyAuto","cryptoMasterKeyB64","cryptoMasterKeyBiometric","legacyEtmKey","authenticationStatus","decodedToken","authenticatedUserIds","encryptedOrgKeys","newVersion","OrganizationData","SyncService","sendService","providerService","folderApiService","logoutCallback","syncInProgress","_sync","Subject","sync$","forceSync","allowThrowOnError","syncStarted","syncCompleted","needsSync","needsSyncing","refreshIdentityToken","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","userNeedsMigration","setConvertAccountRequired","removeConvertAccountRequired","eqDomains","global","B32Chars","SteamChars","TwoFactorProviders","Authenticator","priority","Yubikey","Duo","OrganizationDuo","Email","WebAuthn","VerifyOTPRequest","OTP","SecretVerificationRequest","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","AuthGuard","routerState","authStatus","getAuthStatus","LoggedOut","Locked","promptBiometric","getConvertAccountRequired","LockGuard","homepage","loginpage","UnauthGuard","subscribers","messageCallback","unsubscribe","modalRef","showPassword","togglePassword","submit","close","modalService","component","protectedFields","showPasswordPrompt","open","allowMultipleModals","onClosedPromise","JslibServicesModule","useFactory","translationLocale","deps","navigator","language","useClass","makeAndGetAppId","getAnonymousAppId","existingId","guid","pushNotificationSubject","logInStrategy","strategy","clearState","saveState","logOut","callback","authingWithApiKey","authingWithSso","authingWithPassword","Unlocked","preloginResponse","postPrelogin","getPushNotifcationObs$","startSessionTimeout","clearSessionTimeout","sessionTimeout","P","injector","_folders","_folderViews","folders$","folderViews$","unlocked","updateObservables","getAllDecryptedFromState","values","decryptFolders","updates","cId","foldersMap","decryptFolderPromises","decryptedFolders","noneFolder","useExisting","postFolder","putFolder","deleteFolder","deleteAccount","accountApiService","userVerificationService","verification","verificationRequest","buildRequest","collection","decCollections","decryptedCollections","collectionCopy","getNested","urlsSubject","scimUrl","setUrlsFromStorage","hasBaseUrl","notificationsUrl","getWebVaultUrl","webVaultUrl","getSendUrl","getIconsUrl","iconsUrl","getApiUrl","apiUrl","getIdentityUrl","identityUrl","getEventsUrl","eventsUrl","getScimUrl","envUrls","setUrls","formatUrl","scim","getUrls","isCloud","getCode","period","digits","keyB32","isOtpAuth","isSteamAuth","digitParams","periodParam","algParam","epoch","timeHex","leftPad","decToHex","floor","timeBytes","keyBytes","b32ToBytes","sign","offset","binary","otp","fullCode","trunc","getTimeInterval","l","b32ToHex","cleanedInput","bits","hex","byteIndex","charAt","chunk","signature","hmac","generatePassword","generatePassphrase","sanitizePasswordLength","positions","shuffleArray","allCharSet","lowercaseCharSet","uppercaseCharSet","numberCharSet","specialCharSet","positionChars","randomCharIndex","listLength","wordList","wordIndex","appendRandomNumberToRandomWord","getOptions","enforcedOptions","enforcePasswordGeneratorPoliciesOnOptions","enforcedPolicyOptions","getPasswordGeneratorPolicyOptions","currentPolicy","useUpper","useLower","minNumbers","saveOptions","getHistory","decryptHistory","addHistory","currentHistory","matchesPrevious","unshift","pop","newHistory","encryptHistory","passwordStrength","userInputs","globalUserInputs","finalUserInputs","normalizeOptions","str","num","item","array","j","forGeneration","minUppercaseCalc","minLowercaseCalc","minNumberCalc","minSpecialCalc","generateUsername","generateCatchall","generateSubaddress","generateForwarded","generateWord","word","zeroPad","subaddressEmail","atIndex","emailBeginning","emailEnding","subaddressString","randomString","catchallDomain","startString","forwarder","forwarderOptions","forwardedSimpleLoginApiKey","forwardedAnonAddyApiToken","forwardedFirefoxApiToken","forwardedFastmailApiToken","forwardedDuckDuckGoToken","charSet","width","customUserAgent","isWebClient","isDesktopClient","IEBrowser","ChromeBrowser","EdgeBrowser","FirefoxBrowser","OperaBrowser","SafariBrowser","UnknownBrowser","VivaldiBrowser","WindowsDesktop","MacOsDesktop","LinuxDesktop","Accept","identityToken","getClientType","qsStringify","getCredentials","responseJson","isJsonResponse","TwoFactorProviders2","HCaptcha_SiteKey","doAuthRefresh","postAuthRequest","getAuthResponse","path","getProfile","getUserSubscription","getTaxInfo","putProfile","putTaxInfo","isDev","postEmailToken","postEmail","postPassword","setPassword","postSetKeyConnectorKey","postSecurityStamp","postPasswordHint","postRegister","postPremium","postIapCheck","postReinstatePremium","postCancelPremium","postAccountStorage","postAccountPayment","postAccountLicense","postAccountKey","postAccountVerifyEmail","postAccountVerifyEmailToken","postAccountVerifyPassword","postAccountRecoverDelete","postAccountRecoverDeleteToken","postAccountKdf","deleteSsoUser","getSsoUserIdentifier","postUserApiKey","postUserRotateApiKey","putUpdateTempPassword","postConvertToKeyConnector","getUserBillingHistory","getUserBillingPayment","postSendAccess","getSendFileDownloadData","getSends","postSend","postFileTypeSend","renewSendFileUploadUrl","fileId","postSendFile","postSendFileLegacy","putSend","putSendRemovePassword","deleteSend","getCipher","getCipherAdmin","postCipherAdmin","putCipherAdmin","deleteCipherAdmin","deleteManyCiphersAdmin","putCipherCollectionsAdmin","postPurgeCiphers","postImportCiphers","postImportOrganizationCiphers","putDeleteCipherAdmin","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","getPlans","postPublicImportDirectory","getTaxRates","getSettingsDomains","putSettingsDomains","getTwoFactorProviders","getTwoFactorOrganizationProviders","getTwoFactorAuthenticator","getTwoFactorEmail","getTwoFactorDuo","getTwoFactorOrganizationDuo","getTwoFactorYubiKey","getTwoFactorWebAuthn","getTwoFactorWebAuthnChallenge","getTwoFactorRecover","putTwoFactorAuthenticator","putTwoFactorEmail","putTwoFactorDuo","putTwoFactorOrganizationDuo","putTwoFactorYubiKey","putTwoFactorWebAuthn","deviceResponse","rawId","btoa","getClientExtensionResults","AttestationObject","attestationObject","clientDataJson","clientDataJSON","deleteTwoFactorWebAuthn","putTwoFactorDisable","putTwoFactorOrganizationDisable","postTwoFactorRecover","postTwoFactorEmailSetup","postTwoFactorEmail","getDeviceVerificationSettings","putDeviceVerificationSettings","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","postProviderCreateOrganization","deleteProviderOrganization","getEvents","end","addEventParameters","getEventsCipher","getEventsOrganization","getEventsOrganizationUser","getEventsProvider","getEventsProviderUser","postEventsCollect","authHeader","getActiveBearerToken","getUserPublicKey","postBitPayInvoice","postSetupPayment","getUserKeyFromKeyConnector","handleError","postUserKeyToKeyConnector","getKeyConnectorAlive","getOrganizationExport","getApplicationVersion","preValidateSso","encodeURIComponent","postCreateSponsorship","sponsoredOrgId","isSelfHost","getSponsorshipSyncStatus","deleteRevokeSponsorship","sponsoringOrganizationId","deleteRemoveSponsorship","sponsoringOrgId","postPreValidateSponsorshipToken","sponsorshipToken","postRedeemSponsorship","postResendSponsorshipOffer","doRefreshToken","doApiTokenRefresh","deviceRequest","authed","hasResponse","alterHeaders","requestUrl","URL","href","responseType","responseIsJson","tokenError","isTextResponse","Message","typeHeader","azureFileUploadService","bitwardenFileUploadService","uploadSendFile","uploadData","Direct","Azure","_settings","setVaultTimeoutOptions","action","currentAction","isPinLockSet","isBiometricLockSet","policyAppliesToUser","policy","vaultTimeoutSettingsService","lockedCallback","loggedOutCallback","inited","checkOnInterval","startCheck","checkVaultTimeout","setInterval","isViewOpen","shouldLock","executeTimeoutAction","lock","pinSet","vaultTimeoutSeconds","getExport","format","getEncryptedExport","getDecryptedExport","getPasswordProtectedExport","clearText","encKeyValidation","encText","jsonDoc","passwordProtected","encKeyValidation_DO_NOT_EDIT","getOrganizationEncryptedExport","getOrganizationDecryptedExport","getEventExport","getFileName","extension","getFullYear","padNumber","getMonth","getDate","getHours","getMinutes","getSeconds","decFolders","exportCiphers","buildCommonCipher","exportData","exportPromises","decCol","decCipher","collectionsMap","orgKey","padCharacter","numString","login_uri","login_username","login_password","login_totp","connected","inactive","reconnectTimer","signalrConnection","off","accessTokenFactory","processNotification","onclose","reconnect","isAuthedAndUnlocked","updateConnection","sync","reconnectFromActivity","disconnectFromInactivity","isAuthenticated","payloadUserId","UserId","myUserId","random","win","crypto","subtle","algorithm","wcLen","passwordBuf","toBuf","pbkdf2Params","toWebCryptoAlgorithm","impKey","importKey","deriveBits","ikm","outputByteSize","hkdfParams","prk","hashLen","infoBuf","infoArr","runningOkmLength","previousT","n","okm","md","valueBytes","toByteString","update","digest","valueBuf","signingAlgorithm","mac1","mac2","arr1","arr2","hmacFast","bytes","getBytes","compareFast","rand","Uint32Array","putInt32","aesEncrypt","iv","aesDecryptFastParameters","mac","meta","encKeyByteString","macKeyByteString","encKeyB64","macData","macKeyB64","aesDecryptFast","parameters","dataBuffer","decipher","finish","output","aesDecrypt","rsaParams","impPrivateKey","jwkPrivateKey","exportKey","jwkPublicKeyParams","kty","ext","impPublicKey","modulusLength","publicExponent","generateKey","arr","getRandomValues","buf","logMacFailures","plainBuf","encObj","macLen","resolveLegacyKey","fastParams","computedMac","logMacFailed","encThing","msg","uploadEvents","collect","eventType","uploadImmediately","orgIds","req","clearEvents","decryptedPolicies","diskPolicies","getMasterPasswordPolicyOptions","minComplexity","requireUpper","requireLower","requireNumbers","requireSpecial","evaluateMasterPassword","newPassword","toLocaleUpperCase","getResetPasswordPolicyOptions","resetPasswordPolicyOptions","mapPoliciesFromToken","policiesResponse","policyType","policyFilter","filteredPolicies","policySet","Accepted","isExcemptFromPolicies","organization","getPolicy","getPolicies","getPoliciesByToken","getPoliciesByInvitedUser","getPolicyForOrganization","getMasterPasswordPoliciesForInvitedUsers","putPolicy","fileData","passwordHash","encryptFileData","parseFile","decSends","sendData","legacyServerSendFileUpload","removePasswordWithServer","loggedInUsingSso","requiredByOrganization","getManagingOrganization","userIsNotUsingKeyConnector","migrateUser","keyConnectorRequest","handleKeyConnectorError","userKeyResponse","keyArr","pubKey","privKey","setPasswordRequest","userVerificationApiService","requestClass","alreadyHashed","validateInput","secret","verifyUser","postAccountVerifyOTP","requestOTP","postAccountRequestOTP","getByIdentifier","canManageSponsorships","hasOrganizations","selectedTwoFactorProviderType","getSupportedProviders","twoFactorProvidersData","supportsDuo","supportsWebAuthn","getDefaultProvider","webAuthnSupported","providerType","providerPriority","_value","setSelectedProvider","clearProviders","getFormValidationErrors","controls","errors","control","controlErrors","keyError","controlName","errorName","getBilling","getSubscription","getLicense","getAutoEnrollStatus","createLicense","updatePayment","upgrade","updateSubscription","updateSeats","updateStorage","verifyBank","cancel","reinstate","leave","updateLicense","importDirectory","getOrCreateApiKey","getApiKeyInformation","organizationApiKeyType","rotateApiKey","updateTaxInfo","getKeys","updateKeys","getSso","updateSso","configApiService","_serverConfig","serverConfig$","switchMap","timer","E","buildServerConfig","fetchServerConfig","MemoryStorageService","store","BroadcasterMessagingService","broadcasterService","subscriber","arg","command","getDefaultDateFilters","setDate","toDateTimeLocalString","formatDateFilters","filterStart","filterEnd","getEventInfo","ev","EventOptions","appInfo","getAppInfo","getEventMessage","humanReadableMsg","formatCipherId","getShortId","formatCollectionId","formatGroupId","formatOrgUserId","formatPolicyId","p1","formatProviderUserId","formatProviderOrganizationId","Android","iOS","UWP","ChromeExtension","FirefoxExtension","OperaExtension","EdgeExtension","VivaldiExtension","SafariExtension","shortId","cipherInfo","makeAnchor","setAttribute","outerHTML","createElement","innerHTML","pad","norm","abs","HtmlStorageService","localStorage","getItem","sessionStorage","setItem","removeItem","ContainerService","attachToGlobal","bitwardenContainerService","getEncryptService","InitService","notificationsService","vaultTimeoutService","eventLoggingService","themingService","getBaseUrl","location","ModalService","componentFactoryResolver","applicationRef","el","modalOpen","setupHandlers","onCreated","first","modals","querySelectorAll","modal","show","shown","focus","closed","onClose","PasswordRepromptComponent","PolicyListService","addPolicies","RouterService","activatedRoute","titleService","previousUrl","undefined","currentUrl","child","firstChild","titleId","snapshot","rawTitle","updateUrl","doNotSaveUrl","newTitle","setTitle","setPreviousUrl","getPreviousUrl","AccountSettings","Account","StateService","getRememberEmail","rememberEmail","setRememberEmail","ClientType","FileDownloadBuilder","_request","blobOptions","fileType","blobData","downloadMethod","fileNameLower","endsWith","WebFileDownloadService","download","isSafari","createObjectURL","style","position","appendChild","click","removeChild","WebPlatformUtilsService","browserCache","userAgent","chrome","Web","isFirefox","isChrome","isEdge","isOpera","isVivaldi","isMacAppStore","launchUri","sameWindow","rel","PublicKeyCredential","showDialog","confirmText","cancelText","bodyIsHtml","iconClasses","bootstrapModal","querySelector","removeAttribute","iconHtmlStr","confirmed","heightAuto","buttonsStyling","icon","iconHtml","html","titleText","showCancelButton","cancelButtonText","showConfirmButton","confirmButtonText","copyToClipboard","doc","clipboardData","setData","queryCommandSupported","textarea","textContent","copyEl","contains","select","execCommand","debug","console","warn","readFromClipboard","supportsBiometric","authenticateBiometric","CoreModule","parentModule","initService","multi","systemLanguage","localesDirectory","getLocalesJson","_locale","ReplaySubject","supportedTranslationLocales","localeNames","defaultMessages","localeMessages","Intl","Collator","numeric","sensitivity","loadMessages","p2","p3","translate","messagesObj","formattedLocale","locales","placeholders","placeProp","content","replaceToken","replaceContent","filePath","localesResult","migrationStateFrom1To2","PolicyRequest","BasePolicy","display","BasePolicyComponent","ngOnInit","setValue","policyResponse","loadData","patchValue","buildRequestData","policiesEnabledMap","DisableSendPolicy","DisableSendPolicyComponent","MasterPasswordPolicy","MasterPasswordPolicyComponent","formBuilder","group","showKeyConnectorInfo","passwordScores","PasswordGeneratorPolicy","PasswordGeneratorPolicyComponent","defaultTypes","PersonalOwnershipPolicy","PersonalOwnershipPolicyComponent","RequireSsoPolicy","RequireSsoPolicyComponent","singleOrgEnabled","ResetPasswordPolicy","ResetPasswordPolicyComponent","SendOptionsPolicy","SendOptionsPolicyComponent","disableHideEmail","SingleOrgPolicy","SingleOrgPolicyComponent","TwoFactorAuthenticationPolicy","TwoFactorAuthenticationPolicyComponent","BroadcasterSubscriptionId","AppComponent","passwordGenerationService","ngZone","sanitizer","routerService","eventService","policyListService","lastActivity","idleTimer","isIdle","destroy$","takeUntil","lang","runOutsideAngular","onmousemove","recordActivity","onmousedown","ontouchstart","onclick","onscroll","onkeypress","run","navigate","setFullWidth","ngOnDestroy","complete","idleStateChanged","sanitize","enableHtml","trustedHtml","timeOut","getFlags","envFlags","flag","flags","EmergencyAccessAcceptRequest","BaseAcceptComponent","loading","requiredParameters","failedShortMessage","failedMessage","qParams","errorMessage","authedHandler","unauthedHandler","AcceptEmergencyComponent","actionPromise","OrganizationUserAcceptRequest","AcceptOrganizationComponent","policyApiService","organizationApiService","prepareAcceptRequest","orgName","performResetPasswordAutoEnroll","encryptedKey","policyList","PasswordHintRequest","HintComponent","successRoute","formPromise","onSuccessfulSubmit","pinLock","webVaultHostname","invalidPinAttempts","load","handlePinRequiredUnlock","handleMasterPasswordRequiredUnlock","unlockBiometric","biometricLock","doContinue","input","getElementById","isStable","onStable","take","doUnlockWithPin","failed","setKeyAndContinue","doUnlockWithMasterPassword","passwordValid","decPin","hideInput","vaultUrl","LockComponent","navigateByUrl","CaptchaIFrame","iframeId","successCallback","errorCallback","infoCallback","parseFunction","parseMessage","bind","connectorLink","sendMessage","iframe","src","contentWindow","postMessage","base64Encode","fromCharCode","cleanup","removeEventListener","createParams","URLSearchParams","parent","initComponent","addEventListener","validMessage","origin","parsedMessage","height","AuthRequestType","CaptchaProtectedComponent","setupCaptcha","captcha","showCaptcha","handleCaptchaRequired","PasswordLogInCredentials","SsoLogInCredentials","PasswordlessLogInCredentials","PasswordlessCreateAuthRequest","fingerprintPhrase","startPasswordlessLogin","LoginWithDeviceComponent","anonymousHubService","showResendNotification","twoFactorRoute","navigation","getCurrentNavigation","extras","confirmResponse","buildAuthRequest","reqResponse","passwordlessRequest","requestId","buildLoginCredntials","onSuccessfulLoginNavigate","authRequestKeyPair","fingerprint","AuthenticateAndUnlock","decMasterPasswordHash","formValidationErrorService","selfHosted","formGroup","forcePasswordResetRoute","alwaysRememberEmail","selfHostedDomain","markAllAsTouched","invalid","errorText","getErrorToastMessage","onSuccessfulLoginTwoFactorNavigate","onSuccessfulLoginForceResetNavigate","launchSsoBrowser","ssoRedirectUri","passwordOptions","numbers","codeVerifierHash","codeChallenge","webUrl","shift","errorTag","focusInput","defaultIcon","danger","defaultI18n","CalloutComponent","useAlertRole","calloutClass","headerClass","LoginComponent","showResetPasswordAutoEnrollWarning","showPasswordless","goAfterLogIn","invite","resetPasswordPolicy","enforcedPasswordPolicyOptions","strengthResult","getPasswordStrengthUserInput","masterPasswordScore","score","policiesData","clearValidators","updateValueAndValidity","valid","userInput","atPosition","DeleteRecoverRequest","RecoverDeleteComponent","TwoFactorRecoveryRequest","RecoverTwoFactorComponent","recoveryCode","InputsFieldMatch","matchTo","inputsMatchError","inputsDoesntMatchError","fieldMatchTo","fieldCtrl","fieldMatchToCtrl","setErrors","RegisterRequest","referenceData","isInTrialFlow","createdAccount","showTerms","showErrorSummary","confirmMasterPassword","hint","validateInputsDoesntMatch","acceptPolicies","acceptPoliciesValidation","validator","validateFormInputsMatch","accountCreated","registerResponse","registerAccount","buildRegisterRequest","successful","captchaRequired","emit","getStrengthResult","passwordStrengthResult","getPasswordScoreText","color","required","validateRegistration","hasError","orgInvite","loginResponse","ReferenceEventRequest","PasswordStrengthComponent","showText","passwordScoreColor","scoreWidth","updatePasswordStrength","masterPasswordScoreColor","masterPasswordScoreText","ngOnChanges","masterPasswordStrengthTimeout","setPasswordScoreText","BitErrorSummary","errorCount","getErrorCount","errorString","form","acc","RegisterFormComponent","referenceDataValue","queryParamEmail","RegisterComponent","showCreateOrgMessage","layout","flow","reference","cookie","continuing","leaving","convert","RemovePasswordComponent","OrganizationUserResetPasswordEnrollmentRequest","SetPasswordRequest","strongPassword","setupSubmitActions","performSubmitActions","masterPasswordRetype","syncLoading","resetPasswordAutoEnroll","onSetPasswordSuccess","userEncKey","resetRequest","onSuccessfulChangePassword","confirmField","SetPasswordComponent","loggingIn","changePasswordRoute","checkState","getOrgIdentifierFromState","returnUri","includeUserIdentifier","initiateSsoFormPromise","authorizeUrl","buildAuthorizeUrl","userIdentifier","orgIdFromState","onSuccessfulLoginChangePasswordNavigate","stateSplit","checkStateSplit","PlanType","ProductType","SsoComponent","storedIdentifier","VerticalStep","subLabel","applyBorder","VerticalStepContentComponent","onSelectStep","selected","selectStep","selectStepByIndex","VerticalStepperComponent","activeClass","isNextButtonHidden","steps","selectedIndex","isStepDisabled","_","completed","changedBusinessOwned","OrganizationInformationComponent","nameOnly","createOrganization","isProvider","acceptingSponsorship","LogoForbesComponent","LogoUSNewsComponent","EnterpriseContentComponent","TeamsContentComponent","ConfirmationDetailsComponent","PaymentMethodType","OrganizationCreateRequest","OrganizationKeysRequest","OrganizationUpgradeRequest","ProviderOrganizationCreateRequest","clientOwnerEmail","organizationCreateRequest","changeMethod","bank","lightInputColor","lightInputPlaceholderColor","darkInputColor","darkInputPlaceholderColor","PaymentComponent","showMethods","showOptions","Card","hideBank","hidePaypal","hideCredit","trialFlow","routing_number","account_number","account_holder_name","account_holder_type","currency","btInstance","stripe","stripeElements","stripeCardNumberElement","stripeCardExpiryElement","stripeCardCvcElement","stripeScript","async","Stripe","elements","setStripeElement","btScript","StripeElementStyle","fontFamily","fontSize","fontSmoothing","StripeElementClasses","empty","PayPal","BankAccount","Credit","head","btStylesheet","braintree","dropin","authorization","container","paymentOptionPriority","paypal","buttonStyle","label","shape","tagline","createErr","instance","createPaymentToken","requestPaymentMethod","nonce","handleCardSetup","setupIntent","payment_method","createToken","handleStripeCardPayment","handleCardPayment","paymentIntent","classes","placeholder","mount","TaxInfoUpdateRequest","OrganizationTaxInfoUpdateRequest","taxInfo","TaxInfoComponent","onCountryChanged","includeTaxId","pristine","taxRates","taxRate","localTaxRate","getTaxInfoRequest","submitTaxInfo","hasChanged","changeCountry","changedProduct","changedCountry","changedOwnedBusiness","OrganizationPlansComponent","showFree","showCancel","Free","onSuccess","onCanceled","onTrialBillingSuccess","productTypes","singleOrgPolicyBlock","discount","businessOwned","premiumAccessAddon","additionalStorage","additionalSeats","plans","Enterprise","Teams","Families","addValidators","selectedPlan","selectedPlanInterval","selectableProducts","validPlans","Custom","familyPlan","FamiliesAnnually","selectablePlans","additionalStoragePriceMonthly","seatPriceMonthly","additionalStorageTotal","seatTotal","subtotal","subTotal","freeTrial","taxCharges","taxComponent","paymentDesc","TeamsAnnually","paymentComponent","userHasBlockingSingleOrgPolicy","doSubmit","collectionCt","createSelfHosted","createCloudHosted","updateOrganization","subLabelText","billingSubLabelText","additionalStorageGb","billingAddressCountry","billingAddressPostalCode","orgShareKey","collectionName","tokenResult","paymentToken","taxIdNumber","billingAddressLine1","billingAddressLine2","billingAddressCity","billingAddressState","providerRequest","files","price","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","EnterpriseAnnually","previouslySelectedIndex","verticalStepper","previous","WebAuthnIFrame","webAuthnNewTab","btnText","allow","TwoFactorEmailRequest","webAuthnReady","selectedProviderType","webAuthn","twoFactorEmail","loginRoute","webAuthnAllow","authing","needsLock","cleanupWebAuthn","providerData","authWebAuthn","Host","sig_request","Signature","submit_callback","sig","sendEmail","doToast","emailPromise","Window","onProviderSelected","onRecoverSelected","choose","recover","TwoFactorOptionsComponent","TwoFactorComponent","anotherMethod","openViewRef","twoFactorOptionsModal","comp","PasswordRequest","currentMasterPassword","newMasterPasswordHash","UpdatePasswordComponent","OrganizationUserResetPasswordRequest","UpdateTempPasswordRequest","newPasswordHash","newEncKey","UpdateTempPasswordComponent","VerifyEmailRequest","VerifyEmailTokenComponent","VerifyDeleteRecoverRequest","VerifyRecoverDeleteComponent","HomeGuard","FrontendLayoutComponent","FooterComponent","AvatarComponent","charCount","textColor","fontWeight","dynamic","circle","chars","upperData","getFirstLetters","unicodeSafeSubstring","charObj","getCharText","svg","getSvg","svgHtml","unescape","count","svgTag","backgroundColor","character","textTag","characters","StopPropDirective","onClick","$event","stopPropagation","MenuItemDirective","elementRef","role","tabIndex","nativeElement","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","templateRef","attach","closedEventsSub","getClosedEvents","keyDownEventsSub","keydownEvents","onKeydown","detachments","escKey","backdrop","backdropClick","menuClosed","mergeWith","dispose","MenuDividerComponent","NavbarComponent","buildOrganizations","UserLayoutComponent","OrganizationSwitcherComponent","activeOrganization","loaded","OrganizationLayoutComponent","showManageTab","showToolsTab","showSettingsTab","toolsRoute","manageRoute","SelectionReadOnlyRequest","selectAll","check","CollectionAddEditComponent","onSavedCollection","onDeletedCollection","editMode","accessGroups","groupsResponse","checked","deletePromise","styles","primary","secondary","hoverStyles","BadgeDirective","badgeType","hasHoverEffects","nodeName","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","EventView","BaseEventsComponent","exportService","fileDownloadService","dirtyDates","defaultDates","exportEvents","appApiPromiseUnfulfilled","dates","parseDates","exportPromise","export","loadEvents","clearExisting","loadAndParseEvents","refreshPromise","morePromise","startDate","endDate","requestEvents","eventInfo","getUserName","exportFileName","EventsComponent","userNamePipe","orgUsersUserIdMap","GroupRequest","GroupAddEditComponent","onSavedGroup","onDeletedGroup","access","loadCollections","GroupsComponent","pagedGroupsCount","pagedGroups","removeGroup","ManageComponent","OrganizationUserBulkRequest","OrganizationUserConfirmRequest","UserConfirmComponent","onConfirmedUser","dontAskAgain","BasePeopleComponent","validationService","searchPipe","statusMap","pagedUsers","activeUsers","pagedUsersCount","allCount","invitedCount","userStatusType","Invited","acceptedCount","confirmedCount","revokedCount","Revoked","showConfirmUsers","showBulkConfirmUsers","getUsers","checkUser","filteredUsers","selectCount","removeUserConfirmationDialog","deleteUser","removeUser","showError","revoke","revokeWarningMessage","revokeUser","restoreUser","reinvite","reinviteUser","confirm","confirmUser","mapIndex","updateUser","publicKeyResponse","autoConfirm","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","EntityEventsComponent","showUser","orgUsersIdMap","ResetPasswordComponent","onPasswordReset","loggedOutWarningName","passwordStrengthComponent","copy","orgSymKey","decPrivateKey","OrganizationUserInviteRequest","emails","OrganizationUserUpdateRequest","NestedCheckboxComponent","onSavedUser","onDeletedUser","parentIndeterminate","parentChecked","checkboxes","pascalize","handleDependentPermissions","UserAddEditComponent","onRevokedUser","onRestoredUser","isRevoked","User","showCustom","manageAllCollectionsCheckboxes","manageAssignedCollectionsCheckboxes","customUserTypeSelected","setRequestPermissions","clearPermissions","OrganizationUserUpdateGroupsRequest","groupIds","UserGroupsComponent","userGroups","ug","bulkConfirm","resetPassword","PeopleComponent","userType","accessEvents","canResetPassword","orgUseResetPassword","orgHasKeys","orgResetPasswordPolicyEnabled","callingUserType","viewEvents","allowResetPassword","orgUser","callingUserHasPermission","showEnrolledStatus","groupsModalRef","bulkRemove","bulkRemoveModalRef","bulkRevoke","bulkRevokeOrRestore","bulkRestore","bulkReinvite","showBulkStatus","bulkConfirmModalRef","eventsModalRef","resetPasswordModalRef","warningMessage","successfullMessage","childComponent","bulkStatusModalRef","onShown","keyedErrors","keyedFilteredUsers","PolicyEditComponent","cdr","onSavedPolicy","ngAfterViewInit","factory","resolveComponentFactory","policyComponent","policyFormRef","createComponent","detectChanges","Enabled","PoliciesComponent","policyIdFromEvents","orgPolicy","orgPolicies","op","editModalRef","OrganizationUpdateRequest","ApiKeyComponent","postKey","PurgeVaultComponent","CountBasedLocalizationKey","singular","plural","OrganizationContentSummaryItem","localizationKeyOptions","localizationKey","OrganizationContentSummary","totalItemCount","itemCountByType","DeleteOrganizationComponent","deleteOrganizationRequestType","organizationContentSummary","buildOrganizationContentSummary","organizationItems","cipherType","getOrganizationItemCountByType","getOrganizationItemLocalizationKeysByType","viewApiKey","AccountComponent","canUseApi","taxFormPromise","deleteOrganization","deleteModalRef","purgeVault","purgeModalRef","apiKeyModalRef","grantType","apiKeyTitle","apiKeyWarning","apiKeyDescription","rotateApiKeyModalRef","isRotation","TransactionType","VerifyBankRequest","BitPayInvoiceRequest","AddCreditComponent","onAdded","ppLoading","payPalConfig","ppButtonFormAction","ppButtonBusinessId","creditAmount","ppButtonCustomField","subject","returnUrl","ppButtonFormRef","BitPay","credit","creditAmountNumber","bitPayUrl","formatAmount","floatAmount","parseFloat","toFixed","PaymentRequest","AdjustPaymentComponent","onAdjusted","taxInfoComponent","addCredit","closeAddCredit","changePayment","closePayment","OrganizationBillingComponent","firstLoaded","showAdjustPayment","showAddCredit","transactionType","billing","amount1","verifyAmount1","amount2","verifyAmount2","verifyBankPromise","paymentSourceInApp","isCreditBalance","creditOrBalance","AppleInApp","GoogleInApp","OrganizationApiKeyType","OrganizationConnectionType","BillingSyncConfigApi","billingSyncKey","BillingSyncConfigRequest","OrganizationConnectionRequest","BillingSyncKeyComponent","CloudBillingSync","existingConnectionId","setParentConnection","deleteConnection","OrganizationApiKeyRequest","Default","cancelRotate","rotateToken","BillingSyncApiKeyComponent","showRotateScreen","BillingSync","keyRevisionDate","hasBillingToken","syncStatus","dayDiff","date1","date2","diffTime","submitButtonText","showLastSyncText","showAwaitingSyncText","daysBetween","StorageRequest","AdjustStorageComponent","storageGbPrice","storageAdjustment","storageGbAdjustment","paymentFailed","relativeTo","adjustedStorageTotal","OrganizationSubscriptionUpdateRequest","seatAdjustment","AdjustSubscription","limitSubscription","newSeatCount","currentSeatCount","newMaxSeats","limitSubscriptionChanged","adjustedSeatTotal","maxSeatTotal","ChangePlanComponent","onChanged","defaultUpgradePlan","defaultUpgradeProduct","DownloadLicenseComponent","onDownloaded","licenseString","ImageSubscriptionHiddenComponent","UpdateLicenseComponent","onUpdated","updatePromise","changePlan","closeChangePlan","subscriptionAdjusted","removeSponsorship","adjustStorage","closeStorage","downloadLicense","manageBillingSync","closeDownloadLicense","closeUpdateLicense","manageBillingSyncSelfHosted","OrganizationSubscriptionComponent","adjustSeatsAdd","showAdjustSeats","showAdjustSeatAutoscale","adjustStorageAdd","showAdjustStorage","showUpdateLicense","showBillingSyncKey","showDownloadLicense","showChangePlan","userOrg","apiKeyResponse","hasBillingSyncToken","existingBillingSyncConnection","reinstatePromise","cancelPromise","changed","setupBillingSyncModalRef","onClosed","updated","removeSponsorshipPromise","billingSyncKeyRef","billingSyncKeyViewContainerRef","connection","isExpired","subscriptionMarkedForCancel","nextInvoice","storagePercentage","storageProgressWidth","billingInterval","canAdjustSeats","isSponsoredSubscription","canDownloadLicense","canManageBillingSync","EnterpriseMonthly","EnterpriseAnnually2019","EnterpriseMonthly2019","subscriptionDesc","FamiliesAnnually2019","showChangePlanButton","billingSyncSetUp","SettingsComponent","access2fa","showBilling","UpdateTwoFactorDuoRequest","TwoFactorProviderRequest","TwoFactorBaseComponent","twoFactorProviderType","auth","authResponse","hashedSecret","verificationType","enable","enableFunction","buildRequestModel","TwoFactorVerifyComponent","onAuthed","TwoFactorDuoComponent","processResponse","ikey","skey","DeviceVerificationRequest","UpdateTwoFactorAuthenticatorRequest","TwoFactorAuthenticatorComponent","qrScript","QRious","element","UpdateTwoFactorEmailRequest","TwoFactorEmailComponent","sentEmail","print","TwoFactorRecoveryComponent","w","write","onafterprint","formatString","UpdateTwoFactorWebAuthnDeleteRequest","UpdateTwoFactorWebAuthnRequest","readKey","TwoFactorWebAuthnComponent","keyIdAvailable","keysConfiguredCount","webAuthnResponse","removePromise","challengePromise","readDevice","webAuthnChallenge","resetWebAuthn","webAuthnListening","webAuthnError","listening","configured","UpdateTwoFactorYubioOtpRequest","TwoFactorYubiKeyComponent","disablePromise","existingKey","padRight","NotPremiumDirective","viewContainer","createEmbeddedView","premiumRequired","PremiumBadgeComponent","manage","showPolicyWarning","canAccessPremium","deviceVerificationSettings","enableDeviceVerification","filterProvider","evaluatePolicies","openModal","authenticatorModalRef","updateStatus","yubikeyModalRef","duoModalRef","emailModalRef","webAuthnModalRef","recoveryModalRef","TwoFactorSetupComponent","duoComp","auditService","passwordRepromptService","cloneMode","onSavedCipher","onDeletedCipher","onRestoredCipher","onCancelled","onEditAttachments","onShareCipher","onEditCollections","onGeneratePassword","onGenerateUsername","showCardNumber","showCardCode","ownershipOptions","currentDate","allowPersonal","canUseReprompt","typeOptions","cardBrandOptions","cardExpMonthOptions","identityTitleOptions","uriMatchOptions","autofillOnPageLoadOptions","myEmail","writeableCollections","loadCipher","organizationChanged","previousCipherId","encryptCipher","saveCipher","addUri","removeUri","trackByFunction","share","editCollections","restorePromise","restoreCipher","toggleCardNumber","toggleCardCode","toggleUriOptions","loginUriMatchChanged","checkPassword","checkPasswordPromise","repromptChanged","addFieldType","linkedFieldOptions","fieldType","addFieldTypeOptions","addFieldLinkedTypeOption","changes","thisCipherType","setLinkedFieldOptions","firstChange","resetCipherLinkedFields","addField","newField","removeField","toggleFieldValue","showValue","drop","previousIndex","currentIndex","linkedFieldOption","i18nKey","TrueFalseValueDirective","renderer","trueValue","falseValue","propagateChange","onHostChange","writeValue","setProperty","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","AddEditCustomFieldsComponent","upgradeOrganization","launch","viewHistory","toggleFavorite","totpService","showRevisionDate","hasPasswordHistory","viewingPasswordHistory","viewOnly","passwordRevisionDisplayDate","cleanUp","totpUpdateCode","totpTick","totpInterval","canLaunch","typeI18nKey","aType","showGetPremium","clearInterval","totpCode","half","totpCodeFormatted","allowOwnershipAssignment","intervalSeconds","totpSec","totpDash","totpLow","AddEditComponent","CipherReportComponent","requiresPaid","hasLoaded","setCiphers","selectCipher","repromptCipher","cipherAddEditModalRef","checkAccess","FallbackSrcDirective","onError","appFallbackSrc","cardIcons","RuPay","IconComponent","image","fallbackImage","imageEnabled","setLoginIcon","setCardIcon","hostnameUri","isWebsite","exposedPasswordMap","allCiphers","getAllCiphers","exposedPasswordCiphers","exposedCount","canManageCipher","ExposedPasswordsReportComponent","manageableCiphers","services","cipherDocs","load2fa","inactive2faCiphers","docs","service","serviceData","documentation","additionalDomain","InactiveTwoFactorReportComponent","ciphersWithPasswords","passwordUseMap","reusedPasswordCiphers","ReusedPasswordsReportComponent","ToolsComponent","unsecuredCiphers","UnsecuredWebsitesReportComponent","passwordStrengthMap","passwordStrengthCache","weakPasswordCiphers","isUserNameNotEmpty","getCacheKey","hasUserName","scoreKey","WeakPasswordsReportComponent","PipesModule","VaultService","calculateSearchBarLocalizationString","vaultFilter","selectedFolderId","selectedCollection","selectedOrganizationId","myVaultOnly","VaultSharedModule","VaultFilter","selectedFolder","refreshCollectionsAndFolders","resetFilter","selectedCollectionId","resetOrganization","buildFilter","cipherPassesFilter","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","EllipsisPipe","completeWords","ellipsis","OrganizationNameBadgeComponent","onOrganizationClicked","profileName","emitOnOrganizationClicked","GetOrgNameFromIdPipe","clone","checkCipher","showAddNew","onAttachmentsClicked","onShareClicked","onCollectionsClicked","onCloneClicked","onOrganzationBadgeClicked","pagedCiphers","userHasPremiumAccess","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","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","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","editCipherCollections","collectionsModalRef","editCipher","cloneCipher","replaceUrl","routes","VaultRoutingModule","VaultModule","children","pathMatch","redirectTo","loadChildren","m","OrganizationImportExportModule","OrganizationsRoutingModule","PlanSponsorshipType","AcceptFamilySponsorshipComponent","register","OrganizationSponsorshipRedeemRequest","FamiliesForEnterpriseSetupComponent","badToken","showNewOrganization","_selectedFamilyOrganizationId","organizationPlansComponent","onOrganizationCreateSuccess","existingFamilyOrganizations","selectedFamilyOrganizationId","planSponsorshipType","FamiliesForEnterprise","sponsoredOrganizationId","HasPremiumGuard","userHasPremium","ReportVariant","BreachReportComponent","checkedUsername","Icon","DynamicContentNotAllowedError","svgIcon","strings","ReportBreach","ReportExposedPasswords","ReportInactiveTwoFactor","ReportReusedPasswords","ReportUnsecuredWebsites","ReportWeakPasswords","ReportType","reports","ExposedPasswords","ReusedPasswords","WeakPasswords","UnsecuredWebsites","Inactive2fa","DataBreach","BitIconComponent","domSanitizer","innerHtml","bypassSecurityTrustHtml","ReportCardComponent","variant","requiresPremium","RequiresPremium","ReportListComponent","ReportsHomeComponent","reportRequiresPremium","ReportsLayoutComponent","ReportsRoutingModule","ReportsModule","SendAccessView","SendAccess","SendAccessRequest","toggleText","copyText","AccessComponent","sendType","passwordRequired","unavailable","sendText","downloadData","accessRequest","keyArray","sendAccess","disableSend","filteredSends","hasSearched","onSuccessfulLoad","applyTextSearch","removePassword","onSuccessfulRemovePassword","onSuccessfulDelete","link","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","formattedDeletionDate","miliseconds","formattedExpirationDate","safariDeletionTimePresetOptions","safariTimePresetOptions","DeletionDate","safariExpirationTimePresetOptions","ExpriationDate","nextWeek","setInitialFormValues","emitDates","valueChanges","onDeletionDatePresetSelect","clearExpiration","initialDeletionDate","toTimeString","initialExpirationDate","twentyFourHour","noon","midnight","ams","pms","hour","midnightOption","twelveHour","noonOption","amOption","pmOption","validTimes","EffluxDatesComponent","editSend","addSend","SendComponent","sendAddEditModalRef","DeauthorizeSessionsComponent","DeleteAccountComponent","accountService","deleteForm","EmailTokenRequest","EmailRequest","reset","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","View","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","vaultTimeoutPolicy","vaultTimeoutPolicyHours","vaultTimeoutPolicyMinutes","vaultTimeouts","validatorChange","onChange","current","onTouched","validate","policyError","minTimeoutError","registerOnValidatorChange","VaultTimeoutInputComponent","PreferencesComponent","localeOptions","themeOptions","enableFavicons","startingLocale","startingTheme","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","hasFamilySponsorshipAvailable","hideSubscription","notAllowedValueAsync","valueGetter","caseInsensitive","notAllowedValue","controlValue","resendEmail","SponsoringOrgRowComponent","sponsoringOrg","isSelfHosted","sponsorshipRemoved","statusMessage","statusClass","setStatus","revokeSponsorship","revokeSponsorshipPromise","doRevokeSponsorship","resendEmailPromise","isSentAwaitingSync","toDelete","validUntil","SponsoredFamiliesComponent","availableSponsorshipOrgs","activeSponsorshipOrgs","sponsorshipForm","selectedSponsorshipOrgId","validators","sponsorshipEmail","asyncValidators","updateOn","sponsoredEmail","friendlyName","resetForm","forceReload","allOrgs","sponsorshipEmailControl","anyActiveSponsorships","anyOrgsAvailable","PaymentMethodComponent","PremiumComponent","premiumPrice","finalizePremium","paymentResponse","SubscriptionComponent","hasPremium","subscriptionRoute","UserBillingHistoryComponent","UserSubscriptionComponent","SubscriptionRoutingModule","usernameGenerationService","comingFromAddEdit","onSelected","usernameOptions","avoidAmbiguous","usernameWebsite","passTypeOptions","usernameTypeOptions","desc","subaddressOptions","catchallOptions","forwardOptions","passwordOptionsResponse","websiteOption","regenerateWithoutButtonPress","regenerate","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","findIndex","historyModalRef","UpdateKeyComponent","makeRequest","onSavedFolder","onDeletedFolder","FolderAddEditComponent","onSharedCipher","cipherView","ShareComponent","VerifyEmailComponent","showVerifyEmail","showBrowserOutdated","showUpdateKey","showPremiumCallout","filterComponent","isShowingCards","shareCipher","shareModalRef","folderAddEditModalRef","updateKeyModalRef","favorites","flagName","ImportExportModule","OssRoutingModule","useHash","paramsInheritanceStrategy","LoginModule","VerticalStepperModule","TrialInitiationModule","OrganizationManageModule","OrganizationUserModule","OssModule","WildcardRoutingModule","AppModule","bootstrapModule","preserveWhitespaces","calloutStyle","enforcedPolicyMessage","getPasswordScoreAlertDisplay","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","preventDefault","I18nPipe","SearchPipe","prop1","prop2","prop3","UserNamePipe","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","insert","hostView","replaceTopModal","registerComponentFactoryResolver","closeAll","attachToDom","createModalComponent","attachView","domElem","rootNodes","detachView","modalEl","dialogEl","className","zIndex","prepend","closeElement","WeakMap","ValidationService","defaultErrorMessage","validationErrors","getAllMessages","DynamicTreeNode","transformation","storedFolders","orgCiphers","oc","getAllFoldersNested","storedCollections","folderCopy","getFolderNested","ApiService","CollectionService","EventService","ExportService","FileDownloadService","FolderService","InternalFolderService","I18nService","KeyConnectorService","LogService","OrganizationService","PlatformUtilsService","PolicyService","InternalPolicyService","UserVerificationService","CipherRepromptType","CipherType","EncryptionType","EventType","FieldType","KdfType","DEFAULT_KDF_TYPE","PBKDF2_SHA256","DEFAULT_KDF_ITERATIONS","SEND_KDF_ITERATIONS","LoginLinkedId","CardLinkedId","IdentityLinkedId","PolicyType","SecureNoteType","UriMatchType","VerificationType","LinkedMetadata","_i18nKey","TreeNode","ServiceUtils","nodeTree","partIndex","delimiter","partName","nestedTraverse","newPartName","getTreeNodeObject","getDomain","nodeURL","Utils","isNode","process","release","isBrowser","isMobileBrowser","isMobile","isAppleMobileBrowser","isAppleMobile","binaryString","atob","charCodeAt","fromB64ToArray","fromUrlB64ToB64","strUtf8","fromB64toUrlB64","fromBufferToB64","b64Str","encodedString","decodeURIComponent","escape","call","urlB64Str","fromB64ToUtf8","utfStr","fromBufferToUrlB64","fromUtf8ToArray","uriString","getUrl","httpUrl","tldEndingRegex","getUrlObject","validIpAddress","urlDomain","source","bgColor","threshold","svgTextFill","bgColorHexNums","ipString","mobile","vendor","opera","hasProtocol","anchor","regexpEmojiPresentation","CardApi","FieldApi","IdentityApi","LoginApi","LoginUriApi","SecureNoteApi","AttachmentData","CardData","CipherData","CollectionData","FieldData","IdentityData","LoginData","LoginUriData","PasswordHistoryData","SecureNoteData","Attachment","decryptAttachmentKey","getKeyForDecryption","toAttachmentData","buildDataModel","toCardData","Cipher","decAttachment","decField","decPh","toLoginData","toSecureNoteData","toIdentityData","toFieldData","toPasswordHistoryData","Collection","Domain","dataObj","notEncList","objProp","notEncStringList","viewModel","mapProp","EncString","encryptedStringOrType","initFromData","initFromEncryptedString","parseEncryptedString","decryptedValue","Field","Folder","Identity","Login","toLoginUriData","LoginUri","MasterPasswordPolicyOptions","Password","SecureNote","SymmetricCryptoKey","CardExport","FieldExport","IdentityExport","LoginUriExport","LoginExport","toView","toDomain","SecureNoteExport","CipherExport","CipherWithIdExport","CollectionExport","CollectionWithIdExport","FolderExport","FolderWithIdExport","AttachmentRequest","CipherRequest","lastKnownRevisionDate","attachments2","attachmentRequest","CollectionRequest","FolderRequest","BaseResponse","propertyName","exactName","otherCasePropertyName","ErrorResponse","identityResponse","errorModel","responseErrorModel","messages","lastSep","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","LogLevelType","ConsoleLogService","timersMap","Debug","Info","Warning","level","buttonStyles","ButtonComponent","buttonType","block","disabledAttr","nextId","BitErrorComponent","displayError","requiredLength","BitFormFieldComponent","ngAfterContentChecked","ariaDescribedBy","InputModule","FormFieldModule","BitHintComponent","BitLabel","PrefixClasses","BitPrefixDirective","BitSuffixDirective","BitInputDirective","ngControl","hasPrefix","hasSuffix","ariaInvalid","_required","hasValidator","touched","__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","paths","scriptUrl","importScripts","currentScript","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}