{"version":3,"file":"app/main.5173e8c3f382cb691e42.js","mappings":"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A,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,SAC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CA,qCACA,uCACA,mCACA,mCACA,qCACA,wCACA,oCACA,kCACA,8BACA,wCACA,sCACA,kBACA,sCACA,wCACA,4CACA,yCACD,CAtBD,CAAYA,IAAAA,EAAU,I,+BCAtB,IAAYC,E,iBAAZ,SAAYA,GACV,qCACA,2DACA,2DACA,uDACA,mDACA,6EACA,wEACD,CARD,CAAYA,IAAAA,EAAc,I,+BCA1B,IAAYC,E,iBAAZ,SAAYA,GACV,uCACA,sDACA,4CACA,8CACA,gDACA,8CACA,oDACA,8DACA,8DACA,0EAEA,0CACA,0CACA,0CACA,8DACA,8DACA,wCACA,gEACA,oDACA,oFACA,0FACA,oFACA,oEACA,0EACA,oEACA,4DACA,kDACA,4CACA,wFAEA,kDACA,kDACA,kDAEA,wCACA,wCACA,wCAEA,8DACA,kEACA,8DACA,8DACA,0EACA,sEACA,wFACA,4FACA,oFACA,wEACA,0EACA,8DACA,gEAEA,sDACA,8DACA,8EACA,kEACA,4DACA,8DACA,8EACA,gFACA,4EAEA,0CAEA,sDACA,0DACA,sDACA,sDAEA,sEACA,kEACA,sEACA,iFACD,CA1ED,CAAYA,IAAAA,EAAS,I,+BCArB,IAAYC,E,iBAAZ,SAAYA,GACV,mBACA,uBACA,yBACA,sBACD,CALD,CAAYA,IAAAA,EAAS,I,+BCArB,IAAYC,E,iBAAZ,SAAYA,GACV,gBACA,kBACA,mBACD,CAJD,CAAYA,IAAAA,EAAmB,I,+BCA/B,IAAYC,E,6CAAZ,SAAYA,GACV,oCACD,CAFD,CAAYA,IAAAA,EAAO,KAIZ,MAAMC,EAAmBD,EAAQE,cAC3BC,EAAyB,IACzBC,EAAsB,G,+BCHnC,IAAYC,EAMAC,EAUAC,E,oCAhBZ,SAAYF,GACV,6BACA,4BACD,CAHD,CAAYA,IAAAA,EAAa,KAMzB,SAAYC,GACV,yCACA,6BACA,2BACA,qBACA,uBACA,wBACD,CAPD,CAAYA,IAAAA,EAAY,KAUxB,SAAYC,GACV,uBACA,iCACA,6BACA,6BACA,6BACA,qBACA,uBACA,iCACA,2BACA,2BACA,uBACA,uBACA,mBACA,6BACA,yCACA,uCA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","sources":["webpack://@bitwarden/web-vault/webpack/runtime/chunk loaded","webpack://@bitwarden/web-vault/webpack/runtime/load script","webpack://@bitwarden/web-vault/./src/app/accounts/register-form/register-form.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/event.view.ts","webpack://@bitwarden/web-vault/./src/app/common/base.events.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/core/event.service.ts","webpack://@bitwarden/web-vault/./src/app/core/policy-list.service.ts","webpack://@bitwarden/web-vault/./src/app/core/router.service.ts","webpack://@bitwarden/web-vault/./src/app/core/state/account.ts","webpack://@bitwarden/web-vault/./src/app/core/state/state.service.ts","webpack://@bitwarden/web-vault/./src/app/organizations/create/organization-create.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/create/organization-information.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/create/organization-information.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/guards/org-permissions.guard.ts","webpack://@bitwarden/web-vault/./src/app/organizations/guards/org-redirect.guard.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/policy.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/base-policy.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policies.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/disable-send.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/disable-send.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/master-password.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/master-password.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/password-generator.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/password-generator.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/personal-ownership.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/personal-ownership.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/require-sso.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/require-sso.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/reset-password.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/reset-password.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/send-options.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/send-options.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/single-org.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/single-org.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/two-factor-authentication.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/two-factor-authentication.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policy-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policy-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policies.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policies.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-update.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/delete-organization.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/delete-organization.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/account.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/account.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-setup.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/two-factor-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-settings-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-settings.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/settings.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/settings.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/shared/guards/has-premium.guard.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/breach-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/breach-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-breach.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-exposed-passwords.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-inactive-two-factor.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-reused-passwords.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-unsecured-websites.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-weak-passwords.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/reports.ts","webpack://@bitwarden/web-vault/./src/app/reports/shared/reports-shared.module.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/reports-home.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/reports-home.component.html","webpack://@bitwarden/web-vault/./src/app/reports/reports-layout.component.html","webpack://@bitwarden/web-vault/./src/app/reports/reports-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/reports-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/reports/reports.module.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/cipher-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/exposed-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/exposed-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/inactive-two-factor-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/inactive-two-factor-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/reused-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/reused-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/unsecured-websites-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/unsecured-websites-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/weak-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/weak-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/shared/models/report-variant.ts","webpack://@bitwarden/web-vault/./src/app/reports/shared/report-card/report-card.component.html","webpack://@bitwarden/web-vault/./src/app/reports/shared/report-card/report-card.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/shared/report-list/report-list.component.html","webpack://@bitwarden/web-vault/./src/app/reports/shared/report-list/report-list.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/storage.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/adjust-storage.component.html","webpack://@bitwarden/web-vault/./src/app/settings/adjust-storage.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/api-key.component.html","webpack://@bitwarden/web-vault/./src/app/settings/api-key.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/transactionType.ts","webpack://@bitwarden/web-vault/./src/app/settings/billing-history.component.html","webpack://@bitwarden/web-vault/./src/app/settings/billing-history.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-create.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-upgrade.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-organization-create.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/organization-plans.component.html","webpack://@bitwarden/web-vault/./src/app/settings/organization-plans.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/verify-bank.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/bit-pay-invoice.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/add-credit.component.html","webpack://@bitwarden/web-vault/./src/app/settings/add-credit.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/payment.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/adjust-payment.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/adjust-payment.component.html","webpack://@bitwarden/web-vault/./src/app/settings/payment-method.component.html","webpack://@bitwarden/web-vault/./src/app/settings/payment-method.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/payment.component.html","webpack://@bitwarden/web-vault/./src/app/settings/payment.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/purge-vault.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/purge-vault.component.html","webpack://@bitwarden/web-vault/./src/app/settings/tax-info.component.html","webpack://@bitwarden/web-vault/./src/app/settings/tax-info.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/two-factor-provider.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-base.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-duo.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-duo.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-duo.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-authenticator.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-authenticator.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-authenticator.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-email.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-email.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-email.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-recovery.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-recovery.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-web-authn-delete.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-web-authn.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-webauthn.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-webauthn.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-yubio-otp.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-yubikey.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-yubikey.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-verify.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-verify.component.html","webpack://@bitwarden/web-vault/./src/app/settings/update-license.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/update-license.component.html","webpack://@bitwarden/web-vault/./src/app/shared/loose-components.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/button/button.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon/icon.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tabs.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/table/table.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/avatar/avatar.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon-button/icon-button.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/async-actions/async-actions.module.ts","webpack://@bitwarden/web-vault/./src/app/shared/locales.ts","webpack://@bitwarden/web-vault/./src/app/shared/shared.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/add-edit-custom-fields.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/true-false-value.directive.ts","webpack://@bitwarden/web-vault/./src/app/vault/add-edit-custom-fields.component.html","webpack://@bitwarden/web-vault/./src/app/vault/add-edit-custom-fields.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/organization-badge/organization-badge.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/vault-filter-shared.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/vault-filter.service.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/vault-filter.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/account/account-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/account/account.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/anonymousHub.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/appId.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/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/encrypt.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/fileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/folder/folder-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/formValidationErrors.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/login.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/notifications.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/sync/syncNotifier.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/token.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/twoFactor.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/userVerification/userVerification-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/usernameGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/vaultTimeout/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/misc/flags.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/stateVersion.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/themeType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/global-state.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/notificationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/notification.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/anonymousHub.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/device.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/api-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/token-two-factor.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/api-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/attachment.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/password-history.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/cipher.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/attachment-upload-data.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/auth-request.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/authentication/register.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/billing.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/billing-history.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/billing-payment.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/breach-account.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/selection-read-only.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/collection.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/device-verification.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/global-domain.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/domains.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/emergency-access.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/event.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/group.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identity-captcha.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identity-token.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identity-two-factor.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/key-connector-user-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/list.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-connection.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-export.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-sponsorship-sync-status.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-user-bulk-public-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-user-bulk.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/permissions.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-user.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profile-organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profile-provider-organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profile-provider.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profile.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/payment.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/plan.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/prelogin.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider-organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider-user-bulk-public-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider-user-bulk.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider-user.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/send-file.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/send-text.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/send-access.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/send-file-download-data.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/send.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/send-file-upload-data.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/sso-pre-validate.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/subscription.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/folder.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/sync.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/tax-info.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/tax-rate.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-authenticator.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-duo.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-email.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-provider.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-recover.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-web-authn.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/two-factor-yubi-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/user-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/audit.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/throttle.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/authenticationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/keySuffixOptions.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/auth-result.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/logIn.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/hashPurpose.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/apiLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/password-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/passwordLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/passwordlessLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/sso-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/ssoLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/prelogin.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/sequentialize.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/enc-array-buffer.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/sorted-ciphers-cache.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-bulk-delete.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-bulk-move.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-bulk-restore.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-with-id.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-bulk-share.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-collections.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-partial.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-share.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cipher.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/server-config.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/config/server-config.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/wordlist.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/encrypted-organization-key.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/crypto.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/encrypted-object.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cryptography/encrypt.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cryptography/get-class-initializer.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cryptography/multithread-encrypt.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/event.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/event.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/fileUploadType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/azureFileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/bitwardenFileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationUserType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/account/set-key-connector-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/key-connector-user-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/login.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/ssoEnums.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-api-key-information.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-auto-enroll-status.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/keys.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-keys.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-subscription.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/sso-config.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization/organization-sso.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/organization.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/password-generator-policy-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/passwordGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/reset-password-policy-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/providerUserStatusType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/providerUserType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/provider.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/search.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send-file.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send-text.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/send.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/token.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/stateMigration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/organization.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/sync/sync.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/totp.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/account/verify-otp.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/emailForwarders/anonAddyForwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/emailForwarders/duckDuckGoForwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/emailForwarders/fastmailForwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/emailForwarders/firefoxRelayForwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/emailForwarders/forwarderOptions.ts","webpack://@bitwarden/web-vault/../../libs/common/src/emailForwarders/simpleLoginForwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/usernameGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/decrypt-parameters.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/lock.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/unauth.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/broadcaster.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/broadcaster.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/password-reprompt.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/passwordReprompt.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/theming/themeBuilder.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/theming/theming.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/jslib-services.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/appId.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/auth.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/folder/folder.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/folder/folder-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/account/account-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/account/account.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/collection.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/environment.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/fileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/settings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/vaultTimeout/vaultTimeoutSettings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/vaultTimeout/vaultTimeout.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/export.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/notifications.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/webCryptoFunction.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/event.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/policy/policy.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/policy/policy-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/send.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/keyConnector.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/userVerification/userVerification.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization/organization.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/provider.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/formValidationErrors.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/userVerification/userVerification-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization/organization-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/sync/syncNotifier.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/config/config.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/config/config.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/config/config-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/validation.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/memoryStorage.service.ts","webpack://@bitwarden/web-vault/./src/app/core/broadcaster-messaging.service.ts","webpack://@bitwarden/web-vault/./src/app/core/html-storage.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/container.service.ts","webpack://@bitwarden/web-vault/./src/app/core/init.service.ts","webpack://@bitwarden/web-vault/./src/app/core/modal.service.ts","webpack://@bitwarden/web-vault/./src/app/components/password-reprompt.component.ts","webpack://@bitwarden/web-vault/./src/app/components/password-reprompt.component.html","webpack://@bitwarden/web-vault/./src/app/core/password-reprompt.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/fileDownload/fileDownloadBuilder.ts","webpack://@bitwarden/web-vault/./src/app/core/web-file-download.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/clientType.ts","webpack://@bitwarden/web-vault/./src/app/core/web-platform-utils.service.ts","webpack://@bitwarden/web-vault/./src/app/core/core.module.ts","webpack://@bitwarden/web-vault/./src/utils/flags.ts","webpack://@bitwarden/web-vault/./src/app/core/state/global-state.ts","webpack://@bitwarden/web-vault/./src/app/core/i18n.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/i18n.service.ts","webpack://@bitwarden/web-vault/./src/app/core/state-migration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-accept.request.ts","webpack://@bitwarden/web-vault/./src/app/common/base.accept.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/accept-emergency.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/accept-emergency.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-user-accept.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/accept-organization.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/accept-organization.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/password-hint.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/hint.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/hint.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/hint.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/lock.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/lock.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/lock.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/misc/captcha_iframe.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/iframe_component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/authRequestType.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/captchaProtected.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/log-in-credentials.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/passwordless-create-auth.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/login/login-with-device.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/login/login-with-device.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/login.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/login/login.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/login/login.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/delete-recover.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-delete.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-delete.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/two-factor-recovery.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-two-factor.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-two-factor.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/register.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/validators/inputsFieldMatch.validator.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/register.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/reference-event.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/shared/components/password-strength/password-strength.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/shared/components/password-strength/password-strength.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/error-summary.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/register-form/register-form.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/register-form/register-form.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/register.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/register.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/remove-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/remove-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/remove-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-user-reset-password-enrollment.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/set-password.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/change-password.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/set-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/set-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/set-password.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/sso.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/sso.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/sso.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-step.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-step.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-step-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-step-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-stepper.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-stepper.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-forbes.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-forbes.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-us-news.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-us-news.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/confirmation-details.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/confirmation-details.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/billing.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/billing.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/default-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/default-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise1-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise1-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise2-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise2-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams1-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams1-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams2-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams2-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-cnet.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-cnet.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-enterprise-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-enterprise-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-individual-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-individual-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-teams-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-teams-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/abm-enterprise-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/abm-enterprise-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/abm-teams-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/abm-teams-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/trial-initiation.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/trial-initiation.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/webauthn_iframe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/two-factor.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/two-factor-options.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor-options.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor-options.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/password.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/update-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/update-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/update-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-user-reset-password.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-temp-password.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/update-temp-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/update-temp-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/update-temp-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/verify-email.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/verify-email-token.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/verify-email-token.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/verify-delete-recover.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/verify-recover-delete.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/verify-recover-delete.component.html","webpack://@bitwarden/web-vault/./src/app/guards/home.guard.ts","webpack://@bitwarden/web-vault/./src/app/layouts/frontend-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/frontend-layout.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/footer.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/footer.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-item.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-trigger-for.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-divider.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-divider.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/navbar.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/navbar.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/user-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/user-layout.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/components/access-selector/access-selector.models.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/utils/form-selection-list.ts","webpack://@bitwarden/web-vault/../../libs/components/src/multi-select/multi-select.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/multi-select/multi-select.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon-button/icon-button.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon-button/icon-button.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/components/access-selector/user-type.pipe.ts","webpack://@bitwarden/web-vault/./src/app/organizations/components/access-selector/access-selector.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/components/access-selector/access-selector.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/components/access-selector/access-selector.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/shared/tab-list-item.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-nav-bar/tab-link.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-nav-bar/tab-link.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/shared/tab-list-container.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/shared/tab-header.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-nav-bar/tab-nav-bar.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-nav-bar/tab-nav-bar.component.html","webpack://@bitwarden/web-vault/./src/app/components/organization-switcher.component.html","webpack://@bitwarden/web-vault/./src/app/components/organization-switcher.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/layouts/organization-layout.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/layouts/organization-layout.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/selection-read-only.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collection-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collection-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-users.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-users.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collections.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collections.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/group.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/group-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/group-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/groups.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/groups.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/manage.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/manage.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-user-bulk.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-user-confirm.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/common/base.people.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-user-bulk-confirm.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-remove.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-remove.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-restore-revoke.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-restore-revoke.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-status.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-status.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-events.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-events.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/reset-password.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/reset-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-user-invite.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-user-update.request.ts","webpack://@bitwarden/web-vault/./src/app/components/nested-checkbox.component.html","webpack://@bitwarden/web-vault/./src/app/components/nested-checkbox.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-add-edit.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-user-update-groups.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-groups.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-groups.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/people.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/people.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/shared/pipes/pipes.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/shared/vault.service.ts","webpack://@bitwarden/web-vault/./src/app/vault/shared/vault-shared.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault-filter/vault-filter.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/models/vault-filter.model.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/attachments.component.html","webpack://@bitwarden/web-vault/./src/app/vault/attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/attachments.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/ciphers.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon/icons/search.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/ellipsis.pipe.ts","webpack://@bitwarden/web-vault/./src/app/vault/organization-badge/organization-name-badge.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/organization-badge/organization-name-badge.component.html","webpack://@bitwarden/web-vault/./src/app/vault/shared/pipes/get-organization-name.pipe.ts","webpack://@bitwarden/web-vault/./src/app/vault/ciphers.component.html","webpack://@bitwarden/web-vault/./src/app/vault/ciphers.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/ciphers.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/collections.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/collections.component.html","webpack://@bitwarden/web-vault/./src/app/vault/collections.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/collections.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/components/vault-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/components/collection-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/collection-filter/collection-filter.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/collection-filter/collection-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/components/folder-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/folder-filter/folder-filter.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/folder-filter/folder-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/components/status-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/status-filter/status-filter.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/status-filter/status-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/components/type-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/type-filter/type-filter.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/shared/type-filter/type-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/components/organization-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/users/enroll-master-password-reset.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/users/enroll-master-password-reset.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/organization-filter/link-sso.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/organization-filter/link-sso.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/organization-filter/organization-options.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/organization-filter/organization-options.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/organization-filter/organization-filter.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/organization-filter/organization-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/vault-filter.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault-filter/vault-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault-filter/vault-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-delete.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-delete.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-move.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-move.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-restore.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/types/checkable.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-restore.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-share.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-share.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-actions.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-actions.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/organization-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/organization.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/planSponsorshipType.ts","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/accept-family-sponsorship.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/accept-family-sponsorship.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization/organization-sponsorship-redeem.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/families-for-enterprise-setup.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/families-for-enterprise-setup.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/send-access.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send-access.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/send-access.request.ts","webpack://@bitwarden/web-vault/./src/app/send/access.component.html","webpack://@bitwarden/web-vault/./src/app/send/access.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/send/send.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/send/efflux-dates.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/send/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/send/efflux-dates.component.html","webpack://@bitwarden/web-vault/./src/app/send/efflux-dates.component.ts","webpack://@bitwarden/web-vault/./src/app/send/add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/send/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/send/send.component.html","webpack://@bitwarden/web-vault/./src/app/send/send.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/deauthorize-sessions.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/deauthorize-sessions.component.html","webpack://@bitwarden/web-vault/./src/app/settings/delete-account.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/delete-account.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/email-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/email.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-email.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-email.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-profile.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/profile.component.html","webpack://@bitwarden/web-vault/./src/app/settings/profile.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/account.component.html","webpack://@bitwarden/web-vault/./src/app/settings/account.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/create-organization.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/create-organization.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-domains.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/domain-rules.component.html","webpack://@bitwarden/web-vault/./src/app/settings/domain-rules.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-view.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-view.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/emergencyAccessStatusType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/emergencyAccessType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-confirm.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-invite.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-update.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-confirm.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-password.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-takeover.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-takeover.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/settings/vault-timeout-input.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/vault-timeout-input.component.html","webpack://@bitwarden/web-vault/./src/app/settings/vault-timeout-input.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/preferences.component.html","webpack://@bitwarden/web-vault/./src/app/settings/preferences.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/folder-with-id.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/send-with-id.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-key.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-password.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/kdf.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/security-keys.component.html","webpack://@bitwarden/web-vault/./src/app/settings/security-keys.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/security.component.html","webpack://@bitwarden/web-vault/./src/app/settings/security.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/security-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/settings/settings.component.html","webpack://@bitwarden/web-vault/./src/app/settings/settings.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/validators/notAllowedValueAsync.validator.ts","webpack://@bitwarden/web-vault/./src/app/settings/sponsoring-org-row.component.html","webpack://@bitwarden/web-vault/./src/app/settings/sponsoring-org-row.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/sponsored-families.component.html","webpack://@bitwarden/web-vault/./src/app/settings/sponsored-families.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/billing-history-view.component.html","webpack://@bitwarden/web-vault/./src/app/settings/billing-history-view.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/premium.component.html","webpack://@bitwarden/web-vault/./src/app/settings/premium.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/subscription.component.html","webpack://@bitwarden/web-vault/./src/app/settings/subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/user-subscription.component.html","webpack://@bitwarden/web-vault/./src/app/settings/user-subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/subscription-routing.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/generator.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/password-generator-history.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/select-copy.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/color-password.pipe.ts","webpack://@bitwarden/web-vault/./src/app/tools/password-generator-history.component.html","webpack://@bitwarden/web-vault/./src/app/tools/password-generator-history.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/generator.component.html","webpack://@bitwarden/web-vault/./src/app/tools/generator.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/tools.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/tools.component.html","webpack://@bitwarden/web-vault/./src/app/settings/update-key.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/update-key.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/folder-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/folder-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/vault/folder-add-edit.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/share.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/share.component.html","webpack://@bitwarden/web-vault/./src/app/vault/share.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/verify-email.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/verify-email.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault.component.html","webpack://@bitwarden/web-vault/./src/app/vault/vault.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/vault.module.ts","webpack://@bitwarden/web-vault/./src/app/oss-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/accounts/login/login.module.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-stepper.module.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/trial-initiation.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/organization-manage.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/users/organization-user.module.ts","webpack://@bitwarden/web-vault/./src/app/oss.module.ts","webpack://@bitwarden/web-vault/./src/app/wildcard-routing.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-add-organization.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/services/webProvider.service.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/clients/add-organization.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/clients/add-organization.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/guards/provider-permissions.guard.ts","webpack://@bitwarden/web-vault/./src/app/providers/providers.component.html","webpack://@bitwarden/web-vault/./src/app/providers/providers.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/clients/clients.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/clients/clients.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/clients/create-organization.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/clients/create-organization.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-user-accept.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/accept-provider.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/accept-provider.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/events.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/events.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/manage.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/manage.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-user-bulk.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-user-confirm.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-user-bulk-confirm.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/bulk/bulk-confirm.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/bulk/bulk-remove.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-user-invite.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-user-update.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/user-add-edit.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/user-add-edit.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/people.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/manage/people.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/providers-layout.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/providers-layout.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-update.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/settings/account.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/settings/account.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/settings/settings.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/settings/settings.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/setup/setup-provider.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/setup/setup-provider.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-setup.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/setup/setup.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/setup/setup.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/providers-routing.module.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/providers/providers.module.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/app-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/app.component.ts","webpack://@bitwarden/web-vault/./src/app/app.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/policies/disable-personal-vault-export.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/policies/disable-personal-vault-export.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/policies/maximum-vault-timeout.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/policies/maximum-vault-timeout.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/app.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/scim-config.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/scim-config.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/manage/scim.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/manage/scim.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization/organization-sso.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/sso-config.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/view.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/input-strip-spaces.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/copy-click.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/launch-click.directive.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/components/base-cva.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/components/input-checkbox.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/components/input-checkbox.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/manage/sso.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/manage/sso.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/organizations-routing.module.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/organizations/organizations.module.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/app.module.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/main.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/callout.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/callout.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/fallback-src.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/icon.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/icon.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/modal/modal.ref.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/user-verification.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/user-verification.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/a11y-title.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/api-action.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/autofocus.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/input-verbatim.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/stop-click.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/stop-prop.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/auth.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/toastr.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/credit-card-number.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/jslib.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/i18n.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/search.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/user-name.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/injection-tokens.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/modal/dynamic-modal.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/modal/modal-injector.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/modal.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/theming/theming.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/models/dynamic-tree-node.model.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/vault-filter/services/vault-filter.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/audit.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/auth.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/cipher.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/collection.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/crypto.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/environment.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/event.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/export.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/fileDownload/fileDownload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/folder/folder.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/i18n.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/keyConnector.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/log.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/messaging.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization/organization-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization/organization.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/passwordGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/passwordReprompt.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/platformUtils.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/policy/policy-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/policy/policy.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/provider.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/state.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/stateMigration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/storage.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/sync/sync.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/totp.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/userVerification/userVerification.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/validation.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/authenticationStatus.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/cipherRepromptType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/cipherType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/deviceType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/encryptionType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/eventType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/fieldType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/htmlStorageLocation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/kdfType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/linkedIdType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/logLevelType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationApiKeyType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationConnectionType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationUserStatusType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/paymentMethodType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/planType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/policyType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/productType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/secureNoteType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/sendType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/twoFactorProviderType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/uriMatchType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/verificationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/linkedFieldOption.decorator.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/tree-node.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/serviceUtils.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/utils.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/card.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/field.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/identity.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/login-uri.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/login.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/secure-note.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/attachment.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/card.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/cipher.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/collection.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/event.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/field.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/folder.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/identity.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/login-uri.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/login.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/password-history.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/policy.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/provider.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/secure-note.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/send-file.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/send-text.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/send.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/server-config.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/account.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/attachment.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/card.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/cipher.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/collection.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/domain-base.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/enc-string.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/environment-urls.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/field.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/folder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/generated-password-history.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/identity.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/login-uri.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/login.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/master-password-policy-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/password.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/policy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/secure-note.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/symmetric-crypto-key.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/window-state.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/card.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/field.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/identity.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/login-uri.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/login.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/secure-note.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/cipher.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/cipher-with-ids.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/collection.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/collection-with-id.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/folder.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/folder-with-id.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher-create.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/attachment.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipher.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/collection.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/folder.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/keys.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-api-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-connection.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-keys.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-tax-info-update.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/secret-verification.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/tax-info-update.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/two-factor-email.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/base.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/error.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/policy.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/attachment.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/card.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/cipher.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/collection.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/field.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/folder.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/identity.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/item.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/login-uri.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/login.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/password-history.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/secure-note.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/send-file.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/send-text.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/send.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/consoleLog.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cryptography/initializer-key.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/storageLocation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/state.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/state.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/twoFactor.service.ts","webpack://@bitwarden/web-vault/../../libs/components/src/avatar/avatar.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/badge/badge.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/badge/badge.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/button/button.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/button/button.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field-control.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/error.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/input/input.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/multi-select/multi-select.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/hint.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/label.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/prefix.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/suffix.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon/icon.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon/icon.ts","webpack://@bitwarden/web-vault/../../libs/components/src/input/input.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/shared/button-like.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/components/src/shared/i18n.pipe.ts","webpack://@bitwarden/web-vault/../../libs/components/src/shared/shared.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/table/cell.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/table/row.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/table/table.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/table/table.component.html","webpack://@bitwarden/web-vault/webpack/bootstrap","webpack://@bitwarden/web-vault/webpack/runtime/compat get default export","webpack://@bitwarden/web-vault/webpack/runtime/define property getters","webpack://@bitwarden/web-vault/webpack/runtime/ensure chunk","webpack://@bitwarden/web-vault/webpack/runtime/get javascript chunk filename","webpack://@bitwarden/web-vault/webpack/runtime/get mini-css chunk filename","webpack://@bitwarden/web-vault/webpack/runtime/global","webpack://@bitwarden/web-vault/webpack/runtime/hasOwnProperty shorthand","webpack://@bitwarden/web-vault/webpack/runtime/make namespace object","webpack://@bitwarden/web-vault/webpack/runtime/node module decorator","webpack://@bitwarden/web-vault/webpack/runtime/publicPath","webpack://@bitwarden/web-vault/webpack/runtime/jsonp chunk loading","webpack://@bitwarden/web-vault/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"@bitwarden/web-vault:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { RegisterFormComponent } from \"./register-form.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [RegisterFormComponent],\n exports: [RegisterFormComponent],\n})\nexport class RegisterFormModule {}\n","import { EventSystemUser } from \"../../enums/event-system-user\";\nimport { EventType } from \"../../enums/eventType\";\n\nexport class EventView {\n message: string;\n humanReadableMessage: string;\n appIcon: string;\n appName: string;\n userId: string;\n userName: string;\n userEmail: string;\n date: string;\n ip: string;\n type: EventType;\n installationId: string;\n systemUser: EventSystemUser;\n\n constructor(data: Required) {\n this.message = data.message;\n this.humanReadableMessage = data.humanReadableMessage;\n this.appIcon = data.appIcon;\n this.appName = data.appName;\n this.userId = data.userId;\n this.userName = data.userName;\n this.userEmail = data.userEmail;\n this.date = data.date;\n this.ip = data.ip;\n this.type = data.type;\n this.installationId = data.installationId;\n this.systemUser = data.systemUser;\n }\n}\n","import { Directive } from \"@angular/core\";\n\nimport { ExportService } from \"@bitwarden/common/abstractions/export.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { EventResponse } from \"@bitwarden/common/models/response/event.response\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { EventView } from \"@bitwarden/common/models/view/event.view\";\n\nimport { EventService } from \"../core\";\n\n@Directive()\nexport abstract class BaseEventsComponent {\n loading = true;\n loaded = false;\n events: EventView[];\n start: string;\n end: string;\n dirtyDates = true;\n continuationToken: string;\n refreshPromise: Promise;\n exportPromise: Promise;\n morePromise: Promise;\n\n abstract readonly exportFileName: string;\n\n constructor(\n protected eventService: EventService,\n protected i18nService: I18nService,\n protected exportService: ExportService,\n protected platformUtilsService: PlatformUtilsService,\n protected logService: LogService,\n protected fileDownloadService: FileDownloadService\n ) {\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n }\n\n async exportEvents() {\n if (this.appApiPromiseUnfulfilled() || this.dirtyDates) {\n return;\n }\n\n this.loading = true;\n\n const dates = this.parseDates();\n if (dates == null) {\n return;\n }\n\n try {\n this.exportPromise = this.export(dates[0], dates[1]);\n\n await this.exportPromise;\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n\n this.exportPromise = null;\n this.loading = false;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.appApiPromiseUnfulfilled()) {\n return;\n }\n\n const dates = this.parseDates();\n if (dates == null) {\n return;\n }\n\n this.loading = true;\n let events: EventView[] = [];\n try {\n const promise = this.loadAndParseEvents(\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n const result = await promise;\n this.continuationToken = result.continuationToken;\n events = result.events;\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.dirtyDates = false;\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n\n protected abstract requestEvents(\n startDate: string,\n endDate: string,\n continuationToken: string\n ): Promise>;\n protected abstract getUserName(r: EventResponse, userId: string): { name: string; email: string };\n\n protected async loadAndParseEvents(\n startDate: string,\n endDate: string,\n continuationToken: string\n ) {\n const response = await this.requestEvents(startDate, endDate, continuationToken);\n\n const events = await Promise.all(\n response.data.map(async (r) => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = await this.eventService.getEventInfo(r);\n const user = this.getUserName(r, userId);\n const userName = user != null ? user.name : this.i18nService.t(\"unknown\");\n\n return new EventView({\n message: eventInfo.message,\n humanReadableMessage: eventInfo.humanReadableMessage,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: userName,\n userEmail: user != null ? user.email : \"\",\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n installationId: r.installationId,\n systemUser: r.systemUser,\n });\n })\n );\n return { continuationToken: response.continuationToken, events: events };\n }\n\n protected parseDates() {\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidDateRange\")\n );\n return null;\n }\n return dates;\n }\n\n protected appApiPromiseUnfulfilled() {\n return this.refreshPromise != null || this.morePromise != null || this.exportPromise != null;\n }\n\n private async export(start: string, end: string) {\n let continuationToken = this.continuationToken;\n let events = [].concat(this.events);\n\n while (continuationToken != null) {\n const result = await this.loadAndParseEvents(start, end, continuationToken);\n continuationToken = result.continuationToken;\n events = events.concat(result.events);\n }\n\n const data = await this.exportService.getEventExport(events);\n const fileName = this.exportService.getFileName(this.exportFileName, \"csv\");\n this.fileDownloadService.download({\n fileName,\n blobData: data,\n blobOptions: { type: \"text/plain\" },\n });\n }\n}\n","import { Directive, OnInit, TemplateRef, ViewContainerRef } from \"@angular/core\";\n\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n/**\n * Hides the element if the user has premium.\n */\n@Directive({\n selector: \"[appNotPremium]\",\n})\nexport class NotPremiumDirective implements OnInit {\n constructor(\n private templateRef: TemplateRef,\n private viewContainer: ViewContainerRef,\n private stateService: StateService\n ) {}\n\n async ngOnInit(): Promise {\n const premium = await this.stateService.getCanAccessPremium();\n\n if (premium) {\n this.viewContainer.clear();\n } else {\n this.viewContainer.createEmbeddedView(this.templateRef);\n }\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\n\n@Component({\n selector: \"app-premium-badge\",\n template: `\n \n `,\n})\nexport class PremiumBadgeComponent {\n constructor(private messagingService: MessagingService) {}\n\n premiumRequired() {\n this.messagingService.send(\"premiumRequired\");\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { DeviceType } from \"@bitwarden/common/enums/deviceType\";\nimport { EventType } from \"@bitwarden/common/enums/eventType\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { EventResponse } from \"@bitwarden/common/models/response/event.response\";\n\n@Injectable()\nexport class EventService {\n private policies: Policy[];\n\n constructor(private i18nService: I18nService, policyService: PolicyService) {\n policyService.policies$.subscribe((policies) => {\n this.policies = policies;\n });\n }\n\n getDefaultDateFilters() {\n const d = new Date();\n const end = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59);\n d.setDate(d.getDate() - 30);\n const start = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0);\n return [this.toDateTimeLocalString(start), this.toDateTimeLocalString(end)];\n }\n\n formatDateFilters(filterStart: string, filterEnd: string) {\n const start: Date = new Date(filterStart);\n const end: Date = new Date(filterEnd + \":59.999\");\n if (isNaN(start.getTime()) || isNaN(end.getTime()) || end < start) {\n throw new Error(\"Invalid date range.\");\n }\n return [start.toISOString(), end.toISOString()];\n }\n\n async getEventInfo(ev: EventResponse, options = new EventOptions()): Promise {\n const appInfo = this.getAppInfo(ev.deviceType);\n const { message, humanReadableMessage } = await this.getEventMessage(ev, options);\n return {\n message: message,\n humanReadableMessage: humanReadableMessage,\n appIcon: appInfo[0],\n appName: appInfo[1],\n };\n }\n\n private async getEventMessage(ev: EventResponse, options: EventOptions) {\n let msg = \"\";\n let humanReadableMsg = \"\";\n switch (ev.type) {\n // User\n case EventType.User_LoggedIn:\n msg = humanReadableMsg = this.i18nService.t(\"loggedIn\");\n break;\n case EventType.User_ChangedPassword:\n msg = humanReadableMsg = this.i18nService.t(\"changedPassword\");\n break;\n case EventType.User_Updated2fa:\n msg = humanReadableMsg = this.i18nService.t(\"enabledUpdated2fa\");\n break;\n case EventType.User_Disabled2fa:\n msg = humanReadableMsg = this.i18nService.t(\"disabled2fa\");\n break;\n case EventType.User_Recovered2fa:\n msg = humanReadableMsg = this.i18nService.t(\"recovered2fa\");\n break;\n case EventType.User_FailedLogIn:\n msg = humanReadableMsg = this.i18nService.t(\"failedLogin\");\n break;\n case EventType.User_FailedLogIn2fa:\n msg = humanReadableMsg = this.i18nService.t(\"failedLogin2fa\");\n break;\n case EventType.User_ClientExportedVault:\n msg = humanReadableMsg = this.i18nService.t(\"exportedVault\");\n break;\n case EventType.User_UpdatedTempPassword:\n msg = humanReadableMsg = this.i18nService.t(\"updatedMasterPassword\");\n break;\n case EventType.User_MigratedKeyToKeyConnector:\n msg = humanReadableMsg = this.i18nService.t(\"migratedKeyConnector\");\n break;\n // Cipher\n case EventType.Cipher_Created:\n msg = this.i18nService.t(\"createdItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"createdItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Updated:\n msg = this.i18nService.t(\"editedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"editedItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Deleted:\n msg = this.i18nService.t(\"permanentlyDeletedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"permanentlyDeletedItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_SoftDeleted:\n msg = this.i18nService.t(\"deletedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"deletedItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Restored:\n msg = this.i18nService.t(\"restoredItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"restoredItemId\", this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_AttachmentCreated:\n msg = this.i18nService.t(\"createdAttachmentForItem\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"createdAttachmentForItem\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_AttachmentDeleted:\n msg = this.i18nService.t(\"deletedAttachmentForItem\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"deletedAttachmentForItem\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_Shared:\n msg = this.i18nService.t(\"movedItemIdToOrg\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"movedItemIdToOrg\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientViewed:\n msg = this.i18nService.t(\"viewedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"viewedItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientToggledPasswordVisible:\n msg = this.i18nService.t(\"viewedPasswordItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"viewedPasswordItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientToggledHiddenFieldVisible:\n msg = this.i18nService.t(\"viewedHiddenFieldItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"viewedHiddenFieldItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientToggledCardNumberVisible:\n msg = this.i18nService.t(\"viewedCardNumberItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"viewedCardNumberItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientToggledCardCodeVisible:\n msg = this.i18nService.t(\"viewedSecurityCodeItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"viewedSecurityCodeItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientCopiedHiddenField:\n msg = this.i18nService.t(\"copiedHiddenFieldItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"copiedHiddenFieldItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientCopiedPassword:\n msg = this.i18nService.t(\"copiedPasswordItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"copiedPasswordItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientCopiedCardCode:\n msg = this.i18nService.t(\"copiedSecurityCodeItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"copiedSecurityCodeItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientAutofilled:\n msg = this.i18nService.t(\"autofilledItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"autofilledItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_UpdatedCollections:\n msg = this.i18nService.t(\"editedCollectionsForItem\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"editedCollectionsForItem\",\n this.getShortId(ev.cipherId)\n );\n break;\n // Collection\n case EventType.Collection_Created:\n msg = this.i18nService.t(\"createdCollectionId\", this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t(\n \"createdCollectionId\",\n this.getShortId(ev.collectionId)\n );\n break;\n case EventType.Collection_Updated:\n msg = this.i18nService.t(\"editedCollectionId\", this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t(\n \"editedCollectionId\",\n this.getShortId(ev.collectionId)\n );\n break;\n case EventType.Collection_Deleted:\n msg = this.i18nService.t(\"deletedCollectionId\", this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t(\n \"deletedCollectionId\",\n this.getShortId(ev.collectionId)\n );\n break;\n // Group\n case EventType.Group_Created:\n msg = this.i18nService.t(\"createdGroupId\", this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t(\"createdGroupId\", this.getShortId(ev.groupId));\n break;\n case EventType.Group_Updated:\n msg = this.i18nService.t(\"editedGroupId\", this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t(\"editedGroupId\", this.getShortId(ev.groupId));\n break;\n case EventType.Group_Deleted:\n msg = this.i18nService.t(\"deletedGroupId\", this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t(\"deletedGroupId\", this.getShortId(ev.groupId));\n break;\n // Org user\n case EventType.OrganizationUser_Invited:\n msg = this.i18nService.t(\"invitedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"invitedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Confirmed:\n msg = this.i18nService.t(\"confirmedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"confirmedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Updated:\n msg = this.i18nService.t(\"editedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"editedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Removed:\n msg = this.i18nService.t(\"removedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"removedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_UpdatedGroups:\n msg = this.i18nService.t(\"editedGroupsForUser\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"editedGroupsForUser\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_UnlinkedSso:\n msg = this.i18nService.t(\"unlinkedSsoUser\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"unlinkedSsoUser\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_ResetPassword_Enroll:\n msg = this.i18nService.t(\"eventEnrollPasswordReset\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventEnrollPasswordReset\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_ResetPassword_Withdraw:\n msg = this.i18nService.t(\"eventWithdrawPasswordReset\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventWithdrawPasswordReset\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_AdminResetPassword:\n msg = this.i18nService.t(\"eventAdminPasswordReset\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventAdminPasswordReset\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_ResetSsoLink:\n msg = this.i18nService.t(\"eventResetSsoLink\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventResetSsoLink\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_FirstSsoLogin:\n msg = this.i18nService.t(\"firstSsoLogin\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"firstSsoLogin\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Revoked:\n msg = this.i18nService.t(\"revokedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"revokedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Restored:\n msg = this.i18nService.t(\"restoredUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"restoredUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n // Org\n case EventType.Organization_Updated:\n msg = humanReadableMsg = this.i18nService.t(\"editedOrgSettings\");\n break;\n case EventType.Organization_PurgedVault:\n msg = humanReadableMsg = this.i18nService.t(\"purgedOrganizationVault\");\n break;\n case EventType.Organization_ClientExportedVault:\n msg = humanReadableMsg = this.i18nService.t(\"exportedOrganizationVault\");\n break;\n case EventType.Organization_VaultAccessed:\n msg = humanReadableMsg = this.i18nService.t(\"vaultAccessedByProvider\");\n break;\n case EventType.Organization_EnabledSso:\n msg = humanReadableMsg = this.i18nService.t(\"enabledSso\");\n break;\n case EventType.Organization_DisabledSso:\n msg = humanReadableMsg = this.i18nService.t(\"disabledSso\");\n break;\n case EventType.Organization_EnabledKeyConnector:\n msg = humanReadableMsg = this.i18nService.t(\"enabledKeyConnector\");\n break;\n case EventType.Organization_DisabledKeyConnector:\n msg = humanReadableMsg = this.i18nService.t(\"disabledKeyConnector\");\n break;\n case EventType.Organization_SponsorshipsSynced:\n msg = humanReadableMsg = this.i18nService.t(\"sponsorshipsSynced\");\n break;\n // Policies\n case EventType.Policy_Updated: {\n msg = this.i18nService.t(\"modifiedPolicyId\", this.formatPolicyId(ev));\n\n const policy = this.policies.filter((p) => p.id === ev.policyId)[0];\n let p1 = this.getShortId(ev.policyId);\n if (policy != null) {\n p1 = PolicyType[policy.type];\n }\n\n humanReadableMsg = this.i18nService.t(\"modifiedPolicyId\", p1);\n break;\n }\n // Provider users:\n case EventType.ProviderUser_Invited:\n msg = this.i18nService.t(\"invitedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\"invitedUserId\", this.getShortId(ev.providerUserId));\n break;\n case EventType.ProviderUser_Confirmed:\n msg = this.i18nService.t(\"confirmedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"confirmedUserId\",\n this.getShortId(ev.providerUserId)\n );\n break;\n case EventType.ProviderUser_Updated:\n msg = this.i18nService.t(\"editedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\"editedUserId\", this.getShortId(ev.providerUserId));\n break;\n case EventType.ProviderUser_Removed:\n msg = this.i18nService.t(\"removedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\"removedUserId\", this.getShortId(ev.providerUserId));\n break;\n case EventType.ProviderOrganization_Created:\n msg = this.i18nService.t(\"createdOrganizationId\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"createdOrganizationId\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n case EventType.ProviderOrganization_Added:\n msg = this.i18nService.t(\"addedOrganizationId\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"addedOrganizationId\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n case EventType.ProviderOrganization_Removed:\n msg = this.i18nService.t(\"removedOrganizationId\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"removedOrganizationId\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n case EventType.ProviderOrganization_VaultAccessed:\n msg = this.i18nService.t(\"accessedClientVault\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"accessedClientVault\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n default:\n break;\n }\n return {\n message: msg === \"\" ? null : msg,\n humanReadableMessage: humanReadableMsg === \"\" ? null : humanReadableMsg,\n };\n }\n\n private getAppInfo(deviceType: DeviceType): [string, string] {\n switch (deviceType) {\n case DeviceType.Android:\n return [\"bwi-android\", this.i18nService.t(\"mobile\") + \" - Android\"];\n case DeviceType.iOS:\n return [\"bwi-apple\", this.i18nService.t(\"mobile\") + \" - iOS\"];\n case DeviceType.UWP:\n return [\"bwi-windows\", this.i18nService.t(\"mobile\") + \" - Windows\"];\n case DeviceType.ChromeExtension:\n return [\"bwi-chrome\", this.i18nService.t(\"extension\") + \" - Chrome\"];\n case DeviceType.FirefoxExtension:\n return [\"bwi-firefox\", this.i18nService.t(\"extension\") + \" - Firefox\"];\n case DeviceType.OperaExtension:\n return [\"bwi-opera\", this.i18nService.t(\"extension\") + \" - Opera\"];\n case DeviceType.EdgeExtension:\n return [\"bwi-edge\", this.i18nService.t(\"extension\") + \" - Edge\"];\n case DeviceType.VivaldiExtension:\n return [\"bwi-puzzle\", this.i18nService.t(\"extension\") + \" - Vivaldi\"];\n case DeviceType.SafariExtension:\n return [\"bwi-safari\", this.i18nService.t(\"extension\") + \" - Safari\"];\n case DeviceType.WindowsDesktop:\n return [\"bwi-windows\", this.i18nService.t(\"desktop\") + \" - Windows\"];\n case DeviceType.MacOsDesktop:\n return [\"bwi-apple\", this.i18nService.t(\"desktop\") + \" - macOS\"];\n case DeviceType.LinuxDesktop:\n return [\"bwi-linux\", this.i18nService.t(\"desktop\") + \" - Linux\"];\n case DeviceType.ChromeBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Chrome\"];\n case DeviceType.FirefoxBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Firefox\"];\n case DeviceType.OperaBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Opera\"];\n case DeviceType.SafariBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Safari\"];\n case DeviceType.VivaldiBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Vivaldi\"];\n case DeviceType.EdgeBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Edge\"];\n case DeviceType.IEBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - IE\"];\n case DeviceType.UnknownBrowser:\n return [\n \"bwi-globe\",\n this.i18nService.t(\"webVault\") + \" - \" + this.i18nService.t(\"unknown\"),\n ];\n default:\n return [\"bwi-globe\", this.i18nService.t(\"unknown\")];\n }\n }\n\n private formatCipherId(ev: EventResponse, options: EventOptions) {\n const shortId = this.getShortId(ev.cipherId);\n if (ev.organizationId == null || !options.cipherInfo) {\n return \"\" + shortId + \"\";\n }\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" +\n ev.organizationId +\n \"/vault?search=\" +\n shortId +\n \"&viewEvents=\" +\n ev.cipherId\n );\n return a.outerHTML;\n }\n\n private formatGroupId(ev: EventResponse) {\n const shortId = this.getShortId(ev.groupId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\"href\", \"#/organizations/\" + ev.organizationId + \"/groups?search=\" + shortId);\n return a.outerHTML;\n }\n\n private formatCollectionId(ev: EventResponse) {\n const shortId = this.getShortId(ev.collectionId);\n const a = this.makeAnchor(shortId);\n // TODO: Update view/edit collection link after EC-14 is completed\n a.setAttribute(\n \"href\",\n \"#/organizations/\" + ev.organizationId + \"/manage/collections?search=\" + shortId\n );\n return a.outerHTML;\n }\n\n private formatOrgUserId(ev: EventResponse) {\n const shortId = this.getShortId(ev.organizationUserId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" +\n ev.organizationId +\n \"/members?search=\" +\n shortId +\n \"&viewEvents=\" +\n ev.organizationUserId\n );\n return a.outerHTML;\n }\n\n private formatProviderUserId(ev: EventResponse) {\n const shortId = this.getShortId(ev.providerUserId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/providers/\" +\n ev.providerId +\n \"/manage/people?search=\" +\n shortId +\n \"&viewEvents=\" +\n ev.providerUserId\n );\n return a.outerHTML;\n }\n\n private formatProviderOrganizationId(ev: EventResponse) {\n const shortId = this.getShortId(ev.providerOrganizationId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\"href\", \"#/providers/\" + ev.providerId + \"/clients?search=\" + shortId);\n return a.outerHTML;\n }\n\n private formatPolicyId(ev: EventResponse) {\n const shortId = this.getShortId(ev.policyId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" + ev.organizationId + \"/manage/policies?policyId=\" + ev.policyId\n );\n return a.outerHTML;\n }\n\n private makeAnchor(shortId: string) {\n const a = document.createElement(\"a\");\n a.title = this.i18nService.t(\"view\");\n a.innerHTML = \"\" + shortId + \"\";\n return a;\n }\n\n private getShortId(id: string) {\n return id?.substring(0, 8);\n }\n\n private toDateTimeLocalString(date: Date) {\n return (\n date.getFullYear() +\n \"-\" +\n this.pad(date.getMonth() + 1) +\n \"-\" +\n this.pad(date.getDate()) +\n \"T\" +\n this.pad(date.getHours()) +\n \":\" +\n this.pad(date.getMinutes())\n );\n }\n\n private pad(num: number) {\n const norm = Math.floor(Math.abs(num));\n return (norm < 10 ? \"0\" : \"\") + norm;\n }\n}\n\nexport class EventInfo {\n message: string;\n humanReadableMessage: string;\n appIcon: string;\n appName: string;\n}\n\nexport class EventOptions {\n cipherInfo = true;\n}\n","import { BasePolicy } from \"../organizations/policies\";\n\nexport class PolicyListService {\n private policies: BasePolicy[] = [];\n\n addPolicies(policies: BasePolicy[]) {\n this.policies.push(...policies);\n }\n\n getPolicies(): BasePolicy[] {\n return this.policies;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Title } from \"@angular/platform-browser\";\nimport { ActivatedRoute, NavigationEnd, Router } from \"@angular/router\";\nimport { filter } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\n@Injectable()\nexport class RouterService {\n private previousUrl: string = undefined;\n private currentUrl: string = undefined;\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private titleService: Title,\n i18nService: I18nService\n ) {\n this.currentUrl = this.router.url;\n\n router.events\n .pipe(filter((e) => e instanceof NavigationEnd))\n .subscribe((event: NavigationEnd) => {\n this.currentUrl = event.url;\n\n let title = i18nService.t(\"pageTitle\", \"Bitwarden\");\n let child = this.activatedRoute.firstChild;\n while (child.firstChild) {\n child = child.firstChild;\n }\n\n const titleId: string = child?.snapshot?.data?.titleId;\n const rawTitle: string = child?.snapshot?.data?.title;\n const updateUrl = !child?.snapshot?.data?.doNotSaveUrl ?? true;\n\n if (titleId != null || rawTitle != null) {\n const newTitle = rawTitle != null ? rawTitle : i18nService.t(titleId);\n if (newTitle != null && newTitle !== \"\") {\n title = newTitle + \" | \" + title;\n }\n }\n this.titleService.setTitle(title);\n if (updateUrl) {\n this.setPreviousUrl(this.currentUrl);\n }\n });\n }\n\n getPreviousUrl() {\n return this.previousUrl;\n }\n\n setPreviousUrl(url: string) {\n this.previousUrl = url;\n }\n}\n","import {\n Account as BaseAccount,\n AccountSettings as BaseAccountSettings,\n} from \"@bitwarden/common/models/domain/account\";\n\nexport class AccountSettings extends BaseAccountSettings {\n vaultTimeout: number = process.env.NODE_ENV === \"development\" ? null : 15;\n}\n\nexport class Account extends BaseAccount {\n settings?: AccountSettings = new AccountSettings();\n\n constructor(init: Partial) {\n super(init);\n Object.assign(this.settings, {\n ...new AccountSettings(),\n ...this.settings,\n });\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\n\nimport {\n MEMORY_STORAGE,\n SECURE_STORAGE,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n} from \"@bitwarden/angular/services/injection-tokens\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { StateMigrationService } from \"@bitwarden/common/abstractions/stateMigration.service\";\nimport { AbstractStorageService } from \"@bitwarden/common/abstractions/storage.service\";\nimport { StateFactory } from \"@bitwarden/common/factories/stateFactory\";\nimport { CipherData } from \"@bitwarden/common/models/data/cipher.data\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collection.data\";\nimport { FolderData } from \"@bitwarden/common/models/data/folder.data\";\nimport { SendData } from \"@bitwarden/common/models/data/send.data\";\nimport { StorageOptions } from \"@bitwarden/common/models/domain/storage-options\";\nimport { StateService as BaseStateService } from \"@bitwarden/common/services/state.service\";\n\nimport { Account } from \"./account\";\nimport { GlobalState } from \"./global-state\";\n\n@Injectable()\nexport class StateService extends BaseStateService {\n constructor(\n storageService: AbstractStorageService,\n @Inject(SECURE_STORAGE) secureStorageService: AbstractStorageService,\n @Inject(MEMORY_STORAGE) memoryStorageService: AbstractStorageService,\n logService: LogService,\n stateMigrationService: StateMigrationService,\n @Inject(STATE_FACTORY) stateFactory: StateFactory,\n @Inject(STATE_SERVICE_USE_CACHE) useAccountCache = true\n ) {\n super(\n storageService,\n secureStorageService,\n memoryStorageService,\n logService,\n stateMigrationService,\n stateFactory,\n useAccountCache\n );\n }\n\n async addAccount(account: Account) {\n // Apply web overrides to default account values\n account = new Account(account);\n await super.addAccount(account);\n }\n\n async getRememberEmail(options?: StorageOptions) {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.rememberEmail;\n }\n\n async setRememberEmail(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.rememberEmail = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEncryptedCiphers(options?: StorageOptions): Promise<{ [id: string]: CipherData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedCiphers(options);\n }\n\n async setEncryptedCiphers(\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedCiphers(value, options);\n }\n\n async getEncryptedCollections(\n options?: StorageOptions\n ): Promise<{ [id: string]: CollectionData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedCollections(options);\n }\n\n async setEncryptedCollections(\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedCollections(value, options);\n }\n\n async getEncryptedFolders(options?: StorageOptions): Promise<{ [id: string]: FolderData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedFolders(options);\n }\n\n async setEncryptedFolders(\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedFolders(value, options);\n }\n\n async getEncryptedSends(options?: StorageOptions): Promise<{ [id: string]: SendData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedSends(options);\n }\n\n async setEncryptedSends(\n value: { [id: string]: SendData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedSends(value, options);\n }\n\n override async getLastSync(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getLastSync(options);\n }\n\n override async setLastSync(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setLastSync(value, options);\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { OrganizationInformationComponent } from \"./organization-information.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [OrganizationInformationComponent],\n exports: [OrganizationInformationComponent],\n})\nexport class OrganizationCreateModule {}\n","
\n \n {{ \"organizationName\" | i18n }}\n \n \n
\n
\n

{{ \"generalInformation\" | i18n }}

\n
\n \n {{ \"organizationName\" | i18n }}\n \n \n \n {{ \"billingEmail\" | i18n }}\n \n \n \n {{ \"clientOwnerEmail\" | i18n }}\n \n \n
\n
\n \n {{ \"accountOwnedBusiness\" | i18n }}\n
\n \n {{ \"businessName\" | i18n }}\n \n \n
\n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { UntypedFormGroup } from \"@angular/forms\";\n\n@Component({\n selector: \"app-org-info\",\n templateUrl: \"organization-information.component.html\",\n})\nexport class OrganizationInformationComponent {\n @Input() nameOnly = false;\n @Input() createOrganization = true;\n @Input() isProvider = false;\n @Input() acceptingSponsorship = false;\n @Input() formGroup: UntypedFormGroup;\n @Output() changedBusinessOwned = new EventEmitter();\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport {\n canAccessOrgAdmin,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class OrganizationPermissionsGuard implements CanActivate {\n constructor(\n private router: Router,\n private organizationService: OrganizationService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private syncService: SyncService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n // TODO: We need to fix this issue once and for all.\n if ((await this.syncService.getLastSync()) == null) {\n await this.syncService.fullSync(false);\n }\n\n const org = this.organizationService.get(route.params.organizationId);\n if (org == null) {\n return this.router.createUrlTree([\"/\"]);\n }\n\n if (!org.isOwner && !org.enabled) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"organizationIsDisabled\")\n );\n return this.router.createUrlTree([\"/\"]);\n }\n\n const permissionsCallback: (organization: Organization) => boolean =\n route.data?.organizationPermissions;\n const hasPermissions = permissionsCallback == null || permissionsCallback(org);\n\n if (!hasPermissions) {\n // Handle linkable ciphers for organizations the user only has view access to\n // https://bitwarden.atlassian.net/browse/EC-203\n const cipherId =\n state.root.queryParamMap.get(\"itemId\") || state.root.queryParamMap.get(\"cipherId\");\n if (cipherId) {\n return this.router.createUrlTree([\"/vault\"], {\n queryParams: {\n itemId: cipherId,\n },\n });\n }\n\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"accessDenied\"));\n return canAccessOrgAdmin(org)\n ? this.router.createUrlTree([\"/organizations\", org.id])\n : this.router.createUrlTree([\"/\"]);\n }\n\n return true;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport {\n canAccessOrgAdmin,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class OrganizationRedirectGuard implements CanActivate {\n constructor(private router: Router, private organizationService: OrganizationService) {}\n\n async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n const org = this.organizationService.get(route.params.organizationId);\n\n const customRedirect = route.data?.autoRedirectCallback;\n if (customRedirect) {\n let redirectPath = customRedirect(org);\n if (typeof redirectPath === \"string\") {\n redirectPath = [redirectPath];\n }\n return this.router.createUrlTree([state.url, ...redirectPath]);\n }\n\n if (canAccessOrgAdmin(org)) {\n return this.router.createUrlTree([\"/organizations\", org.id]);\n }\n return this.router.createUrlTree([\"/\"]);\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\n\nexport class PolicyRequest {\n type: PolicyType;\n enabled: boolean;\n data: any;\n}\n","import { Directive, Input, OnInit } from \"@angular/core\";\nimport { UntypedFormControl, UntypedFormGroup } from \"@angular/forms\";\n\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { PolicyRequest } from \"@bitwarden/common/models/request/policy.request\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policy.response\";\n\nexport abstract class BasePolicy {\n abstract name: string;\n abstract description: string;\n abstract type: PolicyType;\n abstract component: any;\n\n display(organization: Organization) {\n return true;\n }\n}\n\n@Directive()\nexport abstract class BasePolicyComponent implements OnInit {\n @Input() policyResponse: PolicyResponse;\n @Input() policy: BasePolicy;\n\n enabled = new UntypedFormControl(false);\n data: UntypedFormGroup = null;\n\n ngOnInit(): void {\n this.enabled.setValue(this.policyResponse.enabled);\n\n if (this.policyResponse.data != null) {\n this.loadData();\n }\n }\n\n loadData() {\n this.data.patchValue(this.policyResponse.data ?? {});\n }\n\n buildRequestData() {\n if (this.data != null) {\n return this.data.value;\n }\n\n return null;\n }\n\n buildRequest(policiesEnabledMap: Map) {\n const request = new PolicyRequest();\n request.enabled = this.enabled.value;\n request.type = this.policy.type;\n request.data = this.buildRequestData();\n\n return Promise.resolve(request);\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { LooseComponentsModule, SharedModule } from \"../../shared\";\n\nimport { DisableSendPolicyComponent } from \"./disable-send.component\";\nimport { MasterPasswordPolicyComponent } from \"./master-password.component\";\nimport { PasswordGeneratorPolicyComponent } from \"./password-generator.component\";\nimport { PersonalOwnershipPolicyComponent } from \"./personal-ownership.component\";\nimport { PoliciesComponent } from \"./policies.component\";\nimport { PolicyEditComponent } from \"./policy-edit.component\";\nimport { RequireSsoPolicyComponent } from \"./require-sso.component\";\nimport { ResetPasswordPolicyComponent } from \"./reset-password.component\";\nimport { SendOptionsPolicyComponent } from \"./send-options.component\";\nimport { SingleOrgPolicyComponent } from \"./single-org.component\";\nimport { TwoFactorAuthenticationPolicyComponent } from \"./two-factor-authentication.component\";\n\n@NgModule({\n imports: [SharedModule, LooseComponentsModule],\n declarations: [\n DisableSendPolicyComponent,\n MasterPasswordPolicyComponent,\n PasswordGeneratorPolicyComponent,\n PersonalOwnershipPolicyComponent,\n RequireSsoPolicyComponent,\n ResetPasswordPolicyComponent,\n SendOptionsPolicyComponent,\n SingleOrgPolicyComponent,\n TwoFactorAuthenticationPolicyComponent,\n PoliciesComponent,\n PolicyEditComponent,\n ],\n exports: [\n DisableSendPolicyComponent,\n MasterPasswordPolicyComponent,\n PasswordGeneratorPolicyComponent,\n PersonalOwnershipPolicyComponent,\n RequireSsoPolicyComponent,\n ResetPasswordPolicyComponent,\n SendOptionsPolicyComponent,\n SingleOrgPolicyComponent,\n TwoFactorAuthenticationPolicyComponent,\n PoliciesComponent,\n PolicyEditComponent,\n ],\n})\nexport class PoliciesModule {}\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class DisableSendPolicy extends BasePolicy {\n name = \"disableSend\";\n description = \"disableSendPolicyDesc\";\n type = PolicyType.DisableSend;\n component = DisableSendPolicyComponent;\n}\n\n@Component({\n selector: \"policy-disable-send\",\n templateUrl: \"disable-send.component.html\",\n})\nexport class DisableSendPolicyComponent extends BasePolicyComponent {}\n","\n {{ \"disableSendExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","\n {{ \"keyConnectorPolicyRestriction\" | i18n }}\n\n\n
\n
\n
\n \n \n
\n
\n\n
\n
\n \n \n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class MasterPasswordPolicy extends BasePolicy {\n name = \"masterPassPolicyTitle\";\n description = \"masterPassPolicyDesc\";\n type = PolicyType.MasterPassword;\n component = MasterPasswordPolicyComponent;\n}\n\n@Component({\n selector: \"policy-master-password\",\n templateUrl: \"master-password.component.html\",\n})\nexport class MasterPasswordPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n minComplexity: [null],\n minLength: [null],\n requireUpper: [null],\n requireLower: [null],\n requireNumbers: [null],\n requireSpecial: [null],\n });\n\n passwordScores: { name: string; value: number }[];\n showKeyConnectorInfo = false;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n i18nService: I18nService,\n private organizationService: OrganizationService\n ) {\n super();\n\n this.passwordScores = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: i18nService.t(\"weak\") + \" (0)\", value: 0 },\n { name: i18nService.t(\"weak\") + \" (1)\", value: 1 },\n { name: i18nService.t(\"weak\") + \" (2)\", value: 2 },\n { name: i18nService.t(\"good\") + \" (3)\", value: 3 },\n { name: i18nService.t(\"strong\") + \" (4)\", value: 4 },\n ];\n }\n\n async ngOnInit() {\n super.ngOnInit();\n const organization = await this.organizationService.get(this.policyResponse.organizationId);\n this.showKeyConnectorInfo = organization.keyConnectorEnabled;\n }\n}\n","
\n
\n
\n \n \n
\n
\n\n
\n
\n \n \n \n \n
\n
\n

{{ \"password\" | i18n }}

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

{{ \"passphrase\" | i18n }}

\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class PasswordGeneratorPolicy extends BasePolicy {\n name = \"passwordGenerator\";\n description = \"passwordGeneratorPolicyDesc\";\n type = PolicyType.PasswordGenerator;\n component = PasswordGeneratorPolicyComponent;\n}\n\n@Component({\n selector: \"policy-password-generator\",\n templateUrl: \"password-generator.component.html\",\n})\nexport class PasswordGeneratorPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n defaultType: [null],\n minLength: [null],\n useUpper: [null],\n useLower: [null],\n useNumbers: [null],\n useSpecial: [null],\n minNumbers: [null],\n minSpecial: [null],\n minNumberWords: [null],\n capitalize: [null],\n includeNumber: [null],\n });\n\n defaultTypes: { name: string; value: string }[];\n\n constructor(private formBuilder: UntypedFormBuilder, i18nService: I18nService) {\n super();\n\n this.defaultTypes = [\n { name: i18nService.t(\"userPreference\"), value: null },\n { name: i18nService.t(\"password\"), value: \"password\" },\n { name: i18nService.t(\"passphrase\"), value: \"passphrase\" },\n ];\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class PersonalOwnershipPolicy extends BasePolicy {\n name = \"personalOwnership\";\n description = \"personalOwnershipPolicyDesc\";\n type = PolicyType.PersonalOwnership;\n component = PersonalOwnershipPolicyComponent;\n}\n\n@Component({\n selector: \"policy-personal-ownership\",\n templateUrl: \"personal-ownership.component.html\",\n})\nexport class PersonalOwnershipPolicyComponent extends BasePolicyComponent {}\n","\n {{ \"personalOwnershipExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { PolicyRequest } from \"@bitwarden/common/models/request/policy.request\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class RequireSsoPolicy extends BasePolicy {\n name = \"requireSso\";\n description = \"requireSsoPolicyDesc\";\n type = PolicyType.RequireSso;\n component = RequireSsoPolicyComponent;\n\n display(organization: Organization) {\n return organization.useSso;\n }\n}\n\n@Component({\n selector: \"policy-require-sso\",\n templateUrl: \"require-sso.component.html\",\n})\nexport class RequireSsoPolicyComponent extends BasePolicyComponent {\n constructor(private i18nService: I18nService) {\n super();\n }\n\n buildRequest(policiesEnabledMap: Map): Promise {\n const singleOrgEnabled = policiesEnabledMap.get(PolicyType.SingleOrg) ?? false;\n if (this.enabled.value && !singleOrgEnabled) {\n throw new Error(this.i18nService.t(\"requireSsoPolicyReqError\"));\n }\n\n return super.buildRequest(policiesEnabledMap);\n }\n}\n","\n {{ \"requireSsoPolicyReq\" | i18n }}\n\n\n {{ \"requireSsoExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","\n {{ \"keyConnectorPolicyRestriction\" | i18n }}\n\n\n\n {{ \"resetPasswordPolicyWarning\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n\n
\n

{{ \"resetPasswordPolicyAutoEnroll\" | i18n }}

\n

{{ \"resetPasswordPolicyAutoEnrollDescription\" | i18n }}

\n \n {{ \"resetPasswordPolicyAutoEnrollWarning\" | i18n }}\n \n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\n\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class ResetPasswordPolicy extends BasePolicy {\n name = \"resetPasswordPolicy\";\n description = \"resetPasswordPolicyDescription\";\n type = PolicyType.ResetPassword;\n component = ResetPasswordPolicyComponent;\n\n display(organization: Organization) {\n return organization.useResetPassword;\n }\n}\n\n@Component({\n selector: \"policy-reset-password\",\n templateUrl: \"reset-password.component.html\",\n})\nexport class ResetPasswordPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n autoEnrollEnabled: false,\n });\n\n defaultTypes: { name: string; value: string }[];\n showKeyConnectorInfo = false;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private organizationService: OrganizationService\n ) {\n super();\n }\n\n async ngOnInit() {\n super.ngOnInit();\n const organization = await this.organizationService.get(this.policyResponse.organizationId);\n this.showKeyConnectorInfo = organization.keyConnectorEnabled;\n }\n}\n","import { Component } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\n\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class SendOptionsPolicy extends BasePolicy {\n name = \"sendOptions\";\n description = \"sendOptionsPolicyDesc\";\n type = PolicyType.SendOptions;\n component = SendOptionsPolicyComponent;\n}\n\n@Component({\n selector: \"policy-send-options\",\n templateUrl: \"send-options.component.html\",\n})\nexport class SendOptionsPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n disableHideEmail: false,\n });\n\n constructor(private formBuilder: UntypedFormBuilder) {\n super();\n }\n}\n","\n {{ \"sendOptionsExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n\n
\n

{{ \"options\" | i18n }}

\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { PolicyRequest } from \"@bitwarden/common/models/request/policy.request\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class SingleOrgPolicy extends BasePolicy {\n name = \"singleOrg\";\n description = \"singleOrgDesc\";\n type = PolicyType.SingleOrg;\n component = SingleOrgPolicyComponent;\n}\n\n@Component({\n selector: \"policy-single-org\",\n templateUrl: \"single-org.component.html\",\n})\nexport class SingleOrgPolicyComponent extends BasePolicyComponent {\n constructor(private i18nService: I18nService) {\n super();\n }\n\n buildRequest(policiesEnabledMap: Map): Promise {\n if (!this.enabled.value) {\n if (policiesEnabledMap.get(PolicyType.RequireSso) ?? false) {\n throw new Error(\n this.i18nService.t(\"disableRequiredError\", this.i18nService.t(\"requireSso\"))\n );\n }\n\n if (policiesEnabledMap.get(PolicyType.MaximumVaultTimeout) ?? false) {\n throw new Error(\n this.i18nService.t(\"disableRequiredError\", this.i18nService.t(\"maximumVaultTimeoutLabel\"))\n );\n }\n }\n\n return super.buildRequest(policiesEnabledMap);\n }\n}\n","\n {{ \"singleOrgPolicyWarning\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class TwoFactorAuthenticationPolicy extends BasePolicy {\n name = \"twoStepLoginPolicyTitle\";\n description = \"twoStepLoginPolicyDesc\";\n type = PolicyType.TwoFactorAuthentication;\n component = TwoFactorAuthenticationPolicyComponent;\n}\n\n@Component({\n selector: \"policy-two-factor-authentication\",\n templateUrl: \"two-factor-authentication.component.html\",\n})\nexport class TwoFactorAuthenticationPolicyComponent extends BasePolicyComponent {}\n","\n {{ \"twoStepLoginPolicyWarning\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","
\n
\n \n
\n

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

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

{{ policy.description | i18n }}

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

{{ \"policies\" | i18n }}

\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n \n \n \n \n \n
\n {{ p.name | i18n }}\n {{\n \"on\" | i18n\n }}\n {{ p.description | i18n }}\n
\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policy.response\";\n\nimport { PolicyListService } from \"../../core\";\nimport { BasePolicy } from \"../policies\";\n\nimport { PolicyEditComponent } from \"./policy-edit.component\";\n\n@Component({\n selector: \"app-org-policies\",\n templateUrl: \"policies.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class PoliciesComponent implements OnInit {\n @ViewChild(\"editTemplate\", { read: ViewContainerRef, static: true })\n editModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n policies: BasePolicy[];\n organization: Organization;\n\n private orgPolicies: PolicyResponse[];\n private policiesEnabledMap: Map = new Map();\n\n constructor(\n private route: ActivatedRoute,\n private modalService: ModalService,\n private organizationService: OrganizationService,\n private policyApiService: PolicyApiServiceAbstraction,\n private policyListService: PolicyListService,\n private router: Router\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n this.organization = await this.organizationService.get(this.organizationId);\n this.policies = this.policyListService.getPolicies();\n\n await this.load();\n\n // Handle policies component launch from Event message\n /* eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe */\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.policyId != null) {\n const policyIdFromEvents: string = qParams.policyId;\n for (const orgPolicy of this.orgPolicies) {\n if (orgPolicy.id === policyIdFromEvents) {\n for (let i = 0; i < this.policies.length; i++) {\n if (this.policies[i].type === orgPolicy.type) {\n this.edit(this.policies[i]);\n break;\n }\n }\n break;\n }\n }\n }\n });\n });\n }\n\n async load() {\n const response = await this.policyApiService.getPolicies(this.organizationId);\n this.orgPolicies = response.data != null && response.data.length > 0 ? response.data : [];\n this.orgPolicies.forEach((op) => {\n this.policiesEnabledMap.set(op.type, op.enabled);\n });\n\n this.loading = false;\n }\n\n async edit(policy: BasePolicy) {\n const [modal] = await this.modalService.openViewRef(\n PolicyEditComponent,\n this.editModalRef,\n (comp) => {\n comp.policy = policy;\n comp.organizationId = this.organizationId;\n comp.policiesEnabledMap = this.policiesEnabledMap;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onSavedPolicy.subscribe(() => {\n modal.close();\n this.load();\n });\n }\n );\n }\n}\n","import { OrganizationKeysRequest } from \"./organization-keys.request\";\n\nexport class OrganizationUpdateRequest {\n name: string;\n /**\n * @deprecated 2022-08-03 Moved to OrganizationSsoRequest, left for backwards compatability.\n * https://bitwarden.atlassian.net/browse/EC-489\n */\n identifier: string;\n businessName: string;\n billingEmail: string;\n keys: OrganizationKeysRequest;\n}\n","
\n
\n \n
\n

{{ \"deleteOrganization\" | i18n }}

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

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

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

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

{{ \"organizationInfo\" | i18n }}

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

{{ \"apiKey\" | i18n }}

\n
\n

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

\n \n \n
\n
\n

{{ \"dangerZone\" | i18n }}

\n
\n
\n
\n

{{ \"dangerZoneDesc\" | i18n }}

\n \n \n
\n
\n\n\n\n\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { OrganizationKeysRequest } from \"@bitwarden/common/models/request/organization-keys.request\";\nimport { OrganizationUpdateRequest } from \"@bitwarden/common/models/request/organization-update.request\";\nimport { OrganizationResponse } from \"@bitwarden/common/models/response/organization.response\";\n\nimport { ApiKeyComponent } from \"../../settings/api-key.component\";\nimport { PurgeVaultComponent } from \"../../settings/purge-vault.component\";\n\nimport { DeleteOrganizationComponent } from \"./delete-organization.component\";\n\n@Component({\n selector: \"app-org-account\",\n templateUrl: \"account.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class AccountComponent {\n @ViewChild(\"deleteOrganizationTemplate\", { read: ViewContainerRef, static: true })\n deleteModalRef: ViewContainerRef;\n @ViewChild(\"purgeOrganizationTemplate\", { read: ViewContainerRef, static: true })\n purgeModalRef: ViewContainerRef;\n @ViewChild(\"apiKeyTemplate\", { read: ViewContainerRef, static: true })\n apiKeyModalRef: ViewContainerRef;\n @ViewChild(\"rotateApiKeyTemplate\", { read: ViewContainerRef, static: true })\n rotateApiKeyModalRef: ViewContainerRef;\n\n selfHosted = false;\n canManageBilling = true;\n loading = true;\n canUseApi = false;\n org: OrganizationResponse;\n formPromise: Promise;\n taxFormPromise: Promise;\n\n private organizationId: string;\n\n constructor(\n private modalService: ModalService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private logService: LogService,\n private router: Router,\n private organizationService: OrganizationService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n this.canManageBilling = this.organizationService.get(this.organizationId).canManageBilling;\n try {\n this.org = await this.organizationApiService.get(this.organizationId);\n this.canUseApi = this.org.useApi;\n } catch (e) {\n this.logService.error(e);\n }\n });\n this.loading = false;\n }\n\n async submit() {\n try {\n const request = new OrganizationUpdateRequest();\n request.name = this.org.name;\n request.businessName = this.org.businessName;\n request.billingEmail = this.org.billingEmail;\n request.identifier = this.org.identifier;\n\n // Backfill pub/priv key if necessary\n if (!this.org.hasPublicAndPrivateKeys) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n }\n\n this.formPromise = this.organizationApiService.save(this.organizationId, request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"organizationUpdated\")\n );\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async deleteOrganization() {\n await this.modalService.openViewRef(\n DeleteOrganizationComponent,\n this.deleteModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onSuccess.subscribe(() => {\n this.router.navigate([\"/\"]);\n });\n }\n );\n }\n\n async purgeVault() {\n await this.modalService.openViewRef(PurgeVaultComponent, this.purgeModalRef, (comp) => {\n comp.organizationId = this.organizationId;\n });\n }\n\n async viewApiKey() {\n await this.modalService.openViewRef(ApiKeyComponent, this.apiKeyModalRef, (comp) => {\n comp.keyType = \"organization\";\n comp.entityId = this.organizationId;\n comp.postKey = this.organizationApiService.getOrCreateApiKey.bind(\n this.organizationApiService\n );\n comp.scope = \"api.organization\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"apiKeyWarning\";\n comp.apiKeyDescription = \"apiKeyDesc\";\n });\n }\n\n async rotateApiKey() {\n await this.modalService.openViewRef(ApiKeyComponent, this.rotateApiKeyModalRef, (comp) => {\n comp.keyType = \"organization\";\n comp.isRotation = true;\n comp.entityId = this.organizationId;\n comp.postKey = this.organizationApiService.rotateApiKey.bind(this.organizationApiService);\n comp.scope = \"api.organization\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"apiKeyWarning\";\n comp.apiKeyDescription = \"apiKeyRotateDesc\";\n });\n }\n}\n","
\n

{{ \"twoStepLogin\" | i18n }}

\n

{{ \"twoStepLoginEnforcement\" | i18n }}

\n
\n

{{ \"twoStepLoginDesc\" | i18n }}

\n\n

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

\n

{{ \"twoStepLoginOrganizationSsoDesc\" | i18n }}

\n
\n\n

{{ \"twoStepLoginRecoveryWarning\" | i18n }}

\n \n
\n

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

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

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

    \n {{ p.description }}\n
    \n
    \n \n {{ \"manage\" | i18n }}\n \n
    \n
  • \n
\n\n\n\n\n\n\n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\n\nimport { TwoFactorDuoComponent } from \"../../settings/two-factor-duo.component\";\nimport { TwoFactorSetupComponent as BaseTwoFactorSetupComponent } from \"../../settings/two-factor-setup.component\";\n\n@Component({\n selector: \"app-two-factor-setup\",\n templateUrl: \"../../settings/two-factor-setup.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class TwoFactorSetupComponent extends BaseTwoFactorSetupComponent {\n constructor(\n apiService: ApiService,\n modalService: ModalService,\n messagingService: MessagingService,\n policyService: PolicyService,\n private route: ActivatedRoute,\n stateService: StateService\n ) {\n super(apiService, modalService, messagingService, policyService, stateService);\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await super.ngOnInit();\n });\n }\n\n async manage(type: TwoFactorProviderType) {\n switch (type) {\n case TwoFactorProviderType.OrganizationDuo: {\n const duoComp = await this.openModal(this.duoModalRef, TwoFactorDuoComponent);\n duoComp.type = TwoFactorProviderType.OrganizationDuo;\n duoComp.organizationId = this.organizationId;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n duoComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.OrganizationDuo);\n });\n break;\n }\n default:\n break;\n }\n }\n\n protected getTwoFactorProviders() {\n return this.apiService.getTwoFactorOrganizationProviders(this.organizationId);\n }\n\n protected filterProvider(type: TwoFactorProviderType) {\n return type !== TwoFactorProviderType.OrganizationDuo;\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { canAccessSettingsTab } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\nimport { OrganizationPermissionsGuard } from \"../guards/org-permissions.guard\";\nimport { OrganizationRedirectGuard } from \"../guards/org-redirect.guard\";\nimport { PoliciesComponent } from \"../policies\";\n\nimport { AccountComponent } from \"./account.component\";\nimport { SettingsComponent } from \"./settings.component\";\nimport { TwoFactorSetupComponent } from \"./two-factor-setup.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: SettingsComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: { organizationPermissions: canAccessSettingsTab },\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n canActivate: [OrganizationRedirectGuard],\n data: {\n autoRedirectCallback: getSettingsRoute,\n },\n children: [], // This is required to make the auto redirect work,\n },\n { path: \"account\", component: AccountComponent, data: { titleId: \"organizationInfo\" } },\n {\n path: \"two-factor\",\n component: TwoFactorSetupComponent,\n data: { titleId: \"twoStepLogin\" },\n },\n {\n path: \"policies\",\n component: PoliciesComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: (org: Organization) => org.canManagePolicies,\n titleId: \"policies\",\n },\n },\n {\n path: \"tools\",\n loadChildren: () =>\n import(\"../tools/import-export/org-import-export.module\").then(\n (m) => m.OrganizationImportExportModule\n ),\n },\n ],\n },\n];\n\nfunction getSettingsRoute(organization: Organization) {\n if (organization.isOwner) {\n return \"account\";\n }\n if (organization.canManagePolicies) {\n return \"policies\";\n }\n if (organization.canAccessImportExport) {\n return [\"tools\", \"import\"];\n }\n if (organization.canManageSso) {\n return \"sso\";\n }\n if (organization.canManageScim) {\n return \"scim\";\n }\n return undefined;\n}\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class OrganizationSettingsRoutingModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { LooseComponentsModule, SharedModule } from \"../../shared\";\nimport { PoliciesModule } from \"../policies\";\n\nimport { AccountComponent } from \"./account.component\";\nimport { DeleteOrganizationComponent } from \"./delete-organization.component\";\nimport { OrganizationSettingsRoutingModule } from \"./organization-settings-routing.module\";\nimport { SettingsComponent } from \"./settings.component\";\nimport { TwoFactorSetupComponent } from \"./two-factor-setup.component\";\n\n@NgModule({\n imports: [SharedModule, LooseComponentsModule, PoliciesModule, OrganizationSettingsRoutingModule],\n declarations: [\n SettingsComponent,\n AccountComponent,\n DeleteOrganizationComponent,\n TwoFactorSetupComponent,\n ],\n})\nexport class OrganizationSettingsModule {}\n","
\n
\n
\n
\n
{{ \"settings\" | i18n }}
\n
\n \n {{ \"organizationInfo\" | i18n }}\n \n \n {{ \"policies\" | i18n }}\n \n \n {{ \"twoStepLogin\" | i18n }}\n \n \n {{ \"importData\" | i18n }}\n \n \n {{ \"exportVault\" | i18n }}\n \n \n {{ \"singleSignOn\" | i18n }}\n \n \n {{ \"scim\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n
\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { Subject, switchMap, takeUntil } from \"rxjs\";\n\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-org-settings\",\n templateUrl: \"settings.component.html\",\n})\nexport class SettingsComponent implements OnInit, OnDestroy {\n organization: Organization;\n\n private destroy$ = new Subject();\n\n constructor(private route: ActivatedRoute, private organizationService: OrganizationService) {}\n\n ngOnInit() {\n this.route.params\n .pipe(\n switchMap(async (params) => await this.organizationService.get(params.organizationId)),\n takeUntil(this.destroy$)\n )\n .subscribe((organization) => {\n this.organization = organization;\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","
\n
\n \n
\n

{{ title }}

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

{{ \"ownership\" | i18n }}

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

{{ \"collections\" | i18n }}

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

{{ \"options\" | i18n }}

\n
\n \n \n \n \n \n
\n
\n \n
\n \n \n {{ (cipher?.isDeleted ? \"restore\" : \"save\") | i18n }}\n \n \n
\n \n \n \n \n \n \n \n
\n
\n \n \n\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { EventService } from \"@bitwarden/common/abstractions/event.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { CipherData } from \"@bitwarden/common/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherCreateRequest } from \"@bitwarden/common/models/request/cipher-create.request\";\nimport { CipherRequest } from \"@bitwarden/common/models/request/cipher.request\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"../../vault/add-edit.component\";\n\n@Component({\n selector: \"app-org-vault-add-edit\",\n templateUrl: \"../../vault/add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n organization: Organization;\n originalCipher: Cipher = null;\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n totpService: TotpService,\n passwordGenerationService: PasswordGenerationService,\n private apiService: ApiService,\n messagingService: MessagingService,\n eventService: EventService,\n policyService: PolicyService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService,\n organizationService: OrganizationService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n totpService,\n passwordGenerationService,\n messagingService,\n eventService,\n policyService,\n organizationService,\n logService,\n passwordRepromptService\n );\n }\n\n protected allowOwnershipAssignment() {\n if (\n this.ownershipOptions != null &&\n (this.ownershipOptions.length > 1 || !this.allowPersonal)\n ) {\n if (this.organization != null) {\n return this.cloneMode && this.organization.canEditAnyCollection;\n } else {\n return !this.editMode || this.cloneMode;\n }\n }\n return false;\n }\n\n protected loadCollections() {\n if (!this.organization.canEditAnyCollection) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected async loadCipher() {\n if (!this.organization.canEditAnyCollection) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n const data = new CipherData(response);\n\n data.edit = true;\n const cipher = new Cipher(data);\n this.originalCipher = cipher;\n return cipher;\n }\n\n protected encryptCipher() {\n if (!this.organization.canEditAnyCollection) {\n return super.encryptCipher();\n }\n return this.cipherService.encrypt(this.cipher, null, this.originalCipher);\n }\n\n protected async saveCipher(cipher: Cipher) {\n if (!this.organization.canEditAnyCollection || cipher.organizationId == null) {\n return super.saveCipher(cipher);\n }\n if (this.editMode && !this.cloneMode) {\n const request = new CipherRequest(cipher);\n return this.apiService.putCipherAdmin(this.cipherId, request);\n } else {\n const request = new CipherCreateRequest(cipher);\n return this.apiService.postCipherAdmin(request);\n }\n }\n\n protected async deleteCipher() {\n if (!this.organization.canEditAnyCollection) {\n return super.deleteCipher();\n }\n return this.cipher.isDeleted\n ? this.apiService.deleteCipherAdmin(this.cipherId)\n : this.apiService.putDeleteCipherAdmin(this.cipherId);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from \"@angular/router\";\n\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class HasPremiumGuard implements CanActivate {\n constructor(\n private router: Router,\n private stateService: StateService,\n private messagingService: MessagingService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {\n const userHasPremium = await this.stateService.getCanAccessPremium();\n\n if (!userHasPremium) {\n this.messagingService.send(\"premiumRequired\");\n }\n\n // Prevent trapping the user on the login page, since that's an awful UX flow\n if (!userHasPremium && this.router.url === \"/login\") {\n return this.router.createUrlTree([\"/\"]);\n }\n\n return userHasPremium;\n }\n}\n","
\n

{{ \"dataBreachReport\" | i18n }}

\n
\n

{{ \"breachDesc\" | i18n }}

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

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

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

    {{ a.title }}

    \n

    \n

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

    \n
      \n
    • {{ d }}
    • \n
    \n
    \n
    \n
    \n
    {{ \"website\" | i18n }}
    \n
    {{ a.domain }}
    \n
    {{ \"affectedUsers\" | i18n }}
    \n
    {{ a.pwnCount | number }}
    \n
    {{ \"breachOccurred\" | i18n }}
    \n
    {{ a.breachDate | date: \"mediumDate\" }}
    \n
    {{ \"breachReported\" | i18n }}
    \n
    {{ a.addedDate | date: \"mediumDate\" }}
    \n
    \n
    \n
    \n
  • \n
\n
\n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { BreachAccountResponse } from \"@bitwarden/common/models/response/breach-account.response\";\n\n@Component({\n selector: \"app-breach-report\",\n templateUrl: \"breach-report.component.html\",\n})\nexport class BreachReportComponent implements OnInit {\n error = false;\n username: string;\n checkedUsername: string;\n breachedAccounts: BreachAccountResponse[] = [];\n formPromise: Promise;\n\n constructor(private auditService: AuditService, private stateService: StateService) {}\n\n async ngOnInit() {\n this.username = await this.stateService.getEmail();\n }\n\n async submit() {\n this.error = false;\n this.username = this.username.toLowerCase();\n try {\n this.formPromise = this.auditService.breachedAccounts(this.username);\n this.breachedAccounts = await this.formPromise;\n } catch {\n this.error = true;\n }\n this.checkedUsername = this.username;\n }\n}\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const ReportBreach = svgIcon`\n \n \n \n \n \n \n \n \n \n \n`;\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const ReportExposedPasswords = svgIcon`\n \n \n \n \n \n \n \n \n \n \n \n \n`;\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const ReportInactiveTwoFactor = svgIcon`\n \n \n \n \n \n \n`;\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const ReportReusedPasswords = svgIcon`\n \n \n \n \n \n`;\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const ReportUnsecuredWebsites = svgIcon`\n \n \n \n \n \n \n \n \n`;\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const ReportWeakPasswords = svgIcon`\n \n \n \n \n \n \n`;\n","import { ReportBreach } from \"./icons/report-breach.icon\";\nimport { ReportExposedPasswords } from \"./icons/report-exposed-passwords.icon\";\nimport { ReportInactiveTwoFactor } from \"./icons/report-inactive-two-factor.icon\";\nimport { ReportReusedPasswords } from \"./icons/report-reused-passwords.icon\";\nimport { ReportUnsecuredWebsites } from \"./icons/report-unsecured-websites.icon\";\nimport { ReportWeakPasswords } from \"./icons/report-weak-passwords.icon\";\nimport { ReportEntry } from \"./shared\";\n\nexport enum ReportType {\n ExposedPasswords = \"exposedPasswords\",\n ReusedPasswords = \"reusedPasswords\",\n WeakPasswords = \"weakPasswords\",\n UnsecuredWebsites = \"unsecuredWebsites\",\n Inactive2fa = \"inactive2fa\",\n DataBreach = \"dataBreach\",\n}\n\ntype ReportWithoutVariant = Omit;\n\nexport const reports: Record = {\n [ReportType.ExposedPasswords]: {\n title: \"exposedPasswordsReport\",\n description: \"exposedPasswordsReportDesc\",\n route: \"exposed-passwords-report\",\n icon: ReportExposedPasswords,\n },\n [ReportType.ReusedPasswords]: {\n title: \"reusedPasswordsReport\",\n description: \"reusedPasswordsReportDesc\",\n route: \"reused-passwords-report\",\n icon: ReportReusedPasswords,\n },\n [ReportType.WeakPasswords]: {\n title: \"weakPasswordsReport\",\n description: \"weakPasswordsReportDesc\",\n route: \"weak-passwords-report\",\n icon: ReportWeakPasswords,\n },\n [ReportType.UnsecuredWebsites]: {\n title: \"unsecuredWebsitesReport\",\n description: \"unsecuredWebsitesReportDesc\",\n route: \"unsecured-websites-report\",\n icon: ReportUnsecuredWebsites,\n },\n [ReportType.Inactive2fa]: {\n title: \"inactive2faReport\",\n description: \"inactive2faReportDesc\",\n route: \"inactive-two-factor-report\",\n icon: ReportInactiveTwoFactor,\n },\n [ReportType.DataBreach]: {\n title: \"dataBreachReport\",\n description: \"breachDesc\",\n route: \"breach-report\",\n icon: ReportBreach,\n },\n};\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared/shared.module\";\n\nimport { ReportCardComponent } from \"./report-card/report-card.component\";\nimport { ReportListComponent } from \"./report-list/report-list.component\";\n\n@NgModule({\n imports: [CommonModule, SharedModule],\n declarations: [ReportCardComponent, ReportListComponent],\n exports: [ReportCardComponent, ReportListComponent],\n})\nexport class ReportsSharedModule {}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\nimport { reports, ReportType } from \"../reports\";\nimport { ReportEntry, ReportVariant } from \"../shared\";\n\n@Component({\n selector: \"app-reports-home\",\n templateUrl: \"reports-home.component.html\",\n})\nexport class ReportsHomeComponent implements OnInit {\n reports: ReportEntry[];\n\n constructor(private stateService: StateService) {}\n\n async ngOnInit(): Promise {\n const userHasPremium = await this.stateService.getCanAccessPremium();\n\n const reportRequiresPremium = userHasPremium\n ? ReportVariant.Enabled\n : ReportVariant.RequiresPremium;\n\n this.reports = [\n {\n ...reports[ReportType.ExposedPasswords],\n variant: reportRequiresPremium,\n },\n {\n ...reports[ReportType.ReusedPasswords],\n variant: reportRequiresPremium,\n },\n {\n ...reports[ReportType.WeakPasswords],\n variant: reportRequiresPremium,\n },\n {\n ...reports[ReportType.UnsecuredWebsites],\n variant: reportRequiresPremium,\n },\n {\n ...reports[ReportType.Inactive2fa],\n variant: reportRequiresPremium,\n },\n {\n ...reports[ReportType.DataBreach],\n variant: ReportVariant.Enabled,\n },\n ];\n }\n}\n","
\n

{{ \"reports\" | i18n }}

\n
\n\n

{{ \"reportsDesc\" | i18n }}

\n\n\n","\n","import { Component, OnDestroy } from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { Subscription } from \"rxjs\";\nimport { filter } from \"rxjs/operators\";\n\n@Component({\n selector: \"app-reports-layout\",\n templateUrl: \"reports-layout.component.html\",\n})\nexport class ReportsLayoutComponent implements OnDestroy {\n homepage = true;\n subscription: Subscription;\n\n constructor(router: Router) {\n this.subscription = router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n .subscribe((event) => {\n this.homepage = (event as NavigationEnd).url == \"/reports\";\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"@bitwarden/angular/guards/auth.guard\";\n\nimport { HasPremiumGuard } from \"../shared/guards/has-premium.guard\";\n\nimport { BreachReportComponent } from \"./pages/breach-report.component\";\nimport { ExposedPasswordsReportComponent } from \"./pages/exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent } from \"./pages/inactive-two-factor-report.component\";\nimport { ReportsHomeComponent } from \"./pages/reports-home.component\";\nimport { ReusedPasswordsReportComponent } from \"./pages/reused-passwords-report.component\";\nimport { UnsecuredWebsitesReportComponent } from \"./pages/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent } from \"./pages/weak-passwords-report.component\";\nimport { ReportsLayoutComponent } from \"./reports-layout.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: ReportsLayoutComponent,\n canActivate: [AuthGuard],\n children: [\n { path: \"\", pathMatch: \"full\", component: ReportsHomeComponent, data: { homepage: true } },\n {\n path: \"breach-report\",\n component: BreachReportComponent,\n data: { titleId: \"dataBreachReport\" },\n },\n {\n path: \"reused-passwords-report\",\n component: ReusedPasswordsReportComponent,\n data: { titleId: \"reusedPasswordsReport\" },\n canActivate: [HasPremiumGuard],\n },\n {\n path: \"unsecured-websites-report\",\n component: UnsecuredWebsitesReportComponent,\n data: { titleId: \"unsecuredWebsitesReport\" },\n canActivate: [HasPremiumGuard],\n },\n {\n path: \"weak-passwords-report\",\n component: WeakPasswordsReportComponent,\n data: { titleId: \"weakPasswordsReport\" },\n canActivate: [HasPremiumGuard],\n },\n {\n path: \"exposed-passwords-report\",\n component: ExposedPasswordsReportComponent,\n data: { titleId: \"exposedPasswordsReport\" },\n canActivate: [HasPremiumGuard],\n },\n {\n path: \"inactive-two-factor-report\",\n component: InactiveTwoFactorReportComponent,\n data: { titleId: \"inactive2faReport\" },\n canActivate: [HasPremiumGuard],\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class ReportsRoutingModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../shared\";\n\nimport { BreachReportComponent } from \"./pages/breach-report.component\";\nimport { ExposedPasswordsReportComponent } from \"./pages/exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent } from \"./pages/inactive-two-factor-report.component\";\nimport { ReportsHomeComponent } from \"./pages/reports-home.component\";\nimport { ReusedPasswordsReportComponent } from \"./pages/reused-passwords-report.component\";\nimport { UnsecuredWebsitesReportComponent } from \"./pages/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent } from \"./pages/weak-passwords-report.component\";\nimport { ReportsLayoutComponent } from \"./reports-layout.component\";\nimport { ReportsRoutingModule } from \"./reports-routing.module\";\nimport { ReportsSharedModule } from \"./shared\";\n\n@NgModule({\n imports: [CommonModule, SharedModule, ReportsSharedModule, ReportsRoutingModule],\n declarations: [\n BreachReportComponent,\n ExposedPasswordsReportComponent,\n InactiveTwoFactorReportComponent,\n ReportsLayoutComponent,\n ReportsHomeComponent,\n ReusedPasswordsReportComponent,\n UnsecuredWebsitesReportComponent,\n WeakPasswordsReportComponent,\n WeakPasswordsReportComponent,\n ],\n})\nexport class ReportsModule {}\n","import { Directive, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/enums/cipherRepromptType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { AddEditComponent as OrgAddEditComponent } from \"../../organizations/vault/add-edit.component\";\nimport { AddEditComponent } from \"../../vault/add-edit.component\";\n\n@Directive()\nexport class CipherReportComponent {\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n\n loading = false;\n hasLoaded = false;\n ciphers: CipherView[] = [];\n organization: Organization;\n\n constructor(\n private modalService: ModalService,\n protected messagingService: MessagingService,\n public requiresPaid: boolean,\n private stateService: StateService,\n protected passwordRepromptService: PasswordRepromptService\n ) {}\n\n async load() {\n this.loading = true;\n await this.setCiphers();\n this.loading = false;\n this.hasLoaded = true;\n }\n\n async selectCipher(cipher: CipherView) {\n if (!(await this.repromptCipher(cipher))) {\n return;\n }\n\n const type = this.organization != null ? OrgAddEditComponent : AddEditComponent;\n\n const [modal, childComponent] = await this.modalService.openViewRef(\n type,\n this.cipherAddEditModalRef,\n (comp: OrgAddEditComponent | AddEditComponent) => {\n if (this.organization != null) {\n (comp as OrgAddEditComponent).organization = this.organization;\n comp.organizationId = this.organization.id;\n }\n\n comp.cipherId = cipher == null ? null : cipher.id;\n // eslint-disable-next-line rxjs/no-async-subscribe\n comp.onSavedCipher.subscribe(async () => {\n modal.close();\n await this.load();\n });\n // eslint-disable-next-line rxjs/no-async-subscribe\n comp.onDeletedCipher.subscribe(async () => {\n modal.close();\n await this.load();\n });\n // eslint-disable-next-line rxjs/no-async-subscribe\n comp.onRestoredCipher.subscribe(async () => {\n modal.close();\n await this.load();\n });\n }\n );\n\n return childComponent;\n }\n\n protected async checkAccess(): Promise {\n if (this.organization != null) {\n // TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now\n // since all paid plans include useTotp\n if (this.requiresPaid && !this.organization.useTotp) {\n this.messagingService.send(\"upgradeOrganization\", { organizationId: this.organization.id });\n return false;\n }\n }\n return true;\n }\n\n protected async setCiphers() {\n this.ciphers = [];\n }\n\n protected async repromptCipher(c: CipherView) {\n return (\n c.reprompt === CipherRepromptType.None ||\n (await this.passwordRepromptService.showPasswordPrompt())\n );\n }\n}\n","
\n

{{ \"exposedPasswordsReport\" | i18n }}

\n
\n

{{ \"exposedPasswordsReportDesc\" | i18n }}

\n\n
\n \n {{ \"noExposedPasswords\" | i18n }}\n \n \n \n {{ \"exposedPasswordsFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n \n
\n \n \n \n {{\n c.name\n }}\n \n \n {{ c.name }}\n \n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n {{ \"exposedXTimes\" | i18n: (exposedPasswordMap.get(c.id) | number) }}\n \n
\n
\n
\n\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-exposed-passwords-report\",\n templateUrl: \"exposed-passwords-report.component.html\",\n})\nexport class ExposedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n exposedPasswordMap = new Map();\n\n constructor(\n protected cipherService: CipherService,\n protected auditService: AuditService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n ngOnInit() {\n this.checkAccess();\n }\n\n async load() {\n if (await this.checkAccess()) {\n super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const exposedPasswordCiphers: CipherView[] = [];\n const promises: Promise[] = [];\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n c.login.password == null ||\n c.login.password === \"\" ||\n c.isDeleted\n ) {\n return;\n }\n const promise = this.auditService.passwordLeaked(c.login.password).then((exposedCount) => {\n if (exposedCount > 0) {\n exposedPasswordCiphers.push(c);\n this.exposedPasswordMap.set(c.id, exposedCount);\n }\n });\n promises.push(promise);\n });\n await Promise.all(promises);\n this.ciphers = exposedPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from the org view;\n return true;\n }\n}\n","
\n

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

\n
\n

{{ \"inactive2faReportDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n {{ \"noInactive2fa\" | i18n }}\n \n \n \n {{ \"inactive2faFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n \n
\n \n \n {{\n c.name\n }}\n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n {{ \"instructions\" | i18n }}\n
\n
\n
\n\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-inactive-two-factor-report\",\n templateUrl: \"inactive-two-factor-report.component.html\",\n})\nexport class InactiveTwoFactorReportComponent extends CipherReportComponent implements OnInit {\n services = new Map();\n cipherDocs = new Map();\n\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private logService: LogService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n try {\n await this.load2fa();\n } catch (e) {\n this.logService.error(e);\n }\n\n if (this.services.size > 0) {\n const allCiphers = await this.getAllCiphers();\n const inactive2faCiphers: CipherView[] = [];\n const promises: Promise[] = [];\n const docs = new Map();\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n (c.login.totp != null && c.login.totp !== \"\") ||\n !c.login.hasUris ||\n c.isDeleted\n ) {\n return;\n }\n for (let i = 0; i < c.login.uris.length; i++) {\n const u = c.login.uris[i];\n if (u.uri != null && u.uri !== \"\") {\n const uri = u.uri.replace(\"www.\", \"\");\n const domain = Utils.getDomain(uri);\n if (domain != null && this.services.has(domain)) {\n if (this.services.get(domain) != null) {\n docs.set(c.id, this.services.get(domain));\n }\n inactive2faCiphers.push(c);\n }\n }\n }\n });\n await Promise.all(promises);\n this.ciphers = inactive2faCiphers;\n this.cipherDocs = docs;\n }\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n private async load2fa() {\n if (this.services.size > 0) {\n return;\n }\n const response = await fetch(new Request(\"https://2fa.directory/api/v3/totp.json\"));\n if (response.status !== 200) {\n throw new Error();\n }\n const responseJson = await response.json();\n for (const service of responseJson) {\n const serviceData = service[1];\n if (serviceData.domain == null) {\n continue;\n }\n if (serviceData.documentation == null) {\n continue;\n }\n if (serviceData[\"additional-domains\"] != null) {\n for (const additionalDomain of serviceData[\"additional-domains\"]) {\n this.services.set(additionalDomain, serviceData.documentation);\n }\n }\n this.services.set(serviceData.domain, serviceData.documentation);\n }\n }\n}\n","
\n

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

\n
\n

{{ \"reusedPasswordsReportDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n {{ \"noReusedPasswords\" | i18n }}\n \n \n \n {{ \"reusedPasswordsFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n \n
\n \n \n \n {{\n c.name\n }}\n \n \n {{ c.name }}\n \n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n {{ \"reusedXTimes\" | i18n: passwordUseMap.get(c.login.password) }}\n \n
\n
\n
\n\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-reused-passwords-report\",\n templateUrl: \"reused-passwords-report.component.html\",\n})\nexport class ReusedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n passwordUseMap: Map;\n\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const ciphersWithPasswords: CipherView[] = [];\n this.passwordUseMap = new Map();\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n c.login.password == null ||\n c.login.password === \"\" ||\n c.isDeleted\n ) {\n return;\n }\n ciphersWithPasswords.push(c);\n if (this.passwordUseMap.has(c.login.password)) {\n this.passwordUseMap.set(c.login.password, this.passwordUseMap.get(c.login.password) + 1);\n } else {\n this.passwordUseMap.set(c.login.password, 1);\n }\n });\n const reusedPasswordCiphers = ciphersWithPasswords.filter(\n (c) =>\n this.passwordUseMap.has(c.login.password) && this.passwordUseMap.get(c.login.password) > 1\n );\n this.ciphers = reusedPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from an organization view\n return true;\n }\n}\n","
\n

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

\n
\n

{{ \"unsecuredWebsitesReportDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n {{ \"noUnsecuredWebsites\" | i18n }}\n \n \n \n {{ \"unsecuredWebsitesFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n
\n \n \n {{\n c.name\n }}\n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n
\n
\n\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-unsecured-websites-report\",\n templateUrl: \"unsecured-websites-report.component.html\",\n})\nexport class UnsecuredWebsitesReportComponent extends CipherReportComponent implements OnInit {\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const unsecuredCiphers = allCiphers.filter((c) => {\n if (c.type !== CipherType.Login || !c.login.hasUris || c.isDeleted) {\n return false;\n }\n return c.login.uris.some((u) => u.uri != null && u.uri.indexOf(\"http://\") === 0);\n });\n this.ciphers = unsecuredCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n}\n","
\n

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

\n
\n

{{ \"weakPasswordsReportDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n {{ \"noWeakPasswords\" | i18n }}\n \n \n \n {{ \"weakPasswordsFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n \n
\n \n \n \n {{\n c.name\n }}\n \n \n {{ c.name }}\n \n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n {{ passwordStrengthMap.get(c.id)[0] | i18n }}\n \n
\n
\n
\n\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-weak-passwords-report\",\n templateUrl: \"weak-passwords-report.component.html\",\n})\nexport class WeakPasswordsReportComponent extends CipherReportComponent implements OnInit {\n passwordStrengthMap = new Map();\n\n private passwordStrengthCache = new Map();\n\n constructor(\n protected cipherService: CipherService,\n protected passwordGenerationService: PasswordGenerationService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const weakPasswordCiphers: CipherView[] = [];\n const isUserNameNotEmpty = (c: CipherView): boolean => {\n return c.login.username != null && c.login.username.trim() !== \"\";\n };\n const getCacheKey = (c: CipherView): string => {\n return c.login.password + \"_____\" + (isUserNameNotEmpty(c) ? c.login.username : \"\");\n };\n\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n c.login.password == null ||\n c.login.password === \"\" ||\n c.isDeleted\n ) {\n return;\n }\n const hasUserName = isUserNameNotEmpty(c);\n const cacheKey = getCacheKey(c);\n if (!this.passwordStrengthCache.has(cacheKey)) {\n let userInput: string[] = [];\n if (hasUserName) {\n const atPosition = c.login.username.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput\n .concat(\n c.login.username\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n )\n .filter((i) => i.length >= 3);\n } else {\n userInput = c.login.username\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n .filter((i) => i.length >= 3);\n }\n }\n const result = this.passwordGenerationService.passwordStrength(\n c.login.password,\n userInput.length > 0 ? userInput : null\n );\n this.passwordStrengthCache.set(cacheKey, result.score);\n }\n const score = this.passwordStrengthCache.get(cacheKey);\n if (score != null && score <= 2) {\n this.passwordStrengthMap.set(c.id, this.scoreKey(score));\n weakPasswordCiphers.push(c);\n }\n });\n weakPasswordCiphers.sort((a, b) => {\n return (\n this.passwordStrengthCache.get(getCacheKey(a)) -\n this.passwordStrengthCache.get(getCacheKey(b))\n );\n });\n this.ciphers = weakPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from the org view;\n return true;\n }\n\n private scoreKey(score: number): [string, string] {\n switch (score) {\n case 4:\n return [\"strong\", \"success\"];\n case 3:\n return [\"good\", \"primary\"];\n case 2:\n return [\"weak\", \"warning\"];\n default:\n return [\"veryWeak\", \"danger\"];\n }\n }\n}\n","export enum ReportVariant {\n Enabled = \"Enabled\",\n RequiresPremium = \"RequiresPremium\",\n RequiresUpgrade = \"RequiresUpgrade\",\n}\n","\n
\n \n
\n
\n
\n

{{ title }}

\n

{{ description }}

\n
\n \n {{ \"premium\" | i18n }}\n {{ \"upgrade\" | i18n }}\n \n \n\n","import { Component, Input } from \"@angular/core\";\n\nimport { ReportVariant } from \"../models/report-variant\";\n\n@Component({\n selector: \"app-report-card\",\n templateUrl: \"report-card.component.html\",\n})\nexport class ReportCardComponent {\n @Input() title: string;\n @Input() description: string;\n @Input() route: string;\n @Input() icon: string;\n @Input() variant: ReportVariant;\n\n protected get disabled() {\n return this.variant != ReportVariant.Enabled;\n }\n\n protected get requiresPremium() {\n return this.variant == ReportVariant.RequiresPremium;\n }\n}\n","
\n
\n \n
\n
\n","import { Component, Input } from \"@angular/core\";\n\nimport { ReportEntry } from \"../models/report-entry\";\n\n@Component({\n selector: \"app-report-list\",\n templateUrl: \"report-list.component.html\",\n})\nexport class ReportListComponent {\n @Input() reports: ReportEntry[];\n}\n","export class StorageRequest {\n storageGbAdjustment: number;\n}\n","
\n
\n \n

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

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

{{ apiKeyTitle | i18n }}

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

{{ apiKeyDescription | i18n }}

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

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

\n

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

\n

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

\n

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

\n \n
\n
\n \n \n {{ (isRotation ? \"rotateApiKey\" : \"viewApiKey\") | i18n }}\n \n \n
\n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/models/request/secret-verification.request\";\nimport { ApiKeyResponse } from \"@bitwarden/common/models/response/api-key.response\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\n@Component({\n selector: \"app-api-key\",\n templateUrl: \"api-key.component.html\",\n})\nexport class ApiKeyComponent {\n keyType: string;\n isRotation: boolean;\n postKey: (entityId: string, request: SecretVerificationRequest) => Promise;\n entityId: string;\n scope: string;\n grantType: string;\n apiKeyTitle: string;\n apiKeyWarning: string;\n apiKeyDescription: string;\n\n masterPassword: Verification;\n formPromise: Promise;\n clientId: string;\n clientSecret: string;\n\n constructor(\n private userVerificationService: UserVerificationService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword)\n .then((request) => this.postKey(this.entityId, request));\n const response = await this.formPromise;\n this.clientSecret = response.apiKey;\n this.clientId = `${this.keyType}.${this.entityId}`;\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","export enum TransactionType {\n Charge = 0,\n Credit = 1,\n PromotionalCredit = 2,\n ReferralCredit = 3,\n Refund = 4,\n}\n","

{{ \"invoices\" | i18n }}

\n

{{ \"noInvoices\" | i18n }}

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

{{ \"transactions\" | i18n }}

\n

{{ \"noTransactions\" | i18n }}

\n\n \n \n \n \n \n \n {{ t.amount | currency: \"$\" }}\n \n \n \n
{{ t.createdDate | date: \"mediumDate\" }}\n \n {{ \"chargeNoun\" | i18n }}\n \n {{ \"refundNoun\" | i18n }}\n \n \n {{ t.details }}\n
\n* {{ \"chargesStatement\" | i18n: \"BITWARDEN\" }}\n","import { Component, Input } from \"@angular/core\";\n\nimport { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\nimport { TransactionType } from \"@bitwarden/common/enums/transactionType\";\nimport { BillingHistoryResponse } from \"@bitwarden/common/models/response/billing-history.response\";\n\n@Component({\n selector: \"app-billing-history\",\n templateUrl: \"billing-history.component.html\",\n})\nexport class BillingHistoryComponent {\n @Input()\n billing: BillingHistoryResponse;\n\n paymentMethodType = PaymentMethodType;\n transactionType = TransactionType;\n\n get invoices() {\n return this.billing != null ? this.billing.invoices : null;\n }\n\n get transactions() {\n return this.billing != null ? this.billing.transactions : null;\n }\n\n paymentMethodClasses(type: PaymentMethodType) {\n switch (type) {\n case PaymentMethodType.Card:\n return [\"bwi-credit-card\"];\n case PaymentMethodType.BankAccount:\n case PaymentMethodType.WireTransfer:\n return [\"bwi-bank\"];\n case PaymentMethodType.BitPay:\n return [\"bwi-bitcoin text-warning\"];\n case PaymentMethodType.PayPal:\n return [\"bwi-paypal text-primary\"];\n default:\n return [];\n }\n }\n}\n","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\nimport { PlanType } from \"../../enums/planType\";\n\nimport { OrganizationKeysRequest } from \"./organization-keys.request\";\n\nexport class OrganizationCreateRequest {\n name: string;\n businessName: string;\n billingEmail: string;\n planType: PlanType;\n key: string;\n keys: OrganizationKeysRequest;\n paymentMethodType: PaymentMethodType;\n paymentToken: string;\n additionalSeats: number;\n maxAutoscaleSeats: number;\n additionalStorageGb: number;\n premiumAccessAddon: boolean;\n collectionName: string;\n taxIdNumber: string;\n billingAddressLine1: string;\n billingAddressLine2: string;\n billingAddressCity: string;\n billingAddressState: string;\n billingAddressPostalCode: string;\n billingAddressCountry: string;\n}\n","import { PlanType } from \"../../enums/planType\";\n\nimport { OrganizationKeysRequest } from \"./organization-keys.request\";\n\nexport class OrganizationUpgradeRequest {\n businessName: string;\n planType: PlanType;\n additionalSeats: number;\n additionalStorageGb: number;\n premiumAccessAddon: boolean;\n billingAddressCountry: string;\n billingAddressPostalCode: string;\n keys: OrganizationKeysRequest;\n}\n","import { OrganizationCreateRequest } from \"../organization-create.request\";\n\nexport class ProviderOrganizationCreateRequest {\n constructor(\n public clientOwnerEmail: string,\n public organizationCreateRequest: OrganizationCreateRequest\n ) {}\n}\n","\n \n {{ \"loading\" | i18n }}\n\n\n

{{ \"uploadLicenseFileOrg\" | i18n }}

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

{{ \"chooseYourPlan\" | i18n }}

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

{{ \"users\" | i18n }}

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

{{ \"addons\" | i18n }}

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

{{ \"summary\" | i18n }}

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

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

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

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

\n
\n \n \n \n
\n
\n {{ \"singleOrgBlockCreateMessage\" | i18n }}\n
\n
\n \n {{ \"submit\" | i18n }}\n \n \n
\n\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from \"@angular/core\";\nimport { UntypedFormBuilder, Validators } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\nimport { PlanType } from \"@bitwarden/common/enums/planType\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { OrganizationCreateRequest } from \"@bitwarden/common/models/request/organization-create.request\";\nimport { OrganizationKeysRequest } from \"@bitwarden/common/models/request/organization-keys.request\";\nimport { OrganizationUpgradeRequest } from \"@bitwarden/common/models/request/organization-upgrade.request\";\nimport { ProviderOrganizationCreateRequest } from \"@bitwarden/common/models/request/provider/provider-organization-create.request\";\nimport { PlanResponse } from \"@bitwarden/common/models/response/plan.response\";\n\nimport { PaymentComponent } from \"./payment.component\";\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\ninterface OnSuccessArgs {\n organizationId: string;\n}\n\n@Component({\n selector: \"app-organization-plans\",\n templateUrl: \"organization-plans.component.html\",\n})\nexport class OrganizationPlansComponent implements OnInit, OnDestroy {\n @ViewChild(PaymentComponent) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent) taxComponent: TaxInfoComponent;\n\n @Input() organizationId: string;\n @Input() showFree = true;\n @Input() showCancel = false;\n @Input() acceptingSponsorship = false;\n @Input() product: ProductType = ProductType.Free;\n @Input() plan: PlanType = PlanType.Free;\n @Input() providerId: string;\n @Output() onSuccess = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n @Output() onTrialBillingSuccess = new EventEmitter();\n\n loading = true;\n selfHosted = false;\n productTypes = ProductType;\n formPromise: Promise;\n singleOrgPolicyBlock = false;\n isInTrialFlow = false;\n discount = 0;\n\n formGroup = this.formBuilder.group({\n name: [\"\"],\n billingEmail: [\"\", [Validators.email]],\n businessOwned: [false],\n premiumAccessAddon: [false],\n additionalStorage: [0, [Validators.min(0), Validators.max(99)]],\n additionalSeats: [0, [Validators.min(0), Validators.max(100000)]],\n clientOwnerEmail: [\"\", [Validators.email]],\n businessName: [\"\"],\n plan: [this.plan],\n product: [this.product],\n });\n\n plans: PlanResponse[];\n\n private destroy$ = new Subject();\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private router: Router,\n private syncService: SyncService,\n private policyService: PolicyService,\n private organizationService: OrganizationService,\n private logService: LogService,\n private messagingService: MessagingService,\n private formBuilder: UntypedFormBuilder,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n if (!this.selfHosted) {\n const plans = await this.apiService.getPlans();\n this.plans = plans.data;\n if (this.product === ProductType.Enterprise || this.product === ProductType.Teams) {\n this.formGroup.controls.businessOwned.setValue(true);\n }\n }\n\n if (this.providerId) {\n this.formGroup.controls.businessOwned.setValue(true);\n this.changedOwnedBusiness();\n }\n\n if (!this.createOrganization || this.acceptingSponsorship) {\n this.formGroup.controls.product.setValue(ProductType.Families);\n this.changedProduct();\n }\n\n if (this.createOrganization) {\n this.formGroup.controls.name.addValidators(Validators.required);\n this.formGroup.controls.billingEmail.addValidators(Validators.required);\n }\n\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.SingleOrg)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n this.singleOrgPolicyBlock = policyAppliesToActiveUser;\n });\n\n this.loading = false;\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n get createOrganization() {\n return this.organizationId == null;\n }\n\n get selectedPlan() {\n return this.plans.find((plan) => plan.type === this.formGroup.controls.plan.value);\n }\n\n get selectedPlanInterval() {\n return this.selectedPlan.isAnnual ? \"year\" : \"month\";\n }\n\n get selectableProducts() {\n let validPlans = this.plans.filter((plan) => plan.type !== PlanType.Custom);\n\n if (this.formGroup.controls.businessOwned.value) {\n validPlans = validPlans.filter((plan) => plan.canBeUsedByBusiness);\n }\n\n if (!this.showFree) {\n validPlans = validPlans.filter((plan) => plan.product !== ProductType.Free);\n }\n\n validPlans = validPlans.filter(\n (plan) =>\n !plan.legacyYear &&\n !plan.disabled &&\n (plan.isAnnual || plan.product === this.productTypes.Free)\n );\n\n if (this.acceptingSponsorship) {\n const familyPlan = this.plans.find((plan) => plan.type === PlanType.FamiliesAnnually);\n this.discount = familyPlan.basePrice;\n validPlans = [familyPlan];\n }\n\n return validPlans;\n }\n\n get selectablePlans() {\n return this.plans?.filter(\n (plan) =>\n !plan.legacyYear && !plan.disabled && plan.product === this.formGroup.controls.product.value\n );\n }\n\n additionalStoragePriceMonthly(selectedPlan: PlanResponse) {\n if (!selectedPlan.isAnnual) {\n return selectedPlan.additionalStoragePricePerGb;\n }\n return selectedPlan.additionalStoragePricePerGb / 12;\n }\n\n seatPriceMonthly(selectedPlan: PlanResponse) {\n if (!selectedPlan.isAnnual) {\n return selectedPlan.seatPrice;\n }\n return selectedPlan.seatPrice / 12;\n }\n\n additionalStorageTotal(plan: PlanResponse): number {\n if (!plan.hasAdditionalStorageOption) {\n return 0;\n }\n\n return (\n plan.additionalStoragePricePerGb *\n Math.abs(this.formGroup.controls.additionalStorage.value || 0)\n );\n }\n\n seatTotal(plan: PlanResponse): number {\n if (!plan.hasAdditionalSeatsOption) {\n return 0;\n }\n\n return plan.seatPrice * Math.abs(this.formGroup.controls.additionalSeats.value || 0);\n }\n\n get subtotal() {\n let subTotal = this.selectedPlan.basePrice;\n if (\n this.selectedPlan.hasAdditionalSeatsOption &&\n this.formGroup.controls.additionalSeats.value\n ) {\n subTotal += this.seatTotal(this.selectedPlan);\n }\n if (\n this.selectedPlan.hasAdditionalStorageOption &&\n this.formGroup.controls.additionalStorage.value\n ) {\n subTotal += this.additionalStorageTotal(this.selectedPlan);\n }\n if (\n this.selectedPlan.hasPremiumAccessOption &&\n this.formGroup.controls.premiumAccessAddon.value\n ) {\n subTotal += this.selectedPlan.premiumAccessOptionPrice;\n }\n return subTotal - this.discount;\n }\n\n get freeTrial() {\n return this.selectedPlan.trialPeriodDays != null;\n }\n\n get taxCharges() {\n return this.taxComponent != null && this.taxComponent.taxRate != null\n ? (this.taxComponent.taxRate / 100) * this.subtotal\n : 0;\n }\n\n get total() {\n return this.subtotal + this.taxCharges || 0;\n }\n\n get paymentDesc() {\n if (this.acceptingSponsorship) {\n return this.i18nService.t(\"paymentSponsored\");\n } else if (this.freeTrial && this.createOrganization) {\n return this.i18nService.t(\"paymentChargedWithTrial\");\n } else {\n return this.i18nService.t(\"paymentCharged\", this.i18nService.t(this.selectedPlanInterval));\n }\n }\n\n changedProduct() {\n this.formGroup.controls.plan.setValue(this.selectablePlans[0].type);\n if (!this.selectedPlan.hasPremiumAccessOption) {\n this.formGroup.controls.premiumAccessAddon.setValue(false);\n }\n if (!this.selectedPlan.hasAdditionalStorageOption) {\n this.formGroup.controls.additionalStorage.setValue(0);\n }\n if (!this.selectedPlan.hasAdditionalSeatsOption) {\n this.formGroup.controls.additionalSeats.setValue(0);\n } else if (\n !this.formGroup.controls.additionalSeats.value &&\n !this.selectedPlan.baseSeats &&\n this.selectedPlan.hasAdditionalSeatsOption\n ) {\n this.formGroup.controls.additionalSeats.setValue(1);\n }\n }\n\n changedOwnedBusiness() {\n if (!this.formGroup.controls.businessOwned.value || this.selectedPlan.canBeUsedByBusiness) {\n return;\n }\n this.formGroup.controls.product.setValue(ProductType.Teams);\n this.formGroup.controls.plan.setValue(PlanType.TeamsAnnually);\n this.changedProduct();\n }\n\n changedCountry() {\n this.paymentComponent.hideBank = this.taxComponent.taxInfo.country !== \"US\";\n // Bank Account payments are only available for US customers\n if (\n this.paymentComponent.hideBank &&\n this.paymentComponent.method === PaymentMethodType.BankAccount\n ) {\n this.paymentComponent.method = PaymentMethodType.Card;\n this.paymentComponent.changeMethod();\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n async submit() {\n if (this.singleOrgPolicyBlock) {\n return;\n }\n\n try {\n const doSubmit = async (): Promise => {\n let orgId: string = null;\n if (this.createOrganization) {\n const shareKey = await this.cryptoService.makeShareKey();\n const key = shareKey[0].encryptedString;\n const collection = await this.cryptoService.encrypt(\n this.i18nService.t(\"defaultCollection\"),\n shareKey[1]\n );\n const collectionCt = collection.encryptedString;\n const orgKeys = await this.cryptoService.makeKeyPair(shareKey[1]);\n\n if (this.selfHosted) {\n orgId = await this.createSelfHosted(key, collectionCt, orgKeys);\n } else {\n orgId = await this.createCloudHosted(key, collectionCt, orgKeys, shareKey[1]);\n }\n\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"organizationCreated\"),\n this.i18nService.t(\"organizationReadyToGo\")\n );\n } else {\n orgId = await this.updateOrganization(orgId);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"organizationUpgraded\")\n );\n }\n\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n\n if (!this.acceptingSponsorship && !this.isInTrialFlow) {\n this.router.navigate([\"/organizations/\" + orgId]);\n }\n\n if (this.isInTrialFlow) {\n this.onTrialBillingSuccess.emit({\n orgId: orgId,\n subLabelText: this.billingSubLabelText(),\n });\n }\n\n return orgId;\n };\n\n this.formPromise = doSubmit();\n const organizationId = await this.formPromise;\n this.onSuccess.emit({ organizationId: organizationId });\n this.messagingService.send(\"organizationCreated\", organizationId);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private async updateOrganization(orgId: string) {\n const request = new OrganizationUpgradeRequest();\n request.businessName = this.formGroup.controls.businessOwned.value\n ? this.formGroup.controls.businessName.value\n : null;\n request.additionalSeats = this.formGroup.controls.additionalSeats.value;\n request.additionalStorageGb = this.formGroup.controls.additionalStorage.value;\n request.premiumAccessAddon =\n this.selectedPlan.hasPremiumAccessOption && this.formGroup.controls.premiumAccessAddon.value;\n request.planType = this.selectedPlan.type;\n request.billingAddressCountry = this.taxComponent.taxInfo.country;\n request.billingAddressPostalCode = this.taxComponent.taxInfo.postalCode;\n\n // Retrieve org info to backfill pub/priv key if necessary\n const org = await this.organizationService.get(this.organizationId);\n if (!org.hasPublicAndPrivateKeys) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n }\n\n const result = await this.organizationApiService.upgrade(this.organizationId, request);\n if (!result.success && result.paymentIntentClientSecret != null) {\n await this.paymentComponent.handleStripeCardPayment(result.paymentIntentClientSecret, null);\n }\n return this.organizationId;\n }\n\n private async createCloudHosted(\n key: string,\n collectionCt: string,\n orgKeys: [string, EncString],\n orgKey: SymmetricCryptoKey\n ) {\n const request = new OrganizationCreateRequest();\n request.key = key;\n request.collectionName = collectionCt;\n request.name = this.formGroup.controls.name.value;\n request.billingEmail = this.formGroup.controls.billingEmail.value;\n request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n\n if (this.selectedPlan.type === PlanType.Free) {\n request.planType = PlanType.Free;\n } else {\n const tokenResult = await this.paymentComponent.createPaymentToken();\n\n request.paymentToken = tokenResult[0];\n request.paymentMethodType = tokenResult[1];\n request.businessName = this.formGroup.controls.businessOwned.value\n ? this.formGroup.controls.businessName.value\n : null;\n request.additionalSeats = this.formGroup.controls.additionalSeats.value;\n request.additionalStorageGb = this.formGroup.controls.additionalStorage.value;\n request.premiumAccessAddon =\n this.selectedPlan.hasPremiumAccessOption &&\n this.formGroup.controls.premiumAccessAddon.value;\n request.planType = this.selectedPlan.type;\n request.billingAddressPostalCode = this.taxComponent.taxInfo.postalCode;\n request.billingAddressCountry = this.taxComponent.taxInfo.country;\n if (this.taxComponent.taxInfo.includeTaxId) {\n request.taxIdNumber = this.taxComponent.taxInfo.taxId;\n request.billingAddressLine1 = this.taxComponent.taxInfo.line1;\n request.billingAddressLine2 = this.taxComponent.taxInfo.line2;\n request.billingAddressCity = this.taxComponent.taxInfo.city;\n request.billingAddressState = this.taxComponent.taxInfo.state;\n }\n }\n\n if (this.providerId) {\n const providerRequest = new ProviderOrganizationCreateRequest(\n this.formGroup.controls.clientOwnerEmail.value,\n request\n );\n const providerKey = await this.cryptoService.getProviderKey(this.providerId);\n providerRequest.organizationCreateRequest.key = (\n await this.cryptoService.encrypt(orgKey.key, providerKey)\n ).encryptedString;\n const orgId = (\n await this.apiService.postProviderCreateOrganization(this.providerId, providerRequest)\n ).organizationId;\n\n return orgId;\n } else {\n return (await this.organizationApiService.create(request)).id;\n }\n }\n\n private async createSelfHosted(key: string, collectionCt: string, orgKeys: [string, EncString]) {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n throw new Error(this.i18nService.t(\"selectFile\"));\n }\n\n const fd = new FormData();\n fd.append(\"license\", files[0]);\n fd.append(\"key\", key);\n fd.append(\"collectionName\", collectionCt);\n const response = await this.organizationApiService.createLicense(fd);\n const orgId = response.id;\n\n await this.apiService.refreshIdentityToken();\n\n // Org Keys live outside of the OrganizationLicense - add the keys to the org here\n const request = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n await this.organizationApiService.updateKeys(orgId, request);\n\n return orgId;\n }\n\n private billingSubLabelText(): string {\n const selectedPlan = this.selectedPlan;\n const price = selectedPlan.basePrice === 0 ? selectedPlan.seatPrice : selectedPlan.basePrice;\n let text = \"\";\n\n if (selectedPlan.isAnnual) {\n text += `${this.i18nService.t(\"annual\")} ($${price}/${this.i18nService.t(\"yr\")})`;\n } else {\n text += `${this.i18nService.t(\"monthly\")} ($${price}/${this.i18nService.t(\"monthAbbr\")})`;\n }\n\n return text;\n }\n}\n","export class VerifyBankRequest {\n amount1: number;\n amount2: number;\n}\n","export class BitPayInvoiceRequest {\n userId: string;\n organizationId: string;\n credit: boolean;\n amount: number;\n returnUrl: string;\n name: string;\n email: string;\n}\n","
\n
\n \n

{{ \"addCredit\" | i18n }}

\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
$USD
\n \n
\n
\n
\n {{ \"creditDelayed\" | i18n }}\n
\n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { PayPalConfig } from \"@bitwarden/common/abstractions/environment.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\nimport { BitPayInvoiceRequest } from \"@bitwarden/common/models/request/bit-pay-invoice.request\";\n\n@Component({\n selector: \"app-add-credit\",\n templateUrl: \"add-credit.component.html\",\n})\nexport class AddCreditComponent implements OnInit {\n @Input() creditAmount: string;\n @Input() showOptions = true;\n @Input() method = PaymentMethodType.PayPal;\n @Input() organizationId: string;\n @Output() onAdded = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n @ViewChild(\"ppButtonForm\", { read: ElementRef, static: true }) ppButtonFormRef: ElementRef;\n\n paymentMethodType = PaymentMethodType;\n ppButtonFormAction: string;\n ppButtonBusinessId: string;\n ppButtonCustomField: string;\n ppLoading = false;\n subject: string;\n returnUrl: string;\n formPromise: Promise;\n\n private userId: string;\n private name: string;\n private email: string;\n\n constructor(\n private stateService: StateService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private organizationService: OrganizationService,\n private logService: LogService\n ) {\n const payPalConfig = process.env.PAYPAL_CONFIG as PayPalConfig;\n this.ppButtonFormAction = payPalConfig.buttonAction;\n this.ppButtonBusinessId = payPalConfig.businessId;\n }\n\n async ngOnInit() {\n if (this.organizationId != null) {\n if (this.creditAmount == null) {\n this.creditAmount = \"20.00\";\n }\n this.ppButtonCustomField = \"organization_id:\" + this.organizationId;\n const org = await this.organizationService.get(this.organizationId);\n if (org != null) {\n this.subject = org.name;\n this.name = org.name;\n }\n } else {\n if (this.creditAmount == null) {\n this.creditAmount = \"10.00\";\n }\n this.userId = await this.stateService.getUserId();\n this.subject = await this.stateService.getEmail();\n this.email = this.subject;\n this.ppButtonCustomField = \"user_id:\" + this.userId;\n }\n this.ppButtonCustomField += \",account_credit:1\";\n this.returnUrl = window.location.href;\n }\n\n async submit() {\n if (this.creditAmount == null || this.creditAmount === \"\") {\n return;\n }\n\n if (this.method === PaymentMethodType.PayPal) {\n this.ppButtonFormRef.nativeElement.submit();\n this.ppLoading = true;\n return;\n }\n if (this.method === PaymentMethodType.BitPay) {\n try {\n const req = new BitPayInvoiceRequest();\n req.email = this.email;\n req.name = this.name;\n req.credit = true;\n req.amount = this.creditAmountNumber;\n req.organizationId = this.organizationId;\n req.userId = this.userId;\n req.returnUrl = this.returnUrl;\n this.formPromise = this.apiService.postBitPayInvoice(req);\n const bitPayUrl: string = await this.formPromise;\n this.platformUtilsService.launchUri(bitPayUrl);\n } catch (e) {\n this.logService.error(e);\n }\n return;\n }\n try {\n this.onAdded.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n formatAmount() {\n try {\n if (this.creditAmount != null && this.creditAmount !== \"\") {\n const floatAmount = Math.abs(parseFloat(this.creditAmount));\n if (floatAmount > 0) {\n this.creditAmount = parseFloat((Math.round(floatAmount * 100) / 100).toString())\n .toFixed(2)\n .toString();\n return;\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.creditAmount = \"\";\n }\n\n get creditAmountNumber(): number {\n if (this.creditAmount != null && this.creditAmount !== \"\") {\n try {\n return parseFloat(this.creditAmount);\n } catch (e) {\n this.logService.error(e);\n }\n }\n return null;\n }\n}\n","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\n\nimport { OrganizationTaxInfoUpdateRequest } from \"./organization-tax-info-update.request\";\n\nexport class PaymentRequest extends OrganizationTaxInfoUpdateRequest {\n paymentMethodType: PaymentMethodType;\n paymentToken: string;\n}\n","import { Component, EventEmitter, Input, Output, ViewChild } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\nimport { PaymentRequest } from \"@bitwarden/common/models/request/payment.request\";\n\nimport { PaymentComponent } from \"./payment.component\";\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\n selector: \"app-adjust-payment\",\n templateUrl: \"adjust-payment.component.html\",\n})\nexport class AdjustPaymentComponent {\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent, { static: true }) taxInfoComponent: TaxInfoComponent;\n\n @Input() currentType?: PaymentMethodType;\n @Input() organizationId: string;\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n paymentMethodType = PaymentMethodType;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async submit() {\n try {\n const request = new PaymentRequest();\n this.formPromise = this.paymentComponent.createPaymentToken().then((result) => {\n request.paymentToken = result[0];\n request.paymentMethodType = result[1];\n request.postalCode = this.taxInfoComponent.taxInfo.postalCode;\n request.country = this.taxInfoComponent.taxInfo.country;\n if (this.organizationId == null) {\n return this.apiService.postAccountPayment(request);\n } else {\n request.taxId = this.taxInfoComponent.taxInfo.taxId;\n request.state = this.taxInfoComponent.taxInfo.state;\n request.line1 = this.taxInfoComponent.taxInfo.line1;\n request.line2 = this.taxInfoComponent.taxInfo.line2;\n request.city = this.taxInfoComponent.taxInfo.city;\n request.state = this.taxInfoComponent.taxInfo.state;\n return this.organizationApiService.updatePayment(this.organizationId, request);\n }\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"updatedPaymentMethod\")\n );\n this.onAdjusted.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n changeCountry() {\n if (this.taxInfoComponent.taxInfo.country === \"US\") {\n this.paymentComponent.hideBank = !this.organizationId;\n } else {\n this.paymentComponent.hideBank = true;\n if (this.paymentComponent.method === PaymentMethodType.BankAccount) {\n this.paymentComponent.method = PaymentMethodType.Card;\n this.paymentComponent.changeMethod();\n }\n }\n }\n}\n","
\n
\n \n

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

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

\n {{ \"paymentMethod\" | i18n }}\n

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

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

\n

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

\n

{{ \"creditAppliedDesc\" | i18n }}

\n \n \n \n

{{ \"paymentMethod\" | i18n }}

\n

{{ \"noPaymentMethod\" | i18n }}

\n \n \n

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

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

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

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

{{ \"taxInformation\" | i18n }}

\n

{{ \"taxInformationDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n \n \n \n \n {{ \"save\" | i18n }}\n \n \n
\n
\n","import { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { FormBuilder, FormControl, Validators } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\nimport { VerifyBankRequest } from \"@bitwarden/common/models/request/verify-bank.request\";\nimport { BillingPaymentResponse } from \"@bitwarden/common/models/response/billing-payment.response\";\nimport { OrganizationResponse } from \"@bitwarden/common/models/response/organization.response\";\n\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\n selector: \"app-payment-method\",\n templateUrl: \"payment-method.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class PaymentMethodComponent implements OnInit {\n @ViewChild(TaxInfoComponent) taxInfo: TaxInfoComponent;\n\n loading = false;\n firstLoaded = false;\n showAdjustPayment = false;\n showAddCredit = false;\n billing: BillingPaymentResponse;\n org: OrganizationResponse;\n paymentMethodType = PaymentMethodType;\n organizationId: string;\n\n verifyBankPromise: Promise;\n taxFormPromise: Promise;\n\n verifyBankForm = this.formBuilder.group({\n amount1: new FormControl(null, [\n Validators.required,\n Validators.max(99),\n Validators.min(0),\n ]),\n amount2: new FormControl(null, [\n Validators.required,\n Validators.max(99),\n Validators.min(0),\n ]),\n });\n\n constructor(\n protected apiService: ApiService,\n protected organizationApiService: OrganizationApiServiceAbstraction,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n private router: Router,\n private logService: LogService,\n private route: ActivatedRoute,\n private formBuilder: FormBuilder\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.params.subscribe(async (params) => {\n if (params.organizationId) {\n this.organizationId = params.organizationId;\n } else if (this.platformUtilsService.isSelfHost()) {\n this.router.navigate([\"/settings/subscription\"]);\n return;\n }\n\n await this.load();\n this.firstLoaded = true;\n });\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n this.loading = true;\n\n if (this.forOrganization) {\n const billingPromise = this.organizationApiService.getBilling(this.organizationId);\n const orgPromise = this.organizationApiService.get(this.organizationId);\n\n [this.billing, this.org] = await Promise.all([billingPromise, orgPromise]);\n } else {\n this.billing = await this.apiService.getUserBillingPayment();\n }\n\n this.loading = false;\n }\n\n addCredit() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"cannotPerformInAppPurchase\"),\n this.i18nService.t(\"addCredit\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n this.showAddCredit = true;\n }\n\n closeAddCredit(load: boolean) {\n this.showAddCredit = false;\n if (load) {\n this.load();\n }\n }\n\n changePayment() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"cannotPerformInAppPurchase\"),\n this.i18nService.t(\"changePaymentMethod\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n this.showAdjustPayment = true;\n }\n\n closePayment(load: boolean) {\n this.showAdjustPayment = false;\n if (load) {\n this.load();\n }\n }\n\n async verifyBank() {\n if (this.loading || !this.forOrganization) {\n return;\n }\n\n try {\n const request = new VerifyBankRequest();\n request.amount1 = this.verifyBankForm.value.amount1;\n request.amount2 = this.verifyBankForm.value.amount2;\n this.verifyBankPromise = this.organizationApiService.verifyBank(this.organizationId, request);\n await this.verifyBankPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"verifiedBankAccount\")\n );\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async submitTaxInfo() {\n this.taxFormPromise = this.taxInfo.submitTaxInfo();\n await this.taxFormPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"taxInfoUpdated\"));\n }\n\n get isCreditBalance() {\n return this.billing == null || this.billing.balance <= 0;\n }\n\n get creditOrBalance() {\n return Math.abs(this.billing != null ? this.billing.balance : 0);\n }\n\n get paymentSource() {\n return this.billing != null ? this.billing.paymentSource : null;\n }\n\n get forOrganization() {\n return this.organizationId != null;\n }\n\n get headerClass() {\n return this.forOrganization ? [\"page-header\"] : [\"tabbed-header\"];\n }\n\n get paymentSourceClasses() {\n if (this.paymentSource == null) {\n return [];\n }\n switch (this.paymentSource.type) {\n case PaymentMethodType.Card:\n return [\"bwi-credit-card\"];\n case PaymentMethodType.BankAccount:\n return [\"bwi-bank\"];\n case PaymentMethodType.Check:\n return [\"bwi-money\"];\n case PaymentMethodType.AppleInApp:\n return [\"bwi-apple text-muted\"];\n case PaymentMethodType.GoogleInApp:\n return [\"bwi-google text-muted\"];\n case PaymentMethodType.PayPal:\n return [\"bwi-paypal text-primary\"];\n default:\n return [];\n }\n }\n\n get paymentSourceInApp() {\n return (\n this.paymentSource != null &&\n (this.paymentSource.type === PaymentMethodType.AppleInApp ||\n this.paymentSource.type === PaymentMethodType.GoogleInApp)\n );\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n\n \n {{ \"verifyBankAccountInitialDesc\" | i18n }} {{ \"verifyBankAccountFailureWarning\" | i18n }}\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n \n \n \n \n
\n
\n
\n\n
\n
\n {{ \"paypalClickSubmit\" | i18n }}\n
\n
\n\n \n {{ \"makeSureEnoughCredit\" | i18n }}\n \n\n","import { Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { AbstractThemingService } from \"@bitwarden/angular/services/theming/theming.service.abstraction\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PaymentMethodType } from \"@bitwarden/common/enums/paymentMethodType\";\n\n@Component({\n selector: \"app-payment\",\n templateUrl: \"payment.component.html\",\n})\nexport class PaymentComponent implements OnInit, OnDestroy {\n @Input() showMethods = true;\n @Input() showOptions = true;\n @Input() method = PaymentMethodType.Card;\n @Input() hideBank = false;\n @Input() hidePaypal = false;\n @Input() hideCredit = false;\n @Input() trialFlow = false;\n\n private destroy$ = new Subject();\n\n bank: any = {\n routing_number: null,\n account_number: null,\n account_holder_name: null,\n account_holder_type: \"\",\n currency: \"USD\",\n country: \"US\",\n };\n\n paymentMethodType = PaymentMethodType;\n\n private btScript: HTMLScriptElement;\n private btInstance: any = null;\n private stripeScript: HTMLScriptElement;\n private stripe: any = null;\n private stripeElements: any = null;\n private stripeCardNumberElement: any = null;\n private stripeCardExpiryElement: any = null;\n private stripeCardCvcElement: any = null;\n private StripeElementStyle: any;\n private StripeElementClasses: any;\n\n constructor(\n private apiService: ApiService,\n private logService: LogService,\n private themingService: AbstractThemingService\n ) {\n this.stripeScript = window.document.createElement(\"script\");\n this.stripeScript.src = \"https://js.stripe.com/v3/\";\n this.stripeScript.async = true;\n this.stripeScript.onload = () => {\n this.stripe = (window as any).Stripe(process.env.STRIPE_KEY);\n this.stripeElements = this.stripe.elements();\n this.setStripeElement();\n };\n this.btScript = window.document.createElement(\"script\");\n this.btScript.src = `scripts/dropin.js?cache=${process.env.CACHE_TAG}`;\n this.btScript.async = true;\n this.StripeElementStyle = {\n base: {\n color: null,\n fontFamily:\n '\"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif, ' +\n '\"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n fontSize: \"14px\",\n fontSmoothing: \"antialiased\",\n \"::placeholder\": {\n color: null,\n },\n },\n invalid: {\n color: null,\n },\n };\n this.StripeElementClasses = {\n focus: \"is-focused\",\n empty: \"is-empty\",\n invalid: \"is-invalid\",\n };\n }\n\n async ngOnInit() {\n if (!this.showOptions) {\n this.hidePaypal = this.method !== PaymentMethodType.PayPal;\n this.hideBank = this.method !== PaymentMethodType.BankAccount;\n this.hideCredit = this.method !== PaymentMethodType.Credit;\n }\n this.subscribeToTheme();\n window.document.head.appendChild(this.stripeScript);\n if (!this.hidePaypal) {\n window.document.head.appendChild(this.btScript);\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n window.document.head.removeChild(this.stripeScript);\n window.setTimeout(() => {\n Array.from(window.document.querySelectorAll(\"iframe\")).forEach((el) => {\n if (el.src != null && el.src.indexOf(\"stripe\") > -1) {\n try {\n window.document.body.removeChild(el);\n } catch (e) {\n this.logService.error(e);\n }\n }\n });\n }, 500);\n if (!this.hidePaypal) {\n window.document.head.removeChild(this.btScript);\n window.setTimeout(() => {\n Array.from(window.document.head.querySelectorAll(\"script\")).forEach((el) => {\n if (el.src != null && el.src.indexOf(\"paypal\") > -1) {\n try {\n window.document.head.removeChild(el);\n } catch (e) {\n this.logService.error(e);\n }\n }\n });\n const btStylesheet = window.document.head.querySelector(\"#braintree-dropin-stylesheet\");\n if (btStylesheet != null) {\n try {\n window.document.head.removeChild(btStylesheet);\n } catch (e) {\n this.logService.error(e);\n }\n }\n }, 500);\n }\n }\n\n changeMethod() {\n this.btInstance = null;\n\n if (this.method === PaymentMethodType.PayPal) {\n window.setTimeout(() => {\n (window as any).braintree.dropin.create(\n {\n authorization: process.env.BRAINTREE_KEY,\n container: \"#bt-dropin-container\",\n paymentOptionPriority: [\"paypal\"],\n paypal: {\n flow: \"vault\",\n buttonStyle: {\n label: \"pay\",\n size: \"medium\",\n shape: \"pill\",\n color: \"blue\",\n tagline: \"false\",\n },\n },\n },\n (createErr: any, instance: any) => {\n if (createErr != null) {\n // eslint-disable-next-line\n console.error(createErr);\n return;\n }\n this.btInstance = instance;\n }\n );\n }, 250);\n } else {\n this.setStripeElement();\n }\n }\n\n createPaymentToken(): Promise<[string, PaymentMethodType]> {\n return new Promise((resolve, reject) => {\n if (this.method === PaymentMethodType.Credit) {\n resolve([null, this.method]);\n } else if (this.method === PaymentMethodType.PayPal) {\n this.btInstance\n .requestPaymentMethod()\n .then((payload: any) => {\n resolve([payload.nonce, this.method]);\n })\n .catch((err: any) => {\n reject(err.message);\n });\n } else if (\n this.method === PaymentMethodType.Card ||\n this.method === PaymentMethodType.BankAccount\n ) {\n if (this.method === PaymentMethodType.Card) {\n this.apiService\n .postSetupPayment()\n .then((clientSecret) =>\n this.stripe.handleCardSetup(clientSecret, this.stripeCardNumberElement)\n )\n .then((result: any) => {\n if (result.error) {\n reject(result.error.message);\n } else if (result.setupIntent && result.setupIntent.status === \"succeeded\") {\n resolve([result.setupIntent.payment_method, this.method]);\n } else {\n reject();\n }\n });\n } else {\n this.stripe.createToken(\"bank_account\", this.bank).then((result: any) => {\n if (result.error) {\n reject(result.error.message);\n } else if (result.token && result.token.id != null) {\n resolve([result.token.id, this.method]);\n } else {\n reject();\n }\n });\n }\n }\n });\n }\n\n handleStripeCardPayment(clientSecret: string, successCallback: () => Promise): Promise {\n return new Promise((resolve, reject) => {\n if (this.showMethods && this.stripeCardNumberElement == null) {\n reject();\n return;\n }\n const handleCardPayment = () =>\n this.showMethods\n ? this.stripe.handleCardSetup(clientSecret, this.stripeCardNumberElement)\n : this.stripe.handleCardSetup(clientSecret);\n return handleCardPayment().then(async (result: any) => {\n if (result.error) {\n reject(result.error.message);\n } else if (result.paymentIntent && result.paymentIntent.status === \"succeeded\") {\n if (successCallback != null) {\n await successCallback();\n }\n resolve();\n } else {\n reject();\n }\n });\n });\n }\n\n private setStripeElement() {\n window.setTimeout(() => {\n if (this.showMethods && this.method === PaymentMethodType.Card) {\n if (this.stripeCardNumberElement == null) {\n this.stripeCardNumberElement = this.stripeElements.create(\"cardNumber\", {\n style: this.StripeElementStyle,\n classes: this.StripeElementClasses,\n placeholder: \"\",\n });\n }\n if (this.stripeCardExpiryElement == null) {\n this.stripeCardExpiryElement = this.stripeElements.create(\"cardExpiry\", {\n style: this.StripeElementStyle,\n classes: this.StripeElementClasses,\n });\n }\n if (this.stripeCardCvcElement == null) {\n this.stripeCardCvcElement = this.stripeElements.create(\"cardCvc\", {\n style: this.StripeElementStyle,\n classes: this.StripeElementClasses,\n placeholder: \"\",\n });\n }\n this.stripeCardNumberElement.mount(\"#stripe-card-number-element\");\n this.stripeCardExpiryElement.mount(\"#stripe-card-expiry-element\");\n this.stripeCardCvcElement.mount(\"#stripe-card-cvc-element\");\n }\n }, 50);\n }\n\n private subscribeToTheme() {\n this.themingService.theme$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n const style = getComputedStyle(document.documentElement);\n this.StripeElementStyle.base.color = `rgb(${style.getPropertyValue(\"--color-text-main\")})`;\n this.StripeElementStyle.base[\"::placeholder\"].color = `rgb(${style.getPropertyValue(\n \"--color-text-muted\"\n )})`;\n this.StripeElementStyle.invalid.color = `rgb(${style.getPropertyValue(\"--color-text-main\")})`;\n this.StripeElementStyle.invalid.borderColor = `rgb(${style.getPropertyValue(\n \"--color-danger-500\"\n )})`;\n });\n }\n}\n","import { Component, Input } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\n@Component({\n selector: \"app-purge-vault\",\n templateUrl: \"purge-vault.component.html\",\n})\nexport class PurgeVaultComponent {\n @Input() organizationId?: string = null;\n\n masterPassword: Verification;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private userVerificationService: UserVerificationService,\n private router: Router,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword)\n .then((request) => this.apiService.postPurgeCiphers(request, this.organizationId));\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"vaultPurged\"));\n if (this.organizationId != null) {\n this.router.navigate([\"organizations\", this.organizationId, \"vault\"]);\n } else {\n this.router.navigate([\"vault\"]);\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ \"purgeVault\" | i18n }}

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

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

\n {{ \"purgeVaultWarning\" | i18n }}\n \n \n
\n
\n \n \n
\n \n
\n
\n","
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationTaxInfoUpdateRequest } from \"@bitwarden/common/models/request/organization-tax-info-update.request\";\nimport { TaxInfoUpdateRequest } from \"@bitwarden/common/models/request/tax-info-update.request\";\nimport { TaxInfoResponse } from \"@bitwarden/common/models/response/tax-info.response\";\nimport { TaxRateResponse } from \"@bitwarden/common/models/response/tax-rate.response\";\n\ntype TaxInfoView = Omit & {\n includeTaxId: boolean;\n [key: string]: unknown;\n};\n\n@Component({\n selector: \"app-tax-info\",\n templateUrl: \"tax-info.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class TaxInfoComponent {\n @Input() trialFlow = false;\n @Output() onCountryChanged = new EventEmitter();\n\n loading = true;\n organizationId: string;\n taxInfo: TaxInfoView = {\n taxId: null,\n line1: null,\n line2: null,\n city: null,\n state: null,\n postalCode: null,\n country: \"US\",\n includeTaxId: false,\n };\n\n taxRates: TaxRateResponse[];\n\n private pristine: TaxInfoView = {\n taxId: null,\n line1: null,\n line2: null,\n city: null,\n state: null,\n postalCode: null,\n country: \"US\",\n includeTaxId: false,\n };\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n if (this.organizationId) {\n try {\n const taxInfo = await this.organizationApiService.getTaxInfo(this.organizationId);\n if (taxInfo) {\n this.taxInfo.taxId = taxInfo.taxId;\n this.taxInfo.state = taxInfo.state;\n this.taxInfo.line1 = taxInfo.line1;\n this.taxInfo.line2 = taxInfo.line2;\n this.taxInfo.city = taxInfo.city;\n this.taxInfo.state = taxInfo.state;\n this.taxInfo.postalCode = taxInfo.postalCode;\n this.taxInfo.country = taxInfo.country || \"US\";\n this.taxInfo.includeTaxId =\n this.taxInfo.country !== \"US\" &&\n (!!taxInfo.taxId ||\n !!taxInfo.line1 ||\n !!taxInfo.line2 ||\n !!taxInfo.city ||\n !!taxInfo.state);\n }\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n try {\n const taxInfo = await this.apiService.getTaxInfo();\n if (taxInfo) {\n this.taxInfo.postalCode = taxInfo.postalCode;\n this.taxInfo.country = taxInfo.country || \"US\";\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n this.pristine = Object.assign({}, this.taxInfo);\n // If not the default (US) then trigger onCountryChanged\n if (this.taxInfo.country !== \"US\") {\n this.onCountryChanged.emit();\n }\n });\n\n try {\n const taxRates = await this.apiService.getTaxRates();\n if (taxRates) {\n this.taxRates = taxRates.data;\n }\n } catch (e) {\n this.logService.error(e);\n } finally {\n this.loading = false;\n }\n }\n\n get taxRate() {\n if (this.taxRates != null) {\n const localTaxRate = this.taxRates.find(\n (x) => x.country === this.taxInfo.country && x.postalCode === this.taxInfo.postalCode\n );\n return localTaxRate?.rate ?? null;\n }\n }\n\n getTaxInfoRequest(): TaxInfoUpdateRequest {\n if (this.organizationId) {\n const request = new OrganizationTaxInfoUpdateRequest();\n request.taxId = this.taxInfo.taxId;\n request.state = this.taxInfo.state;\n request.line1 = this.taxInfo.line1;\n request.line2 = this.taxInfo.line2;\n request.city = this.taxInfo.city;\n request.state = this.taxInfo.state;\n request.postalCode = this.taxInfo.postalCode;\n request.country = this.taxInfo.country;\n return request;\n } else {\n const request = new TaxInfoUpdateRequest();\n request.postalCode = this.taxInfo.postalCode;\n request.country = this.taxInfo.country;\n return request;\n }\n }\n\n submitTaxInfo(): Promise {\n if (!this.hasChanged()) {\n return new Promise((resolve) => {\n resolve();\n });\n }\n const request = this.getTaxInfoRequest();\n return this.organizationId\n ? this.organizationApiService.updateTaxInfo(\n this.organizationId,\n request as OrganizationTaxInfoUpdateRequest\n )\n : this.apiService.putTaxInfo(request);\n }\n\n changeCountry() {\n if (this.taxInfo.country === \"US\") {\n this.taxInfo.includeTaxId = false;\n this.taxInfo.taxId = null;\n this.taxInfo.line1 = null;\n this.taxInfo.line2 = null;\n this.taxInfo.city = null;\n this.taxInfo.state = null;\n }\n this.onCountryChanged.emit();\n }\n\n private hasChanged(): boolean {\n for (const key in this.taxInfo) {\n // eslint-disable-next-line\n if (this.pristine.hasOwnProperty(key) && this.pristine[key] !== this.taxInfo[key]) {\n return true;\n }\n }\n return false;\n }\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class TwoFactorProviderRequest extends SecretVerificationRequest {\n type: TwoFactorProviderType;\n}\n","import { Directive, EventEmitter, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { VerificationType } from \"@bitwarden/common/enums/verificationType\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/models/request/secret-verification.request\";\nimport { TwoFactorProviderRequest } from \"@bitwarden/common/models/request/two-factor-provider.request\";\nimport { AuthResponseBase } from \"@bitwarden/common/types/authResponse\";\n\n@Directive()\nexport abstract class TwoFactorBaseComponent {\n @Output() onUpdated = new EventEmitter();\n\n type: TwoFactorProviderType;\n organizationId: string;\n twoFactorProviderType = TwoFactorProviderType;\n enabled = false;\n authed = false;\n\n protected hashedSecret: string;\n protected verificationType: VerificationType;\n\n constructor(\n protected apiService: ApiService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected logService: LogService,\n protected userVerificationService: UserVerificationService\n ) {}\n\n protected auth(authResponse: AuthResponseBase) {\n this.hashedSecret = authResponse.secret;\n this.verificationType = authResponse.verificationType;\n this.authed = true;\n }\n\n protected async enable(enableFunction: () => Promise) {\n try {\n await enableFunction();\n this.onUpdated.emit(true);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected async disable(promise: Promise) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"twoStepDisableDesc\"),\n this.i18nService.t(\"disable\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n\n try {\n const request = await this.buildRequestModel(TwoFactorProviderRequest);\n request.type = this.type;\n if (this.organizationId != null) {\n promise = this.apiService.putTwoFactorOrganizationDisable(this.organizationId, request);\n } else {\n promise = this.apiService.putTwoFactorDisable(request);\n }\n await promise;\n this.enabled = false;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"twoStepDisabled\"));\n this.onUpdated.emit(false);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected async buildRequestModel(\n requestClass: new () => T\n ) {\n return this.userVerificationService.buildRequest(\n {\n secret: this.hashedSecret,\n type: this.verificationType,\n },\n requestClass,\n true\n );\n }\n}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class UpdateTwoFactorDuoRequest extends SecretVerificationRequest {\n integrationKey: string;\n secretKey: string;\n host: string;\n}\n","
\n
\n
\n
\n

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

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

{{ \"twoFactorDuoDesc\" | i18n }}

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { UpdateTwoFactorDuoRequest } from \"@bitwarden/common/models/request/update-two-factor-duo.request\";\nimport { TwoFactorDuoResponse } from \"@bitwarden/common/models/response/two-factor-duo.response\";\nimport { AuthResponse } from \"@bitwarden/common/types/authResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n@Component({\n selector: \"app-two-factor-duo\",\n templateUrl: \"two-factor-duo.component.html\",\n})\nexport class TwoFactorDuoComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Duo;\n ikey: string;\n skey: string;\n host: string;\n formPromise: Promise;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n userVerificationService: UserVerificationService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n }\n\n auth(authResponse: AuthResponse) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n protected async enable() {\n const request = await this.buildRequestModel(UpdateTwoFactorDuoRequest);\n request.integrationKey = this.ikey;\n request.secretKey = this.skey;\n request.host = this.host;\n\n return super.enable(async () => {\n if (this.organizationId != null) {\n this.formPromise = this.apiService.putTwoFactorOrganizationDuo(\n this.organizationId,\n request\n );\n } else {\n this.formPromise = this.apiService.putTwoFactorDuo(request);\n }\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private processResponse(response: TwoFactorDuoResponse) {\n this.ikey = response.integrationKey;\n this.skey = response.secretKey;\n this.host = response.host;\n this.enabled = response.enabled;\n }\n}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class UpdateTwoFactorAuthenticatorRequest extends SecretVerificationRequest {\n token: string;\n key: string;\n}\n","
\n
\n
\n
\n

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

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

{{ \"twoStepAuthenticatorDesc\" | i18n }}

\n

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

\n
\n \n \n

{{ \"twoStepLoginProviderEnabled\" | i18n }}

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

{{ \"twoStepAuthenticatorNeedApp\" | i18n }}

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

{{ \"twoStepAuthenticatorAppsRecommended\" | i18n }}

\n

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

\n
\n

\n
\n {{ key }}\n

\n \n \n \n \n
\n
\n \n \n
\n \n
\n
\n
\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"@bitwarden/common/models/request/update-two-factor-authenticator.request\";\nimport { TwoFactorAuthenticatorResponse } from \"@bitwarden/common/models/response/two-factor-authenticator.response\";\nimport { AuthResponse } from \"@bitwarden/common/types/authResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n// NOTE: There are additional options available but these are just the ones we are current using.\n// See: https://github.com/neocotic/qrious#examples\ninterface QRiousOptions {\n element: HTMLElement;\n value: string;\n size: number;\n}\n\ndeclare global {\n interface Window {\n QRious: new (options: QRiousOptions) => unknown;\n }\n}\n\n@Component({\n selector: \"app-two-factor-authenticator\",\n templateUrl: \"two-factor-authenticator.component.html\",\n})\nexport class TwoFactorAuthenticatorComponent\n extends TwoFactorBaseComponent\n implements OnInit, OnDestroy\n{\n type = TwoFactorProviderType.Authenticator;\n key: string;\n token: string;\n formPromise: Promise;\n\n private qrScript: HTMLScriptElement;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n userVerificationService: UserVerificationService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n private stateService: StateService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n this.qrScript = window.document.createElement(\"script\");\n this.qrScript.src = \"scripts/qrious.min.js\";\n this.qrScript.async = true;\n }\n\n ngOnInit() {\n window.document.body.appendChild(this.qrScript);\n }\n\n ngOnDestroy() {\n window.document.body.removeChild(this.qrScript);\n }\n\n auth(authResponse: AuthResponse) {\n super.auth(authResponse);\n return this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n protected async enable() {\n const request = await this.buildRequestModel(UpdateTwoFactorAuthenticatorRequest);\n request.token = this.token;\n request.key = this.key;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorAuthenticator(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private async processResponse(response: TwoFactorAuthenticatorResponse) {\n this.token = null;\n this.enabled = response.enabled;\n this.key = response.key;\n const email = await this.stateService.getEmail();\n window.setTimeout(() => {\n new window.QRious({\n element: document.getElementById(\"qr\"),\n value:\n \"otpauth://totp/Bitwarden:\" +\n encodeURIComponent(email) +\n \"?secret=\" +\n encodeURIComponent(this.key) +\n \"&issuer=Bitwarden\",\n size: 160,\n });\n }, 100);\n }\n}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class UpdateTwoFactorEmailRequest extends SecretVerificationRequest {\n token: string;\n email: string;\n}\n","
\n
\n
\n
\n

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

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

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

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

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

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

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

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

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

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

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

\"\n );\n w.onafterprint = () => w.close();\n w.print();\n }\n\n private formatString(s: string) {\n if (s == null) {\n return null;\n }\n return s\n .replace(/(.{4})/g, \"$1 \")\n .trim()\n .toUpperCase();\n }\n\n private processResponse(response: TwoFactorRecoverResponse) {\n this.code = this.formatString(response.code);\n }\n}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class UpdateTwoFactorWebAuthnDeleteRequest extends SecretVerificationRequest {\n id: number;\n}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class UpdateTwoFactorWebAuthnRequest extends SecretVerificationRequest {\n deviceResponse: PublicKeyCredential;\n name: string;\n id: number;\n}\n","
\n
\n
\n
\n

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

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

{{ \"twoFactorWebAuthnWarning\" | i18n }}

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

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

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

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

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

{{ \"twoFactorYubikeyWarning\" | i18n }}

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

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

\n
    \n
  1. {{ \"twoFactorYubikeyPlugIn\" | i18n }}
  2. \n
  3. {{ \"twoFactorYubikeySelectKey\" | i18n }}
  4. \n
  5. {{ \"twoFactorYubikeyTouchButton\" | i18n }}
  6. \n
  7. {{ \"twoFactorYubikeySaveForm\" | i18n }}
  8. \n
\n
\n
\n
\n \n \n
\n {{ k.existingKey }}\n \n \n \n
\n
\n
\n {{ \"nfcSupport\" | i18n }}\n
\n \n \n
\n {{ \"twoFactorYubikeySupportsNfcDesc\" | i18n }}\n
\n
\n \n \n \n {{ \"disableAllKeys\" | i18n }}\n \n \n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"@bitwarden/common/models/request/update-two-factor-yubio-otp.request\";\nimport { TwoFactorYubiKeyResponse } from \"@bitwarden/common/models/response/two-factor-yubi-key.response\";\nimport { AuthResponse } from \"@bitwarden/common/types/authResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\ninterface Key {\n key: string;\n existingKey: string;\n}\n\n@Component({\n selector: \"app-two-factor-yubikey\",\n templateUrl: \"two-factor-yubikey.component.html\",\n})\nexport class TwoFactorYubiKeyComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Yubikey;\n keys: Key[];\n nfc = false;\n\n formPromise: Promise;\n disablePromise: Promise;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n userVerificationService: UserVerificationService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n }\n\n auth(authResponse: AuthResponse) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n async submit() {\n const request = await this.buildRequestModel(UpdateTwoFactorYubioOtpRequest);\n request.key1 = this.keys != null && this.keys.length > 0 ? this.keys[0].key : null;\n request.key2 = this.keys != null && this.keys.length > 1 ? this.keys[1].key : null;\n request.key3 = this.keys != null && this.keys.length > 2 ? this.keys[2].key : null;\n request.key4 = this.keys != null && this.keys.length > 3 ? this.keys[3].key : null;\n request.key5 = this.keys != null && this.keys.length > 4 ? this.keys[4].key : null;\n request.nfc = this.nfc;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorYubiKey(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"yubikeysUpdated\"));\n });\n }\n\n disable() {\n return super.disable(this.disablePromise);\n }\n\n remove(key: Key) {\n key.existingKey = null;\n key.key = null;\n }\n\n private processResponse(response: TwoFactorYubiKeyResponse) {\n this.enabled = response.enabled;\n this.keys = [\n { key: response.key1, existingKey: this.padRight(response.key1) },\n { key: response.key2, existingKey: this.padRight(response.key2) },\n { key: response.key3, existingKey: this.padRight(response.key3) },\n { key: response.key4, existingKey: this.padRight(response.key4) },\n { key: response.key5, existingKey: this.padRight(response.key5) },\n ];\n this.nfc = response.nfc || !response.enabled;\n }\n\n private padRight(str: string, character = \"•\", size = 44) {\n if (str == null || character == null || str.length >= size) {\n return str;\n }\n const max = (size - str.length) / character.length;\n for (let i = 0; i < max; i++) {\n str += character;\n }\n return str;\n }\n}\n","import { Component, OnDestroy, OnInit, Type, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { ModalRef } from \"@bitwarden/angular/components/modal/modal.ref\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { TwoFactorProviders } from \"@bitwarden/common/services/twoFactor.service\";\n\nimport { TwoFactorAuthenticatorComponent } from \"./two-factor-authenticator.component\";\nimport { TwoFactorDuoComponent } from \"./two-factor-duo.component\";\nimport { TwoFactorEmailComponent } from \"./two-factor-email.component\";\nimport { TwoFactorRecoveryComponent } from \"./two-factor-recovery.component\";\nimport { TwoFactorWebAuthnComponent } from \"./two-factor-webauthn.component\";\nimport { TwoFactorYubiKeyComponent } from \"./two-factor-yubikey.component\";\n\n@Component({\n selector: \"app-two-factor-setup\",\n templateUrl: \"two-factor-setup.component.html\",\n})\nexport class TwoFactorSetupComponent implements OnInit, OnDestroy {\n @ViewChild(\"recoveryTemplate\", { read: ViewContainerRef, static: true })\n recoveryModalRef: ViewContainerRef;\n @ViewChild(\"authenticatorTemplate\", { read: ViewContainerRef, static: true })\n authenticatorModalRef: ViewContainerRef;\n @ViewChild(\"yubikeyTemplate\", { read: ViewContainerRef, static: true })\n yubikeyModalRef: ViewContainerRef;\n @ViewChild(\"duoTemplate\", { read: ViewContainerRef, static: true }) duoModalRef: ViewContainerRef;\n @ViewChild(\"emailTemplate\", { read: ViewContainerRef, static: true })\n emailModalRef: ViewContainerRef;\n @ViewChild(\"webAuthnTemplate\", { read: ViewContainerRef, static: true })\n webAuthnModalRef: ViewContainerRef;\n\n organizationId: string;\n providers: any[] = [];\n canAccessPremium: boolean;\n showPolicyWarning = false;\n loading = true;\n modal: ModalRef;\n formPromise: Promise;\n\n private destroy$ = new Subject();\n private twoFactorAuthPolicyAppliesToActiveUser: boolean;\n\n constructor(\n protected apiService: ApiService,\n protected modalService: ModalService,\n protected messagingService: MessagingService,\n protected policyService: PolicyService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n\n for (const key in TwoFactorProviders) {\n // eslint-disable-next-line\n if (!TwoFactorProviders.hasOwnProperty(key)) {\n continue;\n }\n\n const p = (TwoFactorProviders as any)[key];\n if (this.filterProvider(p.type)) {\n continue;\n }\n\n this.providers.push({\n type: p.type,\n name: p.name,\n description: p.description,\n enabled: false,\n premium: p.premium,\n sort: p.sort,\n });\n }\n\n this.providers.sort((a: any, b: any) => a.sort - b.sort);\n\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.TwoFactorAuthentication)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n this.twoFactorAuthPolicyAppliesToActiveUser = policyAppliesToActiveUser;\n });\n\n await this.load();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async load() {\n this.loading = true;\n const providerList = await this.getTwoFactorProviders();\n providerList.data.forEach((p) => {\n this.providers.forEach((p2) => {\n if (p.type === p2.type) {\n p2.enabled = p.enabled;\n }\n });\n });\n this.evaluatePolicies();\n this.loading = false;\n }\n\n async manage(type: TwoFactorProviderType) {\n switch (type) {\n case TwoFactorProviderType.Authenticator: {\n const authComp = await this.openModal(\n this.authenticatorModalRef,\n TwoFactorAuthenticatorComponent\n );\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n authComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Authenticator);\n });\n break;\n }\n case TwoFactorProviderType.Yubikey: {\n const yubiComp = await this.openModal(this.yubikeyModalRef, TwoFactorYubiKeyComponent);\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n yubiComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Yubikey);\n });\n break;\n }\n case TwoFactorProviderType.Duo: {\n const duoComp = await this.openModal(this.duoModalRef, TwoFactorDuoComponent);\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n duoComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Duo);\n });\n break;\n }\n case TwoFactorProviderType.Email: {\n const emailComp = await this.openModal(this.emailModalRef, TwoFactorEmailComponent);\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n emailComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Email);\n });\n break;\n }\n case TwoFactorProviderType.WebAuthn: {\n const webAuthnComp = await this.openModal(\n this.webAuthnModalRef,\n TwoFactorWebAuthnComponent\n );\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n webAuthnComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.WebAuthn);\n });\n break;\n }\n default:\n break;\n }\n }\n\n recoveryCode() {\n this.openModal(this.recoveryModalRef, TwoFactorRecoveryComponent);\n }\n\n async premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n\n protected getTwoFactorProviders() {\n return this.apiService.getTwoFactorProviders();\n }\n\n protected filterProvider(type: TwoFactorProviderType) {\n return type === TwoFactorProviderType.OrganizationDuo;\n }\n\n protected async openModal(ref: ViewContainerRef, type: Type): Promise {\n const [modal, childComponent] = await this.modalService.openViewRef(type, ref);\n this.modal = modal;\n\n return childComponent;\n }\n\n protected updateStatus(enabled: boolean, type: TwoFactorProviderType) {\n if (!enabled && this.modal != null) {\n this.modal.close();\n }\n this.providers.forEach((p) => {\n if (p.type === type) {\n p.enabled = enabled;\n }\n });\n this.evaluatePolicies();\n }\n\n private async evaluatePolicies() {\n if (this.organizationId == null && this.providers.filter((p) => p.enabled).length === 1) {\n this.showPolicyWarning = this.twoFactorAuthPolicyAppliesToActiveUser;\n } else {\n this.showPolicyWarning = false;\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { VerificationType } from \"@bitwarden/common/enums/verificationType\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/models/request/secret-verification.request\";\nimport { AuthResponse } from \"@bitwarden/common/types/authResponse\";\nimport { TwoFactorResponse } from \"@bitwarden/common/types/twoFactorResponse\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\n@Component({\n selector: \"app-two-factor-verify\",\n templateUrl: \"two-factor-verify.component.html\",\n})\nexport class TwoFactorVerifyComponent {\n @Input() type: TwoFactorProviderType;\n @Input() organizationId: string;\n @Output() onAuthed = new EventEmitter>();\n\n secret: Verification;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private logService: LogService,\n private userVerificationService: UserVerificationService\n ) {}\n\n async submit() {\n let hashedSecret: string;\n\n try {\n this.formPromise = this.userVerificationService.buildRequest(this.secret).then((request) => {\n hashedSecret =\n this.secret.type === VerificationType.MasterPassword\n ? request.masterPasswordHash\n : request.otp;\n return this.apiCall(request);\n });\n\n const response = await this.formPromise;\n this.onAuthed.emit({\n response: response,\n secret: hashedSecret,\n verificationType: this.secret.type,\n });\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private apiCall(request: SecretVerificationRequest): Promise {\n switch (this.type) {\n case -1 as TwoFactorProviderType:\n return this.apiService.getTwoFactorRecover(request);\n case TwoFactorProviderType.Duo:\n case TwoFactorProviderType.OrganizationDuo:\n if (this.organizationId != null) {\n return this.apiService.getTwoFactorOrganizationDuo(this.organizationId, request);\n } else {\n return this.apiService.getTwoFactorDuo(request);\n }\n case TwoFactorProviderType.Email:\n return this.apiService.getTwoFactorEmail(request);\n case TwoFactorProviderType.WebAuthn:\n return this.apiService.getTwoFactorWebAuthn(request);\n case TwoFactorProviderType.Authenticator:\n return this.apiService.getTwoFactorAuthenticator(request);\n case TwoFactorProviderType.Yubikey:\n return this.apiService.getTwoFactorYubiKey(request);\n }\n }\n}\n","
\n
\n

{{ \"twoStepLoginAuthDesc\" | i18n }}

\n \n \n
\n
\n \n \n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-update-license\",\n templateUrl: \"update-license.component.html\",\n})\nexport class UpdateLicenseComponent {\n @Input() organizationId: string;\n @Output() onUpdated = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async submit() {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n try {\n const fd = new FormData();\n fd.append(\"license\", files[0]);\n\n let updatePromise: Promise = null;\n if (this.organizationId == null) {\n updatePromise = this.apiService.postAccountLicense(fd);\n } else {\n updatePromise = this.organizationApiService.updateLicense(this.organizationId, fd);\n }\n\n this.formPromise = updatePromise.then(() => {\n return this.apiService.refreshIdentityToken();\n });\n\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"updatedLicense\"));\n this.onUpdated.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","
\n
\n \n \n {{\n \"licenseFileDesc\"\n | i18n\n : (!organizationId\n ? \"bitwarden_premium_license.json\"\n : \"bitwarden_organization_license.json\")\n }}\n
\n \n \n
\n","import { NgModule } from \"@angular/core\";\n\nimport { UserVerificationComponent } from \"@bitwarden/angular/components/user-verification.component\";\n\nimport { AcceptEmergencyComponent } from \"../accounts/accept-emergency.component\";\nimport { AcceptOrganizationComponent } from \"../accounts/accept-organization.component\";\nimport { HintComponent } from \"../accounts/hint.component\";\nimport { LockComponent } from \"../accounts/lock.component\";\nimport { RecoverDeleteComponent } from \"../accounts/recover-delete.component\";\nimport { RecoverTwoFactorComponent } from \"../accounts/recover-two-factor.component\";\nimport { RegisterFormModule } from \"../accounts/register-form/register-form.module\";\nimport { RegisterComponent } from \"../accounts/register.component\";\nimport { RemovePasswordComponent } from \"../accounts/remove-password.component\";\nimport { SetPasswordComponent } from \"../accounts/set-password.component\";\nimport { SsoComponent } from \"../accounts/sso.component\";\nimport { TwoFactorOptionsComponent } from \"../accounts/two-factor-options.component\";\nimport { TwoFactorComponent } from \"../accounts/two-factor.component\";\nimport { UpdatePasswordComponent } from \"../accounts/update-password.component\";\nimport { UpdateTempPasswordComponent } from \"../accounts/update-temp-password.component\";\nimport { VerifyEmailTokenComponent } from \"../accounts/verify-email-token.component\";\nimport { VerifyRecoverDeleteComponent } from \"../accounts/verify-recover-delete.component\";\nimport { NestedCheckboxComponent } from \"../components/nested-checkbox.component\";\nimport { OrganizationSwitcherComponent } from \"../components/organization-switcher.component\";\nimport { PasswordRepromptComponent } from \"../components/password-reprompt.component\";\nimport { PremiumBadgeComponent } from \"../components/premium-badge.component\";\nimport { UserVerificationPromptComponent } from \"../components/user-verification-prompt.component\";\nimport { FooterComponent } from \"../layouts/footer.component\";\nimport { FrontendLayoutComponent } from \"../layouts/frontend-layout.component\";\nimport { NavbarComponent } from \"../layouts/navbar.component\";\nimport { UserLayoutComponent } from \"../layouts/user-layout.component\";\nimport { OrganizationCreateModule } from \"../organizations/create/organization-create.module\";\nimport { OrganizationLayoutComponent } from \"../organizations/layouts/organization-layout.component\";\nimport { BulkConfirmComponent as OrgBulkConfirmComponent } from \"../organizations/manage/bulk/bulk-confirm.component\";\nimport { BulkRemoveComponent as OrgBulkRemoveComponent } from \"../organizations/manage/bulk/bulk-remove.component\";\nimport { BulkRestoreRevokeComponent as OrgBulkRestoreRevokeComponent } from \"../organizations/manage/bulk/bulk-restore-revoke.component\";\nimport { BulkStatusComponent as OrgBulkStatusComponent } from \"../organizations/manage/bulk/bulk-status.component\";\nimport { CollectionAddEditComponent as OrgCollectionAddEditComponent } from \"../organizations/manage/collection-add-edit.component\";\nimport { CollectionsComponent as OrgManageCollectionsComponent } from \"../organizations/manage/collections.component\";\nimport { EntityEventsComponent as OrgEntityEventsComponent } from \"../organizations/manage/entity-events.component\";\nimport { EventsComponent as OrgEventsComponent } from \"../organizations/manage/events.component\";\nimport { GroupAddEditComponent as OrgGroupAddEditComponent } from \"../organizations/manage/group-add-edit.component\";\nimport { GroupsComponent as OrgGroupsComponent } from \"../organizations/manage/groups.component\";\nimport { ManageComponent as OrgManageComponent } from \"../organizations/manage/manage.component\";\nimport { PeopleComponent as OrgPeopleComponent } from \"../organizations/manage/people.component\";\nimport { ResetPasswordComponent as OrgResetPasswordComponent } from \"../organizations/manage/reset-password.component\";\nimport { UserAddEditComponent as OrgUserAddEditComponent } from \"../organizations/manage/user-add-edit.component\";\nimport { UserConfirmComponent as OrgUserConfirmComponent } from \"../organizations/manage/user-confirm.component\";\nimport { UserGroupsComponent as OrgUserGroupsComponent } from \"../organizations/manage/user-groups.component\";\nimport { AcceptFamilySponsorshipComponent } from \"../organizations/sponsorships/accept-family-sponsorship.component\";\nimport { FamiliesForEnterpriseSetupComponent } from \"../organizations/sponsorships/families-for-enterprise-setup.component\";\nimport { ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent } from \"../organizations/tools/exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent } from \"../organizations/tools/inactive-two-factor-report.component\";\nimport { ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent } from \"../organizations/tools/reused-passwords-report.component\";\nimport { ToolsComponent as OrgToolsComponent } from \"../organizations/tools/tools.component\";\nimport { UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent } from \"../organizations/tools/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent } from \"../organizations/tools/weak-passwords-report.component\";\nimport { AddEditComponent as OrgAddEditComponent } from \"../organizations/vault/add-edit.component\";\nimport { AttachmentsComponent as OrgAttachmentsComponent } from \"../organizations/vault/attachments.component\";\nimport { CollectionsComponent as OrgCollectionsComponent } from \"../organizations/vault/collections.component\";\nimport { ProvidersComponent } from \"../providers/providers.component\";\nimport { AccessComponent } from \"../send/access.component\";\nimport { AddEditComponent as SendAddEditComponent } from \"../send/add-edit.component\";\nimport { EffluxDatesComponent as SendEffluxDatesComponent } from \"../send/efflux-dates.component\";\nimport { SendComponent } from \"../send/send.component\";\nimport { AccountComponent } from \"../settings/account.component\";\nimport { AddCreditComponent } from \"../settings/add-credit.component\";\nimport { AdjustPaymentComponent } from \"../settings/adjust-payment.component\";\nimport { AdjustStorageComponent } from \"../settings/adjust-storage.component\";\nimport { ApiKeyComponent } from \"../settings/api-key.component\";\nimport { BillingHistoryViewComponent } from \"../settings/billing-history-view.component\";\nimport { BillingHistoryComponent } from \"../settings/billing-history.component\";\nimport { BillingSyncKeyComponent } from \"../settings/billing-sync-key.component\";\nimport { ChangeEmailComponent } from \"../settings/change-email.component\";\nimport { ChangeKdfComponent } from \"../settings/change-kdf.component\";\nimport { ChangePasswordComponent } from \"../settings/change-password.component\";\nimport { CreateOrganizationComponent } from \"../settings/create-organization.component\";\nimport { DeauthorizeSessionsComponent } from \"../settings/deauthorize-sessions.component\";\nimport { DeleteAccountComponent } from \"../settings/delete-account.component\";\nimport { DomainRulesComponent } from \"../settings/domain-rules.component\";\nimport { EmergencyAccessAddEditComponent } from \"../settings/emergency-access-add-edit.component\";\nimport { EmergencyAccessAttachmentsComponent } from \"../settings/emergency-access-attachments.component\";\nimport { EmergencyAccessConfirmComponent } from \"../settings/emergency-access-confirm.component\";\nimport { EmergencyAccessTakeoverComponent } from \"../settings/emergency-access-takeover.component\";\nimport { EmergencyAccessViewComponent } from \"../settings/emergency-access-view.component\";\nimport { EmergencyAccessComponent } from \"../settings/emergency-access.component\";\nimport { EmergencyAddEditComponent } from \"../settings/emergency-add-edit.component\";\nimport { OrganizationPlansComponent } from \"../settings/organization-plans.component\";\nimport { PaymentMethodComponent } from \"../settings/payment-method.component\";\nimport { PaymentComponent } from \"../settings/payment.component\";\nimport { PreferencesComponent } from \"../settings/preferences.component\";\nimport { PremiumComponent } from \"../settings/premium.component\";\nimport { ProfileComponent } from \"../settings/profile.component\";\nimport { PurgeVaultComponent } from \"../settings/purge-vault.component\";\nimport { SecurityKeysComponent } from \"../settings/security-keys.component\";\nimport { SecurityComponent } from \"../settings/security.component\";\nimport { SettingsComponent } from \"../settings/settings.component\";\nimport { SponsoredFamiliesComponent } from \"../settings/sponsored-families.component\";\nimport { SponsoringOrgRowComponent } from \"../settings/sponsoring-org-row.component\";\nimport { SubscriptionComponent } from \"../settings/subscription.component\";\nimport { TaxInfoComponent } from \"../settings/tax-info.component\";\nimport { TwoFactorAuthenticatorComponent } from \"../settings/two-factor-authenticator.component\";\nimport { TwoFactorDuoComponent } from \"../settings/two-factor-duo.component\";\nimport { TwoFactorEmailComponent } from \"../settings/two-factor-email.component\";\nimport { TwoFactorRecoveryComponent } from \"../settings/two-factor-recovery.component\";\nimport { TwoFactorSetupComponent } from \"../settings/two-factor-setup.component\";\nimport { TwoFactorVerifyComponent } from \"../settings/two-factor-verify.component\";\nimport { TwoFactorWebAuthnComponent } from \"../settings/two-factor-webauthn.component\";\nimport { TwoFactorYubiKeyComponent } from \"../settings/two-factor-yubikey.component\";\nimport { UpdateKeyComponent } from \"../settings/update-key.component\";\nimport { UpdateLicenseComponent } from \"../settings/update-license.component\";\nimport { UserSubscriptionComponent } from \"../settings/user-subscription.component\";\nimport { VaultTimeoutInputComponent } from \"../settings/vault-timeout-input.component\";\nimport { VerifyEmailComponent } from \"../settings/verify-email.component\";\nimport { GeneratorComponent } from \"../tools/generator.component\";\nimport { PasswordGeneratorHistoryComponent } from \"../tools/password-generator-history.component\";\nimport { ToolsComponent } from \"../tools/tools.component\";\nimport { AddEditCustomFieldsComponent } from \"../vault/add-edit-custom-fields.component\";\nimport { AddEditComponent } from \"../vault/add-edit.component\";\nimport { AttachmentsComponent } from \"../vault/attachments.component\";\nimport { BulkActionsComponent } from \"../vault/bulk-actions.component\";\nimport { BulkDeleteComponent } from \"../vault/bulk-delete.component\";\nimport { BulkMoveComponent } from \"../vault/bulk-move.component\";\nimport { BulkRestoreComponent } from \"../vault/bulk-restore.component\";\nimport { BulkShareComponent } from \"../vault/bulk-share.component\";\nimport { CollectionsComponent } from \"../vault/collections.component\";\nimport { FolderAddEditComponent } from \"../vault/folder-add-edit.component\";\nimport { OrganizationBadgeModule } from \"../vault/organization-badge/organization-badge.module\";\nimport { ShareComponent } from \"../vault/share.component\";\nimport { VaultFilterModule } from \"../vault/vault-filter/vault-filter.module\";\n\nimport { SharedModule } from \".\";\n\n// Please do not add to this list of declarations - we should refactor these into modules when doing so makes sense until there are none left.\n// If you are building new functionality, please create or extend a feature module instead.\n@NgModule({\n imports: [\n SharedModule,\n VaultFilterModule,\n OrganizationBadgeModule,\n OrganizationCreateModule,\n RegisterFormModule,\n ],\n declarations: [\n PremiumBadgeComponent,\n AcceptEmergencyComponent,\n AcceptFamilySponsorshipComponent,\n AcceptOrganizationComponent,\n AccessComponent,\n AccountComponent,\n AddCreditComponent,\n AddEditComponent,\n AddEditCustomFieldsComponent,\n AddEditCustomFieldsComponent,\n AdjustPaymentComponent,\n AdjustStorageComponent,\n ApiKeyComponent,\n AttachmentsComponent,\n BillingSyncKeyComponent,\n BulkActionsComponent,\n BulkDeleteComponent,\n BulkMoveComponent,\n BulkRestoreComponent,\n BulkShareComponent,\n ChangeEmailComponent,\n ChangeKdfComponent,\n ChangePasswordComponent,\n CollectionsComponent,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DomainRulesComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n FamiliesForEnterpriseSetupComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n LockComponent,\n NavbarComponent,\n NestedCheckboxComponent,\n OrganizationSwitcherComponent,\n OrgAddEditComponent,\n OrganizationLayoutComponent,\n OrganizationPlansComponent,\n OrgAttachmentsComponent,\n OrgBulkConfirmComponent,\n OrgBulkRestoreRevokeComponent,\n OrgBulkRemoveComponent,\n OrgBulkStatusComponent,\n OrgCollectionAddEditComponent,\n OrgCollectionsComponent,\n OrgEntityEventsComponent,\n OrgEventsComponent,\n OrgExposedPasswordsReportComponent,\n OrgGroupAddEditComponent,\n OrgGroupsComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgManageCollectionsComponent,\n OrgManageComponent,\n OrgPeopleComponent,\n OrgResetPasswordComponent,\n OrgReusedPasswordsReportComponent,\n OrgToolsComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserAddEditComponent,\n OrgUserConfirmComponent,\n OrgUserGroupsComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordRepromptComponent,\n UserVerificationPromptComponent,\n PaymentComponent,\n PaymentMethodComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n PremiumComponent,\n ProfileComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RegisterComponent,\n RemovePasswordComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SendAddEditComponent,\n SendComponent,\n SendEffluxDatesComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n SubscriptionComponent,\n TaxInfoComponent,\n ToolsComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n BillingHistoryComponent,\n BillingHistoryViewComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n UserVerificationComponent,\n VaultTimeoutInputComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n ],\n exports: [\n PremiumBadgeComponent,\n AcceptEmergencyComponent,\n AcceptOrganizationComponent,\n AccessComponent,\n AccountComponent,\n AddCreditComponent,\n AddEditComponent,\n AddEditCustomFieldsComponent,\n AddEditCustomFieldsComponent,\n AdjustPaymentComponent,\n AdjustStorageComponent,\n ApiKeyComponent,\n AttachmentsComponent,\n BulkActionsComponent,\n BulkDeleteComponent,\n BulkMoveComponent,\n BulkRestoreComponent,\n BulkShareComponent,\n ChangeEmailComponent,\n ChangeKdfComponent,\n ChangePasswordComponent,\n CollectionsComponent,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DomainRulesComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n FamiliesForEnterpriseSetupComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n LockComponent,\n NavbarComponent,\n NestedCheckboxComponent,\n OrganizationSwitcherComponent,\n OrgAddEditComponent,\n OrganizationLayoutComponent,\n OrganizationPlansComponent,\n OrgAttachmentsComponent,\n OrgBulkConfirmComponent,\n OrgBulkRestoreRevokeComponent,\n OrgBulkRemoveComponent,\n OrgBulkStatusComponent,\n OrgCollectionAddEditComponent,\n OrgCollectionsComponent,\n OrgEntityEventsComponent,\n OrgEventsComponent,\n OrgExposedPasswordsReportComponent,\n OrgGroupAddEditComponent,\n OrgGroupsComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgManageCollectionsComponent,\n OrgManageComponent,\n OrgPeopleComponent,\n OrgResetPasswordComponent,\n OrgReusedPasswordsReportComponent,\n OrgToolsComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserAddEditComponent,\n OrgUserConfirmComponent,\n OrgUserGroupsComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordRepromptComponent,\n PaymentComponent,\n PaymentMethodComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n PremiumComponent,\n ProfileComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RegisterComponent,\n RemovePasswordComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SendAddEditComponent,\n SendComponent,\n SendEffluxDatesComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n SubscriptionComponent,\n TaxInfoComponent,\n ToolsComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n BillingHistoryComponent,\n BillingHistoryViewComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n UserVerificationComponent,\n VaultTimeoutInputComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n ],\n})\nexport class LooseComponentsModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { ButtonComponent } from \"./button.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [ButtonComponent],\n declarations: [ButtonComponent],\n})\nexport class ButtonModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { CalloutComponent } from \"./callout.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [CalloutComponent],\n declarations: [CalloutComponent],\n})\nexport class CalloutModule {}\n","import { OverlayModule } from \"@angular/cdk/overlay\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { MenuDividerComponent } from \"./menu-divider.component\";\nimport { MenuItemDirective } from \"./menu-item.directive\";\nimport { MenuTriggerForDirective } from \"./menu-trigger-for.directive\";\nimport { MenuComponent } from \"./menu.component\";\n\n@NgModule({\n imports: [CommonModule, OverlayModule],\n declarations: [MenuComponent, MenuTriggerForDirective, MenuItemDirective, MenuDividerComponent],\n exports: [MenuComponent, MenuTriggerForDirective, MenuItemDirective, MenuDividerComponent],\n})\nexport class MenuModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BitIconComponent } from \"./icon.component\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitIconComponent],\n exports: [BitIconComponent],\n})\nexport class IconModule {}\n","import { PortalModule } from \"@angular/cdk/portal\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { RouterModule } from \"@angular/router\";\n\nimport { TabHeaderComponent } from \"./shared/tab-header.component\";\nimport { TabListContainerDirective } from \"./shared/tab-list-container.directive\";\nimport { TabListItemDirective } from \"./shared/tab-list-item.directive\";\nimport { TabBodyComponent } from \"./tab-group/tab-body.component\";\nimport { TabGroupComponent } from \"./tab-group/tab-group.component\";\nimport { TabLabelDirective } from \"./tab-group/tab-label.directive\";\nimport { TabComponent } from \"./tab-group/tab.component\";\nimport { TabLinkComponent } from \"./tab-nav-bar/tab-link.component\";\nimport { TabNavBarComponent } from \"./tab-nav-bar/tab-nav-bar.component\";\n\n@NgModule({\n imports: [CommonModule, RouterModule, PortalModule],\n exports: [\n TabGroupComponent,\n TabComponent,\n TabLabelDirective,\n TabNavBarComponent,\n TabLinkComponent,\n ],\n declarations: [\n TabGroupComponent,\n TabComponent,\n TabLabelDirective,\n TabListContainerDirective,\n TabListItemDirective,\n TabHeaderComponent,\n TabNavBarComponent,\n TabLinkComponent,\n TabBodyComponent,\n ],\n})\nexport class TabsModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { CellDirective } from \"./cell.directive\";\nimport { RowDirective } from \"./row.directive\";\nimport { TableComponent } from \"./table.component\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [TableComponent, CellDirective, RowDirective],\n exports: [TableComponent, CellDirective, RowDirective],\n})\nexport class TableModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { AvatarComponent } from \"./avatar.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [AvatarComponent],\n declarations: [AvatarComponent],\n})\nexport class AvatarModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BitIconButtonComponent } from \"./icon-button.component\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitIconButtonComponent],\n exports: [BitIconButtonComponent],\n})\nexport class IconButtonModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../shared\";\n\nimport { BitActionDirective } from \"./bit-action.directive\";\nimport { BitSubmitDirective } from \"./bit-submit.directive\";\nimport { BitFormButtonDirective } from \"./form-button.directive\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [BitActionDirective, BitFormButtonDirective, BitSubmitDirective],\n exports: [BitActionDirective, BitFormButtonDirective, BitSubmitDirective],\n})\nexport class AsyncActionsModule {}\n","import { registerLocaleData } from \"@angular/common\";\nimport localeAf from \"@angular/common/locales/af\";\nimport localeAr from \"@angular/common/locales/ar\";\nimport localeAz from \"@angular/common/locales/az\";\nimport localeBe from \"@angular/common/locales/be\";\nimport localeBg from \"@angular/common/locales/bg\";\nimport localeBn from \"@angular/common/locales/bn\";\nimport localeBs from \"@angular/common/locales/bs\";\nimport localeCa from \"@angular/common/locales/ca\";\nimport localeCs from \"@angular/common/locales/cs\";\nimport localeDa from \"@angular/common/locales/da\";\nimport localeDe from \"@angular/common/locales/de\";\nimport localeEl from \"@angular/common/locales/el\";\nimport localeEnGb from \"@angular/common/locales/en-GB\";\nimport localeEnIn from \"@angular/common/locales/en-IN\";\nimport localeEo from \"@angular/common/locales/eo\";\nimport localeEs from \"@angular/common/locales/es\";\nimport localeEt from \"@angular/common/locales/et\";\nimport localeEu from \"@angular/common/locales/eu\";\nimport localeFi from \"@angular/common/locales/fi\";\nimport localeFil from \"@angular/common/locales/fil\";\nimport localeFr from \"@angular/common/locales/fr\";\nimport localeHe from \"@angular/common/locales/he\";\nimport localeHi from \"@angular/common/locales/hi\";\nimport localeHr from \"@angular/common/locales/hr\";\nimport localeHu from \"@angular/common/locales/hu\";\nimport localeId from \"@angular/common/locales/id\";\nimport localeIt from \"@angular/common/locales/it\";\nimport localeJa from \"@angular/common/locales/ja\";\nimport localeKa from \"@angular/common/locales/ka\";\nimport localeKm from \"@angular/common/locales/km\";\nimport localeKn from \"@angular/common/locales/kn\";\nimport localeKo from \"@angular/common/locales/ko\";\nimport localeLv from \"@angular/common/locales/lv\";\nimport localeMl from \"@angular/common/locales/ml\";\nimport localeNb from \"@angular/common/locales/nb\";\nimport localeNl from \"@angular/common/locales/nl\";\nimport localeNn from \"@angular/common/locales/nn\";\nimport localePl from \"@angular/common/locales/pl\";\nimport localePtBr from \"@angular/common/locales/pt\";\nimport localePtPt from \"@angular/common/locales/pt-PT\";\nimport localeRo from \"@angular/common/locales/ro\";\nimport localeRu from \"@angular/common/locales/ru\";\nimport localeSi from \"@angular/common/locales/si\";\nimport localeSk from \"@angular/common/locales/sk\";\nimport localeSl from \"@angular/common/locales/sl\";\nimport localeSr from \"@angular/common/locales/sr\";\nimport localeSv from \"@angular/common/locales/sv\";\nimport localeTr from \"@angular/common/locales/tr\";\nimport localeUk from \"@angular/common/locales/uk\";\nimport localeVi from \"@angular/common/locales/vi\";\nimport localeZhCn from \"@angular/common/locales/zh-Hans\";\nimport localeZhTw from \"@angular/common/locales/zh-Hant\";\n\nregisterLocaleData(localeAf, \"af\");\nregisterLocaleData(localeAr, \"ar\");\nregisterLocaleData(localeAz, \"az\");\nregisterLocaleData(localeBe, \"be\");\nregisterLocaleData(localeBg, \"bg\");\nregisterLocaleData(localeBn, \"bn\");\nregisterLocaleData(localeBs, \"bs\");\nregisterLocaleData(localeCa, \"ca\");\nregisterLocaleData(localeCs, \"cs\");\nregisterLocaleData(localeDa, \"da\");\nregisterLocaleData(localeDe, \"de\");\nregisterLocaleData(localeEl, \"el\");\nregisterLocaleData(localeEnGb, \"en-GB\");\nregisterLocaleData(localeEnIn, \"en-IN\");\nregisterLocaleData(localeEo, \"eo\");\nregisterLocaleData(localeEs, \"es\");\nregisterLocaleData(localeEt, \"et\");\nregisterLocaleData(localeEu, \"eu\");\nregisterLocaleData(localeFi, \"fi\");\nregisterLocaleData(localeFil, \"fil\");\nregisterLocaleData(localeFr, \"fr\");\nregisterLocaleData(localeHe, \"he\");\nregisterLocaleData(localeHi, \"hi\");\nregisterLocaleData(localeHr, \"hr\");\nregisterLocaleData(localeHu, \"hu\");\nregisterLocaleData(localeId, \"id\");\nregisterLocaleData(localeIt, \"it\");\nregisterLocaleData(localeJa, \"ja\");\nregisterLocaleData(localeKa, \"ka\");\nregisterLocaleData(localeKm, \"km\");\nregisterLocaleData(localeKn, \"kn\");\nregisterLocaleData(localeKo, \"ko\");\nregisterLocaleData(localeLv, \"lv\");\nregisterLocaleData(localeMl, \"ml\");\nregisterLocaleData(localeNb, \"nb\");\nregisterLocaleData(localeNl, \"nl\");\nregisterLocaleData(localeNn, \"nn\");\nregisterLocaleData(localePl, \"pl\");\nregisterLocaleData(localePtBr, \"pt-BR\");\nregisterLocaleData(localePtPt, \"pt-PT\");\nregisterLocaleData(localeRo, \"ro\");\nregisterLocaleData(localeRu, \"ru\");\nregisterLocaleData(localeSi, \"si\");\nregisterLocaleData(localeSk, \"sk\");\nregisterLocaleData(localeSl, \"sl\");\nregisterLocaleData(localeSr, \"sr\");\nregisterLocaleData(localeSv, \"sv\");\nregisterLocaleData(localeTr, \"tr\");\nregisterLocaleData(localeUk, \"uk\");\nregisterLocaleData(localeVi, \"vi\");\nregisterLocaleData(localeZhCn, \"zh-CN\");\nregisterLocaleData(localeZhTw, \"zh-TW\");\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { CommonModule, DatePipe } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { RouterModule } from \"@angular/router\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\nimport { ToastrModule } from \"ngx-toastr\";\n\nimport { JslibModule } from \"@bitwarden/angular/jslib.module\";\nimport {\n AsyncActionsModule,\n AvatarModule,\n BadgeModule,\n ButtonModule,\n CalloutModule,\n FormFieldModule,\n IconButtonModule,\n IconModule,\n MenuModule,\n TableModule,\n TabsModule,\n} from \"@bitwarden/components\";\n\n// Register the locales for the application\nimport \"./locales\";\n\n/**\n * This NgModule should contain the most basic shared directives, pipes, and components. They\n * should be widely used by other modules to be considered for adding to this module. If in doubt\n * do not add to this module.\n *\n * See: https://angular.io/guide/module-types#shared-ngmodules\n */\n@NgModule({\n imports: [\n CommonModule,\n DragDropModule,\n FormsModule,\n InfiniteScrollModule,\n JslibModule,\n ReactiveFormsModule,\n RouterModule,\n BadgeModule,\n ButtonModule,\n CalloutModule,\n ToastrModule,\n BadgeModule,\n ButtonModule,\n MenuModule,\n FormFieldModule,\n IconModule,\n TabsModule,\n TableModule,\n AvatarModule,\n IconButtonModule,\n ],\n exports: [\n CommonModule,\n AsyncActionsModule,\n DragDropModule,\n FormsModule,\n InfiniteScrollModule,\n JslibModule,\n ReactiveFormsModule,\n RouterModule,\n BadgeModule,\n ButtonModule,\n CalloutModule,\n ToastrModule,\n BadgeModule,\n ButtonModule,\n MenuModule,\n FormFieldModule,\n IconModule,\n TabsModule,\n TableModule,\n AvatarModule,\n IconButtonModule,\n ],\n providers: [DatePipe],\n bootstrap: [],\n})\nexport class SharedModule {}\n","import { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport { Directive, Input, OnChanges, SimpleChanges } from \"@angular/core\";\n\nimport { EventService } from \"@bitwarden/common/abstractions/event.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { EventType } from \"@bitwarden/common/enums/eventType\";\nimport { FieldType } from \"@bitwarden/common/enums/fieldType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { FieldView } from \"@bitwarden/common/models/view/field.view\";\n\n@Directive()\nexport class AddEditCustomFieldsComponent implements OnChanges {\n @Input() cipher: CipherView;\n @Input() thisCipherType: CipherType;\n @Input() editMode: boolean;\n\n addFieldType: FieldType = FieldType.Text;\n addFieldTypeOptions: any[];\n addFieldLinkedTypeOption: any;\n linkedFieldOptions: any[] = [];\n\n cipherType = CipherType;\n fieldType = FieldType;\n eventType = EventType;\n\n constructor(private i18nService: I18nService, private eventService: EventService) {\n this.addFieldTypeOptions = [\n { name: i18nService.t(\"cfTypeText\"), value: FieldType.Text },\n { name: i18nService.t(\"cfTypeHidden\"), value: FieldType.Hidden },\n { name: i18nService.t(\"cfTypeBoolean\"), value: FieldType.Boolean },\n ];\n this.addFieldLinkedTypeOption = {\n name: this.i18nService.t(\"cfTypeLinked\"),\n value: FieldType.Linked,\n };\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.thisCipherType != null) {\n this.setLinkedFieldOptions();\n\n if (!changes.thisCipherType.firstChange) {\n this.resetCipherLinkedFields();\n }\n }\n }\n\n addField() {\n if (this.cipher.fields == null) {\n this.cipher.fields = [];\n }\n\n const f = new FieldView();\n f.type = this.addFieldType;\n f.newField = true;\n\n if (f.type === FieldType.Linked) {\n f.linkedId = this.linkedFieldOptions[0].value;\n }\n\n this.cipher.fields.push(f);\n }\n\n removeField(field: FieldView) {\n const i = this.cipher.fields.indexOf(field);\n if (i > -1) {\n this.cipher.fields.splice(i, 1);\n }\n }\n\n toggleFieldValue(field: FieldView) {\n const f = field as any;\n f.showValue = !f.showValue;\n if (this.editMode && f.showValue) {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipher.id);\n }\n }\n\n trackByFunction(index: number, item: any) {\n return index;\n }\n\n drop(event: CdkDragDrop) {\n moveItemInArray(this.cipher.fields, event.previousIndex, event.currentIndex);\n }\n\n private setLinkedFieldOptions() {\n if (this.cipher.linkedFieldOptions == null) {\n return;\n }\n\n const options: any = [];\n this.cipher.linkedFieldOptions.forEach((linkedFieldOption, id) =>\n options.push({ name: this.i18nService.t(linkedFieldOption.i18nKey), value: id })\n );\n this.linkedFieldOptions = options.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n\n private resetCipherLinkedFields() {\n if (this.cipher.fields == null || this.cipher.fields.length === 0) {\n return;\n }\n\n // Delete any Linked custom fields if the item type does not support them\n if (this.cipher.linkedFieldOptions == null) {\n this.cipher.fields = this.cipher.fields.filter((f) => f.type !== FieldType.Linked);\n return;\n }\n\n this.cipher.fields\n .filter((f) => f.type === FieldType.Linked)\n .forEach((f) => (f.linkedId = this.linkedFieldOptions[0].value));\n }\n}\n","import { Directive, ElementRef, forwardRef, HostListener, Input, Renderer2 } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n// ref: https://juristr.com/blog/2018/02/ng-true-value-directive/\n@Directive({\n selector: \"input[type=checkbox][appTrueFalseValue]\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TrueFalseValueDirective),\n multi: true,\n },\n ],\n})\nexport class TrueFalseValueDirective implements ControlValueAccessor {\n @Input() trueValue = true;\n @Input() falseValue = false;\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {}\n\n @HostListener(\"change\", [\"$event\"])\n onHostChange(ev: any) {\n this.propagateChange(ev.target.checked ? this.trueValue : this.falseValue);\n }\n\n writeValue(obj: any): void {\n if (obj === this.trueValue) {\n this.renderer.setProperty(this.elementRef.nativeElement, \"checked\", true);\n } else {\n this.renderer.setProperty(this.elementRef.nativeElement, \"checked\", false);\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n /* nothing */\n }\n\n setDisabledState?(isDisabled: boolean): void {\n /* nothing */\n }\n\n private propagateChange = (_: any) => {\n /* nothing */\n };\n}\n","\n

{{ \"customFields\" | i18n }}

\n
\n \n
\n
\n \n \n \n \n
\n \n
\n
\n \n
\n \n
\n \n
\n \n \n \n
\n
\n \n
\n \n
\n \n \n \n \n \n \n \n
\n
\n \n
\n \n \n \n
\n
\n \n \n
\n \n \n \n \n \n \n
\n
\n
\n \n \n \n {{ \"newCustomField\" | i18n }}\n \n
\n
\n \n \n
\n
\n
\n","import { Component, Input } from \"@angular/core\";\n\nimport { AddEditCustomFieldsComponent as BaseAddEditCustomFieldsComponent } from \"@bitwarden/angular/components/add-edit-custom-fields.component\";\nimport { EventService } from \"@bitwarden/common/abstractions/event.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\n@Component({\n selector: \"app-vault-add-edit-custom-fields\",\n templateUrl: \"add-edit-custom-fields.component.html\",\n})\nexport class AddEditCustomFieldsComponent extends BaseAddEditCustomFieldsComponent {\n @Input() viewOnly: boolean;\n @Input() copy: (value: string, typeI18nKey: string, aType: string) => void;\n\n constructor(i18nService: I18nService, eventService: EventService) {\n super(i18nService, eventService);\n }\n}\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { Observable, Subject, takeUntil, concatMap } from \"rxjs\";\n\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { EventService } from \"@bitwarden/common/abstractions/event.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/enums/cipherRepromptType\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { EventType } from \"@bitwarden/common/enums/eventType\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { SecureNoteType } from \"@bitwarden/common/enums/secureNoteType\";\nimport { UriMatchType } from \"@bitwarden/common/enums/uriMatchType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { CardView } from \"@bitwarden/common/models/view/card.view\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { FolderView } from \"@bitwarden/common/models/view/folder.view\";\nimport { IdentityView } from \"@bitwarden/common/models/view/identity.view\";\nimport { LoginUriView } from \"@bitwarden/common/models/view/login-uri.view\";\nimport { LoginView } from \"@bitwarden/common/models/view/login.view\";\nimport { SecureNoteView } from \"@bitwarden/common/models/view/secure-note.view\";\n\n@Directive()\nexport class AddEditComponent implements OnInit, OnDestroy {\n @Input() cloneMode = false;\n @Input() folderId: string = null;\n @Input() cipherId: string;\n @Input() type: CipherType;\n @Input() collectionIds: string[];\n @Input() organizationId: string = null;\n @Output() onSavedCipher = new EventEmitter();\n @Output() onDeletedCipher = new EventEmitter();\n @Output() onRestoredCipher = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n @Output() onEditAttachments = new EventEmitter();\n @Output() onShareCipher = new EventEmitter();\n @Output() onEditCollections = new EventEmitter();\n @Output() onGeneratePassword = new EventEmitter();\n @Output() onGenerateUsername = new EventEmitter();\n\n editMode = false;\n cipher: CipherView;\n folders$: Observable;\n collections: CollectionView[] = [];\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n restorePromise: Promise;\n checkPasswordPromise: Promise;\n showPassword = false;\n showCardNumber = false;\n showCardCode = false;\n cipherType = CipherType;\n typeOptions: any[];\n cardBrandOptions: any[];\n cardExpMonthOptions: any[];\n identityTitleOptions: any[];\n uriMatchOptions: any[];\n ownershipOptions: any[] = [];\n autofillOnPageLoadOptions: any[];\n currentDate = new Date();\n allowPersonal = true;\n reprompt = false;\n canUseReprompt = true;\n\n protected destroy$ = new Subject();\n protected writeableCollections: CollectionView[];\n private personalOwnershipPolicyAppliesToActiveUser: boolean;\n private previousCipherId: string;\n\n constructor(\n protected cipherService: CipherService,\n protected folderService: FolderService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected auditService: AuditService,\n protected stateService: StateService,\n protected collectionService: CollectionService,\n protected messagingService: MessagingService,\n protected eventService: EventService,\n protected policyService: PolicyService,\n private logService: LogService,\n protected passwordRepromptService: PasswordRepromptService,\n private organizationService: OrganizationService\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"typeLogin\"), value: CipherType.Login },\n { name: i18nService.t(\"typeCard\"), value: CipherType.Card },\n { name: i18nService.t(\"typeIdentity\"), value: CipherType.Identity },\n { name: i18nService.t(\"typeSecureNote\"), value: CipherType.SecureNote },\n ];\n this.cardBrandOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: \"Visa\", value: \"Visa\" },\n { name: \"Mastercard\", value: \"Mastercard\" },\n { name: \"American Express\", value: \"Amex\" },\n { name: \"Discover\", value: \"Discover\" },\n { name: \"Diners Club\", value: \"Diners Club\" },\n { name: \"JCB\", value: \"JCB\" },\n { name: \"Maestro\", value: \"Maestro\" },\n { name: \"UnionPay\", value: \"UnionPay\" },\n { name: \"RuPay\", value: \"RuPay\" },\n { name: i18nService.t(\"cardBrandMir\"), value: \"Mir\" },\n { name: i18nService.t(\"other\"), value: \"Other\" },\n ];\n this.cardExpMonthOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: \"01 - \" + i18nService.t(\"january\"), value: \"1\" },\n { name: \"02 - \" + i18nService.t(\"february\"), value: \"2\" },\n { name: \"03 - \" + i18nService.t(\"march\"), value: \"3\" },\n { name: \"04 - \" + i18nService.t(\"april\"), value: \"4\" },\n { name: \"05 - \" + i18nService.t(\"may\"), value: \"5\" },\n { name: \"06 - \" + i18nService.t(\"june\"), value: \"6\" },\n { name: \"07 - \" + i18nService.t(\"july\"), value: \"7\" },\n { name: \"08 - \" + i18nService.t(\"august\"), value: \"8\" },\n { name: \"09 - \" + i18nService.t(\"september\"), value: \"9\" },\n { name: \"10 - \" + i18nService.t(\"october\"), value: \"10\" },\n { name: \"11 - \" + i18nService.t(\"november\"), value: \"11\" },\n { name: \"12 - \" + i18nService.t(\"december\"), value: \"12\" },\n ];\n this.identityTitleOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: i18nService.t(\"mr\"), value: i18nService.t(\"mr\") },\n { name: i18nService.t(\"mrs\"), value: i18nService.t(\"mrs\") },\n { name: i18nService.t(\"ms\"), value: i18nService.t(\"ms\") },\n { name: i18nService.t(\"dr\"), value: i18nService.t(\"dr\") },\n ];\n this.uriMatchOptions = [\n { name: i18nService.t(\"defaultMatchDetection\"), value: null },\n { name: i18nService.t(\"baseDomain\"), value: UriMatchType.Domain },\n { name: i18nService.t(\"host\"), value: UriMatchType.Host },\n { name: i18nService.t(\"startsWith\"), value: UriMatchType.StartsWith },\n { name: i18nService.t(\"regEx\"), value: UriMatchType.RegularExpression },\n { name: i18nService.t(\"exact\"), value: UriMatchType.Exact },\n { name: i18nService.t(\"never\"), value: UriMatchType.Never },\n ];\n this.autofillOnPageLoadOptions = [\n { name: i18nService.t(\"autoFillOnPageLoadUseDefault\"), value: null },\n { name: i18nService.t(\"autoFillOnPageLoadYes\"), value: true },\n { name: i18nService.t(\"autoFillOnPageLoadNo\"), value: false },\n ];\n }\n\n async ngOnInit() {\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.PersonalOwnership)\n .pipe(\n concatMap(async (policyAppliesToActiveUser) => {\n this.personalOwnershipPolicyAppliesToActiveUser = policyAppliesToActiveUser;\n await this.init();\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async init() {\n if (this.ownershipOptions.length) {\n this.ownershipOptions = [];\n }\n if (this.personalOwnershipPolicyAppliesToActiveUser) {\n this.allowPersonal = false;\n } else {\n const myEmail = await this.stateService.getEmail();\n this.ownershipOptions.push({ name: myEmail, value: null });\n }\n\n const orgs = await this.organizationService.getAll();\n orgs.sort(Utils.getSortFunction(this.i18nService, \"name\")).forEach((o) => {\n if (o.enabled && o.status === OrganizationUserStatusType.Confirmed) {\n this.ownershipOptions.push({ name: o.name, value: o.id });\n }\n });\n if (!this.allowPersonal) {\n this.organizationId = this.ownershipOptions[0].value;\n }\n\n this.writeableCollections = await this.loadCollections();\n\n this.canUseReprompt = await this.passwordRepromptService.enabled();\n }\n\n async load() {\n this.editMode = this.cipherId != null;\n if (this.editMode) {\n this.editMode = true;\n if (this.cloneMode) {\n this.cloneMode = true;\n this.title = this.i18nService.t(\"addItem\");\n } else {\n this.title = this.i18nService.t(\"editItem\");\n }\n } else {\n this.title = this.i18nService.t(\"addItem\");\n }\n\n const addEditCipherInfo: any = await this.stateService.getAddEditCipherInfo();\n if (addEditCipherInfo != null) {\n this.cipher = addEditCipherInfo.cipher;\n this.collectionIds = addEditCipherInfo.collectionIds;\n }\n await this.stateService.setAddEditCipherInfo(null);\n\n if (this.cipher == null) {\n if (this.editMode) {\n const cipher = await this.loadCipher();\n this.cipher = await cipher.decrypt();\n\n // Adjust Cipher Name if Cloning\n if (this.cloneMode) {\n this.cipher.name += \" - \" + this.i18nService.t(\"clone\");\n // If not allowing personal ownership, update cipher's org Id to prompt downstream changes\n if (this.cipher.organizationId == null && !this.allowPersonal) {\n this.cipher.organizationId = this.organizationId;\n }\n }\n } else {\n this.cipher = new CipherView();\n this.cipher.organizationId = this.organizationId == null ? null : this.organizationId;\n this.cipher.folderId = this.folderId;\n this.cipher.type = this.type == null ? CipherType.Login : this.type;\n this.cipher.login = new LoginView();\n this.cipher.login.uris = [new LoginUriView()];\n this.cipher.card = new CardView();\n this.cipher.identity = new IdentityView();\n this.cipher.secureNote = new SecureNoteView();\n this.cipher.secureNote.type = SecureNoteType.Generic;\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n if (this.cipher != null && (!this.editMode || addEditCipherInfo != null || this.cloneMode)) {\n await this.organizationChanged();\n if (\n this.collectionIds != null &&\n this.collectionIds.length > 0 &&\n this.collections.length > 0\n ) {\n this.collections.forEach((c) => {\n if (this.collectionIds.indexOf(c.id) > -1) {\n (c as any).checked = true;\n }\n });\n }\n }\n\n this.folders$ = this.folderService.folderViews$;\n\n if (this.editMode && this.previousCipherId !== this.cipherId) {\n this.eventService.collect(EventType.Cipher_ClientViewed, this.cipherId);\n }\n this.previousCipherId = this.cipherId;\n this.reprompt = this.cipher.reprompt !== CipherRepromptType.None;\n }\n\n async submit(): Promise {\n if (this.cipher.isDeleted) {\n return this.restore();\n }\n\n if (this.cipher.name == null || this.cipher.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n if (\n (!this.editMode || this.cloneMode) &&\n !this.allowPersonal &&\n this.cipher.organizationId == null\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"personalOwnershipSubmitError\")\n );\n return false;\n }\n\n if (\n (!this.editMode || this.cloneMode) &&\n this.cipher.type === CipherType.Login &&\n this.cipher.login.uris != null &&\n this.cipher.login.uris.length === 1 &&\n (this.cipher.login.uris[0].uri == null || this.cipher.login.uris[0].uri === \"\")\n ) {\n this.cipher.login.uris = null;\n }\n\n // Allows saving of selected collections during \"Add\" and \"Clone\" flows\n if ((!this.editMode || this.cloneMode) && this.cipher.organizationId != null) {\n this.cipher.collectionIds =\n this.collections == null\n ? []\n : this.collections.filter((c) => (c as any).checked).map((c) => c.id);\n }\n\n // Clear current Cipher Id to trigger \"Add\" cipher flow\n if (this.cloneMode) {\n this.cipher.id = null;\n }\n\n const cipher = await this.encryptCipher();\n try {\n this.formPromise = this.saveCipher(cipher);\n await this.formPromise;\n this.cipher.id = cipher.id;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode && !this.cloneMode ? \"editedItem\" : \"addedItem\")\n );\n this.onSavedCipher.emit(this.cipher);\n this.messagingService.send(this.editMode && !this.cloneMode ? \"editedCipher\" : \"addedCipher\");\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n addUri() {\n if (this.cipher.type !== CipherType.Login) {\n return;\n }\n\n if (this.cipher.login.uris == null) {\n this.cipher.login.uris = [];\n }\n\n this.cipher.login.uris.push(new LoginUriView());\n }\n\n removeUri(uri: LoginUriView) {\n if (this.cipher.type !== CipherType.Login || this.cipher.login.uris == null) {\n return;\n }\n\n const i = this.cipher.login.uris.indexOf(uri);\n if (i > -1) {\n this.cipher.login.uris.splice(i, 1);\n }\n }\n\n getCardExpMonthDisplay() {\n return this.cardExpMonthOptions.find((x) => x.value == this.cipher.card.expMonth)?.name;\n }\n\n trackByFunction(index: number, item: any) {\n return index;\n }\n\n cancel() {\n this.onCancelled.emit(this.cipher);\n }\n\n attachments() {\n this.onEditAttachments.emit(this.cipher);\n }\n\n share() {\n this.onShareCipher.emit(this.cipher);\n }\n\n editCollections() {\n this.onEditCollections.emit(this.cipher);\n }\n\n async delete(): Promise {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\n this.cipher.isDeleted ? \"permanentlyDeleteItemConfirmation\" : \"deleteItemConfirmation\"\n ),\n this.i18nService.t(\"deleteItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.deleteCipher();\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.cipher.isDeleted ? \"permanentlyDeletedItem\" : \"deletedItem\")\n );\n this.onDeletedCipher.emit(this.cipher);\n this.messagingService.send(\n this.cipher.isDeleted ? \"permanentlyDeletedCipher\" : \"deletedCipher\"\n );\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n async restore(): Promise {\n if (!this.cipher.isDeleted) {\n return false;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"restoreItemConfirmation\"),\n this.i18nService.t(\"restoreItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.restorePromise = this.restoreCipher();\n await this.restorePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItem\"));\n this.onRestoredCipher.emit(this.cipher);\n this.messagingService.send(\"restoredCipher\");\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n async generateUsername(): Promise {\n if (this.cipher.login?.username?.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"overwriteUsernameConfirmation\"),\n this.i18nService.t(\"overwriteUsername\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\")\n );\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGenerateUsername.emit();\n return true;\n }\n\n async generatePassword(): Promise {\n if (this.cipher.login?.password?.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"overwritePasswordConfirmation\"),\n this.i18nService.t(\"overwritePassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\")\n );\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGeneratePassword.emit();\n return true;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"loginPassword\").focus();\n if (this.editMode && this.showPassword) {\n this.eventService.collect(EventType.Cipher_ClientToggledPasswordVisible, this.cipherId);\n }\n }\n\n async toggleCardNumber() {\n this.showCardNumber = !this.showCardNumber;\n if (this.showCardNumber) {\n this.eventService.collect(EventType.Cipher_ClientToggledCardNumberVisible, this.cipherId);\n }\n }\n\n toggleCardCode() {\n this.showCardCode = !this.showCardCode;\n document.getElementById(\"cardCode\").focus();\n if (this.editMode && this.showCardCode) {\n this.eventService.collect(EventType.Cipher_ClientToggledCardCodeVisible, this.cipherId);\n }\n }\n\n toggleUriOptions(uri: LoginUriView) {\n const u = uri as any;\n u.showOptions = u.showOptions == null && uri.match != null ? false : !u.showOptions;\n }\n\n loginUriMatchChanged(uri: LoginUriView) {\n const u = uri as any;\n u.showOptions = u.showOptions == null ? true : u.showOptions;\n }\n\n async organizationChanged() {\n if (this.writeableCollections != null) {\n this.writeableCollections.forEach((c) => ((c as any).checked = false));\n }\n if (this.cipher.organizationId != null) {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.cipher.organizationId\n );\n const org = await this.organizationService.get(this.cipher.organizationId);\n if (org != null) {\n this.cipher.organizationUseTotp = org.useTotp;\n }\n } else {\n this.collections = [];\n }\n }\n\n async checkPassword() {\n if (this.checkPasswordPromise != null) {\n return;\n }\n\n if (\n this.cipher.login == null ||\n this.cipher.login.password == null ||\n this.cipher.login.password === \"\"\n ) {\n return;\n }\n\n this.checkPasswordPromise = this.auditService.passwordLeaked(this.cipher.login.password);\n const matches = await this.checkPasswordPromise;\n this.checkPasswordPromise = null;\n\n if (matches > 0) {\n this.platformUtilsService.showToast(\n \"warning\",\n null,\n this.i18nService.t(\"passwordExposed\", matches.toString())\n );\n } else {\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"passwordSafe\"));\n }\n }\n\n repromptChanged() {\n this.reprompt = !this.reprompt;\n if (this.reprompt) {\n this.cipher.reprompt = CipherRepromptType.Password;\n } else {\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter((c) => !c.readOnly);\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected encryptCipher() {\n return this.cipherService.encrypt(this.cipher);\n }\n\n protected saveCipher(cipher: Cipher) {\n return this.cipher.id == null\n ? this.cipherService.createWithServer(cipher)\n : this.cipherService.updateWithServer(cipher);\n }\n\n protected deleteCipher() {\n return this.cipher.isDeleted\n ? this.cipherService.deleteWithServer(this.cipher.id)\n : this.cipherService.softDeleteWithServer(this.cipher.id);\n }\n\n protected restoreCipher() {\n return this.cipherService.restoreWithServer(this.cipher.id);\n }\n}\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"@bitwarden/angular/components/add-edit.component\";\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { EventService } from \"@bitwarden/common/abstractions/event.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { EventType } from \"@bitwarden/common/enums/eventType\";\nimport { LoginUriView } from \"@bitwarden/common/models/view/login-uri.view\";\n\n@Component({\n selector: \"app-vault-add-edit\",\n templateUrl: \"add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent implements OnInit, OnDestroy {\n canAccessPremium: boolean;\n totpCode: string;\n totpCodeFormatted: string;\n totpDash: number;\n totpSec: number;\n totpLow: boolean;\n showRevisionDate = false;\n hasPasswordHistory = false;\n viewingPasswordHistory = false;\n viewOnly = false;\n\n protected totpInterval: number;\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n protected totpService: TotpService,\n protected passwordGenerationService: PasswordGenerationService,\n protected messagingService: MessagingService,\n eventService: EventService,\n protected policyService: PolicyService,\n organizationService: OrganizationService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n messagingService,\n eventService,\n policyService,\n logService,\n passwordRepromptService,\n organizationService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n this.showRevisionDate = this.cipher.passwordRevisionDisplayDate != null;\n this.hasPasswordHistory = this.cipher.hasPasswordHistory;\n this.cleanUp();\n\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n if (\n this.cipher.type === CipherType.Login &&\n this.cipher.login.totp &&\n (this.cipher.organizationUseTotp || this.canAccessPremium)\n ) {\n await this.totpUpdateCode();\n const interval = this.totpService.getTimeInterval(this.cipher.login.totp);\n await this.totpTick(interval);\n\n this.totpInterval = window.setInterval(async () => {\n await this.totpTick(interval);\n }, 1000);\n }\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n\n toggleFavorite() {\n this.cipher.favorite = !this.cipher.favorite;\n }\n\n launch(uri: LoginUriView) {\n if (!uri.canLaunch) {\n return;\n }\n\n this.platformUtilsService.launchUri(uri.launchUri);\n }\n\n copy(value: string, typeI18nKey: string, aType: string) {\n if (value == null) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(typeI18nKey))\n );\n\n if (this.editMode) {\n if (typeI18nKey === \"password\") {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipherId);\n } else if (typeI18nKey === \"securityCode\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId);\n } else if (aType === \"H_Field\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedHiddenField, this.cipherId);\n }\n }\n }\n\n async generatePassword(): Promise {\n const confirmed = await super.generatePassword();\n if (confirmed) {\n const options = (await this.passwordGenerationService.getOptions())?.[0] ?? {};\n this.cipher.login.password = await this.passwordGenerationService.generatePassword(options);\n }\n return confirmed;\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n\n upgradeOrganization() {\n this.messagingService.send(\"upgradeOrganization\", {\n organizationId: this.cipher.organizationId,\n });\n }\n\n showGetPremium() {\n if (this.canAccessPremium) {\n return;\n }\n if (this.cipher.organizationUseTotp) {\n this.upgradeOrganization();\n } else {\n this.premiumRequired();\n }\n }\n\n viewHistory() {\n this.viewingPasswordHistory = !this.viewingPasswordHistory;\n }\n\n protected cleanUp() {\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n }\n\n protected async totpUpdateCode() {\n if (\n this.cipher == null ||\n this.cipher.type !== CipherType.Login ||\n this.cipher.login.totp == null\n ) {\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n return;\n }\n\n this.totpCode = await this.totpService.getCode(this.cipher.login.totp);\n if (this.totpCode != null) {\n if (this.totpCode.length > 4) {\n const half = Math.floor(this.totpCode.length / 2);\n this.totpCodeFormatted =\n this.totpCode.substring(0, half) + \" \" + this.totpCode.substring(half);\n } else {\n this.totpCodeFormatted = this.totpCode;\n }\n } else {\n this.totpCodeFormatted = null;\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n }\n }\n\n protected allowOwnershipAssignment() {\n return (\n (!this.editMode || this.cloneMode) &&\n this.ownershipOptions != null &&\n (this.ownershipOptions.length > 1 || !this.allowPersonal)\n );\n }\n\n private async totpTick(intervalSeconds: number) {\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const mod = epoch % intervalSeconds;\n\n this.totpSec = intervalSeconds - mod;\n this.totpDash = +(Math.round(((78.6 / intervalSeconds) * mod + \"e+2\") as any) + \"e-2\");\n this.totpLow = this.totpSec <= 7;\n if (mod === 0) {\n await this.totpUpdateCode();\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { OrganizationNameBadgeComponent } from \"./organization-name-badge.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [OrganizationNameBadgeComponent],\n exports: [OrganizationNameBadgeComponent],\n})\nexport class OrganizationBadgeModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../shared\";\n\nimport { CollectionFilterComponent } from \"./collection-filter/collection-filter.component\";\nimport { FolderFilterComponent } from \"./folder-filter/folder-filter.component\";\nimport { StatusFilterComponent } from \"./status-filter/status-filter.component\";\nimport { TypeFilterComponent } from \"./type-filter/type-filter.component\";\nimport { VaultFilterService } from \"./vault-filter.service\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [\n CollectionFilterComponent,\n FolderFilterComponent,\n StatusFilterComponent,\n TypeFilterComponent,\n ],\n exports: [\n SharedModule,\n CollectionFilterComponent,\n FolderFilterComponent,\n StatusFilterComponent,\n TypeFilterComponent,\n ],\n providers: [VaultFilterService],\n})\nexport class VaultFilterSharedModule {}\n","import { Injectable } from \"@angular/core\";\nimport { BehaviorSubject, Observable } from \"rxjs\";\n\nimport { DynamicTreeNode } from \"@bitwarden/angular/vault/vault-filter/models/dynamic-tree-node.model\";\nimport { VaultFilterService as BaseVaultFilterService } from \"@bitwarden/angular/vault/vault-filter/services/vault-filter.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collection.data\";\nimport { Collection } from \"@bitwarden/common/models/domain/collection\";\nimport { CollectionDetailsResponse } from \"@bitwarden/common/models/response/collection.response\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\n\n@Injectable()\nexport class VaultFilterService extends BaseVaultFilterService {\n private _collapsedFilterNodes = new BehaviorSubject>(null);\n collapsedFilterNodes$: Observable> = this._collapsedFilterNodes.asObservable();\n\n constructor(\n stateService: StateService,\n organizationService: OrganizationService,\n folderService: FolderService,\n cipherService: CipherService,\n collectionService: CollectionService,\n policyService: PolicyService,\n private i18nService: I18nService,\n protected apiService: ApiService\n ) {\n super(\n stateService,\n organizationService,\n folderService,\n cipherService,\n collectionService,\n policyService\n );\n }\n\n async buildCollapsedFilterNodes(): Promise> {\n const nodes = await super.buildCollapsedFilterNodes();\n this._collapsedFilterNodes.next(nodes);\n return nodes;\n }\n\n async storeCollapsedFilterNodes(collapsedFilterNodes: Set): Promise {\n await super.storeCollapsedFilterNodes(collapsedFilterNodes);\n this._collapsedFilterNodes.next(collapsedFilterNodes);\n }\n\n async ensureVaultFiltersAreExpanded() {\n const collapsedFilterNodes = await super.buildCollapsedFilterNodes();\n if (!collapsedFilterNodes.has(\"vaults\")) {\n return;\n }\n collapsedFilterNodes.delete(\"vaults\");\n await this.storeCollapsedFilterNodes(collapsedFilterNodes);\n }\n\n async buildAdminCollections(organizationId: string) {\n let result: CollectionView[] = [];\n const collectionResponse = await this.apiService.getCollections(organizationId);\n if (collectionResponse?.data != null && collectionResponse.data.length) {\n const collectionDomains = collectionResponse.data.map(\n (r: CollectionDetailsResponse) => new Collection(new CollectionData(r))\n );\n result = await this.collectionService.decryptMany(collectionDomains);\n }\n\n const noneCollection = new CollectionView();\n noneCollection.name = this.i18nService.t(\"unassigned\");\n noneCollection.organizationId = organizationId;\n result.push(noneCollection);\n\n const nestedCollections = await this.collectionService.getAllNested(result);\n return new DynamicTreeNode({\n fullList: result,\n nestedList: nestedCollections,\n });\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { LinkSsoComponent } from \"./organization-filter/link-sso.component\";\nimport { OrganizationFilterComponent } from \"./organization-filter/organization-filter.component\";\nimport { OrganizationOptionsComponent } from \"./organization-filter/organization-options.component\";\nimport { VaultFilterSharedModule } from \"./shared/vault-filter-shared.module\";\nimport { VaultFilterComponent } from \"./vault-filter.component\";\n\n@NgModule({\n imports: [VaultFilterSharedModule],\n declarations: [\n VaultFilterComponent,\n OrganizationFilterComponent,\n OrganizationOptionsComponent,\n LinkSsoComponent,\n ],\n exports: [VaultFilterComponent],\n})\nexport class VaultFilterModule {}\n","import { Verification } from \"../../types/verification\";\n\nexport abstract class AccountApiService {\n abstract deleteAccount(verification: Verification): Promise;\n}\n","export abstract class AccountService {}\n\nexport abstract class InternalAccountService extends AccountService {\n abstract delete(): void;\n}\n","export abstract class AnonymousHubService {\n createHubConnection: (token: string) => void;\n stopHubConnection: () => void;\n}\n","export abstract class AppIdService {\n getAppId: () => Promise;\n getAnonymousAppId: () => Promise;\n}\n","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 \"../../models/response/server-config.response\";\n\nexport abstract class ConfigApiServiceAbstraction {\n get: () => Promise;\n}\n","import { DecryptParameters } from \"../models/domain/decrypt-parameters\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\n\nexport abstract class CryptoFunctionService {\n pbkdf2: (\n password: string | ArrayBuffer,\n salt: string | ArrayBuffer,\n algorithm: \"sha256\" | \"sha512\",\n iterations: number\n ) => Promise;\n hkdf: (\n ikm: ArrayBuffer,\n salt: string | ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hkdfExpand: (\n prk: ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hash: (\n value: string | ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"\n ) => Promise;\n hmac: (\n value: ArrayBuffer,\n key: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compare: (a: ArrayBuffer, b: ArrayBuffer) => Promise;\n hmacFast: (\n value: ArrayBuffer | string,\n key: ArrayBuffer | string,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compareFast: (a: ArrayBuffer | string, b: ArrayBuffer | string) => Promise;\n aesEncrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n aesDecryptFastParameters: (\n data: string,\n iv: string,\n mac: string,\n key: SymmetricCryptoKey\n ) => DecryptParameters;\n aesDecryptFast: (parameters: DecryptParameters) => Promise;\n aesDecrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n rsaEncrypt: (\n data: ArrayBuffer,\n publicKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaDecrypt: (\n data: ArrayBuffer,\n privateKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaExtractPublicKey: (privateKey: ArrayBuffer) => Promise;\n rsaGenerateKeyPair: (length: 1024 | 2048 | 4096) => Promise<[ArrayBuffer, ArrayBuffer]>;\n randomBytes: (length: number) => Promise;\n}\n","import { IEncrypted } from \"../interfaces/IEncrypted\";\nimport { Decryptable } from \"../interfaces/decryptable.interface\";\nimport { InitializerMetadata } from \"../interfaces/initializer-metadata.interface\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\n\nexport abstract class EncryptService {\n abstract encrypt(plainValue: string | ArrayBuffer, key: SymmetricCryptoKey): Promise;\n abstract encryptToBytes: (\n plainValue: ArrayBuffer,\n key?: SymmetricCryptoKey\n ) => Promise;\n abstract decryptToUtf8: (encString: EncString, key: SymmetricCryptoKey) => Promise;\n abstract decryptToBytes: (encThing: IEncrypted, key: SymmetricCryptoKey) => Promise;\n abstract resolveLegacyKey: (key: SymmetricCryptoKey, encThing: IEncrypted) => SymmetricCryptoKey;\n abstract decryptItems: (\n items: Decryptable[],\n key: SymmetricCryptoKey\n ) => Promise;\n}\n","import { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachment-upload-data.response\";\nimport { SendFileUploadDataResponse } from \"../models/response/send-file-upload-data.response\";\n\nexport abstract class FileUploadService {\n uploadSendFile: (\n uploadData: SendFileUploadDataResponse,\n fileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) => Promise;\n uploadCipherAttachment: (\n admin: boolean,\n uploadData: AttachmentUploadDataResponse,\n fileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) => Promise;\n}\n","import { Folder } from \"../../models/domain/folder\";\nimport { FolderResponse } from \"../../models/response/folder.response\";\n\nexport class FolderApiServiceAbstraction {\n save: (folder: Folder) => Promise;\n delete: (id: string) => Promise;\n get: (id: string) => Promise;\n}\n","import { AbstractControl } from \"@angular/forms\";\nexport interface AllValidationErrors {\n controlName: string;\n errorName: string;\n}\n\nexport interface FormGroupControls {\n [key: string]: AbstractControl;\n}\n\nexport abstract class FormValidationErrorsService {\n getFormValidationErrors: (controls: FormGroupControls) => AllValidationErrors[];\n}\n","export abstract class LoginService {\n getEmail: () => string;\n getRememberEmail: () => boolean;\n setEmail: (value: string) => void;\n setRememberEmail: (value: boolean) => void;\n clearValues: () => void;\n}\n","export abstract class NotificationsService {\n init: () => Promise;\n updateConnection: (sync?: boolean) => Promise;\n reconnectFromActivity: () => Promise;\n disconnectFromInactivity: () => Promise;\n}\n","import { CipherView } from \"../models/view/cipher.view\";\nimport { SendView } from \"../models/view/send.view\";\n\nexport abstract class SearchService {\n indexedEntityId?: string = null;\n clearIndex: () => void;\n isSearchable: (query: string) => boolean;\n indexCiphers: (indexedEntityGuid?: string, ciphersToIndex?: CipherView[]) => Promise;\n searchCiphers: (\n query: string,\n filter?: ((cipher: CipherView) => boolean) | ((cipher: CipherView) => boolean)[],\n ciphers?: CipherView[]\n ) => Promise;\n searchCiphersBasic: (ciphers: CipherView[], query: string, deleted?: boolean) => CipherView[];\n searchSends: (sends: SendView[], query: string) => SendView[];\n}\n","import { SendData } from \"../models/data/send.data\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { Send } from \"../models/domain/send\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { SendView } from \"../models/view/send.view\";\n\nexport abstract class SendService {\n clearCache: () => Promise;\n encrypt: (\n model: SendView,\n file: File | ArrayBuffer,\n password: string,\n key?: SymmetricCryptoKey\n ) => Promise<[Send, EncArrayBuffer]>;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n saveWithServer: (sendData: [Send, EncArrayBuffer]) => Promise;\n upsert: (send: SendData | SendData[]) => Promise;\n replace: (sends: { [id: string]: SendData }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string) => Promise;\n removePasswordWithServer: (id: string) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { AccountSettingsSettings } from \"../models/domain/account\";\n\nexport abstract class SettingsService {\n settings$: Observable;\n\n setEquivalentDomains: (equivalentDomains: string[][]) => Promise;\n clear: (userId?: string) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { SyncEventArgs } from \"../../types/syncEventArgs\";\n\nexport abstract class SyncNotifierService {\n sync$: Observable;\n next: (event: SyncEventArgs) => void;\n}\n","import { IdentityTokenResponse } from \"../models/response/identity-token.response\";\n\nexport abstract class TokenService {\n setTokens: (\n accessToken: string,\n refreshToken: string,\n clientIdClientSecret: [string, string]\n ) => Promise;\n setToken: (token: string) => Promise;\n getToken: () => Promise;\n setRefreshToken: (refreshToken: string) => Promise;\n getRefreshToken: () => Promise;\n setClientId: (clientId: string) => Promise;\n getClientId: () => Promise;\n setClientSecret: (clientSecret: string) => Promise;\n getClientSecret: () => Promise;\n setTwoFactorToken: (tokenResponse: IdentityTokenResponse) => Promise;\n getTwoFactorToken: () => Promise;\n clearTwoFactorToken: () => Promise;\n clearToken: (userId?: string) => Promise;\n decodeToken: (token?: string) => any;\n getTokenExpirationDate: () => Promise;\n tokenSecondsRemaining: (offsetSeconds?: number) => Promise;\n tokenNeedsRefresh: (minutes?: number) => Promise;\n getUserId: () => Promise;\n getEmail: () => Promise;\n getEmailVerified: () => Promise;\n getName: () => Promise;\n getIssuer: () => Promise;\n getIsExternal: () => Promise;\n}\n","import { TwoFactorProviderType } from \"../enums/twoFactorProviderType\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identity-two-factor.response\";\n\nexport interface TwoFactorProviderDetails {\n type: TwoFactorProviderType;\n name: string;\n description: string;\n priority: number;\n sort: number;\n premium: boolean;\n}\n\nexport abstract class TwoFactorService {\n init: () => void;\n getSupportedProviders: (win: Window) => TwoFactorProviderDetails[];\n getDefaultProvider: (webAuthnSupported: boolean) => TwoFactorProviderType;\n setSelectedProvider: (type: TwoFactorProviderType) => void;\n clearSelectedProvider: () => void;\n\n setProviders: (response: IdentityTwoFactorResponse) => void;\n clearProviders: () => void;\n getProviders: () => Map;\n}\n","import { VerifyOTPRequest } from \"../../models/request/account/verify-otp.request\";\n\nexport abstract class UserVerificationApiServiceAbstraction {\n postAccountVerifyOTP: (request: VerifyOTPRequest) => Promise;\n postAccountRequestOTP: () => Promise;\n}\n","export abstract class UsernameGenerationService {\n generateUsername: (options: any) => Promise;\n generateWord: (options: any) => Promise;\n generateSubaddress: (options: any) => Promise;\n generateCatchall: (options: any) => Promise;\n generateForwarded: (options: any) => Promise;\n getOptions: () => Promise;\n saveOptions: (options: any) => Promise;\n}\n","export abstract class 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/global-state\";\n\nexport class GlobalStateFactory {\n private globalStateConstructor: new (init: Partial) => T;\n\n constructor(globalStateConstructor: new (init: Partial) => T) {\n this.globalStateConstructor = globalStateConstructor;\n }\n\n create(args?: Partial) {\n return new this.globalStateConstructor(args);\n }\n}\n","import { Account } from \"../models/domain/account\";\nimport { GlobalState } from \"../models/domain/global-state\";\n\nimport { AccountFactory } from \"./accountFactory\";\nimport { GlobalStateFactory } from \"./globalStateFactory\";\n\nexport class StateFactory<\n TGlobal extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n private globalStateFactory: GlobalStateFactory;\n private accountFactory: AccountFactory;\n\n constructor(\n globalStateConstructor: new (init: Partial) => TGlobal,\n accountConstructor: new (init: Partial) => TAccount\n ) {\n this.globalStateFactory = new GlobalStateFactory(globalStateConstructor);\n this.accountFactory = new AccountFactory(accountConstructor);\n }\n\n createGlobal(args: Partial): TGlobal {\n return this.globalStateFactory.create(args);\n }\n\n createAccount(args: Partial): TAccount {\n return this.accountFactory.create(args);\n }\n}\n","// required to avoid linting errors when there are no flags\n/* eslint-disable @typescript-eslint/ban-types */\nexport type SharedFlags = {\n multithreadDecryption: boolean;\n};\n\n// required to avoid linting errors when there are no flags\n/* eslint-disable @typescript-eslint/ban-types */\nexport type SharedDevFlags = {};\n\nfunction getFlags(envFlags: string | T): T {\n if (typeof envFlags === \"string\") {\n return JSON.parse(envFlags) as T;\n } else {\n return envFlags as T;\n }\n}\n\n/**\n * Gets the value of a feature flag from environment.\n * All flags default to \"on\" (true).\n * Only use for shared code in `libs`, otherwise use the client-specific function.\n * @param flag The name of the feature flag to check\n * @returns The value of the flag\n */\nexport function flagEnabled(flag: keyof Flags): boolean {\n const flags = getFlags(process.env.FLAGS);\n return flags[flag] == null || !!flags[flag];\n}\n\n/**\n * Gets the value of a dev flag from environment.\n * Will always return false unless in development.\n * Only use for shared code in `libs`, otherwise use the client-specific function.\n * @param flag The name of the dev flag to check\n * @returns The value of the flag\n */\nexport function devFlagEnabled(flag: keyof DevFlags): boolean {\n if (process.env.ENV !== \"development\") {\n return false;\n }\n\n const devFlags = getFlags(process.env.DEV_FLAGS);\n return devFlags[flag] == null || !!devFlags[flag];\n}\n\n/**\n * Gets the value of a dev flag from environment.\n * Will always return false unless in development.\n * @param flag The name of the dev flag to check\n * @returns The value of the flag\n * @throws Error if the flag is not enabled\n */\nexport function devFlagValue(\n flag: keyof DevFlags\n): DevFlags[keyof DevFlags] {\n if (!devFlagEnabled(flag)) {\n throw new Error(`This method should not be called, it is protected by a disabled dev flag.`);\n }\n\n const devFlags = getFlags(process.env.DEV_FLAGS);\n return devFlags[flag];\n}\n","export enum StateVersion {\n One = 1, // Original flat key/value pair store\n Two = 2, // Move to a typed State object\n Three = 3, // Fix migration of users' premium status\n Four = 4, // Fix 'Never Lock' option by removing stale data\n Five = 5, // Migrate to new storage of encrypted organization keys\n Six = 6, // Delete account.keys.legacyEtmKey property\n Latest = Six,\n}\n","export enum ThemeType {\n System = \"system\",\n Light = \"light\",\n Dark = \"dark\",\n Nord = \"nord\",\n SolarizedDark = \"solarizedDark\",\n}\n","import { StateVersion } from \"../../enums/stateVersion\";\nimport { ThemeType } from \"../../enums/themeType\";\n\nimport { EnvironmentUrls } from \"./environment-urls\";\nimport { WindowState } from \"./window-state\";\n\nexport class GlobalState {\n enableAlwaysOnTop?: boolean;\n installedVersion?: string;\n locale?: string;\n organizationInvitation?: any;\n ssoCodeVerifier?: string;\n ssoOrganizationIdentifier?: string;\n ssoState?: string;\n rememberedEmail?: string;\n theme?: ThemeType = ThemeType.System;\n window?: WindowState = new WindowState();\n twoFactorToken?: string;\n disableFavicon?: boolean;\n biometricAwaitingAcceptance?: boolean;\n biometricFingerprintValidated?: boolean;\n vaultTimeout?: number;\n vaultTimeoutAction?: string;\n loginRedirect?: any;\n mainWindowSize?: number;\n enableBiometrics?: boolean;\n biometricText?: string;\n noAutoPromptBiometrics?: boolean;\n noAutoPromptBiometricsText?: string;\n stateVersion: StateVersion = StateVersion.One;\n environmentUrls: EnvironmentUrls = new EnvironmentUrls();\n enableTray?: boolean;\n enableMinimizeToTray?: boolean;\n enableCloseToTray?: boolean;\n enableStartToTray?: boolean;\n openAtLogin?: boolean;\n alwaysShowDock?: boolean;\n enableBrowserIntegration?: boolean;\n enableBrowserIntegrationFingerprint?: boolean;\n enableDuckDuckGoBrowserIntegration?: boolean;\n}\n","export enum NotificationType {\n SyncCipherUpdate = 0,\n SyncCipherCreate = 1,\n SyncLoginDelete = 2,\n SyncFolderDelete = 3,\n SyncCiphers = 4,\n\n SyncVault = 5,\n SyncOrgKeys = 6,\n SyncFolderCreate = 7,\n SyncFolderUpdate = 8,\n SyncCipherDelete = 9,\n SyncSettings = 10,\n\n LogOut = 11,\n\n SyncSendCreate = 12,\n SyncSendUpdate = 13,\n SyncSendDelete = 14,\n\n AuthRequest = 15,\n AuthRequestResponse = 16,\n}\n","import { NotificationType } from \"../../enums/notificationType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class NotificationResponse extends BaseResponse {\n contextId: string;\n type: NotificationType;\n payload: any;\n\n constructor(response: any) {\n super(response);\n this.contextId = this.getResponseProperty(\"ContextId\");\n this.type = this.getResponseProperty(\"Type\");\n\n const payload = this.getResponseProperty(\"Payload\");\n switch (this.type) {\n case NotificationType.SyncCipherCreate:\n case NotificationType.SyncCipherDelete:\n case NotificationType.SyncCipherUpdate:\n case NotificationType.SyncLoginDelete:\n this.payload = new SyncCipherNotification(payload);\n break;\n case NotificationType.SyncFolderCreate:\n case NotificationType.SyncFolderDelete:\n case NotificationType.SyncFolderUpdate:\n this.payload = new SyncFolderNotification(payload);\n break;\n case NotificationType.SyncVault:\n case NotificationType.SyncCiphers:\n case NotificationType.SyncOrgKeys:\n case NotificationType.SyncSettings:\n case NotificationType.LogOut:\n this.payload = new UserNotification(payload);\n break;\n case NotificationType.SyncSendCreate:\n case NotificationType.SyncSendUpdate:\n case NotificationType.SyncSendDelete:\n this.payload = new SyncSendNotification(payload);\n break;\n case NotificationType.AuthRequest:\n case NotificationType.AuthRequestResponse:\n this.payload = new AuthRequestPushNotification(payload);\n break;\n default:\n break;\n }\n }\n}\n\nexport class SyncCipherNotification extends BaseResponse {\n id: string;\n userId: string;\n organizationId: string;\n collectionIds: string[];\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.collectionIds = this.getResponseProperty(\"CollectionIds\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n\nexport class SyncFolderNotification extends BaseResponse {\n id: string;\n userId: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n\nexport class UserNotification extends BaseResponse {\n userId: string;\n date: Date;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty(\"UserId\");\n this.date = new Date(this.getResponseProperty(\"Date\"));\n }\n}\n\nexport class SyncSendNotification extends BaseResponse {\n id: string;\n userId: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n\nexport class AuthRequestPushNotification extends BaseResponse {\n id: string;\n userId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport {\n HttpTransportType,\n HubConnection,\n HubConnectionBuilder,\n IHubProtocol,\n} from \"@microsoft/signalr\";\nimport { MessagePackHubProtocol } from \"@microsoft/signalr-protocol-msgpack\";\n\nimport { AnonymousHubService as AnonymousHubServiceAbstraction } from \"../abstractions/anonymousHub.service\";\nimport { AuthService } from \"../abstractions/auth.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { LogService } from \"../abstractions/log.service\";\n\nimport {\n AuthRequestPushNotification,\n NotificationResponse,\n} from \"./../models/response/notification.response\";\n\n@Injectable()\nexport class AnonymousHubService implements AnonymousHubServiceAbstraction {\n private anonHubConnection: HubConnection;\n private url: string;\n\n constructor(\n private environmentService: EnvironmentService,\n private authService: AuthService,\n private logService: LogService\n ) {}\n\n async createHubConnection(token: string) {\n this.url = this.environmentService.getNotificationsUrl();\n\n this.anonHubConnection = new HubConnectionBuilder()\n .withUrl(this.url + \"/anonymous-hub?Token=\" + token, {\n skipNegotiation: true,\n transport: HttpTransportType.WebSockets,\n })\n .withHubProtocol(new MessagePackHubProtocol() as IHubProtocol)\n .build();\n\n this.anonHubConnection.start().catch((error) => this.logService.error(error));\n\n this.anonHubConnection.on(\"AuthRequestResponseRecieved\", (data: any) => {\n this.ProcessNotification(new NotificationResponse(data));\n });\n }\n\n stopHubConnection() {\n if (this.anonHubConnection) {\n this.anonHubConnection.stop();\n }\n }\n\n private async ProcessNotification(notification: NotificationResponse) {\n await this.authService.authResponsePushNotifiction(\n notification.payload as AuthRequestPushNotification\n );\n }\n}\n","import { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { DeviceType } from \"../../enums/deviceType\";\n\nexport class DeviceRequest {\n type: DeviceType;\n name: string;\n identifier: string;\n pushToken?: string;\n\n constructor(appId: string, platformUtilsService: PlatformUtilsService) {\n this.type = platformUtilsService.getDevice();\n this.name = platformUtilsService.getDeviceString();\n this.identifier = appId;\n this.pushToken = null;\n }\n}\n","import { DeviceRequest } from \"../device.request\";\n\nimport { TokenTwoFactorRequest } from \"./token-two-factor.request\";\n\nexport abstract class TokenRequest {\n protected device?: DeviceRequest;\n protected passwordlessAuthRequest: string;\n\n constructor(protected twoFactor: TokenTwoFactorRequest, device?: DeviceRequest) {\n this.device = device != null ? device : null;\n }\n\n // eslint-disable-next-line\n alterIdentityTokenHeaders(headers: Headers) {\n // Implemented in subclass if required\n }\n\n setTwoFactor(twoFactor: TokenTwoFactorRequest) {\n this.twoFactor = twoFactor;\n }\n\n setPasswordlessAccessCode(accessCode: string) {\n this.passwordlessAuthRequest = accessCode;\n }\n\n protected toIdentityToken(clientId: string) {\n const obj: any = {\n scope: \"api offline_access\",\n client_id: clientId,\n };\n\n if (this.device) {\n obj.deviceType = this.device.type;\n obj.deviceIdentifier = this.device.identifier;\n obj.deviceName = this.device.name;\n // no push tokens for browser apps yet\n // obj.devicePushToken = this.device.pushToken;\n }\n\n //passswordless login\n if (this.passwordlessAuthRequest) {\n obj.authRequest = this.passwordlessAuthRequest;\n }\n\n if (this.twoFactor.token && this.twoFactor.provider != null) {\n obj.twoFactorToken = this.twoFactor.token;\n obj.twoFactorProvider = this.twoFactor.provider;\n obj.twoFactorRemember = this.twoFactor.remember ? \"1\" : \"0\";\n }\n\n return obj;\n }\n}\n","import { DeviceRequest } from \"../device.request\";\n\nimport { TokenTwoFactorRequest } from \"./token-two-factor.request\";\nimport { TokenRequest } from \"./token.request\";\n\nexport class ApiTokenRequest extends TokenRequest {\n constructor(\n public clientId: string,\n public clientSecret: string,\n protected twoFactor: TokenTwoFactorRequest,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken() {\n const obj = super.toIdentityToken(this.clientId);\n\n obj.scope = this.clientId.startsWith(\"organization\") ? \"api.organization\" : \"api\";\n obj.grant_type = \"client_credentials\";\n obj.client_secret = this.clientSecret;\n\n return obj;\n }\n}\n","import { TwoFactorProviderType } from \"../../../enums/twoFactorProviderType\";\n\nexport class TokenTwoFactorRequest {\n constructor(\n public provider: TwoFactorProviderType = null,\n public token: string = null,\n public remember: boolean = false\n ) {}\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class ApiKeyResponse extends BaseResponse {\n apiKey: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.apiKey = this.getResponseProperty(\"ApiKey\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class AttachmentResponse extends BaseResponse {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.url = this.getResponseProperty(\"Url\");\n this.fileName = this.getResponseProperty(\"FileName\");\n this.key = this.getResponseProperty(\"Key\");\n this.size = this.getResponseProperty(\"Size\");\n this.sizeName = this.getResponseProperty(\"SizeName\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class PasswordHistoryResponse extends BaseResponse {\n password: string;\n lastUsedDate: string;\n\n constructor(response: any) {\n super(response);\n this.password = this.getResponseProperty(\"Password\");\n this.lastUsedDate = this.getResponseProperty(\"LastUsedDate\");\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CardApi } from \"../api/card.api\";\nimport { FieldApi } from \"../api/field.api\";\nimport { IdentityApi } from \"../api/identity.api\";\nimport { LoginApi } from \"../api/login.api\";\nimport { SecureNoteApi } from \"../api/secure-note.api\";\n\nimport { AttachmentResponse } from \"./attachment.response\";\nimport { BaseResponse } from \"./base.response\";\nimport { PasswordHistoryResponse } from \"./password-history.response\";\n\nexport class CipherResponse extends BaseResponse {\n id: string;\n organizationId: string;\n folderId: string;\n type: number;\n name: string;\n notes: string;\n fields: FieldApi[];\n login: LoginApi;\n card: CardApi;\n identity: IdentityApi;\n secureNote: SecureNoteApi;\n favorite: boolean;\n edit: boolean;\n viewPassword: boolean;\n organizationUseTotp: boolean;\n revisionDate: string;\n attachments: AttachmentResponse[];\n passwordHistory: PasswordHistoryResponse[];\n collectionIds: string[];\n creationDate: string;\n deletedDate: string;\n reprompt: CipherRepromptType;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.folderId = this.getResponseProperty(\"FolderId\") || null;\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.notes = this.getResponseProperty(\"Notes\");\n this.favorite = this.getResponseProperty(\"Favorite\") || false;\n this.edit = !!this.getResponseProperty(\"Edit\");\n if (this.getResponseProperty(\"ViewPassword\") == null) {\n this.viewPassword = true;\n } else {\n this.viewPassword = this.getResponseProperty(\"ViewPassword\");\n }\n this.organizationUseTotp = this.getResponseProperty(\"OrganizationUseTotp\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n this.collectionIds = this.getResponseProperty(\"CollectionIds\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n this.deletedDate = this.getResponseProperty(\"DeletedDate\");\n\n const login = this.getResponseProperty(\"Login\");\n if (login != null) {\n this.login = new LoginApi(login);\n }\n\n const card = this.getResponseProperty(\"Card\");\n if (card != null) {\n this.card = new CardApi(card);\n }\n\n const identity = this.getResponseProperty(\"Identity\");\n if (identity != null) {\n this.identity = new IdentityApi(identity);\n }\n\n const secureNote = this.getResponseProperty(\"SecureNote\");\n if (secureNote != null) {\n this.secureNote = new SecureNoteApi(secureNote);\n }\n\n const fields = this.getResponseProperty(\"Fields\");\n if (fields != null) {\n this.fields = fields.map((f: any) => new FieldApi(f));\n }\n\n const attachments = this.getResponseProperty(\"Attachments\");\n if (attachments != null) {\n this.attachments = attachments.map((a: any) => new AttachmentResponse(a));\n }\n\n const passwordHistory = this.getResponseProperty(\"PasswordHistory\");\n if (passwordHistory != null) {\n this.passwordHistory = passwordHistory.map((h: any) => new PasswordHistoryResponse(h));\n }\n\n this.reprompt = this.getResponseProperty(\"Reprompt\") || CipherRepromptType.None;\n }\n}\n","import { FileUploadType } from \"../../enums/fileUploadType\";\n\nimport { BaseResponse } from \"./base.response\";\nimport { CipherResponse } from \"./cipher.response\";\n\nexport class AttachmentUploadDataResponse extends BaseResponse {\n attachmentId: string;\n fileUploadType: FileUploadType;\n cipherResponse: CipherResponse;\n cipherMiniResponse: CipherResponse;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.attachmentId = this.getResponseProperty(\"AttachmentId\");\n this.fileUploadType = this.getResponseProperty(\"FileUploadType\");\n const cipherResponse = this.getResponseProperty(\"CipherResponse\");\n const cipherMiniResponse = this.getResponseProperty(\"CipherMiniResponse\");\n this.cipherResponse = cipherResponse == null ? null : new CipherResponse(cipherResponse);\n this.cipherMiniResponse =\n cipherMiniResponse == null ? null : new CipherResponse(cipherMiniResponse);\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import { DeviceType } from \"../../enums/deviceType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class AuthRequestResponse extends BaseResponse {\n id: string;\n publicKey: string;\n requestDeviceType: DeviceType;\n requestIpAddress: string;\n key: string;\n masterPasswordHash: string;\n creationDate: string;\n requestApproved: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.publicKey = this.getResponseProperty(\"PublicKey\");\n this.requestDeviceType = this.getResponseProperty(\"RequestDeviceType\");\n this.requestIpAddress = this.getResponseProperty(\"RequestIpAddress\");\n this.key = this.getResponseProperty(\"Key\");\n this.masterPasswordHash = this.getResponseProperty(\"MasterPasswordHash\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n this.requestApproved = this.getResponseProperty(\"RequestApproved\");\n }\n}\n","import { BaseResponse } from \"../base.response\";\n\nimport { ICaptchaProtectedResponse } from \"./captcha-protected.response\";\n\nexport class RegisterResponse extends BaseResponse implements ICaptchaProtectedResponse {\n captchaBypassToken: string;\n\n constructor(response: any) {\n super(response);\n this.captchaBypassToken = this.getResponseProperty(\"CaptchaBypassToken\");\n }\n}\n","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\nimport { TransactionType } from \"../../enums/transactionType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class BillingResponse extends BaseResponse {\n balance: number;\n paymentSource: BillingSourceResponse;\n invoices: BillingInvoiceResponse[] = [];\n transactions: BillingTransactionResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.balance = this.getResponseProperty(\"Balance\");\n const paymentSource = this.getResponseProperty(\"PaymentSource\");\n const transactions = this.getResponseProperty(\"Transactions\");\n const invoices = this.getResponseProperty(\"Invoices\");\n this.paymentSource = paymentSource == null ? null : new BillingSourceResponse(paymentSource);\n if (transactions != null) {\n this.transactions = transactions.map((t: any) => new BillingTransactionResponse(t));\n }\n if (invoices != null) {\n this.invoices = invoices.map((i: any) => new BillingInvoiceResponse(i));\n }\n }\n\n get hasNoHistory() {\n return this.invoices.length == 0 && this.transactions.length == 0;\n }\n}\n\nexport class BillingSourceResponse extends BaseResponse {\n type: PaymentMethodType;\n cardBrand: string;\n description: string;\n needsVerification: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.cardBrand = this.getResponseProperty(\"CardBrand\");\n this.description = this.getResponseProperty(\"Description\");\n this.needsVerification = this.getResponseProperty(\"NeedsVerification\");\n }\n}\n\nexport class BillingInvoiceResponse extends BaseResponse {\n url: string;\n pdfUrl: string;\n number: string;\n paid: boolean;\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.url = this.getResponseProperty(\"Url\");\n this.pdfUrl = this.getResponseProperty(\"PdfUrl\");\n this.number = this.getResponseProperty(\"Number\");\n this.paid = this.getResponseProperty(\"Paid\");\n this.date = this.getResponseProperty(\"Date\");\n this.amount = this.getResponseProperty(\"Amount\");\n }\n}\n\nexport class BillingTransactionResponse extends BaseResponse {\n createdDate: string;\n amount: number;\n refunded: boolean;\n partiallyRefunded: boolean;\n refundedAmount: number;\n type: TransactionType;\n paymentMethodType: PaymentMethodType;\n details: string;\n\n constructor(response: any) {\n super(response);\n this.createdDate = this.getResponseProperty(\"CreatedDate\");\n this.amount = this.getResponseProperty(\"Amount\");\n this.refunded = this.getResponseProperty(\"Refunded\");\n this.partiallyRefunded = this.getResponseProperty(\"PartiallyRefunded\");\n this.refundedAmount = this.getResponseProperty(\"RefundedAmount\");\n this.type = this.getResponseProperty(\"Type\");\n this.paymentMethodType = this.getResponseProperty(\"PaymentMethodType\");\n this.details = this.getResponseProperty(\"Details\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { BillingInvoiceResponse, BillingTransactionResponse } from \"./billing.response\";\n\nexport class BillingHistoryResponse extends BaseResponse {\n invoices: BillingInvoiceResponse[] = [];\n transactions: BillingTransactionResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const transactions = this.getResponseProperty(\"Transactions\");\n const invoices = this.getResponseProperty(\"Invoices\");\n if (transactions != null) {\n this.transactions = transactions.map((t: any) => new BillingTransactionResponse(t));\n }\n if (invoices != null) {\n this.invoices = invoices.map((i: any) => new BillingInvoiceResponse(i));\n }\n }\n\n get hasNoHistory() {\n return this.invoices.length == 0 && this.transactions.length == 0;\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { BillingSourceResponse } from \"./billing.response\";\n\nexport class BillingPaymentResponse extends BaseResponse {\n balance: number;\n paymentSource: BillingSourceResponse;\n\n constructor(response: any) {\n super(response);\n this.balance = this.getResponseProperty(\"Balance\");\n const paymentSource = this.getResponseProperty(\"PaymentSource\");\n this.paymentSource = paymentSource == null ? null : new BillingSourceResponse(paymentSource);\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class BreachAccountResponse extends BaseResponse {\n addedDate: string;\n breachDate: string;\n dataClasses: string[];\n description: string;\n domain: string;\n isActive: boolean;\n isVerified: boolean;\n logoPath: string;\n modifiedDate: string;\n name: string;\n pwnCount: number;\n title: string;\n\n constructor(response: any) {\n super(response);\n this.addedDate = this.getResponseProperty(\"AddedDate\");\n this.breachDate = this.getResponseProperty(\"BreachDate\");\n this.dataClasses = this.getResponseProperty(\"DataClasses\");\n this.description = this.getResponseProperty(\"Description\");\n this.domain = this.getResponseProperty(\"Domain\");\n this.isActive = this.getResponseProperty(\"IsActive\");\n this.isVerified = this.getResponseProperty(\"IsVerified\");\n this.logoPath = this.getResponseProperty(\"LogoPath\");\n this.modifiedDate = this.getResponseProperty(\"ModifiedDate\");\n this.name = this.getResponseProperty(\"Name\");\n this.pwnCount = this.getResponseProperty(\"PwnCount\");\n this.title = this.getResponseProperty(\"Title\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class SelectionReadOnlyResponse extends BaseResponse {\n id: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.readOnly = this.getResponseProperty(\"ReadOnly\");\n this.hidePasswords = this.getResponseProperty(\"HidePasswords\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { SelectionReadOnlyResponse } from \"./selection-read-only.response\";\n\nexport class CollectionResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.name = this.getResponseProperty(\"Name\");\n this.externalId = this.getResponseProperty(\"ExternalId\");\n }\n}\n\nexport class CollectionDetailsResponse extends CollectionResponse {\n readOnly: boolean;\n\n constructor(response: any) {\n super(response);\n this.readOnly = this.getResponseProperty(\"ReadOnly\") || false;\n }\n}\n\nexport class CollectionGroupDetailsResponse extends CollectionResponse {\n groups: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const groups = this.getResponseProperty(\"Groups\");\n if (groups != null) {\n this.groups = groups.map((g: any) => new SelectionReadOnlyResponse(g));\n }\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class DeviceVerificationResponse extends BaseResponse {\n isDeviceVerificationSectionEnabled: boolean;\n unknownDeviceVerificationEnabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.isDeviceVerificationSectionEnabled = this.getResponseProperty(\n \"IsDeviceVerificationSectionEnabled\"\n );\n this.unknownDeviceVerificationEnabled = this.getResponseProperty(\n \"UnknownDeviceVerificationEnabled\"\n );\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class GlobalDomainResponse extends BaseResponse {\n type: number;\n domains: string[];\n excluded: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.domains = this.getResponseProperty(\"Domains\");\n this.excluded = this.getResponseProperty(\"Excluded\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { GlobalDomainResponse } from \"./global-domain.response\";\n\nexport class DomainsResponse extends BaseResponse {\n equivalentDomains: string[][];\n globalEquivalentDomains: GlobalDomainResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.equivalentDomains = this.getResponseProperty(\"EquivalentDomains\");\n const globalEquivalentDomains = this.getResponseProperty(\"GlobalEquivalentDomains\");\n if (globalEquivalentDomains != null) {\n this.globalEquivalentDomains = globalEquivalentDomains.map(\n (d: any) => new GlobalDomainResponse(d)\n );\n } else {\n this.globalEquivalentDomains = [];\n }\n }\n}\n","import { EmergencyAccessStatusType } from \"../../enums/emergencyAccessStatusType\";\nimport { EmergencyAccessType } from \"../../enums/emergencyAccessType\";\nimport { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./base.response\";\nimport { CipherResponse } from \"./cipher.response\";\n\nexport class EmergencyAccessGranteeDetailsResponse extends BaseResponse {\n id: string;\n granteeId: string;\n name: string;\n email: string;\n type: EmergencyAccessType;\n status: EmergencyAccessStatusType;\n waitTimeDays: number;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.granteeId = this.getResponseProperty(\"GranteeId\");\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.waitTimeDays = this.getResponseProperty(\"WaitTimeDays\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n }\n}\n\nexport class EmergencyAccessGrantorDetailsResponse extends BaseResponse {\n id: string;\n grantorId: string;\n name: string;\n email: string;\n type: EmergencyAccessType;\n status: EmergencyAccessStatusType;\n waitTimeDays: number;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.grantorId = this.getResponseProperty(\"GrantorId\");\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.waitTimeDays = this.getResponseProperty(\"WaitTimeDays\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n }\n}\n\nexport class EmergencyAccessTakeoverResponse extends BaseResponse {\n keyEncrypted: string;\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n\n this.keyEncrypted = this.getResponseProperty(\"KeyEncrypted\");\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n }\n}\n\nexport class EmergencyAccessViewResponse extends BaseResponse {\n keyEncrypted: string;\n ciphers: CipherResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n this.keyEncrypted = this.getResponseProperty(\"KeyEncrypted\");\n\n const ciphers = this.getResponseProperty(\"Ciphers\");\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n }\n}\n","import { DeviceType } from \"../../enums/deviceType\";\nimport { EventSystemUser } from \"../../enums/event-system-user\";\nimport { EventType } from \"../../enums/eventType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class EventResponse extends BaseResponse {\n type: EventType;\n userId: string;\n organizationId: string;\n providerId: string;\n cipherId: string;\n collectionId: string;\n groupId: string;\n policyId: string;\n organizationUserId: string;\n providerUserId: string;\n providerOrganizationId: string;\n actingUserId: string;\n date: string;\n deviceType: DeviceType;\n ipAddress: string;\n installationId: string;\n systemUser: EventSystemUser;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.cipherId = this.getResponseProperty(\"CipherId\");\n this.collectionId = this.getResponseProperty(\"CollectionId\");\n this.groupId = this.getResponseProperty(\"GroupId\");\n this.policyId = this.getResponseProperty(\"PolicyId\");\n this.organizationUserId = this.getResponseProperty(\"OrganizationUserId\");\n this.providerUserId = this.getResponseProperty(\"ProviderUserId\");\n this.providerOrganizationId = this.getResponseProperty(\"ProviderOrganizationId\");\n this.actingUserId = this.getResponseProperty(\"ActingUserId\");\n this.date = this.getResponseProperty(\"Date\");\n this.deviceType = this.getResponseProperty(\"DeviceType\");\n this.ipAddress = this.getResponseProperty(\"IpAddress\");\n this.installationId = this.getResponseProperty(\"InstallationId\");\n this.systemUser = this.getResponseProperty(\"SystemUser\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { SelectionReadOnlyResponse } from \"./selection-read-only.response\";\n\nexport class GroupResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n accessAll: boolean;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.name = this.getResponseProperty(\"Name\");\n this.accessAll = this.getResponseProperty(\"AccessAll\");\n this.externalId = this.getResponseProperty(\"ExternalId\");\n }\n}\n\nexport class GroupDetailsResponse extends GroupResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class IdentityCaptchaResponse extends BaseResponse {\n siteKey: string;\n\n constructor(response: any) {\n super(response);\n this.siteKey = this.getResponseProperty(\"HCaptcha_SiteKey\");\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class IdentityTokenResponse extends BaseResponse {\n accessToken: string;\n expiresIn: number;\n refreshToken: string;\n tokenType: string;\n\n resetMasterPassword: boolean;\n privateKey: string;\n key: string;\n twoFactorToken: string;\n kdf: KdfType;\n kdfIterations: number;\n forcePasswordReset: boolean;\n apiUseKeyConnector: boolean;\n keyConnectorUrl: string;\n\n constructor(response: any) {\n super(response);\n this.accessToken = response.access_token;\n this.expiresIn = response.expires_in;\n this.refreshToken = response.refresh_token;\n this.tokenType = response.token_type;\n\n this.resetMasterPassword = this.getResponseProperty(\"ResetMasterPassword\");\n this.privateKey = this.getResponseProperty(\"PrivateKey\");\n this.key = this.getResponseProperty(\"Key\");\n this.twoFactorToken = this.getResponseProperty(\"TwoFactorToken\");\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n this.forcePasswordReset = this.getResponseProperty(\"ForcePasswordReset\");\n this.apiUseKeyConnector = this.getResponseProperty(\"ApiUseKeyConnector\");\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n }\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class IdentityTwoFactorResponse extends BaseResponse {\n twoFactorProviders: TwoFactorProviderType[];\n twoFactorProviders2 = new Map();\n captchaToken: string;\n\n constructor(response: any) {\n super(response);\n this.captchaToken = this.getResponseProperty(\"CaptchaBypassToken\");\n this.twoFactorProviders = this.getResponseProperty(\"TwoFactorProviders\");\n const twoFactorProviders2 = this.getResponseProperty(\"TwoFactorProviders2\");\n if (twoFactorProviders2 != null) {\n for (const prop in twoFactorProviders2) {\n // eslint-disable-next-line\n if (twoFactorProviders2.hasOwnProperty(prop)) {\n this.twoFactorProviders2.set(parseInt(prop, null), twoFactorProviders2[prop]);\n }\n }\n }\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class KeyConnectorUserKeyResponse extends BaseResponse {\n key: string;\n\n constructor(response: any) {\n super(response);\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class ListResponse extends BaseResponse {\n data: T[];\n continuationToken: string;\n\n constructor(response: any, t: new (dataResponse: any) => T) {\n super(response);\n const data = this.getResponseProperty(\"Data\");\n this.data = data == null ? [] : data.map((dr: any) => new t(dr));\n this.continuationToken = this.getResponseProperty(\"ContinuationToken\");\n }\n}\n","import { OrganizationConnectionType } from \"../../enums/organizationConnectionType\";\nimport { BillingSyncConfigApi } from \"../api/billing-sync-config.api\";\nimport { ScimConfigApi } from \"../api/scim-config.api\";\n\nimport { BaseResponse } from \"./base.response\";\n\n/**API response config types for OrganizationConnectionResponse */\nexport type OrganizationConnectionConfigApis = BillingSyncConfigApi | ScimConfigApi;\n\nexport class OrganizationConnectionResponse<\n TConfig extends OrganizationConnectionConfigApis\n> extends BaseResponse {\n id: string;\n type: OrganizationConnectionType;\n organizationId: string;\n enabled: boolean;\n config: TConfig;\n\n constructor(response: any, configType: { new (response: any): TConfig }) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.type = this.getResponseProperty(\"Type\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n const rawConfig = this.getResponseProperty(\"Config\");\n this.config = rawConfig == null ? null : new configType(rawConfig);\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { CipherResponse } from \"./cipher.response\";\nimport { CollectionResponse } from \"./collection.response\";\nimport { ListResponse } from \"./list.response\";\n\nexport class OrganizationExportResponse extends BaseResponse {\n collections: ListResponse;\n ciphers: ListResponse;\n\n constructor(response: any) {\n super(response);\n this.collections = this.getResponseProperty(\"Collections\");\n this.ciphers = this.getResponseProperty(\"Ciphers\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class OrganizationSponsorshipSyncStatusResponse extends BaseResponse {\n lastSyncDate?: Date;\n\n constructor(response: any) {\n super(response);\n const lastSyncDate = this.getResponseProperty(\"LastSyncDate\");\n if (lastSyncDate) {\n this.lastSyncDate = new Date(lastSyncDate);\n }\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class OrganizationUserBulkPublicKeyResponse extends BaseResponse {\n id: string;\n userId: string;\n key: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class OrganizationUserBulkResponse extends BaseResponse {\n id: string;\n error: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.error = this.getResponseProperty(\"Error\");\n }\n}\n","import { BaseResponse } from \"../response/base.response\";\n\nexport class PermissionsApi extends BaseResponse {\n accessEventLogs: boolean;\n accessImportExport: boolean;\n accessReports: boolean;\n /**\n * @deprecated Sep 29 2021: This permission has been split out to `createNewCollections`, `editAnyCollection`, and\n * `deleteAnyCollection`. It exists here for backwards compatibility with Server versions <= 1.43.0\n */\n manageAllCollections: boolean;\n createNewCollections: boolean;\n editAnyCollection: boolean;\n deleteAnyCollection: boolean;\n /**\n * @deprecated Sep 29 2021: This permission has been split out to `editAssignedCollections` and\n * `deleteAssignedCollections`. It exists here for backwards compatibility with Server versions <= 1.43.0\n */\n manageAssignedCollections: boolean;\n editAssignedCollections: boolean;\n deleteAssignedCollections: boolean;\n manageCiphers: boolean;\n manageGroups: boolean;\n manageSso: boolean;\n managePolicies: boolean;\n manageUsers: boolean;\n manageResetPassword: boolean;\n manageScim: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return this;\n }\n this.accessEventLogs = this.getResponseProperty(\"AccessEventLogs\");\n this.accessImportExport = this.getResponseProperty(\"AccessImportExport\");\n this.accessReports = this.getResponseProperty(\"AccessReports\");\n\n // For backwards compatibility with Server <= 1.43.0\n this.manageAllCollections = this.getResponseProperty(\"ManageAllCollections\");\n this.manageAssignedCollections = this.getResponseProperty(\"ManageAssignedCollections\");\n\n this.createNewCollections = this.getResponseProperty(\"CreateNewCollections\");\n this.editAnyCollection = this.getResponseProperty(\"EditAnyCollection\");\n this.deleteAnyCollection = this.getResponseProperty(\"DeleteAnyCollection\");\n this.editAssignedCollections = this.getResponseProperty(\"EditAssignedCollections\");\n this.deleteAssignedCollections = this.getResponseProperty(\"DeleteAssignedCollections\");\n\n this.manageCiphers = this.getResponseProperty(\"ManageCiphers\");\n this.manageGroups = this.getResponseProperty(\"ManageGroups\");\n this.manageSso = this.getResponseProperty(\"ManageSso\");\n this.managePolicies = this.getResponseProperty(\"ManagePolicies\");\n this.manageUsers = this.getResponseProperty(\"ManageUsers\");\n this.manageResetPassword = this.getResponseProperty(\"ManageResetPassword\");\n this.manageScim = this.getResponseProperty(\"ManageScim\");\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\nimport { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\n\nimport { BaseResponse } from \"./base.response\";\nimport { SelectionReadOnlyResponse } from \"./selection-read-only.response\";\n\nexport class OrganizationUserResponse extends BaseResponse {\n id: string;\n userId: string;\n type: OrganizationUserType;\n status: OrganizationUserStatusType;\n accessAll: boolean;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"Permissions\"));\n this.accessAll = this.getResponseProperty(\"AccessAll\");\n this.resetPasswordEnrolled = this.getResponseProperty(\"ResetPasswordEnrolled\");\n }\n}\n\nexport class OrganizationUserUserDetailsResponse extends OrganizationUserResponse {\n name: string;\n email: string;\n twoFactorEnabled: boolean;\n usesKeyConnector: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.twoFactorEnabled = this.getResponseProperty(\"TwoFactorEnabled\");\n this.usesKeyConnector = this.getResponseProperty(\"UsesKeyConnector\") ?? false;\n }\n}\n\nexport class OrganizationUserDetailsResponse extends OrganizationUserResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n\nexport class OrganizationUserResetPasswordDetailsReponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n resetPasswordKey: string;\n encryptedPrivateKey: string;\n\n constructor(response: any) {\n super(response);\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n this.resetPasswordKey = this.getResponseProperty(\"ResetPasswordKey\");\n this.encryptedPrivateKey = this.getResponseProperty(\"EncryptedPrivateKey\");\n }\n}\n","import { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class ProfileOrganizationResponse extends BaseResponse {\n id: string;\n name: string;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useScim: boolean;\n useCustomPermissions: boolean;\n useResetPassword: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n key: string;\n hasPublicAndPrivateKeys: boolean;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n providerId: string;\n providerName: string;\n familySponsorshipFriendlyName: string;\n familySponsorshipAvailable: boolean;\n planProductType: ProductType;\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n familySponsorshipLastSyncDate?: Date;\n familySponsorshipValidUntil?: Date;\n familySponsorshipToDelete?: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.usePolicies = this.getResponseProperty(\"UsePolicies\");\n this.useGroups = this.getResponseProperty(\"UseGroups\");\n this.useDirectory = this.getResponseProperty(\"UseDirectory\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n this.useTotp = this.getResponseProperty(\"UseTotp\");\n this.use2fa = this.getResponseProperty(\"Use2fa\");\n this.useApi = this.getResponseProperty(\"UseApi\");\n this.useSso = this.getResponseProperty(\"UseSso\");\n this.useKeyConnector = this.getResponseProperty(\"UseKeyConnector\") ?? false;\n this.useScim = this.getResponseProperty(\"UseScim\") ?? false;\n this.useCustomPermissions = this.getResponseProperty(\"UseCustomPermissions\") ?? false;\n this.useResetPassword = this.getResponseProperty(\"UseResetPassword\");\n this.selfHost = this.getResponseProperty(\"SelfHost\");\n this.usersGetPremium = this.getResponseProperty(\"UsersGetPremium\");\n this.seats = this.getResponseProperty(\"Seats\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.key = this.getResponseProperty(\"Key\");\n this.hasPublicAndPrivateKeys = this.getResponseProperty(\"HasPublicAndPrivateKeys\");\n this.status = this.getResponseProperty(\"Status\");\n this.type = this.getResponseProperty(\"Type\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.ssoBound = this.getResponseProperty(\"SsoBound\");\n this.identifier = this.getResponseProperty(\"Identifier\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"permissions\"));\n this.resetPasswordEnrolled = this.getResponseProperty(\"ResetPasswordEnrolled\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.providerName = this.getResponseProperty(\"ProviderName\");\n this.familySponsorshipFriendlyName = this.getResponseProperty(\"FamilySponsorshipFriendlyName\");\n this.familySponsorshipAvailable = this.getResponseProperty(\"FamilySponsorshipAvailable\");\n this.planProductType = this.getResponseProperty(\"PlanProductType\");\n this.keyConnectorEnabled = this.getResponseProperty(\"KeyConnectorEnabled\") ?? false;\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n const familySponsorshipLastSyncDateString = this.getResponseProperty(\n \"FamilySponsorshipLastSyncDate\"\n );\n if (familySponsorshipLastSyncDateString) {\n this.familySponsorshipLastSyncDate = new Date(familySponsorshipLastSyncDateString);\n }\n const familySponsorshipValidUntilString = this.getResponseProperty(\n \"FamilySponsorshipValidUntil\"\n );\n if (familySponsorshipValidUntilString) {\n this.familySponsorshipValidUntil = new Date(familySponsorshipValidUntilString);\n }\n this.familySponsorshipToDelete = this.getResponseProperty(\"FamilySponsorshipToDelete\");\n }\n}\n","import { ProfileOrganizationResponse } from \"./profile-organization.response\";\n\nexport class ProfileProviderOrganizationResponse extends ProfileOrganizationResponse {\n constructor(response: any) {\n super(response);\n this.keyConnectorEnabled = false;\n }\n}\n","import { ProviderUserStatusType } from \"../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../enums/providerUserType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class ProfileProviderResponse extends BaseResponse {\n id: string;\n name: string;\n key: string;\n status: ProviderUserStatusType;\n type: ProviderUserType;\n enabled: boolean;\n permissions: PermissionsApi;\n userId: string;\n useEvents: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.key = this.getResponseProperty(\"Key\");\n this.status = this.getResponseProperty(\"Status\");\n this.type = this.getResponseProperty(\"Type\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"permissions\"));\n this.userId = this.getResponseProperty(\"UserId\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { ProfileOrganizationResponse } from \"./profile-organization.response\";\nimport { ProfileProviderOrganizationResponse } from \"./profile-provider-organization.response\";\nimport { ProfileProviderResponse } from \"./profile-provider.response\";\n\nexport class ProfileResponse extends BaseResponse {\n id: string;\n name: string;\n email: string;\n emailVerified: boolean;\n masterPasswordHint: string;\n premiumPersonally: boolean;\n premiumFromOrganization: boolean;\n culture: string;\n twoFactorEnabled: boolean;\n key: string;\n privateKey: string;\n securityStamp: string;\n forcePasswordReset: boolean;\n usesKeyConnector: boolean;\n organizations: ProfileOrganizationResponse[] = [];\n providers: ProfileProviderResponse[] = [];\n providerOrganizations: ProfileProviderOrganizationResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.emailVerified = this.getResponseProperty(\"EmailVerified\");\n this.masterPasswordHint = this.getResponseProperty(\"MasterPasswordHint\");\n this.premiumPersonally = this.getResponseProperty(\"Premium\");\n this.premiumFromOrganization = this.getResponseProperty(\"PremiumFromOrganization\");\n this.culture = this.getResponseProperty(\"Culture\");\n this.twoFactorEnabled = this.getResponseProperty(\"TwoFactorEnabled\");\n this.key = this.getResponseProperty(\"Key\");\n this.privateKey = this.getResponseProperty(\"PrivateKey\");\n this.securityStamp = this.getResponseProperty(\"SecurityStamp\");\n this.forcePasswordReset = this.getResponseProperty(\"ForcePasswordReset\") ?? false;\n this.usesKeyConnector = this.getResponseProperty(\"UsesKeyConnector\") ?? false;\n\n const organizations = this.getResponseProperty(\"Organizations\");\n if (organizations != null) {\n this.organizations = organizations.map((o: any) => new ProfileOrganizationResponse(o));\n }\n const providers = this.getResponseProperty(\"Providers\");\n if (providers != null) {\n this.providers = providers.map((o: any) => new ProfileProviderResponse(o));\n }\n const providerOrganizations = this.getResponseProperty(\"ProviderOrganizations\");\n if (providerOrganizations != null) {\n this.providerOrganizations = providerOrganizations.map(\n (o: any) => new ProfileProviderOrganizationResponse(o)\n );\n }\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { ProfileResponse } from \"./profile.response\";\n\nexport class PaymentResponse extends BaseResponse {\n userProfile: ProfileResponse;\n paymentIntentClientSecret: string;\n success: boolean;\n\n constructor(response: any) {\n super(response);\n const userProfile = this.getResponseProperty(\"UserProfile\");\n if (userProfile != null) {\n this.userProfile = new ProfileResponse(userProfile);\n }\n this.paymentIntentClientSecret = this.getResponseProperty(\"PaymentIntentClientSecret\");\n this.success = this.getResponseProperty(\"Success\");\n }\n}\n","import { PlanType } from \"../../enums/planType\";\nimport { ProductType } from \"../../enums/productType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class PlanResponse extends BaseResponse {\n type: PlanType;\n product: ProductType;\n name: string;\n isAnnual: boolean;\n nameLocalizationKey: string;\n descriptionLocalizationKey: string;\n canBeUsedByBusiness: boolean;\n baseSeats: number;\n baseStorageGb: number;\n maxCollections: number;\n maxUsers: number;\n\n hasAdditionalSeatsOption: boolean;\n maxAdditionalSeats: number;\n hasAdditionalStorageOption: boolean;\n maxAdditionalStorage: number;\n hasPremiumAccessOption: boolean;\n trialPeriodDays: number;\n\n hasSelfHost: boolean;\n hasPolicies: boolean;\n hasGroups: boolean;\n hasDirectory: boolean;\n hasEvents: boolean;\n hasTotp: boolean;\n has2fa: boolean;\n hasApi: boolean;\n hasSso: boolean;\n hasResetPassword: boolean;\n usersGetPremium: boolean;\n\n upgradeSortOrder: number;\n displaySortOrder: number;\n legacyYear: number;\n disabled: boolean;\n\n stripePlanId: string;\n stripeSeatPlanId: string;\n stripeStoragePlanId: string;\n stripePremiumAccessPlanId: string;\n basePrice: number;\n seatPrice: number;\n additionalStoragePricePerGb: number;\n premiumAccessOptionPrice: number;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.product = this.getResponseProperty(\"Product\");\n this.name = this.getResponseProperty(\"Name\");\n this.isAnnual = this.getResponseProperty(\"IsAnnual\");\n this.nameLocalizationKey = this.getResponseProperty(\"NameLocalizationKey\");\n this.descriptionLocalizationKey = this.getResponseProperty(\"DescriptionLocalizationKey\");\n this.canBeUsedByBusiness = this.getResponseProperty(\"CanBeUsedByBusiness\");\n this.baseSeats = this.getResponseProperty(\"BaseSeats\");\n this.baseStorageGb = this.getResponseProperty(\"BaseStorageGb\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxUsers = this.getResponseProperty(\"MaxUsers\");\n this.hasAdditionalSeatsOption = this.getResponseProperty(\"HasAdditionalSeatsOption\");\n this.maxAdditionalSeats = this.getResponseProperty(\"MaxAdditionalSeats\");\n this.hasAdditionalStorageOption = this.getResponseProperty(\"HasAdditionalStorageOption\");\n this.maxAdditionalStorage = this.getResponseProperty(\"MaxAdditionalStorage\");\n this.hasPremiumAccessOption = this.getResponseProperty(\"HasPremiumAccessOption\");\n this.trialPeriodDays = this.getResponseProperty(\"TrialPeriodDays\");\n this.hasSelfHost = this.getResponseProperty(\"HasSelfHost\");\n this.hasPolicies = this.getResponseProperty(\"HasPolicies\");\n this.hasGroups = this.getResponseProperty(\"HasGroups\");\n this.hasDirectory = this.getResponseProperty(\"HasDirectory\");\n this.hasEvents = this.getResponseProperty(\"HasEvents\");\n this.hasTotp = this.getResponseProperty(\"HasTotp\");\n this.has2fa = this.getResponseProperty(\"Has2fa\");\n this.hasApi = this.getResponseProperty(\"HasApi\");\n this.hasSso = this.getResponseProperty(\"HasSso\");\n this.hasResetPassword = this.getResponseProperty(\"HasResetPassword\");\n this.usersGetPremium = this.getResponseProperty(\"UsersGetPremium\");\n this.upgradeSortOrder = this.getResponseProperty(\"UpgradeSortOrder\");\n this.displaySortOrder = this.getResponseProperty(\"SortOrder\");\n this.legacyYear = this.getResponseProperty(\"LegacyYear\");\n this.disabled = this.getResponseProperty(\"Disabled\");\n this.stripePlanId = this.getResponseProperty(\"StripePlanId\");\n this.stripeSeatPlanId = this.getResponseProperty(\"StripeSeatPlanId\");\n this.stripeStoragePlanId = this.getResponseProperty(\"StripeStoragePlanId\");\n this.stripePremiumAccessPlanId = this.getResponseProperty(\"StripePremiumAccessPlanId\");\n this.basePrice = this.getResponseProperty(\"BasePrice\");\n this.seatPrice = this.getResponseProperty(\"SeatPrice\");\n this.additionalStoragePricePerGb = this.getResponseProperty(\"AdditionalStoragePricePerGb\");\n this.premiumAccessOptionPrice = this.getResponseProperty(\"PremiumAccessOptionPrice\");\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class PreloginResponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n }\n}\n","import { BaseResponse } from \"../base.response\";\n\nexport class ProviderOrganizationResponse extends BaseResponse {\n id: string;\n providerId: string;\n organizationId: string;\n key: string;\n settings: string;\n creationDate: string;\n revisionDate: string;\n userCount: number;\n seats?: number;\n plan?: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.key = this.getResponseProperty(\"Key\");\n this.settings = this.getResponseProperty(\"Settings\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n this.userCount = this.getResponseProperty(\"UserCount\");\n this.seats = this.getResponseProperty(\"Seats\");\n this.plan = this.getResponseProperty(\"Plan\");\n }\n}\n\nexport class ProviderOrganizationOrganizationDetailsResponse extends ProviderOrganizationResponse {\n organizationName: string;\n\n constructor(response: any) {\n super(response);\n this.organizationName = this.getResponseProperty(\"OrganizationName\");\n }\n}\n","import { OrganizationUserBulkPublicKeyResponse } from \"../organization-user-bulk-public-key.response\";\n\nexport class ProviderUserBulkPublicKeyResponse extends OrganizationUserBulkPublicKeyResponse {}\n","import { BaseResponse } from \"../base.response\";\n\nexport class ProviderUserBulkResponse extends BaseResponse {\n id: string;\n error: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.error = this.getResponseProperty(\"Error\");\n }\n}\n","import { ProviderUserStatusType } from \"../../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../../enums/providerUserType\";\nimport { PermissionsApi } from \"../../api/permissions.api\";\nimport { BaseResponse } from \"../base.response\";\n\nexport class ProviderUserResponse extends BaseResponse {\n id: string;\n userId: string;\n type: ProviderUserType;\n status: ProviderUserStatusType;\n permissions: PermissionsApi;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"Permissions\"));\n }\n}\n\nexport class ProviderUserUserDetailsResponse extends ProviderUserResponse {\n name: string;\n email: string;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n }\n}\n","import { BaseResponse } from \"../base.response\";\n\nexport class ProviderResponse extends BaseResponse {\n id: string;\n name: string;\n businessName: string;\n billingEmail: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.businessName = this.getResponseProperty(\"BusinessName\");\n this.billingEmail = this.getResponseProperty(\"BillingEmail\");\n }\n}\n","import { BaseResponse } from \"../response/base.response\";\n\nexport class SendFileApi extends BaseResponse {\n id: string;\n fileName: string;\n size: string;\n sizeName: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.id = this.getResponseProperty(\"Id\");\n this.fileName = this.getResponseProperty(\"FileName\");\n this.size = this.getResponseProperty(\"Size\");\n this.sizeName = this.getResponseProperty(\"SizeName\");\n }\n}\n","import { BaseResponse } from \"../response/base.response\";\n\nexport class SendTextApi extends BaseResponse {\n text: string;\n hidden: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.text = this.getResponseProperty(\"Text\");\n this.hidden = this.getResponseProperty(\"Hidden\") || false;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/send-file.api\";\nimport { SendTextApi } from \"../api/send-text.api\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class SendAccessResponse extends BaseResponse {\n id: string;\n type: SendType;\n name: string;\n file: SendFileApi;\n text: SendTextApi;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n\n const text = this.getResponseProperty(\"Text\");\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty(\"File\");\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n\n this.expirationDate = this.getResponseProperty(\"ExpirationDate\");\n this.creatorIdentifier = this.getResponseProperty(\"CreatorIdentifier\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class SendFileDownloadDataResponse extends BaseResponse {\n id: string = null;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/send-file.api\";\nimport { SendTextApi } from \"../api/send-text.api\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class SendResponse extends BaseResponse {\n id: string;\n accessId: string;\n type: SendType;\n name: string;\n notes: string;\n file: SendFileApi;\n text: SendTextApi;\n key: string;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: string;\n expirationDate: string;\n deletionDate: string;\n password: string;\n disable: boolean;\n hideEmail: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.accessId = this.getResponseProperty(\"AccessId\");\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.notes = this.getResponseProperty(\"Notes\");\n this.key = this.getResponseProperty(\"Key\");\n this.maxAccessCount = this.getResponseProperty(\"MaxAccessCount\");\n this.accessCount = this.getResponseProperty(\"AccessCount\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n this.expirationDate = this.getResponseProperty(\"ExpirationDate\");\n this.deletionDate = this.getResponseProperty(\"DeletionDate\");\n this.password = this.getResponseProperty(\"Password\");\n this.disable = this.getResponseProperty(\"Disabled\") || false;\n this.hideEmail = this.getResponseProperty(\"HideEmail\") || false;\n\n const text = this.getResponseProperty(\"Text\");\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty(\"File\");\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n }\n}\n","import { FileUploadType } from \"../../enums/fileUploadType\";\n\nimport { BaseResponse } from \"./base.response\";\nimport { SendResponse } from \"./send.response\";\n\nexport class SendFileUploadDataResponse extends BaseResponse {\n fileUploadType: FileUploadType;\n sendResponse: SendResponse;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.fileUploadType = this.getResponseProperty(\"FileUploadType\");\n const sendResponse = this.getResponseProperty(\"SendResponse\");\n this.sendResponse = sendResponse == null ? null : new SendResponse(sendResponse);\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class SsoPreValidateResponse extends BaseResponse {\n token: string;\n\n constructor(response: any) {\n super(response);\n this.token = this.getResponseProperty(\"Token\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class SubscriptionResponse extends BaseResponse {\n storageName: string;\n storageGb: number;\n maxStorageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n license: any;\n expiration: string;\n usingInAppPurchase: boolean;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty(\"StorageName\");\n this.storageGb = this.getResponseProperty(\"StorageGb\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.license = this.getResponseProperty(\"License\");\n this.expiration = this.getResponseProperty(\"Expiration\");\n this.usingInAppPurchase = this.getResponseProperty(\"UsingInAppPurchase\");\n const subscription = this.getResponseProperty(\"Subscription\");\n const upcomingInvoice = this.getResponseProperty(\"UpcomingInvoice\");\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n this.upcomingInvoice =\n upcomingInvoice == null\n ? null\n : new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n }\n}\n\nexport class BillingSubscriptionResponse extends BaseResponse {\n trialStartDate: string;\n trialEndDate: string;\n periodStartDate: string;\n periodEndDate: string;\n cancelledDate: string;\n cancelAtEndDate: boolean;\n status: string;\n cancelled: boolean;\n items: BillingSubscriptionItemResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.trialEndDate = this.getResponseProperty(\"TrialStartDate\");\n this.trialEndDate = this.getResponseProperty(\"TrialEndDate\");\n this.periodStartDate = this.getResponseProperty(\"PeriodStartDate\");\n this.periodEndDate = this.getResponseProperty(\"PeriodEndDate\");\n this.cancelledDate = this.getResponseProperty(\"CancelledDate\");\n this.cancelAtEndDate = this.getResponseProperty(\"CancelAtEndDate\");\n this.status = this.getResponseProperty(\"Status\");\n this.cancelled = this.getResponseProperty(\"Cancelled\");\n const items = this.getResponseProperty(\"Items\");\n if (items != null) {\n this.items = items.map((i: any) => new BillingSubscriptionItemResponse(i));\n }\n }\n}\n\nexport class BillingSubscriptionItemResponse extends BaseResponse {\n name: string;\n amount: number;\n quantity: number;\n interval: string;\n sponsoredSubscriptionItem: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.amount = this.getResponseProperty(\"Amount\");\n this.quantity = this.getResponseProperty(\"Quantity\");\n this.interval = this.getResponseProperty(\"Interval\");\n this.sponsoredSubscriptionItem = this.getResponseProperty(\"SponsoredSubscriptionItem\");\n }\n}\n\nexport class BillingSubscriptionUpcomingInvoiceResponse extends BaseResponse {\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.date = this.getResponseProperty(\"Date\");\n this.amount = this.getResponseProperty(\"Amount\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class FolderResponse extends BaseResponse {\n id: string;\n name: string;\n revisionDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { CipherResponse } from \"./cipher.response\";\nimport { CollectionDetailsResponse } from \"./collection.response\";\nimport { DomainsResponse } from \"./domains.response\";\nimport { FolderResponse } from \"./folder.response\";\nimport { PolicyResponse } from \"./policy.response\";\nimport { ProfileResponse } from \"./profile.response\";\nimport { SendResponse } from \"./send.response\";\n\nexport class SyncResponse extends BaseResponse {\n profile?: ProfileResponse;\n folders: FolderResponse[] = [];\n collections: CollectionDetailsResponse[] = [];\n ciphers: CipherResponse[] = [];\n domains?: DomainsResponse;\n policies?: PolicyResponse[] = [];\n sends: SendResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n const profile = this.getResponseProperty(\"Profile\");\n if (profile != null) {\n this.profile = new ProfileResponse(profile);\n }\n\n const folders = this.getResponseProperty(\"Folders\");\n if (folders != null) {\n this.folders = folders.map((f: any) => new FolderResponse(f));\n }\n\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new CollectionDetailsResponse(c));\n }\n\n const ciphers = this.getResponseProperty(\"Ciphers\");\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n\n const domains = this.getResponseProperty(\"Domains\");\n if (domains != null) {\n this.domains = new DomainsResponse(domains);\n }\n\n const policies = this.getResponseProperty(\"Policies\");\n if (policies != null) {\n this.policies = policies.map((p: any) => new PolicyResponse(p));\n }\n\n const sends = this.getResponseProperty(\"Sends\");\n if (sends != null) {\n this.sends = sends.map((s: any) => new SendResponse(s));\n }\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class TaxInfoResponse extends BaseResponse {\n taxId: string;\n taxIdType: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n country: string;\n postalCode: string;\n\n constructor(response: any) {\n super(response);\n this.taxId = this.getResponseProperty(\"TaxIdNumber\");\n this.taxIdType = this.getResponseProperty(\"TaxIdType\");\n this.line1 = this.getResponseProperty(\"Line1\");\n this.line2 = this.getResponseProperty(\"Line2\");\n this.city = this.getResponseProperty(\"City\");\n this.state = this.getResponseProperty(\"State\");\n this.postalCode = this.getResponseProperty(\"PostalCode\");\n this.country = this.getResponseProperty(\"Country\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class TaxRateResponse extends BaseResponse {\n id: string;\n country: string;\n state: string;\n postalCode: string;\n rate: number;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.country = this.getResponseProperty(\"Country\");\n this.state = this.getResponseProperty(\"State\");\n this.postalCode = this.getResponseProperty(\"PostalCode\");\n this.rate = this.getResponseProperty(\"Rate\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class TwoFactorAuthenticatorResponse extends BaseResponse {\n enabled: boolean;\n key: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class TwoFactorDuoResponse extends BaseResponse {\n enabled: boolean;\n host: string;\n secretKey: string;\n integrationKey: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.host = this.getResponseProperty(\"Host\");\n this.secretKey = this.getResponseProperty(\"SecretKey\");\n this.integrationKey = this.getResponseProperty(\"IntegrationKey\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class TwoFactorEmailResponse extends BaseResponse {\n enabled: boolean;\n email: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.email = this.getResponseProperty(\"Email\");\n }\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class TwoFactorProviderResponse extends BaseResponse {\n enabled: boolean;\n type: TwoFactorProviderType;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.type = this.getResponseProperty(\"Type\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class TwoFactorRecoverResponse extends BaseResponse {\n code: string;\n\n constructor(response: any) {\n super(response);\n this.code = this.getResponseProperty(\"Code\");\n }\n}\n","import { Utils } from \"../../misc/utils\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class TwoFactorWebAuthnResponse extends BaseResponse {\n enabled: boolean;\n keys: KeyResponse[];\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n const keys = this.getResponseProperty(\"Keys\");\n this.keys = keys == null ? null : keys.map((k: any) => new KeyResponse(k));\n }\n}\n\nexport class KeyResponse extends BaseResponse {\n name: string;\n id: number;\n migrated: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.id = this.getResponseProperty(\"Id\");\n this.migrated = this.getResponseProperty(\"Migrated\");\n }\n}\n\nexport class ChallengeResponse extends BaseResponse implements PublicKeyCredentialCreationOptions {\n attestation?: AttestationConveyancePreference;\n authenticatorSelection?: AuthenticatorSelectionCriteria;\n challenge: BufferSource;\n excludeCredentials?: PublicKeyCredentialDescriptor[];\n extensions?: AuthenticationExtensionsClientInputs;\n pubKeyCredParams: PublicKeyCredentialParameters[];\n rp: PublicKeyCredentialRpEntity;\n timeout?: number;\n user: PublicKeyCredentialUserEntity;\n\n constructor(response: any) {\n super(response);\n this.attestation = this.getResponseProperty(\"attestation\");\n this.authenticatorSelection = this.getResponseProperty(\"authenticatorSelection\");\n this.challenge = Utils.fromUrlB64ToArray(this.getResponseProperty(\"challenge\"));\n this.excludeCredentials = this.getResponseProperty(\"excludeCredentials\").map((c: any) => {\n c.id = Utils.fromUrlB64ToArray(c.id).buffer;\n return c;\n });\n this.extensions = this.getResponseProperty(\"extensions\");\n this.pubKeyCredParams = this.getResponseProperty(\"pubKeyCredParams\");\n this.rp = this.getResponseProperty(\"rp\");\n this.timeout = this.getResponseProperty(\"timeout\");\n\n const user = this.getResponseProperty(\"user\");\n user.id = Utils.fromUrlB64ToArray(user.id);\n\n this.user = user;\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class TwoFactorYubiKeyResponse extends BaseResponse {\n enabled: boolean;\n key1: string;\n key2: string;\n key3: string;\n key4: string;\n key5: string;\n nfc: boolean;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.key1 = this.getResponseProperty(\"Key1\");\n this.key2 = this.getResponseProperty(\"Key2\");\n this.key3 = this.getResponseProperty(\"Key3\");\n this.key4 = this.getResponseProperty(\"Key4\");\n this.key5 = this.getResponseProperty(\"Key5\");\n this.nfc = this.getResponseProperty(\"Nfc\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class UserKeyResponse extends BaseResponse {\n userId: string;\n publicKey: string;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty(\"UserId\");\n this.publicKey = this.getResponseProperty(\"PublicKey\");\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { AuditService as AuditServiceAbstraction } from \"../abstractions/audit.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { throttle } from \"../misc/throttle\";\nimport { Utils } from \"../misc/utils\";\nimport { BreachAccountResponse } from \"../models/response/breach-account.response\";\nimport { ErrorResponse } from \"../models/response/error.response\";\n\nconst PwnedPasswordsApi = \"https://api.pwnedpasswords.com/range/\";\n\nexport class AuditService implements AuditServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService\n ) {}\n\n @throttle(100, () => \"passwordLeaked\")\n async passwordLeaked(password: string): Promise {\n const hashBytes = await this.cryptoFunctionService.hash(password, \"sha1\");\n const hash = Utils.fromBufferToHex(hashBytes).toUpperCase();\n const hashStart = hash.substr(0, 5);\n const hashEnding = hash.substr(5);\n\n const response = await this.apiService.nativeFetch(new Request(PwnedPasswordsApi + hashStart));\n const leakedHashes = await response.text();\n const match = leakedHashes.split(/\\r?\\n/).find((v) => {\n return v.split(\":\")[0] === hashEnding;\n });\n\n return match != null ? parseInt(match.split(\":\")[1], 10) : 0;\n }\n\n async breachedAccounts(username: string): Promise {\n try {\n return await this.apiService.getHibpBreach(username);\n } catch (e) {\n const error = e as ErrorResponse;\n if (error.statusCode === 404) {\n return [];\n }\n throw new Error();\n }\n }\n}\n","/**\n * Use as a Decorator on async functions, it will limit how many times the function can be\n * in-flight at a time.\n *\n * Calls beyond the limit will be queued, and run when one of the active calls finishes\n */\nexport function throttle(limit: number, throttleKey: (args: any[]) => string) {\n return (\n target: any,\n propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise>\n ) => {\n const originalMethod: () => Promise = descriptor.value;\n const allThrottles = new Map void)[]>>();\n\n const getThrottles = (obj: any) => {\n let throttles = allThrottles.get(obj);\n if (throttles != null) {\n return throttles;\n }\n throttles = new Map void)[]>();\n allThrottles.set(obj, throttles);\n return throttles;\n };\n\n return {\n value: function (...args: any[]) {\n const throttles = getThrottles(this);\n const argsThrottleKey = throttleKey(args);\n let queue = throttles.get(argsThrottleKey);\n if (queue == null) {\n queue = [];\n throttles.set(argsThrottleKey, queue);\n }\n\n return new Promise((resolve, reject) => {\n const exec = () => {\n const onFinally = () => {\n queue.splice(queue.indexOf(exec), 1);\n if (queue.length >= limit) {\n queue[limit - 1]();\n } else if (queue.length === 0) {\n throttles.delete(argsThrottleKey);\n if (throttles.size === 0) {\n allThrottles.delete(this);\n }\n }\n };\n originalMethod\n .apply(this, args)\n .then((val: any) => {\n onFinally();\n return val;\n })\n .catch((err: any) => {\n onFinally();\n throw err;\n })\n .then(resolve, reject);\n };\n queue.push(exec);\n if (queue.length <= limit) {\n exec();\n }\n });\n },\n };\n };\n}\n","export enum AuthenticationType {\n Password = 0,\n Sso = 1,\n Api = 2,\n Passwordless = 3,\n}\n","export enum KeySuffixOptions {\n Auto = \"auto\",\n Biometric = \"biometric\",\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\nimport { Utils } from \"../../misc/utils\";\n\nexport class AuthResult {\n captchaSiteKey = \"\";\n resetMasterPassword = false;\n forcePasswordReset = false;\n twoFactorProviders: Map = null;\n\n get requiresCaptcha() {\n return !Utils.isNullOrWhitespace(this.captchaSiteKey);\n }\n\n get requiresTwoFactor() {\n return this.twoFactorProviders != null;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\nimport { Account, AccountProfile, AccountTokens } from \"../../models/domain/account\";\nimport { AuthResult } from \"../../models/domain/auth-result\";\nimport {\n ApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../../models/domain/log-in-credentials\";\nimport { DeviceRequest } from \"../../models/request/device.request\";\nimport { ApiTokenRequest } from \"../../models/request/identity-token/api-token.request\";\nimport { PasswordTokenRequest } from \"../../models/request/identity-token/password-token.request\";\nimport { SsoTokenRequest } from \"../../models/request/identity-token/sso-token.request\";\nimport { TokenTwoFactorRequest } from \"../../models/request/identity-token/token-two-factor.request\";\nimport { KeysRequest } from \"../../models/request/keys.request\";\nimport { IdentityCaptchaResponse } from \"../../models/response/identity-captcha.response\";\nimport { IdentityTokenResponse } from \"../../models/response/identity-token.response\";\nimport { IdentityTwoFactorResponse } from \"../../models/response/identity-two-factor.response\";\n\nexport abstract class LogInStrategy {\n protected abstract tokenRequest: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest;\n protected captchaBypassToken: string = null;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n protected tokenService: TokenService,\n protected appIdService: AppIdService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected logService: LogService,\n protected stateService: StateService,\n protected twoFactorService: TwoFactorService\n ) {}\n\n abstract logIn(\n credentials:\n | ApiLogInCredentials\n | PasswordLogInCredentials\n | SsoLogInCredentials\n | PasswordlessLogInCredentials\n ): Promise;\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string = null\n ): Promise {\n this.tokenRequest.setTwoFactor(twoFactor);\n return this.startLogIn();\n }\n\n protected async startLogIn(): Promise {\n this.twoFactorService.clearSelectedProvider();\n\n const response = await this.apiService.postIdentityToken(this.tokenRequest);\n\n if (response instanceof IdentityTwoFactorResponse) {\n return this.processTwoFactorResponse(response);\n } else if (response instanceof IdentityCaptchaResponse) {\n return this.processCaptchaResponse(response);\n } else if (response instanceof IdentityTokenResponse) {\n return this.processTokenResponse(response);\n }\n\n throw new Error(\"Invalid response object.\");\n }\n\n protected onSuccessfulLogin(response: IdentityTokenResponse): Promise {\n // Implemented in subclass if required\n return null;\n }\n\n protected async buildDeviceRequest() {\n const appId = await this.appIdService.getAppId();\n return new DeviceRequest(appId, this.platformUtilsService);\n }\n\n protected async buildTwoFactor(userProvidedTwoFactor?: TokenTwoFactorRequest) {\n if (userProvidedTwoFactor != null) {\n return userProvidedTwoFactor;\n }\n\n const storedTwoFactorToken = await this.tokenService.getTwoFactorToken();\n if (storedTwoFactorToken != null) {\n return new TokenTwoFactorRequest(TwoFactorProviderType.Remember, storedTwoFactorToken, false);\n }\n\n return new TokenTwoFactorRequest();\n }\n\n protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) {\n const accountInformation = await this.tokenService.decodeToken(tokenResponse.accessToken);\n await this.stateService.addAccount(\n new Account({\n profile: {\n ...new AccountProfile(),\n ...{\n userId: accountInformation.sub,\n name: accountInformation.name,\n email: accountInformation.email,\n hasPremiumPersonally: accountInformation.premium,\n kdfIterations: tokenResponse.kdfIterations,\n kdfType: tokenResponse.kdf,\n },\n },\n tokens: {\n ...new AccountTokens(),\n ...{\n accessToken: tokenResponse.accessToken,\n refreshToken: tokenResponse.refreshToken,\n },\n },\n })\n );\n }\n\n protected async processTokenResponse(response: IdentityTokenResponse): Promise {\n const result = new AuthResult();\n result.resetMasterPassword = response.resetMasterPassword;\n result.forcePasswordReset = response.forcePasswordReset;\n\n await this.saveAccountInformation(response);\n\n if (response.twoFactorToken != null) {\n await this.tokenService.setTwoFactorToken(response);\n }\n\n const newSsoUser = response.key == null;\n if (!newSsoUser) {\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(\n response.privateKey ?? (await this.createKeyPairForOldAccount())\n );\n }\n\n await this.onSuccessfulLogin(response);\n\n this.messagingService.send(\"loggedIn\");\n\n return result;\n }\n\n private async processTwoFactorResponse(response: IdentityTwoFactorResponse): Promise {\n const result = new AuthResult();\n result.twoFactorProviders = response.twoFactorProviders2;\n this.twoFactorService.setProviders(response);\n this.captchaBypassToken = response.captchaToken ?? null;\n return result;\n }\n\n private async processCaptchaResponse(response: IdentityCaptchaResponse): Promise {\n const result = new AuthResult();\n result.captchaSiteKey = response.siteKey;\n return result;\n }\n\n private async createKeyPairForOldAccount() {\n try {\n const [publicKey, privateKey] = await this.cryptoService.makeKeyPair();\n await this.apiService.postAccountKeys(new KeysRequest(publicKey, privateKey.encryptedString));\n return privateKey.encryptedString;\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","export enum HashPurpose {\n ServerAuthorization = 1,\n LocalAuthorization = 2,\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { EnvironmentService } from \"../../abstractions/environment.service\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { ApiLogInCredentials } from \"../../models/domain/log-in-credentials\";\nimport { ApiTokenRequest } from \"../../models/request/identity-token/api-token.request\";\nimport { IdentityTokenResponse } from \"../../models/response/identity-token.response\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class ApiLogInStrategy extends LogInStrategy {\n tokenRequest: ApiTokenRequest;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private environmentService: EnvironmentService,\n private keyConnectorService: KeyConnectorService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin(tokenResponse: IdentityTokenResponse) {\n if (tokenResponse.apiUseKeyConnector) {\n const keyConnectorUrl = this.environmentService.getKeyConnectorUrl();\n await this.keyConnectorService.getAndSetKey(keyConnectorUrl);\n }\n }\n\n async logIn(credentials: ApiLogInCredentials) {\n this.tokenRequest = new ApiTokenRequest(\n credentials.clientId,\n credentials.clientSecret,\n await this.buildTwoFactor(),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n\n protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) {\n await super.saveAccountInformation(tokenResponse);\n await this.stateService.setApiKeyClientId(this.tokenRequest.clientId);\n await this.stateService.setApiKeyClientSecret(this.tokenRequest.clientSecret);\n }\n}\n","import { ClientType } from \"../../../enums/clientType\";\nimport { Utils } from \"../../../misc/utils\";\nimport { CaptchaProtectedRequest } from \"../captcha-protected.request\";\nimport { DeviceRequest } from \"../device.request\";\n\nimport { TokenTwoFactorRequest } from \"./token-two-factor.request\";\nimport { TokenRequest } from \"./token.request\";\n\nexport class PasswordTokenRequest extends TokenRequest implements CaptchaProtectedRequest {\n constructor(\n public email: string,\n public masterPasswordHash: string,\n public captchaResponse: string,\n protected twoFactor: TokenTwoFactorRequest,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken(clientId: ClientType) {\n const obj = super.toIdentityToken(clientId);\n\n obj.grant_type = \"password\";\n obj.username = this.email;\n obj.password = this.masterPasswordHash;\n\n if (this.captchaResponse != null) {\n obj.captchaResponse = this.captchaResponse;\n }\n\n return obj;\n }\n\n alterIdentityTokenHeaders(headers: Headers) {\n headers.set(\"Auth-Email\", Utils.fromUtf8ToUrlB64(this.email));\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { AuthService } from \"../../abstractions/auth.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { HashPurpose } from \"../../enums/hashPurpose\";\nimport { AuthResult } from \"../../models/domain/auth-result\";\nimport { PasswordLogInCredentials } from \"../../models/domain/log-in-credentials\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\nimport { PasswordTokenRequest } from \"../../models/request/identity-token/password-token.request\";\nimport { TokenTwoFactorRequest } from \"../../models/request/identity-token/token-two-factor.request\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class PasswordLogInStrategy extends LogInStrategy {\n get email() {\n return this.tokenRequest.email;\n }\n\n get masterPasswordHash() {\n return this.tokenRequest.masterPasswordHash;\n }\n\n tokenRequest: PasswordTokenRequest;\n\n private localHashedPassword: string;\n private key: SymmetricCryptoKey;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private authService: AuthService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin() {\n await this.cryptoService.setKey(this.key);\n await this.cryptoService.setKeyHash(this.localHashedPassword);\n }\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ): Promise {\n this.tokenRequest.captchaResponse = captchaResponse ?? this.captchaBypassToken;\n return super.logInTwoFactor(twoFactor);\n }\n\n async logIn(credentials: PasswordLogInCredentials) {\n const { email, masterPassword, captchaToken, twoFactor } = credentials;\n\n this.key = await this.authService.makePreloginKey(masterPassword, email);\n\n // Hash the password early (before authentication) so we don't persist it in memory in plaintext\n this.localHashedPassword = await this.cryptoService.hashPassword(\n masterPassword,\n this.key,\n HashPurpose.LocalAuthorization\n );\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, this.key);\n\n this.tokenRequest = new PasswordTokenRequest(\n email,\n hashedPassword,\n captchaToken,\n await this.buildTwoFactor(twoFactor),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { AuthService } from \"../../abstractions/auth.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { AuthResult } from \"../../models/domain/auth-result\";\nimport { PasswordlessLogInCredentials } from \"../../models/domain/log-in-credentials\";\nimport { PasswordTokenRequest } from \"../../models/request/identity-token/password-token.request\";\nimport { TokenTwoFactorRequest } from \"../../models/request/identity-token/token-two-factor.request\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class PasswordlessLogInStrategy extends LogInStrategy {\n get email() {\n return this.tokenRequest.email;\n }\n\n get accessCode() {\n return this.passwordlessCredentials.accessCode;\n }\n\n get authRequestId() {\n return this.passwordlessCredentials.authRequestId;\n }\n\n tokenRequest: PasswordTokenRequest;\n private passwordlessCredentials: PasswordlessLogInCredentials;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private authService: AuthService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin() {\n await this.cryptoService.setKey(this.passwordlessCredentials.decKey);\n await this.cryptoService.setKeyHash(this.passwordlessCredentials.localPasswordHash);\n }\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ): Promise {\n this.tokenRequest.captchaResponse = captchaResponse ?? this.captchaBypassToken;\n return super.logInTwoFactor(twoFactor);\n }\n\n async logIn(credentials: PasswordlessLogInCredentials) {\n this.passwordlessCredentials = credentials;\n\n this.tokenRequest = new PasswordTokenRequest(\n credentials.email,\n credentials.accessCode,\n null,\n await this.buildTwoFactor(credentials.twoFactor),\n await this.buildDeviceRequest()\n );\n\n this.tokenRequest.setPasswordlessAccessCode(credentials.authRequestId);\n return this.startLogIn();\n }\n}\n","import { DeviceRequest } from \"../device.request\";\n\nimport { TokenTwoFactorRequest } from \"./token-two-factor.request\";\nimport { TokenRequest } from \"./token.request\";\n\nexport class SsoTokenRequest extends TokenRequest {\n constructor(\n public code: string,\n public codeVerifier: string,\n public redirectUri: string,\n protected twoFactor: TokenTwoFactorRequest,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken(clientId: string) {\n const obj = super.toIdentityToken(clientId);\n\n obj.grant_type = \"authorization_code\";\n obj.code = this.code;\n obj.code_verifier = this.codeVerifier;\n obj.redirect_uri = this.redirectUri;\n\n return obj;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { SsoLogInCredentials } from \"../../models/domain/log-in-credentials\";\nimport { SsoTokenRequest } from \"../../models/request/identity-token/sso-token.request\";\nimport { IdentityTokenResponse } from \"../../models/response/identity-token.response\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class SsoLogInStrategy extends LogInStrategy {\n tokenRequest: SsoTokenRequest;\n orgId: string;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private keyConnectorService: KeyConnectorService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin(tokenResponse: IdentityTokenResponse) {\n const newSsoUser = tokenResponse.key == null;\n\n if (tokenResponse.keyConnectorUrl != null) {\n if (!newSsoUser) {\n await this.keyConnectorService.getAndSetKey(tokenResponse.keyConnectorUrl);\n } else {\n await this.keyConnectorService.convertNewSsoUserToKeyConnector(tokenResponse, this.orgId);\n }\n }\n }\n\n async logIn(credentials: SsoLogInCredentials) {\n this.orgId = credentials.orgId;\n this.tokenRequest = new SsoTokenRequest(\n credentials.code,\n credentials.codeVerifier,\n credentials.redirectUrl,\n await this.buildTwoFactor(credentials.twoFactor),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n}\n","export class PreloginRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","/**\n * Use as a Decorator on async functions, it will prevent multiple 'active' calls as the same time\n *\n * If a promise was returned from a previous call to this function, that hasn't yet resolved it will\n * be returned, instead of calling the original function again\n *\n * Results are not cached, once the promise has returned, the next call will result in a fresh call\n *\n * Read more at https://github.com/bitwarden/jslib/pull/7\n */\nexport function sequentialize(cacheKey: (args: any[]) => string) {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod: () => Promise = descriptor.value;\n const caches = new Map>>();\n\n const getCache = (obj: any) => {\n let cache = caches.get(obj);\n if (cache != null) {\n return cache;\n }\n cache = new Map>();\n caches.set(obj, cache);\n return cache;\n };\n\n return {\n value: function (...args: any[]) {\n const cache = getCache(this);\n const argsCacheKey = cacheKey(args);\n let response = cache.get(argsCacheKey);\n if (response != null) {\n return response;\n }\n\n const onFinally = () => {\n cache.delete(argsCacheKey);\n if (cache.size === 0) {\n caches.delete(this);\n }\n };\n response = originalMethod\n .apply(this, args)\n .then((val: any) => {\n onFinally();\n return val;\n })\n .catch((err: any) => {\n onFinally();\n throw err;\n });\n\n cache.set(argsCacheKey, response);\n return response;\n },\n };\n };\n}\n","import { EncryptionType } from \"../../enums/encryptionType\";\nimport { IEncrypted } from \"../../interfaces/IEncrypted\";\nimport { Utils } from \"../../misc/utils\";\n\nconst ENC_TYPE_LENGTH = 1;\nconst IV_LENGTH = 16;\nconst MAC_LENGTH = 32;\nconst MIN_DATA_LENGTH = 1;\n\nexport class EncArrayBuffer implements IEncrypted {\n readonly encryptionType: EncryptionType = null;\n readonly dataBytes: ArrayBuffer = null;\n readonly ivBytes: ArrayBuffer = null;\n readonly macBytes: ArrayBuffer = null;\n\n constructor(readonly buffer: ArrayBuffer) {\n const encBytes = new Uint8Array(buffer);\n const encType = encBytes[0];\n\n switch (encType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64: {\n const minimumLength = ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH + MIN_DATA_LENGTH;\n if (encBytes.length < minimumLength) {\n this.throwDecryptionError();\n }\n\n this.ivBytes = encBytes.slice(ENC_TYPE_LENGTH, ENC_TYPE_LENGTH + IV_LENGTH).buffer;\n this.macBytes = encBytes.slice(\n ENC_TYPE_LENGTH + IV_LENGTH,\n ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH\n ).buffer;\n this.dataBytes = encBytes.slice(ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH).buffer;\n break;\n }\n case EncryptionType.AesCbc256_B64: {\n const minimumLength = ENC_TYPE_LENGTH + IV_LENGTH + MIN_DATA_LENGTH;\n if (encBytes.length < minimumLength) {\n this.throwDecryptionError();\n }\n\n this.ivBytes = encBytes.slice(ENC_TYPE_LENGTH, ENC_TYPE_LENGTH + IV_LENGTH).buffer;\n this.dataBytes = encBytes.slice(ENC_TYPE_LENGTH + IV_LENGTH).buffer;\n break;\n }\n default:\n this.throwDecryptionError();\n }\n\n this.encryptionType = encType;\n }\n\n private throwDecryptionError() {\n throw new Error(\n \"Error parsing encrypted ArrayBuffer: data is corrupted or has an invalid format.\"\n );\n }\n\n static async fromResponse(response: {\n arrayBuffer: () => Promise;\n }): Promise {\n const buffer = await response.arrayBuffer();\n if (buffer == null) {\n throw new Error(\"Cannot create EncArrayBuffer from Response - Response is empty\");\n }\n return new EncArrayBuffer(buffer);\n }\n\n static fromB64(b64: string) {\n const buffer = Utils.fromB64ToArray(b64).buffer;\n return new EncArrayBuffer(buffer);\n }\n}\n","import { CipherView } from \"../view/cipher.view\";\n\nconst CacheTTL = 3000;\n\nexport class SortedCiphersCache {\n private readonly sortedCiphersByUrl: Map = new Map();\n private readonly timeouts: Map = new Map();\n\n constructor(private readonly comparator: (a: CipherView, b: CipherView) => number) {}\n\n isCached(url: string) {\n return this.sortedCiphersByUrl.has(url);\n }\n\n addCiphers(url: string, ciphers: CipherView[]) {\n ciphers.sort(this.comparator);\n this.sortedCiphersByUrl.set(url, new Ciphers(ciphers));\n this.resetTimer(url);\n }\n\n getLastUsed(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastUsed() : null;\n }\n\n getLastLaunched(url: string) {\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastLaunched() : null;\n }\n\n getNext(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getNext() : null;\n }\n\n updateLastUsedIndex(url: string) {\n if (this.isCached(url)) {\n this.sortedCiphersByUrl.get(url).updateLastUsedIndex();\n }\n }\n\n clear() {\n this.sortedCiphersByUrl.clear();\n this.timeouts.clear();\n }\n\n private resetTimer(url: string) {\n clearTimeout(this.timeouts.get(url));\n this.timeouts.set(\n url,\n setTimeout(() => {\n this.sortedCiphersByUrl.delete(url);\n this.timeouts.delete(url);\n }, CacheTTL)\n );\n }\n}\n\nclass Ciphers {\n lastUsedIndex = -1;\n\n constructor(private readonly ciphers: CipherView[]) {}\n\n getLastUsed() {\n this.lastUsedIndex = Math.max(this.lastUsedIndex, 0);\n return this.ciphers[this.lastUsedIndex];\n }\n\n getLastLaunched() {\n const usedCiphers = this.ciphers.filter((cipher) => cipher.localData?.lastLaunched);\n const sortedCiphers = usedCiphers.sort(\n (x, y) => y.localData.lastLaunched.valueOf() - x.localData.lastLaunched.valueOf()\n );\n return sortedCiphers[0];\n }\n\n getNextIndex() {\n return (this.lastUsedIndex + 1) % this.ciphers.length;\n }\n\n getNext() {\n return this.ciphers[this.getNextIndex()];\n }\n\n updateLastUsedIndex() {\n this.lastUsedIndex = this.getNextIndex();\n }\n}\n","export class CipherBulkDeleteRequest {\n ids: string[];\n organizationId: string;\n\n constructor(ids: string[], organizationId?: string) {\n this.ids = ids == null ? [] : ids;\n this.organizationId = organizationId;\n }\n}\n","export class CipherBulkMoveRequest {\n ids: string[];\n folderId: string;\n\n constructor(ids: string[], folderId: string) {\n this.ids = ids == null ? [] : ids;\n this.folderId = folderId;\n }\n}\n","export class CipherBulkRestoreRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipher.request\";\n\nexport class CipherWithIdRequest extends CipherRequest {\n id: string;\n\n constructor(cipher: Cipher) {\n super(cipher);\n this.id = cipher.id;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherWithIdRequest } from \"./cipher-with-id.request\";\n\nexport class CipherBulkShareRequest {\n ciphers: CipherWithIdRequest[];\n collectionIds: string[];\n\n constructor(ciphers: Cipher[], collectionIds: string[]) {\n if (ciphers != null) {\n this.ciphers = [];\n ciphers.forEach((c) => {\n this.ciphers.push(new CipherWithIdRequest(c));\n });\n }\n this.collectionIds = collectionIds;\n }\n}\n","export class CipherCollectionsRequest {\n collectionIds: string[];\n\n constructor(collectionIds: string[]) {\n this.collectionIds = collectionIds == null ? [] : collectionIds;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nexport class CipherPartialRequest {\n folderId: string;\n favorite: boolean;\n\n constructor(cipher: Cipher) {\n this.folderId = cipher.folderId;\n this.favorite = cipher.favorite;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipher.request\";\n\nexport class CipherShareRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"../abstractions/api.service\";\nimport { CipherService as CipherServiceAbstraction } from \"../abstractions/cipher.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { EncryptService } from \"../abstractions/encrypt.service\";\nimport { FileUploadService } from \"../abstractions/fileUpload.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { SearchService } from \"../abstractions/search.service\";\nimport { SettingsService } from \"../abstractions/settings.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { sequentialize } from \"../misc/sequentialize\";\nimport { Utils } from \"../misc/utils\";\nimport { CipherData } from \"../models/data/cipher.data\";\nimport { AccountSettingsSettings } from \"../models/domain/account\";\nimport { Attachment } from \"../models/domain/attachment\";\nimport { Card } from \"../models/domain/card\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport Domain from \"../models/domain/domain-base\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { Field } from \"../models/domain/field\";\nimport { Identity } from \"../models/domain/identity\";\nimport { Login } from \"../models/domain/login\";\nimport { LoginUri } from \"../models/domain/login-uri\";\nimport { Password } from \"../models/domain/password\";\nimport { SecureNote } from \"../models/domain/secure-note\";\nimport { SortedCiphersCache } from \"../models/domain/sorted-ciphers-cache\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { AttachmentRequest } from \"../models/request/attachment.request\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipher-bulk-delete.request\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipher-bulk-move.request\";\nimport { CipherBulkRestoreRequest } from \"../models/request/cipher-bulk-restore.request\";\nimport { CipherBulkShareRequest } from \"../models/request/cipher-bulk-share.request\";\nimport { CipherCollectionsRequest } from \"../models/request/cipher-collections.request\";\nimport { CipherCreateRequest } from \"../models/request/cipher-create.request\";\nimport { CipherPartialRequest } from \"../models/request/cipher-partial.request\";\nimport { CipherShareRequest } from \"../models/request/cipher-share.request\";\nimport { CipherRequest } from \"../models/request/cipher.request\";\nimport { CipherResponse } from \"../models/response/cipher.response\";\nimport { ErrorResponse } from \"../models/response/error.response\";\nimport { AttachmentView } from \"../models/view/attachment.view\";\nimport { CipherView } from \"../models/view/cipher.view\";\nimport { FieldView } from \"../models/view/field.view\";\nimport { PasswordHistoryView } from \"../models/view/password-history.view\";\nimport { View } from \"../models/view/view\";\n\nconst DomainMatchBlacklist = new Map>([\n [\"google.com\", new Set([\"script.google.com\"])],\n]);\n\nexport class CipherService implements CipherServiceAbstraction {\n private sortedCiphersCache: SortedCiphersCache = new SortedCiphersCache(\n this.sortCiphersByLastUsed\n );\n\n constructor(\n private cryptoService: CryptoService,\n private settingsService: SettingsService,\n private apiService: ApiService,\n private fileUploadService: FileUploadService,\n private i18nService: I18nService,\n private searchService: () => SearchService,\n private logService: LogService,\n private stateService: StateService,\n private encryptService: EncryptService\n ) {}\n\n async getDecryptedCipherCache(): Promise {\n const decryptedCiphers = await this.stateService.getDecryptedCiphers();\n return decryptedCiphers;\n }\n\n async setDecryptedCipherCache(value: CipherView[]) {\n await this.stateService.setDecryptedCiphers(value);\n if (this.searchService != null) {\n if (value == null) {\n this.searchService().clearIndex();\n } else {\n this.searchService().indexCiphers();\n }\n }\n }\n\n async clearCache(userId?: string): Promise {\n await this.clearDecryptedCiphersState(userId);\n }\n\n async encrypt(\n model: CipherView,\n key?: SymmetricCryptoKey,\n originalCipher: Cipher = null\n ): Promise {\n // Adjust password history\n if (model.id != null) {\n if (originalCipher == null) {\n originalCipher = await this.get(model.id);\n }\n if (originalCipher != null) {\n const existingCipher = await originalCipher.decrypt();\n model.passwordHistory = existingCipher.passwordHistory || [];\n if (model.type === CipherType.Login && existingCipher.type === CipherType.Login) {\n if (\n existingCipher.login.password != null &&\n existingCipher.login.password !== \"\" &&\n existingCipher.login.password !== model.login.password\n ) {\n const ph = new PasswordHistoryView();\n ph.password = existingCipher.login.password;\n ph.lastUsedDate = model.login.passwordRevisionDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n } else {\n model.login.passwordRevisionDate = existingCipher.login.passwordRevisionDate;\n }\n }\n if (existingCipher.hasFields) {\n const existingHiddenFields = existingCipher.fields.filter(\n (f) =>\n f.type === FieldType.Hidden &&\n f.name != null &&\n f.name !== \"\" &&\n f.value != null &&\n f.value !== \"\"\n );\n const hiddenFields =\n model.fields == null\n ? []\n : model.fields.filter(\n (f) => f.type === FieldType.Hidden && f.name != null && f.name !== \"\"\n );\n existingHiddenFields.forEach((ef) => {\n const matchedField = hiddenFields.find((f) => f.name === ef.name);\n if (matchedField == null || matchedField.value !== ef.value) {\n const ph = new PasswordHistoryView();\n ph.password = ef.name + \": \" + ef.value;\n ph.lastUsedDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n }\n });\n }\n }\n if (model.passwordHistory != null && model.passwordHistory.length === 0) {\n model.passwordHistory = null;\n } else if (model.passwordHistory != null && model.passwordHistory.length > 5) {\n // only save last 5 history\n model.passwordHistory = model.passwordHistory.slice(0, 5);\n }\n }\n\n const cipher = new Cipher();\n cipher.id = model.id;\n cipher.folderId = model.folderId;\n cipher.favorite = model.favorite;\n cipher.organizationId = model.organizationId;\n cipher.type = model.type;\n cipher.collectionIds = model.collectionIds;\n cipher.revisionDate = model.revisionDate;\n cipher.reprompt = model.reprompt;\n cipher.edit = model.edit;\n\n if (key == null && cipher.organizationId != null) {\n key = await this.cryptoService.getOrgKey(cipher.organizationId);\n if (key == null) {\n throw new Error(\"Cannot encrypt cipher for organization. No key.\");\n }\n }\n await Promise.all([\n this.encryptObjProperty(\n model,\n cipher,\n {\n name: null,\n notes: null,\n },\n key\n ),\n this.encryptCipherData(cipher, model, key),\n this.encryptFields(model.fields, key).then((fields) => {\n cipher.fields = fields;\n }),\n this.encryptPasswordHistories(model.passwordHistory, key).then((ph) => {\n cipher.passwordHistory = ph;\n }),\n this.encryptAttachments(model.attachments, key).then((attachments) => {\n cipher.attachments = attachments;\n }),\n ]);\n\n return cipher;\n }\n\n async encryptAttachments(\n attachmentsModel: AttachmentView[],\n key: SymmetricCryptoKey\n ): Promise {\n if (attachmentsModel == null || attachmentsModel.length === 0) {\n return null;\n }\n\n const promises: Promise[] = [];\n const encAttachments: Attachment[] = [];\n attachmentsModel.forEach(async (model) => {\n const attachment = new Attachment();\n attachment.id = model.id;\n attachment.size = model.size;\n attachment.sizeName = model.sizeName;\n attachment.url = model.url;\n const promise = this.encryptObjProperty(\n model,\n attachment,\n {\n fileName: null,\n },\n key\n ).then(async () => {\n if (model.key != null) {\n attachment.key = await this.cryptoService.encrypt(model.key.key, key);\n }\n encAttachments.push(attachment);\n });\n promises.push(promise);\n });\n\n await Promise.all(promises);\n return encAttachments;\n }\n\n async encryptFields(fieldsModel: FieldView[], key: SymmetricCryptoKey): Promise {\n if (!fieldsModel || !fieldsModel.length) {\n return null;\n }\n\n const self = this;\n const encFields: Field[] = [];\n await fieldsModel.reduce(async (promise, field) => {\n await promise;\n const encField = await self.encryptField(field, key);\n encFields.push(encField);\n }, Promise.resolve());\n\n return encFields;\n }\n\n async encryptField(fieldModel: FieldView, key: SymmetricCryptoKey): Promise {\n const field = new Field();\n field.type = fieldModel.type;\n field.linkedId = fieldModel.linkedId;\n // normalize boolean type field values\n if (fieldModel.type === FieldType.Boolean && fieldModel.value !== \"true\") {\n fieldModel.value = \"false\";\n }\n\n await this.encryptObjProperty(\n fieldModel,\n field,\n {\n name: null,\n value: null,\n },\n key\n );\n\n return field;\n }\n\n async encryptPasswordHistories(\n phModels: PasswordHistoryView[],\n key: SymmetricCryptoKey\n ): Promise {\n if (!phModels || !phModels.length) {\n return null;\n }\n\n const self = this;\n const encPhs: Password[] = [];\n await phModels.reduce(async (promise, ph) => {\n await promise;\n const encPh = await self.encryptPasswordHistory(ph, key);\n encPhs.push(encPh);\n }, Promise.resolve());\n\n return encPhs;\n }\n\n async encryptPasswordHistory(\n phModel: PasswordHistoryView,\n key: SymmetricCryptoKey\n ): Promise {\n const ph = new Password();\n ph.lastUsedDate = phModel.lastUsedDate;\n\n await this.encryptObjProperty(\n phModel,\n ph,\n {\n password: null,\n },\n key\n );\n\n return ph;\n }\n\n async get(id: string): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n // eslint-disable-next-line\n if (ciphers == null || !ciphers.hasOwnProperty(id)) {\n return null;\n }\n\n const localData = await this.stateService.getLocalData();\n return new Cipher(ciphers[id], localData ? localData[id] : null);\n }\n\n async getAll(): Promise {\n const localData = await this.stateService.getLocalData();\n const ciphers = await this.stateService.getEncryptedCiphers();\n const response: Cipher[] = [];\n for (const id in ciphers) {\n // eslint-disable-next-line\n if (ciphers.hasOwnProperty(id)) {\n response.push(new Cipher(ciphers[id], localData ? localData[id] : null));\n }\n }\n return response;\n }\n\n @sequentialize(() => \"getAllDecrypted\")\n async getAllDecrypted(): Promise {\n if ((await this.getDecryptedCipherCache()) != null) {\n await this.reindexCiphers();\n return await this.getDecryptedCipherCache();\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const ciphers = await this.getAll();\n const orgKeys = await this.cryptoService.getOrgKeys();\n const userKey = await this.cryptoService.getKeyForUserEncryption();\n\n // Group ciphers by orgId or under 'null' for the user's ciphers\n const grouped = ciphers.reduce((agg, c) => {\n agg[c.organizationId] ??= [];\n agg[c.organizationId].push(c);\n return agg;\n }, {} as Record);\n\n const decCiphers = (\n await Promise.all(\n Object.entries(grouped).map(([orgId, groupedCiphers]) =>\n this.encryptService.decryptItems(groupedCiphers, orgKeys.get(orgId) ?? userKey)\n )\n )\n )\n .flat()\n .sort(this.getLocaleSortingFunction());\n\n await this.setDecryptedCipherCache(decCiphers);\n return decCiphers;\n }\n\n private async reindexCiphers() {\n const userId = await this.stateService.getUserId();\n const reindexRequired =\n this.searchService != null && (this.searchService().indexedEntityId ?? userId) !== userId;\n if (reindexRequired) {\n await this.searchService().indexCiphers(userId, await this.getDecryptedCipherCache());\n }\n }\n\n async getAllDecryptedForGrouping(groupingId: string, folder = true): Promise {\n const ciphers = await this.getAllDecrypted();\n\n return ciphers.filter((cipher) => {\n if (cipher.isDeleted) {\n return false;\n }\n if (folder && cipher.folderId === groupingId) {\n return true;\n } else if (\n !folder &&\n cipher.collectionIds != null &&\n cipher.collectionIds.indexOf(groupingId) > -1\n ) {\n return true;\n }\n\n return false;\n });\n }\n\n async getAllDecryptedForUrl(\n url: string,\n includeOtherTypes?: CipherType[],\n defaultMatch: UriMatchType = null\n ): Promise {\n if (url == null && includeOtherTypes == null) {\n return Promise.resolve([]);\n }\n\n const domain = Utils.getDomain(url);\n const eqDomainsPromise =\n domain == null\n ? Promise.resolve([])\n : firstValueFrom(this.settingsService.settings$).then(\n (settings: AccountSettingsSettings) => {\n let matches: any[] = [];\n settings?.equivalentDomains?.forEach((eqDomain: any) => {\n if (eqDomain.length && eqDomain.indexOf(domain) >= 0) {\n matches = matches.concat(eqDomain);\n }\n });\n\n if (!matches.length) {\n matches.push(domain);\n }\n\n return matches;\n }\n );\n\n const result = await Promise.all([eqDomainsPromise, this.getAllDecrypted()]);\n const matchingDomains = result[0];\n const ciphers = result[1];\n\n if (defaultMatch == null) {\n defaultMatch = await this.stateService.getDefaultUriMatch();\n if (defaultMatch == null) {\n defaultMatch = UriMatchType.Domain;\n }\n }\n\n return ciphers.filter((cipher) => {\n if (cipher.deletedDate != null) {\n return false;\n }\n if (includeOtherTypes != null && includeOtherTypes.indexOf(cipher.type) > -1) {\n return true;\n }\n\n if (url != null && cipher.type === CipherType.Login && cipher.login.uris != null) {\n for (let i = 0; i < cipher.login.uris.length; i++) {\n const u = cipher.login.uris[i];\n if (u.uri == null) {\n continue;\n }\n\n const match = u.match == null ? defaultMatch : u.match;\n switch (match) {\n case UriMatchType.Domain:\n if (domain != null && u.domain != null && matchingDomains.indexOf(u.domain) > -1) {\n if (DomainMatchBlacklist.has(u.domain)) {\n const domainUrlHost = Utils.getHost(url);\n if (!DomainMatchBlacklist.get(u.domain).has(domainUrlHost)) {\n return true;\n }\n } else {\n return true;\n }\n }\n break;\n case UriMatchType.Host: {\n const urlHost = Utils.getHost(url);\n if (urlHost != null && urlHost === Utils.getHost(u.uri)) {\n return true;\n }\n break;\n }\n case UriMatchType.Exact:\n if (url === u.uri) {\n return true;\n }\n break;\n case UriMatchType.StartsWith:\n if (url.startsWith(u.uri)) {\n return true;\n }\n break;\n case UriMatchType.RegularExpression:\n try {\n const regex = new RegExp(u.uri, \"i\");\n if (regex.test(url)) {\n return true;\n }\n } catch (e) {\n this.logService.error(e);\n }\n break;\n case UriMatchType.Never:\n default:\n break;\n }\n }\n }\n\n return false;\n });\n }\n\n async getAllFromApiForOrganization(organizationId: string): Promise {\n const response = await this.apiService.getCiphersOrganization(organizationId);\n if (response?.data == null || response.data.length < 1) {\n return [];\n }\n\n const ciphers = response.data.map((cr) => new Cipher(new CipherData(cr)));\n const key = await this.cryptoService.getOrgKey(organizationId);\n const decCiphers = await this.encryptService.decryptItems(ciphers, key);\n\n decCiphers.sort(this.getLocaleSortingFunction());\n return decCiphers;\n }\n\n async getLastUsedForUrl(url: string, autofillOnPageLoad = false): Promise {\n return this.getCipherForUrl(url, true, false, autofillOnPageLoad);\n }\n\n async getLastLaunchedForUrl(url: string, autofillOnPageLoad = false): Promise {\n return this.getCipherForUrl(url, false, true, autofillOnPageLoad);\n }\n\n async getNextCipherForUrl(url: string): Promise {\n return this.getCipherForUrl(url, false, false, false);\n }\n\n updateLastUsedIndexForUrl(url: string) {\n this.sortedCiphersCache.updateLastUsedIndex(url);\n }\n\n async updateLastUsedDate(id: string): Promise {\n let ciphersLocalData = await this.stateService.getLocalData();\n if (!ciphersLocalData) {\n ciphersLocalData = {};\n }\n\n if (ciphersLocalData[id]) {\n ciphersLocalData[id].lastUsedDate = new Date().getTime();\n } else {\n ciphersLocalData[id] = {\n lastUsedDate: new Date().getTime(),\n };\n }\n\n await this.stateService.setLocalData(ciphersLocalData);\n\n const decryptedCipherCache = await this.stateService.getDecryptedCiphers();\n if (!decryptedCipherCache) {\n return;\n }\n\n for (let i = 0; i < decryptedCipherCache.length; i++) {\n const cached = decryptedCipherCache[i];\n if (cached.id === id) {\n cached.localData = ciphersLocalData[id];\n break;\n }\n }\n await this.stateService.setDecryptedCiphers(decryptedCipherCache);\n }\n\n async updateLastLaunchedDate(id: string): Promise {\n let ciphersLocalData = await this.stateService.getLocalData();\n if (!ciphersLocalData) {\n ciphersLocalData = {};\n }\n\n if (ciphersLocalData[id]) {\n ciphersLocalData[id].lastLaunched = new Date().getTime();\n } else {\n ciphersLocalData[id] = {\n lastUsedDate: new Date().getTime(),\n };\n }\n\n await this.stateService.setLocalData(ciphersLocalData);\n\n const decryptedCipherCache = await this.stateService.getDecryptedCiphers();\n if (!decryptedCipherCache) {\n return;\n }\n\n for (let i = 0; i < decryptedCipherCache.length; i++) {\n const cached = decryptedCipherCache[i];\n if (cached.id === id) {\n cached.localData = ciphersLocalData[id];\n break;\n }\n }\n await this.stateService.setDecryptedCiphers(decryptedCipherCache);\n }\n\n async saveNeverDomain(domain: string): Promise {\n if (domain == null) {\n return;\n }\n\n let domains = await this.stateService.getNeverDomains();\n if (!domains) {\n domains = {};\n }\n domains[domain] = null;\n await this.stateService.setNeverDomains(domains);\n }\n\n async createWithServer(cipher: Cipher): Promise {\n let response: CipherResponse;\n if (cipher.collectionIds != null) {\n const request = new CipherCreateRequest(cipher);\n response = await this.apiService.postCipherCreate(request);\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.postCipher(request);\n }\n cipher.id = response.id;\n\n const data = new CipherData(response, cipher.collectionIds);\n await this.upsert(data);\n }\n\n async updateWithServer(cipher: Cipher): Promise {\n let response: CipherResponse;\n if (cipher.edit) {\n const request = new CipherRequest(cipher);\n response = await this.apiService.putCipher(cipher.id, request);\n } else {\n const request = new CipherPartialRequest(cipher);\n response = await this.apiService.putPartialCipher(cipher.id, request);\n }\n\n const data = new CipherData(response, cipher.collectionIds);\n await this.upsert(data);\n }\n\n async shareWithServer(\n cipher: CipherView,\n organizationId: string,\n collectionIds: string[]\n ): Promise {\n const attachmentPromises: Promise[] = [];\n if (cipher.attachments != null) {\n cipher.attachments.forEach((attachment) => {\n if (attachment.key == null) {\n attachmentPromises.push(\n this.shareAttachmentWithServer(attachment, cipher.id, organizationId)\n );\n }\n });\n }\n await Promise.all(attachmentPromises);\n\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n const encCipher = await this.encrypt(cipher);\n const request = new CipherShareRequest(encCipher);\n const response = await this.apiService.putShareCipher(cipher.id, request);\n const data = new CipherData(response, collectionIds);\n await this.upsert(data);\n }\n\n async shareManyWithServer(\n ciphers: CipherView[],\n organizationId: string,\n collectionIds: string[]\n ): Promise {\n const promises: Promise[] = [];\n const encCiphers: Cipher[] = [];\n for (const cipher of ciphers) {\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n promises.push(\n this.encrypt(cipher).then((c) => {\n encCiphers.push(c);\n })\n );\n }\n await Promise.all(promises);\n const request = new CipherBulkShareRequest(encCiphers, collectionIds);\n try {\n await this.apiService.putShareCiphers(request);\n } catch (e) {\n for (const cipher of ciphers) {\n cipher.organizationId = null;\n cipher.collectionIds = null;\n }\n throw e;\n }\n await this.upsert(encCiphers.map((c) => c.toCipherData()));\n }\n\n saveAttachmentWithServer(cipher: Cipher, unencryptedFile: any, admin = false): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsArrayBuffer(unencryptedFile);\n reader.onload = async (evt: any) => {\n try {\n const cData = await this.saveAttachmentRawWithServer(\n cipher,\n unencryptedFile.name,\n evt.target.result,\n admin\n );\n resolve(cData);\n } catch (e) {\n reject(e);\n }\n };\n reader.onerror = () => {\n reject(\"Error reading file.\");\n };\n });\n }\n\n async saveAttachmentRawWithServer(\n cipher: Cipher,\n filename: string,\n data: ArrayBuffer,\n admin = false\n ): Promise {\n const key = await this.cryptoService.getOrgKey(cipher.organizationId);\n const encFileName = await this.cryptoService.encrypt(filename, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(data, dataEncKey[0]);\n\n const request: AttachmentRequest = {\n key: dataEncKey[1].encryptedString,\n fileName: encFileName.encryptedString,\n fileSize: encData.buffer.byteLength,\n adminRequest: admin,\n };\n\n let response: CipherResponse;\n try {\n const uploadDataResponse = await this.apiService.postCipherAttachment(cipher.id, request);\n response = admin ? uploadDataResponse.cipherMiniResponse : uploadDataResponse.cipherResponse;\n await this.fileUploadService.uploadCipherAttachment(\n admin,\n uploadDataResponse,\n encFileName,\n encData\n );\n } catch (e) {\n if (\n (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) ||\n (e as ErrorResponse).statusCode === 405\n ) {\n response = await this.legacyServerAttachmentFileUpload(\n admin,\n cipher.id,\n encFileName,\n encData,\n dataEncKey[1]\n );\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n\n const cData = new CipherData(response, cipher.collectionIds);\n if (!admin) {\n await this.upsert(cData);\n }\n return new Cipher(cData);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async legacyServerAttachmentFileUpload(\n admin: boolean,\n cipherId: string,\n encFileName: EncString,\n encData: EncArrayBuffer,\n key: EncString\n ) {\n const fd = new FormData();\n try {\n const blob = new Blob([encData.buffer], { type: \"application/octet-stream\" });\n fd.append(\"key\", key.encryptedString);\n fd.append(\"data\", blob, encFileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\"key\", key.encryptedString);\n fd.append(\n \"data\",\n Buffer.from(encData.buffer) as any,\n {\n filepath: encFileName.encryptedString,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n\n let response: CipherResponse;\n try {\n if (admin) {\n response = await this.apiService.postCipherAttachmentAdminLegacy(cipherId, fd);\n } else {\n response = await this.apiService.postCipherAttachmentLegacy(cipherId, fd);\n }\n } catch (e) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n }\n\n return response;\n }\n\n async saveCollectionsWithServer(cipher: Cipher): Promise {\n const request = new CipherCollectionsRequest(cipher.collectionIds);\n await this.apiService.putCipherCollections(cipher.id, request);\n const data = cipher.toCipherData();\n await this.upsert(data);\n }\n\n async upsert(cipher: CipherData | CipherData[]): Promise {\n let ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n ciphers = {};\n }\n\n if (cipher instanceof CipherData) {\n const c = cipher as CipherData;\n ciphers[c.id] = c;\n } else {\n (cipher as CipherData[]).forEach((c) => {\n ciphers[c.id] = c;\n });\n }\n\n await this.replace(ciphers);\n }\n\n async replace(ciphers: { [id: string]: CipherData }): Promise {\n await this.clearDecryptedCiphersState();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async clear(userId?: string): Promise {\n await this.clearEncryptedCiphersState(userId);\n await this.clearCache(userId);\n }\n\n async moveManyWithServer(ids: string[], folderId: string): Promise {\n await this.apiService.putMoveCiphers(new CipherBulkMoveRequest(ids, folderId));\n\n let ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n ciphers = {};\n }\n\n ids.forEach((id) => {\n // eslint-disable-next-line\n if (ciphers.hasOwnProperty(id)) {\n ciphers[id].folderId = folderId;\n }\n });\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async delete(id: string | string[]): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n if (ciphers[id] == null) {\n return;\n }\n delete ciphers[id];\n } else {\n (id as string[]).forEach((i) => {\n delete ciphers[i];\n });\n }\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteCipher(id);\n await this.delete(id);\n }\n\n async deleteManyWithServer(ids: string[]): Promise {\n await this.apiService.deleteManyCiphers(new CipherBulkDeleteRequest(ids));\n await this.delete(ids);\n }\n\n async deleteAttachment(id: string, attachmentId: string): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n\n // eslint-disable-next-line\n if (ciphers == null || !ciphers.hasOwnProperty(id) || ciphers[id].attachments == null) {\n return;\n }\n\n for (let i = 0; i < ciphers[id].attachments.length; i++) {\n if (ciphers[id].attachments[i].id === attachmentId) {\n ciphers[id].attachments.splice(i, 1);\n }\n }\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async deleteAttachmentWithServer(id: string, attachmentId: string): Promise {\n try {\n await this.apiService.deleteCipherAttachment(id, attachmentId);\n } catch (e) {\n return Promise.reject((e as ErrorResponse).getSingleMessage());\n }\n await this.deleteAttachment(id, attachmentId);\n }\n\n sortCiphersByLastUsed(a: CipherView, b: CipherView): number {\n const aLastUsed =\n a.localData && a.localData.lastUsedDate ? (a.localData.lastUsedDate as number) : null;\n const bLastUsed =\n b.localData && b.localData.lastUsedDate ? (b.localData.lastUsedDate as number) : null;\n\n const bothNotNull = aLastUsed != null && bLastUsed != null;\n if (bothNotNull && aLastUsed < bLastUsed) {\n return 1;\n }\n if (aLastUsed != null && bLastUsed == null) {\n return -1;\n }\n\n if (bothNotNull && aLastUsed > bLastUsed) {\n return -1;\n }\n if (bLastUsed != null && aLastUsed == null) {\n return 1;\n }\n\n return 0;\n }\n\n sortCiphersByLastUsedThenName(a: CipherView, b: CipherView): number {\n const result = this.sortCiphersByLastUsed(a, b);\n if (result !== 0) {\n return result;\n }\n\n return this.getLocaleSortingFunction()(a, b);\n }\n\n getLocaleSortingFunction(): (a: CipherView, b: CipherView) => number {\n return (a, b) => {\n let aName = a.name;\n let bName = b.name;\n\n if (aName == null && bName != null) {\n return -1;\n }\n if (aName != null && bName == null) {\n return 1;\n }\n if (aName == null && bName == null) {\n return 0;\n }\n\n const result = this.i18nService.collator\n ? this.i18nService.collator.compare(aName, bName)\n : aName.localeCompare(bName);\n\n if (result !== 0 || a.type !== CipherType.Login || b.type !== CipherType.Login) {\n return result;\n }\n\n if (a.login.username != null) {\n aName += a.login.username;\n }\n\n if (b.login.username != null) {\n bName += b.login.username;\n }\n\n return this.i18nService.collator\n ? this.i18nService.collator.compare(aName, bName)\n : aName.localeCompare(bName);\n };\n }\n\n async softDelete(id: string | string[]): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n return;\n }\n\n const setDeletedDate = (cipherId: string) => {\n if (ciphers[cipherId] == null) {\n return;\n }\n ciphers[cipherId].deletedDate = new Date().toISOString();\n };\n\n if (typeof id === \"string\") {\n setDeletedDate(id);\n } else {\n (id as string[]).forEach(setDeletedDate);\n }\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async softDeleteWithServer(id: string): Promise {\n await this.apiService.putDeleteCipher(id);\n await this.softDelete(id);\n }\n\n async softDeleteManyWithServer(ids: string[]): Promise {\n await this.apiService.putDeleteManyCiphers(new CipherBulkDeleteRequest(ids));\n await this.softDelete(ids);\n }\n\n async restore(\n cipher: { id: string; revisionDate: string } | { id: string; revisionDate: string }[]\n ) {\n const ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n return;\n }\n\n const clearDeletedDate = (c: { id: string; revisionDate: string }) => {\n if (ciphers[c.id] == null) {\n return;\n }\n ciphers[c.id].deletedDate = null;\n ciphers[c.id].revisionDate = c.revisionDate;\n };\n\n if (cipher.constructor.name === Array.name) {\n (cipher as { id: string; revisionDate: string }[]).forEach(clearDeletedDate);\n } else {\n clearDeletedDate(cipher as { id: string; revisionDate: string });\n }\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async restoreWithServer(id: string): Promise {\n const response = await this.apiService.putRestoreCipher(id);\n await this.restore({ id: id, revisionDate: response.revisionDate });\n }\n\n async restoreManyWithServer(ids: string[]): Promise {\n const response = await this.apiService.putRestoreManyCiphers(new CipherBulkRestoreRequest(ids));\n const restores: { id: string; revisionDate: string }[] = [];\n for (const cipher of response.data) {\n restores.push({ id: cipher.id, revisionDate: cipher.revisionDate });\n }\n await this.restore(restores);\n }\n\n // Helpers\n\n private async shareAttachmentWithServer(\n attachmentView: AttachmentView,\n cipherId: string,\n organizationId: string\n ): Promise {\n const attachmentResponse = await this.apiService.nativeFetch(\n new Request(attachmentView.url, { cache: \"no-store\" })\n );\n if (attachmentResponse.status !== 200) {\n throw Error(\"Failed to download attachment: \" + attachmentResponse.status.toString());\n }\n\n const encBuf = await EncArrayBuffer.fromResponse(attachmentResponse);\n const decBuf = await this.cryptoService.decryptFromBytes(encBuf, null);\n const key = await this.cryptoService.getOrgKey(organizationId);\n const encFileName = await this.cryptoService.encrypt(attachmentView.fileName, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(decBuf, dataEncKey[0]);\n\n const fd = new FormData();\n try {\n const blob = new Blob([encData.buffer], { type: \"application/octet-stream\" });\n fd.append(\"key\", dataEncKey[1].encryptedString);\n fd.append(\"data\", blob, encFileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\"key\", dataEncKey[1].encryptedString);\n fd.append(\n \"data\",\n Buffer.from(encData.buffer) as any,\n {\n filepath: encFileName.encryptedString,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n\n try {\n await this.apiService.postShareCipherAttachment(\n cipherId,\n attachmentView.id,\n fd,\n organizationId\n );\n } catch (e) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n }\n }\n\n private async encryptObjProperty(\n model: V,\n obj: D,\n map: any,\n key: SymmetricCryptoKey\n ): Promise {\n const promises = [];\n const self = this;\n\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n (function (theProp, theObj) {\n const p = Promise.resolve()\n .then(() => {\n const modelProp = (model as any)[map[theProp] || theProp];\n if (modelProp && modelProp !== \"\") {\n return self.cryptoService.encrypt(modelProp, key);\n }\n return null;\n })\n .then((val: EncString) => {\n (theObj as any)[theProp] = val;\n });\n promises.push(p);\n })(prop, obj);\n }\n\n await Promise.all(promises);\n }\n\n private async encryptCipherData(cipher: Cipher, model: CipherView, key: SymmetricCryptoKey) {\n switch (cipher.type) {\n case CipherType.Login:\n cipher.login = new Login();\n cipher.login.passwordRevisionDate = model.login.passwordRevisionDate;\n cipher.login.autofillOnPageLoad = model.login.autofillOnPageLoad;\n await this.encryptObjProperty(\n model.login,\n cipher.login,\n {\n username: null,\n password: null,\n totp: null,\n },\n key\n );\n\n if (model.login.uris != null) {\n cipher.login.uris = [];\n for (let i = 0; i < model.login.uris.length; i++) {\n const loginUri = new LoginUri();\n loginUri.match = model.login.uris[i].match;\n await this.encryptObjProperty(\n model.login.uris[i],\n loginUri,\n {\n uri: null,\n },\n key\n );\n cipher.login.uris.push(loginUri);\n }\n }\n return;\n case CipherType.SecureNote:\n cipher.secureNote = new SecureNote();\n cipher.secureNote.type = model.secureNote.type;\n return;\n case CipherType.Card:\n cipher.card = new Card();\n await this.encryptObjProperty(\n model.card,\n cipher.card,\n {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n },\n key\n );\n return;\n case CipherType.Identity:\n cipher.identity = new Identity();\n await this.encryptObjProperty(\n model.identity,\n cipher.identity,\n {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n },\n key\n );\n return;\n default:\n throw new Error(\"Unknown cipher type.\");\n }\n }\n\n private async getCipherForUrl(\n url: string,\n lastUsed: boolean,\n lastLaunched: boolean,\n autofillOnPageLoad: boolean\n ): Promise {\n const cacheKey = autofillOnPageLoad ? \"autofillOnPageLoad-\" + url : url;\n\n if (!this.sortedCiphersCache.isCached(cacheKey)) {\n let ciphers = await this.getAllDecryptedForUrl(url);\n if (!ciphers) {\n return null;\n }\n\n if (autofillOnPageLoad) {\n const autofillOnPageLoadDefault = await this.stateService.getAutoFillOnPageLoadDefault();\n ciphers = ciphers.filter(\n (cipher) =>\n cipher.login.autofillOnPageLoad ||\n (cipher.login.autofillOnPageLoad == null && autofillOnPageLoadDefault !== false)\n );\n if (ciphers.length === 0) {\n return null;\n }\n }\n\n this.sortedCiphersCache.addCiphers(cacheKey, ciphers);\n }\n\n if (lastLaunched) {\n return this.sortedCiphersCache.getLastLaunched(cacheKey);\n } else if (lastUsed) {\n return this.sortedCiphersCache.getLastUsed(cacheKey);\n } else {\n return this.sortedCiphersCache.getNext(cacheKey);\n }\n }\n\n private async clearEncryptedCiphersState(userId?: string) {\n await this.stateService.setEncryptedCiphers(null, { userId: userId });\n }\n\n private async clearDecryptedCiphersState(userId?: string) {\n await this.stateService.setDecryptedCiphers(null, { userId: userId });\n this.clearSortedCiphers();\n }\n\n private clearSortedCiphers() {\n this.sortedCiphersCache.clear();\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class ServerConfigResponse extends BaseResponse {\n version: string;\n gitHash: string;\n server: ThirdPartyServerConfigResponse;\n environment: EnvironmentServerConfigResponse;\n\n constructor(response: any) {\n super(response);\n\n if (response == null) {\n return;\n }\n\n this.version = this.getResponseProperty(\"Version\");\n this.gitHash = this.getResponseProperty(\"GitHash\");\n this.server = new ThirdPartyServerConfigResponse(this.getResponseProperty(\"Server\"));\n this.environment = new EnvironmentServerConfigResponse(this.getResponseProperty(\"Environment\"));\n }\n}\n\nexport class EnvironmentServerConfigResponse extends BaseResponse {\n vault: string;\n api: string;\n identity: string;\n notifications: string;\n sso: string;\n\n constructor(data: any = null) {\n super(data);\n\n if (data == null) {\n return;\n }\n\n this.vault = this.getResponseProperty(\"Vault\");\n this.api = this.getResponseProperty(\"Api\");\n this.identity = this.getResponseProperty(\"Identity\");\n this.notifications = this.getResponseProperty(\"Notifications\");\n this.sso = this.getResponseProperty(\"Sso\");\n }\n}\n\nexport class ThirdPartyServerConfigResponse extends BaseResponse {\n name: string;\n url: string;\n\n constructor(data: any = null) {\n super(data);\n\n if (data == null) {\n return;\n }\n\n this.name = this.getResponseProperty(\"Name\");\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import {\n ServerConfigData,\n ThirdPartyServerConfigData,\n EnvironmentServerConfigData,\n} from \"../../models/data/server-config.data\";\n\nconst dayInMilliseconds = 24 * 3600 * 1000;\nconst eighteenHoursInMilliseconds = 18 * 3600 * 1000;\n\nexport class ServerConfig {\n version: string;\n gitHash: string;\n server?: ThirdPartyServerConfigData;\n environment?: EnvironmentServerConfigData;\n utcDate: Date;\n\n constructor(serverConfigData: ServerConfigData) {\n this.version = serverConfigData.version;\n this.gitHash = serverConfigData.gitHash;\n this.server = serverConfigData.server;\n this.utcDate = new Date(serverConfigData.utcDate);\n this.environment = serverConfigData.environment;\n\n if (this.server?.name == null && this.server?.url == null) {\n this.server = null;\n }\n }\n\n private getAgeInMilliseconds(): number {\n return new Date().getTime() - this.utcDate?.getTime();\n }\n\n isValid(): boolean {\n return this.getAgeInMilliseconds() <= dayInMilliseconds;\n }\n\n expiresSoon(): boolean {\n return this.getAgeInMilliseconds() >= eighteenHoursInMilliseconds;\n }\n}\n","// EFF's Long Wordlist from https://www.eff.org/dice\nexport const EFFLongWordList = [\n \"abacus\",\n \"abdomen\",\n \"abdominal\",\n \"abide\",\n \"abiding\",\n \"ability\",\n \"ablaze\",\n \"able\",\n \"abnormal\",\n \"abrasion\",\n \"abrasive\",\n \"abreast\",\n \"abridge\",\n \"abroad\",\n \"abruptly\",\n \"absence\",\n \"absentee\",\n \"absently\",\n \"absinthe\",\n \"absolute\",\n \"absolve\",\n \"abstain\",\n \"abstract\",\n \"absurd\",\n \"accent\",\n \"acclaim\",\n \"acclimate\",\n \"accompany\",\n \"account\",\n \"accuracy\",\n \"accurate\",\n \"accustom\",\n \"acetone\",\n \"achiness\",\n \"aching\",\n \"acid\",\n \"acorn\",\n \"acquaint\",\n \"acquire\",\n \"acre\",\n \"acrobat\",\n \"acronym\",\n \"acting\",\n \"action\",\n \"activate\",\n \"activator\",\n \"active\",\n \"activism\",\n \"activist\",\n \"activity\",\n \"actress\",\n \"acts\",\n \"acutely\",\n \"acuteness\",\n \"aeration\",\n \"aerobics\",\n \"aerosol\",\n \"aerospace\",\n \"afar\",\n \"affair\",\n \"affected\",\n \"affecting\",\n \"affection\",\n \"affidavit\",\n \"affiliate\",\n \"affirm\",\n \"affix\",\n \"afflicted\",\n \"affluent\",\n \"afford\",\n \"affront\",\n \"aflame\",\n \"afloat\",\n \"aflutter\",\n \"afoot\",\n \"afraid\",\n \"afterglow\",\n \"afterlife\",\n \"aftermath\",\n \"aftermost\",\n \"afternoon\",\n \"aged\",\n \"ageless\",\n \"agency\",\n \"agenda\",\n \"agent\",\n \"aggregate\",\n \"aghast\",\n \"agile\",\n \"agility\",\n \"aging\",\n \"agnostic\",\n \"agonize\",\n \"agonizing\",\n \"agony\",\n \"agreeable\",\n \"agreeably\",\n \"agreed\",\n \"agreeing\",\n \"agreement\",\n \"aground\",\n \"ahead\",\n \"ahoy\",\n \"aide\",\n \"aids\",\n \"aim\",\n \"ajar\",\n \"alabaster\",\n \"alarm\",\n \"albatross\",\n \"album\",\n \"alfalfa\",\n \"algebra\",\n \"algorithm\",\n \"alias\",\n \"alibi\",\n \"alienable\",\n \"alienate\",\n \"aliens\",\n \"alike\",\n \"alive\",\n \"alkaline\",\n \"alkalize\",\n \"almanac\",\n \"almighty\",\n \"almost\",\n \"aloe\",\n \"aloft\",\n \"aloha\",\n \"alone\",\n \"alongside\",\n \"aloof\",\n \"alphabet\",\n \"alright\",\n \"although\",\n \"altitude\",\n \"alto\",\n \"aluminum\",\n \"alumni\",\n \"always\",\n \"amaretto\",\n \"amaze\",\n \"amazingly\",\n \"amber\",\n \"ambiance\",\n \"ambiguity\",\n \"ambiguous\",\n \"ambition\",\n \"ambitious\",\n \"ambulance\",\n \"ambush\",\n \"amendable\",\n \"amendment\",\n \"amends\",\n \"amenity\",\n \"amiable\",\n \"amicably\",\n \"amid\",\n \"amigo\",\n \"amino\",\n \"amiss\",\n \"ammonia\",\n \"ammonium\",\n \"amnesty\",\n \"amniotic\",\n \"among\",\n \"amount\",\n \"amperage\",\n \"ample\",\n \"amplifier\",\n \"amplify\",\n \"amply\",\n \"amuck\",\n \"amulet\",\n \"amusable\",\n \"amused\",\n \"amusement\",\n \"amuser\",\n \"amusing\",\n \"anaconda\",\n \"anaerobic\",\n \"anagram\",\n \"anatomist\",\n \"anatomy\",\n \"anchor\",\n \"anchovy\",\n \"ancient\",\n \"android\",\n \"anemia\",\n \"anemic\",\n \"aneurism\",\n \"anew\",\n \"angelfish\",\n \"angelic\",\n \"anger\",\n \"angled\",\n \"angler\",\n \"angles\",\n \"angling\",\n \"angrily\",\n \"angriness\",\n \"anguished\",\n \"angular\",\n \"animal\",\n \"animate\",\n \"animating\",\n \"animation\",\n \"animator\",\n \"anime\",\n \"animosity\",\n \"ankle\",\n \"annex\",\n \"annotate\",\n \"announcer\",\n \"annoying\",\n \"annually\",\n \"annuity\",\n \"anointer\",\n \"another\",\n \"answering\",\n \"antacid\",\n \"antarctic\",\n \"anteater\",\n \"antelope\",\n \"antennae\",\n \"anthem\",\n \"anthill\",\n \"anthology\",\n \"antibody\",\n \"antics\",\n \"antidote\",\n \"antihero\",\n \"antiquely\",\n \"antiques\",\n \"antiquity\",\n \"antirust\",\n \"antitoxic\",\n \"antitrust\",\n \"antiviral\",\n \"antivirus\",\n \"antler\",\n \"antonym\",\n \"antsy\",\n \"anvil\",\n \"anybody\",\n \"anyhow\",\n \"anymore\",\n \"anyone\",\n \"anyplace\",\n \"anything\",\n \"anytime\",\n \"anyway\",\n \"anywhere\",\n \"aorta\",\n \"apache\",\n \"apostle\",\n \"appealing\",\n \"appear\",\n \"appease\",\n \"appeasing\",\n \"appendage\",\n \"appendix\",\n \"appetite\",\n \"appetizer\",\n \"applaud\",\n \"applause\",\n \"apple\",\n \"appliance\",\n \"applicant\",\n \"applied\",\n \"apply\",\n \"appointee\",\n \"appraisal\",\n \"appraiser\",\n \"apprehend\",\n \"approach\",\n \"approval\",\n \"approve\",\n \"apricot\",\n \"april\",\n \"apron\",\n \"aptitude\",\n \"aptly\",\n \"aqua\",\n \"aqueduct\",\n \"arbitrary\",\n \"arbitrate\",\n \"ardently\",\n \"area\",\n \"arena\",\n \"arguable\",\n \"arguably\",\n \"argue\",\n \"arise\",\n \"armadillo\",\n \"armband\",\n \"armchair\",\n \"armed\",\n \"armful\",\n \"armhole\",\n \"arming\",\n \"armless\",\n \"armoire\",\n \"armored\",\n \"armory\",\n \"armrest\",\n \"army\",\n \"aroma\",\n \"arose\",\n \"around\",\n \"arousal\",\n \"arrange\",\n \"array\",\n \"arrest\",\n \"arrival\",\n \"arrive\",\n \"arrogance\",\n \"arrogant\",\n \"arson\",\n \"art\",\n \"ascend\",\n \"ascension\",\n \"ascent\",\n \"ascertain\",\n \"ashamed\",\n \"ashen\",\n \"ashes\",\n \"ashy\",\n \"aside\",\n \"askew\",\n \"asleep\",\n \"asparagus\",\n \"aspect\",\n \"aspirate\",\n \"aspire\",\n \"aspirin\",\n \"astonish\",\n \"astound\",\n \"astride\",\n \"astrology\",\n \"astronaut\",\n \"astronomy\",\n \"astute\",\n \"atlantic\",\n \"atlas\",\n \"atom\",\n \"atonable\",\n \"atop\",\n \"atrium\",\n \"atrocious\",\n \"atrophy\",\n \"attach\",\n \"attain\",\n \"attempt\",\n \"attendant\",\n \"attendee\",\n \"attention\",\n \"attentive\",\n \"attest\",\n \"attic\",\n \"attire\",\n \"attitude\",\n \"attractor\",\n \"attribute\",\n \"atypical\",\n \"auction\",\n \"audacious\",\n \"audacity\",\n \"audible\",\n \"audibly\",\n \"audience\",\n \"audio\",\n \"audition\",\n \"augmented\",\n \"august\",\n \"authentic\",\n \"author\",\n \"autism\",\n \"autistic\",\n \"autograph\",\n \"automaker\",\n \"automated\",\n \"automatic\",\n \"autopilot\",\n \"available\",\n \"avalanche\",\n \"avatar\",\n \"avenge\",\n \"avenging\",\n \"avenue\",\n \"average\",\n \"aversion\",\n \"avert\",\n \"aviation\",\n \"aviator\",\n \"avid\",\n \"avoid\",\n \"await\",\n \"awaken\",\n \"award\",\n \"aware\",\n \"awhile\",\n \"awkward\",\n \"awning\",\n \"awoke\",\n \"awry\",\n \"axis\",\n \"babble\",\n \"babbling\",\n \"babied\",\n \"baboon\",\n \"backache\",\n \"backboard\",\n \"backboned\",\n \"backdrop\",\n \"backed\",\n \"backer\",\n \"backfield\",\n \"backfire\",\n \"backhand\",\n \"backing\",\n \"backlands\",\n \"backlash\",\n \"backless\",\n \"backlight\",\n \"backlit\",\n \"backlog\",\n \"backpack\",\n \"backpedal\",\n \"backrest\",\n \"backroom\",\n \"backshift\",\n \"backside\",\n \"backslid\",\n \"backspace\",\n \"backspin\",\n \"backstab\",\n \"backstage\",\n \"backtalk\",\n \"backtrack\",\n \"backup\",\n \"backward\",\n \"backwash\",\n \"backwater\",\n \"backyard\",\n \"bacon\",\n \"bacteria\",\n \"bacterium\",\n \"badass\",\n \"badge\",\n \"badland\",\n \"badly\",\n \"badness\",\n \"baffle\",\n \"baffling\",\n \"bagel\",\n \"bagful\",\n \"baggage\",\n \"bagged\",\n \"baggie\",\n \"bagginess\",\n \"bagging\",\n \"baggy\",\n \"bagpipe\",\n \"baguette\",\n \"baked\",\n \"bakery\",\n \"bakeshop\",\n \"baking\",\n \"balance\",\n \"balancing\",\n \"balcony\",\n \"balmy\",\n \"balsamic\",\n \"bamboo\",\n \"banana\",\n \"banish\",\n \"banister\",\n \"banjo\",\n \"bankable\",\n \"bankbook\",\n \"banked\",\n \"banker\",\n \"banking\",\n \"banknote\",\n \"bankroll\",\n \"banner\",\n \"bannister\",\n \"banshee\",\n \"banter\",\n \"barbecue\",\n \"barbed\",\n \"barbell\",\n \"barber\",\n \"barcode\",\n \"barge\",\n \"bargraph\",\n \"barista\",\n \"baritone\",\n \"barley\",\n \"barmaid\",\n \"barman\",\n \"barn\",\n \"barometer\",\n \"barrack\",\n \"barracuda\",\n \"barrel\",\n \"barrette\",\n \"barricade\",\n \"barrier\",\n \"barstool\",\n \"bartender\",\n \"barterer\",\n \"bash\",\n \"basically\",\n \"basics\",\n \"basil\",\n \"basin\",\n \"basis\",\n \"basket\",\n \"batboy\",\n \"batch\",\n \"bath\",\n \"baton\",\n \"bats\",\n \"battalion\",\n \"battered\",\n \"battering\",\n \"battery\",\n \"batting\",\n \"battle\",\n \"bauble\",\n \"bazooka\",\n \"blabber\",\n \"bladder\",\n \"blade\",\n \"blah\",\n \"blame\",\n \"blaming\",\n \"blanching\",\n \"blandness\",\n \"blank\",\n \"blaspheme\",\n \"blasphemy\",\n \"blast\",\n \"blatancy\",\n \"blatantly\",\n \"blazer\",\n \"blazing\",\n \"bleach\",\n \"bleak\",\n \"bleep\",\n \"blemish\",\n \"blend\",\n \"bless\",\n \"blighted\",\n \"blimp\",\n \"bling\",\n \"blinked\",\n \"blinker\",\n \"blinking\",\n \"blinks\",\n \"blip\",\n \"blissful\",\n \"blitz\",\n \"blizzard\",\n \"bloated\",\n \"bloating\",\n \"blob\",\n \"blog\",\n \"bloomers\",\n \"blooming\",\n \"blooper\",\n \"blot\",\n \"blouse\",\n \"blubber\",\n \"bluff\",\n \"bluish\",\n \"blunderer\",\n \"blunt\",\n \"blurb\",\n \"blurred\",\n \"blurry\",\n \"blurt\",\n \"blush\",\n \"blustery\",\n \"boaster\",\n \"boastful\",\n \"boasting\",\n \"boat\",\n \"bobbed\",\n \"bobbing\",\n \"bobble\",\n \"bobcat\",\n \"bobsled\",\n \"bobtail\",\n \"bodacious\",\n \"body\",\n \"bogged\",\n \"boggle\",\n \"bogus\",\n \"boil\",\n \"bok\",\n \"bolster\",\n \"bolt\",\n \"bonanza\",\n \"bonded\",\n \"bonding\",\n \"bondless\",\n \"boned\",\n \"bonehead\",\n \"boneless\",\n \"bonelike\",\n \"boney\",\n \"bonfire\",\n \"bonnet\",\n \"bonsai\",\n \"bonus\",\n \"bony\",\n \"boogeyman\",\n \"boogieman\",\n \"book\",\n \"boondocks\",\n \"booted\",\n \"booth\",\n \"bootie\",\n \"booting\",\n \"bootlace\",\n \"bootleg\",\n \"boots\",\n \"boozy\",\n \"borax\",\n \"boring\",\n \"borough\",\n \"borrower\",\n \"borrowing\",\n \"boss\",\n \"botanical\",\n \"botanist\",\n \"botany\",\n \"botch\",\n \"both\",\n \"bottle\",\n \"bottling\",\n \"bottom\",\n \"bounce\",\n \"bouncing\",\n \"bouncy\",\n \"bounding\",\n \"boundless\",\n \"bountiful\",\n \"bovine\",\n \"boxcar\",\n \"boxer\",\n \"boxing\",\n \"boxlike\",\n \"boxy\",\n \"breach\",\n \"breath\",\n \"breeches\",\n \"breeching\",\n \"breeder\",\n \"breeding\",\n \"breeze\",\n \"breezy\",\n \"brethren\",\n \"brewery\",\n \"brewing\",\n \"briar\",\n \"bribe\",\n \"brick\",\n \"bride\",\n \"bridged\",\n \"brigade\",\n \"bright\",\n \"brilliant\",\n \"brim\",\n \"bring\",\n \"brink\",\n \"brisket\",\n \"briskly\",\n \"briskness\",\n \"bristle\",\n \"brittle\",\n \"broadband\",\n \"broadcast\",\n \"broaden\",\n \"broadly\",\n \"broadness\",\n \"broadside\",\n \"broadways\",\n \"broiler\",\n \"broiling\",\n \"broken\",\n \"broker\",\n \"bronchial\",\n \"bronco\",\n \"bronze\",\n \"bronzing\",\n \"brook\",\n \"broom\",\n \"brought\",\n \"browbeat\",\n \"brownnose\",\n \"browse\",\n \"browsing\",\n \"bruising\",\n \"brunch\",\n \"brunette\",\n \"brunt\",\n \"brush\",\n \"brussels\",\n \"brute\",\n \"brutishly\",\n \"bubble\",\n \"bubbling\",\n \"bubbly\",\n \"buccaneer\",\n \"bucked\",\n \"bucket\",\n \"buckle\",\n \"buckshot\",\n \"buckskin\",\n \"bucktooth\",\n \"buckwheat\",\n \"buddhism\",\n \"buddhist\",\n \"budding\",\n \"buddy\",\n \"budget\",\n \"buffalo\",\n \"buffed\",\n \"buffer\",\n \"buffing\",\n \"buffoon\",\n \"buggy\",\n \"bulb\",\n \"bulge\",\n \"bulginess\",\n \"bulgur\",\n \"bulk\",\n \"bulldog\",\n \"bulldozer\",\n \"bullfight\",\n \"bullfrog\",\n \"bullhorn\",\n \"bullion\",\n \"bullish\",\n \"bullpen\",\n \"bullring\",\n \"bullseye\",\n \"bullwhip\",\n \"bully\",\n \"bunch\",\n \"bundle\",\n \"bungee\",\n \"bunion\",\n \"bunkbed\",\n \"bunkhouse\",\n \"bunkmate\",\n \"bunny\",\n \"bunt\",\n \"busboy\",\n \"bush\",\n \"busily\",\n \"busload\",\n \"bust\",\n \"busybody\",\n \"buzz\",\n \"cabana\",\n \"cabbage\",\n \"cabbie\",\n \"cabdriver\",\n \"cable\",\n \"caboose\",\n \"cache\",\n \"cackle\",\n \"cacti\",\n \"cactus\",\n \"caddie\",\n \"caddy\",\n \"cadet\",\n \"cadillac\",\n \"cadmium\",\n \"cage\",\n \"cahoots\",\n \"cake\",\n \"calamari\",\n \"calamity\",\n \"calcium\",\n \"calculate\",\n \"calculus\",\n \"caliber\",\n \"calibrate\",\n \"calm\",\n \"caloric\",\n \"calorie\",\n \"calzone\",\n \"camcorder\",\n \"cameo\",\n \"camera\",\n \"camisole\",\n \"camper\",\n \"campfire\",\n \"camping\",\n \"campsite\",\n \"campus\",\n \"canal\",\n \"canary\",\n \"cancel\",\n \"candied\",\n \"candle\",\n \"candy\",\n \"cane\",\n \"canine\",\n \"canister\",\n \"cannabis\",\n \"canned\",\n \"canning\",\n \"cannon\",\n \"cannot\",\n \"canola\",\n \"canon\",\n \"canopener\",\n \"canopy\",\n \"canteen\",\n \"canyon\",\n \"capable\",\n \"capably\",\n \"capacity\",\n \"cape\",\n \"capillary\",\n \"capital\",\n \"capitol\",\n \"capped\",\n \"capricorn\",\n \"capsize\",\n \"capsule\",\n \"caption\",\n \"captivate\",\n \"captive\",\n \"captivity\",\n \"capture\",\n \"caramel\",\n \"carat\",\n \"caravan\",\n \"carbon\",\n \"cardboard\",\n \"carded\",\n \"cardiac\",\n \"cardigan\",\n \"cardinal\",\n \"cardstock\",\n \"carefully\",\n \"caregiver\",\n \"careless\",\n \"caress\",\n \"caretaker\",\n \"cargo\",\n \"caring\",\n \"carless\",\n \"carload\",\n \"carmaker\",\n \"carnage\",\n \"carnation\",\n \"carnival\",\n \"carnivore\",\n \"carol\",\n \"carpenter\",\n \"carpentry\",\n \"carpool\",\n \"carport\",\n \"carried\",\n \"carrot\",\n \"carrousel\",\n \"carry\",\n \"cartel\",\n \"cartload\",\n \"carton\",\n \"cartoon\",\n \"cartridge\",\n \"cartwheel\",\n \"carve\",\n \"carving\",\n \"carwash\",\n \"cascade\",\n \"case\",\n \"cash\",\n \"casing\",\n \"casino\",\n \"casket\",\n \"cassette\",\n \"casually\",\n \"casualty\",\n \"catacomb\",\n \"catalog\",\n \"catalyst\",\n \"catalyze\",\n \"catapult\",\n \"cataract\",\n \"catatonic\",\n \"catcall\",\n \"catchable\",\n \"catcher\",\n \"catching\",\n \"catchy\",\n \"caterer\",\n \"catering\",\n \"catfight\",\n \"catfish\",\n \"cathedral\",\n \"cathouse\",\n \"catlike\",\n \"catnap\",\n \"catnip\",\n \"catsup\",\n \"cattail\",\n \"cattishly\",\n \"cattle\",\n \"catty\",\n \"catwalk\",\n \"caucasian\",\n \"caucus\",\n \"causal\",\n \"causation\",\n \"cause\",\n \"causing\",\n \"cauterize\",\n \"caution\",\n \"cautious\",\n \"cavalier\",\n \"cavalry\",\n \"caviar\",\n \"cavity\",\n \"cedar\",\n \"celery\",\n \"celestial\",\n \"celibacy\",\n \"celibate\",\n \"celtic\",\n \"cement\",\n \"census\",\n \"ceramics\",\n \"ceremony\",\n \"certainly\",\n \"certainty\",\n \"certified\",\n \"certify\",\n \"cesarean\",\n \"cesspool\",\n \"chafe\",\n \"chaffing\",\n \"chain\",\n \"chair\",\n \"chalice\",\n \"challenge\",\n \"chamber\",\n \"chamomile\",\n \"champion\",\n \"chance\",\n \"change\",\n \"channel\",\n \"chant\",\n \"chaos\",\n \"chaperone\",\n \"chaplain\",\n \"chapped\",\n \"chaps\",\n \"chapter\",\n \"character\",\n \"charbroil\",\n \"charcoal\",\n \"charger\",\n \"charging\",\n \"chariot\",\n \"charity\",\n \"charm\",\n \"charred\",\n \"charter\",\n \"charting\",\n \"chase\",\n \"chasing\",\n \"chaste\",\n \"chastise\",\n \"chastity\",\n \"chatroom\",\n \"chatter\",\n \"chatting\",\n \"chatty\",\n \"cheating\",\n \"cheddar\",\n \"cheek\",\n \"cheer\",\n \"cheese\",\n \"cheesy\",\n \"chef\",\n \"chemicals\",\n \"chemist\",\n \"chemo\",\n \"cherisher\",\n \"cherub\",\n \"chess\",\n \"chest\",\n \"chevron\",\n \"chevy\",\n \"chewable\",\n \"chewer\",\n \"chewing\",\n \"chewy\",\n \"chief\",\n \"chihuahua\",\n \"childcare\",\n \"childhood\",\n \"childish\",\n \"childless\",\n \"childlike\",\n \"chili\",\n \"chill\",\n \"chimp\",\n \"chip\",\n \"chirping\",\n \"chirpy\",\n \"chitchat\",\n \"chivalry\",\n \"chive\",\n \"chloride\",\n \"chlorine\",\n \"choice\",\n \"chokehold\",\n \"choking\",\n \"chomp\",\n \"chooser\",\n \"choosing\",\n \"choosy\",\n \"chop\",\n \"chosen\",\n \"chowder\",\n \"chowtime\",\n \"chrome\",\n \"chubby\",\n \"chuck\",\n \"chug\",\n \"chummy\",\n \"chump\",\n \"chunk\",\n \"churn\",\n \"chute\",\n \"cider\",\n \"cilantro\",\n \"cinch\",\n \"cinema\",\n \"cinnamon\",\n \"circle\",\n \"circling\",\n \"circular\",\n \"circulate\",\n \"circus\",\n \"citable\",\n \"citadel\",\n \"citation\",\n \"citizen\",\n \"citric\",\n \"citrus\",\n \"city\",\n \"civic\",\n \"civil\",\n \"clad\",\n \"claim\",\n \"clambake\",\n \"clammy\",\n \"clamor\",\n \"clamp\",\n \"clamshell\",\n \"clang\",\n \"clanking\",\n \"clapped\",\n \"clapper\",\n \"clapping\",\n \"clarify\",\n \"clarinet\",\n \"clarity\",\n \"clash\",\n \"clasp\",\n \"class\",\n \"clatter\",\n \"clause\",\n \"clavicle\",\n \"claw\",\n \"clay\",\n \"clean\",\n \"clear\",\n \"cleat\",\n \"cleaver\",\n \"cleft\",\n \"clench\",\n \"clergyman\",\n \"clerical\",\n \"clerk\",\n \"clever\",\n \"clicker\",\n \"client\",\n \"climate\",\n \"climatic\",\n \"cling\",\n \"clinic\",\n \"clinking\",\n \"clip\",\n \"clique\",\n \"cloak\",\n \"clobber\",\n \"clock\",\n \"clone\",\n \"cloning\",\n \"closable\",\n \"closure\",\n \"clothes\",\n \"clothing\",\n \"cloud\",\n \"clover\",\n \"clubbed\",\n \"clubbing\",\n \"clubhouse\",\n \"clump\",\n \"clumsily\",\n \"clumsy\",\n \"clunky\",\n \"clustered\",\n \"clutch\",\n \"clutter\",\n \"coach\",\n \"coagulant\",\n \"coastal\",\n \"coaster\",\n \"coasting\",\n \"coastland\",\n \"coastline\",\n \"coat\",\n \"coauthor\",\n \"cobalt\",\n \"cobbler\",\n \"cobweb\",\n \"cocoa\",\n \"coconut\",\n \"cod\",\n \"coeditor\",\n \"coerce\",\n \"coexist\",\n \"coffee\",\n \"cofounder\",\n \"cognition\",\n \"cognitive\",\n \"cogwheel\",\n \"coherence\",\n \"coherent\",\n \"cohesive\",\n \"coil\",\n \"coke\",\n \"cola\",\n \"cold\",\n \"coleslaw\",\n \"coliseum\",\n \"collage\",\n \"collapse\",\n \"collar\",\n \"collected\",\n \"collector\",\n \"collide\",\n \"collie\",\n \"collision\",\n \"colonial\",\n \"colonist\",\n \"colonize\",\n \"colony\",\n \"colossal\",\n \"colt\",\n \"coma\",\n \"come\",\n \"comfort\",\n \"comfy\",\n \"comic\",\n \"coming\",\n \"comma\",\n \"commence\",\n \"commend\",\n \"comment\",\n \"commerce\",\n \"commode\",\n \"commodity\",\n \"commodore\",\n \"common\",\n \"commotion\",\n \"commute\",\n \"commuting\",\n \"compacted\",\n \"compacter\",\n \"compactly\",\n \"compactor\",\n \"companion\",\n \"company\",\n \"compare\",\n \"compel\",\n \"compile\",\n \"comply\",\n \"component\",\n \"composed\",\n \"composer\",\n \"composite\",\n \"compost\",\n \"composure\",\n \"compound\",\n \"compress\",\n \"comprised\",\n \"computer\",\n \"computing\",\n \"comrade\",\n \"concave\",\n \"conceal\",\n \"conceded\",\n \"concept\",\n \"concerned\",\n \"concert\",\n \"conch\",\n \"concierge\",\n \"concise\",\n \"conclude\",\n \"concrete\",\n \"concur\",\n \"condense\",\n \"condiment\",\n \"condition\",\n \"condone\",\n \"conducive\",\n \"conductor\",\n \"conduit\",\n \"cone\",\n \"confess\",\n \"confetti\",\n \"confidant\",\n \"confident\",\n \"confider\",\n \"confiding\",\n \"configure\",\n \"confined\",\n \"confining\",\n \"confirm\",\n \"conflict\",\n \"conform\",\n \"confound\",\n \"confront\",\n \"confused\",\n \"confusing\",\n \"confusion\",\n \"congenial\",\n \"congested\",\n \"congrats\",\n \"congress\",\n \"conical\",\n \"conjoined\",\n \"conjure\",\n \"conjuror\",\n \"connected\",\n \"connector\",\n \"consensus\",\n \"consent\",\n \"console\",\n \"consoling\",\n \"consonant\",\n \"constable\",\n \"constant\",\n \"constrain\",\n \"constrict\",\n \"construct\",\n \"consult\",\n \"consumer\",\n \"consuming\",\n \"contact\",\n \"container\",\n \"contempt\",\n \"contend\",\n \"contented\",\n \"contently\",\n \"contents\",\n \"contest\",\n \"context\",\n \"contort\",\n \"contour\",\n \"contrite\",\n \"control\",\n \"contusion\",\n \"convene\",\n \"convent\",\n \"copartner\",\n \"cope\",\n \"copied\",\n \"copier\",\n \"copilot\",\n \"coping\",\n \"copious\",\n \"copper\",\n \"copy\",\n \"coral\",\n \"cork\",\n \"cornball\",\n \"cornbread\",\n \"corncob\",\n \"cornea\",\n \"corned\",\n \"corner\",\n \"cornfield\",\n \"cornflake\",\n \"cornhusk\",\n \"cornmeal\",\n \"cornstalk\",\n \"corny\",\n \"coronary\",\n \"coroner\",\n \"corporal\",\n \"corporate\",\n \"corral\",\n \"correct\",\n \"corridor\",\n \"corrode\",\n \"corroding\",\n \"corrosive\",\n \"corsage\",\n \"corset\",\n \"cortex\",\n \"cosigner\",\n \"cosmetics\",\n \"cosmic\",\n \"cosmos\",\n \"cosponsor\",\n \"cost\",\n \"cottage\",\n \"cotton\",\n \"couch\",\n \"cough\",\n \"could\",\n \"countable\",\n \"countdown\",\n \"counting\",\n \"countless\",\n \"country\",\n \"county\",\n \"courier\",\n \"covenant\",\n \"cover\",\n \"coveted\",\n \"coveting\",\n \"coyness\",\n \"cozily\",\n \"coziness\",\n \"cozy\",\n \"crabbing\",\n \"crabgrass\",\n \"crablike\",\n \"crabmeat\",\n \"cradle\",\n \"cradling\",\n \"crafter\",\n \"craftily\",\n \"craftsman\",\n \"craftwork\",\n \"crafty\",\n \"cramp\",\n \"cranberry\",\n \"crane\",\n \"cranial\",\n \"cranium\",\n \"crank\",\n \"crate\",\n \"crave\",\n \"craving\",\n \"crawfish\",\n \"crawlers\",\n \"crawling\",\n \"crayfish\",\n \"crayon\",\n \"crazed\",\n \"crazily\",\n \"craziness\",\n \"crazy\",\n \"creamed\",\n \"creamer\",\n \"creamlike\",\n \"crease\",\n \"creasing\",\n \"creatable\",\n \"create\",\n \"creation\",\n \"creative\",\n \"creature\",\n \"credible\",\n \"credibly\",\n \"credit\",\n \"creed\",\n \"creme\",\n \"creole\",\n \"crepe\",\n \"crept\",\n \"crescent\",\n \"crested\",\n \"cresting\",\n \"crestless\",\n \"crevice\",\n \"crewless\",\n \"crewman\",\n \"crewmate\",\n \"crib\",\n \"cricket\",\n \"cried\",\n \"crier\",\n \"crimp\",\n \"crimson\",\n \"cringe\",\n \"cringing\",\n \"crinkle\",\n \"crinkly\",\n \"crisped\",\n \"crisping\",\n \"crisply\",\n \"crispness\",\n \"crispy\",\n \"criteria\",\n \"critter\",\n \"croak\",\n \"crock\",\n \"crook\",\n \"croon\",\n \"crop\",\n \"cross\",\n \"crouch\",\n \"crouton\",\n \"crowbar\",\n \"crowd\",\n \"crown\",\n \"crucial\",\n \"crudely\",\n \"crudeness\",\n \"cruelly\",\n \"cruelness\",\n \"cruelty\",\n \"crumb\",\n \"crummiest\",\n \"crummy\",\n \"crumpet\",\n \"crumpled\",\n \"cruncher\",\n \"crunching\",\n \"crunchy\",\n \"crusader\",\n \"crushable\",\n \"crushed\",\n \"crusher\",\n \"crushing\",\n \"crust\",\n \"crux\",\n \"crying\",\n \"cryptic\",\n \"crystal\",\n \"cubbyhole\",\n \"cube\",\n \"cubical\",\n \"cubicle\",\n \"cucumber\",\n \"cuddle\",\n \"cuddly\",\n \"cufflink\",\n \"culinary\",\n \"culminate\",\n \"culpable\",\n \"culprit\",\n \"cultivate\",\n \"cultural\",\n \"culture\",\n \"cupbearer\",\n \"cupcake\",\n \"cupid\",\n \"cupped\",\n \"cupping\",\n \"curable\",\n \"curator\",\n \"curdle\",\n \"cure\",\n \"curfew\",\n \"curing\",\n \"curled\",\n \"curler\",\n \"curliness\",\n \"curling\",\n \"curly\",\n \"curry\",\n \"curse\",\n \"cursive\",\n \"cursor\",\n \"curtain\",\n \"curtly\",\n \"curtsy\",\n \"curvature\",\n \"curve\",\n \"curvy\",\n \"cushy\",\n \"cusp\",\n \"cussed\",\n \"custard\",\n \"custodian\",\n \"custody\",\n \"customary\",\n \"customer\",\n \"customize\",\n \"customs\",\n \"cut\",\n \"cycle\",\n \"cyclic\",\n \"cycling\",\n \"cyclist\",\n \"cylinder\",\n \"cymbal\",\n \"cytoplasm\",\n \"cytoplast\",\n \"dab\",\n \"dad\",\n \"daffodil\",\n \"dagger\",\n \"daily\",\n \"daintily\",\n \"dainty\",\n \"dairy\",\n \"daisy\",\n \"dallying\",\n \"dance\",\n \"dancing\",\n \"dandelion\",\n \"dander\",\n \"dandruff\",\n \"dandy\",\n \"danger\",\n \"dangle\",\n \"dangling\",\n \"daredevil\",\n \"dares\",\n \"daringly\",\n \"darkened\",\n \"darkening\",\n \"darkish\",\n \"darkness\",\n \"darkroom\",\n \"darling\",\n \"darn\",\n \"dart\",\n \"darwinism\",\n \"dash\",\n \"dastardly\",\n \"data\",\n \"datebook\",\n \"dating\",\n \"daughter\",\n \"daunting\",\n \"dawdler\",\n \"dawn\",\n \"daybed\",\n \"daybreak\",\n \"daycare\",\n \"daydream\",\n \"daylight\",\n \"daylong\",\n \"dayroom\",\n \"daytime\",\n \"dazzler\",\n \"dazzling\",\n \"deacon\",\n \"deafening\",\n \"deafness\",\n \"dealer\",\n \"dealing\",\n \"dealmaker\",\n \"dealt\",\n \"dean\",\n \"debatable\",\n \"debate\",\n \"debating\",\n \"debit\",\n \"debrief\",\n \"debtless\",\n \"debtor\",\n \"debug\",\n \"debunk\",\n \"decade\",\n \"decaf\",\n \"decal\",\n \"decathlon\",\n \"decay\",\n \"deceased\",\n \"deceit\",\n \"deceiver\",\n \"deceiving\",\n \"december\",\n \"decency\",\n \"decent\",\n \"deception\",\n \"deceptive\",\n \"decibel\",\n \"decidable\",\n \"decimal\",\n \"decimeter\",\n \"decipher\",\n \"deck\",\n \"declared\",\n \"decline\",\n \"decode\",\n \"decompose\",\n \"decorated\",\n \"decorator\",\n \"decoy\",\n \"decrease\",\n \"decree\",\n \"dedicate\",\n \"dedicator\",\n \"deduce\",\n \"deduct\",\n \"deed\",\n \"deem\",\n \"deepen\",\n \"deeply\",\n \"deepness\",\n \"deface\",\n \"defacing\",\n \"defame\",\n \"default\",\n \"defeat\",\n \"defection\",\n \"defective\",\n \"defendant\",\n \"defender\",\n \"defense\",\n \"defensive\",\n \"deferral\",\n \"deferred\",\n \"defiance\",\n \"defiant\",\n \"defile\",\n \"defiling\",\n \"define\",\n \"definite\",\n \"deflate\",\n \"deflation\",\n \"deflator\",\n \"deflected\",\n \"deflector\",\n \"defog\",\n \"deforest\",\n \"defraud\",\n \"defrost\",\n \"deftly\",\n \"defuse\",\n \"defy\",\n \"degraded\",\n \"degrading\",\n \"degrease\",\n \"degree\",\n \"dehydrate\",\n \"deity\",\n \"dejected\",\n \"delay\",\n \"delegate\",\n \"delegator\",\n \"delete\",\n \"deletion\",\n \"delicacy\",\n \"delicate\",\n \"delicious\",\n \"delighted\",\n \"delirious\",\n \"delirium\",\n \"deliverer\",\n \"delivery\",\n \"delouse\",\n \"delta\",\n \"deluge\",\n \"delusion\",\n \"deluxe\",\n \"demanding\",\n \"demeaning\",\n \"demeanor\",\n \"demise\",\n \"democracy\",\n \"democrat\",\n \"demote\",\n \"demotion\",\n \"demystify\",\n \"denatured\",\n \"deniable\",\n \"denial\",\n \"denim\",\n \"denote\",\n \"dense\",\n \"density\",\n \"dental\",\n \"dentist\",\n \"denture\",\n \"deny\",\n \"deodorant\",\n \"deodorize\",\n \"departed\",\n \"departure\",\n \"depict\",\n \"deplete\",\n \"depletion\",\n \"deplored\",\n \"deploy\",\n \"deport\",\n \"depose\",\n \"depraved\",\n \"depravity\",\n \"deprecate\",\n \"depress\",\n \"deprive\",\n \"depth\",\n \"deputize\",\n \"deputy\",\n \"derail\",\n \"deranged\",\n \"derby\",\n \"derived\",\n \"desecrate\",\n \"deserve\",\n \"deserving\",\n \"designate\",\n \"designed\",\n \"designer\",\n \"designing\",\n \"deskbound\",\n \"desktop\",\n \"deskwork\",\n \"desolate\",\n \"despair\",\n \"despise\",\n \"despite\",\n \"destiny\",\n \"destitute\",\n \"destruct\",\n \"detached\",\n \"detail\",\n \"detection\",\n \"detective\",\n \"detector\",\n \"detention\",\n \"detergent\",\n \"detest\",\n \"detonate\",\n \"detonator\",\n \"detoxify\",\n \"detract\",\n \"deuce\",\n \"devalue\",\n \"deviancy\",\n \"deviant\",\n \"deviate\",\n \"deviation\",\n \"deviator\",\n \"device\",\n \"devious\",\n \"devotedly\",\n \"devotee\",\n \"devotion\",\n \"devourer\",\n \"devouring\",\n \"devoutly\",\n \"dexterity\",\n \"dexterous\",\n \"diabetes\",\n \"diabetic\",\n \"diabolic\",\n \"diagnoses\",\n \"diagnosis\",\n \"diagram\",\n \"dial\",\n \"diameter\",\n \"diaper\",\n \"diaphragm\",\n \"diary\",\n \"dice\",\n \"dicing\",\n \"dictate\",\n \"dictation\",\n \"dictator\",\n \"difficult\",\n \"diffused\",\n \"diffuser\",\n \"diffusion\",\n \"diffusive\",\n \"dig\",\n \"dilation\",\n \"diligence\",\n \"diligent\",\n \"dill\",\n \"dilute\",\n \"dime\",\n \"diminish\",\n \"dimly\",\n \"dimmed\",\n \"dimmer\",\n \"dimness\",\n \"dimple\",\n \"diner\",\n \"dingbat\",\n \"dinghy\",\n \"dinginess\",\n \"dingo\",\n \"dingy\",\n \"dining\",\n \"dinner\",\n \"diocese\",\n \"dioxide\",\n \"diploma\",\n \"dipped\",\n \"dipper\",\n \"dipping\",\n \"directed\",\n \"direction\",\n \"directive\",\n \"directly\",\n \"directory\",\n \"direness\",\n \"dirtiness\",\n \"disabled\",\n \"disagree\",\n \"disallow\",\n \"disarm\",\n \"disarray\",\n \"disaster\",\n \"disband\",\n \"disbelief\",\n \"disburse\",\n \"discard\",\n \"discern\",\n \"discharge\",\n \"disclose\",\n \"discolor\",\n \"discount\",\n \"discourse\",\n \"discover\",\n \"discuss\",\n \"disdain\",\n \"disengage\",\n \"disfigure\",\n \"disgrace\",\n \"dish\",\n \"disinfect\",\n \"disjoin\",\n \"disk\",\n \"dislike\",\n \"disliking\",\n \"dislocate\",\n \"dislodge\",\n \"disloyal\",\n \"dismantle\",\n \"dismay\",\n \"dismiss\",\n \"dismount\",\n \"disobey\",\n \"disorder\",\n \"disown\",\n \"disparate\",\n \"disparity\",\n \"dispatch\",\n \"dispense\",\n \"dispersal\",\n \"dispersed\",\n \"disperser\",\n \"displace\",\n \"display\",\n \"displease\",\n \"disposal\",\n \"dispose\",\n \"disprove\",\n \"dispute\",\n \"disregard\",\n \"disrupt\",\n \"dissuade\",\n \"distance\",\n \"distant\",\n \"distaste\",\n \"distill\",\n \"distinct\",\n \"distort\",\n \"distract\",\n \"distress\",\n \"district\",\n \"distrust\",\n \"ditch\",\n \"ditto\",\n \"ditzy\",\n \"dividable\",\n \"divided\",\n \"dividend\",\n \"dividers\",\n \"dividing\",\n \"divinely\",\n \"diving\",\n \"divinity\",\n \"divisible\",\n \"divisibly\",\n \"division\",\n \"divisive\",\n \"divorcee\",\n \"dizziness\",\n \"dizzy\",\n \"doable\",\n \"docile\",\n \"dock\",\n \"doctrine\",\n \"document\",\n \"dodge\",\n \"dodgy\",\n \"doily\",\n \"doing\",\n \"dole\",\n \"dollar\",\n \"dollhouse\",\n \"dollop\",\n \"dolly\",\n \"dolphin\",\n \"domain\",\n \"domelike\",\n \"domestic\",\n \"dominion\",\n \"dominoes\",\n \"donated\",\n \"donation\",\n \"donator\",\n \"donor\",\n \"donut\",\n \"doodle\",\n \"doorbell\",\n \"doorframe\",\n \"doorknob\",\n \"doorman\",\n \"doormat\",\n \"doornail\",\n \"doorpost\",\n \"doorstep\",\n \"doorstop\",\n \"doorway\",\n \"doozy\",\n \"dork\",\n \"dormitory\",\n \"dorsal\",\n \"dosage\",\n \"dose\",\n \"dotted\",\n \"doubling\",\n \"douche\",\n \"dove\",\n \"down\",\n \"dowry\",\n \"doze\",\n \"drab\",\n \"dragging\",\n \"dragonfly\",\n \"dragonish\",\n \"dragster\",\n \"drainable\",\n \"drainage\",\n \"drained\",\n \"drainer\",\n \"drainpipe\",\n \"dramatic\",\n \"dramatize\",\n \"drank\",\n \"drapery\",\n \"drastic\",\n \"draw\",\n \"dreaded\",\n \"dreadful\",\n \"dreadlock\",\n \"dreamboat\",\n \"dreamily\",\n \"dreamland\",\n \"dreamless\",\n \"dreamlike\",\n \"dreamt\",\n \"dreamy\",\n \"drearily\",\n \"dreary\",\n \"drench\",\n \"dress\",\n \"drew\",\n \"dribble\",\n \"dried\",\n \"drier\",\n \"drift\",\n \"driller\",\n \"drilling\",\n \"drinkable\",\n \"drinking\",\n \"dripping\",\n \"drippy\",\n \"drivable\",\n \"driven\",\n \"driver\",\n \"driveway\",\n \"driving\",\n \"drizzle\",\n \"drizzly\",\n \"drone\",\n \"drool\",\n \"droop\",\n \"drop-down\",\n \"dropbox\",\n \"dropkick\",\n \"droplet\",\n \"dropout\",\n \"dropper\",\n \"drove\",\n \"drown\",\n \"drowsily\",\n \"drudge\",\n \"drum\",\n \"dry\",\n \"dubbed\",\n \"dubiously\",\n \"duchess\",\n \"duckbill\",\n \"ducking\",\n \"duckling\",\n \"ducktail\",\n \"ducky\",\n \"duct\",\n \"dude\",\n \"duffel\",\n \"dugout\",\n \"duh\",\n \"duke\",\n \"duller\",\n \"dullness\",\n \"duly\",\n \"dumping\",\n \"dumpling\",\n \"dumpster\",\n \"duo\",\n \"dupe\",\n \"duplex\",\n \"duplicate\",\n \"duplicity\",\n \"durable\",\n \"durably\",\n \"duration\",\n \"duress\",\n \"during\",\n \"dusk\",\n \"dust\",\n \"dutiful\",\n \"duty\",\n \"duvet\",\n \"dwarf\",\n \"dweeb\",\n \"dwelled\",\n \"dweller\",\n \"dwelling\",\n \"dwindle\",\n \"dwindling\",\n \"dynamic\",\n \"dynamite\",\n \"dynasty\",\n \"dyslexia\",\n \"dyslexic\",\n \"each\",\n \"eagle\",\n \"earache\",\n \"eardrum\",\n \"earflap\",\n \"earful\",\n \"earlobe\",\n \"early\",\n \"earmark\",\n \"earmuff\",\n \"earphone\",\n \"earpiece\",\n \"earplugs\",\n \"earring\",\n \"earshot\",\n \"earthen\",\n \"earthlike\",\n \"earthling\",\n \"earthly\",\n \"earthworm\",\n \"earthy\",\n \"earwig\",\n \"easeful\",\n \"easel\",\n \"easiest\",\n \"easily\",\n \"easiness\",\n \"easing\",\n \"eastbound\",\n \"eastcoast\",\n \"easter\",\n \"eastward\",\n \"eatable\",\n \"eaten\",\n \"eatery\",\n \"eating\",\n \"eats\",\n \"ebay\",\n \"ebony\",\n \"ebook\",\n \"ecard\",\n \"eccentric\",\n \"echo\",\n \"eclair\",\n \"eclipse\",\n \"ecologist\",\n \"ecology\",\n \"economic\",\n \"economist\",\n \"economy\",\n \"ecosphere\",\n \"ecosystem\",\n \"edge\",\n \"edginess\",\n \"edging\",\n \"edgy\",\n \"edition\",\n \"editor\",\n \"educated\",\n \"education\",\n \"educator\",\n \"eel\",\n \"effective\",\n \"effects\",\n \"efficient\",\n \"effort\",\n \"eggbeater\",\n \"egging\",\n \"eggnog\",\n \"eggplant\",\n \"eggshell\",\n \"egomaniac\",\n \"egotism\",\n \"egotistic\",\n \"either\",\n \"eject\",\n \"elaborate\",\n \"elastic\",\n \"elated\",\n \"elbow\",\n \"eldercare\",\n \"elderly\",\n \"eldest\",\n \"electable\",\n \"election\",\n \"elective\",\n \"elephant\",\n \"elevate\",\n \"elevating\",\n \"elevation\",\n \"elevator\",\n \"eleven\",\n \"elf\",\n \"eligible\",\n \"eligibly\",\n \"eliminate\",\n \"elite\",\n \"elitism\",\n \"elixir\",\n \"elk\",\n \"ellipse\",\n \"elliptic\",\n \"elm\",\n \"elongated\",\n \"elope\",\n \"eloquence\",\n \"eloquent\",\n \"elsewhere\",\n \"elude\",\n \"elusive\",\n \"elves\",\n \"email\",\n \"embargo\",\n \"embark\",\n \"embassy\",\n \"embattled\",\n \"embellish\",\n \"ember\",\n \"embezzle\",\n \"emblaze\",\n \"emblem\",\n \"embody\",\n \"embolism\",\n \"emboss\",\n \"embroider\",\n \"emcee\",\n \"emerald\",\n \"emergency\",\n \"emission\",\n \"emit\",\n \"emote\",\n \"emoticon\",\n \"emotion\",\n \"empathic\",\n \"empathy\",\n \"emperor\",\n \"emphases\",\n \"emphasis\",\n \"emphasize\",\n \"emphatic\",\n \"empirical\",\n \"employed\",\n \"employee\",\n \"employer\",\n \"emporium\",\n \"empower\",\n \"emptier\",\n \"emptiness\",\n \"empty\",\n \"emu\",\n \"enable\",\n \"enactment\",\n \"enamel\",\n \"enchanted\",\n \"enchilada\",\n \"encircle\",\n \"enclose\",\n \"enclosure\",\n \"encode\",\n \"encore\",\n \"encounter\",\n \"encourage\",\n \"encroach\",\n \"encrust\",\n \"encrypt\",\n \"endanger\",\n \"endeared\",\n \"endearing\",\n \"ended\",\n \"ending\",\n \"endless\",\n \"endnote\",\n \"endocrine\",\n \"endorphin\",\n \"endorse\",\n \"endowment\",\n \"endpoint\",\n \"endurable\",\n \"endurance\",\n \"enduring\",\n \"energetic\",\n \"energize\",\n \"energy\",\n \"enforced\",\n \"enforcer\",\n \"engaged\",\n \"engaging\",\n \"engine\",\n \"engorge\",\n \"engraved\",\n \"engraver\",\n \"engraving\",\n \"engross\",\n \"engulf\",\n \"enhance\",\n \"enigmatic\",\n \"enjoyable\",\n \"enjoyably\",\n \"enjoyer\",\n \"enjoying\",\n \"enjoyment\",\n \"enlarged\",\n \"enlarging\",\n \"enlighten\",\n \"enlisted\",\n \"enquirer\",\n \"enrage\",\n \"enrich\",\n \"enroll\",\n \"enslave\",\n \"ensnare\",\n \"ensure\",\n \"entail\",\n \"entangled\",\n \"entering\",\n \"entertain\",\n \"enticing\",\n \"entire\",\n \"entitle\",\n \"entity\",\n \"entomb\",\n \"entourage\",\n \"entrap\",\n \"entree\",\n \"entrench\",\n \"entrust\",\n \"entryway\",\n \"entwine\",\n \"enunciate\",\n \"envelope\",\n \"enviable\",\n \"enviably\",\n \"envious\",\n \"envision\",\n \"envoy\",\n \"envy\",\n \"enzyme\",\n \"epic\",\n \"epidemic\",\n \"epidermal\",\n \"epidermis\",\n \"epidural\",\n \"epilepsy\",\n \"epileptic\",\n \"epilogue\",\n \"epiphany\",\n \"episode\",\n \"equal\",\n \"equate\",\n \"equation\",\n \"equator\",\n \"equinox\",\n \"equipment\",\n \"equity\",\n \"equivocal\",\n \"eradicate\",\n \"erasable\",\n \"erased\",\n \"eraser\",\n \"erasure\",\n \"ergonomic\",\n \"errand\",\n \"errant\",\n \"erratic\",\n \"error\",\n \"erupt\",\n \"escalate\",\n \"escalator\",\n \"escapable\",\n \"escapade\",\n \"escapist\",\n \"escargot\",\n \"eskimo\",\n \"esophagus\",\n \"espionage\",\n \"espresso\",\n \"esquire\",\n \"essay\",\n \"essence\",\n \"essential\",\n \"establish\",\n \"estate\",\n \"esteemed\",\n \"estimate\",\n \"estimator\",\n \"estranged\",\n \"estrogen\",\n \"etching\",\n \"eternal\",\n \"eternity\",\n \"ethanol\",\n \"ether\",\n \"ethically\",\n \"ethics\",\n \"euphemism\",\n \"evacuate\",\n \"evacuee\",\n \"evade\",\n \"evaluate\",\n \"evaluator\",\n \"evaporate\",\n \"evasion\",\n \"evasive\",\n \"even\",\n \"everglade\",\n \"evergreen\",\n \"everybody\",\n \"everyday\",\n \"everyone\",\n \"evict\",\n \"evidence\",\n \"evident\",\n \"evil\",\n \"evoke\",\n \"evolution\",\n \"evolve\",\n \"exact\",\n \"exalted\",\n \"example\",\n \"excavate\",\n \"excavator\",\n \"exceeding\",\n \"exception\",\n \"excess\",\n \"exchange\",\n \"excitable\",\n \"exciting\",\n \"exclaim\",\n \"exclude\",\n \"excluding\",\n \"exclusion\",\n \"exclusive\",\n \"excretion\",\n \"excretory\",\n \"excursion\",\n \"excusable\",\n \"excusably\",\n \"excuse\",\n \"exemplary\",\n \"exemplify\",\n \"exemption\",\n \"exerciser\",\n \"exert\",\n \"exes\",\n \"exfoliate\",\n \"exhale\",\n \"exhaust\",\n \"exhume\",\n \"exile\",\n \"existing\",\n \"exit\",\n \"exodus\",\n \"exonerate\",\n \"exorcism\",\n \"exorcist\",\n \"expand\",\n \"expanse\",\n \"expansion\",\n \"expansive\",\n \"expectant\",\n \"expedited\",\n \"expediter\",\n \"expel\",\n \"expend\",\n \"expenses\",\n \"expensive\",\n \"expert\",\n \"expire\",\n \"expiring\",\n \"explain\",\n \"expletive\",\n \"explicit\",\n \"explode\",\n \"exploit\",\n \"explore\",\n \"exploring\",\n \"exponent\",\n \"exporter\",\n \"exposable\",\n \"expose\",\n \"exposure\",\n \"express\",\n \"expulsion\",\n \"exquisite\",\n \"extended\",\n \"extending\",\n \"extent\",\n \"extenuate\",\n \"exterior\",\n \"external\",\n \"extinct\",\n \"extortion\",\n \"extradite\",\n \"extras\",\n \"extrovert\",\n \"extrude\",\n \"extruding\",\n \"exuberant\",\n \"fable\",\n \"fabric\",\n \"fabulous\",\n \"facebook\",\n \"facecloth\",\n \"facedown\",\n \"faceless\",\n \"facelift\",\n \"faceplate\",\n \"faceted\",\n \"facial\",\n \"facility\",\n \"facing\",\n \"facsimile\",\n \"faction\",\n \"factoid\",\n \"factor\",\n \"factsheet\",\n \"factual\",\n \"faculty\",\n \"fade\",\n \"fading\",\n \"failing\",\n \"falcon\",\n \"fall\",\n \"false\",\n \"falsify\",\n \"fame\",\n \"familiar\",\n \"family\",\n \"famine\",\n \"famished\",\n \"fanatic\",\n \"fancied\",\n \"fanciness\",\n \"fancy\",\n \"fanfare\",\n \"fang\",\n \"fanning\",\n \"fantasize\",\n \"fantastic\",\n \"fantasy\",\n \"fascism\",\n \"fastball\",\n \"faster\",\n \"fasting\",\n \"fastness\",\n \"faucet\",\n \"favorable\",\n \"favorably\",\n \"favored\",\n \"favoring\",\n \"favorite\",\n \"fax\",\n \"feast\",\n \"federal\",\n \"fedora\",\n \"feeble\",\n \"feed\",\n \"feel\",\n \"feisty\",\n \"feline\",\n \"felt-tip\",\n \"feminine\",\n \"feminism\",\n \"feminist\",\n \"feminize\",\n \"femur\",\n \"fence\",\n \"fencing\",\n \"fender\",\n \"ferment\",\n \"fernlike\",\n \"ferocious\",\n \"ferocity\",\n \"ferret\",\n \"ferris\",\n \"ferry\",\n \"fervor\",\n \"fester\",\n \"festival\",\n \"festive\",\n \"festivity\",\n \"fetal\",\n \"fetch\",\n \"fever\",\n \"fiber\",\n \"fiction\",\n \"fiddle\",\n \"fiddling\",\n \"fidelity\",\n \"fidgeting\",\n \"fidgety\",\n \"fifteen\",\n \"fifth\",\n \"fiftieth\",\n \"fifty\",\n \"figment\",\n \"figure\",\n \"figurine\",\n \"filing\",\n \"filled\",\n \"filler\",\n \"filling\",\n \"film\",\n \"filter\",\n \"filth\",\n \"filtrate\",\n \"finale\",\n \"finalist\",\n \"finalize\",\n \"finally\",\n \"finance\",\n \"financial\",\n \"finch\",\n \"fineness\",\n \"finer\",\n \"finicky\",\n \"finished\",\n \"finisher\",\n \"finishing\",\n \"finite\",\n \"finless\",\n \"finlike\",\n \"fiscally\",\n \"fit\",\n \"five\",\n \"flaccid\",\n \"flagman\",\n \"flagpole\",\n \"flagship\",\n \"flagstick\",\n \"flagstone\",\n \"flail\",\n \"flakily\",\n \"flaky\",\n \"flame\",\n \"flammable\",\n \"flanked\",\n \"flanking\",\n \"flannels\",\n \"flap\",\n \"flaring\",\n \"flashback\",\n \"flashbulb\",\n \"flashcard\",\n \"flashily\",\n \"flashing\",\n \"flashy\",\n \"flask\",\n \"flatbed\",\n \"flatfoot\",\n \"flatly\",\n \"flatness\",\n \"flatten\",\n \"flattered\",\n \"flatterer\",\n \"flattery\",\n \"flattop\",\n \"flatware\",\n \"flatworm\",\n \"flavored\",\n \"flavorful\",\n \"flavoring\",\n \"flaxseed\",\n \"fled\",\n \"fleshed\",\n \"fleshy\",\n \"flick\",\n \"flier\",\n \"flight\",\n \"flinch\",\n \"fling\",\n \"flint\",\n \"flip\",\n \"flirt\",\n \"float\",\n \"flock\",\n \"flogging\",\n \"flop\",\n \"floral\",\n \"florist\",\n \"floss\",\n \"flounder\",\n \"flyable\",\n \"flyaway\",\n \"flyer\",\n \"flying\",\n \"flyover\",\n \"flypaper\",\n \"foam\",\n \"foe\",\n \"fog\",\n \"foil\",\n \"folic\",\n \"folk\",\n \"follicle\",\n \"follow\",\n \"fondling\",\n \"fondly\",\n \"fondness\",\n \"fondue\",\n \"font\",\n \"food\",\n \"fool\",\n \"footage\",\n \"football\",\n \"footbath\",\n \"footboard\",\n \"footer\",\n \"footgear\",\n \"foothill\",\n \"foothold\",\n \"footing\",\n \"footless\",\n \"footman\",\n \"footnote\",\n \"footpad\",\n \"footpath\",\n \"footprint\",\n \"footrest\",\n \"footsie\",\n \"footsore\",\n \"footwear\",\n \"footwork\",\n \"fossil\",\n \"foster\",\n \"founder\",\n \"founding\",\n \"fountain\",\n \"fox\",\n \"foyer\",\n \"fraction\",\n \"fracture\",\n \"fragile\",\n \"fragility\",\n \"fragment\",\n \"fragrance\",\n \"fragrant\",\n \"frail\",\n \"frame\",\n \"framing\",\n \"frantic\",\n \"fraternal\",\n \"frayed\",\n \"fraying\",\n \"frays\",\n \"freckled\",\n \"freckles\",\n \"freebase\",\n \"freebee\",\n \"freebie\",\n \"freedom\",\n \"freefall\",\n \"freehand\",\n \"freeing\",\n \"freeload\",\n \"freely\",\n \"freemason\",\n \"freeness\",\n \"freestyle\",\n \"freeware\",\n \"freeway\",\n \"freewill\",\n \"freezable\",\n \"freezing\",\n \"freight\",\n \"french\",\n \"frenzied\",\n \"frenzy\",\n \"frequency\",\n \"frequent\",\n \"fresh\",\n \"fretful\",\n \"fretted\",\n \"friction\",\n \"friday\",\n \"fridge\",\n \"fried\",\n \"friend\",\n \"frighten\",\n \"frightful\",\n \"frigidity\",\n \"frigidly\",\n \"frill\",\n \"fringe\",\n \"frisbee\",\n \"frisk\",\n \"fritter\",\n \"frivolous\",\n \"frolic\",\n \"from\",\n \"front\",\n \"frostbite\",\n \"frosted\",\n \"frostily\",\n \"frosting\",\n \"frostlike\",\n \"frosty\",\n \"froth\",\n \"frown\",\n \"frozen\",\n \"fructose\",\n \"frugality\",\n \"frugally\",\n \"fruit\",\n \"frustrate\",\n \"frying\",\n \"gab\",\n \"gaffe\",\n \"gag\",\n \"gainfully\",\n \"gaining\",\n \"gains\",\n \"gala\",\n \"gallantly\",\n \"galleria\",\n \"gallery\",\n \"galley\",\n \"gallon\",\n \"gallows\",\n \"gallstone\",\n \"galore\",\n \"galvanize\",\n \"gambling\",\n \"game\",\n \"gaming\",\n \"gamma\",\n \"gander\",\n \"gangly\",\n \"gangrene\",\n \"gangway\",\n \"gap\",\n \"garage\",\n \"garbage\",\n \"garden\",\n \"gargle\",\n \"garland\",\n \"garlic\",\n \"garment\",\n \"garnet\",\n \"garnish\",\n \"garter\",\n \"gas\",\n \"gatherer\",\n \"gathering\",\n \"gating\",\n \"gauging\",\n \"gauntlet\",\n \"gauze\",\n \"gave\",\n \"gawk\",\n \"gazing\",\n \"gear\",\n \"gecko\",\n \"geek\",\n \"geiger\",\n \"gem\",\n \"gender\",\n \"generic\",\n \"generous\",\n \"genetics\",\n \"genre\",\n \"gentile\",\n \"gentleman\",\n \"gently\",\n \"gents\",\n \"geography\",\n \"geologic\",\n \"geologist\",\n \"geology\",\n \"geometric\",\n \"geometry\",\n \"geranium\",\n \"gerbil\",\n \"geriatric\",\n \"germicide\",\n \"germinate\",\n \"germless\",\n \"germproof\",\n \"gestate\",\n \"gestation\",\n \"gesture\",\n \"getaway\",\n \"getting\",\n \"getup\",\n \"giant\",\n \"gibberish\",\n \"giblet\",\n \"giddily\",\n \"giddiness\",\n \"giddy\",\n \"gift\",\n \"gigabyte\",\n \"gigahertz\",\n \"gigantic\",\n \"giggle\",\n \"giggling\",\n \"giggly\",\n \"gigolo\",\n \"gilled\",\n \"gills\",\n \"gimmick\",\n \"girdle\",\n \"giveaway\",\n \"given\",\n \"giver\",\n \"giving\",\n \"gizmo\",\n \"gizzard\",\n \"glacial\",\n \"glacier\",\n \"glade\",\n \"gladiator\",\n \"gladly\",\n \"glamorous\",\n \"glamour\",\n \"glance\",\n \"glancing\",\n \"glandular\",\n \"glare\",\n \"glaring\",\n \"glass\",\n \"glaucoma\",\n \"glazing\",\n \"gleaming\",\n \"gleeful\",\n \"glider\",\n \"gliding\",\n \"glimmer\",\n \"glimpse\",\n \"glisten\",\n \"glitch\",\n \"glitter\",\n \"glitzy\",\n \"gloater\",\n \"gloating\",\n \"gloomily\",\n \"gloomy\",\n \"glorified\",\n \"glorifier\",\n \"glorify\",\n \"glorious\",\n \"glory\",\n \"gloss\",\n \"glove\",\n \"glowing\",\n \"glowworm\",\n \"glucose\",\n \"glue\",\n \"gluten\",\n \"glutinous\",\n \"glutton\",\n \"gnarly\",\n \"gnat\",\n \"goal\",\n \"goatskin\",\n \"goes\",\n \"goggles\",\n \"going\",\n \"goldfish\",\n \"goldmine\",\n \"goldsmith\",\n \"golf\",\n \"goliath\",\n \"gonad\",\n \"gondola\",\n \"gone\",\n \"gong\",\n \"good\",\n \"gooey\",\n \"goofball\",\n \"goofiness\",\n \"goofy\",\n \"google\",\n \"goon\",\n \"gopher\",\n \"gore\",\n \"gorged\",\n \"gorgeous\",\n \"gory\",\n \"gosling\",\n \"gossip\",\n \"gothic\",\n \"gotten\",\n \"gout\",\n \"gown\",\n \"grab\",\n \"graceful\",\n \"graceless\",\n \"gracious\",\n \"gradation\",\n \"graded\",\n \"grader\",\n \"gradient\",\n \"grading\",\n \"gradually\",\n \"graduate\",\n \"graffiti\",\n \"grafted\",\n \"grafting\",\n \"grain\",\n \"granddad\",\n \"grandkid\",\n \"grandly\",\n \"grandma\",\n \"grandpa\",\n \"grandson\",\n \"granite\",\n \"granny\",\n \"granola\",\n \"grant\",\n \"granular\",\n \"grape\",\n \"graph\",\n \"grapple\",\n \"grappling\",\n \"grasp\",\n \"grass\",\n \"gratified\",\n \"gratify\",\n \"grating\",\n \"gratitude\",\n \"gratuity\",\n \"gravel\",\n \"graveness\",\n \"graves\",\n \"graveyard\",\n \"gravitate\",\n \"gravity\",\n \"gravy\",\n \"gray\",\n \"grazing\",\n \"greasily\",\n \"greedily\",\n \"greedless\",\n \"greedy\",\n \"green\",\n \"greeter\",\n \"greeting\",\n \"grew\",\n \"greyhound\",\n \"grid\",\n \"grief\",\n \"grievance\",\n \"grieving\",\n \"grievous\",\n \"grill\",\n \"grimace\",\n \"grimacing\",\n \"grime\",\n \"griminess\",\n \"grimy\",\n \"grinch\",\n \"grinning\",\n \"grip\",\n \"gristle\",\n \"grit\",\n \"groggily\",\n \"groggy\",\n \"groin\",\n \"groom\",\n \"groove\",\n \"grooving\",\n \"groovy\",\n \"grope\",\n \"ground\",\n \"grouped\",\n \"grout\",\n \"grove\",\n \"grower\",\n \"growing\",\n \"growl\",\n \"grub\",\n \"grudge\",\n \"grudging\",\n \"grueling\",\n \"gruffly\",\n \"grumble\",\n \"grumbling\",\n \"grumbly\",\n \"grumpily\",\n \"grunge\",\n \"grunt\",\n \"guacamole\",\n \"guidable\",\n \"guidance\",\n \"guide\",\n \"guiding\",\n \"guileless\",\n \"guise\",\n \"gulf\",\n \"gullible\",\n \"gully\",\n \"gulp\",\n \"gumball\",\n \"gumdrop\",\n \"gumminess\",\n \"gumming\",\n \"gummy\",\n \"gurgle\",\n \"gurgling\",\n \"guru\",\n \"gush\",\n \"gusto\",\n \"gusty\",\n \"gutless\",\n \"guts\",\n \"gutter\",\n \"guy\",\n \"guzzler\",\n \"gyration\",\n \"habitable\",\n \"habitant\",\n \"habitat\",\n \"habitual\",\n \"hacked\",\n \"hacker\",\n \"hacking\",\n \"hacksaw\",\n \"had\",\n \"haggler\",\n \"haiku\",\n \"half\",\n \"halogen\",\n \"halt\",\n \"halved\",\n \"halves\",\n \"hamburger\",\n \"hamlet\",\n \"hammock\",\n \"hamper\",\n \"hamster\",\n \"hamstring\",\n \"handbag\",\n \"handball\",\n \"handbook\",\n \"handbrake\",\n \"handcart\",\n \"handclap\",\n \"handclasp\",\n \"handcraft\",\n \"handcuff\",\n \"handed\",\n \"handful\",\n \"handgrip\",\n \"handgun\",\n \"handheld\",\n \"handiness\",\n \"handiwork\",\n \"handlebar\",\n \"handled\",\n \"handler\",\n \"handling\",\n \"handmade\",\n \"handoff\",\n \"handpick\",\n \"handprint\",\n \"handrail\",\n \"handsaw\",\n \"handset\",\n \"handsfree\",\n \"handshake\",\n \"handstand\",\n \"handwash\",\n \"handwork\",\n \"handwoven\",\n \"handwrite\",\n \"handyman\",\n \"hangnail\",\n \"hangout\",\n \"hangover\",\n \"hangup\",\n \"hankering\",\n \"hankie\",\n \"hanky\",\n \"haphazard\",\n \"happening\",\n \"happier\",\n \"happiest\",\n \"happily\",\n \"happiness\",\n \"happy\",\n \"harbor\",\n \"hardcopy\",\n \"hardcore\",\n \"hardcover\",\n \"harddisk\",\n \"hardened\",\n \"hardener\",\n \"hardening\",\n \"hardhat\",\n \"hardhead\",\n \"hardiness\",\n \"hardly\",\n \"hardness\",\n \"hardship\",\n \"hardware\",\n \"hardwired\",\n \"hardwood\",\n \"hardy\",\n \"harmful\",\n \"harmless\",\n \"harmonica\",\n \"harmonics\",\n \"harmonize\",\n \"harmony\",\n \"harness\",\n \"harpist\",\n \"harsh\",\n \"harvest\",\n \"hash\",\n \"hassle\",\n \"haste\",\n \"hastily\",\n \"hastiness\",\n \"hasty\",\n \"hatbox\",\n \"hatchback\",\n \"hatchery\",\n \"hatchet\",\n \"hatching\",\n \"hatchling\",\n \"hate\",\n \"hatless\",\n \"hatred\",\n \"haunt\",\n \"haven\",\n \"hazard\",\n \"hazelnut\",\n \"hazily\",\n \"haziness\",\n \"hazing\",\n \"hazy\",\n \"headache\",\n \"headband\",\n \"headboard\",\n \"headcount\",\n \"headdress\",\n \"headed\",\n \"header\",\n \"headfirst\",\n \"headgear\",\n \"heading\",\n \"headlamp\",\n \"headless\",\n \"headlock\",\n \"headphone\",\n \"headpiece\",\n \"headrest\",\n \"headroom\",\n \"headscarf\",\n \"headset\",\n \"headsman\",\n \"headstand\",\n \"headstone\",\n \"headway\",\n \"headwear\",\n \"heap\",\n \"heat\",\n \"heave\",\n \"heavily\",\n \"heaviness\",\n \"heaving\",\n \"hedge\",\n \"hedging\",\n \"heftiness\",\n \"hefty\",\n \"helium\",\n \"helmet\",\n \"helper\",\n \"helpful\",\n \"helping\",\n \"helpless\",\n \"helpline\",\n \"hemlock\",\n \"hemstitch\",\n \"hence\",\n \"henchman\",\n \"henna\",\n \"herald\",\n \"herbal\",\n \"herbicide\",\n \"herbs\",\n \"heritage\",\n \"hermit\",\n \"heroics\",\n \"heroism\",\n \"herring\",\n \"herself\",\n \"hertz\",\n \"hesitancy\",\n \"hesitant\",\n \"hesitate\",\n \"hexagon\",\n \"hexagram\",\n \"hubcap\",\n \"huddle\",\n \"huddling\",\n \"huff\",\n \"hug\",\n \"hula\",\n \"hulk\",\n \"hull\",\n \"human\",\n \"humble\",\n \"humbling\",\n \"humbly\",\n \"humid\",\n \"humiliate\",\n \"humility\",\n \"humming\",\n \"hummus\",\n \"humongous\",\n \"humorist\",\n \"humorless\",\n \"humorous\",\n \"humpback\",\n \"humped\",\n \"humvee\",\n \"hunchback\",\n \"hundredth\",\n \"hunger\",\n \"hungrily\",\n \"hungry\",\n \"hunk\",\n \"hunter\",\n \"hunting\",\n \"huntress\",\n \"huntsman\",\n \"hurdle\",\n \"hurled\",\n \"hurler\",\n \"hurling\",\n \"hurray\",\n \"hurricane\",\n \"hurried\",\n \"hurry\",\n \"hurt\",\n \"husband\",\n \"hush\",\n \"husked\",\n \"huskiness\",\n \"hut\",\n \"hybrid\",\n \"hydrant\",\n \"hydrated\",\n \"hydration\",\n \"hydrogen\",\n \"hydroxide\",\n \"hyperlink\",\n \"hypertext\",\n \"hyphen\",\n \"hypnoses\",\n \"hypnosis\",\n \"hypnotic\",\n \"hypnotism\",\n \"hypnotist\",\n \"hypnotize\",\n \"hypocrisy\",\n \"hypocrite\",\n \"ibuprofen\",\n \"ice\",\n \"iciness\",\n \"icing\",\n \"icky\",\n \"icon\",\n \"icy\",\n \"idealism\",\n \"idealist\",\n \"idealize\",\n \"ideally\",\n \"idealness\",\n \"identical\",\n \"identify\",\n \"identity\",\n \"ideology\",\n \"idiocy\",\n \"idiom\",\n \"idly\",\n \"igloo\",\n \"ignition\",\n \"ignore\",\n \"iguana\",\n \"illicitly\",\n \"illusion\",\n \"illusive\",\n \"image\",\n \"imaginary\",\n \"imagines\",\n \"imaging\",\n \"imbecile\",\n \"imitate\",\n \"imitation\",\n \"immature\",\n \"immerse\",\n \"immersion\",\n \"imminent\",\n \"immobile\",\n \"immodest\",\n \"immorally\",\n \"immortal\",\n \"immovable\",\n \"immovably\",\n \"immunity\",\n \"immunize\",\n \"impaired\",\n \"impale\",\n \"impart\",\n \"impatient\",\n \"impeach\",\n \"impeding\",\n \"impending\",\n \"imperfect\",\n \"imperial\",\n \"impish\",\n \"implant\",\n \"implement\",\n \"implicate\",\n \"implicit\",\n \"implode\",\n \"implosion\",\n \"implosive\",\n \"imply\",\n \"impolite\",\n \"important\",\n \"importer\",\n \"impose\",\n \"imposing\",\n \"impotence\",\n \"impotency\",\n \"impotent\",\n \"impound\",\n \"imprecise\",\n \"imprint\",\n \"imprison\",\n \"impromptu\",\n \"improper\",\n \"improve\",\n \"improving\",\n \"improvise\",\n \"imprudent\",\n \"impulse\",\n \"impulsive\",\n \"impure\",\n \"impurity\",\n \"iodine\",\n \"iodize\",\n \"ion\",\n \"ipad\",\n \"iphone\",\n \"ipod\",\n \"irate\",\n \"irk\",\n \"iron\",\n \"irregular\",\n \"irrigate\",\n \"irritable\",\n \"irritably\",\n \"irritant\",\n \"irritate\",\n \"islamic\",\n \"islamist\",\n \"isolated\",\n \"isolating\",\n \"isolation\",\n \"isotope\",\n \"issue\",\n \"issuing\",\n \"italicize\",\n \"italics\",\n \"item\",\n \"itinerary\",\n \"itunes\",\n \"ivory\",\n \"ivy\",\n \"jab\",\n \"jackal\",\n \"jacket\",\n \"jackknife\",\n \"jackpot\",\n \"jailbird\",\n \"jailbreak\",\n \"jailer\",\n \"jailhouse\",\n \"jalapeno\",\n \"jam\",\n \"janitor\",\n \"january\",\n \"jargon\",\n \"jarring\",\n \"jasmine\",\n \"jaundice\",\n \"jaunt\",\n \"java\",\n \"jawed\",\n \"jawless\",\n \"jawline\",\n \"jaws\",\n \"jaybird\",\n \"jaywalker\",\n \"jazz\",\n \"jeep\",\n \"jeeringly\",\n \"jellied\",\n \"jelly\",\n \"jersey\",\n \"jester\",\n \"jet\",\n \"jiffy\",\n \"jigsaw\",\n \"jimmy\",\n \"jingle\",\n \"jingling\",\n \"jinx\",\n \"jitters\",\n \"jittery\",\n \"job\",\n \"jockey\",\n \"jockstrap\",\n \"jogger\",\n \"jogging\",\n \"john\",\n \"joining\",\n \"jokester\",\n \"jokingly\",\n \"jolliness\",\n \"jolly\",\n \"jolt\",\n \"jot\",\n \"jovial\",\n \"joyfully\",\n \"joylessly\",\n \"joyous\",\n \"joyride\",\n \"joystick\",\n \"jubilance\",\n \"jubilant\",\n \"judge\",\n \"judgingly\",\n \"judicial\",\n \"judiciary\",\n \"judo\",\n \"juggle\",\n \"juggling\",\n \"jugular\",\n \"juice\",\n \"juiciness\",\n \"juicy\",\n \"jujitsu\",\n \"jukebox\",\n \"july\",\n \"jumble\",\n \"jumbo\",\n \"jump\",\n \"junction\",\n \"juncture\",\n \"june\",\n \"junior\",\n \"juniper\",\n \"junkie\",\n \"junkman\",\n \"junkyard\",\n \"jurist\",\n \"juror\",\n \"jury\",\n \"justice\",\n \"justifier\",\n \"justify\",\n \"justly\",\n \"justness\",\n \"juvenile\",\n \"kabob\",\n \"kangaroo\",\n \"karaoke\",\n \"karate\",\n \"karma\",\n \"kebab\",\n \"keenly\",\n \"keenness\",\n \"keep\",\n \"keg\",\n \"kelp\",\n \"kennel\",\n \"kept\",\n \"kerchief\",\n \"kerosene\",\n \"kettle\",\n \"kick\",\n \"kiln\",\n \"kilobyte\",\n \"kilogram\",\n \"kilometer\",\n \"kilowatt\",\n \"kilt\",\n \"kimono\",\n \"kindle\",\n \"kindling\",\n \"kindly\",\n \"kindness\",\n \"kindred\",\n \"kinetic\",\n \"kinfolk\",\n \"king\",\n \"kinship\",\n \"kinsman\",\n \"kinswoman\",\n \"kissable\",\n \"kisser\",\n \"kissing\",\n \"kitchen\",\n \"kite\",\n \"kitten\",\n \"kitty\",\n \"kiwi\",\n \"kleenex\",\n \"knapsack\",\n \"knee\",\n \"knelt\",\n \"knickers\",\n \"knoll\",\n \"koala\",\n \"kooky\",\n \"kosher\",\n \"krypton\",\n \"kudos\",\n \"kung\",\n \"labored\",\n \"laborer\",\n \"laboring\",\n \"laborious\",\n \"labrador\",\n \"ladder\",\n \"ladies\",\n \"ladle\",\n \"ladybug\",\n \"ladylike\",\n \"lagged\",\n \"lagging\",\n \"lagoon\",\n \"lair\",\n \"lake\",\n \"lance\",\n \"landed\",\n \"landfall\",\n \"landfill\",\n \"landing\",\n \"landlady\",\n \"landless\",\n \"landline\",\n \"landlord\",\n \"landmark\",\n \"landmass\",\n \"landmine\",\n \"landowner\",\n \"landscape\",\n \"landside\",\n \"landslide\",\n \"language\",\n \"lankiness\",\n \"lanky\",\n \"lantern\",\n \"lapdog\",\n \"lapel\",\n \"lapped\",\n \"lapping\",\n \"laptop\",\n \"lard\",\n \"large\",\n \"lark\",\n \"lash\",\n \"lasso\",\n \"last\",\n \"latch\",\n \"late\",\n \"lather\",\n \"latitude\",\n \"latrine\",\n \"latter\",\n \"latticed\",\n \"launch\",\n \"launder\",\n \"laundry\",\n \"laurel\",\n \"lavender\",\n \"lavish\",\n \"laxative\",\n \"lazily\",\n \"laziness\",\n \"lazy\",\n \"lecturer\",\n \"left\",\n \"legacy\",\n \"legal\",\n \"legend\",\n \"legged\",\n \"leggings\",\n \"legible\",\n \"legibly\",\n \"legislate\",\n \"lego\",\n \"legroom\",\n \"legume\",\n \"legwarmer\",\n \"legwork\",\n \"lemon\",\n \"lend\",\n \"length\",\n \"lens\",\n \"lent\",\n \"leotard\",\n \"lesser\",\n \"letdown\",\n \"lethargic\",\n \"lethargy\",\n \"letter\",\n \"lettuce\",\n \"level\",\n \"leverage\",\n \"levers\",\n \"levitate\",\n \"levitator\",\n \"liability\",\n \"liable\",\n \"liberty\",\n \"librarian\",\n \"library\",\n \"licking\",\n \"licorice\",\n \"lid\",\n \"life\",\n \"lifter\",\n \"lifting\",\n \"liftoff\",\n \"ligament\",\n \"likely\",\n \"likeness\",\n \"likewise\",\n \"liking\",\n \"lilac\",\n \"lilly\",\n \"lily\",\n \"limb\",\n \"limeade\",\n \"limelight\",\n \"limes\",\n \"limit\",\n \"limping\",\n \"limpness\",\n \"line\",\n \"lingo\",\n \"linguini\",\n \"linguist\",\n \"lining\",\n \"linked\",\n \"linoleum\",\n \"linseed\",\n \"lint\",\n \"lion\",\n \"lip\",\n \"liquefy\",\n \"liqueur\",\n \"liquid\",\n \"lisp\",\n \"list\",\n \"litigate\",\n \"litigator\",\n \"litmus\",\n \"litter\",\n \"little\",\n \"livable\",\n \"lived\",\n \"lively\",\n \"liver\",\n \"livestock\",\n \"lividly\",\n \"living\",\n \"lizard\",\n \"lubricant\",\n \"lubricate\",\n \"lucid\",\n \"luckily\",\n \"luckiness\",\n \"luckless\",\n \"lucrative\",\n \"ludicrous\",\n \"lugged\",\n \"lukewarm\",\n \"lullaby\",\n \"lumber\",\n \"luminance\",\n \"luminous\",\n \"lumpiness\",\n \"lumping\",\n \"lumpish\",\n \"lunacy\",\n \"lunar\",\n \"lunchbox\",\n \"luncheon\",\n \"lunchroom\",\n \"lunchtime\",\n \"lung\",\n \"lurch\",\n \"lure\",\n \"luridness\",\n \"lurk\",\n \"lushly\",\n \"lushness\",\n \"luster\",\n \"lustfully\",\n \"lustily\",\n \"lustiness\",\n \"lustrous\",\n \"lusty\",\n \"luxurious\",\n \"luxury\",\n \"lying\",\n \"lyrically\",\n \"lyricism\",\n \"lyricist\",\n \"lyrics\",\n \"macarena\",\n \"macaroni\",\n \"macaw\",\n \"mace\",\n \"machine\",\n \"machinist\",\n \"magazine\",\n \"magenta\",\n \"maggot\",\n \"magical\",\n \"magician\",\n \"magma\",\n \"magnesium\",\n \"magnetic\",\n \"magnetism\",\n \"magnetize\",\n \"magnifier\",\n \"magnify\",\n \"magnitude\",\n \"magnolia\",\n \"mahogany\",\n \"maimed\",\n \"majestic\",\n \"majesty\",\n \"majorette\",\n \"majority\",\n \"makeover\",\n \"maker\",\n \"makeshift\",\n \"making\",\n \"malformed\",\n \"malt\",\n \"mama\",\n \"mammal\",\n \"mammary\",\n \"mammogram\",\n \"manager\",\n \"managing\",\n \"manatee\",\n \"mandarin\",\n \"mandate\",\n \"mandatory\",\n \"mandolin\",\n \"manger\",\n \"mangle\",\n \"mango\",\n \"mangy\",\n \"manhandle\",\n \"manhole\",\n \"manhood\",\n \"manhunt\",\n \"manicotti\",\n \"manicure\",\n \"manifesto\",\n \"manila\",\n \"mankind\",\n \"manlike\",\n \"manliness\",\n \"manly\",\n \"manmade\",\n \"manned\",\n \"mannish\",\n \"manor\",\n \"manpower\",\n \"mantis\",\n \"mantra\",\n \"manual\",\n \"many\",\n \"map\",\n \"marathon\",\n \"marauding\",\n \"marbled\",\n \"marbles\",\n \"marbling\",\n \"march\",\n \"mardi\",\n \"margarine\",\n \"margarita\",\n \"margin\",\n \"marigold\",\n \"marina\",\n \"marine\",\n \"marital\",\n \"maritime\",\n \"marlin\",\n \"marmalade\",\n \"maroon\",\n \"married\",\n \"marrow\",\n \"marry\",\n \"marshland\",\n \"marshy\",\n \"marsupial\",\n \"marvelous\",\n \"marxism\",\n \"mascot\",\n \"masculine\",\n \"mashed\",\n \"mashing\",\n \"massager\",\n \"masses\",\n \"massive\",\n \"mastiff\",\n \"matador\",\n \"matchbook\",\n \"matchbox\",\n \"matcher\",\n \"matching\",\n \"matchless\",\n \"material\",\n \"maternal\",\n \"maternity\",\n \"math\",\n \"mating\",\n \"matriarch\",\n \"matrimony\",\n \"matrix\",\n \"matron\",\n \"matted\",\n \"matter\",\n \"maturely\",\n \"maturing\",\n \"maturity\",\n \"mauve\",\n \"maverick\",\n \"maximize\",\n \"maximum\",\n \"maybe\",\n \"mayday\",\n \"mayflower\",\n \"moaner\",\n \"moaning\",\n \"mobile\",\n \"mobility\",\n \"mobilize\",\n \"mobster\",\n \"mocha\",\n \"mocker\",\n \"mockup\",\n \"modified\",\n \"modify\",\n \"modular\",\n \"modulator\",\n \"module\",\n \"moisten\",\n \"moistness\",\n \"moisture\",\n \"molar\",\n \"molasses\",\n \"mold\",\n \"molecular\",\n \"molecule\",\n \"molehill\",\n \"mollusk\",\n \"mom\",\n \"monastery\",\n \"monday\",\n \"monetary\",\n \"monetize\",\n \"moneybags\",\n \"moneyless\",\n \"moneywise\",\n \"mongoose\",\n \"mongrel\",\n \"monitor\",\n \"monkhood\",\n \"monogamy\",\n \"monogram\",\n \"monologue\",\n \"monopoly\",\n \"monorail\",\n \"monotone\",\n \"monotype\",\n \"monoxide\",\n \"monsieur\",\n \"monsoon\",\n \"monstrous\",\n \"monthly\",\n \"monument\",\n \"moocher\",\n \"moodiness\",\n \"moody\",\n \"mooing\",\n \"moonbeam\",\n \"mooned\",\n \"moonlight\",\n \"moonlike\",\n \"moonlit\",\n \"moonrise\",\n \"moonscape\",\n \"moonshine\",\n \"moonstone\",\n \"moonwalk\",\n \"mop\",\n \"morale\",\n \"morality\",\n \"morally\",\n \"morbidity\",\n \"morbidly\",\n \"morphine\",\n \"morphing\",\n \"morse\",\n \"mortality\",\n \"mortally\",\n \"mortician\",\n \"mortified\",\n \"mortify\",\n \"mortuary\",\n \"mosaic\",\n \"mossy\",\n \"most\",\n \"mothball\",\n \"mothproof\",\n \"motion\",\n \"motivate\",\n \"motivator\",\n \"motive\",\n \"motocross\",\n \"motor\",\n \"motto\",\n \"mountable\",\n \"mountain\",\n \"mounted\",\n \"mounting\",\n \"mourner\",\n \"mournful\",\n \"mouse\",\n \"mousiness\",\n \"moustache\",\n \"mousy\",\n \"mouth\",\n \"movable\",\n \"move\",\n \"movie\",\n \"moving\",\n \"mower\",\n \"mowing\",\n \"much\",\n \"muck\",\n \"mud\",\n \"mug\",\n \"mulberry\",\n \"mulch\",\n \"mule\",\n \"mulled\",\n \"mullets\",\n \"multiple\",\n \"multiply\",\n \"multitask\",\n \"multitude\",\n \"mumble\",\n \"mumbling\",\n \"mumbo\",\n \"mummified\",\n \"mummify\",\n \"mummy\",\n \"mumps\",\n \"munchkin\",\n \"mundane\",\n \"municipal\",\n \"muppet\",\n \"mural\",\n \"murkiness\",\n \"murky\",\n \"murmuring\",\n \"muscular\",\n \"museum\",\n \"mushily\",\n \"mushiness\",\n \"mushroom\",\n \"mushy\",\n \"music\",\n \"musket\",\n \"muskiness\",\n \"musky\",\n \"mustang\",\n \"mustard\",\n \"muster\",\n \"mustiness\",\n \"musty\",\n \"mutable\",\n \"mutate\",\n \"mutation\",\n \"mute\",\n \"mutilated\",\n \"mutilator\",\n \"mutiny\",\n \"mutt\",\n \"mutual\",\n \"muzzle\",\n \"myself\",\n \"myspace\",\n \"mystified\",\n \"mystify\",\n \"myth\",\n \"nacho\",\n \"nag\",\n \"nail\",\n \"name\",\n \"naming\",\n \"nanny\",\n \"nanometer\",\n \"nape\",\n \"napkin\",\n \"napped\",\n \"napping\",\n \"nappy\",\n \"narrow\",\n \"nastily\",\n \"nastiness\",\n \"national\",\n \"native\",\n \"nativity\",\n \"natural\",\n \"nature\",\n \"naturist\",\n \"nautical\",\n \"navigate\",\n \"navigator\",\n \"navy\",\n \"nearby\",\n \"nearest\",\n \"nearly\",\n \"nearness\",\n \"neatly\",\n \"neatness\",\n \"nebula\",\n \"nebulizer\",\n \"nectar\",\n \"negate\",\n \"negation\",\n \"negative\",\n \"neglector\",\n \"negligee\",\n \"negligent\",\n \"negotiate\",\n \"nemeses\",\n \"nemesis\",\n \"neon\",\n \"nephew\",\n \"nerd\",\n \"nervous\",\n \"nervy\",\n \"nest\",\n \"net\",\n \"neurology\",\n \"neuron\",\n \"neurosis\",\n \"neurotic\",\n \"neuter\",\n \"neutron\",\n \"never\",\n \"next\",\n \"nibble\",\n \"nickname\",\n \"nicotine\",\n \"niece\",\n \"nifty\",\n \"nimble\",\n \"nimbly\",\n \"nineteen\",\n \"ninetieth\",\n \"ninja\",\n \"nintendo\",\n \"ninth\",\n \"nuclear\",\n \"nuclei\",\n \"nucleus\",\n \"nugget\",\n \"nullify\",\n \"number\",\n \"numbing\",\n \"numbly\",\n \"numbness\",\n \"numeral\",\n \"numerate\",\n \"numerator\",\n \"numeric\",\n \"numerous\",\n \"nuptials\",\n \"nursery\",\n \"nursing\",\n \"nurture\",\n \"nutcase\",\n \"nutlike\",\n \"nutmeg\",\n \"nutrient\",\n \"nutshell\",\n \"nuttiness\",\n \"nutty\",\n \"nuzzle\",\n \"nylon\",\n \"oaf\",\n \"oak\",\n \"oasis\",\n \"oat\",\n \"obedience\",\n \"obedient\",\n \"obituary\",\n \"object\",\n \"obligate\",\n \"obliged\",\n \"oblivion\",\n \"oblivious\",\n \"oblong\",\n \"obnoxious\",\n \"oboe\",\n \"obscure\",\n \"obscurity\",\n \"observant\",\n \"observer\",\n \"observing\",\n \"obsessed\",\n \"obsession\",\n \"obsessive\",\n \"obsolete\",\n \"obstacle\",\n \"obstinate\",\n \"obstruct\",\n \"obtain\",\n \"obtrusive\",\n \"obtuse\",\n \"obvious\",\n \"occultist\",\n \"occupancy\",\n \"occupant\",\n \"occupier\",\n \"occupy\",\n \"ocean\",\n \"ocelot\",\n \"octagon\",\n \"octane\",\n \"october\",\n \"octopus\",\n \"ogle\",\n \"oil\",\n \"oink\",\n \"ointment\",\n \"okay\",\n \"old\",\n \"olive\",\n \"olympics\",\n \"omega\",\n \"omen\",\n \"ominous\",\n \"omission\",\n \"omit\",\n \"omnivore\",\n \"onboard\",\n \"oncoming\",\n \"ongoing\",\n \"onion\",\n \"online\",\n \"onlooker\",\n \"only\",\n \"onscreen\",\n \"onset\",\n \"onshore\",\n \"onslaught\",\n \"onstage\",\n \"onto\",\n \"onward\",\n \"onyx\",\n \"oops\",\n \"ooze\",\n \"oozy\",\n \"opacity\",\n \"opal\",\n \"open\",\n \"operable\",\n \"operate\",\n \"operating\",\n \"operation\",\n \"operative\",\n \"operator\",\n \"opium\",\n \"opossum\",\n \"opponent\",\n \"oppose\",\n \"opposing\",\n \"opposite\",\n \"oppressed\",\n \"oppressor\",\n \"opt\",\n \"opulently\",\n \"osmosis\",\n \"other\",\n \"otter\",\n \"ouch\",\n \"ought\",\n \"ounce\",\n \"outage\",\n \"outback\",\n \"outbid\",\n \"outboard\",\n \"outbound\",\n \"outbreak\",\n \"outburst\",\n \"outcast\",\n \"outclass\",\n \"outcome\",\n \"outdated\",\n \"outdoors\",\n \"outer\",\n \"outfield\",\n \"outfit\",\n \"outflank\",\n \"outgoing\",\n \"outgrow\",\n \"outhouse\",\n \"outing\",\n \"outlast\",\n \"outlet\",\n \"outline\",\n \"outlook\",\n \"outlying\",\n \"outmatch\",\n \"outmost\",\n \"outnumber\",\n \"outplayed\",\n \"outpost\",\n \"outpour\",\n \"output\",\n \"outrage\",\n \"outrank\",\n \"outreach\",\n \"outright\",\n \"outscore\",\n \"outsell\",\n \"outshine\",\n \"outshoot\",\n \"outsider\",\n \"outskirts\",\n \"outsmart\",\n \"outsource\",\n \"outspoken\",\n \"outtakes\",\n \"outthink\",\n \"outward\",\n \"outweigh\",\n \"outwit\",\n \"oval\",\n \"ovary\",\n \"oven\",\n \"overact\",\n \"overall\",\n \"overarch\",\n \"overbid\",\n \"overbill\",\n \"overbite\",\n \"overblown\",\n \"overboard\",\n \"overbook\",\n \"overbuilt\",\n \"overcast\",\n \"overcoat\",\n \"overcome\",\n \"overcook\",\n \"overcrowd\",\n \"overdraft\",\n \"overdrawn\",\n \"overdress\",\n \"overdrive\",\n \"overdue\",\n \"overeager\",\n \"overeater\",\n \"overexert\",\n \"overfed\",\n \"overfeed\",\n \"overfill\",\n \"overflow\",\n \"overfull\",\n \"overgrown\",\n \"overhand\",\n \"overhang\",\n \"overhaul\",\n \"overhead\",\n \"overhear\",\n \"overheat\",\n \"overhung\",\n \"overjoyed\",\n \"overkill\",\n \"overlabor\",\n \"overlaid\",\n \"overlap\",\n \"overlay\",\n \"overload\",\n \"overlook\",\n \"overlord\",\n \"overlying\",\n \"overnight\",\n \"overpass\",\n \"overpay\",\n \"overplant\",\n \"overplay\",\n \"overpower\",\n \"overprice\",\n \"overrate\",\n \"overreach\",\n \"overreact\",\n \"override\",\n \"overripe\",\n \"overrule\",\n \"overrun\",\n \"overshoot\",\n \"overshot\",\n \"oversight\",\n \"oversized\",\n \"oversleep\",\n \"oversold\",\n \"overspend\",\n \"overstate\",\n \"overstay\",\n \"overstep\",\n \"overstock\",\n \"overstuff\",\n \"oversweet\",\n \"overtake\",\n \"overthrow\",\n \"overtime\",\n \"overtly\",\n \"overtone\",\n \"overture\",\n \"overturn\",\n \"overuse\",\n \"overvalue\",\n \"overview\",\n \"overwrite\",\n \"owl\",\n \"oxford\",\n \"oxidant\",\n \"oxidation\",\n \"oxidize\",\n \"oxidizing\",\n \"oxygen\",\n \"oxymoron\",\n \"oyster\",\n \"ozone\",\n \"paced\",\n \"pacemaker\",\n \"pacific\",\n \"pacifier\",\n \"pacifism\",\n \"pacifist\",\n \"pacify\",\n \"padded\",\n \"padding\",\n \"paddle\",\n \"paddling\",\n \"padlock\",\n \"pagan\",\n \"pager\",\n \"paging\",\n \"pajamas\",\n \"palace\",\n \"palatable\",\n \"palm\",\n \"palpable\",\n \"palpitate\",\n \"paltry\",\n \"pampered\",\n \"pamperer\",\n \"pampers\",\n \"pamphlet\",\n \"panama\",\n \"pancake\",\n \"pancreas\",\n \"panda\",\n \"pandemic\",\n \"pang\",\n \"panhandle\",\n \"panic\",\n \"panning\",\n \"panorama\",\n \"panoramic\",\n \"panther\",\n \"pantomime\",\n \"pantry\",\n \"pants\",\n \"pantyhose\",\n \"paparazzi\",\n \"papaya\",\n \"paper\",\n \"paprika\",\n \"papyrus\",\n \"parabola\",\n \"parachute\",\n \"parade\",\n \"paradox\",\n \"paragraph\",\n \"parakeet\",\n \"paralegal\",\n \"paralyses\",\n \"paralysis\",\n \"paralyze\",\n \"paramedic\",\n \"parameter\",\n \"paramount\",\n \"parasail\",\n \"parasite\",\n \"parasitic\",\n \"parcel\",\n \"parched\",\n \"parchment\",\n \"pardon\",\n \"parish\",\n \"parka\",\n \"parking\",\n \"parkway\",\n \"parlor\",\n \"parmesan\",\n \"parole\",\n \"parrot\",\n \"parsley\",\n \"parsnip\",\n \"partake\",\n \"parted\",\n \"parting\",\n \"partition\",\n \"partly\",\n \"partner\",\n \"partridge\",\n \"party\",\n \"passable\",\n \"passably\",\n \"passage\",\n \"passcode\",\n \"passenger\",\n \"passerby\",\n \"passing\",\n \"passion\",\n \"passive\",\n \"passivism\",\n \"passover\",\n \"passport\",\n \"password\",\n \"pasta\",\n \"pasted\",\n \"pastel\",\n \"pastime\",\n \"pastor\",\n \"pastrami\",\n \"pasture\",\n \"pasty\",\n \"patchwork\",\n \"patchy\",\n \"paternal\",\n \"paternity\",\n \"path\",\n \"patience\",\n \"patient\",\n \"patio\",\n \"patriarch\",\n \"patriot\",\n \"patrol\",\n \"patronage\",\n \"patronize\",\n \"pauper\",\n \"pavement\",\n \"paver\",\n \"pavestone\",\n \"pavilion\",\n \"paving\",\n \"pawing\",\n \"payable\",\n \"payback\",\n \"paycheck\",\n \"payday\",\n \"payee\",\n \"payer\",\n \"paying\",\n \"payment\",\n \"payphone\",\n \"payroll\",\n \"pebble\",\n \"pebbly\",\n \"pecan\",\n \"pectin\",\n \"peculiar\",\n \"peddling\",\n \"pediatric\",\n \"pedicure\",\n \"pedigree\",\n \"pedometer\",\n \"pegboard\",\n \"pelican\",\n \"pellet\",\n \"pelt\",\n \"pelvis\",\n \"penalize\",\n \"penalty\",\n \"pencil\",\n \"pendant\",\n \"pending\",\n \"penholder\",\n \"penknife\",\n \"pennant\",\n \"penniless\",\n \"penny\",\n \"penpal\",\n \"pension\",\n \"pentagon\",\n \"pentagram\",\n \"pep\",\n \"perceive\",\n \"percent\",\n \"perch\",\n \"percolate\",\n \"perennial\",\n \"perfected\",\n \"perfectly\",\n \"perfume\",\n \"periscope\",\n \"perish\",\n \"perjurer\",\n \"perjury\",\n \"perkiness\",\n \"perky\",\n \"perm\",\n \"peroxide\",\n \"perpetual\",\n \"perplexed\",\n \"persecute\",\n \"persevere\",\n \"persuaded\",\n \"persuader\",\n \"pesky\",\n \"peso\",\n \"pessimism\",\n \"pessimist\",\n \"pester\",\n \"pesticide\",\n \"petal\",\n \"petite\",\n \"petition\",\n \"petri\",\n \"petroleum\",\n \"petted\",\n \"petticoat\",\n \"pettiness\",\n \"petty\",\n \"petunia\",\n \"phantom\",\n \"phobia\",\n \"phoenix\",\n \"phonebook\",\n \"phoney\",\n \"phonics\",\n \"phoniness\",\n \"phony\",\n \"phosphate\",\n \"photo\",\n \"phrase\",\n \"phrasing\",\n \"placard\",\n \"placate\",\n \"placidly\",\n \"plank\",\n \"planner\",\n \"plant\",\n \"plasma\",\n \"plaster\",\n \"plastic\",\n \"plated\",\n \"platform\",\n \"plating\",\n \"platinum\",\n \"platonic\",\n \"platter\",\n \"platypus\",\n \"plausible\",\n \"plausibly\",\n \"playable\",\n \"playback\",\n \"player\",\n \"playful\",\n \"playgroup\",\n \"playhouse\",\n \"playing\",\n \"playlist\",\n \"playmaker\",\n \"playmate\",\n \"playoff\",\n \"playpen\",\n \"playroom\",\n \"playset\",\n \"plaything\",\n \"playtime\",\n \"plaza\",\n \"pleading\",\n \"pleat\",\n \"pledge\",\n \"plentiful\",\n \"plenty\",\n \"plethora\",\n \"plexiglas\",\n \"pliable\",\n \"plod\",\n \"plop\",\n \"plot\",\n \"plow\",\n \"ploy\",\n \"pluck\",\n \"plug\",\n \"plunder\",\n \"plunging\",\n \"plural\",\n \"plus\",\n \"plutonium\",\n \"plywood\",\n \"poach\",\n \"pod\",\n \"poem\",\n \"poet\",\n \"pogo\",\n \"pointed\",\n \"pointer\",\n \"pointing\",\n \"pointless\",\n \"pointy\",\n \"poise\",\n \"poison\",\n \"poker\",\n \"poking\",\n \"polar\",\n \"police\",\n \"policy\",\n \"polio\",\n \"polish\",\n \"politely\",\n \"polka\",\n \"polo\",\n \"polyester\",\n \"polygon\",\n \"polygraph\",\n \"polymer\",\n \"poncho\",\n \"pond\",\n \"pony\",\n \"popcorn\",\n \"pope\",\n \"poplar\",\n \"popper\",\n \"poppy\",\n \"popsicle\",\n \"populace\",\n \"popular\",\n \"populate\",\n \"porcupine\",\n \"pork\",\n \"porous\",\n \"porridge\",\n \"portable\",\n \"portal\",\n \"portfolio\",\n \"porthole\",\n \"portion\",\n \"portly\",\n \"portside\",\n \"poser\",\n \"posh\",\n \"posing\",\n \"possible\",\n \"possibly\",\n \"possum\",\n \"postage\",\n \"postal\",\n \"postbox\",\n \"postcard\",\n \"posted\",\n \"poster\",\n \"posting\",\n \"postnasal\",\n \"posture\",\n \"postwar\",\n \"pouch\",\n \"pounce\",\n \"pouncing\",\n \"pound\",\n \"pouring\",\n \"pout\",\n \"powdered\",\n \"powdering\",\n \"powdery\",\n \"power\",\n \"powwow\",\n \"pox\",\n \"praising\",\n \"prance\",\n \"prancing\",\n \"pranker\",\n \"prankish\",\n \"prankster\",\n \"prayer\",\n \"praying\",\n \"preacher\",\n \"preaching\",\n \"preachy\",\n \"preamble\",\n \"precinct\",\n \"precise\",\n \"precision\",\n \"precook\",\n \"precut\",\n \"predator\",\n \"predefine\",\n \"predict\",\n \"preface\",\n \"prefix\",\n \"preflight\",\n \"preformed\",\n \"pregame\",\n \"pregnancy\",\n \"pregnant\",\n \"preheated\",\n \"prelaunch\",\n \"prelaw\",\n \"prelude\",\n \"premiere\",\n \"premises\",\n \"premium\",\n \"prenatal\",\n \"preoccupy\",\n \"preorder\",\n \"prepaid\",\n \"prepay\",\n \"preplan\",\n \"preppy\",\n \"preschool\",\n \"prescribe\",\n \"preseason\",\n \"preset\",\n \"preshow\",\n \"president\",\n \"presoak\",\n \"press\",\n \"presume\",\n \"presuming\",\n \"preteen\",\n \"pretended\",\n \"pretender\",\n \"pretense\",\n \"pretext\",\n \"pretty\",\n \"pretzel\",\n \"prevail\",\n \"prevalent\",\n \"prevent\",\n \"preview\",\n \"previous\",\n \"prewar\",\n \"prewashed\",\n \"prideful\",\n \"pried\",\n \"primal\",\n \"primarily\",\n \"primary\",\n \"primate\",\n \"primer\",\n \"primp\",\n \"princess\",\n \"print\",\n \"prior\",\n \"prism\",\n \"prison\",\n \"prissy\",\n \"pristine\",\n \"privacy\",\n \"private\",\n \"privatize\",\n \"prize\",\n \"proactive\",\n \"probable\",\n \"probably\",\n \"probation\",\n \"probe\",\n \"probing\",\n \"probiotic\",\n \"problem\",\n \"procedure\",\n \"process\",\n \"proclaim\",\n \"procreate\",\n \"procurer\",\n \"prodigal\",\n \"prodigy\",\n \"produce\",\n \"product\",\n \"profane\",\n \"profanity\",\n \"professed\",\n \"professor\",\n \"profile\",\n \"profound\",\n \"profusely\",\n \"progeny\",\n \"prognosis\",\n \"program\",\n \"progress\",\n \"projector\",\n \"prologue\",\n \"prolonged\",\n \"promenade\",\n \"prominent\",\n \"promoter\",\n \"promotion\",\n \"prompter\",\n \"promptly\",\n \"prone\",\n \"prong\",\n \"pronounce\",\n \"pronto\",\n \"proofing\",\n \"proofread\",\n \"proofs\",\n \"propeller\",\n \"properly\",\n \"property\",\n \"proponent\",\n \"proposal\",\n \"propose\",\n \"props\",\n \"prorate\",\n \"protector\",\n \"protegee\",\n \"proton\",\n \"prototype\",\n \"protozoan\",\n \"protract\",\n \"protrude\",\n \"proud\",\n \"provable\",\n \"proved\",\n \"proven\",\n \"provided\",\n \"provider\",\n \"providing\",\n \"province\",\n \"proving\",\n \"provoke\",\n \"provoking\",\n \"provolone\",\n \"prowess\",\n \"prowler\",\n \"prowling\",\n \"proximity\",\n \"proxy\",\n \"prozac\",\n \"prude\",\n \"prudishly\",\n \"prune\",\n \"pruning\",\n \"pry\",\n \"psychic\",\n \"public\",\n \"publisher\",\n \"pucker\",\n \"pueblo\",\n \"pug\",\n \"pull\",\n \"pulmonary\",\n \"pulp\",\n \"pulsate\",\n \"pulse\",\n \"pulverize\",\n \"puma\",\n \"pumice\",\n \"pummel\",\n \"punch\",\n \"punctual\",\n \"punctuate\",\n \"punctured\",\n \"pungent\",\n \"punisher\",\n \"punk\",\n \"pupil\",\n \"puppet\",\n \"puppy\",\n \"purchase\",\n \"pureblood\",\n \"purebred\",\n \"purely\",\n \"pureness\",\n \"purgatory\",\n \"purge\",\n \"purging\",\n \"purifier\",\n \"purify\",\n \"purist\",\n \"puritan\",\n \"purity\",\n \"purple\",\n \"purplish\",\n \"purposely\",\n \"purr\",\n \"purse\",\n \"pursuable\",\n \"pursuant\",\n \"pursuit\",\n \"purveyor\",\n \"pushcart\",\n \"pushchair\",\n \"pusher\",\n \"pushiness\",\n \"pushing\",\n \"pushover\",\n \"pushpin\",\n \"pushup\",\n \"pushy\",\n \"putdown\",\n \"putt\",\n \"puzzle\",\n \"puzzling\",\n \"pyramid\",\n \"pyromania\",\n \"python\",\n \"quack\",\n \"quadrant\",\n \"quail\",\n \"quaintly\",\n \"quake\",\n \"quaking\",\n \"qualified\",\n \"qualifier\",\n \"qualify\",\n \"quality\",\n \"qualm\",\n \"quantum\",\n \"quarrel\",\n \"quarry\",\n \"quartered\",\n \"quarterly\",\n \"quarters\",\n \"quartet\",\n \"quench\",\n \"query\",\n \"quicken\",\n \"quickly\",\n \"quickness\",\n \"quicksand\",\n \"quickstep\",\n \"quiet\",\n \"quill\",\n \"quilt\",\n \"quintet\",\n \"quintuple\",\n \"quirk\",\n \"quit\",\n \"quiver\",\n \"quizzical\",\n \"quotable\",\n \"quotation\",\n \"quote\",\n \"rabid\",\n \"race\",\n \"racing\",\n \"racism\",\n \"rack\",\n \"racoon\",\n \"radar\",\n \"radial\",\n \"radiance\",\n \"radiantly\",\n \"radiated\",\n \"radiation\",\n \"radiator\",\n \"radio\",\n \"radish\",\n \"raffle\",\n \"raft\",\n \"rage\",\n \"ragged\",\n \"raging\",\n \"ragweed\",\n \"raider\",\n \"railcar\",\n \"railing\",\n \"railroad\",\n \"railway\",\n \"raisin\",\n \"rake\",\n \"raking\",\n \"rally\",\n \"ramble\",\n \"rambling\",\n \"ramp\",\n \"ramrod\",\n \"ranch\",\n \"rancidity\",\n \"random\",\n \"ranged\",\n \"ranger\",\n \"ranging\",\n \"ranked\",\n \"ranking\",\n \"ransack\",\n \"ranting\",\n \"rants\",\n \"rare\",\n \"rarity\",\n \"rascal\",\n \"rash\",\n \"rasping\",\n \"ravage\",\n \"raven\",\n \"ravine\",\n \"raving\",\n \"ravioli\",\n \"ravishing\",\n \"reabsorb\",\n \"reach\",\n \"reacquire\",\n \"reaction\",\n \"reactive\",\n \"reactor\",\n \"reaffirm\",\n \"ream\",\n \"reanalyze\",\n \"reappear\",\n \"reapply\",\n \"reappoint\",\n \"reapprove\",\n \"rearrange\",\n \"rearview\",\n \"reason\",\n \"reassign\",\n \"reassure\",\n \"reattach\",\n \"reawake\",\n \"rebalance\",\n \"rebate\",\n \"rebel\",\n \"rebirth\",\n \"reboot\",\n \"reborn\",\n \"rebound\",\n \"rebuff\",\n \"rebuild\",\n \"rebuilt\",\n \"reburial\",\n \"rebuttal\",\n \"recall\",\n \"recant\",\n \"recapture\",\n \"recast\",\n \"recede\",\n \"recent\",\n \"recess\",\n \"recharger\",\n \"recipient\",\n \"recital\",\n \"recite\",\n \"reckless\",\n \"reclaim\",\n \"recliner\",\n \"reclining\",\n \"recluse\",\n \"reclusive\",\n \"recognize\",\n \"recoil\",\n \"recollect\",\n \"recolor\",\n \"reconcile\",\n \"reconfirm\",\n \"reconvene\",\n \"recopy\",\n \"record\",\n \"recount\",\n \"recoup\",\n \"recovery\",\n \"recreate\",\n \"rectal\",\n \"rectangle\",\n \"rectified\",\n \"rectify\",\n \"recycled\",\n \"recycler\",\n \"recycling\",\n \"reemerge\",\n \"reenact\",\n \"reenter\",\n \"reentry\",\n \"reexamine\",\n \"referable\",\n \"referee\",\n \"reference\",\n \"refill\",\n \"refinance\",\n \"refined\",\n \"refinery\",\n \"refining\",\n \"refinish\",\n \"reflected\",\n \"reflector\",\n \"reflex\",\n \"reflux\",\n \"refocus\",\n \"refold\",\n \"reforest\",\n \"reformat\",\n \"reformed\",\n \"reformer\",\n \"reformist\",\n \"refract\",\n \"refrain\",\n \"refreeze\",\n \"refresh\",\n \"refried\",\n \"refueling\",\n \"refund\",\n \"refurbish\",\n \"refurnish\",\n \"refusal\",\n \"refuse\",\n \"refusing\",\n \"refutable\",\n \"refute\",\n \"regain\",\n \"regalia\",\n \"regally\",\n \"reggae\",\n \"regime\",\n \"region\",\n \"register\",\n \"registrar\",\n \"registry\",\n \"regress\",\n \"regretful\",\n \"regroup\",\n \"regular\",\n \"regulate\",\n \"regulator\",\n \"rehab\",\n \"reheat\",\n \"rehire\",\n \"rehydrate\",\n \"reimburse\",\n \"reissue\",\n \"reiterate\",\n \"rejoice\",\n \"rejoicing\",\n \"rejoin\",\n \"rekindle\",\n \"relapse\",\n \"relapsing\",\n \"relatable\",\n \"related\",\n \"relation\",\n \"relative\",\n \"relax\",\n \"relay\",\n \"relearn\",\n \"release\",\n \"relenting\",\n \"reliable\",\n \"reliably\",\n \"reliance\",\n \"reliant\",\n \"relic\",\n \"relieve\",\n \"relieving\",\n \"relight\",\n \"relish\",\n \"relive\",\n \"reload\",\n \"relocate\",\n \"relock\",\n \"reluctant\",\n \"rely\",\n \"remake\",\n \"remark\",\n \"remarry\",\n \"rematch\",\n \"remedial\",\n \"remedy\",\n \"remember\",\n \"reminder\",\n \"remindful\",\n \"remission\",\n \"remix\",\n \"remnant\",\n \"remodeler\",\n \"remold\",\n \"remorse\",\n \"remote\",\n \"removable\",\n \"removal\",\n \"removed\",\n \"remover\",\n \"removing\",\n \"rename\",\n \"renderer\",\n \"rendering\",\n \"rendition\",\n \"renegade\",\n \"renewable\",\n \"renewably\",\n \"renewal\",\n \"renewed\",\n \"renounce\",\n \"renovate\",\n \"renovator\",\n \"rentable\",\n \"rental\",\n \"rented\",\n \"renter\",\n \"reoccupy\",\n \"reoccur\",\n \"reopen\",\n \"reorder\",\n \"repackage\",\n \"repacking\",\n \"repaint\",\n \"repair\",\n \"repave\",\n \"repaying\",\n \"repayment\",\n \"repeal\",\n \"repeated\",\n \"repeater\",\n \"repent\",\n \"rephrase\",\n \"replace\",\n \"replay\",\n \"replica\",\n \"reply\",\n \"reporter\",\n \"repose\",\n \"repossess\",\n \"repost\",\n \"repressed\",\n \"reprimand\",\n \"reprint\",\n \"reprise\",\n \"reproach\",\n \"reprocess\",\n \"reproduce\",\n \"reprogram\",\n \"reps\",\n \"reptile\",\n \"reptilian\",\n \"repugnant\",\n \"repulsion\",\n \"repulsive\",\n \"repurpose\",\n \"reputable\",\n \"reputably\",\n \"request\",\n \"require\",\n \"requisite\",\n \"reroute\",\n \"rerun\",\n \"resale\",\n \"resample\",\n \"rescuer\",\n \"reseal\",\n \"research\",\n \"reselect\",\n \"reseller\",\n \"resemble\",\n \"resend\",\n \"resent\",\n \"reset\",\n \"reshape\",\n \"reshoot\",\n \"reshuffle\",\n \"residence\",\n \"residency\",\n \"resident\",\n \"residual\",\n \"residue\",\n \"resigned\",\n \"resilient\",\n \"resistant\",\n \"resisting\",\n \"resize\",\n \"resolute\",\n \"resolved\",\n \"resonant\",\n \"resonate\",\n \"resort\",\n \"resource\",\n \"respect\",\n \"resubmit\",\n \"result\",\n \"resume\",\n \"resupply\",\n \"resurface\",\n \"resurrect\",\n \"retail\",\n \"retainer\",\n \"retaining\",\n \"retake\",\n \"retaliate\",\n \"retention\",\n \"rethink\",\n \"retinal\",\n \"retired\",\n \"retiree\",\n \"retiring\",\n \"retold\",\n \"retool\",\n \"retorted\",\n \"retouch\",\n \"retrace\",\n \"retract\",\n \"retrain\",\n \"retread\",\n \"retreat\",\n \"retrial\",\n \"retrieval\",\n \"retriever\",\n \"retry\",\n \"return\",\n \"retying\",\n \"retype\",\n \"reunion\",\n \"reunite\",\n \"reusable\",\n \"reuse\",\n \"reveal\",\n \"reveler\",\n \"revenge\",\n \"revenue\",\n \"reverb\",\n \"revered\",\n \"reverence\",\n \"reverend\",\n \"reversal\",\n \"reverse\",\n \"reversing\",\n \"reversion\",\n \"revert\",\n \"revisable\",\n \"revise\",\n \"revision\",\n \"revisit\",\n \"revivable\",\n \"revival\",\n \"reviver\",\n \"reviving\",\n \"revocable\",\n \"revoke\",\n \"revolt\",\n \"revolver\",\n \"revolving\",\n \"reward\",\n \"rewash\",\n \"rewind\",\n \"rewire\",\n \"reword\",\n \"rework\",\n \"rewrap\",\n \"rewrite\",\n \"rhyme\",\n \"ribbon\",\n \"ribcage\",\n \"rice\",\n \"riches\",\n \"richly\",\n \"richness\",\n \"rickety\",\n \"ricotta\",\n \"riddance\",\n \"ridden\",\n \"ride\",\n \"riding\",\n \"rifling\",\n \"rift\",\n \"rigging\",\n \"rigid\",\n \"rigor\",\n \"rimless\",\n \"rimmed\",\n \"rind\",\n \"rink\",\n \"rinse\",\n \"rinsing\",\n \"riot\",\n \"ripcord\",\n \"ripeness\",\n \"ripening\",\n \"ripping\",\n \"ripple\",\n \"rippling\",\n \"riptide\",\n \"rise\",\n \"rising\",\n \"risk\",\n \"risotto\",\n \"ritalin\",\n \"ritzy\",\n \"rival\",\n \"riverbank\",\n \"riverbed\",\n \"riverboat\",\n \"riverside\",\n \"riveter\",\n \"riveting\",\n \"roamer\",\n \"roaming\",\n \"roast\",\n \"robbing\",\n \"robe\",\n \"robin\",\n \"robotics\",\n \"robust\",\n \"rockband\",\n \"rocker\",\n \"rocket\",\n \"rockfish\",\n \"rockiness\",\n \"rocking\",\n \"rocklike\",\n \"rockslide\",\n \"rockstar\",\n \"rocky\",\n \"rogue\",\n \"roman\",\n \"romp\",\n \"rope\",\n \"roping\",\n \"roster\",\n \"rosy\",\n \"rotten\",\n \"rotting\",\n \"rotunda\",\n \"roulette\",\n \"rounding\",\n \"roundish\",\n \"roundness\",\n \"roundup\",\n \"roundworm\",\n \"routine\",\n \"routing\",\n \"rover\",\n \"roving\",\n \"royal\",\n \"rubbed\",\n \"rubber\",\n \"rubbing\",\n \"rubble\",\n \"rubdown\",\n \"ruby\",\n \"ruckus\",\n \"rudder\",\n \"rug\",\n \"ruined\",\n \"rule\",\n \"rumble\",\n \"rumbling\",\n \"rummage\",\n \"rumor\",\n \"runaround\",\n \"rundown\",\n \"runner\",\n \"running\",\n \"runny\",\n \"runt\",\n \"runway\",\n \"rupture\",\n \"rural\",\n \"ruse\",\n \"rush\",\n \"rust\",\n \"rut\",\n \"sabbath\",\n \"sabotage\",\n \"sacrament\",\n \"sacred\",\n \"sacrifice\",\n \"sadden\",\n \"saddlebag\",\n \"saddled\",\n \"saddling\",\n \"sadly\",\n \"sadness\",\n \"safari\",\n \"safeguard\",\n \"safehouse\",\n \"safely\",\n \"safeness\",\n \"saffron\",\n \"saga\",\n \"sage\",\n \"sagging\",\n \"saggy\",\n \"said\",\n \"saint\",\n \"sake\",\n \"salad\",\n \"salami\",\n \"salaried\",\n \"salary\",\n \"saline\",\n \"salon\",\n \"saloon\",\n \"salsa\",\n \"salt\",\n \"salutary\",\n \"salute\",\n \"salvage\",\n \"salvaging\",\n \"salvation\",\n \"same\",\n \"sample\",\n \"sampling\",\n \"sanction\",\n \"sanctity\",\n \"sanctuary\",\n \"sandal\",\n \"sandbag\",\n \"sandbank\",\n \"sandbar\",\n \"sandblast\",\n \"sandbox\",\n \"sanded\",\n \"sandfish\",\n \"sanding\",\n \"sandlot\",\n \"sandpaper\",\n \"sandpit\",\n \"sandstone\",\n \"sandstorm\",\n \"sandworm\",\n \"sandy\",\n \"sanitary\",\n \"sanitizer\",\n \"sank\",\n \"santa\",\n \"sapling\",\n \"sappiness\",\n \"sappy\",\n \"sarcasm\",\n \"sarcastic\",\n \"sardine\",\n \"sash\",\n \"sasquatch\",\n \"sassy\",\n \"satchel\",\n \"satiable\",\n \"satin\",\n \"satirical\",\n \"satisfied\",\n \"satisfy\",\n \"saturate\",\n \"saturday\",\n \"sauciness\",\n \"saucy\",\n \"sauna\",\n \"savage\",\n \"savanna\",\n \"saved\",\n \"savings\",\n \"savior\",\n \"savor\",\n \"saxophone\",\n \"say\",\n \"scabbed\",\n \"scabby\",\n \"scalded\",\n \"scalding\",\n \"scale\",\n \"scaling\",\n \"scallion\",\n \"scallop\",\n \"scalping\",\n \"scam\",\n \"scandal\",\n \"scanner\",\n \"scanning\",\n \"scant\",\n \"scapegoat\",\n \"scarce\",\n \"scarcity\",\n \"scarecrow\",\n \"scared\",\n \"scarf\",\n \"scarily\",\n \"scariness\",\n \"scarring\",\n \"scary\",\n \"scavenger\",\n \"scenic\",\n \"schedule\",\n \"schematic\",\n \"scheme\",\n \"scheming\",\n \"schilling\",\n \"schnapps\",\n \"scholar\",\n \"science\",\n \"scientist\",\n \"scion\",\n \"scoff\",\n \"scolding\",\n \"scone\",\n \"scoop\",\n \"scooter\",\n \"scope\",\n \"scorch\",\n \"scorebook\",\n \"scorecard\",\n \"scored\",\n \"scoreless\",\n \"scorer\",\n \"scoring\",\n \"scorn\",\n \"scorpion\",\n \"scotch\",\n \"scoundrel\",\n \"scoured\",\n \"scouring\",\n \"scouting\",\n \"scouts\",\n \"scowling\",\n \"scrabble\",\n \"scraggly\",\n \"scrambled\",\n \"scrambler\",\n \"scrap\",\n \"scratch\",\n \"scrawny\",\n \"screen\",\n \"scribble\",\n \"scribe\",\n \"scribing\",\n \"scrimmage\",\n \"script\",\n \"scroll\",\n \"scrooge\",\n \"scrounger\",\n \"scrubbed\",\n \"scrubber\",\n \"scruffy\",\n \"scrunch\",\n \"scrutiny\",\n \"scuba\",\n \"scuff\",\n \"sculptor\",\n \"sculpture\",\n \"scurvy\",\n \"scuttle\",\n \"secluded\",\n \"secluding\",\n \"seclusion\",\n \"second\",\n \"secrecy\",\n \"secret\",\n \"sectional\",\n \"sector\",\n \"secular\",\n \"securely\",\n \"security\",\n \"sedan\",\n \"sedate\",\n \"sedation\",\n \"sedative\",\n \"sediment\",\n \"seduce\",\n \"seducing\",\n \"segment\",\n \"seismic\",\n \"seizing\",\n \"seldom\",\n \"selected\",\n \"selection\",\n \"selective\",\n \"selector\",\n \"self\",\n \"seltzer\",\n \"semantic\",\n \"semester\",\n \"semicolon\",\n \"semifinal\",\n \"seminar\",\n \"semisoft\",\n \"semisweet\",\n \"senate\",\n \"senator\",\n \"send\",\n \"senior\",\n \"senorita\",\n \"sensation\",\n \"sensitive\",\n \"sensitize\",\n \"sensually\",\n \"sensuous\",\n \"sepia\",\n \"september\",\n \"septic\",\n \"septum\",\n \"sequel\",\n \"sequence\",\n \"sequester\",\n \"series\",\n \"sermon\",\n \"serotonin\",\n \"serpent\",\n \"serrated\",\n \"serve\",\n \"service\",\n \"serving\",\n \"sesame\",\n \"sessions\",\n \"setback\",\n \"setting\",\n \"settle\",\n \"settling\",\n \"setup\",\n \"sevenfold\",\n \"seventeen\",\n \"seventh\",\n \"seventy\",\n \"severity\",\n \"shabby\",\n \"shack\",\n \"shaded\",\n \"shadily\",\n \"shadiness\",\n \"shading\",\n \"shadow\",\n \"shady\",\n \"shaft\",\n \"shakable\",\n \"shakily\",\n \"shakiness\",\n \"shaking\",\n \"shaky\",\n \"shale\",\n \"shallot\",\n \"shallow\",\n \"shame\",\n \"shampoo\",\n \"shamrock\",\n \"shank\",\n \"shanty\",\n \"shape\",\n \"shaping\",\n \"share\",\n \"sharpener\",\n \"sharper\",\n \"sharpie\",\n \"sharply\",\n \"sharpness\",\n \"shawl\",\n \"sheath\",\n \"shed\",\n \"sheep\",\n \"sheet\",\n \"shelf\",\n \"shell\",\n \"shelter\",\n \"shelve\",\n \"shelving\",\n \"sherry\",\n \"shield\",\n \"shifter\",\n \"shifting\",\n \"shiftless\",\n \"shifty\",\n \"shimmer\",\n \"shimmy\",\n \"shindig\",\n \"shine\",\n \"shingle\",\n \"shininess\",\n \"shining\",\n \"shiny\",\n \"ship\",\n \"shirt\",\n \"shivering\",\n \"shock\",\n \"shone\",\n \"shoplift\",\n \"shopper\",\n \"shopping\",\n \"shoptalk\",\n \"shore\",\n \"shortage\",\n \"shortcake\",\n \"shortcut\",\n \"shorten\",\n \"shorter\",\n \"shorthand\",\n \"shortlist\",\n \"shortly\",\n \"shortness\",\n \"shorts\",\n \"shortwave\",\n \"shorty\",\n \"shout\",\n \"shove\",\n \"showbiz\",\n \"showcase\",\n \"showdown\",\n \"shower\",\n \"showgirl\",\n \"showing\",\n \"showman\",\n \"shown\",\n \"showoff\",\n \"showpiece\",\n \"showplace\",\n \"showroom\",\n \"showy\",\n \"shrank\",\n \"shrapnel\",\n \"shredder\",\n \"shredding\",\n \"shrewdly\",\n \"shriek\",\n \"shrill\",\n \"shrimp\",\n \"shrine\",\n \"shrink\",\n \"shrivel\",\n \"shrouded\",\n \"shrubbery\",\n \"shrubs\",\n \"shrug\",\n \"shrunk\",\n \"shucking\",\n \"shudder\",\n \"shuffle\",\n \"shuffling\",\n \"shun\",\n \"shush\",\n \"shut\",\n \"shy\",\n \"siamese\",\n \"siberian\",\n \"sibling\",\n \"siding\",\n \"sierra\",\n \"siesta\",\n \"sift\",\n \"sighing\",\n \"silenced\",\n \"silencer\",\n \"silent\",\n \"silica\",\n \"silicon\",\n \"silk\",\n \"silliness\",\n \"silly\",\n \"silo\",\n \"silt\",\n \"silver\",\n \"similarly\",\n \"simile\",\n \"simmering\",\n \"simple\",\n \"simplify\",\n \"simply\",\n \"sincere\",\n \"sincerity\",\n \"singer\",\n \"singing\",\n \"single\",\n \"singular\",\n \"sinister\",\n \"sinless\",\n \"sinner\",\n \"sinuous\",\n \"sip\",\n \"siren\",\n \"sister\",\n \"sitcom\",\n \"sitter\",\n \"sitting\",\n \"situated\",\n \"situation\",\n \"sixfold\",\n \"sixteen\",\n \"sixth\",\n \"sixties\",\n \"sixtieth\",\n \"sixtyfold\",\n \"sizable\",\n \"sizably\",\n \"size\",\n \"sizing\",\n \"sizzle\",\n \"sizzling\",\n \"skater\",\n \"skating\",\n \"skedaddle\",\n \"skeletal\",\n \"skeleton\",\n \"skeptic\",\n \"sketch\",\n \"skewed\",\n \"skewer\",\n \"skid\",\n \"skied\",\n \"skier\",\n \"skies\",\n \"skiing\",\n \"skilled\",\n \"skillet\",\n \"skillful\",\n \"skimmed\",\n \"skimmer\",\n \"skimming\",\n \"skimpily\",\n \"skincare\",\n \"skinhead\",\n \"skinless\",\n \"skinning\",\n \"skinny\",\n \"skintight\",\n \"skipper\",\n \"skipping\",\n \"skirmish\",\n \"skirt\",\n \"skittle\",\n \"skydiver\",\n \"skylight\",\n \"skyline\",\n \"skype\",\n \"skyrocket\",\n \"skyward\",\n \"slab\",\n \"slacked\",\n \"slacker\",\n \"slacking\",\n \"slackness\",\n \"slacks\",\n \"slain\",\n \"slam\",\n \"slander\",\n \"slang\",\n \"slapping\",\n \"slapstick\",\n \"slashed\",\n \"slashing\",\n \"slate\",\n \"slather\",\n \"slaw\",\n \"sled\",\n \"sleek\",\n \"sleep\",\n \"sleet\",\n \"sleeve\",\n \"slept\",\n \"sliceable\",\n \"sliced\",\n \"slicer\",\n \"slicing\",\n \"slick\",\n \"slider\",\n \"slideshow\",\n \"sliding\",\n \"slighted\",\n \"slighting\",\n \"slightly\",\n \"slimness\",\n \"slimy\",\n \"slinging\",\n \"slingshot\",\n \"slinky\",\n \"slip\",\n \"slit\",\n \"sliver\",\n \"slobbery\",\n \"slogan\",\n \"sloped\",\n \"sloping\",\n \"sloppily\",\n \"sloppy\",\n \"slot\",\n \"slouching\",\n \"slouchy\",\n \"sludge\",\n \"slug\",\n \"slum\",\n \"slurp\",\n \"slush\",\n \"sly\",\n \"small\",\n \"smartly\",\n \"smartness\",\n \"smasher\",\n \"smashing\",\n \"smashup\",\n \"smell\",\n \"smelting\",\n \"smile\",\n \"smilingly\",\n \"smirk\",\n \"smite\",\n \"smith\",\n \"smitten\",\n \"smock\",\n \"smog\",\n \"smoked\",\n \"smokeless\",\n \"smokiness\",\n \"smoking\",\n \"smoky\",\n \"smolder\",\n \"smooth\",\n \"smother\",\n \"smudge\",\n \"smudgy\",\n \"smuggler\",\n \"smuggling\",\n \"smugly\",\n \"smugness\",\n \"snack\",\n \"snagged\",\n \"snaking\",\n \"snap\",\n \"snare\",\n \"snarl\",\n \"snazzy\",\n \"sneak\",\n \"sneer\",\n \"sneeze\",\n \"sneezing\",\n \"snide\",\n \"sniff\",\n \"snippet\",\n \"snipping\",\n \"snitch\",\n \"snooper\",\n \"snooze\",\n \"snore\",\n \"snoring\",\n \"snorkel\",\n \"snort\",\n \"snout\",\n \"snowbird\",\n \"snowboard\",\n \"snowbound\",\n \"snowcap\",\n \"snowdrift\",\n \"snowdrop\",\n \"snowfall\",\n \"snowfield\",\n \"snowflake\",\n \"snowiness\",\n \"snowless\",\n \"snowman\",\n \"snowplow\",\n \"snowshoe\",\n \"snowstorm\",\n \"snowsuit\",\n \"snowy\",\n \"snub\",\n \"snuff\",\n \"snuggle\",\n \"snugly\",\n \"snugness\",\n \"speak\",\n \"spearfish\",\n \"spearhead\",\n \"spearman\",\n \"spearmint\",\n \"species\",\n \"specimen\",\n \"specked\",\n \"speckled\",\n \"specks\",\n \"spectacle\",\n \"spectator\",\n \"spectrum\",\n \"speculate\",\n \"speech\",\n \"speed\",\n \"spellbind\",\n \"speller\",\n \"spelling\",\n \"spendable\",\n \"spender\",\n \"spending\",\n \"spent\",\n \"spew\",\n \"sphere\",\n \"spherical\",\n \"sphinx\",\n \"spider\",\n \"spied\",\n \"spiffy\",\n \"spill\",\n \"spilt\",\n \"spinach\",\n \"spinal\",\n \"spindle\",\n \"spinner\",\n \"spinning\",\n \"spinout\",\n \"spinster\",\n \"spiny\",\n \"spiral\",\n \"spirited\",\n \"spiritism\",\n \"spirits\",\n \"spiritual\",\n \"splashed\",\n \"splashing\",\n \"splashy\",\n \"splatter\",\n \"spleen\",\n \"splendid\",\n \"splendor\",\n \"splice\",\n \"splicing\",\n \"splinter\",\n \"splotchy\",\n \"splurge\",\n \"spoilage\",\n \"spoiled\",\n \"spoiler\",\n \"spoiling\",\n \"spoils\",\n \"spoken\",\n \"spokesman\",\n \"sponge\",\n \"spongy\",\n \"sponsor\",\n \"spoof\",\n \"spookily\",\n \"spooky\",\n \"spool\",\n \"spoon\",\n \"spore\",\n \"sporting\",\n \"sports\",\n \"sporty\",\n \"spotless\",\n \"spotlight\",\n \"spotted\",\n \"spotter\",\n \"spotting\",\n \"spotty\",\n \"spousal\",\n \"spouse\",\n \"spout\",\n \"sprain\",\n \"sprang\",\n \"sprawl\",\n \"spray\",\n \"spree\",\n \"sprig\",\n \"spring\",\n \"sprinkled\",\n \"sprinkler\",\n \"sprint\",\n \"sprite\",\n \"sprout\",\n \"spruce\",\n \"sprung\",\n \"spry\",\n \"spud\",\n \"spur\",\n \"sputter\",\n \"spyglass\",\n \"squabble\",\n \"squad\",\n \"squall\",\n \"squander\",\n \"squash\",\n \"squatted\",\n \"squatter\",\n \"squatting\",\n \"squeak\",\n \"squealer\",\n \"squealing\",\n \"squeamish\",\n \"squeegee\",\n \"squeeze\",\n \"squeezing\",\n \"squid\",\n \"squiggle\",\n \"squiggly\",\n \"squint\",\n \"squire\",\n \"squirt\",\n \"squishier\",\n \"squishy\",\n \"stability\",\n \"stabilize\",\n \"stable\",\n \"stack\",\n \"stadium\",\n \"staff\",\n \"stage\",\n \"staging\",\n \"stagnant\",\n \"stagnate\",\n \"stainable\",\n \"stained\",\n \"staining\",\n \"stainless\",\n \"stalemate\",\n \"staleness\",\n \"stalling\",\n \"stallion\",\n \"stamina\",\n \"stammer\",\n \"stamp\",\n \"stand\",\n \"stank\",\n \"staple\",\n \"stapling\",\n \"starboard\",\n \"starch\",\n \"stardom\",\n \"stardust\",\n \"starfish\",\n \"stargazer\",\n \"staring\",\n \"stark\",\n \"starless\",\n \"starlet\",\n \"starlight\",\n \"starlit\",\n \"starring\",\n \"starry\",\n \"starship\",\n \"starter\",\n \"starting\",\n \"startle\",\n \"startling\",\n \"startup\",\n \"starved\",\n \"starving\",\n \"stash\",\n \"state\",\n \"static\",\n \"statistic\",\n \"statue\",\n \"stature\",\n \"status\",\n \"statute\",\n \"statutory\",\n \"staunch\",\n \"stays\",\n \"steadfast\",\n \"steadier\",\n \"steadily\",\n \"steadying\",\n \"steam\",\n \"steed\",\n \"steep\",\n \"steerable\",\n \"steering\",\n \"steersman\",\n \"stegosaur\",\n \"stellar\",\n \"stem\",\n \"stench\",\n \"stencil\",\n \"step\",\n \"stereo\",\n \"sterile\",\n \"sterility\",\n \"sterilize\",\n \"sterling\",\n \"sternness\",\n \"sternum\",\n \"stew\",\n \"stick\",\n \"stiffen\",\n \"stiffly\",\n \"stiffness\",\n \"stifle\",\n \"stifling\",\n \"stillness\",\n \"stilt\",\n \"stimulant\",\n \"stimulate\",\n \"stimuli\",\n \"stimulus\",\n \"stinger\",\n \"stingily\",\n \"stinging\",\n \"stingray\",\n \"stingy\",\n \"stinking\",\n \"stinky\",\n \"stipend\",\n \"stipulate\",\n \"stir\",\n \"stitch\",\n \"stock\",\n \"stoic\",\n \"stoke\",\n \"stole\",\n \"stomp\",\n \"stonewall\",\n \"stoneware\",\n \"stonework\",\n \"stoning\",\n \"stony\",\n \"stood\",\n \"stooge\",\n \"stool\",\n \"stoop\",\n \"stoplight\",\n \"stoppable\",\n \"stoppage\",\n \"stopped\",\n \"stopper\",\n \"stopping\",\n \"stopwatch\",\n \"storable\",\n \"storage\",\n \"storeroom\",\n \"storewide\",\n \"storm\",\n \"stout\",\n \"stove\",\n \"stowaway\",\n \"stowing\",\n \"straddle\",\n \"straggler\",\n \"strained\",\n \"strainer\",\n \"straining\",\n \"strangely\",\n \"stranger\",\n \"strangle\",\n \"strategic\",\n \"strategy\",\n \"stratus\",\n \"straw\",\n \"stray\",\n \"streak\",\n \"stream\",\n \"street\",\n \"strength\",\n \"strenuous\",\n \"strep\",\n \"stress\",\n \"stretch\",\n \"strewn\",\n \"stricken\",\n \"strict\",\n \"stride\",\n \"strife\",\n \"strike\",\n \"striking\",\n \"strive\",\n \"striving\",\n \"strobe\",\n \"strode\",\n \"stroller\",\n \"strongbox\",\n \"strongly\",\n \"strongman\",\n \"struck\",\n \"structure\",\n \"strudel\",\n \"struggle\",\n \"strum\",\n \"strung\",\n \"strut\",\n \"stubbed\",\n \"stubble\",\n \"stubbly\",\n \"stubborn\",\n \"stucco\",\n \"stuck\",\n \"student\",\n \"studied\",\n \"studio\",\n \"study\",\n \"stuffed\",\n \"stuffing\",\n \"stuffy\",\n \"stumble\",\n \"stumbling\",\n \"stump\",\n \"stung\",\n \"stunned\",\n \"stunner\",\n \"stunning\",\n \"stunt\",\n \"stupor\",\n \"sturdily\",\n \"sturdy\",\n \"styling\",\n \"stylishly\",\n \"stylist\",\n \"stylized\",\n \"stylus\",\n \"suave\",\n \"subarctic\",\n \"subatomic\",\n \"subdivide\",\n \"subdued\",\n \"subduing\",\n \"subfloor\",\n \"subgroup\",\n \"subheader\",\n \"subject\",\n \"sublease\",\n \"sublet\",\n \"sublevel\",\n \"sublime\",\n \"submarine\",\n \"submerge\",\n \"submersed\",\n \"submitter\",\n \"subpanel\",\n \"subpar\",\n \"subplot\",\n \"subprime\",\n \"subscribe\",\n \"subscript\",\n \"subsector\",\n \"subside\",\n \"subsiding\",\n \"subsidize\",\n \"subsidy\",\n \"subsoil\",\n \"subsonic\",\n \"substance\",\n \"subsystem\",\n \"subtext\",\n \"subtitle\",\n \"subtly\",\n \"subtotal\",\n \"subtract\",\n \"subtype\",\n \"suburb\",\n \"subway\",\n \"subwoofer\",\n \"subzero\",\n \"succulent\",\n \"such\",\n \"suction\",\n \"sudden\",\n \"sudoku\",\n \"suds\",\n \"sufferer\",\n \"suffering\",\n \"suffice\",\n \"suffix\",\n \"suffocate\",\n \"suffrage\",\n \"sugar\",\n \"suggest\",\n \"suing\",\n \"suitable\",\n \"suitably\",\n \"suitcase\",\n \"suitor\",\n \"sulfate\",\n \"sulfide\",\n \"sulfite\",\n \"sulfur\",\n \"sulk\",\n \"sullen\",\n \"sulphate\",\n \"sulphuric\",\n \"sultry\",\n \"superbowl\",\n \"superglue\",\n \"superhero\",\n \"superior\",\n \"superjet\",\n \"superman\",\n \"supermom\",\n \"supernova\",\n \"supervise\",\n \"supper\",\n \"supplier\",\n \"supply\",\n \"support\",\n \"supremacy\",\n \"supreme\",\n \"surcharge\",\n \"surely\",\n \"sureness\",\n \"surface\",\n \"surfacing\",\n \"surfboard\",\n \"surfer\",\n \"surgery\",\n \"surgical\",\n \"surging\",\n \"surname\",\n \"surpass\",\n \"surplus\",\n \"surprise\",\n \"surreal\",\n \"surrender\",\n \"surrogate\",\n \"surround\",\n \"survey\",\n \"survival\",\n \"survive\",\n \"surviving\",\n \"survivor\",\n \"sushi\",\n \"suspect\",\n \"suspend\",\n \"suspense\",\n \"sustained\",\n \"sustainer\",\n \"swab\",\n \"swaddling\",\n \"swagger\",\n \"swampland\",\n \"swan\",\n \"swapping\",\n \"swarm\",\n \"sway\",\n \"swear\",\n \"sweat\",\n \"sweep\",\n \"swell\",\n \"swept\",\n \"swerve\",\n \"swifter\",\n \"swiftly\",\n \"swiftness\",\n \"swimmable\",\n \"swimmer\",\n \"swimming\",\n \"swimsuit\",\n \"swimwear\",\n \"swinger\",\n \"swinging\",\n \"swipe\",\n \"swirl\",\n \"switch\",\n \"swivel\",\n \"swizzle\",\n \"swooned\",\n \"swoop\",\n \"swoosh\",\n \"swore\",\n \"sworn\",\n \"swung\",\n \"sycamore\",\n \"sympathy\",\n \"symphonic\",\n \"symphony\",\n \"symptom\",\n \"synapse\",\n \"syndrome\",\n \"synergy\",\n \"synopses\",\n \"synopsis\",\n \"synthesis\",\n \"synthetic\",\n \"syrup\",\n \"system\",\n \"t-shirt\",\n \"tabasco\",\n \"tabby\",\n \"tableful\",\n \"tables\",\n \"tablet\",\n \"tableware\",\n \"tabloid\",\n \"tackiness\",\n \"tacking\",\n \"tackle\",\n \"tackling\",\n \"tacky\",\n \"taco\",\n \"tactful\",\n \"tactical\",\n \"tactics\",\n \"tactile\",\n \"tactless\",\n \"tadpole\",\n \"taekwondo\",\n \"tag\",\n \"tainted\",\n \"take\",\n \"taking\",\n \"talcum\",\n \"talisman\",\n \"tall\",\n \"talon\",\n \"tamale\",\n \"tameness\",\n \"tamer\",\n \"tamper\",\n \"tank\",\n \"tanned\",\n \"tannery\",\n \"tanning\",\n \"tantrum\",\n \"tapeless\",\n \"tapered\",\n \"tapering\",\n \"tapestry\",\n \"tapioca\",\n \"tapping\",\n \"taps\",\n \"tarantula\",\n \"target\",\n \"tarmac\",\n \"tarnish\",\n \"tarot\",\n \"tartar\",\n \"tartly\",\n \"tartness\",\n \"task\",\n \"tassel\",\n \"taste\",\n \"tastiness\",\n \"tasting\",\n \"tasty\",\n \"tattered\",\n \"tattle\",\n \"tattling\",\n \"tattoo\",\n \"taunt\",\n \"tavern\",\n \"thank\",\n \"that\",\n \"thaw\",\n \"theater\",\n \"theatrics\",\n \"thee\",\n \"theft\",\n \"theme\",\n \"theology\",\n \"theorize\",\n \"thermal\",\n \"thermos\",\n \"thesaurus\",\n \"these\",\n \"thesis\",\n \"thespian\",\n \"thicken\",\n \"thicket\",\n \"thickness\",\n \"thieving\",\n \"thievish\",\n \"thigh\",\n \"thimble\",\n \"thing\",\n \"think\",\n \"thinly\",\n \"thinner\",\n \"thinness\",\n \"thinning\",\n \"thirstily\",\n \"thirsting\",\n \"thirsty\",\n \"thirteen\",\n \"thirty\",\n \"thong\",\n \"thorn\",\n \"those\",\n \"thousand\",\n \"thrash\",\n \"thread\",\n \"threaten\",\n \"threefold\",\n \"thrift\",\n \"thrill\",\n \"thrive\",\n \"thriving\",\n \"throat\",\n \"throbbing\",\n \"throng\",\n \"throttle\",\n \"throwaway\",\n \"throwback\",\n \"thrower\",\n \"throwing\",\n \"thud\",\n \"thumb\",\n \"thumping\",\n \"thursday\",\n \"thus\",\n \"thwarting\",\n \"thyself\",\n \"tiara\",\n \"tibia\",\n \"tidal\",\n \"tidbit\",\n \"tidiness\",\n \"tidings\",\n \"tidy\",\n \"tiger\",\n \"tighten\",\n \"tightly\",\n \"tightness\",\n \"tightrope\",\n \"tightwad\",\n \"tigress\",\n \"tile\",\n \"tiling\",\n \"till\",\n \"tilt\",\n \"timid\",\n \"timing\",\n \"timothy\",\n \"tinderbox\",\n \"tinfoil\",\n \"tingle\",\n \"tingling\",\n \"tingly\",\n \"tinker\",\n \"tinkling\",\n \"tinsel\",\n \"tinsmith\",\n \"tint\",\n \"tinwork\",\n \"tiny\",\n \"tipoff\",\n \"tipped\",\n \"tipper\",\n \"tipping\",\n \"tiptoeing\",\n \"tiptop\",\n \"tiring\",\n \"tissue\",\n \"trace\",\n \"tracing\",\n \"track\",\n \"traction\",\n \"tractor\",\n \"trade\",\n \"trading\",\n \"tradition\",\n \"traffic\",\n \"tragedy\",\n \"trailing\",\n \"trailside\",\n \"train\",\n \"traitor\",\n \"trance\",\n \"tranquil\",\n \"transfer\",\n \"transform\",\n \"translate\",\n \"transpire\",\n \"transport\",\n \"transpose\",\n \"trapdoor\",\n \"trapeze\",\n \"trapezoid\",\n \"trapped\",\n \"trapper\",\n \"trapping\",\n \"traps\",\n \"trash\",\n \"travel\",\n \"traverse\",\n \"travesty\",\n \"tray\",\n \"treachery\",\n \"treading\",\n \"treadmill\",\n \"treason\",\n \"treat\",\n \"treble\",\n \"tree\",\n \"trekker\",\n \"tremble\",\n \"trembling\",\n \"tremor\",\n \"trench\",\n \"trend\",\n \"trespass\",\n \"triage\",\n \"trial\",\n \"triangle\",\n \"tribesman\",\n \"tribunal\",\n \"tribune\",\n \"tributary\",\n \"tribute\",\n \"triceps\",\n \"trickery\",\n \"trickily\",\n \"tricking\",\n \"trickle\",\n \"trickster\",\n \"tricky\",\n \"tricolor\",\n \"tricycle\",\n \"trident\",\n \"tried\",\n \"trifle\",\n \"trifocals\",\n \"trillion\",\n \"trilogy\",\n \"trimester\",\n \"trimmer\",\n \"trimming\",\n \"trimness\",\n \"trinity\",\n \"trio\",\n \"tripod\",\n \"tripping\",\n \"triumph\",\n \"trivial\",\n \"trodden\",\n \"trolling\",\n \"trombone\",\n \"trophy\",\n \"tropical\",\n \"tropics\",\n \"trouble\",\n \"troubling\",\n \"trough\",\n \"trousers\",\n \"trout\",\n \"trowel\",\n \"truce\",\n \"truck\",\n \"truffle\",\n \"trump\",\n \"trunks\",\n \"trustable\",\n \"trustee\",\n \"trustful\",\n \"trusting\",\n \"trustless\",\n \"truth\",\n \"try\",\n \"tubby\",\n \"tubeless\",\n \"tubular\",\n \"tucking\",\n \"tuesday\",\n \"tug\",\n \"tuition\",\n \"tulip\",\n \"tumble\",\n \"tumbling\",\n \"tummy\",\n \"turban\",\n \"turbine\",\n \"turbofan\",\n \"turbojet\",\n \"turbulent\",\n \"turf\",\n \"turkey\",\n \"turmoil\",\n \"turret\",\n \"turtle\",\n \"tusk\",\n \"tutor\",\n \"tutu\",\n \"tux\",\n \"tweak\",\n \"tweed\",\n \"tweet\",\n \"tweezers\",\n \"twelve\",\n \"twentieth\",\n \"twenty\",\n \"twerp\",\n \"twice\",\n \"twiddle\",\n \"twiddling\",\n \"twig\",\n \"twilight\",\n \"twine\",\n \"twins\",\n \"twirl\",\n \"twistable\",\n \"twisted\",\n \"twister\",\n \"twisting\",\n \"twisty\",\n \"twitch\",\n \"twitter\",\n \"tycoon\",\n \"tying\",\n \"tyke\",\n \"udder\",\n \"ultimate\",\n \"ultimatum\",\n \"ultra\",\n \"umbilical\",\n \"umbrella\",\n \"umpire\",\n \"unabashed\",\n \"unable\",\n \"unadorned\",\n \"unadvised\",\n \"unafraid\",\n \"unaired\",\n \"unaligned\",\n \"unaltered\",\n \"unarmored\",\n \"unashamed\",\n \"unaudited\",\n \"unawake\",\n \"unaware\",\n \"unbaked\",\n \"unbalance\",\n \"unbeaten\",\n \"unbend\",\n \"unbent\",\n \"unbiased\",\n \"unbitten\",\n \"unblended\",\n \"unblessed\",\n \"unblock\",\n \"unbolted\",\n \"unbounded\",\n \"unboxed\",\n \"unbraided\",\n \"unbridle\",\n \"unbroken\",\n \"unbuckled\",\n \"unbundle\",\n \"unburned\",\n \"unbutton\",\n \"uncanny\",\n \"uncapped\",\n \"uncaring\",\n \"uncertain\",\n \"unchain\",\n \"unchanged\",\n \"uncharted\",\n \"uncheck\",\n \"uncivil\",\n \"unclad\",\n \"unclaimed\",\n \"unclamped\",\n \"unclasp\",\n \"uncle\",\n \"unclip\",\n \"uncloak\",\n \"unclog\",\n \"unclothed\",\n \"uncoated\",\n \"uncoiled\",\n \"uncolored\",\n \"uncombed\",\n \"uncommon\",\n \"uncooked\",\n \"uncork\",\n \"uncorrupt\",\n \"uncounted\",\n \"uncouple\",\n \"uncouth\",\n \"uncover\",\n \"uncross\",\n \"uncrown\",\n \"uncrushed\",\n \"uncured\",\n \"uncurious\",\n \"uncurled\",\n \"uncut\",\n \"undamaged\",\n \"undated\",\n \"undaunted\",\n \"undead\",\n \"undecided\",\n \"undefined\",\n \"underage\",\n \"underarm\",\n \"undercoat\",\n \"undercook\",\n \"undercut\",\n \"underdog\",\n \"underdone\",\n \"underfed\",\n \"underfeed\",\n \"underfoot\",\n \"undergo\",\n \"undergrad\",\n \"underhand\",\n \"underline\",\n \"underling\",\n \"undermine\",\n \"undermost\",\n \"underpaid\",\n \"underpass\",\n \"underpay\",\n \"underrate\",\n \"undertake\",\n \"undertone\",\n \"undertook\",\n \"undertow\",\n \"underuse\",\n \"underwear\",\n \"underwent\",\n \"underwire\",\n \"undesired\",\n \"undiluted\",\n \"undivided\",\n \"undocked\",\n \"undoing\",\n \"undone\",\n \"undrafted\",\n \"undress\",\n \"undrilled\",\n \"undusted\",\n \"undying\",\n \"unearned\",\n \"unearth\",\n \"unease\",\n \"uneasily\",\n \"uneasy\",\n \"uneatable\",\n \"uneaten\",\n \"unedited\",\n \"unelected\",\n \"unending\",\n \"unengaged\",\n \"unenvied\",\n \"unequal\",\n \"unethical\",\n \"uneven\",\n \"unexpired\",\n \"unexposed\",\n \"unfailing\",\n \"unfair\",\n \"unfasten\",\n \"unfazed\",\n \"unfeeling\",\n \"unfiled\",\n \"unfilled\",\n \"unfitted\",\n \"unfitting\",\n \"unfixable\",\n \"unfixed\",\n \"unflawed\",\n \"unfocused\",\n \"unfold\",\n \"unfounded\",\n \"unframed\",\n \"unfreeze\",\n \"unfrosted\",\n \"unfrozen\",\n \"unfunded\",\n \"unglazed\",\n \"ungloved\",\n \"unglue\",\n \"ungodly\",\n \"ungraded\",\n \"ungreased\",\n \"unguarded\",\n \"unguided\",\n \"unhappily\",\n \"unhappy\",\n \"unharmed\",\n \"unhealthy\",\n \"unheard\",\n \"unhearing\",\n \"unheated\",\n \"unhelpful\",\n \"unhidden\",\n \"unhinge\",\n \"unhitched\",\n \"unholy\",\n \"unhook\",\n \"unicorn\",\n \"unicycle\",\n \"unified\",\n \"unifier\",\n \"uniformed\",\n \"uniformly\",\n \"unify\",\n \"unimpeded\",\n \"uninjured\",\n \"uninstall\",\n \"uninsured\",\n \"uninvited\",\n \"union\",\n \"uniquely\",\n \"unisexual\",\n \"unison\",\n \"unissued\",\n \"unit\",\n \"universal\",\n \"universe\",\n \"unjustly\",\n \"unkempt\",\n \"unkind\",\n \"unknotted\",\n \"unknowing\",\n \"unknown\",\n \"unlaced\",\n \"unlatch\",\n \"unlawful\",\n \"unleaded\",\n \"unlearned\",\n \"unleash\",\n \"unless\",\n \"unleveled\",\n \"unlighted\",\n \"unlikable\",\n \"unlimited\",\n \"unlined\",\n \"unlinked\",\n \"unlisted\",\n \"unlit\",\n \"unlivable\",\n \"unloaded\",\n \"unloader\",\n \"unlocked\",\n \"unlocking\",\n \"unlovable\",\n \"unloved\",\n \"unlovely\",\n \"unloving\",\n \"unluckily\",\n \"unlucky\",\n \"unmade\",\n \"unmanaged\",\n \"unmanned\",\n \"unmapped\",\n \"unmarked\",\n \"unmasked\",\n \"unmasking\",\n \"unmatched\",\n \"unmindful\",\n \"unmixable\",\n \"unmixed\",\n \"unmolded\",\n \"unmoral\",\n \"unmovable\",\n \"unmoved\",\n \"unmoving\",\n \"unnamable\",\n \"unnamed\",\n \"unnatural\",\n \"unneeded\",\n \"unnerve\",\n \"unnerving\",\n \"unnoticed\",\n \"unopened\",\n \"unopposed\",\n \"unpack\",\n \"unpadded\",\n \"unpaid\",\n \"unpainted\",\n \"unpaired\",\n \"unpaved\",\n \"unpeeled\",\n \"unpicked\",\n \"unpiloted\",\n \"unpinned\",\n \"unplanned\",\n \"unplanted\",\n \"unpleased\",\n \"unpledged\",\n \"unplowed\",\n \"unplug\",\n \"unpopular\",\n \"unproven\",\n \"unquote\",\n \"unranked\",\n \"unrated\",\n \"unraveled\",\n \"unreached\",\n \"unread\",\n \"unreal\",\n \"unreeling\",\n \"unrefined\",\n \"unrelated\",\n \"unrented\",\n \"unrest\",\n \"unretired\",\n \"unrevised\",\n \"unrigged\",\n \"unripe\",\n \"unrivaled\",\n \"unroasted\",\n \"unrobed\",\n \"unroll\",\n \"unruffled\",\n \"unruly\",\n \"unrushed\",\n \"unsaddle\",\n \"unsafe\",\n \"unsaid\",\n \"unsalted\",\n \"unsaved\",\n \"unsavory\",\n \"unscathed\",\n \"unscented\",\n \"unscrew\",\n \"unsealed\",\n \"unseated\",\n \"unsecured\",\n \"unseeing\",\n \"unseemly\",\n \"unseen\",\n \"unselect\",\n \"unselfish\",\n \"unsent\",\n \"unsettled\",\n \"unshackle\",\n \"unshaken\",\n \"unshaved\",\n \"unshaven\",\n \"unsheathe\",\n \"unshipped\",\n \"unsightly\",\n \"unsigned\",\n \"unskilled\",\n \"unsliced\",\n \"unsmooth\",\n \"unsnap\",\n \"unsocial\",\n \"unsoiled\",\n \"unsold\",\n \"unsolved\",\n \"unsorted\",\n \"unspoiled\",\n \"unspoken\",\n \"unstable\",\n \"unstaffed\",\n \"unstamped\",\n \"unsteady\",\n \"unsterile\",\n \"unstirred\",\n \"unstitch\",\n \"unstopped\",\n \"unstuck\",\n \"unstuffed\",\n \"unstylish\",\n \"unsubtle\",\n \"unsubtly\",\n \"unsuited\",\n \"unsure\",\n \"unsworn\",\n \"untagged\",\n \"untainted\",\n \"untaken\",\n \"untamed\",\n \"untangled\",\n \"untapped\",\n \"untaxed\",\n \"unthawed\",\n \"unthread\",\n \"untidy\",\n \"untie\",\n \"until\",\n \"untimed\",\n \"untimely\",\n \"untitled\",\n \"untoasted\",\n \"untold\",\n \"untouched\",\n \"untracked\",\n \"untrained\",\n \"untreated\",\n \"untried\",\n \"untrimmed\",\n \"untrue\",\n \"untruth\",\n \"unturned\",\n \"untwist\",\n \"untying\",\n \"unusable\",\n \"unused\",\n \"unusual\",\n \"unvalued\",\n \"unvaried\",\n \"unvarying\",\n \"unveiled\",\n \"unveiling\",\n \"unvented\",\n \"unviable\",\n \"unvisited\",\n \"unvocal\",\n \"unwanted\",\n \"unwarlike\",\n \"unwary\",\n \"unwashed\",\n \"unwatched\",\n \"unweave\",\n \"unwed\",\n \"unwelcome\",\n \"unwell\",\n \"unwieldy\",\n \"unwilling\",\n \"unwind\",\n \"unwired\",\n \"unwitting\",\n \"unwomanly\",\n \"unworldly\",\n \"unworn\",\n \"unworried\",\n \"unworthy\",\n \"unwound\",\n \"unwoven\",\n \"unwrapped\",\n \"unwritten\",\n \"unzip\",\n \"upbeat\",\n \"upchuck\",\n \"upcoming\",\n \"upcountry\",\n \"update\",\n \"upfront\",\n \"upgrade\",\n \"upheaval\",\n \"upheld\",\n \"uphill\",\n \"uphold\",\n \"uplifted\",\n \"uplifting\",\n \"upload\",\n \"upon\",\n \"upper\",\n \"upright\",\n \"uprising\",\n \"upriver\",\n \"uproar\",\n \"uproot\",\n \"upscale\",\n \"upside\",\n \"upstage\",\n \"upstairs\",\n \"upstart\",\n \"upstate\",\n \"upstream\",\n \"upstroke\",\n \"upswing\",\n \"uptake\",\n \"uptight\",\n \"uptown\",\n \"upturned\",\n \"upward\",\n \"upwind\",\n \"uranium\",\n \"urban\",\n \"urchin\",\n \"urethane\",\n \"urgency\",\n \"urgent\",\n \"urging\",\n \"urologist\",\n \"urology\",\n \"usable\",\n \"usage\",\n \"useable\",\n \"used\",\n \"uselessly\",\n \"user\",\n \"usher\",\n \"usual\",\n \"utensil\",\n \"utility\",\n \"utilize\",\n \"utmost\",\n \"utopia\",\n \"utter\",\n \"vacancy\",\n \"vacant\",\n \"vacate\",\n \"vacation\",\n \"vagabond\",\n \"vagrancy\",\n \"vagrantly\",\n \"vaguely\",\n \"vagueness\",\n \"valiant\",\n \"valid\",\n \"valium\",\n \"valley\",\n \"valuables\",\n \"value\",\n \"vanilla\",\n \"vanish\",\n \"vanity\",\n \"vanquish\",\n \"vantage\",\n \"vaporizer\",\n \"variable\",\n \"variably\",\n \"varied\",\n \"variety\",\n \"various\",\n \"varmint\",\n \"varnish\",\n \"varsity\",\n \"varying\",\n \"vascular\",\n \"vaseline\",\n \"vastly\",\n \"vastness\",\n \"veal\",\n \"vegan\",\n \"veggie\",\n \"vehicular\",\n \"velcro\",\n \"velocity\",\n \"velvet\",\n \"vendetta\",\n \"vending\",\n \"vendor\",\n \"veneering\",\n \"vengeful\",\n \"venomous\",\n \"ventricle\",\n \"venture\",\n \"venue\",\n \"venus\",\n \"verbalize\",\n \"verbally\",\n \"verbose\",\n \"verdict\",\n \"verify\",\n \"verse\",\n \"version\",\n \"versus\",\n \"vertebrae\",\n \"vertical\",\n \"vertigo\",\n \"very\",\n \"vessel\",\n \"vest\",\n \"veteran\",\n \"veto\",\n \"vexingly\",\n \"viability\",\n \"viable\",\n \"vibes\",\n \"vice\",\n \"vicinity\",\n \"victory\",\n \"video\",\n \"viewable\",\n \"viewer\",\n \"viewing\",\n \"viewless\",\n \"viewpoint\",\n \"vigorous\",\n \"village\",\n \"villain\",\n \"vindicate\",\n \"vineyard\",\n \"vintage\",\n \"violate\",\n \"violation\",\n \"violator\",\n \"violet\",\n \"violin\",\n \"viper\",\n \"viral\",\n \"virtual\",\n \"virtuous\",\n \"virus\",\n \"visa\",\n \"viscosity\",\n \"viscous\",\n \"viselike\",\n \"visible\",\n \"visibly\",\n \"vision\",\n \"visiting\",\n \"visitor\",\n \"visor\",\n \"vista\",\n \"vitality\",\n \"vitalize\",\n \"vitally\",\n \"vitamins\",\n \"vivacious\",\n \"vividly\",\n \"vividness\",\n \"vixen\",\n \"vocalist\",\n \"vocalize\",\n \"vocally\",\n \"vocation\",\n \"voice\",\n \"voicing\",\n \"void\",\n \"volatile\",\n \"volley\",\n \"voltage\",\n \"volumes\",\n \"voter\",\n \"voting\",\n \"voucher\",\n \"vowed\",\n \"vowel\",\n \"voyage\",\n \"wackiness\",\n \"wad\",\n \"wafer\",\n \"waffle\",\n \"waged\",\n \"wager\",\n \"wages\",\n \"waggle\",\n \"wagon\",\n \"wake\",\n \"waking\",\n \"walk\",\n \"walmart\",\n \"walnut\",\n \"walrus\",\n \"waltz\",\n \"wand\",\n \"wannabe\",\n \"wanted\",\n \"wanting\",\n \"wasabi\",\n \"washable\",\n \"washbasin\",\n \"washboard\",\n \"washbowl\",\n \"washcloth\",\n \"washday\",\n \"washed\",\n \"washer\",\n \"washhouse\",\n \"washing\",\n \"washout\",\n \"washroom\",\n \"washstand\",\n \"washtub\",\n \"wasp\",\n \"wasting\",\n \"watch\",\n \"water\",\n \"waviness\",\n \"waving\",\n \"wavy\",\n \"whacking\",\n \"whacky\",\n \"wham\",\n \"wharf\",\n \"wheat\",\n \"whenever\",\n \"whiff\",\n \"whimsical\",\n \"whinny\",\n \"whiny\",\n \"whisking\",\n \"whoever\",\n \"whole\",\n \"whomever\",\n \"whoopee\",\n \"whooping\",\n \"whoops\",\n \"why\",\n \"wick\",\n \"widely\",\n \"widen\",\n \"widget\",\n \"widow\",\n \"width\",\n \"wieldable\",\n \"wielder\",\n \"wife\",\n \"wifi\",\n \"wikipedia\",\n \"wildcard\",\n \"wildcat\",\n \"wilder\",\n \"wildfire\",\n \"wildfowl\",\n \"wildland\",\n \"wildlife\",\n \"wildly\",\n \"wildness\",\n \"willed\",\n \"willfully\",\n \"willing\",\n \"willow\",\n \"willpower\",\n \"wilt\",\n \"wimp\",\n \"wince\",\n \"wincing\",\n \"wind\",\n \"wing\",\n \"winking\",\n \"winner\",\n \"winnings\",\n \"winter\",\n \"wipe\",\n \"wired\",\n \"wireless\",\n \"wiring\",\n \"wiry\",\n \"wisdom\",\n \"wise\",\n \"wish\",\n \"wisplike\",\n \"wispy\",\n \"wistful\",\n \"wizard\",\n \"wobble\",\n \"wobbling\",\n \"wobbly\",\n \"wok\",\n \"wolf\",\n \"wolverine\",\n \"womanhood\",\n \"womankind\",\n \"womanless\",\n \"womanlike\",\n \"womanly\",\n \"womb\",\n \"woof\",\n \"wooing\",\n \"wool\",\n \"woozy\",\n \"word\",\n \"work\",\n \"worried\",\n \"worrier\",\n \"worrisome\",\n \"worry\",\n \"worsening\",\n \"worshiper\",\n \"worst\",\n \"wound\",\n \"woven\",\n \"wow\",\n \"wrangle\",\n \"wrath\",\n \"wreath\",\n \"wreckage\",\n \"wrecker\",\n \"wrecking\",\n \"wrench\",\n \"wriggle\",\n \"wriggly\",\n \"wrinkle\",\n \"wrinkly\",\n \"wrist\",\n \"writing\",\n \"written\",\n \"wrongdoer\",\n \"wronged\",\n \"wrongful\",\n \"wrongly\",\n \"wrongness\",\n \"wrought\",\n \"xbox\",\n \"xerox\",\n \"yahoo\",\n \"yam\",\n \"yanking\",\n \"yapping\",\n \"yard\",\n \"yarn\",\n \"yeah\",\n \"yearbook\",\n \"yearling\",\n \"yearly\",\n \"yearning\",\n \"yeast\",\n \"yelling\",\n \"yelp\",\n \"yen\",\n \"yesterday\",\n \"yiddish\",\n \"yield\",\n \"yin\",\n \"yippee\",\n \"yo-yo\",\n \"yodel\",\n \"yoga\",\n \"yogurt\",\n \"yonder\",\n \"yoyo\",\n \"yummy\",\n \"zap\",\n \"zealous\",\n \"zebra\",\n \"zen\",\n \"zeppelin\",\n \"zero\",\n \"zestfully\",\n \"zesty\",\n \"zigzagged\",\n \"zipfile\",\n \"zipping\",\n \"zippy\",\n \"zips\",\n \"zit\",\n \"zodiac\",\n \"zombie\",\n \"zone\",\n \"zoning\",\n \"zookeeper\",\n \"zoologist\",\n \"zoology\",\n \"zoom\",\n];\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { EncryptedOrganizationKeyData } from \"../data/encrypted-organization-key.data\";\n\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport abstract class BaseEncryptedOrganizationKey {\n decrypt: (cryptoService: CryptoService) => Promise;\n\n static fromData(data: EncryptedOrganizationKeyData) {\n switch (data.type) {\n case \"organization\":\n return new EncryptedOrganizationKey(data.key);\n\n case \"provider\":\n return new ProviderEncryptedOrganizationKey(data.key, data.providerId);\n\n default:\n return null;\n }\n }\n}\n\nexport class EncryptedOrganizationKey implements BaseEncryptedOrganizationKey {\n constructor(private key: string) {}\n\n async decrypt(cryptoService: CryptoService) {\n const decValue = await cryptoService.rsaDecrypt(this.key);\n return new SymmetricCryptoKey(decValue);\n }\n\n toData(): EncryptedOrganizationKeyData {\n return {\n type: \"organization\",\n key: this.key,\n };\n }\n}\n\nexport class ProviderEncryptedOrganizationKey implements BaseEncryptedOrganizationKey {\n constructor(private key: string, private providerId: string) {}\n\n async decrypt(cryptoService: CryptoService) {\n const providerKey = await cryptoService.getProviderKey(this.providerId);\n const decValue = await cryptoService.decryptToBytes(new EncString(this.key), providerKey);\n return new SymmetricCryptoKey(decValue);\n }\n\n toData(): EncryptedOrganizationKeyData {\n return {\n type: \"provider\",\n key: this.key,\n providerId: this.providerId,\n };\n }\n}\n","import * as bigInt from \"big-integer\";\n\nimport { CryptoService as CryptoServiceAbstraction } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { EncryptService } from \"../abstractions/encrypt.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { EncryptionType } from \"../enums/encryptionType\";\nimport { HashPurpose } from \"../enums/hashPurpose\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { KeySuffixOptions } from \"../enums/keySuffixOptions\";\nimport { sequentialize } from \"../misc/sequentialize\";\nimport { Utils } from \"../misc/utils\";\nimport { EFFLongWordList } from \"../misc/wordlist\";\nimport { EncryptedOrganizationKeyData } from \"../models/data/encrypted-organization-key.data\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { BaseEncryptedOrganizationKey } from \"../models/domain/encrypted-organization-key\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { ProfileOrganizationResponse } from \"../models/response/profile-organization.response\";\nimport { ProfileProviderOrganizationResponse } from \"../models/response/profile-provider-organization.response\";\nimport { ProfileProviderResponse } from \"../models/response/profile-provider.response\";\n\nexport class CryptoService implements CryptoServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private encryptService: EncryptService,\n protected platformUtilService: PlatformUtilsService,\n protected logService: LogService,\n protected stateService: StateService\n ) {}\n\n async setKey(key: SymmetricCryptoKey, userId?: string): Promise {\n await this.stateService.setCryptoMasterKey(key, { userId: userId });\n await this.storeKey(key, userId);\n }\n\n async setKeyHash(keyHash: string): Promise {\n await this.stateService.setKeyHash(keyHash);\n }\n\n async setEncKey(encKey: string): Promise {\n if (encKey == null) {\n return;\n }\n\n await this.stateService.setDecryptedCryptoSymmetricKey(null);\n await this.stateService.setEncryptedCryptoSymmetricKey(encKey);\n }\n\n async setEncPrivateKey(encPrivateKey: string): Promise {\n if (encPrivateKey == null) {\n return;\n }\n\n await this.stateService.setDecryptedPrivateKey(null);\n await this.stateService.setEncryptedPrivateKey(encPrivateKey);\n }\n\n async setOrgKeys(\n orgs: ProfileOrganizationResponse[] = [],\n providerOrgs: ProfileProviderOrganizationResponse[] = []\n ): Promise {\n const encOrgKeyData: { [orgId: string]: EncryptedOrganizationKeyData } = {};\n\n orgs.forEach((org) => {\n encOrgKeyData[org.id] = {\n type: \"organization\",\n key: org.key,\n };\n });\n\n providerOrgs.forEach((org) => {\n encOrgKeyData[org.id] = {\n type: \"provider\",\n providerId: org.providerId,\n key: org.key,\n };\n });\n\n await this.stateService.setDecryptedOrganizationKeys(null);\n return await this.stateService.setEncryptedOrganizationKeys(encOrgKeyData);\n }\n\n async setProviderKeys(providers: ProfileProviderResponse[]): Promise {\n const providerKeys: any = {};\n providers.forEach((provider) => {\n providerKeys[provider.id] = provider.key;\n });\n\n await this.stateService.setDecryptedProviderKeys(null);\n return await this.stateService.setEncryptedProviderKeys(providerKeys);\n }\n\n async getKey(keySuffix?: KeySuffixOptions, userId?: string): Promise {\n const inMemoryKey = await this.stateService.getCryptoMasterKey({ userId: userId });\n\n if (inMemoryKey != null) {\n return inMemoryKey;\n }\n\n keySuffix ||= KeySuffixOptions.Auto;\n const symmetricKey = await this.getKeyFromStorage(keySuffix, userId);\n\n if (symmetricKey != null) {\n // TODO: Refactor here so get key doesn't also set key\n this.setKey(symmetricKey, userId);\n }\n\n return symmetricKey;\n }\n\n async getKeyFromStorage(\n keySuffix: KeySuffixOptions,\n userId?: string\n ): Promise {\n const key = await this.retrieveKeyFromStorage(keySuffix, userId);\n if (key != null) {\n const symmetricKey = new SymmetricCryptoKey(Utils.fromB64ToArray(key).buffer);\n\n if (!(await this.validateKey(symmetricKey))) {\n this.logService.warning(\"Wrong key, throwing away stored key\");\n await this.clearSecretKeyStore(userId);\n return null;\n }\n\n return symmetricKey;\n }\n return null;\n }\n\n async getKeyHash(): Promise {\n return await this.stateService.getKeyHash();\n }\n\n async compareAndUpdateKeyHash(masterPassword: string, key: SymmetricCryptoKey): Promise {\n const storedKeyHash = await this.getKeyHash();\n if (masterPassword != null && storedKeyHash != null) {\n const localKeyHash = await this.hashPassword(\n masterPassword,\n key,\n HashPurpose.LocalAuthorization\n );\n if (localKeyHash != null && storedKeyHash === localKeyHash) {\n return true;\n }\n\n // TODO: remove serverKeyHash check in 1-2 releases after everyone's keyHash has been updated\n const serverKeyHash = await this.hashPassword(\n masterPassword,\n key,\n HashPurpose.ServerAuthorization\n );\n if (serverKeyHash != null && storedKeyHash === serverKeyHash) {\n await this.setKeyHash(localKeyHash);\n return true;\n }\n }\n\n return false;\n }\n\n @sequentialize(() => \"getEncKey\")\n getEncKey(key: SymmetricCryptoKey = null): Promise {\n return this.getEncKeyHelper(key);\n }\n\n async getPublicKey(): Promise {\n const inMemoryPublicKey = await this.stateService.getPublicKey();\n if (inMemoryPublicKey != null) {\n return inMemoryPublicKey;\n }\n\n const privateKey = await this.getPrivateKey();\n if (privateKey == null) {\n return null;\n }\n\n const publicKey = await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n await this.stateService.setPublicKey(publicKey);\n return publicKey;\n }\n\n async getPrivateKey(): Promise {\n const decryptedPrivateKey = await this.stateService.getDecryptedPrivateKey();\n if (decryptedPrivateKey != null) {\n return decryptedPrivateKey;\n }\n\n const encPrivateKey = await this.stateService.getEncryptedPrivateKey();\n if (encPrivateKey == null) {\n return null;\n }\n\n const privateKey = await this.decryptToBytes(new EncString(encPrivateKey), null);\n await this.stateService.setDecryptedPrivateKey(privateKey);\n return privateKey;\n }\n\n async getFingerprint(userId: string, publicKey?: ArrayBuffer): Promise {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey === null) {\n throw new Error(\"No public key available.\");\n }\n const keyFingerprint = await this.cryptoFunctionService.hash(publicKey, \"sha256\");\n const userFingerprint = await this.cryptoFunctionService.hkdfExpand(\n keyFingerprint,\n userId,\n 32,\n \"sha256\"\n );\n return this.hashPhrase(userFingerprint);\n }\n\n @sequentialize(() => \"getOrgKeys\")\n async getOrgKeys(): Promise> {\n const result: Map = new Map();\n const decryptedOrganizationKeys = await this.stateService.getDecryptedOrganizationKeys();\n if (decryptedOrganizationKeys != null && decryptedOrganizationKeys.size > 0) {\n return decryptedOrganizationKeys;\n }\n\n const encOrgKeyData = await this.stateService.getEncryptedOrganizationKeys();\n if (encOrgKeyData == null) {\n return null;\n }\n\n let setKey = false;\n\n for (const orgId of Object.keys(encOrgKeyData)) {\n if (result.has(orgId)) {\n continue;\n }\n\n const encOrgKey = BaseEncryptedOrganizationKey.fromData(encOrgKeyData[orgId]);\n const decOrgKey = await encOrgKey.decrypt(this);\n result.set(orgId, decOrgKey);\n\n setKey = true;\n }\n\n if (setKey) {\n await this.stateService.setDecryptedOrganizationKeys(result);\n }\n\n return result;\n }\n\n async getOrgKey(orgId: string): Promise {\n if (orgId == null) {\n return null;\n }\n\n const orgKeys = await this.getOrgKeys();\n if (orgKeys == null || !orgKeys.has(orgId)) {\n return null;\n }\n\n return orgKeys.get(orgId);\n }\n\n @sequentialize(() => \"getProviderKeys\")\n async getProviderKeys(): Promise> {\n const providerKeys: Map = new Map();\n const decryptedProviderKeys = await this.stateService.getDecryptedProviderKeys();\n if (decryptedProviderKeys != null && decryptedProviderKeys.size > 0) {\n return decryptedProviderKeys;\n }\n\n const encProviderKeys = await this.stateService.getEncryptedProviderKeys();\n if (encProviderKeys == null) {\n return null;\n }\n\n let setKey = false;\n\n for (const orgId in encProviderKeys) {\n // eslint-disable-next-line\n if (!encProviderKeys.hasOwnProperty(orgId)) {\n continue;\n }\n\n const decValue = await this.rsaDecrypt(encProviderKeys[orgId]);\n providerKeys.set(orgId, new SymmetricCryptoKey(decValue));\n setKey = true;\n }\n\n if (setKey) {\n await this.stateService.setDecryptedProviderKeys(providerKeys);\n }\n\n return providerKeys;\n }\n\n async getProviderKey(providerId: string): Promise {\n if (providerId == null) {\n return null;\n }\n\n const providerKeys = await this.getProviderKeys();\n if (providerKeys == null || !providerKeys.has(providerId)) {\n return null;\n }\n\n return providerKeys.get(providerId);\n }\n\n async hasKey(): Promise {\n return (\n (await this.hasKeyInMemory()) ||\n (await this.hasKeyStored(KeySuffixOptions.Auto)) ||\n (await this.hasKeyStored(KeySuffixOptions.Biometric))\n );\n }\n\n async hasKeyInMemory(userId?: string): Promise {\n return (await this.stateService.getCryptoMasterKey({ userId: userId })) != null;\n }\n\n async hasKeyStored(keySuffix: KeySuffixOptions, userId?: string): Promise {\n switch (keySuffix) {\n case KeySuffixOptions.Auto:\n return (await this.stateService.getCryptoMasterKeyAuto({ userId: userId })) != null;\n case KeySuffixOptions.Biometric:\n return (await this.stateService.hasCryptoMasterKeyBiometric({ userId: userId })) === true;\n default:\n return false;\n }\n }\n\n async hasEncKey(): Promise {\n return (await this.stateService.getEncryptedCryptoSymmetricKey()) != null;\n }\n\n async clearKey(clearSecretStorage = true, userId?: string): Promise {\n await this.stateService.setCryptoMasterKey(null, { userId: userId });\n if (clearSecretStorage) {\n await this.clearSecretKeyStore(userId);\n }\n }\n\n async clearStoredKey(keySuffix: KeySuffixOptions) {\n keySuffix === KeySuffixOptions.Auto\n ? await this.stateService.setCryptoMasterKeyAuto(null)\n : await this.stateService.setCryptoMasterKeyBiometric(null);\n }\n\n async clearKeyHash(userId?: string): Promise {\n return await this.stateService.setKeyHash(null, { userId: userId });\n }\n\n async clearEncKey(memoryOnly?: boolean, userId?: string): Promise {\n await this.stateService.setDecryptedCryptoSymmetricKey(null, { userId: userId });\n if (!memoryOnly) {\n await this.stateService.setEncryptedCryptoSymmetricKey(null, { userId: userId });\n }\n }\n\n async clearKeyPair(memoryOnly?: boolean, userId?: string): Promise {\n const keysToClear: Promise[] = [\n this.stateService.setDecryptedPrivateKey(null, { userId: userId }),\n this.stateService.setPublicKey(null, { userId: userId }),\n ];\n if (!memoryOnly) {\n keysToClear.push(this.stateService.setEncryptedPrivateKey(null, { userId: userId }));\n }\n return Promise.all(keysToClear);\n }\n\n async clearOrgKeys(memoryOnly?: boolean, userId?: string): Promise {\n await this.stateService.setDecryptedOrganizationKeys(null, { userId: userId });\n if (!memoryOnly) {\n await this.stateService.setEncryptedOrganizationKeys(null, { userId: userId });\n }\n }\n\n async clearProviderKeys(memoryOnly?: boolean, userId?: string): Promise {\n await this.stateService.setDecryptedProviderKeys(null, { userId: userId });\n if (!memoryOnly) {\n await this.stateService.setEncryptedProviderKeys(null, { userId: userId });\n }\n }\n\n async clearPinProtectedKey(userId?: string): Promise {\n return await this.stateService.setEncryptedPinProtected(null, { userId: userId });\n }\n\n async clearKeys(userId?: string): Promise {\n await this.clearKey(true, userId);\n await this.clearKeyHash(userId);\n await this.clearOrgKeys(false, userId);\n await this.clearProviderKeys(false, userId);\n await this.clearEncKey(false, userId);\n await this.clearKeyPair(false, userId);\n await this.clearPinProtectedKey(userId);\n }\n\n async toggleKey(): Promise {\n const key = await this.getKey();\n\n await this.setKey(key);\n }\n\n async makeKey(\n password: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number\n ): Promise {\n let key: ArrayBuffer = null;\n if (kdf == null || kdf === KdfType.PBKDF2_SHA256) {\n if (kdfIterations == null) {\n kdfIterations = 5000;\n } else if (kdfIterations < 5000) {\n throw new Error(\"PBKDF2 iteration minimum is 5000.\");\n }\n key = await this.cryptoFunctionService.pbkdf2(password, salt, \"sha256\", kdfIterations);\n } else {\n throw new Error(\"Unknown Kdf.\");\n }\n return new SymmetricCryptoKey(key);\n }\n\n async makeKeyFromPin(\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number,\n protectedKeyCs: EncString = null\n ): Promise {\n if (protectedKeyCs == null) {\n const pinProtectedKey = await this.stateService.getEncryptedPinProtected();\n if (pinProtectedKey == null) {\n throw new Error(\"No PIN protected key found.\");\n }\n protectedKeyCs = new EncString(pinProtectedKey);\n }\n const pinKey = await this.makePinKey(pin, salt, kdf, kdfIterations);\n const decKey = await this.decryptToBytes(protectedKeyCs, pinKey);\n return new SymmetricCryptoKey(decKey);\n }\n\n async makeShareKey(): Promise<[EncString, SymmetricCryptoKey]> {\n const shareKey = await this.cryptoFunctionService.randomBytes(64);\n const publicKey = await this.getPublicKey();\n const encShareKey = await this.rsaEncrypt(shareKey, publicKey);\n return [encShareKey, new SymmetricCryptoKey(shareKey)];\n }\n\n async makeKeyPair(key?: SymmetricCryptoKey): Promise<[string, EncString]> {\n const keyPair = await this.cryptoFunctionService.rsaGenerateKeyPair(2048);\n const publicB64 = Utils.fromBufferToB64(keyPair[0]);\n const privateEnc = await this.encrypt(keyPair[1], key);\n return [publicB64, privateEnc];\n }\n\n async makePinKey(\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number\n ): Promise {\n const pinKey = await this.makeKey(pin, salt, kdf, kdfIterations);\n return await this.stretchKey(pinKey);\n }\n\n async makeSendKey(keyMaterial: ArrayBuffer): Promise {\n const sendKey = await this.cryptoFunctionService.hkdf(\n keyMaterial,\n \"bitwarden-send\",\n \"send\",\n 64,\n \"sha256\"\n );\n return new SymmetricCryptoKey(sendKey);\n }\n\n async hashPassword(\n password: string,\n key: SymmetricCryptoKey,\n hashPurpose?: HashPurpose\n ): Promise {\n if (key == null) {\n key = await this.getKey();\n }\n if (password == null || key == null) {\n throw new Error(\"Invalid parameters.\");\n }\n\n const iterations = hashPurpose === HashPurpose.LocalAuthorization ? 2 : 1;\n const hash = await this.cryptoFunctionService.pbkdf2(key.key, password, \"sha256\", iterations);\n return Utils.fromBufferToB64(hash);\n }\n\n async makeEncKey(key: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, EncString]> {\n const theKey = await this.getKeyForUserEncryption(key);\n const encKey = await this.cryptoFunctionService.randomBytes(64);\n return this.buildEncKey(theKey, encKey);\n }\n\n async remakeEncKey(\n key: SymmetricCryptoKey,\n encKey?: SymmetricCryptoKey\n ): Promise<[SymmetricCryptoKey, EncString]> {\n if (encKey == null) {\n encKey = await this.getEncKey();\n }\n return this.buildEncKey(key, encKey.key);\n }\n\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.encrypt\n */\n async encrypt(plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n key = await this.getKeyForUserEncryption(key);\n return await this.encryptService.encrypt(plainValue, key);\n }\n\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.encryptToBytes\n */\n async encryptToBytes(plainValue: ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n key = await this.getKeyForUserEncryption(key);\n return this.encryptService.encryptToBytes(plainValue, key);\n }\n\n async rsaEncrypt(data: ArrayBuffer, publicKey?: ArrayBuffer): Promise {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey == null) {\n throw new Error(\"Public key unavailable.\");\n }\n\n const encBytes = await this.cryptoFunctionService.rsaEncrypt(data, publicKey, \"sha1\");\n return new EncString(EncryptionType.Rsa2048_OaepSha1_B64, Utils.fromBufferToB64(encBytes));\n }\n\n async rsaDecrypt(encValue: string, privateKeyValue?: ArrayBuffer): Promise {\n const headerPieces = encValue.split(\".\");\n let encType: EncryptionType = null;\n let encPieces: string[];\n\n if (headerPieces.length === 1) {\n encType = EncryptionType.Rsa2048_OaepSha256_B64;\n encPieces = [headerPieces[0]];\n } else if (headerPieces.length === 2) {\n try {\n encType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split(\"|\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_B64:\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64: // HmacSha256 types are deprecated\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error(\"encType unavailable.\");\n }\n\n if (encPieces == null || encPieces.length <= 0) {\n throw new Error(\"encPieces unavailable.\");\n }\n\n const data = Utils.fromB64ToArray(encPieces[0]).buffer;\n const privateKey = privateKeyValue ?? (await this.getPrivateKey());\n if (privateKey == null) {\n throw new Error(\"No private key.\");\n }\n\n let alg: \"sha1\" | \"sha256\" = \"sha1\";\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64:\n alg = \"sha256\";\n break;\n case EncryptionType.Rsa2048_OaepSha1_B64:\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error(\"encType unavailable.\");\n }\n\n return this.cryptoFunctionService.rsaDecrypt(data, privateKey, alg);\n }\n\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.decryptToBytes\n */\n async decryptToBytes(encString: EncString, key?: SymmetricCryptoKey): Promise {\n const keyForEnc = await this.getKeyForUserEncryption(key);\n return this.encryptService.decryptToBytes(encString, keyForEnc);\n }\n\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.decryptToUtf8\n */\n async decryptToUtf8(encString: EncString, key?: SymmetricCryptoKey): Promise {\n key = await this.getKeyForUserEncryption(key);\n return await this.encryptService.decryptToUtf8(encString, key);\n }\n\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.decryptToBytes\n */\n async decryptFromBytes(encBuffer: EncArrayBuffer, key: SymmetricCryptoKey): Promise {\n if (encBuffer == null) {\n throw new Error(\"No buffer provided for decryption.\");\n }\n\n key = await this.getKeyForUserEncryption(key);\n\n return this.encryptService.decryptToBytes(encBuffer, key);\n }\n\n // EFForg/OpenWireless\n // ref https://github.com/EFForg/OpenWireless/blob/master/app/js/diceware.js\n async randomNumber(min: number, max: number): Promise {\n let rval = 0;\n const range = max - min + 1;\n const bitsNeeded = Math.ceil(Math.log2(range));\n if (bitsNeeded > 53) {\n throw new Error(\"We cannot generate numbers larger than 53 bits.\");\n }\n\n const bytesNeeded = Math.ceil(bitsNeeded / 8);\n const mask = Math.pow(2, bitsNeeded) - 1;\n // 7776 -> (2^13 = 8192) -1 == 8191 or 0x00001111 11111111\n\n // Fill a byte array with N random numbers\n const byteArray = new Uint8Array(await this.cryptoFunctionService.randomBytes(bytesNeeded));\n\n let p = (bytesNeeded - 1) * 8;\n for (let i = 0; i < bytesNeeded; i++) {\n rval += byteArray[i] * Math.pow(2, p);\n p -= 8;\n }\n\n // Use & to apply the mask and reduce the number of recursive lookups\n rval = rval & mask;\n\n if (rval >= range) {\n // Integer out of acceptable range\n return this.randomNumber(min, max);\n }\n\n // Return an integer that falls within the range\n return min + rval;\n }\n\n async validateKey(key: SymmetricCryptoKey) {\n try {\n const encPrivateKey = await this.stateService.getEncryptedPrivateKey();\n const encKey = await this.getEncKeyHelper(key);\n if (encPrivateKey == null || encKey == null) {\n return false;\n }\n\n const privateKey = await this.decryptToBytes(new EncString(encPrivateKey), encKey);\n await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n } catch (e) {\n return false;\n }\n\n return true;\n }\n\n // ---HELPERS---\n\n protected async storeKey(key: SymmetricCryptoKey, userId?: string) {\n if (await this.shouldStoreKey(KeySuffixOptions.Auto, userId)) {\n await this.stateService.setCryptoMasterKeyAuto(key.keyB64, { userId: userId });\n } else if (await this.shouldStoreKey(KeySuffixOptions.Biometric, userId)) {\n await this.stateService.setCryptoMasterKeyBiometric(key.keyB64, { userId: userId });\n } else {\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n await this.stateService.setCryptoMasterKeyBiometric(null, { userId: userId });\n }\n }\n\n protected async shouldStoreKey(keySuffix: KeySuffixOptions, userId?: string) {\n let shouldStoreKey = false;\n if (keySuffix === KeySuffixOptions.Auto) {\n const vaultTimeout = await this.stateService.getVaultTimeout({ userId: userId });\n shouldStoreKey = vaultTimeout == null;\n } else if (keySuffix === KeySuffixOptions.Biometric) {\n const biometricUnlock = await this.stateService.getBiometricUnlock({ userId: userId });\n shouldStoreKey = biometricUnlock && this.platformUtilService.supportsSecureStorage();\n }\n return shouldStoreKey;\n }\n\n protected async retrieveKeyFromStorage(keySuffix: KeySuffixOptions, userId?: string) {\n return keySuffix === KeySuffixOptions.Auto\n ? await this.stateService.getCryptoMasterKeyAuto({ userId: userId })\n : await this.stateService.getCryptoMasterKeyBiometric({ userId: userId });\n }\n\n async getKeyForUserEncryption(key?: SymmetricCryptoKey): Promise {\n if (key != null) {\n return key;\n }\n\n const encKey = await this.getEncKey();\n if (encKey != null) {\n return encKey;\n }\n\n // Legacy support: encryption used to be done with the user key (derived from master password).\n // Users who have not migrated will have a null encKey and must use the user key instead.\n return await this.getKey();\n }\n\n private async stretchKey(key: SymmetricCryptoKey): Promise {\n const newKey = new Uint8Array(64);\n const encKey = await this.cryptoFunctionService.hkdfExpand(key.key, \"enc\", 32, \"sha256\");\n const macKey = await this.cryptoFunctionService.hkdfExpand(key.key, \"mac\", 32, \"sha256\");\n newKey.set(new Uint8Array(encKey));\n newKey.set(new Uint8Array(macKey), 32);\n return new SymmetricCryptoKey(newKey.buffer);\n }\n\n private async hashPhrase(hash: ArrayBuffer, minimumEntropy = 64) {\n const entropyPerWord = Math.log(EFFLongWordList.length) / Math.log(2);\n let numWords = Math.ceil(minimumEntropy / entropyPerWord);\n\n const hashArr = Array.from(new Uint8Array(hash));\n const entropyAvailable = hashArr.length * 4;\n if (numWords * entropyPerWord > entropyAvailable) {\n throw new Error(\"Output entropy of hash function is too small\");\n }\n\n const phrase: string[] = [];\n let hashNumber = bigInt.fromArray(hashArr, 256);\n while (numWords--) {\n const remainder = hashNumber.mod(EFFLongWordList.length);\n hashNumber = hashNumber.divide(EFFLongWordList.length);\n phrase.push(EFFLongWordList[remainder as any]);\n }\n return phrase;\n }\n\n private async buildEncKey(\n key: SymmetricCryptoKey,\n encKey: ArrayBuffer\n ): Promise<[SymmetricCryptoKey, EncString]> {\n let encKeyEnc: EncString = null;\n if (key.key.byteLength === 32) {\n const newKey = await this.stretchKey(key);\n encKeyEnc = await this.encrypt(encKey, newKey);\n } else if (key.key.byteLength === 64) {\n encKeyEnc = await this.encrypt(encKey, key);\n } else {\n throw new Error(\"Invalid key size.\");\n }\n return [new SymmetricCryptoKey(encKey), encKeyEnc];\n }\n\n private async clearSecretKeyStore(userId?: string): Promise {\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n await this.stateService.setCryptoMasterKeyBiometric(null, { userId: userId });\n }\n\n private async getEncKeyHelper(key: SymmetricCryptoKey = null): Promise {\n const inMemoryKey = await this.stateService.getDecryptedCryptoSymmetricKey();\n if (inMemoryKey != null) {\n return inMemoryKey;\n }\n\n const encKey = await this.stateService.getEncryptedCryptoSymmetricKey();\n if (encKey == null) {\n return null;\n }\n\n if (key == null) {\n key = await this.getKey();\n }\n if (key == null) {\n return null;\n }\n\n let decEncKey: ArrayBuffer;\n const encKeyCipher = new EncString(encKey);\n if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_B64) {\n decEncKey = await this.decryptToBytes(encKeyCipher, key);\n } else if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) {\n const newKey = await this.stretchKey(key);\n decEncKey = await this.decryptToBytes(encKeyCipher, newKey);\n } else {\n throw new Error(\"Unsupported encKey type.\");\n }\n if (decEncKey == null) {\n return null;\n }\n const symmetricCryptoKey = new SymmetricCryptoKey(decEncKey);\n await this.stateService.setDecryptedCryptoSymmetricKey(symmetricCryptoKey);\n return symmetricCryptoKey;\n }\n}\n","import { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class EncryptedObject {\n iv: ArrayBuffer;\n data: ArrayBuffer;\n mac: ArrayBuffer;\n key: SymmetricCryptoKey;\n}\n","import { CryptoFunctionService } from \"../../abstractions/cryptoFunction.service\";\nimport { EncryptService } from \"../../abstractions/encrypt.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { EncryptionType } from \"../../enums/encryptionType\";\nimport { IEncrypted } from \"../../interfaces/IEncrypted\";\nimport { Decryptable } from \"../../interfaces/decryptable.interface\";\nimport { InitializerMetadata } from \"../../interfaces/initializer-metadata.interface\";\nimport { Utils } from \"../../misc/utils\";\nimport { EncArrayBuffer } from \"../../models/domain/enc-array-buffer\";\nimport { EncString } from \"../../models/domain/enc-string\";\nimport { EncryptedObject } from \"../../models/domain/encrypted-object\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\n\nexport class EncryptServiceImplementation implements EncryptService {\n constructor(\n protected cryptoFunctionService: CryptoFunctionService,\n protected logService: LogService,\n protected logMacFailures: boolean\n ) {}\n\n async encrypt(plainValue: string | ArrayBuffer, key: SymmetricCryptoKey): Promise {\n if (key == null) {\n throw new Error(\"No encryption key provided.\");\n }\n\n if (plainValue == null) {\n return Promise.resolve(null);\n }\n\n let plainBuf: ArrayBuffer;\n if (typeof plainValue === \"string\") {\n plainBuf = Utils.fromUtf8ToArray(plainValue).buffer;\n } else {\n plainBuf = plainValue;\n }\n\n const encObj = await this.aesEncrypt(plainBuf, key);\n const iv = Utils.fromBufferToB64(encObj.iv);\n const data = Utils.fromBufferToB64(encObj.data);\n const mac = encObj.mac != null ? Utils.fromBufferToB64(encObj.mac) : null;\n return new EncString(encObj.key.encType, data, iv, mac);\n }\n\n async encryptToBytes(plainValue: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n if (key == null) {\n throw new Error(\"No encryption key provided.\");\n }\n\n const encValue = await this.aesEncrypt(plainValue, key);\n let macLen = 0;\n if (encValue.mac != null) {\n macLen = encValue.mac.byteLength;\n }\n\n const encBytes = new Uint8Array(1 + encValue.iv.byteLength + macLen + encValue.data.byteLength);\n encBytes.set([encValue.key.encType]);\n encBytes.set(new Uint8Array(encValue.iv), 1);\n if (encValue.mac != null) {\n encBytes.set(new Uint8Array(encValue.mac), 1 + encValue.iv.byteLength);\n }\n\n encBytes.set(new Uint8Array(encValue.data), 1 + encValue.iv.byteLength + macLen);\n return new EncArrayBuffer(encBytes.buffer);\n }\n\n async decryptToUtf8(encString: EncString, key: SymmetricCryptoKey): Promise {\n if (key == null) {\n throw new Error(\"No key provided for decryption.\");\n }\n\n key = this.resolveLegacyKey(key, encString);\n\n if (key.macKey != null && encString?.mac == null) {\n this.logService.error(\"mac required.\");\n return null;\n }\n\n if (key.encType !== encString.encryptionType) {\n this.logService.error(\"encType unavailable.\");\n return null;\n }\n\n const fastParams = this.cryptoFunctionService.aesDecryptFastParameters(\n encString.data,\n encString.iv,\n encString.mac,\n key\n );\n if (fastParams.macKey != null && fastParams.mac != null) {\n const computedMac = await this.cryptoFunctionService.hmacFast(\n fastParams.macData,\n fastParams.macKey,\n \"sha256\"\n );\n const macsEqual = await this.cryptoFunctionService.compareFast(fastParams.mac, computedMac);\n if (!macsEqual) {\n this.logMacFailed(\"mac failed.\");\n return null;\n }\n }\n\n return await this.cryptoFunctionService.aesDecryptFast(fastParams);\n }\n\n async decryptToBytes(encThing: IEncrypted, key: SymmetricCryptoKey): Promise {\n if (key == null) {\n throw new Error(\"No encryption key provided.\");\n }\n\n if (encThing == null) {\n throw new Error(\"Nothing provided for decryption.\");\n }\n\n key = this.resolveLegacyKey(key, encThing);\n\n if (key.macKey != null && encThing.macBytes == null) {\n return null;\n }\n\n if (key.encType !== encThing.encryptionType) {\n return null;\n }\n\n if (key.macKey != null && encThing.macBytes != null) {\n const macData = new Uint8Array(encThing.ivBytes.byteLength + encThing.dataBytes.byteLength);\n macData.set(new Uint8Array(encThing.ivBytes), 0);\n macData.set(new Uint8Array(encThing.dataBytes), encThing.ivBytes.byteLength);\n const computedMac = await this.cryptoFunctionService.hmac(\n macData.buffer,\n key.macKey,\n \"sha256\"\n );\n if (computedMac === null) {\n return null;\n }\n\n const macsMatch = await this.cryptoFunctionService.compare(encThing.macBytes, computedMac);\n if (!macsMatch) {\n this.logMacFailed(\"mac failed.\");\n return null;\n }\n }\n\n const result = await this.cryptoFunctionService.aesDecrypt(\n encThing.dataBytes,\n encThing.ivBytes,\n key.encKey\n );\n\n return result ?? null;\n }\n\n async decryptItems(\n items: Decryptable[],\n key: SymmetricCryptoKey\n ): Promise {\n if (items == null || items.length < 1) {\n return [];\n }\n\n return await Promise.all(items.map((item) => item.decrypt(key)));\n }\n\n private async aesEncrypt(data: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n const obj = new EncryptedObject();\n obj.key = key;\n obj.iv = await this.cryptoFunctionService.randomBytes(16);\n obj.data = await this.cryptoFunctionService.aesEncrypt(data, obj.iv, obj.key.encKey);\n\n if (obj.key.macKey != null) {\n const macData = new Uint8Array(obj.iv.byteLength + obj.data.byteLength);\n macData.set(new Uint8Array(obj.iv), 0);\n macData.set(new Uint8Array(obj.data), obj.iv.byteLength);\n obj.mac = await this.cryptoFunctionService.hmac(macData.buffer, obj.key.macKey, \"sha256\");\n }\n\n return obj;\n }\n\n private logMacFailed(msg: string) {\n if (this.logMacFailures) {\n this.logService.error(msg);\n }\n }\n\n /**\n * Transform into new key for the old encrypt-then-mac scheme if required, otherwise return the current key unchanged\n * @param encThing The encrypted object (e.g. encString or encArrayBuffer) that you want to decrypt\n */\n resolveLegacyKey(key: SymmetricCryptoKey, encThing: IEncrypted): SymmetricCryptoKey {\n if (\n encThing.encryptionType === EncryptionType.AesCbc128_HmacSha256_B64 &&\n key.encType === EncryptionType.AesCbc256_B64\n ) {\n return new SymmetricCryptoKey(key.key, EncryptionType.AesCbc128_HmacSha256_B64);\n }\n\n return key;\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { InitializerMetadata } from \"../../interfaces/initializer-metadata.interface\";\nimport { Cipher } from \"../../models/domain/cipher\";\nimport { CipherView } from \"../../models/view/cipher.view\";\n\nimport { InitializerKey } from \"./initializer-key\";\n\n/**\n * Internal reference of classes so we can reconstruct objects properly.\n * Each entry should be keyed using the Decryptable.initializerKey property\n */\nconst classInitializers: Record any> = {\n [InitializerKey.Cipher]: Cipher.fromJSON,\n [InitializerKey.CipherView]: CipherView.fromJSON,\n};\n\nexport function getClassInitializer(\n className: InitializerKey\n): (obj: Jsonify) => T {\n return classInitializers[className];\n}\n","import { defaultIfEmpty, filter, firstValueFrom, fromEvent, map, Subject, takeUntil } from \"rxjs\";\nimport { Jsonify } from \"type-fest\";\n\nimport { Decryptable } from \"../../interfaces/decryptable.interface\";\nimport { InitializerMetadata } from \"../../interfaces/initializer-metadata.interface\";\nimport { Utils } from \"../../misc/utils\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\n\nimport { EncryptServiceImplementation } from \"./encrypt.service.implementation\";\nimport { getClassInitializer } from \"./get-class-initializer\";\n\n// TTL (time to live) is not strictly required but avoids tying up memory resources if inactive\nconst workerTTL = 3 * 60000; // 3 minutes\n\nexport class MultithreadEncryptServiceImplementation extends EncryptServiceImplementation {\n private worker: Worker;\n private timeout: any;\n\n private clear$ = new Subject();\n\n /**\n * Sends items to a web worker to decrypt them.\n * This utilises multithreading to decrypt items faster without interrupting other operations (e.g. updating UI).\n */\n async decryptItems(\n items: Decryptable[],\n key: SymmetricCryptoKey\n ): Promise {\n if (items == null || items.length < 1) {\n return [];\n }\n\n this.logService.info(\"Starting decryption using multithreading\");\n\n this.worker ??= new Worker(\n new URL(\n /* webpackChunkName: 'encrypt-worker' */\n \"@bitwarden/common/services/cryptography/encrypt.worker.ts\",\n import.meta.url\n )\n );\n\n this.restartTimeout();\n\n const request = {\n id: Utils.newGuid(),\n items: items,\n key: key,\n };\n\n this.worker.postMessage(JSON.stringify(request));\n\n return await firstValueFrom(\n fromEvent(this.worker, \"message\").pipe(\n filter((response: MessageEvent) => response.data?.id === request.id),\n map((response) => JSON.parse(response.data.items)),\n map((items) =>\n items.map((jsonItem: Jsonify) => {\n const initializer = getClassInitializer(jsonItem.initializerKey);\n return initializer(jsonItem);\n })\n ),\n takeUntil(this.clear$),\n defaultIfEmpty([])\n )\n );\n }\n\n private clear() {\n this.clear$.next();\n this.worker?.terminate();\n this.worker = null;\n this.clearTimeout();\n }\n\n private restartTimeout() {\n this.clearTimeout();\n this.timeout = setTimeout(() => this.clear(), workerTTL);\n }\n\n private clearTimeout() {\n if (this.timeout != null) {\n clearTimeout(this.timeout);\n }\n }\n}\n","import { EventType } from \"../../enums/eventType\";\n\nexport class EventRequest {\n type: EventType;\n cipherId: string;\n date: string;\n organizationId: string;\n}\n","import { EventType } from \"../../enums/eventType\";\nimport { EventView } from \"../view/event.view\";\n\nexport class EventExport {\n message: string;\n appIcon: string;\n appName: string;\n userId: string;\n userName: string;\n userEmail: string;\n date: string;\n ip: string;\n type: string;\n installationId: string;\n\n constructor(event: EventView) {\n this.message = event.humanReadableMessage;\n this.appIcon = event.appIcon;\n this.appName = event.appName;\n this.userId = event.userId;\n this.userName = event.userName;\n this.userEmail = event.userEmail;\n this.date = event.date;\n this.ip = event.ip;\n this.type = EventType[event.type];\n this.installationId = event.installationId;\n }\n}\n","export enum FileUploadType {\n Direct = 0,\n Azure = 1,\n}\n","import { LogService } from \"../abstractions/log.service\";\nimport { Utils } from \"../misc/utils\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\n\nconst MAX_SINGLE_BLOB_UPLOAD_SIZE = 256 * 1024 * 1024; // 256 MiB\nconst MAX_BLOCKS_PER_BLOB = 50000;\n\nexport class AzureFileUploadService {\n constructor(private logService: LogService) {}\n\n async upload(url: string, data: EncArrayBuffer, renewalCallback: () => Promise) {\n if (data.buffer.byteLength <= MAX_SINGLE_BLOB_UPLOAD_SIZE) {\n return await this.azureUploadBlob(url, data);\n } else {\n return await this.azureUploadBlocks(url, data, renewalCallback);\n }\n }\n private async azureUploadBlob(url: string, data: EncArrayBuffer) {\n const urlObject = Utils.getUrl(url);\n const headers = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": urlObject.searchParams.get(\"sv\"),\n \"Content-Length\": data.buffer.byteLength.toString(),\n \"x-ms-blob-type\": \"BlockBlob\",\n });\n\n const request = new Request(url, {\n body: data.buffer,\n cache: \"no-store\",\n method: \"PUT\",\n headers: headers,\n });\n\n const blobResponse = await fetch(request);\n\n if (blobResponse.status !== 201) {\n throw new Error(`Failed to create Azure blob: ${blobResponse.status}`);\n }\n }\n private async azureUploadBlocks(\n url: string,\n data: EncArrayBuffer,\n renewalCallback: () => Promise\n ) {\n const baseUrl = Utils.getUrl(url);\n const blockSize = this.getMaxBlockSize(baseUrl.searchParams.get(\"sv\"));\n let blockIndex = 0;\n const numBlocks = Math.ceil(data.buffer.byteLength / blockSize);\n const blocksStaged: string[] = [];\n\n if (numBlocks > MAX_BLOCKS_PER_BLOB) {\n throw new Error(\n `Cannot upload file, exceeds maximum size of ${blockSize * MAX_BLOCKS_PER_BLOB}`\n );\n }\n\n // eslint-disable-next-line\n try {\n while (blockIndex < numBlocks) {\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockUrl = Utils.getUrl(url);\n const blockId = this.encodedBlockId(blockIndex);\n blockUrl.searchParams.append(\"comp\", \"block\");\n blockUrl.searchParams.append(\"blockid\", blockId);\n const start = blockIndex * blockSize;\n const blockData = data.buffer.slice(start, start + blockSize);\n const blockHeaders = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": blockUrl.searchParams.get(\"sv\"),\n \"Content-Length\": blockData.byteLength.toString(),\n });\n\n const blockRequest = new Request(blockUrl.toString(), {\n body: blockData,\n cache: \"no-store\",\n method: \"PUT\",\n headers: blockHeaders,\n });\n\n const blockResponse = await fetch(blockRequest);\n\n if (blockResponse.status !== 201) {\n const message = `Unsuccessful block PUT. Received status ${blockResponse.status}`;\n this.logService.error(message + \"\\n\" + (await blockResponse.json()));\n throw new Error(message);\n }\n\n blocksStaged.push(blockId);\n blockIndex++;\n }\n\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockListUrl = Utils.getUrl(url);\n const blockListXml = this.blockListXml(blocksStaged);\n blockListUrl.searchParams.append(\"comp\", \"blocklist\");\n const headers = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": blockListUrl.searchParams.get(\"sv\"),\n \"Content-Length\": blockListXml.length.toString(),\n });\n\n const request = new Request(blockListUrl.toString(), {\n body: blockListXml,\n cache: \"no-store\",\n method: \"PUT\",\n headers: headers,\n });\n\n const response = await fetch(request);\n\n if (response.status !== 201) {\n const message = `Unsuccessful block list PUT. Received status ${response.status}`;\n this.logService.error(message + \"\\n\" + (await response.json()));\n throw new Error(message);\n }\n } catch (e) {\n throw e;\n }\n }\n\n private async renewUrlIfNecessary(\n url: string,\n renewalCallback: () => Promise\n ): Promise {\n const urlObject = Utils.getUrl(url);\n const expiry = new Date(urlObject.searchParams.get(\"se\") ?? \"\");\n\n if (isNaN(expiry.getTime())) {\n expiry.setTime(Date.now() + 3600000);\n }\n\n if (expiry.getTime() < Date.now() + 1000) {\n return await renewalCallback();\n }\n return url;\n }\n\n private encodedBlockId(blockIndex: number) {\n // Encoded blockId max size is 64, so pre-encoding max size is 48\n const utfBlockId = (\n \"000000000000000000000000000000000000000000000000\" + blockIndex.toString()\n ).slice(-48);\n return Utils.fromUtf8ToB64(utfBlockId);\n }\n\n private blockListXml(blockIdList: string[]) {\n let xml = '';\n blockIdList.forEach((blockId) => {\n xml += `${blockId}`;\n });\n xml += \"\";\n return xml;\n }\n\n private getMaxBlockSize(version: string) {\n if (Version.compare(version, \"2019-12-12\") >= 0) {\n return 4000 * 1024 * 1024; // 4000 MiB\n } else if (Version.compare(version, \"2016-05-31\") >= 0) {\n return 100 * 1024 * 1024; // 100 MiB\n } else {\n return 4 * 1024 * 1024; // 4 MiB\n }\n }\n}\n\nclass Version {\n /**\n * Compares two Azure Versions against each other\n * @param a Version to compare\n * @param b Version to compare\n * @returns a number less than zero if b is newer than a, 0 if equal,\n * and greater than zero if a is newer than b\n */\n static compare(a: Required | string, b: Required | string) {\n if (typeof a === \"string\") {\n a = new Version(a);\n }\n\n if (typeof b === \"string\") {\n b = new Version(b);\n }\n\n return a.year !== b.year\n ? a.year - b.year\n : a.month !== b.month\n ? a.month - b.month\n : a.day !== b.day\n ? a.day - b.day\n : 0;\n }\n year = 0;\n month = 0;\n day = 0;\n\n constructor(version: string) {\n try {\n const parts = version.split(\"-\").map((v) => Number.parseInt(v, 10));\n this.year = parts[0];\n this.month = parts[1];\n this.day = parts[2];\n } catch {\n // Ignore error\n }\n }\n /**\n * Compares two Azure Versions against each other\n * @param compareTo Version to compare against\n * @returns a number less than zero if compareTo is newer, 0 if equal,\n * and greater than zero if this is greater than compareTo\n */\n compare(compareTo: Required | string) {\n return Version.compare(this, compareTo);\n }\n}\n","import { Utils } from \"../misc/utils\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\n\nexport class BitwardenFileUploadService {\n async upload(\n encryptedFileName: string,\n encryptedFileData: EncArrayBuffer,\n apiCall: (fd: FormData) => Promise\n ) {\n const fd = new FormData();\n try {\n const blob = new Blob([encryptedFileData.buffer], { type: \"application/octet-stream\" });\n fd.append(\"data\", blob, encryptedFileName);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\n \"data\",\n Buffer.from(encryptedFileData.buffer) as any,\n {\n filepath: encryptedFileName,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n\n await apiCall(fd);\n }\n}\n","export enum OrganizationUserType {\n Owner = 0,\n Admin = 1,\n User = 2,\n Manager = 3,\n Custom = 4,\n}\n","import { KdfType } from \"../../../enums/kdfType\";\nimport { KeysRequest } from \"../keys.request\";\n\nexport class SetKeyConnectorKeyRequest {\n key: string;\n keys: KeysRequest;\n kdf: KdfType;\n kdfIterations: number;\n orgIdentifier: string;\n\n constructor(\n key: string,\n kdf: KdfType,\n kdfIterations: number,\n orgIdentifier: string,\n keys: KeysRequest\n ) {\n this.key = key;\n this.kdf = kdf;\n this.kdfIterations = kdfIterations;\n this.orgIdentifier = orgIdentifier;\n this.keys = keys;\n }\n}\n","export class KeyConnectorUserKeyRequest {\n key: string;\n\n constructor(key: string) {\n this.key = key;\n }\n}\n","import { LoginService as LoginServiceAbstraction } from \"../abstractions/login.service\";\n\nexport class LoginService implements LoginServiceAbstraction {\n private _email: string;\n private _rememberEmail: boolean;\n\n getEmail() {\n return this._email;\n }\n\n getRememberEmail() {\n return this._rememberEmail;\n }\n\n setEmail(value: string) {\n this._email = value;\n }\n\n setRememberEmail(value: boolean) {\n this._rememberEmail = value;\n }\n\n clearValues() {\n this._email = null;\n this._rememberEmail = null;\n }\n}\n","export enum SsoType {\n None = 0,\n OpenIdConnect = 1,\n Saml2 = 2,\n}\n\nexport enum OpenIdConnectRedirectBehavior {\n RedirectGet = 0,\n FormPost = 1,\n}\n\nexport enum Saml2BindingType {\n HttpRedirect = 1,\n HttpPost = 2,\n}\n\nexport enum Saml2NameIdFormat {\n NotConfigured = 0,\n Unspecified = 1,\n EmailAddress = 2,\n X509SubjectName = 3,\n WindowsDomainQualifiedName = 4,\n KerberosPrincipalName = 5,\n EntityIdentifier = 6,\n Persistent = 7,\n Transient = 8,\n}\n\nexport enum Saml2SigningBehavior {\n IfIdpWantAuthnRequestsSigned = 0,\n Always = 1,\n Never = 3,\n}\n","import { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class OrganizationApiKeyInformationResponse extends BaseResponse {\n keyType: OrganizationApiKeyType;\n\n constructor(response: any) {\n super(response);\n this.keyType = this.getResponseProperty(\"KeyType\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class OrganizationAutoEnrollStatusResponse extends BaseResponse {\n id: string;\n resetPasswordEnabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.resetPasswordEnabled = this.getResponseProperty(\"ResetPasswordEnabled\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class KeysResponse extends BaseResponse {\n privateKey: string;\n publicKey: string;\n\n constructor(response: any) {\n super(response);\n this.privateKey = this.getResponseProperty(\"PrivateKey\");\n this.publicKey = this.getResponseProperty(\"PublicKey\");\n }\n}\n","import { KeysResponse } from \"./keys.response\";\n\nexport class OrganizationKeysResponse extends KeysResponse {\n constructor(response: any) {\n super(response);\n }\n}\n","import { PlanType } from \"../../enums/planType\";\n\nimport { BaseResponse } from \"./base.response\";\nimport { PlanResponse } from \"./plan.response\";\n\nexport class OrganizationResponse extends BaseResponse {\n id: string;\n identifier: string;\n name: string;\n businessName: string;\n businessAddress1: string;\n businessAddress2: string;\n businessAddress3: string;\n businessCountry: string;\n businessTaxNumber: string;\n billingEmail: string;\n plan: PlanResponse;\n planType: PlanType;\n seats: number;\n maxAutoscaleSeats: number;\n maxCollections: number;\n maxStorageGb: number;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useResetPassword: boolean;\n hasPublicAndPrivateKeys: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.identifier = this.getResponseProperty(\"Identifier\");\n this.name = this.getResponseProperty(\"Name\");\n this.businessName = this.getResponseProperty(\"BusinessName\");\n this.businessAddress1 = this.getResponseProperty(\"BusinessAddress1\");\n this.businessAddress2 = this.getResponseProperty(\"BusinessAddress2\");\n this.businessAddress3 = this.getResponseProperty(\"BusinessAddress3\");\n this.businessCountry = this.getResponseProperty(\"BusinessCountry\");\n this.businessTaxNumber = this.getResponseProperty(\"BusinessTaxNumber\");\n this.billingEmail = this.getResponseProperty(\"BillingEmail\");\n const plan = this.getResponseProperty(\"Plan\");\n this.plan = plan == null ? null : new PlanResponse(plan);\n this.planType = this.getResponseProperty(\"PlanType\");\n this.seats = this.getResponseProperty(\"Seats\");\n this.maxAutoscaleSeats = this.getResponseProperty(\"MaxAutoscaleSeats\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.useGroups = this.getResponseProperty(\"UseGroups\");\n this.useDirectory = this.getResponseProperty(\"UseDirectory\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n this.useTotp = this.getResponseProperty(\"UseTotp\");\n this.use2fa = this.getResponseProperty(\"Use2fa\");\n this.useApi = this.getResponseProperty(\"UseApi\");\n this.useResetPassword = this.getResponseProperty(\"UseResetPassword\");\n this.hasPublicAndPrivateKeys = this.getResponseProperty(\"HasPublicAndPrivateKeys\");\n }\n}\n","import { OrganizationResponse } from \"./organization.response\";\nimport {\n BillingSubscriptionResponse,\n BillingSubscriptionUpcomingInvoiceResponse,\n} from \"./subscription.response\";\n\nexport class OrganizationSubscriptionResponse extends OrganizationResponse {\n storageName: string;\n storageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n expiration: string;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty(\"StorageName\");\n this.storageGb = this.getResponseProperty(\"StorageGb\");\n const subscription = this.getResponseProperty(\"Subscription\");\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n const upcomingInvoice = this.getResponseProperty(\"UpcomingInvoice\");\n this.upcomingInvoice =\n upcomingInvoice == null\n ? null\n : new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n this.expiration = this.getResponseProperty(\"Expiration\");\n }\n}\n","import {\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"../../enums/ssoEnums\";\nimport { BaseResponse } from \"../response/base.response\";\nimport { SsoConfigView } from \"../view/sso-config.view\";\n\nexport class SsoConfigApi extends BaseResponse {\n static fromView(view: SsoConfigView, api = new SsoConfigApi()) {\n api.configType = view.configType;\n\n api.keyConnectorEnabled = view.keyConnectorEnabled;\n api.keyConnectorUrl = view.keyConnectorUrl;\n\n if (api.configType === SsoType.OpenIdConnect) {\n api.authority = view.openId.authority;\n api.clientId = view.openId.clientId;\n api.clientSecret = view.openId.clientSecret;\n api.metadataAddress = view.openId.metadataAddress;\n api.redirectBehavior = view.openId.redirectBehavior;\n api.getClaimsFromUserInfoEndpoint = view.openId.getClaimsFromUserInfoEndpoint;\n api.additionalScopes = view.openId.additionalScopes;\n api.additionalUserIdClaimTypes = view.openId.additionalUserIdClaimTypes;\n api.additionalEmailClaimTypes = view.openId.additionalEmailClaimTypes;\n api.additionalNameClaimTypes = view.openId.additionalNameClaimTypes;\n api.acrValues = view.openId.acrValues;\n api.expectedReturnAcrValue = view.openId.expectedReturnAcrValue;\n } else if (api.configType === SsoType.Saml2) {\n api.spNameIdFormat = view.saml.spNameIdFormat;\n api.spOutboundSigningAlgorithm = view.saml.spOutboundSigningAlgorithm;\n api.spSigningBehavior = view.saml.spSigningBehavior;\n api.spMinIncomingSigningAlgorithm = view.saml.spMinIncomingSigningAlgorithm;\n api.spWantAssertionsSigned = view.saml.spWantAssertionsSigned;\n api.spValidateCertificates = view.saml.spValidateCertificates;\n\n api.idpEntityId = view.saml.idpEntityId;\n api.idpBindingType = view.saml.idpBindingType;\n api.idpSingleSignOnServiceUrl = view.saml.idpSingleSignOnServiceUrl;\n api.idpSingleLogoutServiceUrl = view.saml.idpSingleLogoutServiceUrl;\n api.idpX509PublicCert = view.saml.idpX509PublicCert;\n api.idpOutboundSigningAlgorithm = view.saml.idpOutboundSigningAlgorithm;\n api.idpAllowUnsolicitedAuthnResponse = view.saml.idpAllowUnsolicitedAuthnResponse;\n api.idpWantAuthnRequestsSigned = view.saml.idpWantAuthnRequestsSigned;\n\n // Value is inverted in the api model (disable instead of allow)\n api.idpDisableOutboundLogoutRequests = !view.saml.idpAllowOutboundLogoutRequests;\n }\n\n return api;\n }\n configType: SsoType;\n\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n\n // OpenId\n authority: string;\n clientId: string;\n clientSecret: string;\n metadataAddress: string;\n redirectBehavior: OpenIdConnectRedirectBehavior;\n getClaimsFromUserInfoEndpoint: boolean;\n additionalScopes: string;\n additionalUserIdClaimTypes: string;\n additionalEmailClaimTypes: string;\n additionalNameClaimTypes: string;\n acrValues: string;\n expectedReturnAcrValue: string;\n\n // SAML\n spNameIdFormat: Saml2NameIdFormat;\n spOutboundSigningAlgorithm: string;\n spSigningBehavior: Saml2SigningBehavior;\n spMinIncomingSigningAlgorithm: string;\n spWantAssertionsSigned: boolean;\n spValidateCertificates: boolean;\n\n idpEntityId: string;\n idpBindingType: Saml2BindingType;\n idpSingleSignOnServiceUrl: string;\n idpSingleLogoutServiceUrl: string;\n idpX509PublicCert: string;\n idpOutboundSigningAlgorithm: string;\n idpAllowUnsolicitedAuthnResponse: boolean;\n idpDisableOutboundLogoutRequests: boolean;\n idpWantAuthnRequestsSigned: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n\n this.configType = this.getResponseProperty(\"ConfigType\");\n\n this.keyConnectorEnabled = this.getResponseProperty(\"KeyConnectorEnabled\");\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n\n this.authority = this.getResponseProperty(\"Authority\");\n this.clientId = this.getResponseProperty(\"ClientId\");\n this.clientSecret = this.getResponseProperty(\"ClientSecret\");\n this.metadataAddress = this.getResponseProperty(\"MetadataAddress\");\n this.redirectBehavior = this.getResponseProperty(\"RedirectBehavior\");\n this.getClaimsFromUserInfoEndpoint = this.getResponseProperty(\"GetClaimsFromUserInfoEndpoint\");\n this.additionalScopes = this.getResponseProperty(\"AdditionalScopes\");\n this.additionalUserIdClaimTypes = this.getResponseProperty(\"AdditionalUserIdClaimTypes\");\n this.additionalEmailClaimTypes = this.getResponseProperty(\"AdditionalEmailClaimTypes\");\n this.additionalNameClaimTypes = this.getResponseProperty(\"AdditionalNameClaimTypes\");\n this.acrValues = this.getResponseProperty(\"AcrValues\");\n this.expectedReturnAcrValue = this.getResponseProperty(\"ExpectedReturnAcrValue\");\n\n this.spNameIdFormat = this.getResponseProperty(\"SpNameIdFormat\");\n this.spOutboundSigningAlgorithm = this.getResponseProperty(\"SpOutboundSigningAlgorithm\");\n this.spSigningBehavior = this.getResponseProperty(\"SpSigningBehavior\");\n this.spMinIncomingSigningAlgorithm = this.getResponseProperty(\"SpMinIncomingSigningAlgorithm\");\n this.spWantAssertionsSigned = this.getResponseProperty(\"SpWantAssertionsSigned\");\n this.spValidateCertificates = this.getResponseProperty(\"SpValidateCertificates\");\n\n this.idpEntityId = this.getResponseProperty(\"IdpEntityId\");\n this.idpBindingType = this.getResponseProperty(\"IdpBindingType\");\n this.idpSingleSignOnServiceUrl = this.getResponseProperty(\"IdpSingleSignOnServiceUrl\");\n this.idpSingleLogoutServiceUrl = this.getResponseProperty(\"IdpSingleLogoutServiceUrl\");\n this.idpX509PublicCert = this.getResponseProperty(\"IdpX509PublicCert\");\n this.idpOutboundSigningAlgorithm = this.getResponseProperty(\"IdpOutboundSigningAlgorithm\");\n this.idpAllowUnsolicitedAuthnResponse = this.getResponseProperty(\n \"IdpAllowUnsolicitedAuthnResponse\"\n );\n this.idpDisableOutboundLogoutRequests = this.getResponseProperty(\n \"IdpDisableOutboundLogoutRequests\"\n );\n this.idpWantAuthnRequestsSigned = this.getResponseProperty(\"IdpWantAuthnRequestsSigned\");\n }\n}\n","import { SsoConfigApi } from \"../../api/sso-config.api\";\nimport { BaseResponse } from \"../base.response\";\n\nexport class OrganizationSsoResponse extends BaseResponse {\n enabled: boolean;\n identifier: string;\n data: SsoConfigApi;\n urls: SsoUrls;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.identifier = this.getResponseProperty(\"Identifier\");\n this.data =\n this.getResponseProperty(\"Data\") != null\n ? new SsoConfigApi(this.getResponseProperty(\"Data\"))\n : null;\n this.urls = new SsoUrls(this.getResponseProperty(\"Urls\"));\n }\n}\n\nclass SsoUrls extends BaseResponse {\n callbackPath: string;\n signedOutCallbackPath: string;\n spEntityId: string;\n spMetadataUrl: string;\n spAcsUrl: string;\n\n constructor(response: any) {\n super(response);\n this.callbackPath = this.getResponseProperty(\"CallbackPath\");\n this.signedOutCallbackPath = this.getResponseProperty(\"SignedOutCallbackPath\");\n this.spEntityId = this.getResponseProperty(\"SpEntityId\");\n this.spMetadataUrl = this.getResponseProperty(\"SpMetadataUrl\");\n this.spAcsUrl = this.getResponseProperty(\"SpAcsUrl\");\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\nimport { OrganizationData } from \"../data/organization.data\";\n\nexport class Organization {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useScim: boolean;\n useCustomPermissions: boolean;\n useResetPassword: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n hasPublicAndPrivateKeys: boolean;\n providerId: string;\n providerName: string;\n isProviderUser: boolean;\n familySponsorshipFriendlyName: string;\n familySponsorshipAvailable: boolean;\n planProductType: ProductType;\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n familySponsorshipLastSyncDate?: Date;\n familySponsorshipValidUntil?: Date;\n familySponsorshipToDelete?: boolean;\n\n constructor(obj?: OrganizationData) {\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.name = obj.name;\n this.status = obj.status;\n this.type = obj.type;\n this.enabled = obj.enabled;\n this.usePolicies = obj.usePolicies;\n this.useGroups = obj.useGroups;\n this.useDirectory = obj.useDirectory;\n this.useEvents = obj.useEvents;\n this.useTotp = obj.useTotp;\n this.use2fa = obj.use2fa;\n this.useApi = obj.useApi;\n this.useSso = obj.useSso;\n this.useKeyConnector = obj.useKeyConnector;\n this.useScim = obj.useScim;\n this.useCustomPermissions = obj.useCustomPermissions;\n this.useResetPassword = obj.useResetPassword;\n this.selfHost = obj.selfHost;\n this.usersGetPremium = obj.usersGetPremium;\n this.seats = obj.seats;\n this.maxCollections = obj.maxCollections;\n this.maxStorageGb = obj.maxStorageGb;\n this.ssoBound = obj.ssoBound;\n this.identifier = obj.identifier;\n this.permissions = obj.permissions;\n this.resetPasswordEnrolled = obj.resetPasswordEnrolled;\n this.userId = obj.userId;\n this.hasPublicAndPrivateKeys = obj.hasPublicAndPrivateKeys;\n this.providerId = obj.providerId;\n this.providerName = obj.providerName;\n this.isProviderUser = obj.isProviderUser;\n this.familySponsorshipFriendlyName = obj.familySponsorshipFriendlyName;\n this.familySponsorshipAvailable = obj.familySponsorshipAvailable;\n this.planProductType = obj.planProductType;\n this.keyConnectorEnabled = obj.keyConnectorEnabled;\n this.keyConnectorUrl = obj.keyConnectorUrl;\n this.familySponsorshipLastSyncDate = obj.familySponsorshipLastSyncDate;\n this.familySponsorshipValidUntil = obj.familySponsorshipValidUntil;\n this.familySponsorshipToDelete = obj.familySponsorshipToDelete;\n }\n\n get canAccess() {\n if (this.type === OrganizationUserType.Owner) {\n return true;\n }\n return this.enabled && this.status === OrganizationUserStatusType.Confirmed;\n }\n\n get isManager() {\n return (\n this.type === OrganizationUserType.Manager ||\n this.type === OrganizationUserType.Owner ||\n this.type === OrganizationUserType.Admin\n );\n }\n\n get isAdmin() {\n return this.type === OrganizationUserType.Owner || this.type === OrganizationUserType.Admin;\n }\n\n get isOwner() {\n return this.type === OrganizationUserType.Owner || this.isProviderUser;\n }\n\n get canAccessEventLogs() {\n return (this.isAdmin || this.permissions.accessEventLogs) && this.useEvents;\n }\n\n get canAccessImportExport() {\n return this.isAdmin || this.permissions.accessImportExport;\n }\n\n get canAccessReports() {\n return this.isAdmin || this.permissions.accessReports;\n }\n\n get canCreateNewCollections() {\n return (\n this.isManager ||\n (this.permissions.createNewCollections ?? this.permissions.manageAllCollections)\n );\n }\n\n get canEditAnyCollection() {\n return (\n this.isAdmin || (this.permissions.editAnyCollection ?? this.permissions.manageAllCollections)\n );\n }\n\n get canDeleteAnyCollection() {\n return (\n this.isAdmin ||\n (this.permissions.deleteAnyCollection ?? this.permissions.manageAllCollections)\n );\n }\n\n get canViewAllCollections() {\n return this.canCreateNewCollections || this.canEditAnyCollection || this.canDeleteAnyCollection;\n }\n\n get canEditAssignedCollections() {\n return (\n this.isManager ||\n (this.permissions.editAssignedCollections ?? this.permissions.manageAssignedCollections)\n );\n }\n\n get canDeleteAssignedCollections() {\n return (\n this.isManager ||\n (this.permissions.deleteAssignedCollections ?? this.permissions.manageAssignedCollections)\n );\n }\n\n get canViewAssignedCollections() {\n return this.canDeleteAssignedCollections || this.canEditAssignedCollections;\n }\n\n get canManageGroups() {\n return (this.isAdmin || this.permissions.manageGroups) && this.useGroups;\n }\n\n get canManageSso() {\n return (this.isAdmin || this.permissions.manageSso) && this.useSso;\n }\n\n get canManageScim() {\n return (this.isAdmin || this.permissions.manageScim) && this.useScim;\n }\n\n get canManagePolicies() {\n return (this.isAdmin || this.permissions.managePolicies) && this.usePolicies;\n }\n\n get canManageUsers() {\n return this.isAdmin || this.permissions.manageUsers;\n }\n\n get canManageUsersPassword() {\n return this.isAdmin || this.permissions.manageResetPassword;\n }\n\n get isExemptFromPolicies() {\n return this.canManagePolicies;\n }\n\n get canManageBilling() {\n return this.isOwner && (this.isProviderUser || !this.hasProvider);\n }\n\n get hasProvider() {\n return this.providerId != null || this.providerName != null;\n }\n\n static fromJSON(json: Jsonify) {\n if (json == null) {\n return null;\n }\n\n return Object.assign(new Organization(), json, {\n familySponsorshipLastSyncDate: new Date(json.familySponsorshipLastSyncDate),\n familySponsorshipValidUntil: new Date(json.familySponsorshipValidUntil),\n });\n }\n}\n","import Domain from \"./domain-base\";\n\nexport class PasswordGeneratorPolicyOptions extends Domain {\n defaultType = \"\";\n minLength = 0;\n useUppercase = false;\n useLowercase = false;\n useNumbers = false;\n numberCount = 0;\n useSpecial = false;\n specialCount = 0;\n minNumberWords = 0;\n capitalize = false;\n includeNumber = false;\n\n inEffect() {\n return (\n this.defaultType !== \"\" ||\n this.minLength > 0 ||\n this.numberCount > 0 ||\n this.specialCount > 0 ||\n this.useUppercase ||\n this.useLowercase ||\n this.useNumbers ||\n this.useSpecial ||\n this.minNumberWords > 0 ||\n this.capitalize ||\n this.includeNumber\n );\n }\n}\n","import * as zxcvbn from \"zxcvbn\";\n\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { PasswordGenerationService as PasswordGenerationServiceAbstraction } from \"../abstractions/passwordGeneration.service\";\nimport { PolicyService } from \"../abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { PolicyType } from \"../enums/policyType\";\nimport { EFFLongWordList } from \"../misc/wordlist\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generated-password-history\";\nimport { PasswordGeneratorOptions } from \"../models/domain/password-generator-options\";\nimport { PasswordGeneratorPolicyOptions } from \"../models/domain/password-generator-policy-options\";\n\nconst DefaultOptions: PasswordGeneratorOptions = {\n length: 14,\n ambiguous: false,\n number: true,\n minNumber: 1,\n uppercase: true,\n minUppercase: 0,\n lowercase: true,\n minLowercase: 0,\n special: false,\n minSpecial: 1,\n type: \"password\",\n numWords: 3,\n wordSeparator: \"-\",\n capitalize: false,\n includeNumber: false,\n};\n\nconst MaxPasswordsInHistory = 100;\n\nexport class PasswordGenerationService implements PasswordGenerationServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private policyService: PolicyService,\n private stateService: StateService\n ) {}\n\n async generatePassword(options: PasswordGeneratorOptions): Promise {\n // overload defaults with given options\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.type === \"passphrase\") {\n return this.generatePassphrase(options);\n }\n\n // sanitize\n this.sanitizePasswordLength(o, true);\n\n const minLength: number = o.minUppercase + o.minLowercase + o.minNumber + o.minSpecial;\n if (o.length < minLength) {\n o.length = minLength;\n }\n\n const positions: string[] = [];\n if (o.lowercase && o.minLowercase > 0) {\n for (let i = 0; i < o.minLowercase; i++) {\n positions.push(\"l\");\n }\n }\n if (o.uppercase && o.minUppercase > 0) {\n for (let i = 0; i < o.minUppercase; i++) {\n positions.push(\"u\");\n }\n }\n if (o.number && o.minNumber > 0) {\n for (let i = 0; i < o.minNumber; i++) {\n positions.push(\"n\");\n }\n }\n if (o.special && o.minSpecial > 0) {\n for (let i = 0; i < o.minSpecial; i++) {\n positions.push(\"s\");\n }\n }\n while (positions.length < o.length) {\n positions.push(\"a\");\n }\n\n // shuffle\n await this.shuffleArray(positions);\n\n // build out the char sets\n let allCharSet = \"\";\n\n let lowercaseCharSet = \"abcdefghijkmnopqrstuvwxyz\";\n if (o.ambiguous) {\n lowercaseCharSet += \"l\";\n }\n if (o.lowercase) {\n allCharSet += lowercaseCharSet;\n }\n\n let uppercaseCharSet = \"ABCDEFGHJKLMNPQRSTUVWXYZ\";\n if (o.ambiguous) {\n uppercaseCharSet += \"IO\";\n }\n if (o.uppercase) {\n allCharSet += uppercaseCharSet;\n }\n\n let numberCharSet = \"23456789\";\n if (o.ambiguous) {\n numberCharSet += \"01\";\n }\n if (o.number) {\n allCharSet += numberCharSet;\n }\n\n const specialCharSet = \"!@#$%^&*\";\n if (o.special) {\n allCharSet += specialCharSet;\n }\n\n let password = \"\";\n for (let i = 0; i < o.length; i++) {\n let positionChars: string;\n switch (positions[i]) {\n case \"l\":\n positionChars = lowercaseCharSet;\n break;\n case \"u\":\n positionChars = uppercaseCharSet;\n break;\n case \"n\":\n positionChars = numberCharSet;\n break;\n case \"s\":\n positionChars = specialCharSet;\n break;\n case \"a\":\n positionChars = allCharSet;\n break;\n default:\n break;\n }\n\n const randomCharIndex = await this.cryptoService.randomNumber(0, positionChars.length - 1);\n password += positionChars.charAt(randomCharIndex);\n }\n\n return password;\n }\n\n async generatePassphrase(options: PasswordGeneratorOptions): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.numWords == null || o.numWords <= 2) {\n o.numWords = DefaultOptions.numWords;\n }\n if (o.wordSeparator == null || o.wordSeparator.length === 0 || o.wordSeparator.length > 1) {\n o.wordSeparator = \" \";\n }\n if (o.capitalize == null) {\n o.capitalize = false;\n }\n if (o.includeNumber == null) {\n o.includeNumber = false;\n }\n\n const listLength = EFFLongWordList.length - 1;\n const wordList = new Array(o.numWords);\n for (let i = 0; i < o.numWords; i++) {\n const wordIndex = await this.cryptoService.randomNumber(0, listLength);\n if (o.capitalize) {\n wordList[i] = this.capitalize(EFFLongWordList[wordIndex]);\n } else {\n wordList[i] = EFFLongWordList[wordIndex];\n }\n }\n\n if (o.includeNumber) {\n await this.appendRandomNumberToRandomWord(wordList);\n }\n return wordList.join(o.wordSeparator);\n }\n\n async getOptions(): Promise<[PasswordGeneratorOptions, PasswordGeneratorPolicyOptions]> {\n let options = await this.stateService.getPasswordGenerationOptions();\n if (options == null) {\n options = Object.assign({}, DefaultOptions);\n } else {\n options = Object.assign({}, DefaultOptions, options);\n }\n await this.stateService.setPasswordGenerationOptions(options);\n const enforcedOptions = await this.enforcePasswordGeneratorPoliciesOnOptions(options);\n options = enforcedOptions[0];\n return [options, enforcedOptions[1]];\n }\n\n async enforcePasswordGeneratorPoliciesOnOptions(\n options: PasswordGeneratorOptions\n ): Promise<[PasswordGeneratorOptions, PasswordGeneratorPolicyOptions]> {\n let enforcedPolicyOptions = await this.getPasswordGeneratorPolicyOptions();\n if (enforcedPolicyOptions != null) {\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (enforcedPolicyOptions.useUppercase) {\n options.uppercase = true;\n }\n\n if (enforcedPolicyOptions.useLowercase) {\n options.lowercase = true;\n }\n\n if (enforcedPolicyOptions.useNumbers) {\n options.number = true;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (enforcedPolicyOptions.useSpecial) {\n options.special = true;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n // Must normalize these fields because the receiving call expects all options to pass the current rules\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (enforcedPolicyOptions.capitalize) {\n options.capitalize = true;\n }\n\n if (enforcedPolicyOptions.includeNumber) {\n options.includeNumber = true;\n }\n\n // Force default type if password/passphrase selected via policy\n if (\n enforcedPolicyOptions.defaultType === \"password\" ||\n enforcedPolicyOptions.defaultType === \"passphrase\"\n ) {\n options.type = enforcedPolicyOptions.defaultType;\n }\n } else {\n // UI layer expects an instantiated object to prevent more explicit null checks\n enforcedPolicyOptions = new PasswordGeneratorPolicyOptions();\n }\n return [options, enforcedPolicyOptions];\n }\n\n async getPasswordGeneratorPolicyOptions(): Promise {\n const policies = await this.policyService?.getAll(PolicyType.PasswordGenerator);\n let enforcedOptions: PasswordGeneratorPolicyOptions = null;\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach((currentPolicy) => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new PasswordGeneratorPolicyOptions();\n }\n\n // Password wins in multi-org collisions\n if (currentPolicy.data.defaultType != null && enforcedOptions.defaultType !== \"password\") {\n enforcedOptions.defaultType = currentPolicy.data.defaultType;\n }\n\n if (\n currentPolicy.data.minLength != null &&\n currentPolicy.data.minLength > enforcedOptions.minLength\n ) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.useUpper) {\n enforcedOptions.useUppercase = true;\n }\n\n if (currentPolicy.data.useLower) {\n enforcedOptions.useLowercase = true;\n }\n\n if (currentPolicy.data.useNumbers) {\n enforcedOptions.useNumbers = true;\n }\n\n if (\n currentPolicy.data.minNumbers != null &&\n currentPolicy.data.minNumbers > enforcedOptions.numberCount\n ) {\n enforcedOptions.numberCount = currentPolicy.data.minNumbers;\n }\n\n if (currentPolicy.data.useSpecial) {\n enforcedOptions.useSpecial = true;\n }\n\n if (\n currentPolicy.data.minSpecial != null &&\n currentPolicy.data.minSpecial > enforcedOptions.specialCount\n ) {\n enforcedOptions.specialCount = currentPolicy.data.minSpecial;\n }\n\n if (\n currentPolicy.data.minNumberWords != null &&\n currentPolicy.data.minNumberWords > enforcedOptions.minNumberWords\n ) {\n enforcedOptions.minNumberWords = currentPolicy.data.minNumberWords;\n }\n\n if (currentPolicy.data.capitalize) {\n enforcedOptions.capitalize = true;\n }\n\n if (currentPolicy.data.includeNumber) {\n enforcedOptions.includeNumber = true;\n }\n });\n\n return enforcedOptions;\n }\n\n async saveOptions(options: PasswordGeneratorOptions) {\n await this.stateService.setPasswordGenerationOptions(options);\n }\n\n async getHistory(): Promise {\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return new Array();\n }\n\n if ((await this.stateService.getDecryptedPasswordGenerationHistory()) == null) {\n const encrypted = await this.stateService.getEncryptedPasswordGenerationHistory();\n const decrypted = await this.decryptHistory(encrypted);\n await this.stateService.setDecryptedPasswordGenerationHistory(decrypted);\n }\n\n const passwordGenerationHistory =\n await this.stateService.getDecryptedPasswordGenerationHistory();\n return passwordGenerationHistory != null\n ? passwordGenerationHistory\n : new Array();\n }\n\n async addHistory(password: string): Promise {\n // Cannot add new history if no key is available\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return;\n }\n\n const currentHistory = await this.getHistory();\n\n // Prevent duplicates\n if (this.matchesPrevious(password, currentHistory)) {\n return;\n }\n\n currentHistory.unshift(new GeneratedPasswordHistory(password, Date.now()));\n\n // Remove old items.\n if (currentHistory.length > MaxPasswordsInHistory) {\n currentHistory.pop();\n }\n\n const newHistory = await this.encryptHistory(currentHistory);\n await this.stateService.setDecryptedPasswordGenerationHistory(currentHistory);\n return await this.stateService.setEncryptedPasswordGenerationHistory(newHistory);\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setEncryptedPasswordGenerationHistory(null, { userId: userId });\n await this.stateService.setDecryptedPasswordGenerationHistory(null, { userId: userId });\n }\n\n passwordStrength(password: string, userInputs: string[] = null): zxcvbn.ZXCVBNResult {\n if (password == null || password.length === 0) {\n return null;\n }\n let globalUserInputs = [\"bitwarden\", \"bit\", \"warden\"];\n if (userInputs != null && userInputs.length > 0) {\n globalUserInputs = globalUserInputs.concat(userInputs);\n }\n // Use a hash set to get rid of any duplicate user inputs\n const finalUserInputs = Array.from(new Set(globalUserInputs));\n const result = zxcvbn(password, finalUserInputs);\n return result;\n }\n\n normalizeOptions(\n options: PasswordGeneratorOptions,\n enforcedPolicyOptions: PasswordGeneratorPolicyOptions\n ) {\n options.minLowercase = 0;\n options.minUppercase = 0;\n\n if (!options.length || options.length < 5) {\n options.length = 5;\n } else if (options.length > 128) {\n options.length = 128;\n }\n\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (!options.minNumber) {\n options.minNumber = 0;\n } else if (options.minNumber > options.length) {\n options.minNumber = options.length;\n } else if (options.minNumber > 9) {\n options.minNumber = 9;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (!options.minSpecial) {\n options.minSpecial = 0;\n } else if (options.minSpecial > options.length) {\n options.minSpecial = options.length;\n } else if (options.minSpecial > 9) {\n options.minSpecial = 9;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords == null || options.length < 3) {\n options.numWords = 3;\n } else if (options.numWords > 20) {\n options.numWords = 20;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (options.wordSeparator != null && options.wordSeparator.length > 1) {\n options.wordSeparator = options.wordSeparator[0];\n }\n\n this.sanitizePasswordLength(options, false);\n }\n\n private capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n private async appendRandomNumberToRandomWord(wordList: string[]) {\n if (wordList == null || wordList.length <= 0) {\n return;\n }\n const index = await this.cryptoService.randomNumber(0, wordList.length - 1);\n const num = await this.cryptoService.randomNumber(0, 9);\n wordList[index] = wordList[index] + num;\n }\n\n private async encryptHistory(\n history: GeneratedPasswordHistory[]\n ): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async (item) => {\n const encrypted = await this.cryptoService.encrypt(item.password);\n return new GeneratedPasswordHistory(encrypted.encryptedString, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private async decryptHistory(\n history: GeneratedPasswordHistory[]\n ): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async (item) => {\n const decrypted = await this.cryptoService.decryptToUtf8(new EncString(item.password));\n return new GeneratedPasswordHistory(decrypted, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private matchesPrevious(password: string, history: GeneratedPasswordHistory[]): boolean {\n if (history == null || history.length === 0) {\n return false;\n }\n\n return history[history.length - 1].password === password;\n }\n\n // ref: https://stackoverflow.com/a/12646864/1090359\n private async shuffleArray(array: string[]) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = await this.cryptoService.randomNumber(0, i);\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n\n private sanitizePasswordLength(options: any, forGeneration: boolean) {\n let minUppercaseCalc = 0;\n let minLowercaseCalc = 0;\n let minNumberCalc: number = options.minNumber;\n let minSpecialCalc: number = options.minSpecial;\n\n if (options.uppercase && options.minUppercase <= 0) {\n minUppercaseCalc = 1;\n } else if (!options.uppercase) {\n minUppercaseCalc = 0;\n }\n\n if (options.lowercase && options.minLowercase <= 0) {\n minLowercaseCalc = 1;\n } else if (!options.lowercase) {\n minLowercaseCalc = 0;\n }\n\n if (options.number && options.minNumber <= 0) {\n minNumberCalc = 1;\n } else if (!options.number) {\n minNumberCalc = 0;\n }\n\n if (options.special && options.minSpecial <= 0) {\n minSpecialCalc = 1;\n } else if (!options.special) {\n minSpecialCalc = 0;\n }\n\n // This should never happen but is a final safety net\n if (!options.length || options.length < 1) {\n options.length = 10;\n }\n\n const minLength: number = minUppercaseCalc + minLowercaseCalc + minNumberCalc + minSpecialCalc;\n // Normalize and Generation both require this modification\n if (options.length < minLength) {\n options.length = minLength;\n }\n\n // Apply other changes if the options object passed in is for generation\n if (forGeneration) {\n options.minUppercase = minUppercaseCalc;\n options.minLowercase = minLowercaseCalc;\n options.minNumber = minNumberCalc;\n options.minSpecial = minSpecialCalc;\n }\n }\n}\n","import Domain from \"./domain-base\";\n\nexport class ResetPasswordPolicyOptions extends Domain {\n autoEnrollEnabled = false;\n}\n","export enum ProviderUserStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n Revoked = -1, // Not used, compile-time support only\n}\n","export enum ProviderUserType {\n ProviderAdmin = 0,\n ServiceUser = 1,\n}\n","import { ProviderUserStatusType } from \"../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../enums/providerUserType\";\nimport { ProviderData } from \"../data/provider.data\";\n\nexport class Provider {\n id: string;\n name: string;\n status: ProviderUserStatusType;\n type: ProviderUserType;\n enabled: boolean;\n userId: string;\n useEvents: boolean;\n\n constructor(obj?: ProviderData) {\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.name = obj.name;\n this.status = obj.status;\n this.type = obj.type;\n this.enabled = obj.enabled;\n this.userId = obj.userId;\n this.useEvents = obj.useEvents;\n }\n\n get canAccess() {\n if (this.isProviderAdmin) {\n return true;\n }\n return this.enabled && this.status === ProviderUserStatusType.Confirmed;\n }\n\n get canCreateOrganizations() {\n return this.enabled && this.isProviderAdmin;\n }\n\n get canManageUsers() {\n return this.isProviderAdmin;\n }\n\n get canAccessEventLogs() {\n return this.isProviderAdmin;\n }\n\n get isProviderAdmin() {\n return this.type === ProviderUserType.ProviderAdmin;\n }\n}\n","import * as lunr from \"lunr\";\n\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { SearchService as SearchServiceAbstraction } from \"../abstractions/search.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CipherView } from \"../models/view/cipher.view\";\nimport { SendView } from \"../models/view/send.view\";\n\nexport class SearchService implements SearchServiceAbstraction {\n private static registeredPipeline = false;\n\n indexedEntityId?: string = null;\n private indexing = false;\n private index: lunr.Index = null;\n private readonly immediateSearchLocales: string[] = [\"zh-CN\", \"zh-TW\", \"ja\", \"ko\", \"vi\"];\n private readonly defaultSearchableMinLength: number = 2;\n private searchableMinLength: number = this.defaultSearchableMinLength;\n\n constructor(\n private cipherService: CipherService,\n private logService: LogService,\n private i18nService: I18nService\n ) {\n this.i18nService.locale$.subscribe((locale) => {\n if (this.immediateSearchLocales.indexOf(locale) !== -1) {\n this.searchableMinLength = 1;\n } else {\n this.searchableMinLength = this.defaultSearchableMinLength;\n }\n });\n\n // Currently have to ensure this is only done a single time. Lunr allows you to register a function\n // multiple times but they will add a warning message to the console. The way they do that breaks when ran on a service worker.\n if (!SearchService.registeredPipeline) {\n SearchService.registeredPipeline = true;\n //register lunr pipeline function\n lunr.Pipeline.registerFunction(this.normalizeAccentsPipelineFunction, \"normalizeAccents\");\n }\n }\n\n clearIndex(): void {\n this.indexedEntityId = null;\n this.index = null;\n }\n\n isSearchable(query: string): boolean {\n query = SearchService.normalizeSearchQuery(query);\n const notSearchable =\n query == null ||\n (this.index == null && query.length < this.searchableMinLength) ||\n (this.index != null && query.length < this.searchableMinLength && query.indexOf(\">\") !== 0);\n return !notSearchable;\n }\n\n async indexCiphers(indexedEntityId?: string, ciphers?: CipherView[]): Promise {\n if (this.indexing) {\n return;\n }\n\n this.indexing = true;\n this.indexedEntityId = indexedEntityId;\n this.index = null;\n const builder = new lunr.Builder();\n builder.pipeline.add(this.normalizeAccentsPipelineFunction);\n builder.ref(\"id\");\n builder.field(\"shortid\", { boost: 100, extractor: (c: CipherView) => c.id.substr(0, 8) });\n builder.field(\"name\", {\n boost: 10,\n });\n builder.field(\"subtitle\", {\n boost: 5,\n extractor: (c: CipherView) => {\n if (c.subTitle != null && c.type === CipherType.Card) {\n return c.subTitle.replace(/\\*/g, \"\");\n }\n return c.subTitle;\n },\n });\n builder.field(\"notes\");\n builder.field(\"login.username\", {\n extractor: (c: CipherView) =>\n c.type === CipherType.Login && c.login != null ? c.login.username : null,\n });\n builder.field(\"login.uris\", { boost: 2, extractor: (c: CipherView) => this.uriExtractor(c) });\n builder.field(\"fields\", { extractor: (c: CipherView) => this.fieldExtractor(c, false) });\n builder.field(\"fields_joined\", { extractor: (c: CipherView) => this.fieldExtractor(c, true) });\n builder.field(\"attachments\", {\n extractor: (c: CipherView) => this.attachmentExtractor(c, false),\n });\n builder.field(\"attachments_joined\", {\n extractor: (c: CipherView) => this.attachmentExtractor(c, true),\n });\n builder.field(\"organizationid\", { extractor: (c: CipherView) => c.organizationId });\n ciphers = ciphers || (await this.cipherService.getAllDecrypted());\n ciphers.forEach((c) => builder.add(c));\n this.index = builder.build();\n\n this.indexing = false;\n\n this.logService.info(\"Finished search indexing\");\n }\n\n async searchCiphers(\n query: string,\n filter: ((cipher: CipherView) => boolean) | ((cipher: CipherView) => boolean)[] = null,\n ciphers: CipherView[] = null\n ): Promise {\n const results: CipherView[] = [];\n if (query != null) {\n query = SearchService.normalizeSearchQuery(query.trim().toLowerCase());\n }\n if (query === \"\") {\n query = null;\n }\n\n if (ciphers == null) {\n ciphers = await this.cipherService.getAllDecrypted();\n }\n\n if (filter != null && Array.isArray(filter) && filter.length > 0) {\n ciphers = ciphers.filter((c) => filter.every((f) => f == null || f(c)));\n } else if (filter != null) {\n ciphers = ciphers.filter(filter as (cipher: CipherView) => boolean);\n }\n\n if (!this.isSearchable(query)) {\n return ciphers;\n }\n\n if (this.indexing) {\n await new Promise((r) => setTimeout(r, 250));\n if (this.indexing) {\n await new Promise((r) => setTimeout(r, 500));\n }\n }\n\n const index = this.getIndexForSearch();\n if (index == null) {\n // Fall back to basic search if index is not available\n return this.searchCiphersBasic(ciphers, query);\n }\n\n const ciphersMap = new Map();\n ciphers.forEach((c) => ciphersMap.set(c.id, c));\n\n let searchResults: lunr.Index.Result[] = null;\n const isQueryString = query != null && query.length > 1 && query.indexOf(\">\") === 0;\n if (isQueryString) {\n try {\n searchResults = index.search(query.substr(1).trim());\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n const soWild = lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING;\n searchResults = index.query((q) => {\n lunr.tokenizer(query).forEach((token) => {\n const t = token.toString();\n q.term(t, { fields: [\"name\"], wildcard: soWild });\n q.term(t, { fields: [\"subtitle\"], wildcard: soWild });\n q.term(t, { fields: [\"login.uris\"], wildcard: soWild });\n q.term(t, {});\n });\n });\n }\n\n if (searchResults != null) {\n searchResults.forEach((r) => {\n if (ciphersMap.has(r.ref)) {\n results.push(ciphersMap.get(r.ref));\n }\n });\n }\n return results;\n }\n\n searchCiphersBasic(ciphers: CipherView[], query: string, deleted = false) {\n query = SearchService.normalizeSearchQuery(query.trim().toLowerCase());\n return ciphers.filter((c) => {\n if (deleted !== c.isDeleted) {\n return false;\n }\n if (c.name != null && c.name.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (query.length >= 8 && c.id.startsWith(query)) {\n return true;\n }\n if (c.subTitle != null && c.subTitle.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (\n c.login &&\n c.login.hasUris &&\n c.login.uris.some((loginUri) => loginUri?.uri?.toLowerCase().indexOf(query) > -1)\n ) {\n return true;\n }\n return false;\n });\n }\n\n searchSends(sends: SendView[], query: string) {\n query = SearchService.normalizeSearchQuery(query.trim().toLocaleLowerCase());\n if (query === null) {\n return sends;\n }\n const sendsMatched: SendView[] = [];\n const lowPriorityMatched: SendView[] = [];\n sends.forEach((s) => {\n if (s.name != null && s.name.toLowerCase().indexOf(query) > -1) {\n sendsMatched.push(s);\n } else if (\n query.length >= 8 &&\n (s.id.startsWith(query) ||\n s.accessId.toLocaleLowerCase().startsWith(query) ||\n (s.file?.id != null && s.file.id.startsWith(query)))\n ) {\n lowPriorityMatched.push(s);\n } else if (s.notes != null && s.notes.toLowerCase().indexOf(query) > -1) {\n lowPriorityMatched.push(s);\n } else if (s.text?.text != null && s.text.text.toLowerCase().indexOf(query) > -1) {\n lowPriorityMatched.push(s);\n } else if (s.file?.fileName != null && s.file.fileName.toLowerCase().indexOf(query) > -1) {\n lowPriorityMatched.push(s);\n }\n });\n return sendsMatched.concat(lowPriorityMatched);\n }\n\n getIndexForSearch(): lunr.Index {\n return this.index;\n }\n\n private fieldExtractor(c: CipherView, joined: boolean) {\n if (!c.hasFields) {\n return null;\n }\n let fields: string[] = [];\n c.fields.forEach((f) => {\n if (f.name != null) {\n fields.push(f.name);\n }\n if (f.type === FieldType.Text && f.value != null) {\n fields.push(f.value);\n }\n });\n fields = fields.filter((f) => f.trim() !== \"\");\n if (fields.length === 0) {\n return null;\n }\n return joined ? fields.join(\" \") : fields;\n }\n\n private attachmentExtractor(c: CipherView, joined: boolean) {\n if (!c.hasAttachments) {\n return null;\n }\n let attachments: string[] = [];\n c.attachments.forEach((a) => {\n if (a != null && a.fileName != null) {\n if (joined && a.fileName.indexOf(\".\") > -1) {\n attachments.push(a.fileName.substr(0, a.fileName.lastIndexOf(\".\")));\n } else {\n attachments.push(a.fileName);\n }\n }\n });\n attachments = attachments.filter((f) => f.trim() !== \"\");\n if (attachments.length === 0) {\n return null;\n }\n return joined ? attachments.join(\" \") : attachments;\n }\n\n private uriExtractor(c: CipherView) {\n if (c.type !== CipherType.Login || c.login == null || !c.login.hasUris) {\n return null;\n }\n const uris: string[] = [];\n c.login.uris.forEach((u) => {\n if (u.uri == null || u.uri === \"\") {\n return;\n }\n if (u.hostname != null) {\n uris.push(u.hostname);\n return;\n }\n let uri = u.uri;\n if (u.match !== UriMatchType.RegularExpression) {\n const protocolIndex = uri.indexOf(\"://\");\n if (protocolIndex > -1) {\n uri = uri.substr(protocolIndex + 3);\n }\n const queryIndex = uri.search(/\\?|&|#/);\n if (queryIndex > -1) {\n uri = uri.substring(0, queryIndex);\n }\n }\n uris.push(uri);\n });\n return uris.length > 0 ? uris : null;\n }\n\n private normalizeAccentsPipelineFunction(token: lunr.Token): any {\n const searchableFields = [\"name\", \"login.username\", \"subtitle\", \"notes\"];\n const fields = (token as any).metadata[\"fields\"];\n const checkFields = fields.every((i: any) => searchableFields.includes(i));\n\n if (checkFields) {\n return SearchService.normalizeSearchQuery(token.toString());\n }\n\n return token;\n }\n\n // Remove accents/diacritics characters from text. This regex is equivalent to the Diacritic unicode property escape, i.e. it will match all diacritic characters.\n static normalizeSearchQuery(query: string): string {\n return query?.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n }\n}\n","import { SendFileData } from \"../data/send-file.data\";\nimport { SendFileView } from \"../view/send-file.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class SendFile extends Domain {\n id: string;\n size: string;\n sizeName: string;\n fileName: EncString;\n\n constructor(obj?: SendFileData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.size = obj.size;\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n sizeName: null,\n fileName: null,\n },\n [\"id\", \"sizeName\"]\n );\n }\n\n async decrypt(key: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(\n new SendFileView(this),\n {\n fileName: null,\n },\n null,\n key\n );\n return view;\n }\n}\n","import { SendTextData } from \"../data/send-text.data\";\nimport { SendTextView } from \"../view/send-text.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class SendText extends Domain {\n text: EncString;\n hidden: boolean;\n\n constructor(obj?: SendTextData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.hidden = obj.hidden;\n this.buildDomainModel(\n this,\n obj,\n {\n text: null,\n },\n []\n );\n }\n\n decrypt(key: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new SendTextView(this),\n {\n text: null,\n },\n null,\n key\n );\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { Utils } from \"../../misc/utils\";\nimport { SendData } from \"../data/send.data\";\nimport { SendView } from \"../view/send.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SendFile } from \"./send-file\";\nimport { SendText } from \"./send-text\";\n\nexport class Send extends Domain {\n id: string;\n accessId: string;\n type: SendType;\n name: EncString;\n notes: EncString;\n file: SendFile;\n text: SendText;\n key: EncString;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: Date;\n expirationDate: Date;\n deletionDate: Date;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(obj?: SendData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n accessId: null,\n name: null,\n notes: null,\n key: null,\n },\n [\"id\", \"accessId\"]\n );\n\n this.type = obj.type;\n this.maxAccessCount = obj.maxAccessCount;\n this.accessCount = obj.accessCount;\n this.password = obj.password;\n this.disabled = obj.disabled;\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n this.deletionDate = obj.deletionDate != null ? new Date(obj.deletionDate) : null;\n this.expirationDate = obj.expirationDate != null ? new Date(obj.expirationDate) : null;\n this.hideEmail = obj.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendText(obj.text);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file);\n break;\n default:\n break;\n }\n }\n\n async decrypt(): Promise {\n const model = new SendView(this);\n\n const cryptoService = Utils.getContainerService().getCryptoService();\n\n try {\n model.key = await cryptoService.decryptToBytes(this.key, null);\n model.cryptoKey = await cryptoService.makeSendKey(model.key);\n } catch (e) {\n // TODO: error?\n }\n\n await this.decryptObj(\n model,\n {\n name: null,\n notes: null,\n },\n null,\n model.cryptoKey\n );\n\n switch (this.type) {\n case SendType.File:\n model.file = await this.file.decrypt(model.cryptoKey);\n break;\n case SendType.Text:\n model.text = await this.text.decrypt(model.cryptoKey);\n break;\n default:\n break;\n }\n\n return model;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/send-file.api\";\nimport { SendTextApi } from \"../api/send-text.api\";\nimport { Send } from \"../domain/send\";\n\nexport class SendRequest {\n type: SendType;\n fileLength?: number;\n name: string;\n notes: string;\n key: string;\n maxAccessCount?: number;\n expirationDate: string;\n deletionDate: string;\n text: SendTextApi;\n file: SendFileApi;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(send: Send, fileLength?: number) {\n this.type = send.type;\n this.fileLength = fileLength;\n this.name = send.name ? send.name.encryptedString : null;\n this.notes = send.notes ? send.notes.encryptedString : null;\n this.maxAccessCount = send.maxAccessCount;\n this.expirationDate = send.expirationDate != null ? send.expirationDate.toISOString() : null;\n this.deletionDate = send.deletionDate != null ? send.deletionDate.toISOString() : null;\n this.key = send.key != null ? send.key.encryptedString : null;\n this.password = send.password;\n this.disabled = send.disabled;\n this.hideEmail = send.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendTextApi();\n this.text.text = send.text.text != null ? send.text.text.encryptedString : null;\n this.text.hidden = send.text.hidden;\n break;\n case SendType.File:\n this.file = new SendFileApi();\n this.file.fileName = send.file.fileName != null ? send.file.fileName.encryptedString : null;\n break;\n default:\n break;\n }\n }\n}\n","import { StateService } from \"../abstractions/state.service\";\nimport { TokenService as TokenServiceAbstraction } from \"../abstractions/token.service\";\nimport { Utils } from \"../misc/utils\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\n\nexport class TokenService implements TokenServiceAbstraction {\n static decodeToken(token: string): Promise {\n if (token == null) {\n throw new Error(\"Token not provided.\");\n }\n\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n throw new Error(\"JWT must have 3 parts\");\n }\n\n const decoded = Utils.fromUrlB64ToUtf8(parts[1]);\n if (decoded == null) {\n throw new Error(\"Cannot decode the token\");\n }\n\n const decodedToken = JSON.parse(decoded);\n return decodedToken;\n }\n\n constructor(private stateService: StateService) {}\n\n async setTokens(\n accessToken: string,\n refreshToken: string,\n clientIdClientSecret: [string, string]\n ): Promise {\n await this.setToken(accessToken);\n await this.setRefreshToken(refreshToken);\n if (clientIdClientSecret != null) {\n await this.setClientId(clientIdClientSecret[0]);\n await this.setClientSecret(clientIdClientSecret[1]);\n }\n }\n\n async setClientId(clientId: string): Promise {\n return await this.stateService.setApiKeyClientId(clientId);\n }\n\n async getClientId(): Promise {\n return await this.stateService.getApiKeyClientId();\n }\n\n async setClientSecret(clientSecret: string): Promise {\n return await this.stateService.setApiKeyClientSecret(clientSecret);\n }\n\n async getClientSecret(): Promise {\n return await this.stateService.getApiKeyClientSecret();\n }\n\n async setToken(token: string): Promise {\n await this.stateService.setAccessToken(token);\n }\n\n async getToken(): Promise {\n return await this.stateService.getAccessToken();\n }\n\n async setRefreshToken(refreshToken: string): Promise {\n return await this.stateService.setRefreshToken(refreshToken);\n }\n\n async getRefreshToken(): Promise {\n return await this.stateService.getRefreshToken();\n }\n\n async setTwoFactorToken(tokenResponse: IdentityTokenResponse): Promise {\n return await this.stateService.setTwoFactorToken(tokenResponse.twoFactorToken);\n }\n\n async getTwoFactorToken(): Promise {\n return await this.stateService.getTwoFactorToken();\n }\n\n async clearTwoFactorToken(): Promise {\n return await this.stateService.setTwoFactorToken(null);\n }\n\n async clearToken(userId?: string): Promise {\n await this.stateService.setAccessToken(null, { userId: userId });\n await this.stateService.setRefreshToken(null, { userId: userId });\n await this.stateService.setApiKeyClientId(null, { userId: userId });\n await this.stateService.setApiKeyClientSecret(null, { userId: userId });\n }\n\n // jwthelper methods\n // ref https://github.com/auth0/angular-jwt/blob/master/src/angularJwt/services/jwt.js\n\n async decodeToken(token?: string): Promise {\n token = token ?? (await this.stateService.getAccessToken());\n\n if (token == null) {\n throw new Error(\"Token not found.\");\n }\n\n return TokenService.decodeToken(token);\n }\n\n async getTokenExpirationDate(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.exp === \"undefined\") {\n return null;\n }\n\n const d = new Date(0); // The 0 here is the key, which sets the date to the epoch\n d.setUTCSeconds(decoded.exp);\n return d;\n }\n\n async tokenSecondsRemaining(offsetSeconds = 0): Promise {\n const d = await this.getTokenExpirationDate();\n if (d == null) {\n return 0;\n }\n\n const msRemaining = d.valueOf() - (new Date().valueOf() + offsetSeconds * 1000);\n return Math.round(msRemaining / 1000);\n }\n\n async tokenNeedsRefresh(minutes = 5): Promise {\n const sRemaining = await this.tokenSecondsRemaining();\n return sRemaining < 60 * minutes;\n }\n\n async getUserId(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.sub === \"undefined\") {\n throw new Error(\"No user id found\");\n }\n\n return decoded.sub as string;\n }\n\n async getEmail(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.email === \"undefined\") {\n throw new Error(\"No email found\");\n }\n\n return decoded.email as string;\n }\n\n async getEmailVerified(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.email_verified === \"undefined\") {\n throw new Error(\"No email verification found\");\n }\n\n return decoded.email_verified as boolean;\n }\n\n async getName(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.name === \"undefined\") {\n return null;\n }\n\n return decoded.name as string;\n }\n\n async getIssuer(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.iss === \"undefined\") {\n throw new Error(\"No issuer found\");\n }\n\n return decoded.iss as string;\n }\n\n async getIsExternal(): Promise {\n const decoded = await this.decodeToken();\n\n return Array.isArray(decoded.amr) && decoded.amr.includes(\"external\");\n }\n}\n","import { AbstractStorageService } from \"../abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"../enums/htmlStorageLocation\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { StateVersion } from \"../enums/stateVersion\";\nimport { ThemeType } from \"../enums/themeType\";\nimport { StateFactory } from \"../factories/stateFactory\";\nimport { CipherData } from \"../models/data/cipher.data\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { EventData } from \"../models/data/event.data\";\nimport { FolderData } from \"../models/data/folder.data\";\nimport { OrganizationData } from \"../models/data/organization.data\";\nimport { PolicyData } from \"../models/data/policy.data\";\nimport { ProviderData } from \"../models/data/provider.data\";\nimport { SendData } from \"../models/data/send.data\";\nimport {\n Account,\n AccountSettings,\n AccountSettingsSettings,\n EncryptionPair,\n} from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { EnvironmentUrls } from \"../models/domain/environment-urls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generated-password-history\";\nimport { GlobalState } from \"../models/domain/global-state\";\nimport { StorageOptions } from \"../models/domain/storage-options\";\n\nimport { TokenService } from \"./token.service\";\n\n// Originally (before January 2022) storage was handled as a flat key/value pair store.\n// With the move to a typed object for state storage these keys should no longer be in use anywhere outside of this migration.\nconst v1Keys: { [key: string]: string } = {\n accessToken: \"accessToken\",\n alwaysShowDock: \"alwaysShowDock\",\n autoConfirmFingerprints: \"autoConfirmFingerprints\",\n autoFillOnPageLoadDefault: \"autoFillOnPageLoadDefault\",\n biometricAwaitingAcceptance: \"biometricAwaitingAcceptance\",\n biometricFingerprintValidated: \"biometricFingerprintValidated\",\n biometricText: \"biometricText\",\n biometricUnlock: \"biometric\",\n clearClipboard: \"clearClipboardKey\",\n clientId: \"apikey_clientId\",\n clientSecret: \"apikey_clientSecret\",\n collapsedGroupings: \"collapsedGroupings\",\n convertAccountToKeyConnector: \"convertAccountToKeyConnector\",\n defaultUriMatch: \"defaultUriMatch\",\n disableAddLoginNotification: \"disableAddLoginNotification\",\n disableAutoBiometricsPrompt: \"noAutoPromptBiometrics\",\n disableAutoTotpCopy: \"disableAutoTotpCopy\",\n disableBadgeCounter: \"disableBadgeCounter\",\n disableChangedPasswordNotification: \"disableChangedPasswordNotification\",\n disableContextMenuItem: \"disableContextMenuItem\",\n disableFavicon: \"disableFavicon\",\n disableGa: \"disableGa\",\n dontShowCardsCurrentTab: \"dontShowCardsCurrentTab\",\n dontShowIdentitiesCurrentTab: \"dontShowIdentitiesCurrentTab\",\n emailVerified: \"emailVerified\",\n enableAlwaysOnTop: \"enableAlwaysOnTopKey\",\n enableAutoFillOnPageLoad: \"enableAutoFillOnPageLoad\",\n enableBiometric: \"enabledBiometric\",\n enableBrowserIntegration: \"enableBrowserIntegration\",\n enableBrowserIntegrationFingerprint: \"enableBrowserIntegrationFingerprint\",\n enableCloseToTray: \"enableCloseToTray\",\n enableFullWidth: \"enableFullWidth\",\n enableMinimizeToTray: \"enableMinimizeToTray\",\n enableStartToTray: \"enableStartToTrayKey\",\n enableTray: \"enableTray\",\n encKey: \"encKey\", // Generated Symmetric Key\n encOrgKeys: \"encOrgKeys\",\n encPrivate: \"encPrivateKey\",\n encProviderKeys: \"encProviderKeys\",\n entityId: \"entityId\",\n entityType: \"entityType\",\n environmentUrls: \"environmentUrls\",\n equivalentDomains: \"equivalentDomains\",\n eventCollection: \"eventCollection\",\n forcePasswordReset: \"forcePasswordReset\",\n history: \"generatedPasswordHistory\",\n installedVersion: \"installedVersion\",\n kdf: \"kdf\",\n kdfIterations: \"kdfIterations\",\n key: \"key\", // Master Key\n keyHash: \"keyHash\",\n lastActive: \"lastActive\",\n localData: \"sitesLocalData\",\n locale: \"locale\",\n mainWindowSize: \"mainWindowSize\",\n minimizeOnCopyToClipboard: \"minimizeOnCopyToClipboardKey\",\n neverDomains: \"neverDomains\",\n noAutoPromptBiometricsText: \"noAutoPromptBiometricsText\",\n openAtLogin: \"openAtLogin\",\n passwordGenerationOptions: \"passwordGenerationOptions\",\n pinProtected: \"pinProtectedKey\",\n protectedPin: \"protectedPin\",\n refreshToken: \"refreshToken\",\n ssoCodeVerifier: \"ssoCodeVerifier\",\n ssoIdentifier: \"ssoOrgIdentifier\",\n ssoState: \"ssoState\",\n stamp: \"securityStamp\",\n theme: \"theme\",\n userEmail: \"userEmail\",\n userId: \"userId\",\n usesConnector: \"usesKeyConnector\",\n vaultTimeoutAction: \"vaultTimeoutAction\",\n vaultTimeout: \"lockOption\",\n rememberedEmail: \"rememberedEmail\",\n};\n\nconst v1KeyPrefixes: { [key: string]: string } = {\n ciphers: \"ciphers_\",\n collections: \"collections_\",\n folders: \"folders_\",\n lastSync: \"lastSync_\",\n policies: \"policies_\",\n twoFactorToken: \"twoFactorToken_\",\n organizations: \"organizations_\",\n providers: \"providers_\",\n sends: \"sends_\",\n settings: \"settings_\",\n};\n\nconst keys = {\n global: \"global\",\n authenticatedAccounts: \"authenticatedAccounts\",\n activeUserId: \"activeUserId\",\n tempAccountSettings: \"tempAccountSettings\", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication\n accountActivity: \"accountActivity\",\n};\n\nconst partialKeys = {\n autoKey: \"_masterkey_auto\",\n biometricKey: \"_masterkey_biometric\",\n masterKey: \"_masterkey\",\n};\n\nexport class StateMigrationService<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n constructor(\n protected storageService: AbstractStorageService,\n protected secureStorageService: AbstractStorageService,\n protected stateFactory: StateFactory\n ) {}\n\n async needsMigration(): Promise {\n const currentStateVersion = await this.getCurrentStateVersion();\n return currentStateVersion == null || currentStateVersion < StateVersion.Latest;\n }\n\n async migrate(): Promise {\n let currentStateVersion = await this.getCurrentStateVersion();\n while (currentStateVersion < StateVersion.Latest) {\n switch (currentStateVersion) {\n case StateVersion.One:\n await this.migrateStateFrom1To2();\n break;\n case StateVersion.Two:\n await this.migrateStateFrom2To3();\n break;\n case StateVersion.Three:\n await this.migrateStateFrom3To4();\n break;\n case StateVersion.Four: {\n const authenticatedAccounts = await this.getAuthenticatedAccounts();\n for (const account of authenticatedAccounts) {\n const migratedAccount = await this.migrateAccountFrom4To5(account);\n await this.set(account.profile.userId, migratedAccount);\n }\n await this.setCurrentStateVersion(StateVersion.Five);\n break;\n }\n case StateVersion.Five: {\n const authenticatedAccounts = await this.getAuthenticatedAccounts();\n for (const account of authenticatedAccounts) {\n const migratedAccount = await this.migrateAccountFrom5To6(account);\n await this.set(account.profile.userId, migratedAccount);\n }\n await this.setCurrentStateVersion(StateVersion.Six);\n break;\n }\n }\n\n currentStateVersion += 1;\n }\n }\n\n protected async migrateStateFrom1To2(): Promise {\n const clearV1Keys = async (clearingUserId?: string) => {\n for (const key in v1Keys) {\n if (key == null) {\n continue;\n }\n await this.set(v1Keys[key], null);\n }\n if (clearingUserId != null) {\n for (const keyPrefix in v1KeyPrefixes) {\n if (keyPrefix == null) {\n continue;\n }\n await this.set(v1KeyPrefixes[keyPrefix] + userId, null);\n }\n }\n };\n\n // Some processes, like biometrics, may have already defined a value before migrations are run.\n // We don't want to null out those values if they don't exist in the old storage scheme (like for new installs)\n // So, the OOO for migration is that we:\n // 1. Check for an existing storage value from the old storage structure OR\n // 2. Check for a value already set by processes that run before migration OR\n // 3. Assign the default value\n const globals =\n (await this.get(keys.global)) ?? this.stateFactory.createGlobal(null);\n globals.stateVersion = StateVersion.Two;\n globals.environmentUrls =\n (await this.get(v1Keys.environmentUrls)) ?? globals.environmentUrls;\n globals.locale = (await this.get(v1Keys.locale)) ?? globals.locale;\n globals.noAutoPromptBiometrics =\n (await this.get(v1Keys.disableAutoBiometricsPrompt)) ??\n globals.noAutoPromptBiometrics;\n globals.noAutoPromptBiometricsText =\n (await this.get(v1Keys.noAutoPromptBiometricsText)) ??\n globals.noAutoPromptBiometricsText;\n globals.ssoCodeVerifier =\n (await this.get(v1Keys.ssoCodeVerifier)) ?? globals.ssoCodeVerifier;\n globals.ssoOrganizationIdentifier =\n (await this.get(v1Keys.ssoIdentifier)) ?? globals.ssoOrganizationIdentifier;\n globals.ssoState = (await this.get(v1Keys.ssoState)) ?? globals.ssoState;\n globals.rememberedEmail =\n (await this.get(v1Keys.rememberedEmail)) ?? globals.rememberedEmail;\n globals.theme = (await this.get(v1Keys.theme)) ?? globals.theme;\n globals.vaultTimeout = (await this.get(v1Keys.vaultTimeout)) ?? globals.vaultTimeout;\n globals.vaultTimeoutAction =\n (await this.get(v1Keys.vaultTimeoutAction)) ?? globals.vaultTimeoutAction;\n globals.window = (await this.get(v1Keys.mainWindowSize)) ?? globals.window;\n globals.enableTray = (await this.get(v1Keys.enableTray)) ?? globals.enableTray;\n globals.enableMinimizeToTray =\n (await this.get(v1Keys.enableMinimizeToTray)) ?? globals.enableMinimizeToTray;\n globals.enableCloseToTray =\n (await this.get(v1Keys.enableCloseToTray)) ?? globals.enableCloseToTray;\n globals.enableStartToTray =\n (await this.get(v1Keys.enableStartToTray)) ?? globals.enableStartToTray;\n globals.openAtLogin = (await this.get(v1Keys.openAtLogin)) ?? globals.openAtLogin;\n globals.alwaysShowDock =\n (await this.get(v1Keys.alwaysShowDock)) ?? globals.alwaysShowDock;\n globals.enableBrowserIntegration =\n (await this.get(v1Keys.enableBrowserIntegration)) ??\n globals.enableBrowserIntegration;\n globals.enableBrowserIntegrationFingerprint =\n (await this.get(v1Keys.enableBrowserIntegrationFingerprint)) ??\n globals.enableBrowserIntegrationFingerprint;\n\n const userId =\n (await this.get(v1Keys.userId)) ?? (await this.get(v1Keys.entityId));\n\n const defaultAccount = this.stateFactory.createAccount(null);\n const accountSettings: AccountSettings = {\n autoConfirmFingerPrints:\n (await this.get(v1Keys.autoConfirmFingerprints)) ??\n defaultAccount.settings.autoConfirmFingerPrints,\n autoFillOnPageLoadDefault:\n (await this.get(v1Keys.autoFillOnPageLoadDefault)) ??\n defaultAccount.settings.autoFillOnPageLoadDefault,\n biometricUnlock:\n (await this.get(v1Keys.biometricUnlock)) ??\n defaultAccount.settings.biometricUnlock,\n clearClipboard:\n (await this.get(v1Keys.clearClipboard)) ?? defaultAccount.settings.clearClipboard,\n defaultUriMatch:\n (await this.get(v1Keys.defaultUriMatch)) ?? defaultAccount.settings.defaultUriMatch,\n disableAddLoginNotification:\n (await this.get(v1Keys.disableAddLoginNotification)) ??\n defaultAccount.settings.disableAddLoginNotification,\n disableAutoBiometricsPrompt:\n (await this.get(v1Keys.disableAutoBiometricsPrompt)) ??\n defaultAccount.settings.disableAutoBiometricsPrompt,\n disableAutoTotpCopy:\n (await this.get(v1Keys.disableAutoTotpCopy)) ??\n defaultAccount.settings.disableAutoTotpCopy,\n disableBadgeCounter:\n (await this.get(v1Keys.disableBadgeCounter)) ??\n defaultAccount.settings.disableBadgeCounter,\n disableChangedPasswordNotification:\n (await this.get(v1Keys.disableChangedPasswordNotification)) ??\n defaultAccount.settings.disableChangedPasswordNotification,\n disableContextMenuItem:\n (await this.get(v1Keys.disableContextMenuItem)) ??\n defaultAccount.settings.disableContextMenuItem,\n disableGa: (await this.get(v1Keys.disableGa)) ?? defaultAccount.settings.disableGa,\n dontShowCardsCurrentTab:\n (await this.get(v1Keys.dontShowCardsCurrentTab)) ??\n defaultAccount.settings.dontShowCardsCurrentTab,\n dontShowIdentitiesCurrentTab:\n (await this.get(v1Keys.dontShowIdentitiesCurrentTab)) ??\n defaultAccount.settings.dontShowIdentitiesCurrentTab,\n enableAlwaysOnTop:\n (await this.get(v1Keys.enableAlwaysOnTop)) ??\n defaultAccount.settings.enableAlwaysOnTop,\n enableAutoFillOnPageLoad:\n (await this.get(v1Keys.enableAutoFillOnPageLoad)) ??\n defaultAccount.settings.enableAutoFillOnPageLoad,\n enableBiometric:\n (await this.get(v1Keys.enableBiometric)) ??\n defaultAccount.settings.enableBiometric,\n enableFullWidth:\n (await this.get(v1Keys.enableFullWidth)) ??\n defaultAccount.settings.enableFullWidth,\n environmentUrls: globals.environmentUrls ?? defaultAccount.settings.environmentUrls,\n equivalentDomains:\n (await this.get(v1Keys.equivalentDomains)) ??\n defaultAccount.settings.equivalentDomains,\n minimizeOnCopyToClipboard:\n (await this.get(v1Keys.minimizeOnCopyToClipboard)) ??\n defaultAccount.settings.minimizeOnCopyToClipboard,\n neverDomains:\n (await this.get(v1Keys.neverDomains)) ?? defaultAccount.settings.neverDomains,\n passwordGenerationOptions:\n (await this.get(v1Keys.passwordGenerationOptions)) ??\n defaultAccount.settings.passwordGenerationOptions,\n pinProtected: Object.assign(new EncryptionPair(), {\n decrypted: null,\n encrypted: await this.get(v1Keys.pinProtected),\n }),\n protectedPin: await this.get(v1Keys.protectedPin),\n settings:\n userId == null\n ? null\n : await this.get(v1KeyPrefixes.settings + userId),\n vaultTimeout:\n (await this.get(v1Keys.vaultTimeout)) ?? defaultAccount.settings.vaultTimeout,\n vaultTimeoutAction:\n (await this.get(v1Keys.vaultTimeoutAction)) ??\n defaultAccount.settings.vaultTimeoutAction,\n };\n\n // (userId == null) = no logged in user (so no known userId) and we need to temporarily store account specific settings in state to migrate on first auth\n // (userId != null) = we have a currently authed user (so known userId) with encrypted data and other key settings we can move, no need to temporarily store account settings\n if (userId == null) {\n await this.set(keys.tempAccountSettings, accountSettings);\n await this.set(keys.global, globals);\n await this.set(keys.authenticatedAccounts, []);\n await this.set(keys.activeUserId, null);\n await clearV1Keys();\n return;\n }\n\n globals.twoFactorToken = await this.get(v1KeyPrefixes.twoFactorToken + userId);\n await this.set(keys.global, globals);\n await this.set(userId, {\n data: {\n addEditCipherInfo: null,\n ciphers: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: CipherData }>(v1KeyPrefixes.ciphers + userId),\n },\n collapsedGroupings: null,\n collections: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: CollectionData }>(\n v1KeyPrefixes.collections + userId\n ),\n },\n eventCollection: await this.get(v1Keys.eventCollection),\n folders: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: FolderData }>(v1KeyPrefixes.folders + userId),\n },\n localData: null,\n organizations: await this.get<{ [id: string]: OrganizationData }>(\n v1KeyPrefixes.organizations + userId\n ),\n passwordGenerationHistory: {\n decrypted: null,\n encrypted: await this.get(v1Keys.history),\n },\n policies: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: PolicyData }>(v1KeyPrefixes.policies + userId),\n },\n providers: await this.get<{ [id: string]: ProviderData }>(v1KeyPrefixes.providers + userId),\n sends: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: SendData }>(v1KeyPrefixes.sends + userId),\n },\n },\n keys: {\n apiKeyClientSecret: await this.get(v1Keys.clientSecret),\n cryptoMasterKey: null,\n cryptoMasterKeyAuto: null,\n cryptoMasterKeyB64: null,\n cryptoMasterKeyBiometric: null,\n cryptoSymmetricKey: {\n encrypted: await this.get(v1Keys.encKey),\n decrypted: null,\n },\n legacyEtmKey: null,\n organizationKeys: {\n decrypted: null,\n encrypted: await this.get(v1Keys.encOrgKeys),\n },\n privateKey: {\n decrypted: null,\n encrypted: await this.get(v1Keys.encPrivate),\n },\n providerKeys: {\n decrypted: null,\n encrypted: await this.get(v1Keys.encProviderKeys),\n },\n publicKey: null,\n },\n profile: {\n apiKeyClientId: await this.get(v1Keys.clientId),\n authenticationStatus: null,\n convertAccountToKeyConnector: await this.get(v1Keys.convertAccountToKeyConnector),\n email: await this.get(v1Keys.userEmail),\n emailVerified: await this.get(v1Keys.emailVerified),\n entityId: null,\n entityType: null,\n everBeenUnlocked: null,\n forcePasswordReset: null,\n hasPremiumPersonally: null,\n kdfIterations: await this.get(v1Keys.kdfIterations),\n kdfType: await this.get(v1Keys.kdf),\n keyHash: await this.get(v1Keys.keyHash),\n lastSync: null,\n userId: userId,\n usesKeyConnector: null,\n },\n settings: accountSettings,\n tokens: {\n accessToken: await this.get(v1Keys.accessToken),\n decodedToken: null,\n refreshToken: await this.get(v1Keys.refreshToken),\n securityStamp: null,\n },\n });\n\n await this.set(keys.authenticatedAccounts, [userId]);\n await this.set(keys.activeUserId, userId);\n\n const accountActivity: { [userId: string]: number } = {\n [userId]: await this.get(v1Keys.lastActive),\n };\n accountActivity[userId] = await this.get(v1Keys.lastActive);\n await this.set(keys.accountActivity, accountActivity);\n\n await clearV1Keys(userId);\n\n if (await this.secureStorageService.has(v1Keys.key, { keySuffix: \"biometric\" })) {\n await this.secureStorageService.save(\n `${userId}${partialKeys.biometricKey}`,\n await this.secureStorageService.get(v1Keys.key, { keySuffix: \"biometric\" }),\n { keySuffix: \"biometric\" }\n );\n await this.secureStorageService.remove(v1Keys.key, { keySuffix: \"biometric\" });\n }\n\n if (await this.secureStorageService.has(v1Keys.key, { keySuffix: \"auto\" })) {\n await this.secureStorageService.save(\n `${userId}${partialKeys.autoKey}`,\n await this.secureStorageService.get(v1Keys.key, { keySuffix: \"auto\" }),\n { keySuffix: \"auto\" }\n );\n await this.secureStorageService.remove(v1Keys.key, { keySuffix: \"auto\" });\n }\n\n if (await this.secureStorageService.has(v1Keys.key)) {\n await this.secureStorageService.save(\n `${userId}${partialKeys.masterKey}`,\n await this.secureStorageService.get(v1Keys.key)\n );\n await this.secureStorageService.remove(v1Keys.key);\n }\n }\n\n protected async migrateStateFrom2To3(): Promise {\n const authenticatedUserIds = await this.get(keys.authenticatedAccounts);\n await Promise.all(\n authenticatedUserIds.map(async (userId) => {\n const account = await this.get(userId);\n if (\n account?.profile?.hasPremiumPersonally === null &&\n account.tokens?.accessToken != null\n ) {\n const decodedToken = await TokenService.decodeToken(account.tokens.accessToken);\n account.profile.hasPremiumPersonally = decodedToken.premium;\n await this.set(userId, account);\n }\n })\n );\n\n const globals = await this.getGlobals();\n globals.stateVersion = StateVersion.Three;\n await this.set(keys.global, globals);\n }\n\n protected async migrateStateFrom3To4(): Promise {\n const authenticatedUserIds = await this.get(keys.authenticatedAccounts);\n await Promise.all(\n authenticatedUserIds.map(async (userId) => {\n const account = await this.get(userId);\n if (account?.profile?.everBeenUnlocked != null) {\n delete account.profile.everBeenUnlocked;\n return this.set(userId, account);\n }\n })\n );\n\n const globals = await this.getGlobals();\n globals.stateVersion = StateVersion.Four;\n await this.set(keys.global, globals);\n }\n\n protected async migrateAccountFrom4To5(account: TAccount): Promise {\n const encryptedOrgKeys = account.keys?.organizationKeys?.encrypted;\n if (encryptedOrgKeys != null) {\n for (const [orgId, encKey] of Object.entries(encryptedOrgKeys)) {\n encryptedOrgKeys[orgId] = {\n type: \"organization\",\n key: encKey as unknown as string, // Account v4 does not reflect the current account model so we have to cast\n };\n }\n }\n\n return account;\n }\n\n protected async migrateAccountFrom5To6(account: TAccount): Promise {\n delete (account as any).keys?.legacyEtmKey;\n return account;\n }\n\n protected get options(): StorageOptions {\n return { htmlStorageLocation: HtmlStorageLocation.Local };\n }\n\n protected get(key: string): Promise {\n return this.storageService.get(key, this.options);\n }\n\n protected set(key: string, value: any): Promise {\n if (value == null) {\n return this.storageService.remove(key, this.options);\n }\n return this.storageService.save(key, value, this.options);\n }\n\n protected async getGlobals(): Promise {\n return await this.get(keys.global);\n }\n\n protected async getCurrentStateVersion(): Promise {\n return (await this.getGlobals())?.stateVersion ?? StateVersion.One;\n }\n\n protected async setCurrentStateVersion(newVersion: StateVersion): Promise {\n const globals = await this.getGlobals();\n globals.stateVersion = newVersion;\n await this.set(keys.global, globals);\n }\n\n protected async getAuthenticatedAccounts(): Promise {\n const authenticatedUserIds = await this.get(keys.authenticatedAccounts);\n return Promise.all(authenticatedUserIds.map((id) => this.get(id)));\n }\n}\n","import { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\nimport { ProfileOrganizationResponse } from \"../response/profile-organization.response\";\n\nexport class OrganizationData {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useScim: boolean;\n useCustomPermissions: boolean;\n useResetPassword: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n hasPublicAndPrivateKeys: boolean;\n providerId: string;\n providerName: string;\n isProviderUser: boolean;\n familySponsorshipFriendlyName: string;\n familySponsorshipAvailable: boolean;\n planProductType: ProductType;\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n familySponsorshipLastSyncDate?: Date;\n familySponsorshipValidUntil?: Date;\n familySponsorshipToDelete?: boolean;\n\n constructor(response: ProfileOrganizationResponse) {\n this.id = response.id;\n this.name = response.name;\n this.status = response.status;\n this.type = response.type;\n this.enabled = response.enabled;\n this.usePolicies = response.usePolicies;\n this.useGroups = response.useGroups;\n this.useDirectory = response.useDirectory;\n this.useEvents = response.useEvents;\n this.useTotp = response.useTotp;\n this.use2fa = response.use2fa;\n this.useApi = response.useApi;\n this.useSso = response.useSso;\n this.useKeyConnector = response.useKeyConnector;\n this.useScim = response.useScim;\n this.useCustomPermissions = response.useCustomPermissions;\n this.useResetPassword = response.useResetPassword;\n this.selfHost = response.selfHost;\n this.usersGetPremium = response.usersGetPremium;\n this.seats = response.seats;\n this.maxCollections = response.maxCollections;\n this.maxStorageGb = response.maxStorageGb;\n this.ssoBound = response.ssoBound;\n this.identifier = response.identifier;\n this.permissions = response.permissions;\n this.resetPasswordEnrolled = response.resetPasswordEnrolled;\n this.userId = response.userId;\n this.hasPublicAndPrivateKeys = response.hasPublicAndPrivateKeys;\n this.providerId = response.providerId;\n this.providerName = response.providerName;\n this.familySponsorshipFriendlyName = response.familySponsorshipFriendlyName;\n this.familySponsorshipAvailable = response.familySponsorshipAvailable;\n this.planProductType = response.planProductType;\n this.keyConnectorEnabled = response.keyConnectorEnabled;\n this.keyConnectorUrl = response.keyConnectorUrl;\n this.familySponsorshipLastSyncDate = response.familySponsorshipLastSyncDate;\n this.familySponsorshipValidUntil = response.familySponsorshipValidUntil;\n this.familySponsorshipToDelete = response.familySponsorshipToDelete;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { CipherService } from \"../../abstractions/cipher.service\";\nimport { CollectionService } from \"../../abstractions/collection.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { FolderApiServiceAbstraction } from \"../../abstractions/folder/folder-api.service.abstraction\";\nimport { InternalFolderService } from \"../../abstractions/folder/folder.service.abstraction\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { InternalOrganizationService } from \"../../abstractions/organization/organization.service.abstraction\";\nimport { InternalPolicyService } from \"../../abstractions/policy/policy.service.abstraction\";\nimport { ProviderService } from \"../../abstractions/provider.service\";\nimport { SendService } from \"../../abstractions/send.service\";\nimport { SettingsService } from \"../../abstractions/settings.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { SyncService as SyncServiceAbstraction } from \"../../abstractions/sync/sync.service.abstraction\";\nimport { sequentialize } from \"../../misc/sequentialize\";\nimport { CipherData } from \"../../models/data/cipher.data\";\nimport { CollectionData } from \"../../models/data/collection.data\";\nimport { FolderData } from \"../../models/data/folder.data\";\nimport { OrganizationData } from \"../../models/data/organization.data\";\nimport { PolicyData } from \"../../models/data/policy.data\";\nimport { ProviderData } from \"../../models/data/provider.data\";\nimport { SendData } from \"../../models/data/send.data\";\nimport { CipherResponse } from \"../../models/response/cipher.response\";\nimport { CollectionDetailsResponse } from \"../../models/response/collection.response\";\nimport { DomainsResponse } from \"../../models/response/domains.response\";\nimport { FolderResponse } from \"../../models/response/folder.response\";\nimport {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../../models/response/notification.response\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\nimport { ProfileResponse } from \"../../models/response/profile.response\";\nimport { SendResponse } from \"../../models/response/send.response\";\n\nexport class SyncService implements SyncServiceAbstraction {\n syncInProgress = false;\n\n constructor(\n private apiService: ApiService,\n private settingsService: SettingsService,\n private folderService: InternalFolderService,\n private cipherService: CipherService,\n private cryptoService: CryptoService,\n private collectionService: CollectionService,\n private messagingService: MessagingService,\n private policyService: InternalPolicyService,\n private sendService: SendService,\n private logService: LogService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private providerService: ProviderService,\n private folderApiService: FolderApiServiceAbstraction,\n private organizationService: InternalOrganizationService,\n private logoutCallback: (expired: boolean) => Promise\n ) {}\n\n async getLastSync(): Promise {\n if ((await this.stateService.getUserId()) == null) {\n return null;\n }\n\n const lastSync = await this.stateService.getLastSync();\n if (lastSync) {\n return new Date(lastSync);\n }\n\n return null;\n }\n\n async setLastSync(date: Date, userId?: string): Promise {\n await this.stateService.setLastSync(date.toJSON(), { userId: userId });\n }\n\n @sequentialize(() => \"fullSync\")\n async fullSync(forceSync: boolean, allowThrowOnError = false): Promise {\n this.syncStarted();\n const isAuthenticated = await this.stateService.getIsAuthenticated();\n if (!isAuthenticated) {\n return this.syncCompleted(false);\n }\n\n const now = new Date();\n let needsSync = false;\n try {\n needsSync = await this.needsSyncing(forceSync);\n } catch (e) {\n if (allowThrowOnError) {\n throw e;\n }\n }\n\n if (!needsSync) {\n await this.setLastSync(now);\n return this.syncCompleted(false);\n }\n\n try {\n await this.apiService.refreshIdentityToken();\n const response = await this.apiService.getSync();\n\n await this.syncProfile(response.profile);\n await this.syncFolders(response.folders);\n await this.syncCollections(response.collections);\n await this.syncCiphers(response.ciphers);\n await this.syncSends(response.sends);\n await this.syncSettings(response.domains);\n await this.syncPolicies(response.policies);\n\n await this.setLastSync(now);\n return this.syncCompleted(true);\n } catch (e) {\n if (allowThrowOnError) {\n throw e;\n } else {\n return this.syncCompleted(false);\n }\n }\n }\n\n async syncUpsertFolder(notification: SyncFolderNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n try {\n const localFolder = await this.folderService.get(notification.id);\n if (\n (!isEdit && localFolder == null) ||\n (isEdit && localFolder != null && localFolder.revisionDate < notification.revisionDate)\n ) {\n const remoteFolder = await this.folderApiService.get(notification.id);\n if (remoteFolder != null) {\n await this.folderService.upsert(new FolderData(remoteFolder));\n this.messagingService.send(\"syncedUpsertedFolder\", { folderId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteFolder(notification: SyncFolderNotification): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n await this.folderService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedFolder\", { folderId: notification.id });\n this.syncCompleted(true);\n return true;\n }\n return this.syncCompleted(false);\n }\n\n async syncUpsertCipher(notification: SyncCipherNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n try {\n let shouldUpdate = true;\n const localCipher = await this.cipherService.get(notification.id);\n if (localCipher != null && localCipher.revisionDate >= notification.revisionDate) {\n shouldUpdate = false;\n }\n\n let checkCollections = false;\n if (shouldUpdate) {\n if (isEdit) {\n shouldUpdate = localCipher != null;\n checkCollections = true;\n } else {\n if (notification.collectionIds == null || notification.organizationId == null) {\n shouldUpdate = localCipher == null;\n } else {\n shouldUpdate = false;\n checkCollections = true;\n }\n }\n }\n\n if (\n !shouldUpdate &&\n checkCollections &&\n notification.organizationId != null &&\n notification.collectionIds != null &&\n notification.collectionIds.length > 0\n ) {\n const collections = await this.collectionService.getAll();\n if (collections != null) {\n for (let i = 0; i < collections.length; i++) {\n if (notification.collectionIds.indexOf(collections[i].id) > -1) {\n shouldUpdate = true;\n break;\n }\n }\n }\n }\n\n if (shouldUpdate) {\n const remoteCipher = await this.apiService.getFullCipherDetails(notification.id);\n if (remoteCipher != null) {\n await this.cipherService.upsert(new CipherData(remoteCipher));\n this.messagingService.send(\"syncedUpsertedCipher\", { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n if (e != null && e.statusCode === 404 && isEdit) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedCipher\", { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteCipher(notification: SyncCipherNotification): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedCipher\", { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n return this.syncCompleted(false);\n }\n\n async syncUpsertSend(notification: SyncSendNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n try {\n const localSend = await this.sendService.get(notification.id);\n if (\n (!isEdit && localSend == null) ||\n (isEdit && localSend != null && localSend.revisionDate < notification.revisionDate)\n ) {\n const remoteSend = await this.apiService.getSend(notification.id);\n if (remoteSend != null) {\n await this.sendService.upsert(new SendData(remoteSend));\n this.messagingService.send(\"syncedUpsertedSend\", { sendId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteSend(notification: SyncSendNotification): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n await this.sendService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedSend\", { sendId: notification.id });\n this.syncCompleted(true);\n return true;\n }\n return this.syncCompleted(false);\n }\n\n // Helpers\n\n private syncStarted() {\n this.syncInProgress = true;\n this.messagingService.send(\"syncStarted\");\n }\n\n private syncCompleted(successfully: boolean): boolean {\n this.syncInProgress = false;\n this.messagingService.send(\"syncCompleted\", { successfully: successfully });\n return successfully;\n }\n\n private async needsSyncing(forceSync: boolean) {\n if (forceSync) {\n return true;\n }\n\n const lastSync = await this.getLastSync();\n if (lastSync == null || lastSync.getTime() === 0) {\n return true;\n }\n\n const response = await this.apiService.getAccountRevisionDate();\n if (new Date(response) <= lastSync) {\n return false;\n }\n return true;\n }\n\n private async syncProfile(response: ProfileResponse) {\n const stamp = await this.stateService.getSecurityStamp();\n if (stamp != null && stamp !== response.securityStamp) {\n if (this.logoutCallback != null) {\n await this.logoutCallback(true);\n }\n\n throw new Error(\"Stamp has changed\");\n }\n\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(response.privateKey);\n await this.cryptoService.setProviderKeys(response.providers);\n await this.cryptoService.setOrgKeys(response.organizations, response.providerOrganizations);\n await this.stateService.setSecurityStamp(response.securityStamp);\n await this.stateService.setEmailVerified(response.emailVerified);\n await this.stateService.setHasPremiumPersonally(response.premiumPersonally);\n await this.stateService.setHasPremiumFromOrganization(response.premiumFromOrganization);\n await this.stateService.setForcePasswordReset(response.forcePasswordReset);\n await this.keyConnectorService.setUsesKeyConnector(response.usesKeyConnector);\n\n const organizations: { [id: string]: OrganizationData } = {};\n response.organizations.forEach((o) => {\n organizations[o.id] = new OrganizationData(o);\n });\n\n const providers: { [id: string]: ProviderData } = {};\n response.providers.forEach((p) => {\n providers[p.id] = new ProviderData(p);\n });\n\n response.providerOrganizations.forEach((o) => {\n if (organizations[o.id] == null) {\n organizations[o.id] = new OrganizationData(o);\n organizations[o.id].isProviderUser = true;\n }\n });\n\n await this.organizationService.replace(organizations);\n await this.providerService.save(providers);\n\n if (await this.keyConnectorService.userNeedsMigration()) {\n await this.keyConnectorService.setConvertAccountRequired(true);\n this.messagingService.send(\"convertAccountToKeyConnector\");\n } else {\n this.keyConnectorService.removeConvertAccountRequired();\n }\n }\n\n private async syncFolders(response: FolderResponse[]) {\n const folders: { [id: string]: FolderData } = {};\n response.forEach((f) => {\n folders[f.id] = new FolderData(f);\n });\n return await this.folderService.replace(folders);\n }\n\n private async syncCollections(response: CollectionDetailsResponse[]) {\n const collections: { [id: string]: CollectionData } = {};\n response.forEach((c) => {\n collections[c.id] = new CollectionData(c);\n });\n return await this.collectionService.replace(collections);\n }\n\n private async syncCiphers(response: CipherResponse[]) {\n const ciphers: { [id: string]: CipherData } = {};\n response.forEach((c) => {\n ciphers[c.id] = new CipherData(c);\n });\n return await this.cipherService.replace(ciphers);\n }\n\n private async syncSends(response: SendResponse[]) {\n const sends: { [id: string]: SendData } = {};\n response.forEach((s) => {\n sends[s.id] = new SendData(s);\n });\n return await this.sendService.replace(sends);\n }\n\n private async syncSettings(response: DomainsResponse) {\n let eqDomains: string[][] = [];\n if (response != null && response.equivalentDomains != null) {\n eqDomains = eqDomains.concat(response.equivalentDomains);\n }\n\n if (response != null && response.globalEquivalentDomains != null) {\n response.globalEquivalentDomains.forEach((global) => {\n if (global.domains.length > 0) {\n eqDomains.push(global.domains);\n }\n });\n }\n\n return this.settingsService.setEquivalentDomains(eqDomains);\n }\n\n private async syncPolicies(response: PolicyResponse[]) {\n const policies: { [id: string]: PolicyData } = {};\n if (response != null) {\n response.forEach((p) => {\n policies[p.id] = new PolicyData(p);\n });\n }\n return await this.policyService.replace(policies);\n }\n}\n","import { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { TotpService as TotpServiceAbstraction } from \"../abstractions/totp.service\";\nimport { Utils } from \"../misc/utils\";\n\nconst B32Chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\nconst SteamChars = \"23456789BCDFGHJKMNPQRTVWXY\";\n\nexport class TotpService implements TotpServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private logService: LogService\n ) {}\n\n async getCode(key: string): Promise {\n if (key == null) {\n return null;\n }\n let period = 30;\n let alg: \"sha1\" | \"sha256\" | \"sha512\" = \"sha1\";\n let digits = 6;\n let keyB32 = key;\n const isOtpAuth = key.toLowerCase().indexOf(\"otpauth://\") === 0;\n const isSteamAuth = !isOtpAuth && key.toLowerCase().indexOf(\"steam://\") === 0;\n if (isOtpAuth) {\n const params = Utils.getQueryParams(key);\n if (params.has(\"digits\") && params.get(\"digits\") != null) {\n try {\n const digitParams = parseInt(params.get(\"digits\").trim(), null);\n if (digitParams > 10) {\n digits = 10;\n } else if (digitParams > 0) {\n digits = digitParams;\n }\n } catch {\n this.logService.error(\"Invalid digits param.\");\n }\n }\n if (params.has(\"period\") && params.get(\"period\") != null) {\n try {\n const periodParam = parseInt(params.get(\"period\").trim(), null);\n if (periodParam > 0) {\n period = periodParam;\n }\n } catch {\n this.logService.error(\"Invalid period param.\");\n }\n }\n if (params.has(\"secret\") && params.get(\"secret\") != null) {\n keyB32 = params.get(\"secret\");\n }\n if (params.has(\"algorithm\") && params.get(\"algorithm\") != null) {\n const algParam = params.get(\"algorithm\").toLowerCase();\n if (algParam === \"sha1\" || algParam === \"sha256\" || algParam === \"sha512\") {\n alg = algParam;\n }\n }\n } else if (isSteamAuth) {\n keyB32 = key.substr(\"steam://\".length);\n digits = 5;\n }\n\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const timeHex = this.leftPad(this.decToHex(Math.floor(epoch / period)), 16, \"0\");\n const timeBytes = Utils.fromHexToArray(timeHex);\n const keyBytes = this.b32ToBytes(keyB32);\n\n if (!keyBytes.length || !timeBytes.length) {\n return null;\n }\n\n const hash = await this.sign(keyBytes, timeBytes, alg);\n if (hash.length === 0) {\n return null;\n }\n\n const offset = hash[hash.length - 1] & 0xf;\n const binary =\n ((hash[offset] & 0x7f) << 24) |\n ((hash[offset + 1] & 0xff) << 16) |\n ((hash[offset + 2] & 0xff) << 8) |\n (hash[offset + 3] & 0xff);\n\n let otp = \"\";\n if (isSteamAuth) {\n let fullCode = binary & 0x7fffffff;\n for (let i = 0; i < digits; i++) {\n otp += SteamChars[fullCode % SteamChars.length];\n fullCode = Math.trunc(fullCode / SteamChars.length);\n }\n } else {\n otp = (binary % Math.pow(10, digits)).toString();\n otp = this.leftPad(otp, digits, \"0\");\n }\n\n return otp;\n }\n\n getTimeInterval(key: string): number {\n let period = 30;\n if (key != null && key.toLowerCase().indexOf(\"otpauth://\") === 0) {\n const params = Utils.getQueryParams(key);\n if (params.has(\"period\") && params.get(\"period\") != null) {\n try {\n period = parseInt(params.get(\"period\").trim(), null);\n } catch {\n this.logService.error(\"Invalid period param.\");\n }\n }\n }\n return period;\n }\n\n // Helpers\n\n private leftPad(s: string, l: number, p: string): string {\n if (l + 1 >= s.length) {\n s = Array(l + 1 - s.length).join(p) + s;\n }\n return s;\n }\n\n private decToHex(d: number): string {\n return (d < 15.5 ? \"0\" : \"\") + Math.round(d).toString(16);\n }\n\n private b32ToHex(s: string): string {\n s = s.toUpperCase();\n let cleanedInput = \"\";\n\n for (let i = 0; i < s.length; i++) {\n if (B32Chars.indexOf(s[i]) < 0) {\n continue;\n }\n\n cleanedInput += s[i];\n }\n s = cleanedInput;\n\n let bits = \"\";\n let hex = \"\";\n for (let i = 0; i < s.length; i++) {\n const byteIndex = B32Chars.indexOf(s.charAt(i));\n if (byteIndex < 0) {\n continue;\n }\n bits += this.leftPad(byteIndex.toString(2), 5, \"0\");\n }\n for (let i = 0; i + 4 <= bits.length; i += 4) {\n const chunk = bits.substr(i, 4);\n hex = hex + parseInt(chunk, 2).toString(16);\n }\n return hex;\n }\n\n private b32ToBytes(s: string): Uint8Array {\n return Utils.fromHexToArray(this.b32ToHex(s));\n }\n\n private async sign(\n keyBytes: Uint8Array,\n timeBytes: Uint8Array,\n alg: \"sha1\" | \"sha256\" | \"sha512\"\n ) {\n const signature = await this.cryptoFunctionService.hmac(timeBytes.buffer, keyBytes.buffer, alg);\n return new Uint8Array(signature);\n }\n}\n","export class VerifyOTPRequest {\n OTP: string;\n\n constructor(OTP: string) {\n this.OTP = OTP;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarderOptions\";\n\nexport class AnonAddyForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid AnonAddy API token.\";\n }\n if (options.anonaddy?.domain == null || options.anonaddy.domain === \"\") {\n throw \"Invalid AnonAddy domain.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://app.anonaddy.com/api/v1/aliases\";\n requestInit.body = JSON.stringify({\n domain: options.anonaddy.domain,\n description:\n (options.website != null ? \"Website: \" + options.website + \". \" : \"\") +\n \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json?.data?.email;\n }\n if (response.status === 401) {\n throw \"Invalid AnonAddy API token.\";\n }\n throw \"Unknown AnonAddy error occurred.\";\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarderOptions\";\n\nexport class DuckDuckGoForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid DuckDuckGo API token.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://quack.duckduckgo.com/api/email/addresses\";\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n if (json.address) {\n return `${json.address}@duck.com`;\n }\n } else if (response.status === 401) {\n throw \"Invalid DuckDuckGo API token.\";\n }\n throw \"Unknown DuckDuckGo error occurred.\";\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarderOptions\";\n\nexport class FastmailForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid Fastmail API token.\";\n }\n\n const accountId = await this.getAccountId(apiService, options);\n if (accountId == null || accountId === \"\") {\n throw \"Unable to obtain Fastmail masked email account ID.\";\n }\n\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://api.fastmail.com/jmap/api/\";\n requestInit.body = JSON.stringify({\n using: [\"https://www.fastmail.com/dev/maskedemail\", \"urn:ietf:params:jmap:core\"],\n methodCalls: [\n [\n \"MaskedEmail/set\",\n {\n accountId: accountId,\n create: {\n \"new-masked-email\": {\n state: \"enabled\",\n description: \"\",\n url: options.website,\n emailPrefix: options.fastmail.prefix,\n },\n },\n },\n \"0\",\n ],\n ],\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200) {\n const json = await response.json();\n if (\n json.methodResponses != null &&\n json.methodResponses.length > 0 &&\n json.methodResponses[0].length > 0\n ) {\n if (json.methodResponses[0][0] === \"MaskedEmail/set\") {\n if (json.methodResponses[0][1]?.created?.[\"new-masked-email\"] != null) {\n return json.methodResponses[0][1]?.created?.[\"new-masked-email\"]?.email;\n }\n if (json.methodResponses[0][1]?.notCreated?.[\"new-masked-email\"] != null) {\n throw (\n \"Fastmail error: \" +\n json.methodResponses[0][1]?.notCreated?.[\"new-masked-email\"]?.description\n );\n }\n } else if (json.methodResponses[0][0] === \"error\") {\n throw \"Fastmail error: \" + json.methodResponses[0][1]?.description;\n }\n }\n }\n if (response.status === 401 || response.status === 403) {\n throw \"Invalid Fastmail API token.\";\n }\n throw \"Unknown Fastmail error occurred.\";\n }\n\n private async getAccountId(apiService: ApiService, options: ForwarderOptions): Promise {\n const requestInit: RequestInit = {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n }),\n };\n const url = \"https://api.fastmail.com/.well-known/jmap\";\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200) {\n const json = await response.json();\n if (json.primaryAccounts != null) {\n return json.primaryAccounts[\"https://www.fastmail.com/dev/maskedemail\"];\n }\n }\n return null;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarderOptions\";\n\nexport class FirefoxRelayForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid Firefox Relay API token.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Token \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://relay.firefox.com/api/v1/relayaddresses/\";\n requestInit.body = JSON.stringify({\n enabled: true,\n generated_for: options.website,\n description:\n (options.website != null ? options.website + \" - \" : \"\") + \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json?.full_address;\n }\n if (response.status === 401) {\n throw \"Invalid Firefox Relay API token.\";\n }\n throw \"Unknown Firefox Relay error occurred.\";\n }\n}\n","export class ForwarderOptions {\n apiKey: string;\n website: string;\n fastmail = new FastmailForwarderOptions();\n anonaddy = new AnonAddyForwarderOptions();\n}\n\nexport class FastmailForwarderOptions {\n prefix: string;\n}\n\nexport class AnonAddyForwarderOptions {\n domain: string;\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarderOptions\";\n\nexport class SimpleLoginForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid SimpleLogin API key.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authentication: options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n let url = \"https://app.simplelogin.io/api/alias/random/new\";\n if (options.website != null) {\n url += \"?hostname=\" + options.website;\n }\n requestInit.body = JSON.stringify({\n note:\n (options.website != null ? \"Website: \" + options.website + \". \" : \"\") +\n \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json.alias;\n }\n if (response.status === 401) {\n throw \"Invalid SimpleLogin API key.\";\n }\n try {\n const json = await response.json();\n if (json?.error != null) {\n throw \"SimpleLogin error:\" + json.error;\n }\n } catch {\n // Do nothing...\n }\n throw \"Unknown SimpleLogin error occurred.\";\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { UsernameGenerationService as BaseUsernameGenerationService } from \"../abstractions/usernameGeneration.service\";\nimport { AnonAddyForwarder } from \"../emailForwarders/anonAddyForwarder\";\nimport { DuckDuckGoForwarder } from \"../emailForwarders/duckDuckGoForwarder\";\nimport { FastmailForwarder } from \"../emailForwarders/fastmailForwarder\";\nimport { FirefoxRelayForwarder } from \"../emailForwarders/firefoxRelayForwarder\";\nimport { Forwarder } from \"../emailForwarders/forwarder\";\nimport { ForwarderOptions } from \"../emailForwarders/forwarderOptions\";\nimport { SimpleLoginForwarder } from \"../emailForwarders/simpleLoginForwarder\";\nimport { EFFLongWordList } from \"../misc/wordlist\";\n\nconst DefaultOptions = {\n type: \"word\",\n wordCapitalize: true,\n wordIncludeNumber: true,\n subaddressType: \"random\",\n catchallType: \"random\",\n forwardedService: \"simplelogin\",\n forwardedAnonAddyDomain: \"anonaddy.me\",\n};\n\nexport class UsernameGenerationService implements BaseUsernameGenerationService {\n constructor(\n private cryptoService: CryptoService,\n private stateService: StateService,\n private apiService: ApiService\n ) {}\n\n generateUsername(options: any): Promise {\n if (options.type === \"catchall\") {\n return this.generateCatchall(options);\n } else if (options.type === \"subaddress\") {\n return this.generateSubaddress(options);\n } else if (options.type === \"forwarded\") {\n return this.generateForwarded(options);\n } else {\n return this.generateWord(options);\n }\n }\n\n async generateWord(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.wordCapitalize == null) {\n o.wordCapitalize = true;\n }\n if (o.wordIncludeNumber == null) {\n o.wordIncludeNumber = true;\n }\n\n const wordIndex = await this.cryptoService.randomNumber(0, EFFLongWordList.length - 1);\n let word = EFFLongWordList[wordIndex];\n if (o.wordCapitalize) {\n word = word.charAt(0).toUpperCase() + word.slice(1);\n }\n if (o.wordIncludeNumber) {\n const num = await this.cryptoService.randomNumber(1, 9999);\n word = word + this.zeroPad(num.toString(), 4);\n }\n return word;\n }\n\n async generateSubaddress(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n const subaddressEmail = o.subaddressEmail;\n if (subaddressEmail == null || subaddressEmail.length < 3) {\n return o.subaddressEmail;\n }\n const atIndex = subaddressEmail.indexOf(\"@\");\n if (atIndex < 1 || atIndex >= subaddressEmail.length - 1) {\n return subaddressEmail;\n }\n if (o.subaddressType == null) {\n o.subaddressType = \"random\";\n }\n\n const emailBeginning = subaddressEmail.substr(0, atIndex);\n const emailEnding = subaddressEmail.substr(atIndex + 1, subaddressEmail.length);\n\n let subaddressString = \"\";\n if (o.subaddressType === \"random\") {\n subaddressString = await this.randomString(8);\n } else if (o.subaddressType === \"website-name\") {\n subaddressString = o.website;\n }\n return emailBeginning + \"+\" + subaddressString + \"@\" + emailEnding;\n }\n\n async generateCatchall(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.catchallDomain == null || o.catchallDomain === \"\") {\n return null;\n }\n if (o.catchallType == null) {\n o.catchallType = \"random\";\n }\n\n let startString = \"\";\n if (o.catchallType === \"random\") {\n startString = await this.randomString(8);\n } else if (o.catchallType === \"website-name\") {\n startString = o.website;\n }\n return startString + \"@\" + o.catchallDomain;\n }\n\n async generateForwarded(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.forwardedService == null) {\n return null;\n }\n\n let forwarder: Forwarder = null;\n const forwarderOptions = new ForwarderOptions();\n forwarderOptions.website = o.website;\n if (o.forwardedService === \"simplelogin\") {\n forwarder = new SimpleLoginForwarder();\n forwarderOptions.apiKey = o.forwardedSimpleLoginApiKey;\n } else if (o.forwardedService === \"anonaddy\") {\n forwarder = new AnonAddyForwarder();\n forwarderOptions.apiKey = o.forwardedAnonAddyApiToken;\n forwarderOptions.anonaddy.domain = o.forwardedAnonAddyDomain;\n } else if (o.forwardedService === \"firefoxrelay\") {\n forwarder = new FirefoxRelayForwarder();\n forwarderOptions.apiKey = o.forwardedFirefoxApiToken;\n } else if (o.forwardedService === \"fastmail\") {\n forwarder = new FastmailForwarder();\n forwarderOptions.apiKey = o.forwardedFastmailApiToken;\n } else if (o.forwardedService === \"duckduckgo\") {\n forwarder = new DuckDuckGoForwarder();\n forwarderOptions.apiKey = o.forwardedDuckDuckGoToken;\n }\n\n if (forwarder == null) {\n return null;\n }\n\n return forwarder.generate(this.apiService, forwarderOptions);\n }\n\n async getOptions(): Promise {\n let options = await this.stateService.getUsernameGenerationOptions();\n if (options == null) {\n options = Object.assign({}, DefaultOptions);\n } else {\n options = Object.assign({}, DefaultOptions, options);\n }\n await this.stateService.setUsernameGenerationOptions(options);\n return options;\n }\n\n async saveOptions(options: any) {\n await this.stateService.setUsernameGenerationOptions(options);\n }\n\n private async randomString(length: number) {\n let str = \"\";\n const charSet = \"abcdefghijklmnopqrstuvwxyz1234567890\";\n for (let i = 0; i < length; i++) {\n const randomCharIndex = await this.cryptoService.randomNumber(0, charSet.length - 1);\n str += charSet.charAt(randomCharIndex);\n }\n return str;\n }\n\n // ref: https://stackoverflow.com/a/10073788\n private zeroPad(number: string, width: number) {\n return number.length >= width\n ? number\n : new Array(width - number.length + 1).join(\"0\") + number;\n }\n}\n","export class DecryptParameters {\n encKey: T;\n data: T;\n iv: T;\n macKey: T;\n mac: T;\n macData: T;\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable()\nexport class LockGuard implements CanActivate {\n protected homepage = \"vault\";\n protected loginpage = \"login\";\n constructor(private authService: AuthService, private router: Router) {}\n\n async canActivate() {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.Locked) {\n return true;\n }\n\n const redirectUrl =\n authStatus === AuthenticationStatus.LoggedOut ? this.loginpage : this.homepage;\n\n return this.router.createUrlTree([redirectUrl]);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable()\nexport class UnauthGuard implements CanActivate {\n protected homepage = \"vault\";\n constructor(private authService: AuthService, private router: Router) {}\n\n async canActivate() {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n return true;\n }\n\n if (authStatus === AuthenticationStatus.Locked) {\n return this.router.createUrlTree([\"lock\"]);\n }\n\n return this.router.createUrlTree([this.homepage]);\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { BroadcasterService as BaseBroadcasterService } from \"@bitwarden/common/services/broadcaster.service\";\n\n@Injectable()\nexport class BroadcasterService extends BaseBroadcasterService {}\n","import {\n BroadcasterService as BroadcasterServiceAbstraction,\n MessageBase,\n} from \"../abstractions/broadcaster.service\";\n\nexport class BroadcasterService implements BroadcasterServiceAbstraction {\n subscribers: Map void> = new Map<\n string,\n (message: MessageBase) => void\n >();\n\n send(message: MessageBase, id?: string) {\n if (id != null) {\n if (this.subscribers.has(id)) {\n this.subscribers.get(id)(message);\n }\n return;\n }\n\n this.subscribers.forEach((value) => {\n value(message);\n });\n }\n\n subscribe(id: string, messageCallback: (message: MessageBase) => void) {\n this.subscribers.set(id, messageCallback);\n }\n\n unsubscribe(id: string) {\n if (this.subscribers.has(id)) {\n this.subscribers.delete(id);\n }\n }\n}\n","import { Directive } from \"@angular/core\";\n\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\nimport { ModalRef } from \"./modal/modal.ref\";\n\n/**\n * Used to verify the user's Master Password for the \"Master Password Re-prompt\" feature only.\n * See UserVerificationComponent for any other situation where you need to verify the user's identity.\n */\n@Directive()\nexport class PasswordRepromptComponent {\n showPassword = false;\n masterPassword = \"\";\n\n constructor(\n private modalRef: ModalRef,\n private cryptoService: CryptoService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {}\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n }\n\n async submit() {\n if (!(await this.cryptoService.compareAndUpdateKeyHash(this.masterPassword, null))) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidMasterPassword\")\n );\n return;\n }\n\n this.modalRef.close(true);\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\n\nimport { PasswordRepromptComponent } from \"../components/password-reprompt.component\";\n\nimport { ModalService } from \"./modal.service\";\n\n/**\n * Used to verify the user's Master Password for the \"Master Password Re-prompt\" feature only.\n * See UserVerificationService for any other situation where you need to verify the user's identity.\n */\n@Injectable()\nexport class PasswordRepromptService implements PasswordRepromptServiceAbstraction {\n protected component = PasswordRepromptComponent;\n\n constructor(\n private modalService: ModalService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n protectedFields() {\n return [\"TOTP\", \"Password\", \"H_Field\", \"Card Number\", \"Security Code\"];\n }\n\n async showPasswordPrompt() {\n if (!(await this.enabled())) {\n return true;\n }\n\n const ref = this.modalService.open(this.component, { allowMultipleModals: true });\n\n if (ref == null) {\n return false;\n }\n\n const result = await ref.onClosedPromise();\n return result === true;\n }\n\n async enabled() {\n return !(await this.keyConnectorService.getUsesKeyConnector());\n }\n}\n","import { ThemeType } from \"@bitwarden/common/enums/themeType\";\n\nimport { Theme } from \"./theme\";\n\nexport class ThemeBuilder implements Theme {\n get effectiveTheme(): ThemeType {\n return this.configuredTheme != ThemeType.System ? this.configuredTheme : this.systemTheme;\n }\n\n constructor(readonly configuredTheme: ThemeType, readonly systemTheme: ThemeType) {}\n\n updateSystemTheme(systemTheme: ThemeType): ThemeBuilder {\n return new ThemeBuilder(this.configuredTheme, systemTheme);\n }\n\n updateConfiguredTheme(configuredTheme: ThemeType): ThemeBuilder {\n return new ThemeBuilder(configuredTheme, this.systemTheme);\n }\n}\n","import { DOCUMENT } from \"@angular/common\";\nimport { Inject, Injectable } from \"@angular/core\";\nimport { BehaviorSubject, filter, fromEvent, Observable } from \"rxjs\";\n\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { ThemeType } from \"@bitwarden/common/enums/themeType\";\n\nimport { WINDOW } from \"../injection-tokens\";\n\nimport { Theme } from \"./theme\";\nimport { ThemeBuilder } from \"./themeBuilder\";\nimport { AbstractThemingService } from \"./theming.service.abstraction\";\n\n@Injectable()\nexport class ThemingService implements AbstractThemingService {\n private _theme = new BehaviorSubject(null);\n theme$: Observable = this._theme.pipe(filter((x) => x !== null));\n\n constructor(\n private stateService: StateService,\n @Inject(WINDOW) private window: Window,\n @Inject(DOCUMENT) private document: Document\n ) {\n this.monitorThemeChanges();\n }\n\n async monitorThemeChanges(): Promise {\n this._theme.next(\n new ThemeBuilder(await this.stateService.getTheme(), await this.getSystemTheme())\n );\n this.monitorConfiguredThemeChanges();\n this.monitorSystemThemeChanges();\n }\n\n updateSystemTheme(systemTheme: ThemeType): void {\n this._theme.next(this._theme.getValue().updateSystemTheme(systemTheme));\n }\n\n async updateConfiguredTheme(theme: ThemeType): Promise {\n await this.stateService.setTheme(theme);\n this._theme.next(this._theme.getValue().updateConfiguredTheme(theme));\n }\n\n protected monitorConfiguredThemeChanges(): void {\n this.theme$.subscribe((theme: Theme) => {\n this.document.documentElement.classList.remove(\n \"theme_\" + ThemeType.Light,\n \"theme_\" + ThemeType.Dark,\n \"theme_\" + ThemeType.Nord,\n \"theme_\" + ThemeType.SolarizedDark\n );\n this.document.documentElement.classList.add(\"theme_\" + theme.effectiveTheme);\n });\n }\n\n // We use a media match query for monitoring the system theme on web and browser, but this doesn't work for electron apps on Linux.\n // In desktop we override these methods to track systemTheme with the electron renderer instead, which works for all OSs.\n protected async getSystemTheme(): Promise {\n return this.window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? ThemeType.Dark\n : ThemeType.Light;\n }\n\n protected monitorSystemThemeChanges(): void {\n fromEvent(\n this.window.matchMedia(\"(prefers-color-scheme: dark)\"),\n \"change\"\n ).subscribe((event) => {\n this.updateSystemTheme(event.matches ? ThemeType.Dark : ThemeType.Light);\n });\n }\n}\n","import { Injector, LOCALE_ID, NgModule } from \"@angular/core\";\n\nimport { AccountApiService as AccountApiServiceAbstraction } from \"@bitwarden/common/abstractions/account/account-api.service\";\nimport {\n InternalAccountService,\n AccountService as AccountServiceAbstraction,\n} from \"@bitwarden/common/abstractions/account/account.service\";\nimport { AnonymousHubService as AnonymousHubServiceAbstraction } from \"@bitwarden/common/abstractions/anonymousHub.service\";\nimport { ApiService as ApiServiceAbstraction } from \"@bitwarden/common/abstractions/api.service\";\nimport { AppIdService as AppIdServiceAbstraction } from \"@bitwarden/common/abstractions/appId.service\";\nimport { AuditService as AuditServiceAbstraction } from \"@bitwarden/common/abstractions/audit.service\";\nimport { AuthService as AuthServiceAbstraction } from \"@bitwarden/common/abstractions/auth.service\";\nimport { BroadcasterService as BroadcasterServiceAbstraction } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { CipherService as CipherServiceAbstraction } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService as CollectionServiceAbstraction } from \"@bitwarden/common/abstractions/collection.service\";\nimport { ConfigApiServiceAbstraction } from \"@bitwarden/common/abstractions/config/config-api.service.abstraction\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/abstractions/config/config.service.abstraction\";\nimport { CryptoService as CryptoServiceAbstraction } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { CryptoFunctionService as CryptoFunctionServiceAbstraction } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EncryptService } from \"@bitwarden/common/abstractions/encrypt.service\";\nimport { EnvironmentService as EnvironmentServiceAbstraction } from \"@bitwarden/common/abstractions/environment.service\";\nimport { EventService as EventServiceAbstraction } from \"@bitwarden/common/abstractions/event.service\";\nimport { ExportService as ExportServiceAbstraction } from \"@bitwarden/common/abstractions/export.service\";\nimport { FileUploadService as FileUploadServiceAbstraction } from \"@bitwarden/common/abstractions/fileUpload.service\";\nimport { FolderApiServiceAbstraction } from \"@bitwarden/common/abstractions/folder/folder-api.service.abstraction\";\nimport {\n FolderService as FolderServiceAbstraction,\n InternalFolderService,\n} from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { FormValidationErrorsService as FormValidationErrorsServiceAbstraction } from \"@bitwarden/common/abstractions/formValidationErrors.service\";\nimport { I18nService as I18nServiceAbstraction } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService as KeyConnectorServiceAbstraction } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService as LoginServiceAbstraction } from \"@bitwarden/common/abstractions/login.service\";\nimport { MessagingService as MessagingServiceAbstraction } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"@bitwarden/common/abstractions/notifications.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport {\n InternalOrganizationService,\n OrganizationService as OrganizationServiceAbstraction,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordGenerationService as PasswordGenerationServiceAbstraction } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport {\n PolicyService as PolicyServiceAbstraction,\n InternalPolicyService,\n} from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { ProviderService as ProviderServiceAbstraction } from \"@bitwarden/common/abstractions/provider.service\";\nimport { SearchService as SearchServiceAbstraction } from \"@bitwarden/common/abstractions/search.service\";\nimport { SendService as SendServiceAbstraction } from \"@bitwarden/common/abstractions/send.service\";\nimport { SettingsService as SettingsServiceAbstraction } from \"@bitwarden/common/abstractions/settings.service\";\nimport { StateService as StateServiceAbstraction } from \"@bitwarden/common/abstractions/state.service\";\nimport { StateMigrationService as StateMigrationServiceAbstraction } from \"@bitwarden/common/abstractions/stateMigration.service\";\nimport { AbstractStorageService } from \"@bitwarden/common/abstractions/storage.service\";\nimport { SyncService as SyncServiceAbstraction } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { SyncNotifierService as SyncNotifierServiceAbstraction } from \"@bitwarden/common/abstractions/sync/syncNotifier.service.abstraction\";\nimport { TokenService as TokenServiceAbstraction } from \"@bitwarden/common/abstractions/token.service\";\nimport { TotpService as TotpServiceAbstraction } from \"@bitwarden/common/abstractions/totp.service\";\nimport { TwoFactorService as TwoFactorServiceAbstraction } from \"@bitwarden/common/abstractions/twoFactor.service\";\nimport { UserVerificationApiServiceAbstraction } from \"@bitwarden/common/abstractions/userVerification/userVerification-api.service.abstraction\";\nimport { UserVerificationService as UserVerificationServiceAbstraction } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { UsernameGenerationService as UsernameGenerationServiceAbstraction } from \"@bitwarden/common/abstractions/usernameGeneration.service\";\nimport { ValidationService as ValidationServiceAbstraction } from \"@bitwarden/common/abstractions/validation.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { StateFactory } from \"@bitwarden/common/factories/stateFactory\";\nimport { flagEnabled } from \"@bitwarden/common/misc/flags\";\nimport { Account } from \"@bitwarden/common/models/domain/account\";\nimport { GlobalState } from \"@bitwarden/common/models/domain/global-state\";\nimport { AccountApiServiceImplementation } from \"@bitwarden/common/services/account/account-api.service\";\nimport { AccountServiceImplementation } from \"@bitwarden/common/services/account/account.service\";\nimport { AnonymousHubService } from \"@bitwarden/common/services/anonymousHub.service\";\nimport { ApiService } from \"@bitwarden/common/services/api.service\";\nimport { AppIdService } from \"@bitwarden/common/services/appId.service\";\nimport { AuditService } from \"@bitwarden/common/services/audit.service\";\nimport { AuthService } from \"@bitwarden/common/services/auth.service\";\nimport { CipherService } from \"@bitwarden/common/services/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/services/collection.service\";\nimport { ConfigApiService } from \"@bitwarden/common/services/config/config-api.service\";\nimport { ConfigService } from \"@bitwarden/common/services/config/config.service\";\nimport { ConsoleLogService } from \"@bitwarden/common/services/consoleLog.service\";\nimport { CryptoService } from \"@bitwarden/common/services/crypto.service\";\nimport { EncryptServiceImplementation } from \"@bitwarden/common/services/cryptography/encrypt.service.implementation\";\nimport { MultithreadEncryptServiceImplementation } from \"@bitwarden/common/services/cryptography/multithread-encrypt.service.implementation\";\nimport { EnvironmentService } from \"@bitwarden/common/services/environment.service\";\nimport { EventService } from \"@bitwarden/common/services/event.service\";\nimport { ExportService } from \"@bitwarden/common/services/export.service\";\nimport { FileUploadService } from \"@bitwarden/common/services/fileUpload.service\";\nimport { FolderApiService } from \"@bitwarden/common/services/folder/folder-api.service\";\nimport { FolderService } from \"@bitwarden/common/services/folder/folder.service\";\nimport { FormValidationErrorsService } from \"@bitwarden/common/services/formValidationErrors.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/services/keyConnector.service\";\nimport { LoginService } from \"@bitwarden/common/services/login.service\";\nimport { NotificationsService } from \"@bitwarden/common/services/notifications.service\";\nimport { OrganizationApiService } from \"@bitwarden/common/services/organization/organization-api.service\";\nimport { OrganizationService } from \"@bitwarden/common/services/organization/organization.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/services/passwordGeneration.service\";\nimport { PolicyApiService } from \"@bitwarden/common/services/policy/policy-api.service\";\nimport { PolicyService } from \"@bitwarden/common/services/policy/policy.service\";\nimport { ProviderService } from \"@bitwarden/common/services/provider.service\";\nimport { SearchService } from \"@bitwarden/common/services/search.service\";\nimport { SendService } from \"@bitwarden/common/services/send.service\";\nimport { SettingsService } from \"@bitwarden/common/services/settings.service\";\nimport { StateService } from \"@bitwarden/common/services/state.service\";\nimport { StateMigrationService } from \"@bitwarden/common/services/stateMigration.service\";\nimport { SyncService } from \"@bitwarden/common/services/sync/sync.service\";\nimport { SyncNotifierService } from \"@bitwarden/common/services/sync/syncNotifier.service\";\nimport { TokenService } from \"@bitwarden/common/services/token.service\";\nimport { TotpService } from \"@bitwarden/common/services/totp.service\";\nimport { TwoFactorService } from \"@bitwarden/common/services/twoFactor.service\";\nimport { UserVerificationApiService } from \"@bitwarden/common/services/userVerification/userVerification-api.service\";\nimport { UserVerificationService } from \"@bitwarden/common/services/userVerification/userVerification.service\";\nimport { UsernameGenerationService } from \"@bitwarden/common/services/usernameGeneration.service\";\nimport { ValidationService } from \"@bitwarden/common/services/validation.service\";\nimport { VaultTimeoutService } from \"@bitwarden/common/services/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/services/vaultTimeout/vaultTimeoutSettings.service\";\nimport { WebCryptoFunctionService } from \"@bitwarden/common/services/webCryptoFunction.service\";\n\nimport { AuthGuard } from \"../guards/auth.guard\";\nimport { LockGuard } from \"../guards/lock.guard\";\nimport { UnauthGuard } from \"../guards/unauth.guard\";\n\nimport { BroadcasterService } from \"./broadcaster.service\";\nimport {\n WINDOW,\n MEMORY_STORAGE,\n SECURE_STORAGE,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n LOGOUT_CALLBACK,\n LOCKED_CALLBACK,\n LOCALES_DIRECTORY,\n SYSTEM_LANGUAGE,\n LOG_MAC_FAILURES,\n} from \"./injection-tokens\";\nimport { ModalService } from \"./modal.service\";\nimport { PasswordRepromptService } from \"./passwordReprompt.service\";\nimport { ThemingService } from \"./theming/theming.service\";\nimport { AbstractThemingService } from \"./theming/theming.service.abstraction\";\n\n@NgModule({\n declarations: [],\n providers: [\n AuthGuard,\n UnauthGuard,\n LockGuard,\n ModalService,\n { provide: WINDOW, useValue: window },\n {\n provide: LOCALE_ID,\n useFactory: (i18nService: I18nServiceAbstraction) => i18nService.translationLocale,\n deps: [I18nServiceAbstraction],\n },\n {\n provide: LOCALES_DIRECTORY,\n useValue: \"./locales\",\n },\n {\n provide: SYSTEM_LANGUAGE,\n useFactory: (window: Window) => window.navigator.language,\n deps: [WINDOW],\n },\n {\n provide: STATE_FACTORY,\n useValue: new StateFactory(GlobalState, Account),\n },\n {\n provide: STATE_SERVICE_USE_CACHE,\n useValue: true,\n },\n {\n provide: LOGOUT_CALLBACK,\n useFactory:\n (messagingService: MessagingServiceAbstraction) => (expired: boolean, userId?: string) =>\n messagingService.send(\"logout\", { expired: expired, userId: userId }),\n deps: [MessagingServiceAbstraction],\n },\n {\n provide: LOCKED_CALLBACK,\n useValue: null,\n },\n {\n provide: LOG_MAC_FAILURES,\n useValue: true,\n },\n {\n provide: AppIdServiceAbstraction,\n useClass: AppIdService,\n deps: [AbstractStorageService],\n },\n {\n provide: AuditServiceAbstraction,\n useClass: AuditService,\n deps: [CryptoFunctionServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: AuthServiceAbstraction,\n useClass: AuthService,\n deps: [\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n TokenServiceAbstraction,\n AppIdServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n MessagingServiceAbstraction,\n LogService,\n KeyConnectorServiceAbstraction,\n EnvironmentServiceAbstraction,\n StateServiceAbstraction,\n TwoFactorServiceAbstraction,\n I18nServiceAbstraction,\n ],\n },\n {\n provide: CipherServiceAbstraction,\n useFactory: (\n cryptoService: CryptoServiceAbstraction,\n settingsService: SettingsServiceAbstraction,\n apiService: ApiServiceAbstraction,\n fileUploadService: FileUploadServiceAbstraction,\n i18nService: I18nServiceAbstraction,\n injector: Injector,\n logService: LogService,\n stateService: StateServiceAbstraction,\n encryptService: EncryptService\n ) =>\n new CipherService(\n cryptoService,\n settingsService,\n apiService,\n fileUploadService,\n i18nService,\n () => injector.get(SearchServiceAbstraction),\n logService,\n stateService,\n encryptService\n ),\n deps: [\n CryptoServiceAbstraction,\n SettingsServiceAbstraction,\n ApiServiceAbstraction,\n FileUploadServiceAbstraction,\n I18nServiceAbstraction,\n Injector, // TODO: Get rid of this circular dependency!\n LogService,\n StateServiceAbstraction,\n EncryptService,\n ],\n },\n {\n provide: FolderServiceAbstraction,\n useClass: FolderService,\n deps: [\n CryptoServiceAbstraction,\n I18nServiceAbstraction,\n CipherServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n {\n provide: InternalFolderService,\n useExisting: FolderServiceAbstraction,\n },\n {\n provide: FolderApiServiceAbstraction,\n useClass: FolderApiService,\n deps: [FolderServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: AccountApiServiceAbstraction,\n useClass: AccountApiServiceImplementation,\n deps: [\n ApiServiceAbstraction,\n UserVerificationServiceAbstraction,\n LogService,\n InternalAccountService,\n ],\n },\n {\n provide: AccountServiceAbstraction,\n useClass: AccountServiceImplementation,\n deps: [MessagingServiceAbstraction, LogService],\n },\n {\n provide: InternalAccountService,\n useExisting: AccountServiceAbstraction,\n },\n { provide: LogService, useFactory: () => new ConsoleLogService(false) },\n {\n provide: CollectionServiceAbstraction,\n useClass: CollectionService,\n deps: [CryptoServiceAbstraction, I18nServiceAbstraction, StateServiceAbstraction],\n },\n {\n provide: EnvironmentServiceAbstraction,\n useClass: EnvironmentService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: TotpServiceAbstraction,\n useClass: TotpService,\n deps: [CryptoFunctionServiceAbstraction, LogService, StateServiceAbstraction],\n },\n { provide: TokenServiceAbstraction, useClass: TokenService, deps: [StateServiceAbstraction] },\n {\n provide: CryptoServiceAbstraction,\n useClass: CryptoService,\n deps: [\n CryptoFunctionServiceAbstraction,\n EncryptService,\n PlatformUtilsServiceAbstraction,\n LogService,\n StateServiceAbstraction,\n ],\n },\n {\n provide: PasswordGenerationServiceAbstraction,\n useClass: PasswordGenerationService,\n deps: [CryptoServiceAbstraction, PolicyServiceAbstraction, StateServiceAbstraction],\n },\n {\n provide: UsernameGenerationServiceAbstraction,\n useClass: UsernameGenerationService,\n deps: [CryptoServiceAbstraction, StateServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: ApiServiceAbstraction,\n useClass: ApiService,\n deps: [\n TokenServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n EnvironmentServiceAbstraction,\n AppIdServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: FileUploadServiceAbstraction,\n useClass: FileUploadService,\n deps: [LogService, ApiServiceAbstraction],\n },\n {\n provide: SyncServiceAbstraction,\n useClass: SyncService,\n deps: [\n ApiServiceAbstraction,\n SettingsServiceAbstraction,\n FolderServiceAbstraction,\n CipherServiceAbstraction,\n CryptoServiceAbstraction,\n CollectionServiceAbstraction,\n MessagingServiceAbstraction,\n PolicyServiceAbstraction,\n SendServiceAbstraction,\n LogService,\n KeyConnectorServiceAbstraction,\n StateServiceAbstraction,\n ProviderServiceAbstraction,\n FolderApiServiceAbstraction,\n OrganizationServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n { provide: BroadcasterServiceAbstraction, useClass: BroadcasterService },\n {\n provide: SettingsServiceAbstraction,\n useClass: SettingsService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: VaultTimeoutSettingsServiceAbstraction,\n useClass: VaultTimeoutSettingsService,\n deps: [\n CryptoServiceAbstraction,\n TokenServiceAbstraction,\n PolicyServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n {\n provide: VaultTimeoutServiceAbstraction,\n useClass: VaultTimeoutService,\n deps: [\n CipherServiceAbstraction,\n FolderServiceAbstraction,\n CollectionServiceAbstraction,\n CryptoServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n MessagingServiceAbstraction,\n SearchServiceAbstraction,\n KeyConnectorServiceAbstraction,\n StateServiceAbstraction,\n AuthServiceAbstraction,\n VaultTimeoutSettingsServiceAbstraction,\n LOCKED_CALLBACK,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: StateServiceAbstraction,\n useClass: StateService,\n deps: [\n AbstractStorageService,\n SECURE_STORAGE,\n MEMORY_STORAGE,\n LogService,\n StateMigrationServiceAbstraction,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n ],\n },\n {\n provide: StateMigrationServiceAbstraction,\n useClass: StateMigrationService,\n deps: [AbstractStorageService, SECURE_STORAGE, STATE_FACTORY],\n },\n {\n provide: ExportServiceAbstraction,\n useClass: ExportService,\n deps: [\n FolderServiceAbstraction,\n CipherServiceAbstraction,\n ApiServiceAbstraction,\n CryptoServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n ],\n },\n {\n provide: SearchServiceAbstraction,\n useClass: SearchService,\n deps: [CipherServiceAbstraction, LogService, I18nServiceAbstraction],\n },\n {\n provide: NotificationsServiceAbstraction,\n useClass: NotificationsService,\n deps: [\n SyncServiceAbstraction,\n AppIdServiceAbstraction,\n ApiServiceAbstraction,\n EnvironmentServiceAbstraction,\n LOGOUT_CALLBACK,\n LogService,\n StateServiceAbstraction,\n AuthServiceAbstraction,\n ],\n },\n {\n provide: CryptoFunctionServiceAbstraction,\n useClass: WebCryptoFunctionService,\n deps: [WINDOW],\n },\n {\n provide: EncryptService,\n useFactory: encryptServiceFactory,\n deps: [CryptoFunctionServiceAbstraction, LogService, LOG_MAC_FAILURES],\n },\n {\n provide: EventServiceAbstraction,\n useClass: EventService,\n deps: [\n ApiServiceAbstraction,\n CipherServiceAbstraction,\n StateServiceAbstraction,\n LogService,\n OrganizationServiceAbstraction,\n ],\n },\n {\n provide: PolicyServiceAbstraction,\n useClass: PolicyService,\n deps: [StateServiceAbstraction, OrganizationServiceAbstraction],\n },\n {\n provide: InternalPolicyService,\n useExisting: PolicyServiceAbstraction,\n },\n {\n provide: PolicyApiServiceAbstraction,\n useClass: PolicyApiService,\n deps: [\n PolicyServiceAbstraction,\n ApiServiceAbstraction,\n StateServiceAbstraction,\n OrganizationServiceAbstraction,\n ],\n },\n {\n provide: SendServiceAbstraction,\n useClass: SendService,\n deps: [\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n FileUploadServiceAbstraction,\n I18nServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n {\n provide: KeyConnectorServiceAbstraction,\n useClass: KeyConnectorService,\n deps: [\n StateServiceAbstraction,\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n TokenServiceAbstraction,\n LogService,\n OrganizationServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n SyncNotifierServiceAbstraction,\n MessagingServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: UserVerificationServiceAbstraction,\n useClass: UserVerificationService,\n deps: [\n CryptoServiceAbstraction,\n I18nServiceAbstraction,\n UserVerificationApiServiceAbstraction,\n ],\n },\n { provide: PasswordRepromptServiceAbstraction, useClass: PasswordRepromptService },\n {\n provide: OrganizationServiceAbstraction,\n useClass: OrganizationService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: InternalOrganizationService,\n useExisting: OrganizationServiceAbstraction,\n },\n {\n provide: ProviderServiceAbstraction,\n useClass: ProviderService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: TwoFactorServiceAbstraction,\n useClass: TwoFactorService,\n deps: [I18nServiceAbstraction, PlatformUtilsServiceAbstraction],\n },\n {\n provide: AbstractThemingService,\n useClass: ThemingService,\n },\n {\n provide: FormValidationErrorsServiceAbstraction,\n useClass: FormValidationErrorsService,\n },\n {\n provide: UserVerificationApiServiceAbstraction,\n useClass: UserVerificationApiService,\n deps: [ApiServiceAbstraction],\n },\n {\n provide: OrganizationApiServiceAbstraction,\n useClass: OrganizationApiService,\n // This is a slightly odd dependency tree for a specialized api service\n // it depends on SyncService so that new data can be retrieved through the sync\n // rather than updating the OrganizationService directly. Instead OrganizationService\n // subscribes to sync notifications and will update itself based on that.\n deps: [ApiServiceAbstraction, SyncServiceAbstraction],\n },\n {\n provide: SyncNotifierServiceAbstraction,\n useClass: SyncNotifierService,\n },\n {\n provide: ConfigServiceAbstraction,\n useClass: ConfigService,\n deps: [StateServiceAbstraction, ConfigApiServiceAbstraction],\n },\n {\n provide: ConfigApiServiceAbstraction,\n useClass: ConfigApiService,\n deps: [ApiServiceAbstraction],\n },\n {\n provide: AnonymousHubServiceAbstraction,\n useClass: AnonymousHubService,\n deps: [EnvironmentServiceAbstraction, AuthServiceAbstraction, LogService],\n },\n {\n provide: ValidationServiceAbstraction,\n useClass: ValidationService,\n deps: [I18nServiceAbstraction, PlatformUtilsServiceAbstraction],\n },\n {\n provide: LoginServiceAbstraction,\n useClass: LoginService,\n },\n ],\n})\nexport class JslibServicesModule {}\n\nfunction encryptServiceFactory(\n cryptoFunctionservice: CryptoFunctionServiceAbstraction,\n logService: LogService,\n logMacFailures: boolean\n): EncryptService {\n return flagEnabled(\"multithreadDecryption\")\n ? new MultithreadEncryptServiceImplementation(cryptoFunctionservice, logService, logMacFailures)\n : new EncryptServiceImplementation(cryptoFunctionservice, logService, logMacFailures);\n}\n","import { AppIdService as AppIdServiceAbstraction } from \"../abstractions/appId.service\";\nimport { AbstractStorageService } from \"../abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"../enums/htmlStorageLocation\";\nimport { Utils } from \"../misc/utils\";\n\nexport class AppIdService implements AppIdServiceAbstraction {\n constructor(private storageService: AbstractStorageService) {}\n\n getAppId(): Promise {\n return this.makeAndGetAppId(\"appId\");\n }\n\n getAnonymousAppId(): Promise {\n return this.makeAndGetAppId(\"anonymousAppId\");\n }\n\n private async makeAndGetAppId(key: string) {\n const existingId = await this.storageService.get(key, {\n htmlStorageLocation: HtmlStorageLocation.Local,\n });\n if (existingId != null) {\n return existingId;\n }\n\n const guid = Utils.newGuid();\n await this.storageService.save(key, guid, {\n htmlStorageLocation: HtmlStorageLocation.Local,\n });\n return guid;\n }\n}\n","import { Observable, Subject } from \"rxjs\";\n\nimport { ApiService } from \"../abstractions/api.service\";\nimport { AppIdService } from \"../abstractions/appId.service\";\nimport { AuthService as AuthServiceAbstraction } from \"../abstractions/auth.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { KeyConnectorService } from \"../abstractions/keyConnector.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { MessagingService } from \"../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { TwoFactorService } from \"../abstractions/twoFactor.service\";\nimport { AuthenticationStatus } from \"../enums/authenticationStatus\";\nimport { AuthenticationType } from \"../enums/authenticationType\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { KeySuffixOptions } from \"../enums/keySuffixOptions\";\nimport { ApiLogInStrategy } from \"../misc/logInStrategies/apiLogin.strategy\";\nimport { PasswordLogInStrategy } from \"../misc/logInStrategies/passwordLogin.strategy\";\nimport { PasswordlessLogInStrategy } from \"../misc/logInStrategies/passwordlessLogin.strategy\";\nimport { SsoLogInStrategy } from \"../misc/logInStrategies/ssoLogin.strategy\";\nimport { AuthResult } from \"../models/domain/auth-result\";\nimport {\n ApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../models/domain/log-in-credentials\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { TokenTwoFactorRequest } from \"../models/request/identity-token/token-two-factor.request\";\nimport { PreloginRequest } from \"../models/request/prelogin.request\";\nimport { ErrorResponse } from \"../models/response/error.response\";\nimport { AuthRequestPushNotification } from \"../models/response/notification.response\";\n\nconst sessionTimeoutLength = 2 * 60 * 1000; // 2 minutes\n\nexport class AuthService implements AuthServiceAbstraction {\n get email(): string {\n if (\n this.logInStrategy instanceof PasswordLogInStrategy ||\n this.logInStrategy instanceof PasswordlessLogInStrategy\n ) {\n return this.logInStrategy.email;\n }\n\n return null;\n }\n\n get masterPasswordHash(): string {\n return this.logInStrategy instanceof PasswordLogInStrategy\n ? this.logInStrategy.masterPasswordHash\n : null;\n }\n\n get accessCode(): string {\n return this.logInStrategy instanceof PasswordlessLogInStrategy\n ? this.logInStrategy.accessCode\n : null;\n }\n\n get authRequestId(): string {\n return this.logInStrategy instanceof PasswordlessLogInStrategy\n ? this.logInStrategy.authRequestId\n : null;\n }\n\n private logInStrategy:\n | ApiLogInStrategy\n | PasswordLogInStrategy\n | SsoLogInStrategy\n | PasswordlessLogInStrategy;\n private sessionTimeout: any;\n\n private pushNotificationSubject = new Subject();\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n protected tokenService: TokenService,\n protected appIdService: AppIdService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected logService: LogService,\n protected keyConnectorService: KeyConnectorService,\n protected environmentService: EnvironmentService,\n protected stateService: StateService,\n protected twoFactorService: TwoFactorService,\n protected i18nService: I18nService\n ) {}\n\n async logIn(\n credentials:\n | ApiLogInCredentials\n | PasswordLogInCredentials\n | SsoLogInCredentials\n | PasswordlessLogInCredentials\n ): Promise {\n this.clearState();\n\n let strategy:\n | ApiLogInStrategy\n | PasswordLogInStrategy\n | SsoLogInStrategy\n | PasswordlessLogInStrategy;\n\n switch (credentials.type) {\n case AuthenticationType.Password:\n strategy = new PasswordLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this\n );\n break;\n case AuthenticationType.Sso:\n strategy = new SsoLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this.keyConnectorService\n );\n break;\n case AuthenticationType.Api:\n strategy = new ApiLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this.environmentService,\n this.keyConnectorService\n );\n break;\n case AuthenticationType.Passwordless:\n strategy = new PasswordlessLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this\n );\n break;\n }\n\n const result = await strategy.logIn(credentials as any);\n\n if (result?.requiresTwoFactor) {\n this.saveState(strategy);\n }\n return result;\n }\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ): Promise {\n if (this.logInStrategy == null) {\n throw new Error(this.i18nService.t(\"sessionTimeout\"));\n }\n\n try {\n const result = await this.logInStrategy.logInTwoFactor(twoFactor, captchaResponse);\n\n // Only clear state if 2FA token has been accepted, otherwise we need to be able to try again\n if (!result.requiresTwoFactor && !result.requiresCaptcha) {\n this.clearState();\n }\n return result;\n } catch (e) {\n // API exceptions are okay, but if there are any unhandled client-side errors then clear state to be safe\n if (!(e instanceof ErrorResponse)) {\n this.clearState();\n }\n throw e;\n }\n }\n\n logOut(callback: () => void) {\n callback();\n this.messagingService.send(\"loggedOut\");\n }\n\n authingWithApiKey(): boolean {\n return this.logInStrategy instanceof ApiLogInStrategy;\n }\n\n authingWithSso(): boolean {\n return this.logInStrategy instanceof SsoLogInStrategy;\n }\n\n authingWithPassword(): boolean {\n return this.logInStrategy instanceof PasswordLogInStrategy;\n }\n\n authingWithPasswordless(): boolean {\n return this.logInStrategy instanceof PasswordlessLogInStrategy;\n }\n\n async getAuthStatus(userId?: string): Promise {\n const isAuthenticated = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!isAuthenticated) {\n return AuthenticationStatus.LoggedOut;\n }\n\n // Keys aren't stored for a device that is locked or logged out\n // Make sure we're logged in before checking this, otherwise we could mix up those states\n const neverLock =\n (await this.cryptoService.hasKeyStored(KeySuffixOptions.Auto, userId)) &&\n !(await this.stateService.getEverBeenUnlocked({ userId: userId }));\n if (neverLock) {\n // TODO: This also _sets_ the key so when we check memory in the next line it finds a key.\n // We should refactor here.\n await this.cryptoService.getKey(KeySuffixOptions.Auto, userId);\n }\n\n const hasKeyInMemory = await this.cryptoService.hasKeyInMemory(userId);\n if (!hasKeyInMemory) {\n return AuthenticationStatus.Locked;\n }\n\n return AuthenticationStatus.Unlocked;\n }\n\n async makePreloginKey(masterPassword: string, email: string): Promise {\n email = email.trim().toLowerCase();\n let kdf: KdfType = null;\n let kdfIterations: number = null;\n try {\n const preloginResponse = await this.apiService.postPrelogin(new PreloginRequest(email));\n if (preloginResponse != null) {\n kdf = preloginResponse.kdf;\n kdfIterations = preloginResponse.kdfIterations;\n }\n } catch (e) {\n if (e == null || e.statusCode !== 404) {\n throw e;\n }\n }\n return this.cryptoService.makeKey(masterPassword, email, kdf, kdfIterations);\n }\n\n async authResponsePushNotifiction(notification: AuthRequestPushNotification): Promise {\n this.pushNotificationSubject.next(notification.id);\n }\n\n getPushNotifcationObs$(): Observable {\n return this.pushNotificationSubject.asObservable();\n }\n\n private saveState(\n strategy:\n | ApiLogInStrategy\n | PasswordLogInStrategy\n | SsoLogInStrategy\n | PasswordlessLogInStrategy\n ) {\n this.logInStrategy = strategy;\n this.startSessionTimeout();\n }\n\n private clearState() {\n this.logInStrategy = null;\n this.clearSessionTimeout();\n }\n\n private startSessionTimeout() {\n this.clearSessionTimeout();\n this.sessionTimeout = setTimeout(() => this.clearState(), sessionTimeoutLength);\n }\n\n private clearSessionTimeout() {\n if (this.sessionTimeout != null) {\n clearTimeout(this.sessionTimeout);\n }\n }\n}\n","import { BehaviorSubject, concatMap } from \"rxjs\";\n\nimport { CipherService } from \"../../abstractions/cipher.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { InternalFolderService as InternalFolderServiceAbstraction } from \"../../abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"../../abstractions/i18n.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { Utils } from \"../../misc/utils\";\nimport { CipherData } from \"../../models/data/cipher.data\";\nimport { FolderData } from \"../../models/data/folder.data\";\nimport { Folder } from \"../../models/domain/folder\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\nimport { FolderView } from \"../../models/view/folder.view\";\n\nexport class FolderService implements InternalFolderServiceAbstraction {\n protected _folders: BehaviorSubject = new BehaviorSubject([]);\n protected _folderViews: BehaviorSubject = new BehaviorSubject([]);\n\n folders$ = this._folders.asObservable();\n folderViews$ = this._folderViews.asObservable();\n\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private cipherService: CipherService,\n private stateService: StateService\n ) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n concatMap(async (unlocked) => {\n if (Utils.global.bitwardenContainerService == null) {\n return;\n }\n\n if (!unlocked) {\n this._folders.next([]);\n this._folderViews.next([]);\n return;\n }\n\n const data = await this.stateService.getEncryptedFolders();\n\n await this.updateObservables(data);\n })\n )\n .subscribe();\n }\n\n async clearCache(): Promise {\n this._folderViews.next([]);\n }\n\n // TODO: This should be moved to EncryptService or something\n async encrypt(model: FolderView, key?: SymmetricCryptoKey): Promise {\n const folder = new Folder();\n folder.id = model.id;\n folder.name = await this.cryptoService.encrypt(model.name, key);\n return folder;\n }\n\n async get(id: string): Promise {\n const folders = this._folders.getValue();\n\n return folders.find((folder) => folder.id === id);\n }\n\n /**\n * @deprecated Only use in CLI!\n */\n async getAllDecryptedFromState(): Promise {\n const data = await this.stateService.getEncryptedFolders();\n const folders = Object.values(data || {}).map((f) => new Folder(f));\n\n return this.decryptFolders(folders);\n }\n\n async upsert(folder: FolderData | FolderData[]): Promise {\n let folders = await this.stateService.getEncryptedFolders();\n if (folders == null) {\n folders = {};\n }\n\n if (folder instanceof FolderData) {\n const f = folder as FolderData;\n folders[f.id] = f;\n } else {\n (folder as FolderData[]).forEach((f) => {\n folders[f.id] = f;\n });\n }\n\n await this.updateObservables(folders);\n await this.stateService.setEncryptedFolders(folders);\n }\n\n async replace(folders: { [id: string]: FolderData }): Promise {\n await this.updateObservables(folders);\n await this.stateService.setEncryptedFolders(folders);\n }\n\n async clear(userId?: string): Promise {\n if (userId == null || userId == (await this.stateService.getUserId())) {\n this._folders.next([]);\n this._folderViews.next([]);\n }\n await this.stateService.setEncryptedFolders(null, { userId: userId });\n }\n\n async delete(id: string | string[]): Promise {\n const folders = await this.stateService.getEncryptedFolders();\n if (folders == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n if (folders[id] == null) {\n return;\n }\n delete folders[id];\n } else {\n (id as string[]).forEach((i) => {\n delete folders[i];\n });\n }\n\n await this.updateObservables(folders);\n await this.stateService.setEncryptedFolders(folders);\n\n // Items in a deleted folder are re-assigned to \"No Folder\"\n const ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers != null) {\n const updates: CipherData[] = [];\n for (const cId in ciphers) {\n if (ciphers[cId].folderId === id) {\n ciphers[cId].folderId = null;\n updates.push(ciphers[cId]);\n }\n }\n if (updates.length > 0) {\n this.cipherService.upsert(updates);\n }\n }\n }\n\n private async updateObservables(foldersMap: { [id: string]: FolderData }) {\n const folders = Object.values(foldersMap || {}).map((f) => new Folder(f));\n\n this._folders.next(folders);\n\n if (await this.cryptoService.hasKey()) {\n this._folderViews.next(await this.decryptFolders(folders));\n }\n }\n\n private async decryptFolders(folders: Folder[]) {\n const decryptFolderPromises = folders.map((f) => f.decrypt());\n const decryptedFolders = await Promise.all(decryptFolderPromises);\n\n decryptedFolders.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n\n const noneFolder = new FolderView();\n noneFolder.name = this.i18nService.t(\"noneFolder\");\n decryptedFolders.push(noneFolder);\n\n return decryptedFolders;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { FolderApiServiceAbstraction } from \"../../abstractions/folder/folder-api.service.abstraction\";\nimport { InternalFolderService } from \"../../abstractions/folder/folder.service.abstraction\";\nimport { FolderData } from \"../../models/data/folder.data\";\nimport { Folder } from \"../../models/domain/folder\";\nimport { FolderRequest } from \"../../models/request/folder.request\";\nimport { FolderResponse } from \"../../models/response/folder.response\";\n\nexport class FolderApiService implements FolderApiServiceAbstraction {\n constructor(private folderService: InternalFolderService, private apiService: ApiService) {}\n\n async save(folder: Folder): Promise {\n const request = new FolderRequest(folder);\n\n let response: FolderResponse;\n if (folder.id == null) {\n response = await this.postFolder(request);\n folder.id = response.id;\n } else {\n response = await this.putFolder(folder.id, request);\n }\n\n const data = new FolderData(response);\n await this.folderService.upsert(data);\n }\n\n async delete(id: string): Promise {\n await this.deleteFolder(id);\n await this.folderService.delete(id);\n }\n\n async get(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/folders/\" + id, null, true, true);\n return new FolderResponse(r);\n }\n\n private async postFolder(request: FolderRequest): Promise {\n const r = await this.apiService.send(\"POST\", \"/folders\", request, true, true);\n return new FolderResponse(r);\n }\n\n async putFolder(id: string, request: FolderRequest): Promise {\n const r = await this.apiService.send(\"PUT\", \"/folders/\" + id, request, true, true);\n return new FolderResponse(r);\n }\n\n private deleteFolder(id: string): Promise {\n return this.apiService.send(\"DELETE\", \"/folders/\" + id, null, true, false);\n }\n}\n","import { AccountApiService } from \"../../abstractions/account/account-api.service\";\nimport { InternalAccountService } from \"../../abstractions/account/account.service\";\nimport { ApiService } from \"../../abstractions/api.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { UserVerificationService } from \"../../abstractions/userVerification/userVerification.service.abstraction\";\nimport { Verification } from \"../../types/verification\";\n\nexport class AccountApiServiceImplementation implements AccountApiService {\n constructor(\n private apiService: ApiService,\n private userVerificationService: UserVerificationService,\n private logService: LogService,\n private accountService: InternalAccountService\n ) {}\n\n async deleteAccount(verification: Verification): Promise {\n try {\n const verificationRequest = await this.userVerificationService.buildRequest(verification);\n await this.apiService.send(\"DELETE\", \"/accounts\", verificationRequest, true, false);\n this.accountService.delete();\n } catch (e) {\n this.logService.error(e);\n throw e;\n }\n }\n}\n","import { InternalAccountService } from \"../../abstractions/account/account.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\n\nexport class AccountServiceImplementation implements InternalAccountService {\n constructor(private messagingService: MessagingService, private logService: LogService) {}\n\n async delete(): Promise {\n try {\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n throw e;\n }\n }\n}\n","import { CollectionService as CollectionServiceAbstraction } from \"../abstractions/collection.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { ServiceUtils } from \"../misc/serviceUtils\";\nimport { Utils } from \"../misc/utils\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { Collection } from \"../models/domain/collection\";\nimport { TreeNode } from \"../models/domain/tree-node\";\nimport { CollectionView } from \"../models/view/collection.view\";\n\nconst NestingDelimiter = \"/\";\n\nexport class CollectionService implements CollectionServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private stateService: StateService\n ) {}\n\n async clearCache(userId?: string): Promise {\n await this.stateService.setDecryptedCollections(null, { userId: userId });\n }\n\n async encrypt(model: CollectionView): Promise {\n if (model.organizationId == null) {\n throw new Error(\"Collection has no organization id.\");\n }\n const key = await this.cryptoService.getOrgKey(model.organizationId);\n if (key == null) {\n throw new Error(\"No key for this collection's organization.\");\n }\n const collection = new Collection();\n collection.id = model.id;\n collection.organizationId = model.organizationId;\n collection.readOnly = model.readOnly;\n collection.name = await this.cryptoService.encrypt(model.name, key);\n return collection;\n }\n\n async decryptMany(collections: Collection[]): Promise {\n if (collections == null) {\n return [];\n }\n const decCollections: CollectionView[] = [];\n const promises: Promise[] = [];\n collections.forEach((collection) => {\n promises.push(collection.decrypt().then((c) => decCollections.push(c)));\n });\n await Promise.all(promises);\n return decCollections.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n\n async get(id: string): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n // eslint-disable-next-line\n if (collections == null || !collections.hasOwnProperty(id)) {\n return null;\n }\n\n return new Collection(collections[id]);\n }\n\n async getAll(): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n const response: Collection[] = [];\n for (const id in collections) {\n // eslint-disable-next-line\n if (collections.hasOwnProperty(id)) {\n response.push(new Collection(collections[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n let decryptedCollections = await this.stateService.getDecryptedCollections();\n if (decryptedCollections != null) {\n return decryptedCollections;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const collections = await this.getAll();\n decryptedCollections = await this.decryptMany(collections);\n\n await this.stateService.setDecryptedCollections(decryptedCollections);\n return decryptedCollections;\n }\n\n async getAllNested(collections: CollectionView[] = null): Promise[]> {\n if (collections == null) {\n collections = await this.getAllDecrypted();\n }\n const nodes: TreeNode[] = [];\n collections.forEach((c) => {\n const collectionCopy = new CollectionView();\n collectionCopy.id = c.id;\n collectionCopy.organizationId = c.organizationId;\n const parts = c.name != null ? c.name.replace(/^\\/+|\\/+$/g, \"\").split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, collectionCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n async getNested(id: string): Promise> {\n const collections = await this.getAllNested();\n return ServiceUtils.getTreeNodeObject(collections, id) as TreeNode;\n }\n\n async upsert(collection: CollectionData | CollectionData[]): Promise {\n let collections = await this.stateService.getEncryptedCollections();\n if (collections == null) {\n collections = {};\n }\n\n if (collection instanceof CollectionData) {\n const c = collection as CollectionData;\n collections[c.id] = c;\n } else {\n (collection as CollectionData[]).forEach((c) => {\n collections[c.id] = c;\n });\n }\n\n await this.replace(collections);\n }\n\n async replace(collections: { [id: string]: CollectionData }): Promise {\n await this.clearCache();\n await this.stateService.setEncryptedCollections(collections);\n }\n\n async clear(userId?: string): Promise {\n await this.clearCache(userId);\n await this.stateService.setEncryptedCollections(null, { userId: userId });\n }\n\n async delete(id: string | string[]): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n if (collections == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n delete collections[id];\n } else {\n (id as string[]).forEach((i) => {\n delete collections[i];\n });\n }\n\n await this.replace(collections);\n }\n}\n","import { concatMap, Observable, Subject } from \"rxjs\";\n\nimport {\n EnvironmentService as EnvironmentServiceAbstraction,\n Urls,\n} from \"../abstractions/environment.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { EnvironmentUrls } from \"../models/domain/environment-urls\";\n\nexport class EnvironmentService implements EnvironmentServiceAbstraction {\n private readonly urlsSubject = new Subject();\n urls: Observable = this.urlsSubject;\n\n protected baseUrl: string;\n protected webVaultUrl: string;\n protected apiUrl: string;\n protected identityUrl: string;\n protected iconsUrl: string;\n protected notificationsUrl: string;\n protected eventsUrl: string;\n private keyConnectorUrl: string;\n private scimUrl: string = null;\n\n constructor(private stateService: StateService) {\n this.stateService.activeAccount$\n .pipe(\n concatMap(async () => {\n await this.setUrlsFromStorage();\n })\n )\n .subscribe();\n }\n\n hasBaseUrl() {\n return this.baseUrl != null;\n }\n\n getNotificationsUrl() {\n if (this.notificationsUrl != null) {\n return this.notificationsUrl;\n }\n\n if (this.baseUrl != null) {\n return this.baseUrl + \"/notifications\";\n }\n\n return \"https://notifications.bitwarden.com\";\n }\n\n getWebVaultUrl() {\n if (this.webVaultUrl != null) {\n return this.webVaultUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl;\n }\n return \"https://vault.bitwarden.com\";\n }\n\n getSendUrl() {\n return this.getWebVaultUrl() === \"https://vault.bitwarden.com\"\n ? \"https://send.bitwarden.com/#\"\n : this.getWebVaultUrl() + \"/#/send/\";\n }\n\n getIconsUrl() {\n if (this.iconsUrl != null) {\n return this.iconsUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl + \"/icons\";\n }\n\n return \"https://icons.bitwarden.net\";\n }\n\n getApiUrl() {\n if (this.apiUrl != null) {\n return this.apiUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl + \"/api\";\n }\n\n return \"https://api.bitwarden.com\";\n }\n\n getIdentityUrl() {\n if (this.identityUrl != null) {\n return this.identityUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl + \"/identity\";\n }\n\n return \"https://identity.bitwarden.com\";\n }\n\n getEventsUrl() {\n if (this.eventsUrl != null) {\n return this.eventsUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl + \"/events\";\n }\n\n return \"https://events.bitwarden.com\";\n }\n\n getKeyConnectorUrl() {\n return this.keyConnectorUrl;\n }\n\n getScimUrl() {\n if (this.scimUrl != null) {\n return this.scimUrl + \"/v2\";\n }\n\n return this.getWebVaultUrl() === \"https://vault.bitwarden.com\"\n ? \"https://scim.bitwarden.com/v2\"\n : this.getWebVaultUrl() + \"/scim/v2\";\n }\n\n async setUrlsFromStorage(): Promise {\n const urls: any = await this.stateService.getEnvironmentUrls();\n const envUrls = new EnvironmentUrls();\n\n this.baseUrl = envUrls.base = urls.base;\n this.webVaultUrl = urls.webVault;\n this.apiUrl = envUrls.api = urls.api;\n this.identityUrl = envUrls.identity = urls.identity;\n this.iconsUrl = urls.icons;\n this.notificationsUrl = urls.notifications;\n this.eventsUrl = envUrls.events = urls.events;\n this.keyConnectorUrl = urls.keyConnector;\n // scimUrl is not saved to storage\n }\n\n async setUrls(urls: Urls): Promise {\n urls.base = this.formatUrl(urls.base);\n urls.webVault = this.formatUrl(urls.webVault);\n urls.api = this.formatUrl(urls.api);\n urls.identity = this.formatUrl(urls.identity);\n urls.icons = this.formatUrl(urls.icons);\n urls.notifications = this.formatUrl(urls.notifications);\n urls.events = this.formatUrl(urls.events);\n urls.keyConnector = this.formatUrl(urls.keyConnector);\n\n // scimUrl cannot be cleared\n urls.scim = this.formatUrl(urls.scim) ?? this.scimUrl;\n\n await this.stateService.setEnvironmentUrls({\n base: urls.base,\n api: urls.api,\n identity: urls.identity,\n webVault: urls.webVault,\n icons: urls.icons,\n notifications: urls.notifications,\n events: urls.events,\n keyConnector: urls.keyConnector,\n // scimUrl is not saved to storage\n });\n\n this.baseUrl = urls.base;\n this.webVaultUrl = urls.webVault;\n this.apiUrl = urls.api;\n this.identityUrl = urls.identity;\n this.iconsUrl = urls.icons;\n this.notificationsUrl = urls.notifications;\n this.eventsUrl = urls.events;\n this.keyConnectorUrl = urls.keyConnector;\n this.scimUrl = urls.scim;\n\n this.urlsSubject.next(urls);\n\n return urls;\n }\n\n getUrls() {\n return {\n base: this.baseUrl,\n webVault: this.webVaultUrl,\n api: this.apiUrl,\n identity: this.identityUrl,\n icons: this.iconsUrl,\n notifications: this.notificationsUrl,\n events: this.eventsUrl,\n keyConnector: this.keyConnectorUrl,\n scim: this.scimUrl,\n };\n }\n\n private formatUrl(url: string): string {\n if (url == null || url === \"\") {\n return null;\n }\n\n url = url.replace(/\\/+$/g, \"\");\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = \"https://\" + url;\n }\n\n return url.trim();\n }\n\n isCloud(): boolean {\n return [\"https://api.bitwarden.com\", \"https://vault.bitwarden.com/api\"].includes(\n this.getApiUrl()\n );\n }\n}\n","import { ApiService as ApiServiceAbstraction } from \"../abstractions/api.service\";\nimport { AppIdService } from \"../abstractions/appId.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { DeviceType } from \"../enums/deviceType\";\nimport { OrganizationConnectionType } from \"../enums/organizationConnectionType\";\nimport { Utils } from \"../misc/utils\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/set-key-connector-key.request\";\nimport { AttachmentRequest } from \"../models/request/attachment.request\";\nimport { BitPayInvoiceRequest } from \"../models/request/bit-pay-invoice.request\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipher-bulk-delete.request\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipher-bulk-move.request\";\nimport { CipherBulkShareRequest } from \"../models/request/cipher-bulk-share.request\";\nimport { CipherCollectionsRequest } from \"../models/request/cipher-collections.request\";\nimport { CipherCreateRequest } from \"../models/request/cipher-create.request\";\nimport { CipherPartialRequest } from \"../models/request/cipher-partial.request\";\nimport { CipherShareRequest } from \"../models/request/cipher-share.request\";\nimport { CipherRequest } from \"../models/request/cipher.request\";\nimport { CollectionRequest } from \"../models/request/collection.request\";\nimport { DeleteRecoverRequest } from \"../models/request/delete-recover.request\";\nimport { DeviceVerificationRequest } from \"../models/request/device-verification.request\";\nimport { DeviceRequest } from \"../models/request/device.request\";\nimport { EmailTokenRequest } from \"../models/request/email-token.request\";\nimport { EmailRequest } from \"../models/request/email.request\";\nimport { EmergencyAccessAcceptRequest } from \"../models/request/emergency-access-accept.request\";\nimport { EmergencyAccessConfirmRequest } from \"../models/request/emergency-access-confirm.request\";\nimport { EmergencyAccessInviteRequest } from \"../models/request/emergency-access-invite.request\";\nimport { EmergencyAccessPasswordRequest } from \"../models/request/emergency-access-password.request\";\nimport { EmergencyAccessUpdateRequest } from \"../models/request/emergency-access-update.request\";\nimport { EventRequest } from \"../models/request/event.request\";\nimport { GroupRequest } from \"../models/request/group.request\";\nimport { IapCheckRequest } from \"../models/request/iap-check.request\";\nimport { ApiTokenRequest } from \"../models/request/identity-token/api-token.request\";\nimport { PasswordTokenRequest } from \"../models/request/identity-token/password-token.request\";\nimport { SsoTokenRequest } from \"../models/request/identity-token/sso-token.request\";\nimport { TokenTwoFactorRequest } from \"../models/request/identity-token/token-two-factor.request\";\nimport { ImportCiphersRequest } from \"../models/request/import-ciphers.request\";\nimport { ImportOrganizationCiphersRequest } from \"../models/request/import-organization-ciphers.request\";\nimport { KdfRequest } from \"../models/request/kdf.request\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/key-connector-user-key.request\";\nimport { KeysRequest } from \"../models/request/keys.request\";\nimport { OrganizationConnectionRequest } from \"../models/request/organization-connection.request\";\nimport { OrganizationImportRequest } from \"../models/request/organization-import.request\";\nimport { OrganizationUserAcceptRequest } from \"../models/request/organization-user-accept.request\";\nimport { OrganizationUserBulkConfirmRequest } from \"../models/request/organization-user-bulk-confirm.request\";\nimport { OrganizationUserBulkRequest } from \"../models/request/organization-user-bulk.request\";\nimport { OrganizationUserConfirmRequest } from \"../models/request/organization-user-confirm.request\";\nimport { OrganizationUserInviteRequest } from \"../models/request/organization-user-invite.request\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"../models/request/organization-user-reset-password-enrollment.request\";\nimport { OrganizationUserResetPasswordRequest } from \"../models/request/organization-user-reset-password.request\";\nimport { OrganizationUserUpdateGroupsRequest } from \"../models/request/organization-user-update-groups.request\";\nimport { OrganizationUserUpdateRequest } from \"../models/request/organization-user-update.request\";\nimport { OrganizationSponsorshipCreateRequest } from \"../models/request/organization/organization-sponsorship-create.request\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../models/request/organization/organization-sponsorship-redeem.request\";\nimport { PasswordHintRequest } from \"../models/request/password-hint.request\";\nimport { PasswordRequest } from \"../models/request/password.request\";\nimport { PasswordlessCreateAuthRequest } from \"../models/request/passwordless-create-auth.request\";\nimport { PaymentRequest } from \"../models/request/payment.request\";\nimport { PreloginRequest } from \"../models/request/prelogin.request\";\nimport { ProviderAddOrganizationRequest } from \"../models/request/provider/provider-add-organization.request\";\nimport { ProviderOrganizationCreateRequest } from \"../models/request/provider/provider-organization-create.request\";\nimport { ProviderSetupRequest } from \"../models/request/provider/provider-setup.request\";\nimport { ProviderUpdateRequest } from \"../models/request/provider/provider-update.request\";\nimport { ProviderUserAcceptRequest } from \"../models/request/provider/provider-user-accept.request\";\nimport { ProviderUserBulkConfirmRequest } from \"../models/request/provider/provider-user-bulk-confirm.request\";\nimport { ProviderUserBulkRequest } from \"../models/request/provider/provider-user-bulk.request\";\nimport { ProviderUserConfirmRequest } from \"../models/request/provider/provider-user-confirm.request\";\nimport { ProviderUserInviteRequest } from \"../models/request/provider/provider-user-invite.request\";\nimport { ProviderUserUpdateRequest } from \"../models/request/provider/provider-user-update.request\";\nimport { RegisterRequest } from \"../models/request/register.request\";\nimport { SecretVerificationRequest } from \"../models/request/secret-verification.request\";\nimport { SelectionReadOnlyRequest } from \"../models/request/selection-read-only.request\";\nimport { SendAccessRequest } from \"../models/request/send-access.request\";\nimport { SendRequest } from \"../models/request/send.request\";\nimport { SetPasswordRequest } from \"../models/request/set-password.request\";\nimport { StorageRequest } from \"../models/request/storage.request\";\nimport { TaxInfoUpdateRequest } from \"../models/request/tax-info-update.request\";\nimport { TwoFactorEmailRequest } from \"../models/request/two-factor-email.request\";\nimport { TwoFactorProviderRequest } from \"../models/request/two-factor-provider.request\";\nimport { TwoFactorRecoveryRequest } from \"../models/request/two-factor-recovery.request\";\nimport { UpdateDomainsRequest } from \"../models/request/update-domains.request\";\nimport { UpdateKeyRequest } from \"../models/request/update-key.request\";\nimport { UpdateProfileRequest } from \"../models/request/update-profile.request\";\nimport { UpdateTempPasswordRequest } from \"../models/request/update-temp-password.request\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../models/request/update-two-factor-authenticator.request\";\nimport { UpdateTwoFactorDuoRequest } from \"../models/request/update-two-factor-duo.request\";\nimport { UpdateTwoFactorEmailRequest } from \"../models/request/update-two-factor-email.request\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../models/request/update-two-factor-web-authn-delete.request\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../models/request/update-two-factor-web-authn.request\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../models/request/update-two-factor-yubio-otp.request\";\nimport { VerifyDeleteRecoverRequest } from \"../models/request/verify-delete-recover.request\";\nimport { VerifyEmailRequest } from \"../models/request/verify-email.request\";\nimport { ApiKeyResponse } from \"../models/response/api-key.response\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachment-upload-data.response\";\nimport { AttachmentResponse } from \"../models/response/attachment.response\";\nimport { AuthRequestResponse } from \"../models/response/auth-request.response\";\nimport { RegisterResponse } from \"../models/response/authentication/register.response\";\nimport { BillingHistoryResponse } from \"../models/response/billing-history.response\";\nimport { BillingPaymentResponse } from \"../models/response/billing-payment.response\";\nimport { BreachAccountResponse } from \"../models/response/breach-account.response\";\nimport { CipherResponse } from \"../models/response/cipher.response\";\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from \"../models/response/collection.response\";\nimport { DeviceVerificationResponse } from \"../models/response/device-verification.response\";\nimport { DomainsResponse } from \"../models/response/domains.response\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse,\n} from \"../models/response/emergency-access.response\";\nimport { ErrorResponse } from \"../models/response/error.response\";\nimport { EventResponse } from \"../models/response/event.response\";\nimport { GroupDetailsResponse, GroupResponse } from \"../models/response/group.response\";\nimport { IdentityCaptchaResponse } from \"../models/response/identity-captcha.response\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identity-two-factor.response\";\nimport { KeyConnectorUserKeyResponse } from \"../models/response/key-connector-user-key.response\";\nimport { ListResponse } from \"../models/response/list.response\";\nimport {\n OrganizationConnectionConfigApis,\n OrganizationConnectionResponse,\n} from \"../models/response/organization-connection.response\";\nimport { OrganizationExportResponse } from \"../models/response/organization-export.response\";\nimport { OrganizationSponsorshipSyncStatusResponse } from \"../models/response/organization-sponsorship-sync-status.response\";\nimport { OrganizationUserBulkPublicKeyResponse } from \"../models/response/organization-user-bulk-public-key.response\";\nimport { OrganizationUserBulkResponse } from \"../models/response/organization-user-bulk.response\";\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n} from \"../models/response/organization-user.response\";\nimport { PaymentResponse } from \"../models/response/payment.response\";\nimport { PlanResponse } from \"../models/response/plan.response\";\nimport { PolicyResponse } from \"../models/response/policy.response\";\nimport { PreloginResponse } from \"../models/response/prelogin.response\";\nimport { ProfileResponse } from \"../models/response/profile.response\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../models/response/provider/provider-organization.response\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../models/response/provider/provider-user-bulk-public-key.response\";\nimport { ProviderUserBulkResponse } from \"../models/response/provider/provider-user-bulk.response\";\nimport {\n ProviderUserResponse,\n ProviderUserUserDetailsResponse,\n} from \"../models/response/provider/provider-user.response\";\nimport { ProviderResponse } from \"../models/response/provider/provider.response\";\nimport { SelectionReadOnlyResponse } from \"../models/response/selection-read-only.response\";\nimport { SendAccessResponse } from \"../models/response/send-access.response\";\nimport { SendFileDownloadDataResponse } from \"../models/response/send-file-download-data.response\";\nimport { SendFileUploadDataResponse } from \"../models/response/send-file-upload-data.response\";\nimport { SendResponse } from \"../models/response/send.response\";\nimport { SsoPreValidateResponse } from \"../models/response/sso-pre-validate.response\";\nimport { SubscriptionResponse } from \"../models/response/subscription.response\";\nimport { SyncResponse } from \"../models/response/sync.response\";\nimport { TaxInfoResponse } from \"../models/response/tax-info.response\";\nimport { TaxRateResponse } from \"../models/response/tax-rate.response\";\nimport { TwoFactorAuthenticatorResponse } from \"../models/response/two-factor-authenticator.response\";\nimport { TwoFactorDuoResponse } from \"../models/response/two-factor-duo.response\";\nimport { TwoFactorEmailResponse } from \"../models/response/two-factor-email.response\";\nimport { TwoFactorProviderResponse } from \"../models/response/two-factor-provider.response\";\nimport { TwoFactorRecoverResponse } from \"../models/response/two-factor-recover.response\";\nimport {\n TwoFactorWebAuthnResponse,\n ChallengeResponse,\n} from \"../models/response/two-factor-web-authn.response\";\nimport { TwoFactorYubiKeyResponse } from \"../models/response/two-factor-yubi-key.response\";\nimport { UserKeyResponse } from \"../models/response/user-key.response\";\nimport { SendAccessView } from \"../models/view/send-access.view\";\n\nexport class ApiService implements ApiServiceAbstraction {\n private device: DeviceType;\n private deviceType: string;\n private isWebClient = false;\n private isDesktopClient = false;\n\n constructor(\n private tokenService: TokenService,\n private platformUtilsService: PlatformUtilsService,\n private environmentService: EnvironmentService,\n private appIdService: AppIdService,\n private logoutCallback: (expired: boolean) => Promise,\n private customUserAgent: string = null\n ) {\n this.device = platformUtilsService.getDevice();\n this.deviceType = this.device.toString();\n this.isWebClient =\n this.device === DeviceType.IEBrowser ||\n this.device === DeviceType.ChromeBrowser ||\n this.device === DeviceType.EdgeBrowser ||\n this.device === DeviceType.FirefoxBrowser ||\n this.device === DeviceType.OperaBrowser ||\n this.device === DeviceType.SafariBrowser ||\n this.device === DeviceType.UnknownBrowser ||\n this.device === DeviceType.VivaldiBrowser;\n this.isDesktopClient =\n this.device === DeviceType.WindowsDesktop ||\n this.device === DeviceType.MacOsDesktop ||\n this.device === DeviceType.LinuxDesktop;\n }\n\n // Auth APIs\n\n async postIdentityToken(\n request: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest\n ): Promise {\n const headers = new Headers({\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n request.alterIdentityTokenHeaders(headers);\n\n const identityToken =\n request instanceof ApiTokenRequest\n ? request.toIdentityToken()\n : request.toIdentityToken(this.platformUtilsService.getClientType());\n\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + \"/connect/token\", {\n body: this.qsStringify(identityToken),\n credentials: this.getCredentials(),\n cache: \"no-store\",\n headers: headers,\n method: \"POST\",\n })\n );\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n }\n\n if (responseJson != null) {\n if (response.status === 200) {\n return new IdentityTokenResponse(responseJson);\n } else if (\n response.status === 400 &&\n responseJson.TwoFactorProviders2 &&\n Object.keys(responseJson.TwoFactorProviders2).length\n ) {\n await this.tokenService.clearTwoFactorToken();\n return new IdentityTwoFactorResponse(responseJson);\n } else if (\n response.status === 400 &&\n responseJson.HCaptcha_SiteKey &&\n Object.keys(responseJson.HCaptcha_SiteKey).length\n ) {\n return new IdentityCaptchaResponse(responseJson);\n }\n }\n\n return Promise.reject(new ErrorResponse(responseJson, response.status, true));\n }\n\n async refreshIdentityToken(): Promise {\n try {\n await this.doAuthRefresh();\n } catch (e) {\n return Promise.reject(null);\n }\n }\n\n async postAuthRequest(request: PasswordlessCreateAuthRequest): Promise {\n const r = await this.send(\"POST\", \"/auth-requests/\", request, false, true);\n return new AuthRequestResponse(r);\n }\n\n async getAuthResponse(id: string, accessCode: string): Promise {\n const path = `/auth-requests/${id}/response?code=${accessCode}`;\n const r = await this.send(\"GET\", path, null, false, true);\n return new AuthRequestResponse(r);\n }\n\n // Account APIs\n\n async getProfile(): Promise {\n const r = await this.send(\"GET\", \"/accounts/profile\", null, true, true);\n return new ProfileResponse(r);\n }\n\n async getUserSubscription(): Promise {\n const r = await this.send(\"GET\", \"/accounts/subscription\", null, true, true);\n return new SubscriptionResponse(r);\n }\n\n async getTaxInfo(): Promise {\n const r = await this.send(\"GET\", \"/accounts/tax\", null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async putProfile(request: UpdateProfileRequest): Promise {\n const r = await this.send(\"PUT\", \"/accounts/profile\", request, true, true);\n return new ProfileResponse(r);\n }\n\n putTaxInfo(request: TaxInfoUpdateRequest): Promise {\n return this.send(\"PUT\", \"/accounts/tax\", request, true, false);\n }\n\n async postPrelogin(request: PreloginRequest): Promise {\n const r = await this.send(\n \"POST\",\n \"/accounts/prelogin\",\n request,\n false,\n true,\n this.environmentService.getIdentityUrl()\n );\n return new PreloginResponse(r);\n }\n\n postEmailToken(request: EmailTokenRequest): Promise {\n return this.send(\"POST\", \"/accounts/email-token\", request, true, false);\n }\n\n postEmail(request: EmailRequest): Promise {\n return this.send(\"POST\", \"/accounts/email\", request, true, false);\n }\n\n postPassword(request: PasswordRequest): Promise {\n return this.send(\"POST\", \"/accounts/password\", request, true, false);\n }\n\n setPassword(request: SetPasswordRequest): Promise {\n return this.send(\"POST\", \"/accounts/set-password\", request, true, false);\n }\n\n postSetKeyConnectorKey(request: SetKeyConnectorKeyRequest): Promise {\n return this.send(\"POST\", \"/accounts/set-key-connector-key\", request, true, false);\n }\n\n postSecurityStamp(request: SecretVerificationRequest): Promise {\n return this.send(\"POST\", \"/accounts/security-stamp\", request, true, false);\n }\n\n async getAccountRevisionDate(): Promise {\n const r = await this.send(\"GET\", \"/accounts/revision-date\", null, true, true);\n return r as number;\n }\n\n postPasswordHint(request: PasswordHintRequest): Promise {\n return this.send(\"POST\", \"/accounts/password-hint\", request, false, false);\n }\n\n async postRegister(request: RegisterRequest): Promise {\n const r = await this.send(\n \"POST\",\n \"/accounts/register\",\n request,\n false,\n true,\n this.environmentService.getIdentityUrl()\n );\n return new RegisterResponse(r);\n }\n\n async postPremium(data: FormData): Promise {\n const r = await this.send(\"POST\", \"/accounts/premium\", data, true, true);\n return new PaymentResponse(r);\n }\n\n async postIapCheck(request: IapCheckRequest): Promise {\n return this.send(\"POST\", \"/accounts/iap-check\", request, true, false);\n }\n\n postReinstatePremium(): Promise {\n return this.send(\"POST\", \"/accounts/reinstate-premium\", null, true, false);\n }\n\n postCancelPremium(): Promise {\n return this.send(\"POST\", \"/accounts/cancel-premium\", null, true, false);\n }\n\n async postAccountStorage(request: StorageRequest): Promise {\n const r = await this.send(\"POST\", \"/accounts/storage\", request, true, true);\n return new PaymentResponse(r);\n }\n\n postAccountPayment(request: PaymentRequest): Promise {\n return this.send(\"POST\", \"/accounts/payment\", request, true, false);\n }\n\n postAccountLicense(data: FormData): Promise {\n return this.send(\"POST\", \"/accounts/license\", data, true, false);\n }\n\n postAccountKeys(request: KeysRequest): Promise {\n return this.send(\"POST\", \"/accounts/keys\", request, true, false);\n }\n\n postAccountKey(request: UpdateKeyRequest): Promise {\n return this.send(\"POST\", \"/accounts/key\", request, true, false);\n }\n\n postAccountVerifyEmail(): Promise {\n return this.send(\"POST\", \"/accounts/verify-email\", null, true, false);\n }\n\n postAccountVerifyEmailToken(request: VerifyEmailRequest): Promise {\n return this.send(\"POST\", \"/accounts/verify-email-token\", request, false, false);\n }\n\n postAccountVerifyPassword(request: SecretVerificationRequest): Promise {\n return this.send(\"POST\", \"/accounts/verify-password\", request, true, false);\n }\n\n postAccountRecoverDelete(request: DeleteRecoverRequest): Promise {\n return this.send(\"POST\", \"/accounts/delete-recover\", request, false, false);\n }\n\n postAccountRecoverDeleteToken(request: VerifyDeleteRecoverRequest): Promise {\n return this.send(\"POST\", \"/accounts/delete-recover-token\", request, false, false);\n }\n\n postAccountKdf(request: KdfRequest): Promise {\n return this.send(\"POST\", \"/accounts/kdf\", request, true, false);\n }\n\n async deleteSsoUser(organizationId: string): Promise {\n return this.send(\"DELETE\", \"/accounts/sso/\" + organizationId, null, true, false);\n }\n\n async getSsoUserIdentifier(): Promise {\n return this.send(\"GET\", \"/accounts/sso/user-identifier\", null, true, true);\n }\n\n async postUserApiKey(id: string, request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/accounts/api-key\", request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async postUserRotateApiKey(\n id: string,\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/accounts/rotate-api-key\", request, true, true);\n return new ApiKeyResponse(r);\n }\n\n putUpdateTempPassword(request: UpdateTempPasswordRequest): Promise {\n return this.send(\"PUT\", \"/accounts/update-temp-password\", request, true, false);\n }\n\n postConvertToKeyConnector(): Promise {\n return this.send(\"POST\", \"/accounts/convert-to-key-connector\", null, true, false);\n }\n\n // Account Billing APIs\n\n async getUserBillingHistory(): Promise {\n const r = await this.send(\"GET\", \"/accounts/billing/history\", null, true, true);\n return new BillingHistoryResponse(r);\n }\n\n async getUserBillingPayment(): Promise {\n const r = await this.send(\"GET\", \"/accounts/billing/payment-method\", null, true, true);\n return new BillingPaymentResponse(r);\n }\n\n // Send APIs\n\n async getSend(id: string): Promise {\n const r = await this.send(\"GET\", \"/sends/\" + id, null, true, true);\n return new SendResponse(r);\n }\n\n async postSendAccess(\n id: string,\n request: SendAccessRequest,\n apiUrl?: string\n ): Promise {\n const addSendIdHeader = (headers: Headers) => {\n headers.set(\"Send-Id\", id);\n };\n const r = await this.send(\n \"POST\",\n \"/sends/access/\" + id,\n request,\n false,\n true,\n apiUrl,\n addSendIdHeader\n );\n return new SendAccessResponse(r);\n }\n\n async getSendFileDownloadData(\n send: SendAccessView,\n request: SendAccessRequest,\n apiUrl?: string\n ): Promise {\n const addSendIdHeader = (headers: Headers) => {\n headers.set(\"Send-Id\", send.id);\n };\n const r = await this.send(\n \"POST\",\n \"/sends/\" + send.id + \"/access/file/\" + send.file.id,\n request,\n false,\n true,\n apiUrl,\n addSendIdHeader\n );\n return new SendFileDownloadDataResponse(r);\n }\n\n async getSends(): Promise> {\n const r = await this.send(\"GET\", \"/sends\", null, true, true);\n return new ListResponse(r, SendResponse);\n }\n\n async postSend(request: SendRequest): Promise {\n const r = await this.send(\"POST\", \"/sends\", request, true, true);\n return new SendResponse(r);\n }\n\n async postFileTypeSend(request: SendRequest): Promise {\n const r = await this.send(\"POST\", \"/sends/file/v2\", request, true, true);\n return new SendFileUploadDataResponse(r);\n }\n\n async renewSendFileUploadUrl(\n sendId: string,\n fileId: string\n ): Promise {\n const r = await this.send(\"GET\", \"/sends/\" + sendId + \"/file/\" + fileId, null, true, true);\n return new SendFileUploadDataResponse(r);\n }\n\n postSendFile(sendId: string, fileId: string, data: FormData): Promise {\n return this.send(\"POST\", \"/sends/\" + sendId + \"/file/\" + fileId, data, true, false);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postSendFileLegacy(data: FormData): Promise {\n const r = await this.send(\"POST\", \"/sends/file\", data, true, true);\n return new SendResponse(r);\n }\n\n async putSend(id: string, request: SendRequest): Promise {\n const r = await this.send(\"PUT\", \"/sends/\" + id, request, true, true);\n return new SendResponse(r);\n }\n\n async putSendRemovePassword(id: string): Promise {\n const r = await this.send(\"PUT\", \"/sends/\" + id + \"/remove-password\", null, true, true);\n return new SendResponse(r);\n }\n\n deleteSend(id: string): Promise {\n return this.send(\"DELETE\", \"/sends/\" + id, null, true, false);\n }\n\n // Cipher APIs\n\n async getCipher(id: string): Promise {\n const r = await this.send(\"GET\", \"/ciphers/\" + id, null, true, true);\n return new CipherResponse(r);\n }\n\n async getFullCipherDetails(id: string): Promise {\n const r = await this.send(\"GET\", \"/ciphers/\" + id + \"/details\", null, true, true);\n return new CipherResponse(r);\n }\n\n async getCipherAdmin(id: string): Promise {\n const r = await this.send(\"GET\", \"/ciphers/\" + id + \"/admin\", null, true, true);\n return new CipherResponse(r);\n }\n\n async getCiphersOrganization(organizationId: string): Promise> {\n const r = await this.send(\n \"GET\",\n \"/ciphers/organization-details?organizationId=\" + organizationId,\n null,\n true,\n true\n );\n return new ListResponse(r, CipherResponse);\n }\n\n async postCipher(request: CipherRequest): Promise {\n const r = await this.send(\"POST\", \"/ciphers\", request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherCreate(request: CipherCreateRequest): Promise {\n const r = await this.send(\"POST\", \"/ciphers/create\", request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherAdmin(request: CipherCreateRequest): Promise {\n const r = await this.send(\"POST\", \"/ciphers/admin\", request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipher(id: string, request: CipherRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id, request, true, true);\n return new CipherResponse(r);\n }\n\n async putPartialCipher(id: string, request: CipherPartialRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/partial\", request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipherAdmin(id: string, request: CipherRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/admin\", request, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipher(id: string): Promise {\n return this.send(\"DELETE\", \"/ciphers/\" + id, null, true, false);\n }\n\n deleteCipherAdmin(id: string): Promise {\n return this.send(\"DELETE\", \"/ciphers/\" + id + \"/admin\", null, true, false);\n }\n\n deleteManyCiphers(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"DELETE\", \"/ciphers\", request, true, false);\n }\n\n deleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"DELETE\", \"/ciphers/admin\", request, true, false);\n }\n\n putMoveCiphers(request: CipherBulkMoveRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/move\", request, true, false);\n }\n\n async putShareCipher(id: string, request: CipherShareRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/share\", request, true, true);\n return new CipherResponse(r);\n }\n\n putShareCiphers(request: CipherBulkShareRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/share\", request, true, false);\n }\n\n putCipherCollections(id: string, request: CipherCollectionsRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/collections\", request, true, false);\n }\n\n putCipherCollectionsAdmin(id: string, request: CipherCollectionsRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/collections-admin\", request, true, false);\n }\n\n postPurgeCiphers(\n request: SecretVerificationRequest,\n organizationId: string = null\n ): Promise {\n let path = \"/ciphers/purge\";\n if (organizationId != null) {\n path += \"?organizationId=\" + organizationId;\n }\n return this.send(\"POST\", path, request, true, false);\n }\n\n postImportCiphers(request: ImportCiphersRequest): Promise {\n return this.send(\"POST\", \"/ciphers/import\", request, true, false);\n }\n\n postImportOrganizationCiphers(\n organizationId: string,\n request: ImportOrganizationCiphersRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/ciphers/import-organization?organizationId=\" + organizationId,\n request,\n true,\n false\n );\n }\n\n putDeleteCipher(id: string): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/delete\", null, true, false);\n }\n\n putDeleteCipherAdmin(id: string): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/delete-admin\", null, true, false);\n }\n\n putDeleteManyCiphers(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/delete\", request, true, false);\n }\n\n putDeleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/delete-admin\", request, true, false);\n }\n\n async putRestoreCipher(id: string): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/restore\", null, true, true);\n return new CipherResponse(r);\n }\n\n async putRestoreCipherAdmin(id: string): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/restore-admin\", null, true, true);\n return new CipherResponse(r);\n }\n\n async putRestoreManyCiphers(\n request: CipherBulkDeleteRequest\n ): Promise> {\n const r = await this.send(\"PUT\", \"/ciphers/restore\", request, true, true);\n return new ListResponse(r, CipherResponse);\n }\n\n // Attachments APIs\n\n async getAttachmentData(\n cipherId: string,\n attachmentId: string,\n emergencyAccessId?: string\n ): Promise {\n const path =\n (emergencyAccessId != null ? \"/emergency-access/\" + emergencyAccessId + \"/\" : \"/ciphers/\") +\n cipherId +\n \"/attachment/\" +\n attachmentId;\n const r = await this.send(\"GET\", path, null, true, true);\n return new AttachmentResponse(r);\n }\n\n async postCipherAttachment(\n id: string,\n request: AttachmentRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/ciphers/\" + id + \"/attachment/v2\", request, true, true);\n return new AttachmentUploadDataResponse(r);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postCipherAttachmentLegacy(id: string, data: FormData): Promise {\n const r = await this.send(\"POST\", \"/ciphers/\" + id + \"/attachment\", data, true, true);\n return new CipherResponse(r);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postCipherAttachmentAdminLegacy(id: string, data: FormData): Promise {\n const r = await this.send(\"POST\", \"/ciphers/\" + id + \"/attachment-admin\", data, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipherAttachment(id: string, attachmentId: string): Promise {\n return this.send(\"DELETE\", \"/ciphers/\" + id + \"/attachment/\" + attachmentId, null, true, false);\n }\n\n deleteCipherAttachmentAdmin(id: string, attachmentId: string): Promise {\n return this.send(\n \"DELETE\",\n \"/ciphers/\" + id + \"/attachment/\" + attachmentId + \"/admin\",\n null,\n true,\n false\n );\n }\n\n postShareCipherAttachment(\n id: string,\n attachmentId: string,\n data: FormData,\n organizationId: string\n ): Promise {\n return this.send(\n \"POST\",\n \"/ciphers/\" + id + \"/attachment/\" + attachmentId + \"/share?organizationId=\" + organizationId,\n data,\n true,\n false\n );\n }\n\n async renewAttachmentUploadUrl(\n id: string,\n attachmentId: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/ciphers/\" + id + \"/attachment/\" + attachmentId + \"/renew\",\n null,\n true,\n true\n );\n return new AttachmentUploadDataResponse(r);\n }\n\n postAttachmentFile(id: string, attachmentId: string, data: FormData): Promise {\n return this.send(\"POST\", \"/ciphers/\" + id + \"/attachment/\" + attachmentId, data, true, false);\n }\n\n // Collections APIs\n\n async getCollectionDetails(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/details\",\n null,\n true,\n true\n );\n return new CollectionGroupDetailsResponse(r);\n }\n\n async getUserCollections(): Promise> {\n const r = await this.send(\"GET\", \"/collections\", null, true, true);\n return new ListResponse(r, CollectionResponse);\n }\n\n async getCollections(organizationId: string): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections\",\n null,\n true,\n true\n );\n return new ListResponse(r, CollectionResponse);\n }\n\n async getCollectionUsers(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/users\",\n null,\n true,\n true\n );\n return r.map((dr: any) => new SelectionReadOnlyResponse(dr));\n }\n\n async postCollection(\n organizationId: string,\n request: CollectionRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/collections\",\n request,\n true,\n true\n );\n return new CollectionResponse(r);\n }\n\n async putCollection(\n organizationId: string,\n id: string,\n request: CollectionRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/collections/\" + id,\n request,\n true,\n true\n );\n return new CollectionResponse(r);\n }\n\n async putCollectionUsers(\n organizationId: string,\n id: string,\n request: SelectionReadOnlyRequest[]\n ): Promise {\n await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/users\",\n request,\n true,\n false\n );\n }\n\n deleteCollection(organizationId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/collections/\" + id,\n null,\n true,\n false\n );\n }\n\n deleteCollectionUser(\n organizationId: string,\n id: string,\n organizationUserId: string\n ): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/user/\" + organizationUserId,\n null,\n true,\n false\n );\n }\n\n // Groups APIs\n\n async getGroupDetails(organizationId: string, id: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/details\",\n null,\n true,\n true\n );\n return new GroupDetailsResponse(r);\n }\n\n async getGroups(organizationId: string): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/groups\",\n null,\n true,\n true\n );\n return new ListResponse(r, GroupResponse);\n }\n\n async getGroupUsers(organizationId: string, id: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/users\",\n null,\n true,\n true\n );\n return r;\n }\n\n async postGroup(organizationId: string, request: GroupRequest): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/groups\",\n request,\n true,\n true\n );\n return new GroupResponse(r);\n }\n\n async putGroup(\n organizationId: string,\n id: string,\n request: GroupRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/groups/\" + id,\n request,\n true,\n true\n );\n return new GroupResponse(r);\n }\n\n async putGroupUsers(organizationId: string, id: string, request: string[]): Promise {\n await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/users\",\n request,\n true,\n false\n );\n }\n\n deleteGroup(organizationId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/groups/\" + id,\n null,\n true,\n false\n );\n }\n\n deleteGroupUser(organizationId: string, id: string, organizationUserId: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/user/\" + organizationUserId,\n null,\n true,\n false\n );\n }\n\n // Organization User APIs\n\n async getOrganizationUser(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n null,\n true,\n true\n );\n return new OrganizationUserDetailsResponse(r);\n }\n\n async getOrganizationUserGroups(organizationId: string, id: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/groups\",\n null,\n true,\n true\n );\n return r;\n }\n\n async getOrganizationUsers(\n organizationId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users\",\n null,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserUserDetailsResponse);\n }\n\n async getOrganizationUserResetPasswordDetails(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reset-password-details\",\n null,\n true,\n true\n );\n return new OrganizationUserResetPasswordDetailsReponse(r);\n }\n\n postOrganizationUserInvite(\n organizationId: string,\n request: OrganizationUserInviteRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/invite\",\n request,\n true,\n false\n );\n }\n\n postOrganizationUserReinvite(organizationId: string, id: string): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reinvite\",\n null,\n true,\n false\n );\n }\n\n async postManyOrganizationUserReinvite(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/reinvite\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n postOrganizationUserAccept(\n organizationId: string,\n id: string,\n request: OrganizationUserAcceptRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/accept\",\n request,\n true,\n false\n );\n }\n\n postOrganizationUserConfirm(\n organizationId: string,\n id: string,\n request: OrganizationUserConfirmRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/confirm\",\n request,\n true,\n false\n );\n }\n\n async postOrganizationUsersPublicKey(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/public-keys\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkPublicKeyResponse);\n }\n\n async postOrganizationUserBulkConfirm(\n organizationId: string,\n request: OrganizationUserBulkConfirmRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/confirm\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n putOrganizationUser(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n request,\n true,\n false\n );\n }\n\n putOrganizationUserGroups(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateGroupsRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/groups\",\n request,\n true,\n false\n );\n }\n\n putOrganizationUserResetPasswordEnrollment(\n organizationId: string,\n userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + userId + \"/reset-password-enrollment\",\n request,\n true,\n false\n );\n }\n\n putOrganizationUserResetPassword(\n organizationId: string,\n id: string,\n request: OrganizationUserResetPasswordRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reset-password\",\n request,\n true,\n false\n );\n }\n\n deleteOrganizationUser(organizationId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n null,\n true,\n false\n );\n }\n\n async deleteManyOrganizationUsers(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n revokeOrganizationUser(organizationId: string, id: string): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/revoke\",\n null,\n true,\n false\n );\n }\n\n async revokeManyOrganizationUsers(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/revoke\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n restoreOrganizationUser(organizationId: string, id: string): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/restore\",\n null,\n true,\n false\n );\n }\n\n async restoreManyOrganizationUsers(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/restore\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n // Plan APIs\n\n async getPlans(): Promise> {\n const r = await this.send(\"GET\", \"/plans/\", null, false, true);\n return new ListResponse(r, PlanResponse);\n }\n\n async postPublicImportDirectory(request: OrganizationImportRequest): Promise {\n return this.send(\"POST\", \"/public/organization/import\", request, true, false);\n }\n\n async getTaxRates(): Promise> {\n const r = await this.send(\"GET\", \"/plans/sales-tax-rates/\", null, true, true);\n return new ListResponse(r, TaxRateResponse);\n }\n\n // Settings APIs\n\n async getSettingsDomains(): Promise {\n const r = await this.send(\"GET\", \"/settings/domains\", null, true, true);\n return new DomainsResponse(r);\n }\n\n async putSettingsDomains(request: UpdateDomainsRequest): Promise {\n const r = await this.send(\"PUT\", \"/settings/domains\", request, true, true);\n return new DomainsResponse(r);\n }\n\n // Sync APIs\n\n async getSync(): Promise {\n const path = this.isDesktopClient || this.isWebClient ? \"/sync?excludeDomains=true\" : \"/sync\";\n const r = await this.send(\"GET\", path, null, true, true);\n return new SyncResponse(r);\n }\n\n // Two-factor APIs\n\n async getTwoFactorProviders(): Promise> {\n const r = await this.send(\"GET\", \"/two-factor\", null, true, true);\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorOrganizationProviders(\n organizationId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/two-factor\",\n null,\n true,\n true\n );\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorAuthenticator(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-authenticator\", request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async getTwoFactorEmail(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-email\", request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async getTwoFactorDuo(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-duo\", request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorOrganizationDuo(\n organizationId: string,\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/two-factor/get-duo\",\n request,\n true,\n true\n );\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorYubiKey(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-yubikey\", request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async getTwoFactorWebAuthn(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-webauthn\", request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async getTwoFactorWebAuthnChallenge(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-webauthn-challenge\", request, true, true);\n return new ChallengeResponse(r);\n }\n\n async getTwoFactorRecover(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-recover\", request, true, true);\n return new TwoFactorRecoverResponse(r);\n }\n\n async putTwoFactorAuthenticator(\n request: UpdateTwoFactorAuthenticatorRequest\n ): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/authenticator\", request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async putTwoFactorEmail(request: UpdateTwoFactorEmailRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/email\", request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async putTwoFactorDuo(request: UpdateTwoFactorDuoRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/duo\", request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorOrganizationDuo(\n organizationId: string,\n request: UpdateTwoFactorDuoRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/two-factor/duo\",\n request,\n true,\n true\n );\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorYubiKey(\n request: UpdateTwoFactorYubioOtpRequest\n ): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/yubikey\", request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async putTwoFactorWebAuthn(\n request: UpdateTwoFactorWebAuthnRequest\n ): Promise {\n const response = request.deviceResponse.response as AuthenticatorAttestationResponse;\n const data: any = Object.assign({}, request);\n\n data.deviceResponse = {\n id: request.deviceResponse.id,\n rawId: btoa(request.deviceResponse.id),\n type: request.deviceResponse.type,\n extensions: request.deviceResponse.getClientExtensionResults(),\n response: {\n AttestationObject: Utils.fromBufferToB64(response.attestationObject),\n clientDataJson: Utils.fromBufferToB64(response.clientDataJSON),\n },\n };\n\n const r = await this.send(\"PUT\", \"/two-factor/webauthn\", data, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async deleteTwoFactorWebAuthn(\n request: UpdateTwoFactorWebAuthnDeleteRequest\n ): Promise {\n const r = await this.send(\"DELETE\", \"/two-factor/webauthn\", request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async putTwoFactorDisable(request: TwoFactorProviderRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/disable\", request, true, true);\n return new TwoFactorProviderResponse(r);\n }\n\n async putTwoFactorOrganizationDisable(\n organizationId: string,\n request: TwoFactorProviderRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/two-factor/disable\",\n request,\n true,\n true\n );\n return new TwoFactorProviderResponse(r);\n }\n\n postTwoFactorRecover(request: TwoFactorRecoveryRequest): Promise {\n return this.send(\"POST\", \"/two-factor/recover\", request, false, false);\n }\n\n postTwoFactorEmailSetup(request: TwoFactorEmailRequest): Promise {\n return this.send(\"POST\", \"/two-factor/send-email\", request, true, false);\n }\n\n postTwoFactorEmail(request: TwoFactorEmailRequest): Promise {\n return this.send(\"POST\", \"/two-factor/send-email-login\", request, false, false);\n }\n\n async getDeviceVerificationSettings(): Promise {\n const r = await this.send(\n \"GET\",\n \"/two-factor/get-device-verification-settings\",\n null,\n true,\n true\n );\n return new DeviceVerificationResponse(r);\n }\n\n async putDeviceVerificationSettings(\n request: DeviceVerificationRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/two-factor/device-verification-settings\",\n request,\n true,\n true\n );\n return new DeviceVerificationResponse(r);\n }\n\n async getKnownDevice(email: string, deviceIdentifier: string): Promise {\n const path = `/devices/knowndevice/${email}/${deviceIdentifier}`;\n const r = await this.send(\"GET\", path, null, false, true);\n return r as boolean;\n }\n\n // Emergency Access APIs\n\n async getEmergencyAccessTrusted(): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/trusted\", null, true, true);\n return new ListResponse(r, EmergencyAccessGranteeDetailsResponse);\n }\n\n async getEmergencyAccessGranted(): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/granted\", null, true, true);\n return new ListResponse(r, EmergencyAccessGrantorDetailsResponse);\n }\n\n async getEmergencyAccess(id: string): Promise {\n const r = await this.send(\"GET\", \"/emergency-access/\" + id, null, true, true);\n return new EmergencyAccessGranteeDetailsResponse(r);\n }\n\n async getEmergencyGrantorPolicies(id: string): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/\" + id + \"/policies\", null, true, true);\n return new ListResponse(r, PolicyResponse);\n }\n\n putEmergencyAccess(id: string, request: EmergencyAccessUpdateRequest): Promise {\n return this.send(\"PUT\", \"/emergency-access/\" + id, request, true, false);\n }\n\n deleteEmergencyAccess(id: string): Promise {\n return this.send(\"DELETE\", \"/emergency-access/\" + id, null, true, false);\n }\n\n postEmergencyAccessInvite(request: EmergencyAccessInviteRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/invite\", request, true, false);\n }\n\n postEmergencyAccessReinvite(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/reinvite\", null, true, false);\n }\n\n postEmergencyAccessAccept(id: string, request: EmergencyAccessAcceptRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/accept\", request, true, false);\n }\n\n postEmergencyAccessConfirm(id: string, request: EmergencyAccessConfirmRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/confirm\", request, true, false);\n }\n\n postEmergencyAccessInitiate(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/initiate\", null, true, false);\n }\n\n postEmergencyAccessApprove(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/approve\", null, true, false);\n }\n\n postEmergencyAccessReject(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/reject\", null, true, false);\n }\n\n async postEmergencyAccessTakeover(id: string): Promise {\n const r = await this.send(\"POST\", \"/emergency-access/\" + id + \"/takeover\", null, true, true);\n return new EmergencyAccessTakeoverResponse(r);\n }\n\n async postEmergencyAccessPassword(\n id: string,\n request: EmergencyAccessPasswordRequest\n ): Promise {\n await this.send(\"POST\", \"/emergency-access/\" + id + \"/password\", request, true, true);\n }\n\n async postEmergencyAccessView(id: string): Promise {\n const r = await this.send(\"POST\", \"/emergency-access/\" + id + \"/view\", null, true, true);\n return new EmergencyAccessViewResponse(r);\n }\n\n // Organization APIs\n\n async getCloudCommunicationsEnabled(): Promise {\n const r = await this.send(\"GET\", \"/organizations/connections/enabled\", null, true, true);\n return r as boolean;\n }\n\n async getOrganizationConnection(\n id: string,\n type: OrganizationConnectionType,\n configType: { new (response: any): TConfig }\n ): Promise> {\n const r = await this.send(\"GET\", `/organizations/connections/${id}/${type}`, null, true, true);\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async createOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig }\n ): Promise> {\n const r = await this.send(\"POST\", \"/organizations/connections/\", request, true, true);\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async updateOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig },\n organizationConnectionId?: string\n ): Promise> {\n const r = await this.send(\n \"PUT\",\n \"/organizations/connections/\" + organizationConnectionId,\n request,\n true,\n true\n );\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async deleteOrganizationConnection(id: string): Promise {\n return this.send(\"DELETE\", \"/organizations/connections/\" + id, null, true, false);\n }\n\n // Provider APIs\n\n async postProviderSetup(id: string, request: ProviderSetupRequest) {\n const r = await this.send(\"POST\", \"/providers/\" + id + \"/setup\", request, true, true);\n return new ProviderResponse(r);\n }\n\n async getProvider(id: string) {\n const r = await this.send(\"GET\", \"/providers/\" + id, null, true, true);\n return new ProviderResponse(r);\n }\n\n async putProvider(id: string, request: ProviderUpdateRequest) {\n const r = await this.send(\"PUT\", \"/providers/\" + id, request, true, true);\n return new ProviderResponse(r);\n }\n\n // Provider User APIs\n\n async getProviderUsers(\n providerId: string\n ): Promise> {\n const r = await this.send(\"GET\", \"/providers/\" + providerId + \"/users\", null, true, true);\n return new ListResponse(r, ProviderUserUserDetailsResponse);\n }\n\n async getProviderUser(providerId: string, id: string): Promise {\n const r = await this.send(\"GET\", \"/providers/\" + providerId + \"/users/\" + id, null, true, true);\n return new ProviderUserResponse(r);\n }\n\n postProviderUserInvite(providerId: string, request: ProviderUserInviteRequest): Promise {\n return this.send(\"POST\", \"/providers/\" + providerId + \"/users/invite\", request, true, false);\n }\n\n postProviderUserReinvite(providerId: string, id: string): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/reinvite\",\n null,\n true,\n false\n );\n }\n\n async postManyProviderUserReinvite(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/reinvite\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n async postProviderUserBulkConfirm(\n providerId: string,\n request: ProviderUserBulkConfirmRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/confirm\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n async deleteManyProviderUsers(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\"DELETE\", \"/providers/\" + providerId + \"/users\", request, true, true);\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n postProviderUserAccept(\n providerId: string,\n id: string,\n request: ProviderUserAcceptRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/accept\",\n request,\n true,\n false\n );\n }\n\n postProviderUserConfirm(\n providerId: string,\n id: string,\n request: ProviderUserConfirmRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/confirm\",\n request,\n true,\n false\n );\n }\n\n async postProviderUsersPublicKey(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/public-keys\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkPublicKeyResponse);\n }\n\n putProviderUser(\n providerId: string,\n id: string,\n request: ProviderUserUpdateRequest\n ): Promise {\n return this.send(\"PUT\", \"/providers/\" + providerId + \"/users/\" + id, request, true, false);\n }\n\n deleteProviderUser(providerId: string, id: string): Promise {\n return this.send(\"DELETE\", \"/providers/\" + providerId + \"/users/\" + id, null, true, false);\n }\n\n // Provider Organization APIs\n\n async getProviderClients(\n providerId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/providers/\" + providerId + \"/organizations\",\n null,\n true,\n true\n );\n return new ListResponse(r, ProviderOrganizationOrganizationDetailsResponse);\n }\n\n postProviderAddOrganization(\n providerId: string,\n request: ProviderAddOrganizationRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/organizations/add\",\n request,\n true,\n false\n );\n }\n\n async postProviderCreateOrganization(\n providerId: string,\n request: ProviderOrganizationCreateRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/organizations\",\n request,\n true,\n true\n );\n return new ProviderOrganizationResponse(r);\n }\n\n deleteProviderOrganization(providerId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/providers/\" + providerId + \"/organizations/\" + id,\n null,\n true,\n false\n );\n }\n\n // Event APIs\n\n async getEvents(start: string, end: string, token: string): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsCipher(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/ciphers/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganization(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/organizations/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganizationUser(\n organizationId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/events\",\n start,\n end,\n token\n ),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsProvider(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/providers/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsProviderUser(\n providerId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\n \"/providers/\" + providerId + \"/users/\" + id + \"/events\",\n start,\n end,\n token\n ),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async postEventsCollect(request: EventRequest[]): Promise {\n const authHeader = await this.getActiveBearerToken();\n const headers = new Headers({\n \"Device-Type\": this.deviceType,\n Authorization: \"Bearer \" + authHeader,\n \"Content-Type\": \"application/json; charset=utf-8\",\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n const response = await this.fetch(\n new Request(this.environmentService.getEventsUrl() + \"/collect\", {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n method: \"POST\",\n body: JSON.stringify(request),\n headers: headers,\n })\n );\n if (response.status !== 200) {\n return Promise.reject(\"Event post failed.\");\n }\n }\n\n // User APIs\n\n async getUserPublicKey(id: string): Promise {\n const r = await this.send(\"GET\", \"/users/\" + id + \"/public-key\", null, true, true);\n return new UserKeyResponse(r);\n }\n\n // HIBP APIs\n\n async getHibpBreach(username: string): Promise {\n const r = await this.send(\"GET\", \"/hibp/breach?username=\" + username, null, true, true);\n return r.map((a: any) => new BreachAccountResponse(a));\n }\n\n // Misc\n\n async postBitPayInvoice(request: BitPayInvoiceRequest): Promise {\n const r = await this.send(\"POST\", \"/bitpay-invoice\", request, true, true);\n return r as string;\n }\n\n async postSetupPayment(): Promise {\n const r = await this.send(\"POST\", \"/setup-payment\", null, true, true);\n return r as string;\n }\n\n // Key Connector\n\n async getUserKeyFromKeyConnector(keyConnectorUrl: string): Promise {\n const authHeader = await this.getActiveBearerToken();\n\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/user-keys\", {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Accept: \"application/json\",\n Authorization: \"Bearer \" + authHeader,\n }),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n\n return new KeyConnectorUserKeyResponse(await response.json());\n }\n\n async postUserKeyToKeyConnector(\n keyConnectorUrl: string,\n request: KeyConnectorUserKeyRequest\n ): Promise {\n const authHeader = await this.getActiveBearerToken();\n\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/user-keys\", {\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Accept: \"application/json\",\n Authorization: \"Bearer \" + authHeader,\n \"Content-Type\": \"application/json; charset=utf-8\",\n }),\n body: JSON.stringify(request),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n async getKeyConnectorAlive(keyConnectorUrl: string) {\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/alive\", {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Accept: \"application/json\",\n \"Content-Type\": \"application/json; charset=utf-8\",\n }),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n async getOrganizationExport(organizationId: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/export\",\n null,\n true,\n true\n );\n return new OrganizationExportResponse(r);\n }\n\n // Helpers\n\n async getActiveBearerToken(): Promise {\n let accessToken = await this.tokenService.getToken();\n if (await this.tokenService.tokenNeedsRefresh()) {\n await this.doAuthRefresh();\n accessToken = await this.tokenService.getToken();\n }\n return accessToken;\n }\n\n async fetch(request: Request): Promise {\n if (request.method === \"GET\") {\n request.headers.set(\"Cache-Control\", \"no-store\");\n request.headers.set(\"Pragma\", \"no-cache\");\n }\n request.headers.set(\"Bitwarden-Client-Name\", this.platformUtilsService.getClientType());\n request.headers.set(\n \"Bitwarden-Client-Version\",\n await this.platformUtilsService.getApplicationVersionNumber()\n );\n return this.nativeFetch(request);\n }\n\n nativeFetch(request: Request): Promise {\n return fetch(request);\n }\n\n async preValidateSso(identifier: string): Promise {\n if (identifier == null || identifier === \"\") {\n throw new Error(\"Organization Identifier was not provided.\");\n }\n const headers = new Headers({\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const path = `/account/prevalidate?domainHint=${encodeURIComponent(identifier)}`;\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + path, {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n headers: headers,\n method: \"GET\",\n })\n );\n\n if (response.status === 200) {\n const body = await response.json();\n return new SsoPreValidateResponse(body);\n } else {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n async postCreateSponsorship(\n sponsoredOrgId: string,\n request: OrganizationSponsorshipCreateRequest\n ): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/\" +\n (this.platformUtilsService.isSelfHost() ? \"self-hosted/\" : \"\") +\n sponsoredOrgId +\n \"/families-for-enterprise\",\n request,\n true,\n false\n );\n }\n\n async getSponsorshipSyncStatus(\n sponsoredOrgId: string\n ): Promise {\n const response = await this.send(\n \"GET\",\n \"/organization/sponsorship/\" + sponsoredOrgId + \"/sync-status\",\n null,\n true,\n true\n );\n return new OrganizationSponsorshipSyncStatusResponse(response);\n }\n\n async deleteRevokeSponsorship(sponsoringOrganizationId: string): Promise {\n return await this.send(\n \"DELETE\",\n \"/organization/sponsorship/\" +\n (this.platformUtilsService.isSelfHost() ? \"self-hosted/\" : \"\") +\n sponsoringOrganizationId,\n null,\n true,\n false\n );\n }\n\n async deleteRemoveSponsorship(sponsoringOrgId: string): Promise {\n return await this.send(\n \"DELETE\",\n \"/organization/sponsorship/sponsored/\" + sponsoringOrgId,\n null,\n true,\n false\n );\n }\n\n async postPreValidateSponsorshipToken(sponsorshipToken: string): Promise {\n const r = await this.send(\n \"POST\",\n \"/organization/sponsorship/validate-token?sponsorshipToken=\" +\n encodeURIComponent(sponsorshipToken),\n null,\n true,\n true\n );\n return r as boolean;\n }\n\n async postRedeemSponsorship(\n sponsorshipToken: string,\n request: OrganizationSponsorshipRedeemRequest\n ): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/redeem?sponsorshipToken=\" + encodeURIComponent(sponsorshipToken),\n request,\n true,\n false\n );\n }\n\n async postResendSponsorshipOffer(sponsoringOrgId: string): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/\" + sponsoringOrgId + \"/families-for-enterprise/resend\",\n null,\n true,\n false\n );\n }\n\n protected async doAuthRefresh(): Promise {\n const refreshToken = await this.tokenService.getRefreshToken();\n if (refreshToken != null && refreshToken !== \"\") {\n return this.doRefreshToken();\n }\n\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n if (!Utils.isNullOrWhitespace(clientId) && !Utils.isNullOrWhitespace(clientSecret)) {\n return this.doApiTokenRefresh();\n }\n\n throw new Error(\"Cannot refresh token, no refresh token or api keys are stored\");\n }\n\n protected async doRefreshToken(): Promise {\n const refreshToken = await this.tokenService.getRefreshToken();\n if (refreshToken == null || refreshToken === \"\") {\n throw new Error();\n }\n const headers = new Headers({\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const decodedToken = await this.tokenService.decodeToken();\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + \"/connect/token\", {\n body: this.qsStringify({\n grant_type: \"refresh_token\",\n client_id: decodedToken.client_id,\n refresh_token: refreshToken,\n }),\n cache: \"no-store\",\n credentials: this.getCredentials(),\n headers: headers,\n method: \"POST\",\n })\n );\n\n if (response.status === 200) {\n const responseJson = await response.json();\n const tokenResponse = new IdentityTokenResponse(responseJson);\n await this.tokenService.setTokens(\n tokenResponse.accessToken,\n tokenResponse.refreshToken,\n null\n );\n } else {\n const error = await this.handleError(response, true, true);\n return Promise.reject(error);\n }\n }\n\n protected async doApiTokenRefresh(): Promise {\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n\n const appId = await this.appIdService.getAppId();\n const deviceRequest = new DeviceRequest(appId, this.platformUtilsService);\n\n const tokenRequest = new ApiTokenRequest(\n clientId,\n clientSecret,\n new TokenTwoFactorRequest(),\n deviceRequest\n );\n\n const response = await this.postIdentityToken(tokenRequest);\n if (!(response instanceof IdentityTokenResponse)) {\n throw new Error(\"Invalid response received when refreshing api token\");\n }\n\n await this.tokenService.setToken(response.accessToken);\n }\n\n async send(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n path: string,\n body: any,\n authed: boolean,\n hasResponse: boolean,\n apiUrl?: string,\n alterHeaders?: (headers: Headers) => void\n ): Promise {\n apiUrl = Utils.isNullOrWhitespace(apiUrl) ? this.environmentService.getApiUrl() : apiUrl;\n\n const requestUrl = apiUrl + path;\n // Prevent directory traversal from malicious paths\n if (new URL(requestUrl).href !== requestUrl) {\n return Promise.reject(\"Invalid request url path.\");\n }\n\n const headers = new Headers({\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const requestInit: RequestInit = {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n method: method,\n };\n\n if (authed) {\n const authHeader = await this.getActiveBearerToken();\n headers.set(\"Authorization\", \"Bearer \" + authHeader);\n }\n if (body != null) {\n if (typeof body === \"string\") {\n requestInit.body = body;\n headers.set(\"Content-Type\", \"application/x-www-form-urlencoded; charset=utf-8\");\n } else if (typeof body === \"object\") {\n if (body instanceof FormData) {\n requestInit.body = body;\n } else {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n requestInit.body = JSON.stringify(body);\n }\n }\n }\n if (hasResponse) {\n headers.set(\"Accept\", \"application/json\");\n }\n if (alterHeaders != null) {\n alterHeaders(headers);\n }\n\n requestInit.headers = headers;\n const response = await this.fetch(new Request(requestUrl, requestInit));\n\n const responseType = response.headers.get(\"content-type\");\n const responseIsJson = responseType != null && responseType.indexOf(\"application/json\") !== -1;\n if (hasResponse && response.status === 200 && responseIsJson) {\n const responseJson = await response.json();\n return responseJson;\n } else if (response.status !== 200) {\n const error = await this.handleError(response, false, authed);\n return Promise.reject(error);\n }\n }\n\n private async handleError(\n response: Response,\n tokenError: boolean,\n authed: boolean\n ): Promise {\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n } else if (this.isTextResponse(response)) {\n responseJson = { Message: await response.text() };\n }\n\n if (authed) {\n if (\n response.status === 401 ||\n response.status === 403 ||\n (tokenError &&\n response.status === 400 &&\n responseJson != null &&\n responseJson.error === \"invalid_grant\")\n ) {\n await this.logoutCallback(true);\n return null;\n }\n }\n\n return new ErrorResponse(responseJson, response.status, tokenError);\n }\n\n private qsStringify(params: any): string {\n return Object.keys(params)\n .map((key) => {\n return encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]);\n })\n .join(\"&\");\n }\n\n private getCredentials(): RequestCredentials {\n if (!this.isWebClient || this.environmentService.hasBaseUrl()) {\n return \"include\";\n }\n return undefined;\n }\n\n private addEventParameters(base: string, start: string, end: string, token: string) {\n if (start != null) {\n base += \"?start=\" + start;\n }\n if (end != null) {\n base += base.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n base += \"end=\" + end;\n }\n if (token != null) {\n base += base.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n base += \"continuationToken=\" + token;\n }\n return base;\n }\n\n private isJsonResponse(response: Response): boolean {\n const typeHeader = response.headers.get(\"content-type\");\n return typeHeader != null && typeHeader.indexOf(\"application/json\") > -1;\n }\n\n private isTextResponse(response: Response): boolean {\n const typeHeader = response.headers.get(\"content-type\");\n return typeHeader != null && typeHeader.indexOf(\"text\") > -1;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { FileUploadService as FileUploadServiceAbstraction } from \"../abstractions/fileUpload.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { FileUploadType } from \"../enums/fileUploadType\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachment-upload-data.response\";\nimport { SendFileUploadDataResponse } from \"../models/response/send-file-upload-data.response\";\n\nimport { AzureFileUploadService } from \"./azureFileUpload.service\";\nimport { BitwardenFileUploadService } from \"./bitwardenFileUpload.service\";\n\nexport class FileUploadService implements FileUploadServiceAbstraction {\n private azureFileUploadService: AzureFileUploadService;\n private bitwardenFileUploadService: BitwardenFileUploadService;\n\n constructor(private logService: LogService, private apiService: ApiService) {\n this.azureFileUploadService = new AzureFileUploadService(logService);\n this.bitwardenFileUploadService = new BitwardenFileUploadService();\n }\n\n async uploadSendFile(\n uploadData: SendFileUploadDataResponse,\n fileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) {\n try {\n switch (uploadData.fileUploadType) {\n case FileUploadType.Direct:\n await this.bitwardenFileUploadService.upload(\n fileName.encryptedString,\n encryptedFileData,\n (fd) =>\n this.apiService.postSendFile(\n uploadData.sendResponse.id,\n uploadData.sendResponse.file.id,\n fd\n )\n );\n break;\n case FileUploadType.Azure: {\n const renewalCallback = async () => {\n const renewalResponse = await this.apiService.renewSendFileUploadUrl(\n uploadData.sendResponse.id,\n uploadData.sendResponse.file.id\n );\n return renewalResponse.url;\n };\n await this.azureFileUploadService.upload(\n uploadData.url,\n encryptedFileData,\n renewalCallback\n );\n break;\n }\n default:\n throw new Error(\"Unknown file upload type\");\n }\n } catch (e) {\n await this.apiService.deleteSend(uploadData.sendResponse.id);\n throw e;\n }\n }\n\n async uploadCipherAttachment(\n admin: boolean,\n uploadData: AttachmentUploadDataResponse,\n encryptedFileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) {\n const response = admin ? uploadData.cipherMiniResponse : uploadData.cipherResponse;\n try {\n switch (uploadData.fileUploadType) {\n case FileUploadType.Direct:\n await this.bitwardenFileUploadService.upload(\n encryptedFileName.encryptedString,\n encryptedFileData,\n (fd) => this.apiService.postAttachmentFile(response.id, uploadData.attachmentId, fd)\n );\n break;\n case FileUploadType.Azure: {\n const renewalCallback = async () => {\n const renewalResponse = await this.apiService.renewAttachmentUploadUrl(\n response.id,\n uploadData.attachmentId\n );\n return renewalResponse.url;\n };\n await this.azureFileUploadService.upload(\n uploadData.url,\n encryptedFileData,\n renewalCallback\n );\n break;\n }\n default:\n throw new Error(\"Unknown file upload type.\");\n }\n } catch (e) {\n if (admin) {\n await this.apiService.deleteCipherAttachmentAdmin(response.id, uploadData.attachmentId);\n } else {\n await this.apiService.deleteCipherAttachment(response.id, uploadData.attachmentId);\n }\n throw e;\n }\n }\n}\n","import { BehaviorSubject, concatMap } from \"rxjs\";\n\nimport { SettingsService as SettingsServiceAbstraction } from \"../abstractions/settings.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { Utils } from \"../misc/utils\";\nimport { AccountSettingsSettings } from \"../models/domain/account\";\n\nexport class SettingsService implements SettingsServiceAbstraction {\n protected _settings: BehaviorSubject = new BehaviorSubject({});\n\n settings$ = this._settings.asObservable();\n\n constructor(private stateService: StateService) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n concatMap(async (unlocked) => {\n if (Utils.global.bitwardenContainerService == null) {\n return;\n }\n\n if (!unlocked) {\n this._settings.next({});\n return;\n }\n\n const data = await this.stateService.getSettings();\n\n this._settings.next(data);\n })\n )\n .subscribe();\n }\n\n async setEquivalentDomains(equivalentDomains: string[][]): Promise {\n const settings = this._settings.getValue() ?? {};\n\n settings.equivalentDomains = equivalentDomains;\n\n this._settings.next(settings);\n await this.stateService.setSettings(settings);\n }\n\n async clear(userId?: string): Promise {\n if (userId == null || userId == (await this.stateService.getUserId())) {\n this._settings.next({});\n }\n\n await this.stateService.setSettings(null, { userId: userId });\n }\n}\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { PolicyService } from \"../../abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from \"../../abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { PolicyType } from \"../../enums/policyType\";\n\nexport class VaultTimeoutSettingsService implements VaultTimeoutSettingsServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private tokenService: TokenService,\n private policyService: PolicyService,\n private stateService: StateService\n ) {}\n\n async setVaultTimeoutOptions(timeout: number, action: string): Promise {\n await this.stateService.setVaultTimeout(timeout);\n\n // We swap these tokens from being on disk for lock actions, and in memory for logout actions\n // Get them here to set them to their new location after changing the timeout action and clearing if needed\n const token = await this.tokenService.getToken();\n const refreshToken = await this.tokenService.getRefreshToken();\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n\n const currentAction = await this.stateService.getVaultTimeoutAction();\n if ((timeout != null || timeout === 0) && action === \"logOut\" && action !== currentAction) {\n // if we have a vault timeout and the action is log out, reset tokens\n await this.tokenService.clearToken();\n }\n\n await this.stateService.setVaultTimeoutAction(action);\n\n await this.tokenService.setToken(token);\n await this.tokenService.setRefreshToken(refreshToken);\n await this.tokenService.setClientId(clientId);\n await this.tokenService.setClientSecret(clientSecret);\n\n await this.cryptoService.toggleKey();\n }\n\n async isPinLockSet(): Promise<[boolean, boolean]> {\n const protectedPin = await this.stateService.getProtectedPin();\n const pinProtectedKey = await this.stateService.getEncryptedPinProtected();\n return [protectedPin != null, pinProtectedKey != null];\n }\n\n async isBiometricLockSet(): Promise {\n return await this.stateService.getBiometricUnlock();\n }\n\n async getVaultTimeout(userId?: string): Promise {\n const vaultTimeout = await this.stateService.getVaultTimeout({ userId: userId });\n\n if (\n await this.policyService.policyAppliesToUser(PolicyType.MaximumVaultTimeout, null, userId)\n ) {\n const policy = await this.policyService.getAll(PolicyType.MaximumVaultTimeout, userId);\n // Remove negative values, and ensure it's smaller than maximum allowed value according to policy\n let timeout = Math.min(vaultTimeout, policy[0].data.minutes);\n\n if (vaultTimeout == null || timeout < 0) {\n timeout = policy[0].data.minutes;\n }\n\n // We really shouldn't need to set the value here, but multiple services relies on this value being correct.\n if (vaultTimeout !== timeout) {\n await this.stateService.setVaultTimeout(timeout, { userId: userId });\n }\n\n return timeout;\n }\n\n return vaultTimeout;\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setEverBeenUnlocked(false, { userId: userId });\n await this.stateService.setDecryptedPinProtected(null, { userId: userId });\n await this.stateService.setProtectedPin(null, { userId: userId });\n }\n}\n","import { AuthService } from \"../../abstractions/auth.service\";\nimport { CipherService } from \"../../abstractions/cipher.service\";\nimport { CollectionService } from \"../../abstractions/collection.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { FolderService } from \"../../abstractions/folder/folder.service.abstraction\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { SearchService } from \"../../abstractions/search.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"../../abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService } from \"../../abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { AuthenticationStatus } from \"../../enums/authenticationStatus\";\n\nexport class VaultTimeoutService implements VaultTimeoutServiceAbstraction {\n private inited = false;\n\n constructor(\n private cipherService: CipherService,\n private folderService: FolderService,\n private collectionService: CollectionService,\n private cryptoService: CryptoService,\n protected platformUtilsService: PlatformUtilsService,\n private messagingService: MessagingService,\n private searchService: SearchService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private authService: AuthService,\n private vaultTimeoutSettingsService: VaultTimeoutSettingsService,\n private lockedCallback: (userId?: string) => Promise = null,\n private loggedOutCallback: (expired: boolean, userId?: string) => Promise = null\n ) {}\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.startCheck();\n }\n }\n\n startCheck() {\n this.checkVaultTimeout();\n setInterval(() => this.checkVaultTimeout(), 10 * 1000); // check every 10 seconds\n }\n\n async checkVaultTimeout(): Promise {\n if (await this.platformUtilsService.isViewOpen()) {\n return;\n }\n\n for (const userId in this.stateService.accounts.getValue()) {\n if (userId != null && (await this.shouldLock(userId))) {\n await this.executeTimeoutAction(userId);\n }\n }\n }\n\n async lock(userId?: string): Promise {\n const authed = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!authed) {\n return;\n }\n\n if (await this.keyConnectorService.getUsesKeyConnector()) {\n const pinSet = await this.vaultTimeoutSettingsService.isPinLockSet();\n const pinLock =\n (pinSet[0] && (await this.stateService.getDecryptedPinProtected()) != null) || pinSet[1];\n\n if (!pinLock && !(await this.vaultTimeoutSettingsService.isBiometricLockSet())) {\n await this.logOut(userId);\n }\n }\n\n if (userId == null || userId === (await this.stateService.getUserId())) {\n this.searchService.clearIndex();\n await this.folderService.clearCache();\n }\n\n await this.stateService.setEverBeenUnlocked(true, { userId: userId });\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n\n await this.cryptoService.clearKey(false, userId);\n await this.cryptoService.clearOrgKeys(true, userId);\n await this.cryptoService.clearKeyPair(true, userId);\n await this.cryptoService.clearEncKey(true, userId);\n\n await this.cipherService.clearCache(userId);\n await this.collectionService.clearCache(userId);\n\n this.messagingService.send(\"locked\", { userId: userId });\n\n if (this.lockedCallback != null) {\n await this.lockedCallback(userId);\n }\n }\n\n async logOut(userId?: string): Promise {\n if (this.loggedOutCallback != null) {\n await this.loggedOutCallback(false, userId);\n }\n }\n\n private async shouldLock(userId: string): Promise {\n const authStatus = await this.authService.getAuthStatus(userId);\n if (\n authStatus === AuthenticationStatus.Locked ||\n authStatus === AuthenticationStatus.LoggedOut\n ) {\n return false;\n }\n\n const vaultTimeout = await this.vaultTimeoutSettingsService.getVaultTimeout(userId);\n if (vaultTimeout == null || vaultTimeout < 0) {\n return false;\n }\n\n const lastActive = await this.stateService.getLastActive({ userId: userId });\n if (lastActive == null) {\n return false;\n }\n\n const vaultTimeoutSeconds = vaultTimeout * 60;\n const diffSeconds = (new Date().getTime() - lastActive) / 1000;\n return diffSeconds >= vaultTimeoutSeconds;\n }\n\n private async executeTimeoutAction(userId: string): Promise {\n const timeoutAction = await this.stateService.getVaultTimeoutAction({ userId: userId });\n timeoutAction === \"logOut\" ? await this.logOut(userId) : await this.lock(userId);\n }\n}\n","import * as papa from \"papaparse\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"../abstractions/api.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport {\n ExportFormat,\n ExportService as ExportServiceAbstraction,\n} from \"../abstractions/export.service\";\nimport { FolderService } from \"../abstractions/folder/folder.service.abstraction\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { DEFAULT_KDF_ITERATIONS, KdfType } from \"../enums/kdfType\";\nimport { Utils } from \"../misc/utils\";\nimport { CipherData } from \"../models/data/cipher.data\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport { Collection } from \"../models/domain/collection\";\nimport { Folder } from \"../models/domain/folder\";\nimport { CipherWithIdExport as CipherExport } from \"../models/export/cipher-with-ids.export\";\nimport { CollectionWithIdExport as CollectionExport } from \"../models/export/collection-with-id.export\";\nimport { EventExport } from \"../models/export/event.export\";\nimport { FolderWithIdExport as FolderExport } from \"../models/export/folder-with-id.export\";\nimport { CollectionDetailsResponse } from \"../models/response/collection.response\";\nimport { CipherView } from \"../models/view/cipher.view\";\nimport { CollectionView } from \"../models/view/collection.view\";\nimport { EventView } from \"../models/view/event.view\";\nimport { FolderView } from \"../models/view/folder.view\";\n\nexport class ExportService implements ExportServiceAbstraction {\n constructor(\n private folderService: FolderService,\n private cipherService: CipherService,\n private apiService: ApiService,\n private cryptoService: CryptoService,\n private cryptoFunctionService: CryptoFunctionService\n ) {}\n\n async getExport(format: ExportFormat = \"csv\", organizationId?: string): Promise {\n if (organizationId) {\n return await this.getOrganizationExport(organizationId, format);\n }\n\n if (format === \"encrypted_json\") {\n return this.getEncryptedExport();\n } else {\n return this.getDecryptedExport(format);\n }\n }\n\n async getPasswordProtectedExport(password: string, organizationId?: string): Promise {\n const clearText = organizationId\n ? await this.getOrganizationExport(organizationId, \"json\")\n : await this.getExport(\"json\");\n\n const salt = Utils.fromBufferToB64(await this.cryptoFunctionService.randomBytes(16));\n const kdfIterations = DEFAULT_KDF_ITERATIONS;\n const key = await this.cryptoService.makePinKey(\n password,\n salt,\n KdfType.PBKDF2_SHA256,\n kdfIterations\n );\n\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid(), key);\n const encText = await this.cryptoService.encrypt(clearText, key);\n\n const jsonDoc: any = {\n encrypted: true,\n passwordProtected: true,\n salt: salt,\n kdfIterations: kdfIterations,\n kdfType: KdfType.PBKDF2_SHA256,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n data: encText.encryptedString,\n };\n\n return JSON.stringify(jsonDoc, null, \" \");\n }\n\n async getOrganizationExport(\n organizationId: string,\n format: ExportFormat = \"csv\"\n ): Promise {\n if (format === \"encrypted_json\") {\n return this.getOrganizationEncryptedExport(organizationId);\n } else {\n return this.getOrganizationDecryptedExport(organizationId, format);\n }\n }\n\n async getEventExport(events: EventView[]): Promise {\n return papa.unparse(events.map((e) => new EventExport(e)));\n }\n\n getFileName(prefix: string = null, extension = \"csv\"): string {\n const now = new Date();\n const dateString =\n now.getFullYear() +\n \"\" +\n this.padNumber(now.getMonth() + 1, 2) +\n \"\" +\n this.padNumber(now.getDate(), 2) +\n this.padNumber(now.getHours(), 2) +\n \"\" +\n this.padNumber(now.getMinutes(), 2) +\n this.padNumber(now.getSeconds(), 2);\n\n return \"bitwarden\" + (prefix ? \"_\" + prefix : \"\") + \"_export_\" + dateString + \".\" + extension;\n }\n\n private async getDecryptedExport(format: \"json\" | \"csv\"): Promise {\n let decFolders: FolderView[] = [];\n let decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(\n firstValueFrom(this.folderService.folderViews$).then((folders) => {\n decFolders = folders;\n })\n );\n\n promises.push(\n this.cipherService.getAllDecrypted().then((ciphers) => {\n decCiphers = ciphers.filter((f) => f.deletedDate == null);\n })\n );\n\n await Promise.all(promises);\n\n if (format === \"csv\") {\n const foldersMap = new Map();\n decFolders.forEach((f) => {\n if (f.id != null) {\n foldersMap.set(f.id, f);\n }\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach((c) => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n if (c.organizationId != null) {\n return;\n }\n\n const cipher: any = {};\n cipher.folder =\n c.folderId != null && foldersMap.has(c.folderId) ? foldersMap.get(c.folderId).name : null;\n cipher.favorite = c.favorite ? 1 : null;\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n encrypted: false,\n folders: [],\n items: [],\n };\n\n decFolders.forEach((f) => {\n if (f.id == null) {\n return;\n }\n const folder = new FolderExport();\n folder.build(f);\n jsonDoc.folders.push(folder);\n });\n\n decCiphers.forEach((c) => {\n if (c.organizationId != null) {\n return;\n }\n const cipher = new CipherExport();\n cipher.build(c);\n cipher.collectionIds = null;\n jsonDoc.items.push(cipher);\n });\n\n return JSON.stringify(jsonDoc, null, \" \");\n }\n }\n\n private async getEncryptedExport(): Promise {\n let folders: Folder[] = [];\n let ciphers: Cipher[] = [];\n const promises = [];\n\n promises.push(\n firstValueFrom(this.folderService.folders$).then((f) => {\n folders = f;\n })\n );\n\n promises.push(\n this.cipherService.getAll().then((c) => {\n ciphers = c.filter((f) => f.deletedDate == null);\n })\n );\n\n await Promise.all(promises);\n\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid());\n\n const jsonDoc: any = {\n encrypted: true,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n folders: [],\n items: [],\n };\n\n folders.forEach((f) => {\n if (f.id == null) {\n return;\n }\n const folder = new FolderExport();\n folder.build(f);\n jsonDoc.folders.push(folder);\n });\n\n ciphers.forEach((c) => {\n if (c.organizationId != null) {\n return;\n }\n const cipher = new CipherExport();\n cipher.build(c);\n cipher.collectionIds = null;\n jsonDoc.items.push(cipher);\n });\n\n return JSON.stringify(jsonDoc, null, \" \");\n }\n\n private async getOrganizationDecryptedExport(\n organizationId: string,\n format: \"json\" | \"csv\"\n ): Promise {\n const decCollections: CollectionView[] = [];\n const decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(\n this.apiService.getOrganizationExport(organizationId).then((exportData) => {\n const exportPromises: any = [];\n if (exportData != null) {\n if (\n exportData.collections != null &&\n exportData.collections.data != null &&\n exportData.collections.data.length > 0\n ) {\n exportData.collections.data.forEach((c) => {\n const collection = new Collection(new CollectionData(c as CollectionDetailsResponse));\n exportPromises.push(\n collection.decrypt().then((decCol) => {\n decCollections.push(decCol);\n })\n );\n });\n }\n if (\n exportData.ciphers != null &&\n exportData.ciphers.data != null &&\n exportData.ciphers.data.length > 0\n ) {\n exportData.ciphers.data\n .filter((c) => c.deletedDate === null)\n .forEach((c) => {\n const cipher = new Cipher(new CipherData(c));\n exportPromises.push(\n cipher.decrypt().then((decCipher) => {\n decCiphers.push(decCipher);\n })\n );\n });\n }\n }\n return Promise.all(exportPromises);\n })\n );\n\n await Promise.all(promises);\n\n if (format === \"csv\") {\n const collectionsMap = new Map();\n decCollections.forEach((c) => {\n collectionsMap.set(c.id, c);\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach((c) => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n\n const cipher: any = {};\n cipher.collections = [];\n if (c.collectionIds != null) {\n cipher.collections = c.collectionIds\n .filter((id) => collectionsMap.has(id))\n .map((id) => collectionsMap.get(id).name);\n }\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n encrypted: false,\n collections: [],\n items: [],\n };\n\n decCollections.forEach((c) => {\n const collection = new CollectionExport();\n collection.build(c);\n jsonDoc.collections.push(collection);\n });\n\n decCiphers.forEach((c) => {\n const cipher = new CipherExport();\n cipher.build(c);\n jsonDoc.items.push(cipher);\n });\n return JSON.stringify(jsonDoc, null, \" \");\n }\n }\n\n private async getOrganizationEncryptedExport(organizationId: string): Promise {\n const collections: Collection[] = [];\n const ciphers: Cipher[] = [];\n const promises = [];\n\n promises.push(\n this.apiService.getCollections(organizationId).then((c) => {\n const collectionPromises: any = [];\n if (c != null && c.data != null && c.data.length > 0) {\n c.data.forEach((r) => {\n const collection = new Collection(new CollectionData(r as CollectionDetailsResponse));\n collections.push(collection);\n });\n }\n return Promise.all(collectionPromises);\n })\n );\n\n promises.push(\n this.apiService.getCiphersOrganization(organizationId).then((c) => {\n const cipherPromises: any = [];\n if (c != null && c.data != null && c.data.length > 0) {\n c.data\n .filter((item) => item.deletedDate === null)\n .forEach((item) => {\n const cipher = new Cipher(new CipherData(item));\n ciphers.push(cipher);\n });\n }\n return Promise.all(cipherPromises);\n })\n );\n\n await Promise.all(promises);\n\n const orgKey = await this.cryptoService.getOrgKey(organizationId);\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid(), orgKey);\n\n const jsonDoc: any = {\n encrypted: true,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n collections: [],\n items: [],\n };\n\n collections.forEach((c) => {\n const collection = new CollectionExport();\n collection.build(c);\n jsonDoc.collections.push(collection);\n });\n\n ciphers.forEach((c) => {\n const cipher = new CipherExport();\n cipher.build(c);\n jsonDoc.items.push(cipher);\n });\n return JSON.stringify(jsonDoc, null, \" \");\n }\n\n private padNumber(num: number, width: number, padCharacter = \"0\"): string {\n const numString = num.toString();\n return numString.length >= width\n ? numString\n : new Array(width - numString.length + 1).join(padCharacter) + numString;\n }\n\n private buildCommonCipher(cipher: any, c: CipherView) {\n cipher.type = null;\n cipher.name = c.name;\n cipher.notes = c.notes;\n cipher.fields = null;\n cipher.reprompt = c.reprompt;\n // Login props\n cipher.login_uri = null;\n cipher.login_username = null;\n cipher.login_password = null;\n cipher.login_totp = null;\n\n if (c.fields) {\n c.fields.forEach((f: any) => {\n if (!cipher.fields) {\n cipher.fields = \"\";\n } else {\n cipher.fields += \"\\n\";\n }\n\n cipher.fields += (f.name || \"\") + \": \" + f.value;\n });\n }\n\n switch (c.type) {\n case CipherType.Login:\n cipher.type = \"login\";\n cipher.login_username = c.login.username;\n cipher.login_password = c.login.password;\n cipher.login_totp = c.login.totp;\n\n if (c.login.uris) {\n cipher.login_uri = [];\n c.login.uris.forEach((u) => {\n cipher.login_uri.push(u.uri);\n });\n }\n break;\n case CipherType.SecureNote:\n cipher.type = \"note\";\n break;\n default:\n return;\n }\n\n return cipher;\n }\n}\n","import * as signalR from \"@microsoft/signalr\";\nimport * as signalRMsgPack from \"@microsoft/signalr-protocol-msgpack\";\n\nimport { ApiService } from \"../abstractions/api.service\";\nimport { AppIdService } from \"../abstractions/appId.service\";\nimport { AuthService } from \"../abstractions/auth.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"../abstractions/notifications.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { SyncService } from \"../abstractions/sync/sync.service.abstraction\";\nimport { AuthenticationStatus } from \"../enums/authenticationStatus\";\nimport { NotificationType } from \"../enums/notificationType\";\nimport {\n NotificationResponse,\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../models/response/notification.response\";\n\nexport class NotificationsService implements NotificationsServiceAbstraction {\n private signalrConnection: signalR.HubConnection;\n private url: string;\n private connected = false;\n private inited = false;\n private inactive = false;\n private reconnectTimer: any = null;\n\n constructor(\n private syncService: SyncService,\n private appIdService: AppIdService,\n private apiService: ApiService,\n private environmentService: EnvironmentService,\n private logoutCallback: (expired: boolean) => Promise,\n private logService: LogService,\n private stateService: StateService,\n private authService: AuthService\n ) {\n this.environmentService.urls.subscribe(() => {\n if (!this.inited) {\n return;\n }\n\n this.init();\n });\n }\n\n async init(): Promise {\n this.inited = false;\n this.url = this.environmentService.getNotificationsUrl();\n\n // Set notifications server URL to `https://-` to effectively disable communication\n // with the notifications server from the client app\n if (this.url === \"https://-\") {\n return;\n }\n\n if (this.signalrConnection != null) {\n this.signalrConnection.off(\"ReceiveMessage\");\n this.signalrConnection.off(\"Heartbeat\");\n await this.signalrConnection.stop();\n this.connected = false;\n this.signalrConnection = null;\n }\n\n this.signalrConnection = new signalR.HubConnectionBuilder()\n .withUrl(this.url + \"/hub\", {\n accessTokenFactory: () => this.apiService.getActiveBearerToken(),\n skipNegotiation: true,\n transport: signalR.HttpTransportType.WebSockets,\n })\n .withHubProtocol(new signalRMsgPack.MessagePackHubProtocol() as signalR.IHubProtocol)\n // .configureLogging(signalR.LogLevel.Trace)\n .build();\n\n this.signalrConnection.on(\"ReceiveMessage\", (data: any) =>\n this.processNotification(new NotificationResponse(data))\n );\n // eslint-disable-next-line\n this.signalrConnection.on(\"Heartbeat\", (data: any) => {\n /*console.log('Heartbeat!');*/\n });\n this.signalrConnection.onclose(() => {\n this.connected = false;\n this.reconnect(true);\n });\n this.inited = true;\n if (await this.isAuthedAndUnlocked()) {\n await this.reconnect(false);\n }\n }\n\n async updateConnection(sync = false): Promise {\n if (!this.inited) {\n return;\n }\n try {\n if (await this.isAuthedAndUnlocked()) {\n await this.reconnect(sync);\n } else {\n await this.signalrConnection.stop();\n }\n } catch (e) {\n this.logService.error(e.toString());\n }\n }\n\n async reconnectFromActivity(): Promise {\n this.inactive = false;\n if (this.inited && !this.connected) {\n await this.reconnect(true);\n }\n }\n\n async disconnectFromInactivity(): Promise {\n this.inactive = true;\n if (this.inited && this.connected) {\n await this.signalrConnection.stop();\n }\n }\n\n private async processNotification(notification: NotificationResponse) {\n const appId = await this.appIdService.getAppId();\n if (notification == null || notification.contextId === appId) {\n return;\n }\n\n const isAuthenticated = await this.stateService.getIsAuthenticated();\n const payloadUserId = notification.payload.userId || notification.payload.UserId;\n const myUserId = await this.stateService.getUserId();\n if (isAuthenticated && payloadUserId != null && payloadUserId !== myUserId) {\n return;\n }\n\n switch (notification.type) {\n case NotificationType.SyncCipherCreate:\n case NotificationType.SyncCipherUpdate:\n await this.syncService.syncUpsertCipher(\n notification.payload as SyncCipherNotification,\n notification.type === NotificationType.SyncCipherUpdate\n );\n break;\n case NotificationType.SyncCipherDelete:\n case NotificationType.SyncLoginDelete:\n await this.syncService.syncDeleteCipher(notification.payload as SyncCipherNotification);\n break;\n case NotificationType.SyncFolderCreate:\n case NotificationType.SyncFolderUpdate:\n await this.syncService.syncUpsertFolder(\n notification.payload as SyncFolderNotification,\n notification.type === NotificationType.SyncFolderUpdate\n );\n break;\n case NotificationType.SyncFolderDelete:\n await this.syncService.syncDeleteFolder(notification.payload as SyncFolderNotification);\n break;\n case NotificationType.SyncVault:\n case NotificationType.SyncCiphers:\n case NotificationType.SyncSettings:\n if (isAuthenticated) {\n await this.syncService.fullSync(false);\n }\n break;\n case NotificationType.SyncOrgKeys:\n if (isAuthenticated) {\n await this.syncService.fullSync(true);\n // Stop so a reconnect can be made\n await this.signalrConnection.stop();\n }\n break;\n case NotificationType.LogOut:\n if (isAuthenticated) {\n this.logoutCallback(true);\n }\n break;\n case NotificationType.SyncSendCreate:\n case NotificationType.SyncSendUpdate:\n await this.syncService.syncUpsertSend(\n notification.payload as SyncSendNotification,\n notification.type === NotificationType.SyncSendUpdate\n );\n break;\n case NotificationType.SyncSendDelete:\n await this.syncService.syncDeleteSend(notification.payload as SyncSendNotification);\n break;\n default:\n break;\n }\n }\n\n private async reconnect(sync: boolean) {\n if (this.reconnectTimer != null) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n if (this.connected || !this.inited || this.inactive) {\n return;\n }\n const authedAndUnlocked = await this.isAuthedAndUnlocked();\n if (!authedAndUnlocked) {\n return;\n }\n\n try {\n await this.signalrConnection.start();\n this.connected = true;\n if (sync) {\n await this.syncService.fullSync(false);\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n if (!this.connected) {\n this.reconnectTimer = setTimeout(() => this.reconnect(sync), this.random(120000, 300000));\n }\n }\n\n private async isAuthedAndUnlocked() {\n const authStatus = await this.authService.getAuthStatus();\n return authStatus >= AuthenticationStatus.Unlocked;\n }\n\n private random(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n}\n","import * as forge from \"node-forge\";\n\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { Utils } from \"../misc/utils\";\nimport { DecryptParameters } from \"../models/domain/decrypt-parameters\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\n\nexport class WebCryptoFunctionService implements CryptoFunctionService {\n private crypto: Crypto;\n private subtle: SubtleCrypto;\n\n constructor(win: Window | typeof global) {\n this.crypto = typeof win.crypto !== \"undefined\" ? win.crypto : null;\n this.subtle =\n !!this.crypto && typeof win.crypto.subtle !== \"undefined\" ? win.crypto.subtle : null;\n }\n\n async pbkdf2(\n password: string | ArrayBuffer,\n salt: string | ArrayBuffer,\n algorithm: \"sha256\" | \"sha512\",\n iterations: number\n ): Promise {\n const wcLen = algorithm === \"sha256\" ? 256 : 512;\n const passwordBuf = this.toBuf(password);\n const saltBuf = this.toBuf(salt);\n\n const pbkdf2Params: Pbkdf2Params = {\n name: \"PBKDF2\",\n salt: saltBuf,\n iterations: iterations,\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey(\n \"raw\",\n passwordBuf,\n { name: \"PBKDF2\" } as any,\n false,\n [\"deriveBits\"]\n );\n return await this.subtle.deriveBits(pbkdf2Params, impKey, wcLen);\n }\n\n async hkdf(\n ikm: ArrayBuffer,\n salt: string | ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ): Promise {\n const saltBuf = this.toBuf(salt);\n const infoBuf = this.toBuf(info);\n\n const hkdfParams: HkdfParams = {\n name: \"HKDF\",\n salt: saltBuf,\n info: infoBuf,\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey(\"raw\", ikm, { name: \"HKDF\" } as any, false, [\n \"deriveBits\",\n ]);\n return await this.subtle.deriveBits(hkdfParams as any, impKey, outputByteSize * 8);\n }\n\n // ref: https://tools.ietf.org/html/rfc5869\n async hkdfExpand(\n prk: ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ): Promise {\n const hashLen = algorithm === \"sha256\" ? 32 : 64;\n if (outputByteSize > 255 * hashLen) {\n throw new Error(\"outputByteSize is too large.\");\n }\n const prkArr = new Uint8Array(prk);\n if (prkArr.length < hashLen) {\n throw new Error(\"prk is too small.\");\n }\n const infoBuf = this.toBuf(info);\n const infoArr = new Uint8Array(infoBuf);\n let runningOkmLength = 0;\n let previousT = new Uint8Array(0);\n const n = Math.ceil(outputByteSize / hashLen);\n const okm = new Uint8Array(n * hashLen);\n for (let i = 0; i < n; i++) {\n const t = new Uint8Array(previousT.length + infoArr.length + 1);\n t.set(previousT);\n t.set(infoArr, previousT.length);\n t.set([i + 1], t.length - 1);\n previousT = new Uint8Array(await this.hmac(t.buffer, prk, algorithm));\n okm.set(previousT, runningOkmLength);\n runningOkmLength += previousT.length;\n if (runningOkmLength >= outputByteSize) {\n break;\n }\n }\n return okm.slice(0, outputByteSize).buffer;\n }\n\n async hash(\n value: string | ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"\n ): Promise {\n if (algorithm === \"md5\") {\n const md = algorithm === \"md5\" ? forge.md.md5.create() : forge.md.sha1.create();\n const valueBytes = this.toByteString(value);\n md.update(valueBytes, \"raw\");\n return Utils.fromByteStringToArray(md.digest().data).buffer;\n }\n\n const valueBuf = this.toBuf(value);\n return await this.subtle.digest({ name: this.toWebCryptoAlgorithm(algorithm) }, valueBuf);\n }\n\n async hmac(\n value: ArrayBuffer,\n key: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ): Promise {\n const signingAlgorithm = {\n name: \"HMAC\",\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey(\"raw\", key, signingAlgorithm, false, [\"sign\"]);\n return await this.subtle.sign(signingAlgorithm, impKey, value);\n }\n\n // Safely compare two values in a way that protects against timing attacks (Double HMAC Verification).\n // ref: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/\n // ref: https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-string-comparison-with-double-hmac-strategy\n async compare(a: ArrayBuffer, b: ArrayBuffer): Promise {\n const macKey = await this.randomBytes(32);\n const signingAlgorithm = {\n name: \"HMAC\",\n hash: { name: \"SHA-256\" },\n };\n const impKey = await this.subtle.importKey(\"raw\", macKey, signingAlgorithm, false, [\"sign\"]);\n const mac1 = await this.subtle.sign(signingAlgorithm, impKey, a);\n const mac2 = await this.subtle.sign(signingAlgorithm, impKey, b);\n\n if (mac1.byteLength !== mac2.byteLength) {\n return false;\n }\n\n const arr1 = new Uint8Array(mac1);\n const arr2 = new Uint8Array(mac2);\n for (let i = 0; i < arr2.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n hmacFast(value: string, key: string, algorithm: \"sha1\" | \"sha256\" | \"sha512\"): Promise {\n const hmac = forge.hmac.create();\n hmac.start(algorithm, key);\n hmac.update(value);\n const bytes = hmac.digest().getBytes();\n return Promise.resolve(bytes);\n }\n\n async compareFast(a: string, b: string): Promise {\n const rand = await this.randomBytes(32);\n const bytes = new Uint32Array(rand);\n const buffer = forge.util.createBuffer();\n for (let i = 0; i < bytes.length; i++) {\n buffer.putInt32(bytes[i]);\n }\n const macKey = buffer.getBytes();\n\n const hmac = forge.hmac.create();\n hmac.start(\"sha256\", macKey);\n hmac.update(a);\n const mac1 = hmac.digest().getBytes();\n\n hmac.start(null, null);\n hmac.update(b);\n const mac2 = hmac.digest().getBytes();\n\n const equals = mac1 === mac2;\n return equals;\n }\n\n async aesEncrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise {\n const impKey = await this.subtle.importKey(\"raw\", key, { name: \"AES-CBC\" } as any, false, [\n \"encrypt\",\n ]);\n return await this.subtle.encrypt({ name: \"AES-CBC\", iv: iv }, impKey, data);\n }\n\n aesDecryptFastParameters(\n data: string,\n iv: string,\n mac: string,\n key: SymmetricCryptoKey\n ): DecryptParameters {\n const p = new DecryptParameters();\n if (key.meta != null) {\n p.encKey = key.meta.encKeyByteString;\n p.macKey = key.meta.macKeyByteString;\n }\n\n if (p.encKey == null) {\n p.encKey = forge.util.decode64(key.encKeyB64);\n }\n p.data = forge.util.decode64(data);\n p.iv = forge.util.decode64(iv);\n p.macData = p.iv + p.data;\n if (p.macKey == null && key.macKeyB64 != null) {\n p.macKey = forge.util.decode64(key.macKeyB64);\n }\n if (mac != null) {\n p.mac = forge.util.decode64(mac);\n }\n\n // cache byte string keys for later\n if (key.meta == null) {\n key.meta = {};\n }\n if (key.meta.encKeyByteString == null) {\n key.meta.encKeyByteString = p.encKey;\n }\n if (p.macKey != null && key.meta.macKeyByteString == null) {\n key.meta.macKeyByteString = p.macKey;\n }\n\n return p;\n }\n\n aesDecryptFast(parameters: DecryptParameters): Promise {\n const dataBuffer = forge.util.createBuffer(parameters.data);\n const decipher = forge.cipher.createDecipher(\"AES-CBC\", parameters.encKey);\n decipher.start({ iv: parameters.iv });\n decipher.update(dataBuffer);\n decipher.finish();\n const val = decipher.output.toString();\n return Promise.resolve(val);\n }\n\n async aesDecrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise {\n const impKey = await this.subtle.importKey(\"raw\", key, { name: \"AES-CBC\" } as any, false, [\n \"decrypt\",\n ]);\n return await this.subtle.decrypt({ name: \"AES-CBC\", iv: iv }, impKey, data);\n }\n\n async rsaEncrypt(\n data: ArrayBuffer,\n publicKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ): Promise {\n // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n // We cannot use the proper types here.\n const rsaParams = {\n name: \"RSA-OAEP\",\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n const impKey = await this.subtle.importKey(\"spki\", publicKey, rsaParams, false, [\"encrypt\"]);\n return await this.subtle.encrypt(rsaParams, impKey, data);\n }\n\n async rsaDecrypt(\n data: ArrayBuffer,\n privateKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ): Promise {\n // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n // We cannot use the proper types here.\n const rsaParams = {\n name: \"RSA-OAEP\",\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n const impKey = await this.subtle.importKey(\"pkcs8\", privateKey, rsaParams, false, [\"decrypt\"]);\n return await this.subtle.decrypt(rsaParams, impKey, data);\n }\n\n async rsaExtractPublicKey(privateKey: ArrayBuffer): Promise {\n const rsaParams = {\n name: \"RSA-OAEP\",\n // Have to specify some algorithm\n hash: { name: this.toWebCryptoAlgorithm(\"sha1\") },\n };\n const impPrivateKey = await this.subtle.importKey(\"pkcs8\", privateKey, rsaParams, true, [\n \"decrypt\",\n ]);\n const jwkPrivateKey = await this.subtle.exportKey(\"jwk\", impPrivateKey);\n const jwkPublicKeyParams = {\n kty: \"RSA\",\n e: jwkPrivateKey.e,\n n: jwkPrivateKey.n,\n alg: \"RSA-OAEP\",\n ext: true,\n };\n const impPublicKey = await this.subtle.importKey(\"jwk\", jwkPublicKeyParams, rsaParams, true, [\n \"encrypt\",\n ]);\n return await this.subtle.exportKey(\"spki\", impPublicKey);\n }\n\n async rsaGenerateKeyPair(length: 1024 | 2048 | 4096): Promise<[ArrayBuffer, ArrayBuffer]> {\n const rsaParams = {\n name: \"RSA-OAEP\",\n modulusLength: length,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]), // 65537\n // Have to specify some algorithm\n hash: { name: this.toWebCryptoAlgorithm(\"sha1\") },\n };\n const keyPair = (await this.subtle.generateKey(rsaParams, true, [\n \"encrypt\",\n \"decrypt\",\n ])) as CryptoKeyPair;\n const publicKey = await this.subtle.exportKey(\"spki\", keyPair.publicKey);\n const privateKey = await this.subtle.exportKey(\"pkcs8\", keyPair.privateKey);\n return [publicKey, privateKey];\n }\n\n randomBytes(length: number): Promise {\n const arr = new Uint8Array(length);\n this.crypto.getRandomValues(arr);\n return Promise.resolve(arr.buffer);\n }\n\n private toBuf(value: string | ArrayBuffer): ArrayBuffer {\n let buf: ArrayBuffer;\n if (typeof value === \"string\") {\n buf = Utils.fromUtf8ToArray(value).buffer;\n } else {\n buf = value;\n }\n return buf;\n }\n\n private toByteString(value: string | ArrayBuffer): string {\n let bytes: string;\n if (typeof value === \"string\") {\n bytes = forge.util.encodeUtf8(value);\n } else {\n bytes = Utils.fromBufferToByteString(value);\n }\n return bytes;\n }\n\n private toWebCryptoAlgorithm(algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"): string {\n if (algorithm === \"md5\") {\n throw new Error(\"MD5 is not supported in WebCrypto.\");\n }\n return algorithm === \"sha1\" ? \"SHA-1\" : algorithm === \"sha256\" ? \"SHA-256\" : \"SHA-512\";\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { EventService as EventServiceAbstraction } from \"../abstractions/event.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { OrganizationService } from \"../abstractions/organization/organization.service.abstraction\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { EventType } from \"../enums/eventType\";\nimport { EventData } from \"../models/data/event.data\";\nimport { EventRequest } from \"../models/request/event.request\";\n\nexport class EventService implements EventServiceAbstraction {\n private inited = false;\n\n constructor(\n private apiService: ApiService,\n private cipherService: CipherService,\n private stateService: StateService,\n private logService: LogService,\n private organizationService: OrganizationService\n ) {}\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.uploadEvents();\n setInterval(() => this.uploadEvents(), 60 * 1000); // check every 60 seconds\n }\n }\n\n async collect(\n eventType: EventType,\n cipherId: string = null,\n uploadImmediately = false,\n organizationId: string = null\n ): Promise {\n const authed = await this.stateService.getIsAuthenticated();\n if (!authed) {\n return;\n }\n const organizations = await this.organizationService.getAll();\n if (organizations == null) {\n return;\n }\n const orgIds = new Set(organizations.filter((o) => o.useEvents).map((o) => o.id));\n if (orgIds.size === 0) {\n return;\n }\n if (cipherId != null) {\n const cipher = await this.cipherService.get(cipherId);\n if (cipher == null || cipher.organizationId == null || !orgIds.has(cipher.organizationId)) {\n return;\n }\n }\n if (organizationId != null) {\n if (!orgIds.has(organizationId)) {\n return;\n }\n }\n let eventCollection = await this.stateService.getEventCollection();\n if (eventCollection == null) {\n eventCollection = [];\n }\n const event = new EventData();\n event.type = eventType;\n event.cipherId = cipherId;\n event.date = new Date().toISOString();\n event.organizationId = organizationId;\n eventCollection.push(event);\n await this.stateService.setEventCollection(eventCollection);\n if (uploadImmediately) {\n await this.uploadEvents();\n }\n }\n\n async uploadEvents(userId?: string): Promise {\n const authed = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!authed) {\n return;\n }\n const eventCollection = await this.stateService.getEventCollection({ userId: userId });\n if (eventCollection == null || eventCollection.length === 0) {\n return;\n }\n const request = eventCollection.map((e) => {\n const req = new EventRequest();\n req.type = e.type;\n req.cipherId = e.cipherId;\n req.date = e.date;\n req.organizationId = e.organizationId;\n return req;\n });\n try {\n await this.apiService.postEventsCollect(request);\n this.clearEvents(userId);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async clearEvents(userId?: string): Promise {\n await this.stateService.setEventCollection(null, { userId: userId });\n }\n}\n","import { of, concatMap, BehaviorSubject, Observable, map } from \"rxjs\";\n\nimport { OrganizationService } from \"../../abstractions/organization/organization.service.abstraction\";\nimport { InternalPolicyService as InternalPolicyServiceAbstraction } from \"../../abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PolicyType } from \"../../enums/policyType\";\nimport { Utils } from \"../../misc/utils\";\nimport { PolicyData } from \"../../models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/master-password-policy-options\";\nimport { Organization } from \"../../models/domain/organization\";\nimport { Policy } from \"../../models/domain/policy\";\nimport { ResetPasswordPolicyOptions } from \"../../models/domain/reset-password-policy-options\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\n\nexport class PolicyService implements InternalPolicyServiceAbstraction {\n protected _policies: BehaviorSubject = new BehaviorSubject([]);\n\n policies$ = this._policies.asObservable();\n\n constructor(\n private stateService: StateService,\n private organizationService: OrganizationService\n ) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n concatMap(async (unlocked) => {\n if (Utils.global.bitwardenContainerService == null) {\n return;\n }\n\n if (!unlocked) {\n this._policies.next([]);\n return;\n }\n\n const data = await this.stateService.getEncryptedPolicies();\n\n await this.updateObservables(data);\n })\n )\n .subscribe();\n }\n\n /**\n * @deprecated Do not call this, use the policies$ observable collection\n */\n async getAll(type?: PolicyType, userId?: string): Promise {\n let response: Policy[] = [];\n const decryptedPolicies = await this.stateService.getDecryptedPolicies({ userId: userId });\n if (decryptedPolicies != null) {\n response = decryptedPolicies;\n } else {\n const diskPolicies = await this.stateService.getEncryptedPolicies({ userId: userId });\n for (const id in diskPolicies) {\n if (Object.prototype.hasOwnProperty.call(diskPolicies, id)) {\n response.push(new Policy(diskPolicies[id]));\n }\n }\n await this.stateService.setDecryptedPolicies(response, { userId: userId });\n }\n if (type != null) {\n return response.filter((policy) => policy.type === type);\n } else {\n return response;\n }\n }\n\n masterPasswordPolicyOptions$(policies?: Policy[]): Observable {\n const observable = policies ? of(policies) : this.policies$;\n return observable.pipe(\n map((obsPolicies) => {\n let enforcedOptions: MasterPasswordPolicyOptions = null;\n const filteredPolicies = obsPolicies.filter((p) => p.type === PolicyType.MasterPassword);\n\n if (filteredPolicies == null || filteredPolicies.length === 0) {\n return enforcedOptions;\n }\n\n filteredPolicies.forEach((currentPolicy) => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new MasterPasswordPolicyOptions();\n }\n\n if (\n currentPolicy.data.minComplexity != null &&\n currentPolicy.data.minComplexity > enforcedOptions.minComplexity\n ) {\n enforcedOptions.minComplexity = currentPolicy.data.minComplexity;\n }\n\n if (\n currentPolicy.data.minLength != null &&\n currentPolicy.data.minLength > enforcedOptions.minLength\n ) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.requireUpper) {\n enforcedOptions.requireUpper = true;\n }\n\n if (currentPolicy.data.requireLower) {\n enforcedOptions.requireLower = true;\n }\n\n if (currentPolicy.data.requireNumbers) {\n enforcedOptions.requireNumbers = true;\n }\n\n if (currentPolicy.data.requireSpecial) {\n enforcedOptions.requireSpecial = true;\n }\n });\n\n return enforcedOptions;\n })\n );\n }\n\n policyAppliesToActiveUser$(policyType: PolicyType, policyFilter?: (policy: Policy) => boolean) {\n return this.policies$.pipe(\n concatMap(async (policies) => {\n const userId = await this.stateService.getUserId();\n return await this.checkPoliciesThatApplyToUser(policies, policyType, policyFilter, userId);\n })\n );\n }\n\n evaluateMasterPassword(\n passwordStrength: number,\n newPassword: string,\n enforcedPolicyOptions: MasterPasswordPolicyOptions\n ): boolean {\n if (enforcedPolicyOptions == null) {\n return true;\n }\n\n if (\n enforcedPolicyOptions.minComplexity > 0 &&\n enforcedPolicyOptions.minComplexity > passwordStrength\n ) {\n return false;\n }\n\n if (\n enforcedPolicyOptions.minLength > 0 &&\n enforcedPolicyOptions.minLength > newPassword.length\n ) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireUpper && newPassword.toLocaleLowerCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireLower && newPassword.toLocaleUpperCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireNumbers && !/[0-9]/.test(newPassword)) {\n return false;\n }\n\n // eslint-disable-next-line\n if (enforcedPolicyOptions.requireSpecial && !/[!@#$%\\^&*]/g.test(newPassword)) {\n return false;\n }\n\n return true;\n }\n\n getResetPasswordPolicyOptions(\n policies: Policy[],\n orgId: string\n ): [ResetPasswordPolicyOptions, boolean] {\n const resetPasswordPolicyOptions = new ResetPasswordPolicyOptions();\n\n if (policies == null || orgId == null) {\n return [resetPasswordPolicyOptions, false];\n }\n\n const policy = policies.find(\n (p) => p.organizationId === orgId && p.type === PolicyType.ResetPassword && p.enabled\n );\n resetPasswordPolicyOptions.autoEnrollEnabled = policy?.data?.autoEnrollEnabled ?? false;\n\n return [resetPasswordPolicyOptions, policy?.enabled ?? false];\n }\n\n mapPoliciesFromToken(policiesResponse: ListResponse): Policy[] {\n if (policiesResponse == null || policiesResponse.data == null) {\n return null;\n }\n\n const policiesData = policiesResponse.data.map((p) => new PolicyData(p));\n return policiesData.map((p) => new Policy(p));\n }\n\n async policyAppliesToUser(\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean,\n userId?: string\n ) {\n const policies = await this.getAll(policyType, userId);\n\n return this.checkPoliciesThatApplyToUser(policies, policyType, policyFilter, userId);\n }\n\n async upsert(policy: PolicyData): Promise {\n let policies = await this.stateService.getEncryptedPolicies();\n if (policies == null) {\n policies = {};\n }\n\n policies[policy.id] = policy;\n\n await this.updateObservables(policies);\n await this.stateService.setDecryptedPolicies(null);\n await this.stateService.setEncryptedPolicies(policies);\n }\n\n async replace(policies: { [id: string]: PolicyData }): Promise {\n await this.updateObservables(policies);\n await this.stateService.setDecryptedPolicies(null);\n await this.stateService.setEncryptedPolicies(policies);\n }\n\n async clear(userId?: string): Promise {\n if (userId == null || userId == (await this.stateService.getUserId())) {\n this._policies.next([]);\n }\n await this.stateService.setDecryptedPolicies(null, { userId: userId });\n await this.stateService.setEncryptedPolicies(null, { userId: userId });\n }\n\n private isExcemptFromPolicies(organization: Organization, policyType: PolicyType) {\n if (policyType === PolicyType.MaximumVaultTimeout) {\n return organization.type === OrganizationUserType.Owner;\n }\n\n return organization.isExemptFromPolicies;\n }\n\n private async updateObservables(policiesMap: { [id: string]: PolicyData }) {\n const policies = Object.values(policiesMap || {}).map((f) => new Policy(f));\n\n this._policies.next(policies);\n }\n\n private async checkPoliciesThatApplyToUser(\n policies: Policy[],\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean,\n userId?: string\n ) {\n const organizations = await this.organizationService.getAll(userId);\n const filteredPolicies = policies.filter(\n (p) => p.type === policyType && p.enabled && (policyFilter == null || policyFilter(p))\n );\n const policySet = new Set(filteredPolicies.map((p) => p.organizationId));\n\n return organizations.some(\n (o) =>\n o.enabled &&\n o.status >= OrganizationUserStatusType.Accepted &&\n o.usePolicies &&\n policySet.has(o.id) &&\n !this.isExcemptFromPolicies(o, policyType)\n );\n }\n}\n","import { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"../../abstractions/api.service\";\nimport { OrganizationService } from \"../../abstractions/organization/organization.service.abstraction\";\nimport { PolicyApiServiceAbstraction } from \"../../abstractions/policy/policy-api.service.abstraction\";\nimport { InternalPolicyService } from \"../../abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { PolicyType } from \"../../enums/policyType\";\nimport { PolicyData } from \"../../models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/master-password-policy-options\";\nimport { PolicyRequest } from \"../../models/request/policy.request\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\n\nexport class PolicyApiService implements PolicyApiServiceAbstraction {\n constructor(\n private policyService: InternalPolicyService,\n private apiService: ApiService,\n private stateService: StateService,\n private organizationService: OrganizationService\n ) {}\n\n async getPolicy(organizationId: string, type: PolicyType): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/policies/\" + type,\n null,\n true,\n true\n );\n return new PolicyResponse(r);\n }\n\n async getPolicies(organizationId: string): Promise> {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/policies\",\n null,\n true,\n true\n );\n return new ListResponse(r, PolicyResponse);\n }\n\n async getPoliciesByToken(\n organizationId: string,\n token: string,\n email: string,\n organizationUserId: string\n ): Promise> {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" +\n organizationId +\n \"/policies/token?\" +\n \"token=\" +\n encodeURIComponent(token) +\n \"&email=\" +\n encodeURIComponent(email) +\n \"&organizationUserId=\" +\n organizationUserId,\n null,\n false,\n true\n );\n return new ListResponse(r, PolicyResponse);\n }\n\n async getPoliciesByInvitedUser(\n organizationId: string,\n userId: string\n ): Promise> {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/policies/invited-user?\" + \"userId=\" + userId,\n null,\n false,\n true\n );\n return new ListResponse(r, PolicyResponse);\n }\n\n async getMasterPasswordPoliciesForInvitedUsers(\n orgId: string\n ): Promise {\n const userId = await this.stateService.getUserId();\n const response = await this.getPoliciesByInvitedUser(orgId, userId);\n const policies = await this.policyService.mapPoliciesFromToken(response);\n return await firstValueFrom(this.policyService.masterPasswordPolicyOptions$(policies));\n }\n\n async putPolicy(organizationId: string, type: PolicyType, request: PolicyRequest): Promise {\n const r = await this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/policies/\" + type,\n request,\n true,\n true\n );\n const response = new PolicyResponse(r);\n const data = new PolicyData(response);\n await this.policyService.upsert(data);\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { FileUploadService } from \"../abstractions/fileUpload.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { SendService as SendServiceAbstraction } from \"../abstractions/send.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { SEND_KDF_ITERATIONS } from \"../enums/kdfType\";\nimport { SendType } from \"../enums/sendType\";\nimport { Utils } from \"../misc/utils\";\nimport { SendData } from \"../models/data/send.data\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { Send } from \"../models/domain/send\";\nimport { SendFile } from \"../models/domain/send-file\";\nimport { SendText } from \"../models/domain/send-text\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { SendRequest } from \"../models/request/send.request\";\nimport { ErrorResponse } from \"../models/response/error.response\";\nimport { SendResponse } from \"../models/response/send.response\";\nimport { SendView } from \"../models/view/send.view\";\n\nexport class SendService implements SendServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private apiService: ApiService,\n private fileUploadService: FileUploadService,\n private i18nService: I18nService,\n private cryptoFunctionService: CryptoFunctionService,\n private stateService: StateService\n ) {}\n\n async clearCache(): Promise {\n await this.stateService.setDecryptedSends(null);\n }\n\n async encrypt(\n model: SendView,\n file: File | ArrayBuffer,\n password: string,\n key?: SymmetricCryptoKey\n ): Promise<[Send, EncArrayBuffer]> {\n let fileData: EncArrayBuffer = null;\n const send = new Send();\n send.id = model.id;\n send.type = model.type;\n send.disabled = model.disabled;\n send.hideEmail = model.hideEmail;\n send.maxAccessCount = model.maxAccessCount;\n if (model.key == null) {\n model.key = await this.cryptoFunctionService.randomBytes(16);\n model.cryptoKey = await this.cryptoService.makeSendKey(model.key);\n }\n if (password != null) {\n const passwordHash = await this.cryptoFunctionService.pbkdf2(\n password,\n model.key,\n \"sha256\",\n SEND_KDF_ITERATIONS\n );\n send.password = Utils.fromBufferToB64(passwordHash);\n }\n send.key = await this.cryptoService.encrypt(model.key, key);\n send.name = await this.cryptoService.encrypt(model.name, model.cryptoKey);\n send.notes = await this.cryptoService.encrypt(model.notes, model.cryptoKey);\n if (send.type === SendType.Text) {\n send.text = new SendText();\n send.text.text = await this.cryptoService.encrypt(model.text.text, model.cryptoKey);\n send.text.hidden = model.text.hidden;\n } else if (send.type === SendType.File) {\n send.file = new SendFile();\n if (file != null) {\n if (file instanceof ArrayBuffer) {\n const [name, data] = await this.encryptFileData(\n model.file.fileName,\n file,\n model.cryptoKey\n );\n send.file.fileName = name;\n fileData = data;\n } else {\n fileData = await this.parseFile(send, file, model.cryptoKey);\n }\n }\n }\n\n return [send, fileData];\n }\n\n async get(id: string): Promise {\n const sends = await this.stateService.getEncryptedSends();\n // eslint-disable-next-line\n if (sends == null || !sends.hasOwnProperty(id)) {\n return null;\n }\n\n return new Send(sends[id]);\n }\n\n async getAll(): Promise {\n const sends = await this.stateService.getEncryptedSends();\n const response: Send[] = [];\n for (const id in sends) {\n // eslint-disable-next-line\n if (sends.hasOwnProperty(id)) {\n response.push(new Send(sends[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n let decSends = await this.stateService.getDecryptedSends();\n if (decSends != null) {\n return decSends;\n }\n\n decSends = [];\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const promises: Promise[] = [];\n const sends = await this.getAll();\n sends.forEach((send) => {\n promises.push(send.decrypt().then((f) => decSends.push(f)));\n });\n\n await Promise.all(promises);\n decSends.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n\n await this.stateService.setDecryptedSends(decSends);\n return decSends;\n }\n\n async saveWithServer(sendData: [Send, EncArrayBuffer]): Promise {\n const request = new SendRequest(sendData[0], sendData[1]?.buffer.byteLength);\n let response: SendResponse;\n if (sendData[0].id == null) {\n if (sendData[0].type === SendType.Text) {\n response = await this.apiService.postSend(request);\n } else {\n try {\n const uploadDataResponse = await this.apiService.postFileTypeSend(request);\n response = uploadDataResponse.sendResponse;\n\n await this.fileUploadService.uploadSendFile(\n uploadDataResponse,\n sendData[0].file.fileName,\n sendData[1]\n );\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n response = await this.legacyServerSendFileUpload(sendData, request);\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n }\n sendData[0].id = response.id;\n sendData[0].accessId = response.accessId;\n } else {\n response = await this.apiService.putSend(sendData[0].id, request);\n }\n\n const data = new SendData(response);\n await this.upsert(data);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async legacyServerSendFileUpload(\n sendData: [Send, EncArrayBuffer],\n request: SendRequest\n ): Promise {\n const fd = new FormData();\n try {\n const blob = new Blob([sendData[1].buffer], { type: \"application/octet-stream\" });\n fd.append(\"model\", JSON.stringify(request));\n fd.append(\"data\", blob, sendData[0].file.fileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\"model\", JSON.stringify(request));\n fd.append(\n \"data\",\n Buffer.from(sendData[1].buffer) as any,\n {\n filepath: sendData[0].file.fileName.encryptedString,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n return await this.apiService.postSendFileLegacy(fd);\n }\n\n async upsert(send: SendData | SendData[]): Promise {\n let sends = await this.stateService.getEncryptedSends();\n if (sends == null) {\n sends = {};\n }\n\n if (send instanceof SendData) {\n const s = send as SendData;\n sends[s.id] = s;\n } else {\n (send as SendData[]).forEach((s) => {\n sends[s.id] = s;\n });\n }\n\n await this.replace(sends);\n }\n\n async replace(sends: { [id: string]: SendData }): Promise {\n await this.stateService.setDecryptedSends(null);\n await this.stateService.setEncryptedSends(sends);\n }\n\n async clear(): Promise {\n await this.stateService.setDecryptedSends(null);\n await this.stateService.setEncryptedSends(null);\n }\n\n async delete(id: string | string[]): Promise {\n const sends = await this.stateService.getEncryptedSends();\n if (sends == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n if (sends[id] == null) {\n return;\n }\n delete sends[id];\n } else {\n (id as string[]).forEach((i) => {\n delete sends[i];\n });\n }\n\n await this.replace(sends);\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteSend(id);\n await this.delete(id);\n }\n\n async removePasswordWithServer(id: string): Promise {\n const response = await this.apiService.putSendRemovePassword(id);\n const data = new SendData(response);\n await this.upsert(data);\n }\n\n private parseFile(send: Send, file: File, key: SymmetricCryptoKey): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsArrayBuffer(file);\n reader.onload = async (evt) => {\n try {\n const [name, data] = await this.encryptFileData(\n file.name,\n evt.target.result as ArrayBuffer,\n key\n );\n send.file.fileName = name;\n resolve(data);\n } catch (e) {\n reject(e);\n }\n };\n reader.onerror = () => {\n reject(\"Error reading file.\");\n };\n });\n }\n\n private async encryptFileData(\n fileName: string,\n data: ArrayBuffer,\n key: SymmetricCryptoKey\n ): Promise<[EncString, EncArrayBuffer]> {\n const encFileName = await this.cryptoService.encrypt(fileName, key);\n const encFileData = await this.cryptoService.encryptToBytes(data, key);\n return [encFileName, encFileData];\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { KeyConnectorService as KeyConnectorServiceAbstraction } from \"../abstractions/keyConnector.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { OrganizationService } from \"../abstractions/organization/organization.service.abstraction\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { OrganizationUserType } from \"../enums/organizationUserType\";\nimport { Utils } from \"../misc/utils\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/set-key-connector-key.request\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/key-connector-user-key.request\";\nimport { KeysRequest } from \"../models/request/keys.request\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\n\nexport class KeyConnectorService implements KeyConnectorServiceAbstraction {\n constructor(\n private stateService: StateService,\n private cryptoService: CryptoService,\n private apiService: ApiService,\n private tokenService: TokenService,\n private logService: LogService,\n private organizationService: OrganizationService,\n private cryptoFunctionService: CryptoFunctionService,\n private logoutCallback: (expired: boolean, userId?: string) => void\n ) {}\n\n setUsesKeyConnector(usesKeyConnector: boolean) {\n return this.stateService.setUsesKeyConnector(usesKeyConnector);\n }\n\n async getUsesKeyConnector(): Promise {\n return await this.stateService.getUsesKeyConnector();\n }\n\n async userNeedsMigration() {\n const loggedInUsingSso = await this.tokenService.getIsExternal();\n const requiredByOrganization = (await this.getManagingOrganization()) != null;\n const userIsNotUsingKeyConnector = !(await this.getUsesKeyConnector());\n\n return loggedInUsingSso && requiredByOrganization && userIsNotUsingKeyConnector;\n }\n\n async migrateUser() {\n const organization = await this.getManagingOrganization();\n const key = await this.cryptoService.getKey();\n const keyConnectorRequest = new KeyConnectorUserKeyRequest(key.encKeyB64);\n\n try {\n await this.apiService.postUserKeyToKeyConnector(\n organization.keyConnectorUrl,\n keyConnectorRequest\n );\n } catch (e) {\n this.handleKeyConnectorError(e);\n }\n\n await this.apiService.postConvertToKeyConnector();\n }\n\n async getAndSetKey(url: string) {\n try {\n const userKeyResponse = await this.apiService.getUserKeyFromKeyConnector(url);\n const keyArr = Utils.fromB64ToArray(userKeyResponse.key);\n const k = new SymmetricCryptoKey(keyArr);\n await this.cryptoService.setKey(k);\n } catch (e) {\n this.handleKeyConnectorError(e);\n }\n }\n\n async getManagingOrganization() {\n const orgs = await this.organizationService.getAll();\n return orgs.find(\n (o) =>\n o.keyConnectorEnabled &&\n o.type !== OrganizationUserType.Admin &&\n o.type !== OrganizationUserType.Owner &&\n !o.isProviderUser\n );\n }\n\n async convertNewSsoUserToKeyConnector(tokenResponse: IdentityTokenResponse, orgId: string) {\n const { kdf, kdfIterations, keyConnectorUrl } = tokenResponse;\n const password = await this.cryptoFunctionService.randomBytes(64);\n\n const k = await this.cryptoService.makeKey(\n Utils.fromBufferToB64(password),\n await this.tokenService.getEmail(),\n kdf,\n kdfIterations\n );\n const keyConnectorRequest = new KeyConnectorUserKeyRequest(k.encKeyB64);\n await this.cryptoService.setKey(k);\n\n const encKey = await this.cryptoService.makeEncKey(k);\n await this.cryptoService.setEncKey(encKey[1].encryptedString);\n\n const [pubKey, privKey] = await this.cryptoService.makeKeyPair();\n\n try {\n await this.apiService.postUserKeyToKeyConnector(keyConnectorUrl, keyConnectorRequest);\n } catch (e) {\n this.handleKeyConnectorError(e);\n }\n\n const keys = new KeysRequest(pubKey, privKey.encryptedString);\n const setPasswordRequest = new SetKeyConnectorKeyRequest(\n encKey[1].encryptedString,\n kdf,\n kdfIterations,\n orgId,\n keys\n );\n await this.apiService.postSetKeyConnectorKey(setPasswordRequest);\n }\n\n async setConvertAccountRequired(status: boolean) {\n await this.stateService.setConvertAccountToKeyConnector(status);\n }\n\n async getConvertAccountRequired(): Promise {\n return await this.stateService.getConvertAccountToKeyConnector();\n }\n\n async removeConvertAccountRequired() {\n await this.stateService.setConvertAccountToKeyConnector(null);\n }\n\n async clear() {\n await this.removeConvertAccountRequired();\n }\n\n private handleKeyConnectorError(e: any) {\n this.logService.error(e);\n if (this.logoutCallback != null) {\n this.logoutCallback(false);\n }\n throw new Error(\"Key Connector error\");\n }\n}\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { I18nService } from \"../../abstractions/i18n.service\";\nimport { UserVerificationApiServiceAbstraction } from \"../../abstractions/userVerification/userVerification-api.service.abstraction\";\nimport { UserVerificationService as UserVerificationServiceAbstraction } from \"../../abstractions/userVerification/userVerification.service.abstraction\";\nimport { VerificationType } from \"../../enums/verificationType\";\nimport { VerifyOTPRequest } from \"../../models/request/account/verify-otp.request\";\nimport { SecretVerificationRequest } from \"../../models/request/secret-verification.request\";\nimport { Verification } from \"../../types/verification\";\n\n/**\n * Used for general-purpose user verification throughout the app.\n * Use it to verify the input collected by UserVerificationComponent.\n */\nexport class UserVerificationService implements UserVerificationServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private userVerificationApiService: UserVerificationApiServiceAbstraction\n ) {}\n\n /**\n * Create a new request model to be used for server-side verification\n * @param verification User-supplied verification data (Master Password or OTP)\n * @param requestClass The request model to create\n * @param alreadyHashed Whether the master password is already hashed\n */\n async buildRequest(\n verification: Verification,\n requestClass?: new () => T,\n alreadyHashed?: boolean\n ) {\n this.validateInput(verification);\n\n const request =\n requestClass != null ? new requestClass() : (new SecretVerificationRequest() as T);\n\n if (verification.type === VerificationType.OTP) {\n request.otp = verification.secret;\n } else {\n request.masterPasswordHash = alreadyHashed\n ? verification.secret\n : await this.cryptoService.hashPassword(verification.secret, null);\n }\n\n return request;\n }\n\n /**\n * Used to verify the Master Password client-side, or send the OTP to the server for verification (with no other data)\n * Generally used for client-side verification only.\n * @param verification User-supplied verification data (Master Password or OTP)\n */\n async verifyUser(verification: Verification): Promise {\n this.validateInput(verification);\n\n if (verification.type === VerificationType.OTP) {\n const request = new VerifyOTPRequest(verification.secret);\n try {\n await this.userVerificationApiService.postAccountVerifyOTP(request);\n } catch (e) {\n throw new Error(this.i18nService.t(\"invalidVerificationCode\"));\n }\n } else {\n const passwordValid = await this.cryptoService.compareAndUpdateKeyHash(\n verification.secret,\n null\n );\n if (!passwordValid) {\n throw new Error(this.i18nService.t(\"invalidMasterPassword\"));\n }\n }\n return true;\n }\n\n async requestOTP() {\n await this.userVerificationApiService.postAccountRequestOTP();\n }\n\n private validateInput(verification: Verification) {\n if (verification?.secret == null || verification.secret === \"\") {\n if (verification.type === VerificationType.OTP) {\n throw new Error(this.i18nService.t(\"verificationCodeRequired\"));\n } else {\n throw new Error(this.i18nService.t(\"masterPasswordRequired\"));\n }\n }\n }\n}\n","import { BehaviorSubject, concatMap } from \"rxjs\";\n\nimport { InternalOrganizationService as InternalOrganizationServiceAbstraction } from \"../../abstractions/organization/organization.service.abstraction\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { OrganizationData } from \"../../models/data/organization.data\";\nimport { Organization } from \"../../models/domain/organization\";\n\nexport class OrganizationService implements InternalOrganizationServiceAbstraction {\n protected _organizations = new BehaviorSubject([]);\n\n organizations$ = this._organizations.asObservable();\n\n constructor(private stateService: StateService) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n concatMap(async (unlocked) => {\n if (!unlocked) {\n this._organizations.next([]);\n return;\n }\n\n const data = await this.stateService.getOrganizations();\n this.updateObservables(data);\n })\n )\n .subscribe();\n }\n\n async getAll(userId?: string): Promise {\n const organizationsMap = await this.stateService.getOrganizations({ userId: userId });\n return Object.values(organizationsMap || {}).map((o) => new Organization(o));\n }\n\n async canManageSponsorships(): Promise {\n const organizations = this._organizations.getValue();\n return organizations.some(\n (o) => o.familySponsorshipAvailable || o.familySponsorshipFriendlyName !== null\n );\n }\n\n hasOrganizations(): boolean {\n const organizations = this._organizations.getValue();\n return organizations.length > 0;\n }\n\n async upsert(organization: OrganizationData): Promise {\n let organizations = await this.stateService.getOrganizations();\n if (organizations == null) {\n organizations = {};\n }\n\n organizations[organization.id] = organization;\n\n await this.replace(organizations);\n }\n\n async delete(id: string): Promise {\n const organizations = await this.stateService.getOrganizations();\n if (organizations == null) {\n return;\n }\n\n if (organizations[id] == null) {\n return;\n }\n\n delete organizations[id];\n await this.replace(organizations);\n }\n\n get(id: string): Organization {\n const organizations = this._organizations.getValue();\n\n return organizations.find((organization) => organization.id === id);\n }\n\n /**\n * @deprecated For the CLI only\n * @param id id of the organization\n */\n async getFromState(id: string): Promise {\n const organizationsMap = await this.stateService.getOrganizations();\n const organization = organizationsMap[id];\n if (organization == null) {\n return null;\n }\n\n return new Organization(organization);\n }\n\n getByIdentifier(identifier: string): Organization {\n const organizations = this._organizations.getValue();\n\n return organizations.find((organization) => organization.identifier === identifier);\n }\n\n async replace(organizations: { [id: string]: OrganizationData }) {\n await this.stateService.setOrganizations(organizations);\n this.updateObservables(organizations);\n }\n\n private updateObservables(organizationsMap: { [id: string]: OrganizationData }) {\n const organizations = Object.values(organizationsMap || {}).map((o) => new Organization(o));\n this._organizations.next(organizations);\n }\n}\n","import { ProviderService as ProviderServiceAbstraction } from \"../abstractions/provider.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { ProviderData } from \"../models/data/provider.data\";\nimport { Provider } from \"../models/domain/provider\";\n\nexport class ProviderService implements ProviderServiceAbstraction {\n constructor(private stateService: StateService) {}\n\n async get(id: string): Promise {\n const providers = await this.stateService.getProviders();\n // eslint-disable-next-line\n if (providers == null || !providers.hasOwnProperty(id)) {\n return null;\n }\n\n return new Provider(providers[id]);\n }\n\n async getAll(): Promise {\n const providers = await this.stateService.getProviders();\n const response: Provider[] = [];\n for (const id in providers) {\n // eslint-disable-next-line\n if (providers.hasOwnProperty(id)) {\n response.push(new Provider(providers[id]));\n }\n }\n return response;\n }\n\n async save(providers: { [id: string]: ProviderData }) {\n await this.stateService.setProviders(providers);\n }\n}\n","import { UntypedFormGroup, ValidationErrors } from \"@angular/forms\";\n\nimport {\n FormGroupControls,\n FormValidationErrorsService as FormValidationErrorsAbstraction,\n AllValidationErrors,\n} from \"../abstractions/formValidationErrors.service\";\n\nexport class FormValidationErrorsService implements FormValidationErrorsAbstraction {\n getFormValidationErrors(controls: FormGroupControls): AllValidationErrors[] {\n let errors: AllValidationErrors[] = [];\n Object.keys(controls).forEach((key) => {\n const control = controls[key];\n if (control instanceof UntypedFormGroup) {\n errors = errors.concat(this.getFormValidationErrors(control.controls));\n }\n\n const controlErrors: ValidationErrors = controls[key].errors;\n if (controlErrors !== null) {\n Object.keys(controlErrors).forEach((keyError) => {\n errors.push({\n controlName: key,\n errorName: keyError,\n });\n });\n }\n });\n\n return errors;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { UserVerificationApiServiceAbstraction } from \"../../abstractions/userVerification/userVerification-api.service.abstraction\";\nimport { VerifyOTPRequest } from \"../../models/request/account/verify-otp.request\";\n\nexport class UserVerificationApiService implements UserVerificationApiServiceAbstraction {\n constructor(private apiService: ApiService) {}\n\n postAccountVerifyOTP(request: VerifyOTPRequest): Promise {\n return this.apiService.send(\"POST\", \"/accounts/verify-otp\", request, true, false);\n }\n async postAccountRequestOTP(): Promise {\n return this.apiService.send(\"POST\", \"/accounts/request-otp\", null, true, false);\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { OrganizationApiServiceAbstraction } from \"../../abstractions/organization/organization-api.service.abstraction\";\nimport { SyncService } from \"../../abstractions/sync/sync.service.abstraction\";\nimport { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\nimport { ImportDirectoryRequest } from \"../../models/request/import-directory.request\";\nimport { OrganizationApiKeyRequest } from \"../../models/request/organization-api-key.request\";\nimport { OrganizationCreateRequest } from \"../../models/request/organization-create.request\";\nimport { OrganizationKeysRequest } from \"../../models/request/organization-keys.request\";\nimport { OrganizationSubscriptionUpdateRequest } from \"../../models/request/organization-subscription-update.request\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../../models/request/organization-tax-info-update.request\";\nimport { OrganizationUpdateRequest } from \"../../models/request/organization-update.request\";\nimport { OrganizationUpgradeRequest } from \"../../models/request/organization-upgrade.request\";\nimport { OrganizationSsoRequest } from \"../../models/request/organization/organization-sso.request\";\nimport { PaymentRequest } from \"../../models/request/payment.request\";\nimport { SeatRequest } from \"../../models/request/seat.request\";\nimport { SecretVerificationRequest } from \"../../models/request/secret-verification.request\";\nimport { StorageRequest } from \"../../models/request/storage.request\";\nimport { VerifyBankRequest } from \"../../models/request/verify-bank.request\";\nimport { ApiKeyResponse } from \"../../models/response/api-key.response\";\nimport { BillingResponse } from \"../../models/response/billing.response\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { OrganizationApiKeyInformationResponse } from \"../../models/response/organization-api-key-information.response\";\nimport { OrganizationAutoEnrollStatusResponse } from \"../../models/response/organization-auto-enroll-status.response\";\nimport { OrganizationKeysResponse } from \"../../models/response/organization-keys.response\";\nimport { OrganizationSubscriptionResponse } from \"../../models/response/organization-subscription.response\";\nimport { OrganizationResponse } from \"../../models/response/organization.response\";\nimport { OrganizationSsoResponse } from \"../../models/response/organization/organization-sso.response\";\nimport { PaymentResponse } from \"../../models/response/payment.response\";\nimport { TaxInfoResponse } from \"../../models/response/tax-info.response\";\n\nexport class OrganizationApiService implements OrganizationApiServiceAbstraction {\n constructor(private apiService: ApiService, private syncService: SyncService) {}\n\n async get(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/organizations/\" + id, null, true, true);\n return new OrganizationResponse(r);\n }\n\n async getBilling(id: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + id + \"/billing\",\n null,\n true,\n true\n );\n return new BillingResponse(r);\n }\n\n async getSubscription(id: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + id + \"/subscription\",\n null,\n true,\n true\n );\n return new OrganizationSubscriptionResponse(r);\n }\n\n async getLicense(id: string, installationId: string): Promise {\n return this.apiService.send(\n \"GET\",\n \"/organizations/\" + id + \"/license?installationId=\" + installationId,\n null,\n true,\n true\n );\n }\n\n async getAutoEnrollStatus(identifier: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + identifier + \"/auto-enroll-status\",\n null,\n true,\n true\n );\n return new OrganizationAutoEnrollStatusResponse(r);\n }\n\n async create(request: OrganizationCreateRequest): Promise {\n const r = await this.apiService.send(\"POST\", \"/organizations\", request, true, true);\n // Forcing a sync will notify organization service that they need to repull\n await this.syncService.fullSync(true);\n return new OrganizationResponse(r);\n }\n\n async createLicense(data: FormData): Promise {\n const r = await this.apiService.send(\"POST\", \"/organizations/license\", data, true, true);\n return new OrganizationResponse(r);\n }\n\n async save(id: string, request: OrganizationUpdateRequest): Promise {\n const r = await this.apiService.send(\"PUT\", \"/organizations/\" + id, request, true, true);\n const data = new OrganizationResponse(r);\n await this.syncService.fullSync(true);\n return data;\n }\n\n async updatePayment(id: string, request: PaymentRequest): Promise {\n return this.apiService.send(\"POST\", \"/organizations/\" + id + \"/payment\", request, true, false);\n }\n\n async upgrade(id: string, request: OrganizationUpgradeRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/upgrade\",\n request,\n true,\n true\n );\n return new PaymentResponse(r);\n }\n\n async updateSubscription(\n id: string,\n request: OrganizationSubscriptionUpdateRequest\n ): Promise {\n return this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/subscription\",\n request,\n true,\n false\n );\n }\n\n async updateSeats(id: string, request: SeatRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/seat\",\n request,\n true,\n true\n );\n return new PaymentResponse(r);\n }\n\n async updateStorage(id: string, request: StorageRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/storage\",\n request,\n true,\n true\n );\n return new PaymentResponse(r);\n }\n\n async verifyBank(id: string, request: VerifyBankRequest): Promise {\n await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/verify-bank\",\n request,\n true,\n false\n );\n }\n\n async cancel(id: string): Promise {\n return this.apiService.send(\"POST\", \"/organizations/\" + id + \"/cancel\", null, true, false);\n }\n\n async reinstate(id: string): Promise {\n return this.apiService.send(\"POST\", \"/organizations/\" + id + \"/reinstate\", null, true, false);\n }\n\n async leave(id: string): Promise {\n await this.apiService.send(\"POST\", \"/organizations/\" + id + \"/leave\", null, true, false);\n await this.syncService.fullSync(true);\n }\n\n async delete(id: string, request: SecretVerificationRequest): Promise {\n await this.apiService.send(\"DELETE\", \"/organizations/\" + id, request, true, false);\n await this.syncService.fullSync(true);\n }\n\n async updateLicense(id: string, data: FormData): Promise {\n await this.apiService.send(\"POST\", \"/organizations/\" + id + \"/license\", data, true, false);\n }\n\n async importDirectory(organizationId: string, request: ImportDirectoryRequest): Promise {\n return this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/import\",\n request,\n true,\n false\n );\n }\n\n async getOrCreateApiKey(id: string, request: OrganizationApiKeyRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/api-key\",\n request,\n true,\n true\n );\n return new ApiKeyResponse(r);\n }\n\n async getApiKeyInformation(\n id: string,\n organizationApiKeyType: OrganizationApiKeyType = null\n ): Promise> {\n const uri =\n organizationApiKeyType === null\n ? \"/organizations/\" + id + \"/api-key-information\"\n : \"/organizations/\" + id + \"/api-key-information/\" + organizationApiKeyType;\n const r = await this.apiService.send(\"GET\", uri, null, true, true);\n return new ListResponse(r, OrganizationApiKeyInformationResponse);\n }\n\n async rotateApiKey(id: string, request: OrganizationApiKeyRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/rotate-api-key\",\n request,\n true,\n true\n );\n return new ApiKeyResponse(r);\n }\n\n async getTaxInfo(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/organizations/\" + id + \"/tax\", null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async updateTaxInfo(id: string, request: OrganizationTaxInfoUpdateRequest): Promise {\n // Can't broadcast anything because the response doesn't have content\n return this.apiService.send(\"PUT\", \"/organizations/\" + id + \"/tax\", request, true, false);\n }\n\n async getKeys(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/organizations/\" + id + \"/keys\", null, true, true);\n return new OrganizationKeysResponse(r);\n }\n\n async updateKeys(\n id: string,\n request: OrganizationKeysRequest\n ): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/keys\",\n request,\n true,\n true\n );\n // Not broadcasting anything because data on this response doesn't correspond to `Organization`\n return new OrganizationKeysResponse(r);\n }\n\n async getSso(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/organizations/\" + id + \"/sso\", null, true, true);\n return new OrganizationSsoResponse(r);\n }\n\n async updateSso(id: string, request: OrganizationSsoRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/sso\",\n request,\n true,\n true\n );\n // Not broadcasting anything because data on this response doesn't correspond to `Organization`\n return new OrganizationSsoResponse(r);\n }\n}\n","import { Subject } from \"rxjs\";\n\nimport { SyncNotifierService as SyncNotifierServiceAbstraction } from \"../../abstractions/sync/syncNotifier.service.abstraction\";\nimport { SyncEventArgs } from \"../../types/syncEventArgs\";\n\n/**\n * This class should most likely have 0 dependencies because it will hopefully\n * be rolled into SyncService once upon a time.\n */\nexport class SyncNotifierService implements SyncNotifierServiceAbstraction {\n private _sync = new Subject();\n\n sync$ = this._sync.asObservable();\n\n next(event: SyncEventArgs): void {\n this._sync.next(event);\n }\n}\n","import { Observable } from \"rxjs\";\n\nimport { ServerConfig } from \"./server-config\";\n\nexport abstract class ConfigServiceAbstraction {\n serverConfig$: Observable;\n}\n","import { BehaviorSubject, concatMap, map, switchMap, timer, EMPTY } from \"rxjs\";\n\nimport { ConfigApiServiceAbstraction } from \"../../abstractions/config/config-api.service.abstraction\";\nimport { ConfigServiceAbstraction } from \"../../abstractions/config/config.service.abstraction\";\nimport { ServerConfig } from \"../../abstractions/config/server-config\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { ServerConfigData } from \"../../models/data/server-config.data\";\n\nexport class ConfigService implements ConfigServiceAbstraction {\n private _serverConfig = new BehaviorSubject(null);\n serverConfig$ = this._serverConfig.asObservable();\n\n constructor(\n private stateService: StateService,\n private configApiService: ConfigApiServiceAbstraction\n ) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n switchMap((unlocked) => {\n if (!unlocked) {\n this._serverConfig.next(null);\n return EMPTY;\n }\n\n // Re-fetch the server config every hour\n return timer(0, 3600 * 1000).pipe(map(() => unlocked));\n }),\n concatMap(async (unlocked) => {\n return unlocked ? await this.buildServerConfig() : null;\n })\n )\n .subscribe((serverConfig) => {\n this._serverConfig.next(serverConfig);\n });\n }\n\n private async buildServerConfig(): Promise {\n const data = await this.stateService.getServerConfig();\n const domain = data ? new ServerConfig(data) : null;\n\n if (domain == null || !domain.isValid() || domain.expiresSoon()) {\n const value = await this.fetchServerConfig();\n return value ?? domain;\n }\n\n return domain;\n }\n\n private async fetchServerConfig(): Promise {\n try {\n const response = await this.configApiService.get();\n\n if (response != null) {\n const data = new ServerConfigData(response);\n await this.stateService.setServerConfig(data);\n return new ServerConfig(data);\n }\n } catch {\n return null;\n }\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { ConfigApiServiceAbstraction as ConfigApiServiceAbstraction } from \"../../abstractions/config/config-api.service.abstraction\";\nimport { ServerConfigResponse } from \"../../models/response/server-config.response\";\n\nexport class ConfigApiService implements ConfigApiServiceAbstraction {\n constructor(private apiService: ApiService) {}\n\n async get(): Promise {\n const r = await this.apiService.send(\"GET\", \"/config\", null, true, true);\n return new ServerConfigResponse(r);\n }\n}\n","import { I18nService } from \"../abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { ValidationService as ValidationServiceAbstraction } from \"../abstractions/validation.service\";\nimport { ErrorResponse } from \"../models/response/error.response\";\n\nexport class ValidationService implements ValidationServiceAbstraction {\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n showError(data: any): string[] {\n const defaultErrorMessage = this.i18nService.t(\"unexpectedError\");\n let errors: string[] = [];\n\n if (data != null && typeof data === \"string\") {\n errors.push(data);\n } else if (data == null || typeof data !== \"object\") {\n errors.push(defaultErrorMessage);\n } else if (data.validationErrors != null) {\n errors = errors.concat((data as ErrorResponse).getAllMessages());\n } else {\n errors.push(data.message ? data.message : defaultErrorMessage);\n }\n\n if (errors.length === 1) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), errors[0]);\n } else if (errors.length > 1) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), errors, {\n timeout: 5000 * errors.length,\n });\n }\n\n return errors;\n }\n}\n","import {\n AbstractStorageService,\n MemoryStorageServiceInterface,\n} from \"../abstractions/storage.service\";\n\nexport class MemoryStorageService\n extends AbstractStorageService\n implements MemoryStorageServiceInterface\n{\n private store = new Map();\n\n get(key: string): Promise {\n if (this.store.has(key)) {\n const obj = this.store.get(key);\n return Promise.resolve(obj as T);\n }\n return Promise.resolve(null);\n }\n\n async has(key: string): Promise {\n return (await this.get(key)) != null;\n }\n\n save(key: string, obj: any): Promise {\n if (obj == null) {\n return this.remove(key);\n }\n this.store.set(key, obj);\n return Promise.resolve();\n }\n\n remove(key: string): Promise {\n this.store.delete(key);\n return Promise.resolve();\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\n\n@Injectable()\nexport class BroadcasterMessagingService implements MessagingService {\n constructor(private broadcasterService: BroadcasterService) {}\n\n send(subscriber: string, arg: any = {}) {\n const message = Object.assign({}, { command: subscriber }, arg);\n this.broadcasterService.send(message);\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { AbstractStorageService } from \"@bitwarden/common/abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"@bitwarden/common/enums/htmlStorageLocation\";\nimport { StorageOptions } from \"@bitwarden/common/models/domain/storage-options\";\n\n@Injectable()\nexport class HtmlStorageService implements AbstractStorageService {\n get defaultOptions(): StorageOptions {\n return { htmlStorageLocation: HtmlStorageLocation.Session };\n }\n\n get(key: string, options: StorageOptions = this.defaultOptions): Promise {\n let json: string = null;\n switch (options.htmlStorageLocation) {\n case HtmlStorageLocation.Local:\n json = window.localStorage.getItem(key);\n break;\n case HtmlStorageLocation.Session:\n default:\n json = window.sessionStorage.getItem(key);\n break;\n }\n\n if (json != null) {\n const obj = JSON.parse(json);\n return Promise.resolve(obj as T);\n }\n return Promise.resolve(null);\n }\n\n async has(key: string, options: StorageOptions = this.defaultOptions): Promise {\n return (await this.get(key, options)) != null;\n }\n\n save(key: string, obj: any, options: StorageOptions = this.defaultOptions): Promise {\n if (obj == null) {\n return this.remove(key, options);\n }\n\n if (obj instanceof Set) {\n obj = Array.from(obj);\n }\n\n const json = JSON.stringify(obj);\n switch (options.htmlStorageLocation) {\n case HtmlStorageLocation.Local:\n window.localStorage.setItem(key, json);\n break;\n case HtmlStorageLocation.Session:\n default:\n window.sessionStorage.setItem(key, json);\n break;\n }\n return Promise.resolve();\n }\n\n remove(key: string, options: StorageOptions = this.defaultOptions): Promise {\n switch (options.htmlStorageLocation) {\n case HtmlStorageLocation.Local:\n window.localStorage.removeItem(key);\n break;\n case HtmlStorageLocation.Session:\n default:\n window.sessionStorage.removeItem(key);\n break;\n }\n return Promise.resolve();\n }\n}\n","import { CryptoService } from \"../abstractions/crypto.service\";\nimport { EncryptService } from \"../abstractions/encrypt.service\";\n\nexport class ContainerService {\n constructor(private cryptoService: CryptoService, private encryptService: EncryptService) {}\n\n attachToGlobal(global: any) {\n if (!global.bitwardenContainerService) {\n global.bitwardenContainerService = this;\n }\n }\n\n /**\n * @throws Will throw if CryptoService was not instantiated and provided to the ContainerService constructor\n */\n getCryptoService(): CryptoService {\n if (this.cryptoService == null) {\n throw new Error(\"ContainerService.cryptoService not initialized.\");\n }\n return this.cryptoService;\n }\n\n /**\n * @throws Will throw if EncryptService was not instantiated and provided to the ContainerService constructor\n */\n getEncryptService(): EncryptService {\n if (this.encryptService == null) {\n throw new Error(\"ContainerService.encryptService not initialized.\");\n }\n return this.encryptService;\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\n\nimport { WINDOW } from \"@bitwarden/angular/services/injection-tokens\";\nimport { AbstractThemingService } from \"@bitwarden/angular/services/theming/theming.service.abstraction\";\nimport { CryptoService as CryptoServiceAbstraction } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EncryptService } from \"@bitwarden/common/abstractions/encrypt.service\";\nimport {\n EnvironmentService as EnvironmentServiceAbstraction,\n Urls,\n} from \"@bitwarden/common/abstractions/environment.service\";\nimport { EventService as EventLoggingServiceAbstraction } from \"@bitwarden/common/abstractions/event.service\";\nimport { I18nService as I18nServiceAbstraction } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"@bitwarden/common/abstractions/notifications.service\";\nimport { StateService as StateServiceAbstraction } from \"@bitwarden/common/abstractions/state.service\";\nimport { TwoFactorService as TwoFactorServiceAbstraction } from \"@bitwarden/common/abstractions/twoFactor.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { ContainerService } from \"@bitwarden/common/services/container.service\";\nimport { EventService as EventLoggingService } from \"@bitwarden/common/services/event.service\";\nimport { VaultTimeoutService as VaultTimeoutService } from \"@bitwarden/common/services/vaultTimeout/vaultTimeout.service\";\n\nimport { I18nService } from \"./i18n.service\";\n\n@Injectable()\nexport class InitService {\n constructor(\n @Inject(WINDOW) private win: Window,\n private environmentService: EnvironmentServiceAbstraction,\n private notificationsService: NotificationsServiceAbstraction,\n private vaultTimeoutService: VaultTimeoutServiceAbstraction,\n private i18nService: I18nServiceAbstraction,\n private eventLoggingService: EventLoggingServiceAbstraction,\n private twoFactorService: TwoFactorServiceAbstraction,\n private stateService: StateServiceAbstraction,\n private cryptoService: CryptoServiceAbstraction,\n private themingService: AbstractThemingService,\n private encryptService: EncryptService\n ) {}\n\n init() {\n return async () => {\n await this.stateService.init();\n\n const urls = process.env.URLS as Urls;\n urls.base ??= this.win.location.origin;\n this.environmentService.setUrls(urls);\n\n setTimeout(() => this.notificationsService.init(), 3000);\n (this.vaultTimeoutService as VaultTimeoutService).init(true);\n const locale = await this.stateService.getLocale();\n await (this.i18nService as I18nService).init(locale);\n (this.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 { FileDownloadRequest } from \"./fileDownloadRequest\";\n\nexport class FileDownloadBuilder {\n get blobOptions(): any {\n const options = this._request.blobOptions ?? {};\n if (options.type == null) {\n options.type = this.fileType;\n }\n return options;\n }\n\n get blob(): Blob {\n if (this.blobOptions != null) {\n return new Blob([this._request.blobData], this.blobOptions);\n } else {\n return new Blob([this._request.blobData]);\n }\n }\n\n get downloadMethod(): \"save\" | \"open\" {\n if (this._request.downloadMethod != null) {\n return this._request.downloadMethod;\n }\n return this.fileType != \"application/pdf\" ? \"save\" : \"open\";\n }\n\n private get fileType() {\n const fileNameLower = this._request.fileName.toLowerCase();\n if (fileNameLower.endsWith(\".pdf\")) {\n return \"application/pdf\";\n } else if (fileNameLower.endsWith(\".xlsx\")) {\n return \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n } else if (fileNameLower.endsWith(\".docx\")) {\n return \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\n } else if (fileNameLower.endsWith(\".pptx\")) {\n return \"application/vnd.openxmlformats-officedocument.presentationml.presentation\";\n } else if (fileNameLower.endsWith(\".csv\")) {\n return \"text/csv\";\n } else if (fileNameLower.endsWith(\".png\")) {\n return \"image/png\";\n } else if (fileNameLower.endsWith(\".jpg\") || fileNameLower.endsWith(\".jpeg\")) {\n return \"image/jpeg\";\n } else if (fileNameLower.endsWith(\".gif\")) {\n return \"image/gif\";\n }\n return null;\n }\n\n constructor(private readonly _request: FileDownloadRequest) {}\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { FileDownloadBuilder } from \"@bitwarden/common/abstractions/fileDownload/fileDownloadBuilder\";\nimport { FileDownloadRequest } from \"@bitwarden/common/abstractions/fileDownload/fileDownloadRequest\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Injectable()\nexport class WebFileDownloadService implements FileDownloadService {\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n download(request: FileDownloadRequest): void {\n const builder = new FileDownloadBuilder(request);\n const a = window.document.createElement(\"a\");\n if (builder.downloadMethod === \"save\") {\n a.download = request.fileName;\n } else if (!this.platformUtilsService.isSafari()) {\n a.target = \"_blank\";\n }\n a.href = URL.createObjectURL(builder.blob);\n a.style.position = \"fixed\";\n window.document.body.appendChild(a);\n a.click();\n window.document.body.removeChild(a);\n }\n}\n","export enum ClientType {\n Web = \"web\",\n Browser = \"browser\",\n Desktop = \"desktop\",\n Mobile = \"mobile\",\n Cli = \"cli\",\n DirectoryConnector = \"connector\",\n}\n","import { Injectable } from \"@angular/core\";\nimport Swal, { SweetAlertIcon } from \"sweetalert2\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ClientType } from \"@bitwarden/common/enums/clientType\";\nimport { DeviceType } from \"@bitwarden/common/enums/deviceType\";\n\n@Injectable()\nexport class WebPlatformUtilsService implements PlatformUtilsService {\n private browserCache: DeviceType = null;\n\n constructor(\n private i18nService: I18nService,\n private messagingService: MessagingService,\n private logService: LogService\n ) {}\n\n getDevice(): DeviceType {\n if (this.browserCache != null) {\n return this.browserCache;\n }\n\n if (\n navigator.userAgent.indexOf(\" Firefox/\") !== -1 ||\n navigator.userAgent.indexOf(\" Gecko/\") !== -1\n ) {\n this.browserCache = DeviceType.FirefoxBrowser;\n } else if (navigator.userAgent.indexOf(\" OPR/\") >= 0) {\n this.browserCache = DeviceType.OperaBrowser;\n } else if (navigator.userAgent.indexOf(\" Edg/\") !== -1) {\n this.browserCache = DeviceType.EdgeBrowser;\n } else if (navigator.userAgent.indexOf(\" Vivaldi/\") !== -1) {\n this.browserCache = DeviceType.VivaldiBrowser;\n } else if (\n navigator.userAgent.indexOf(\" Safari/\") !== -1 &&\n navigator.userAgent.indexOf(\"Chrome\") === -1\n ) {\n this.browserCache = DeviceType.SafariBrowser;\n } else if ((window as any).chrome && navigator.userAgent.indexOf(\" Chrome/\") !== -1) {\n this.browserCache = DeviceType.ChromeBrowser;\n } else if (navigator.userAgent.indexOf(\" Trident/\") !== -1) {\n this.browserCache = DeviceType.IEBrowser;\n } else {\n this.browserCache = DeviceType.UnknownBrowser;\n }\n\n return this.browserCache;\n }\n\n getDeviceString(): string {\n const device = DeviceType[this.getDevice()].toLowerCase();\n return device.replace(\"browser\", \"\");\n }\n\n getClientType() {\n return ClientType.Web;\n }\n\n isFirefox(): boolean {\n return this.getDevice() === DeviceType.FirefoxBrowser;\n }\n\n isChrome(): boolean {\n return this.getDevice() === DeviceType.ChromeBrowser;\n }\n\n isEdge(): boolean {\n return this.getDevice() === DeviceType.EdgeBrowser;\n }\n\n isOpera(): boolean {\n return this.getDevice() === DeviceType.OperaBrowser;\n }\n\n isVivaldi(): boolean {\n return this.getDevice() === DeviceType.VivaldiBrowser;\n }\n\n isSafari(): boolean {\n return this.getDevice() === DeviceType.SafariBrowser;\n }\n\n isMacAppStore(): boolean {\n return false;\n }\n\n isViewOpen(): Promise {\n return Promise.resolve(false);\n }\n\n launchUri(uri: string, options?: any): void {\n const a = document.createElement(\"a\");\n a.href = uri;\n if (options == null || !options.sameWindow) {\n a.target = \"_blank\";\n a.rel = \"noreferrer noopener\";\n }\n a.classList.add(\"d-none\");\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n\n getApplicationVersion(): Promise {\n return Promise.resolve(process.env.APPLICATION_VERSION || \"-\");\n }\n\n async getApplicationVersionNumber(): Promise {\n return (await this.getApplicationVersion()).split(RegExp(\"[+|-]\"))[0].trim();\n }\n\n supportsWebAuthn(win: Window): boolean {\n return typeof PublicKeyCredential !== \"undefined\";\n }\n\n supportsDuo(): boolean {\n return true;\n }\n\n showToast(\n type: \"error\" | \"success\" | \"warning\" | \"info\",\n title: string,\n text: string | string[],\n options?: any\n ): void {\n this.messagingService.send(\"showToast\", {\n text: text,\n title: title,\n type: type,\n options: options,\n });\n }\n\n async showDialog(\n body: string,\n title?: string,\n confirmText?: string,\n cancelText?: string,\n type?: string,\n bodyIsHtml = false\n ) {\n let iconClasses: string = null;\n if (type != null) {\n // If you add custom types to this part, the type to SweetAlertIcon cast below needs to be changed.\n switch (type) {\n case \"success\":\n iconClasses = \"bwi-check text-success\";\n break;\n case \"warning\":\n iconClasses = \"bwi-exclamation-triangle text-warning\";\n break;\n case \"error\":\n iconClasses = \"bwi-error text-danger\";\n break;\n case \"info\":\n iconClasses = \"bwi-info-circle text-info\";\n break;\n default:\n break;\n }\n }\n\n const bootstrapModal = document.querySelector(\"div.modal\");\n if (bootstrapModal != null) {\n bootstrapModal.removeAttribute(\"tabindex\");\n }\n\n const iconHtmlStr =\n iconClasses != null ? `` : undefined;\n const confirmed = await Swal.fire({\n heightAuto: false,\n buttonsStyling: false,\n icon: type as SweetAlertIcon, // required to be any of the SweetAlertIcons to output the iconHtml.\n iconHtml: iconHtmlStr,\n text: bodyIsHtml ? null : body,\n html: bodyIsHtml ? body : null,\n titleText: title,\n showCancelButton: cancelText != null,\n cancelButtonText: cancelText,\n showConfirmButton: true,\n confirmButtonText: confirmText == null ? this.i18nService.t(\"ok\") : confirmText,\n });\n\n if (bootstrapModal != null) {\n bootstrapModal.setAttribute(\"tabindex\", \"-1\");\n }\n\n return confirmed.value;\n }\n\n isDev(): boolean {\n return process.env.NODE_ENV === \"development\";\n }\n\n isSelfHost(): boolean {\n return process.env.ENV.toString() === \"selfhosted\";\n }\n\n copyToClipboard(text: string, options?: any): void | boolean {\n let win = window;\n let doc = window.document;\n if (options && (options.window || options.win)) {\n win = options.window || options.win;\n doc = win.document;\n } else if (options && options.doc) {\n doc = options.doc;\n }\n if ((win as any).clipboardData && (win as any).clipboardData.setData) {\n // IE specific code path to prevent textarea being shown while dialog is visible.\n (win as any).clipboardData.setData(\"Text\", text);\n } else if (doc.queryCommandSupported && doc.queryCommandSupported(\"copy\")) {\n const textarea = doc.createElement(\"textarea\");\n textarea.textContent = text;\n // Prevent scrolling to bottom of page in MS Edge.\n textarea.style.position = \"fixed\";\n let copyEl = doc.body;\n // For some reason copy command won't work when modal is open if appending to body\n if (doc.body.classList.contains(\"modal-open\")) {\n copyEl = doc.body.querySelector(\".modal\");\n }\n copyEl.appendChild(textarea);\n textarea.select();\n let success = false;\n try {\n // Security exception may be thrown by some browsers.\n success = doc.execCommand(\"copy\");\n if (!success) {\n this.logService.debug(\"Copy command unsupported or disabled.\");\n }\n } catch (e) {\n // eslint-disable-next-line\n console.warn(\"Copy to clipboard failed.\", e);\n } finally {\n copyEl.removeChild(textarea);\n }\n return success;\n }\n }\n\n readFromClipboard(options?: any): Promise {\n throw new Error(\"Cannot read from clipboard on web.\");\n }\n\n supportsBiometric() {\n return Promise.resolve(false);\n }\n\n authenticateBiometric() {\n return Promise.resolve(false);\n }\n\n supportsSecureStorage() {\n return false;\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { APP_INITIALIZER, NgModule, Optional, SkipSelf } from \"@angular/core\";\n\nimport {\n SECURE_STORAGE,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n LOCALES_DIRECTORY,\n SYSTEM_LANGUAGE,\n MEMORY_STORAGE,\n} from \"@bitwarden/angular/services/injection-tokens\";\nimport { JslibServicesModule } from \"@bitwarden/angular/services/jslib-services.module\";\nimport { ModalService as ModalServiceAbstraction } from \"@bitwarden/angular/services/modal.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService as I18nServiceAbstraction } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LoginService as LoginServiceAbstraction } from \"@bitwarden/common/abstractions/login.service\";\nimport { MessagingService as MessagingServiceAbstraction } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService as BaseStateServiceAbstraction } from \"@bitwarden/common/abstractions/state.service\";\nimport { StateMigrationService as StateMigrationServiceAbstraction } from \"@bitwarden/common/abstractions/stateMigration.service\";\nimport { AbstractStorageService } from \"@bitwarden/common/abstractions/storage.service\";\nimport { StateFactory } from \"@bitwarden/common/factories/stateFactory\";\nimport { LoginService } from \"@bitwarden/common/services/login.service\";\nimport { MemoryStorageService } from \"@bitwarden/common/services/memoryStorage.service\";\n\nimport { BroadcasterMessagingService } from \"./broadcaster-messaging.service\";\nimport { EventService } from \"./event.service\";\nimport { HtmlStorageService } from \"./html-storage.service\";\nimport { I18nService } from \"./i18n.service\";\nimport { InitService } from \"./init.service\";\nimport { ModalService } from \"./modal.service\";\nimport { PasswordRepromptService } from \"./password-reprompt.service\";\nimport { PolicyListService } from \"./policy-list.service\";\nimport { RouterService } from \"./router.service\";\nimport { Account, GlobalState, StateService } from \"./state\";\nimport { StateMigrationService } from \"./state-migration.service\";\nimport { WebFileDownloadService } from \"./web-file-download.service\";\nimport { WebPlatformUtilsService } from \"./web-platform-utils.service\";\n\n@NgModule({\n declarations: [],\n imports: [CommonModule, JslibServicesModule],\n providers: [\n InitService,\n RouterService,\n EventService,\n PolicyListService,\n {\n provide: APP_INITIALIZER,\n useFactory: (initService: InitService) => initService.init(),\n deps: [InitService],\n multi: true,\n },\n {\n provide: STATE_FACTORY,\n useValue: new StateFactory(GlobalState, Account),\n },\n {\n provide: STATE_SERVICE_USE_CACHE,\n useValue: false,\n },\n {\n provide: I18nServiceAbstraction,\n useClass: I18nService,\n deps: [SYSTEM_LANGUAGE, LOCALES_DIRECTORY],\n },\n { provide: AbstractStorageService, useClass: HtmlStorageService },\n {\n provide: SECURE_STORAGE,\n // TODO: platformUtilsService.isDev has a helper for this, but using that service here results in a circular dependency.\n // We have a tech debt item in the backlog to break up platformUtilsService, but in the meantime simply checking the environement here is less cumbersome.\n useClass: process.env.NODE_ENV === \"development\" ? HtmlStorageService : MemoryStorageService,\n },\n {\n provide: MEMORY_STORAGE,\n useClass: MemoryStorageService,\n },\n {\n provide: PlatformUtilsServiceAbstraction,\n useClass: WebPlatformUtilsService,\n },\n { provide: MessagingServiceAbstraction, useClass: BroadcasterMessagingService },\n { provide: ModalServiceAbstraction, useClass: ModalService },\n {\n provide: StateMigrationServiceAbstraction,\n useClass: StateMigrationService,\n deps: [AbstractStorageService, SECURE_STORAGE, STATE_FACTORY],\n },\n StateService,\n {\n provide: BaseStateServiceAbstraction,\n useExisting: StateService,\n },\n {\n provide: PasswordRepromptServiceAbstraction,\n useClass: PasswordRepromptService,\n },\n {\n provide: FileDownloadService,\n useClass: WebFileDownloadService,\n },\n {\n provide: LoginServiceAbstraction,\n useClass: LoginService,\n },\n ],\n})\nexport class CoreModule {\n constructor(@Optional() @SkipSelf() parentModule?: CoreModule) {\n if (parentModule) {\n throw new Error(\"CoreModule is already loaded. Import it in the AppModule only\");\n }\n }\n}\n","import {\n flagEnabled as baseFlagEnabled,\n devFlagEnabled as baseDevFlagEnabled,\n devFlagValue as baseDevFlagValue,\n SharedFlags,\n SharedDevFlags,\n} from \"@bitwarden/common/misc/flags\";\n\n// required to avoid linting errors when there are no flags\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport type Flags = {\n showTrial?: boolean;\n showPasswordless?: boolean;\n} & SharedFlags;\n\n// required to avoid linting errors when there are no flags\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport type DevFlags = {} & SharedDevFlags;\n\nexport function flagEnabled(flag: keyof Flags): boolean {\n return baseFlagEnabled(flag);\n}\n\nexport function devFlagEnabled(flag: keyof DevFlags) {\n return baseDevFlagEnabled(flag);\n}\n\nexport function devFlagValue(flag: keyof DevFlags) {\n return baseDevFlagValue(flag);\n}\n","import { ThemeType } from \"@bitwarden/common/enums/themeType\";\nimport { GlobalState as BaseGlobalState } from \"@bitwarden/common/models/domain/global-state\";\n\nexport class GlobalState extends BaseGlobalState {\n theme?: ThemeType = ThemeType.Light;\n rememberEmail = true;\n}\n","import { I18nService as BaseI18nService } from \"@bitwarden/common/services/i18n.service\";\n\nexport class I18nService extends BaseI18nService {\n constructor(systemLanguage: string, localesDirectory: string) {\n super(systemLanguage || \"en-US\", localesDirectory, async (formattedLocale: string) => {\n const filePath =\n this.localesDirectory +\n \"/\" +\n formattedLocale +\n \"/messages.json?cache=\" +\n process.env.CACHE_TAG;\n const localesResult = await fetch(filePath);\n const locales = await localesResult.json();\n return locales;\n });\n\n // Please leave 'en' where it is, as it's our fallback language in case no translation can be found\n this.supportedTranslationLocales = [\n \"en\",\n \"af\",\n \"ar\",\n \"az\",\n \"be\",\n \"bg\",\n \"bn\",\n \"bs\",\n \"ca\",\n \"cs\",\n \"da\",\n \"de\",\n \"el\",\n \"en-GB\",\n \"en-IN\",\n \"eo\",\n \"es\",\n \"et\",\n \"eu\",\n \"fi\",\n \"fil\",\n \"fr\",\n \"he\",\n \"hi\",\n \"hr\",\n \"hu\",\n \"id\",\n \"it\",\n \"ja\",\n \"ka\",\n \"km\",\n \"kn\",\n \"ko\",\n \"lv\",\n \"ml\",\n \"nb\",\n \"nl\",\n \"nn\",\n \"pl\",\n \"pt-PT\",\n \"pt-BR\",\n \"ro\",\n \"ru\",\n \"si\",\n \"sk\",\n \"sl\",\n \"sr\",\n \"sv\",\n \"tr\",\n \"uk\",\n \"vi\",\n \"zh-CN\",\n \"zh-TW\",\n ];\n }\n}\n","import { Observable, ReplaySubject } from \"rxjs\";\n\nimport { I18nService as I18nServiceAbstraction } from \"../abstractions/i18n.service\";\n\nexport class I18nService implements I18nServiceAbstraction {\n private _locale = new ReplaySubject(1);\n locale$: Observable = this._locale.asObservable();\n // First locale is the default (English)\n supportedTranslationLocales: string[] = [\"en\"];\n translationLocale: string;\n collator: Intl.Collator;\n localeNames = new Map([\n [\"af\", \"Afrikaans\"],\n [\"ar\", \"العربية الفصحى\"],\n [\"az\", \"Azərbaycanca\"],\n [\"be\", \"Беларуская\"],\n [\"bg\", \"български\"],\n [\"bn\", \"বাংলা\"],\n [\"bs\", \"bosanski jezik\"],\n [\"ca\", \"català\"],\n [\"cs\", \"čeština\"],\n [\"da\", \"dansk\"],\n [\"de\", \"Deutsch\"],\n [\"el\", \"Ελληνικά\"],\n [\"en\", \"English\"],\n [\"en-GB\", \"English (British)\"],\n [\"en-IN\", \"English (India)\"],\n [\"eo\", \"Esperanto\"],\n [\"es\", \"español\"],\n [\"et\", \"eesti\"],\n [\"eu\", \"euskara\"],\n [\"fa\", \"فارسی\"],\n [\"fi\", \"suomi\"],\n [\"fil\", \"Wikang Filipino\"],\n [\"fr\", \"français\"],\n [\"he\", \"עברית\"],\n [\"hi\", \"हिन्दी\"],\n [\"hr\", \"hrvatski\"],\n [\"hu\", \"magyar\"],\n [\"id\", \"Bahasa Indonesia\"],\n [\"it\", \"italiano\"],\n [\"ja\", \"日本語\"],\n [\"ka\", \"ქართული\"],\n [\"km\", \"ខ្មែរ, ខេមរភាសា, ភាសាខ្មែរ\"],\n [\"kn\", \"ಕನ್ನಡ\"],\n [\"ko\", \"한국어\"],\n [\"lt\", \"lietuvių kalba\"],\n [\"lv\", \"Latvietis\"],\n [\"me\", \"црногорски\"],\n [\"ml\", \"മലയാളം\"],\n [\"nb\", \"norsk (bokmål)\"],\n [\"nl\", \"Nederlands\"],\n [\"nn\", \"Norsk Nynorsk\"],\n [\"pl\", \"polski\"],\n [\"pt-BR\", \"português do Brasil\"],\n [\"pt-PT\", \"português\"],\n [\"ro\", \"română\"],\n [\"ru\", \"русский\"],\n [\"si\", \"සිංහල\"],\n [\"sk\", \"slovenčina\"],\n [\"sl\", \"Slovenski jezik, Slovenščina\"],\n [\"sr\", \"Српски\"],\n [\"sv\", \"svenska\"],\n [\"th\", \"ไทย\"],\n [\"tr\", \"Türkçe\"],\n [\"uk\", \"українська\"],\n [\"vi\", \"Tiếng Việt\"],\n [\"zh-CN\", \"中文(中国大陆)\"],\n [\"zh-TW\", \"中文(台灣)\"],\n ]);\n\n protected inited: boolean;\n protected defaultMessages: any = {};\n protected localeMessages: any = {};\n\n constructor(\n protected systemLanguage: string,\n protected localesDirectory: string,\n protected getLocalesJson: (formattedLocale: string) => Promise\n ) {\n this.systemLanguage = systemLanguage.replace(\"_\", \"-\");\n }\n\n async init(locale?: string) {\n if (this.inited) {\n throw new Error(\"i18n already initialized.\");\n }\n if (this.supportedTranslationLocales == null || this.supportedTranslationLocales.length === 0) {\n throw new Error(\"supportedTranslationLocales not set.\");\n }\n\n this.inited = true;\n this.translationLocale = locale != null ? locale : this.systemLanguage;\n this._locale.next(this.translationLocale);\n\n try {\n this.collator = new Intl.Collator(this.translationLocale, {\n numeric: true,\n sensitivity: \"base\",\n });\n } catch {\n this.collator = null;\n }\n\n if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n this.translationLocale = this.translationLocale.slice(0, 2);\n\n if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n this.translationLocale = this.supportedTranslationLocales[0];\n }\n }\n\n if (this.localesDirectory != null) {\n await this.loadMessages(this.translationLocale, this.localeMessages);\n if (this.translationLocale !== this.supportedTranslationLocales[0]) {\n await this.loadMessages(this.supportedTranslationLocales[0], this.defaultMessages);\n }\n }\n }\n\n t(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.translate(id, p1, p2, p3);\n }\n\n translate(id: string, p1?: string, p2?: string, p3?: string): string {\n let result: string;\n // eslint-disable-next-line\n if (this.localeMessages.hasOwnProperty(id) && this.localeMessages[id]) {\n result = this.localeMessages[id];\n // eslint-disable-next-line\n } else if (this.defaultMessages.hasOwnProperty(id) && this.defaultMessages[id]) {\n result = this.defaultMessages[id];\n } else {\n result = \"\";\n }\n\n if (result !== \"\") {\n if (p1 != null) {\n result = result.split(\"__$1__\").join(p1);\n }\n if (p2 != null) {\n result = result.split(\"__$2__\").join(p2);\n }\n if (p3 != null) {\n result = result.split(\"__$3__\").join(p3);\n }\n }\n\n return result;\n }\n\n private async loadMessages(locale: string, messagesObj: any): Promise {\n const formattedLocale = locale.replace(\"-\", \"_\");\n const locales = await this.getLocalesJson(formattedLocale);\n for (const prop in locales) {\n // eslint-disable-next-line\n if (!locales.hasOwnProperty(prop)) {\n continue;\n }\n messagesObj[prop] = locales[prop].message;\n\n if (locales[prop].placeholders) {\n for (const placeProp in locales[prop].placeholders) {\n if (\n !locales[prop].placeholders.hasOwnProperty(placeProp) || // eslint-disable-line\n !locales[prop].placeholders[placeProp].content\n ) {\n continue;\n }\n\n const replaceToken = \"\\\\$\" + placeProp.toUpperCase() + \"\\\\$\";\n let replaceContent = locales[prop].placeholders[placeProp].content;\n if (replaceContent === \"$1\" || replaceContent === \"$2\" || replaceContent === \"$3\") {\n replaceContent = \"__$\" + replaceContent + \"__\";\n }\n messagesObj[prop] = messagesObj[prop].replace(\n new RegExp(replaceToken, \"g\"),\n replaceContent\n );\n }\n }\n }\n }\n}\n","import { StateMigrationService as BaseStateMigrationService } from \"@bitwarden/common/services/stateMigration.service\";\n\nimport { Account } from \"./state/account\";\nimport { GlobalState } from \"./state/global-state\";\n\nexport class StateMigrationService extends BaseStateMigrationService {\n protected async migrationStateFrom1To2(): Promise {\n await super.migrateStateFrom1To2();\n const globals = (await this.get(\"global\")) ?? this.stateFactory.createGlobal(null);\n globals.rememberEmail = (await this.get(\"rememberEmail\")) ?? globals.rememberEmail;\n await this.set(\"global\", globals);\n }\n}\n","export class EmergencyAccessAcceptRequest {\n token: string;\n}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Directive()\nexport abstract class BaseAcceptComponent implements OnInit {\n loading = true;\n authed = false;\n email: string;\n actionPromise: Promise;\n\n protected requiredParameters: string[] = [];\n protected failedShortMessage = \"inviteAcceptFailedShort\";\n protected failedMessage = \"inviteAcceptFailed\";\n\n constructor(\n protected router: Router,\n protected platformUtilService: PlatformUtilsService,\n protected i18nService: I18nService,\n protected route: ActivatedRoute,\n protected stateService: StateService\n ) {}\n\n abstract authedHandler(qParams: Params): Promise;\n abstract unauthedHandler(qParams: Params): Promise;\n\n ngOnInit() {\n // eslint-disable-next-line rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n let error = this.requiredParameters.some((e) => qParams?.[e] == null || qParams[e] === \"\");\n let errorMessage: string = null;\n if (!error) {\n this.authed = await this.stateService.getIsAuthenticated();\n\n if (this.authed) {\n try {\n await this.authedHandler(qParams);\n } catch (e) {\n error = true;\n errorMessage = e.message;\n }\n } else {\n this.email = qParams.email;\n await this.unauthedHandler(qParams);\n }\n }\n\n if (error) {\n const message =\n errorMessage != null\n ? this.i18nService.t(this.failedShortMessage, errorMessage)\n : this.i18nService.t(this.failedMessage);\n this.platformUtilService.showToast(\"error\", null, message, { timeout: 10000 });\n this.router.navigate([\"/\"]);\n }\n\n this.loading = false;\n });\n }\n}\n","
\n
\n \"Bitwarden\"\n

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

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

{{ \"emergencyAccess\" | i18n }}

\n
\n
\n

\n {{ name }}\n

\n

{{ \"acceptEmergencyAccess\" | i18n }}

\n
\n
\n \n {{ \"logIn\" | i18n }}\n \n \n {{ \"createAccount\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { EmergencyAccessAcceptRequest } from \"@bitwarden/common/models/request/emergency-access-accept.request\";\n\nimport { BaseAcceptComponent } from \"../common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-emergency\",\n templateUrl: \"accept-emergency.component.html\",\n})\nexport class AcceptEmergencyComponent extends BaseAcceptComponent {\n name: string;\n\n protected requiredParameters: string[] = [\"id\", \"name\", \"email\", \"token\"];\n protected failedShortMessage = \"emergencyInviteAcceptFailedShort\";\n protected failedMessage = \"emergencyInviteAcceptFailed\";\n\n constructor(\n router: Router,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n route: ActivatedRoute,\n private apiService: ApiService,\n stateService: StateService\n ) {\n super(router, platformUtilsService, i18nService, route, stateService);\n }\n\n async authedHandler(qParams: Params): Promise {\n const request = new EmergencyAccessAcceptRequest();\n request.token = qParams.token;\n this.actionPromise = this.apiService.postEmergencyAccessAccept(qParams.id, request);\n await this.actionPromise;\n this.platformUtilService.showToast(\n \"success\",\n this.i18nService.t(\"inviteAccepted\"),\n this.i18nService.t(\"emergencyInviteAcceptedDesc\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"/vault\"]);\n }\n\n async unauthedHandler(qParams: Params): Promise {\n this.name = qParams.name;\n if (this.name != null) {\n // Fix URL encoding of space issue with Angular\n this.name = this.name.replace(/\\+/g, \" \");\n }\n }\n}\n","export class OrganizationUserAcceptRequest {\n token: string;\n // Used to auto-enroll in master password reset\n resetPasswordKey: string;\n}\n","
\n
\n \"Bitwarden\"\n

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

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

{{ \"joinOrganization\" | i18n }}

\n
\n
\n

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

\n

{{ \"joinOrganizationDesc\" | i18n }}

\n
\n
\n \n {{ \"logIn\" | i18n }}\n \n \n {{ \"createAccount\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { OrganizationUserAcceptRequest } from \"@bitwarden/common/models/request/organization-user-accept.request\";\n\nimport { BaseAcceptComponent } from \"../common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-organization\",\n templateUrl: \"accept-organization.component.html\",\n})\nexport class AcceptOrganizationComponent extends BaseAcceptComponent {\n orgName: string;\n\n protected requiredParameters: string[] = [\"organizationId\", \"organizationUserId\", \"token\"];\n\n constructor(\n router: Router,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n route: ActivatedRoute,\n private apiService: ApiService,\n stateService: StateService,\n private cryptoService: CryptoService,\n private policyApiService: PolicyApiServiceAbstraction,\n private policyService: PolicyService,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {\n super(router, platformUtilsService, i18nService, route, stateService);\n }\n\n async authedHandler(qParams: Params): Promise {\n this.actionPromise = this.prepareAcceptRequest(qParams).then(async (request) => {\n await this.apiService.postOrganizationUserAccept(\n qParams.organizationId,\n qParams.organizationUserId,\n request\n );\n });\n\n await this.actionPromise;\n this.platformUtilService.showToast(\n \"success\",\n this.i18nService.t(\"inviteAccepted\"),\n this.i18nService.t(\"inviteAcceptedDesc\"),\n { timeout: 10000 }\n );\n\n await this.stateService.setOrganizationInvitation(null);\n this.router.navigate([\"/vault\"]);\n }\n\n async unauthedHandler(qParams: Params): Promise {\n this.orgName = qParams.organizationName;\n if (this.orgName != null) {\n // Fix URL encoding of space issue with Angular\n this.orgName = this.orgName.replace(/\\+/g, \" \");\n }\n await this.stateService.setOrganizationInvitation(qParams);\n }\n\n private async prepareAcceptRequest(qParams: Params): Promise {\n const request = new OrganizationUserAcceptRequest();\n request.token = qParams.token;\n\n if (await this.performResetPasswordAutoEnroll(qParams)) {\n const response = await this.organizationApiService.getKeys(qParams.organizationId);\n\n if (response == null) {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n\n const publicKey = Utils.fromB64ToArray(response.publicKey);\n\n // RSA Encrypt user's encKey.key with organization public key\n const encKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n // Add reset password key to accept request\n request.resetPasswordKey = encryptedKey.encryptedString;\n }\n return request;\n }\n\n private async performResetPasswordAutoEnroll(qParams: Params): Promise {\n let policyList: Policy[] = null;\n try {\n const policies = await this.policyApiService.getPoliciesByToken(\n qParams.organizationId,\n qParams.token,\n qParams.email,\n qParams.organizationUserId\n );\n policyList = this.policyService.mapPoliciesFromToken(policies);\n } catch (e) {\n this.logService.error(e);\n }\n\n if (policyList != null) {\n const result = this.policyService.getResetPasswordPolicyOptions(\n policyList,\n qParams.organizationId\n );\n // Return true if policy enabled and auto-enroll enabled\n return result[1] && result[0].autoEnrollEnabled;\n }\n\n return false;\n }\n}\n","export class PasswordHintRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PasswordHintRequest } from \"@bitwarden/common/models/request/password-hint.request\";\n\n@Directive()\nexport class HintComponent implements OnInit {\n email = \"\";\n formPromise: Promise;\n\n protected successRoute = \"login\";\n protected onSuccessfulSubmit: () => void;\n\n constructor(\n protected router: Router,\n protected i18nService: I18nService,\n protected apiService: ApiService,\n protected platformUtilsService: PlatformUtilsService,\n private logService: LogService,\n private loginService: LoginService\n ) {}\n\n ngOnInit(): void {\n this.email = this.loginService.getEmail() ?? \"\";\n }\n\n async submit() {\n if (this.email == null || this.email === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"emailRequired\")\n );\n return;\n }\n if (this.email.indexOf(\"@\") === -1) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidEmail\")\n );\n return;\n }\n\n try {\n this.formPromise = this.apiService.postPasswordHint(new PasswordHintRequest(this.email));\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"masterPassSent\"));\n if (this.onSuccessfulSubmit != null) {\n this.onSuccessfulSubmit();\n } else if (this.router != null) {\n this.router.navigate([this.successRoute]);\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { HintComponent as BaseHintComponent } from \"@bitwarden/angular/components/hint.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-hint\",\n templateUrl: \"hint.component.html\",\n})\nexport class HintComponent extends BaseHintComponent {\n constructor(\n router: Router,\n i18nService: I18nService,\n apiService: ApiService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n loginService: LoginService\n ) {\n super(router, i18nService, apiService, platformUtilsService, logService, loginService);\n }\n}\n","
\n
\n
\n

{{ \"passwordHint\" | i18n }}

\n
\n
\n
\n \n \n {{ \"enterEmailToGetHint\" | i18n }}\n
\n
\n
\n \n {{ \"submit\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Directive, NgZone, OnDestroy, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { Subject } from \"rxjs\";\nimport { concatMap, take, takeUntil } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { HashPurpose } from \"@bitwarden/common/enums/hashPurpose\";\nimport { KeySuffixOptions } from \"@bitwarden/common/enums/keySuffixOptions\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/models/request/secret-verification.request\";\n\n@Directive()\nexport class LockComponent implements OnInit, OnDestroy {\n masterPassword = \"\";\n pin = \"\";\n showPassword = false;\n email: string;\n pinLock = false;\n webVaultHostname = \"\";\n formPromise: Promise;\n supportsBiometric: boolean;\n biometricLock: boolean;\n biometricText: string;\n hideInput: boolean;\n\n protected successRoute = \"vault\";\n protected onSuccessfulSubmit: () => Promise;\n\n private invalidPinAttempts = 0;\n private pinSet: [boolean, boolean];\n\n private destroy$ = new Subject();\n\n constructor(\n protected router: Router,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected cryptoService: CryptoService,\n protected vaultTimeoutService: VaultTimeoutService,\n protected vaultTimeoutSettingsService: VaultTimeoutSettingsService,\n protected environmentService: EnvironmentService,\n protected stateService: StateService,\n protected apiService: ApiService,\n protected logService: LogService,\n private keyConnectorService: KeyConnectorService,\n protected ngZone: NgZone\n ) {}\n\n async ngOnInit() {\n this.stateService.activeAccount$\n .pipe(\n concatMap(async () => {\n await this.load();\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async submit() {\n if (this.pinLock) {\n return await this.handlePinRequiredUnlock();\n }\n\n await this.handleMasterPasswordRequiredUnlock();\n }\n\n async logOut() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"logOutConfirmation\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"cancel\")\n );\n if (confirmed) {\n this.messagingService.send(\"logout\");\n }\n }\n\n async unlockBiometric(): Promise {\n if (!this.biometricLock) {\n return;\n }\n\n const success = (await this.cryptoService.getKey(KeySuffixOptions.Biometric)) != null;\n\n if (success) {\n await this.doContinue();\n }\n\n return success;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n const input = document.getElementById(this.pinLock ? \"pin\" : \"masterPassword\");\n if (this.ngZone.isStable) {\n input.focus();\n } else {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => input.focus());\n }\n }\n\n private async handlePinRequiredUnlock() {\n if (this.pin == null || this.pin === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"pinRequired\")\n );\n return;\n }\n\n return await this.doUnlockWithPin();\n }\n\n private async doUnlockWithPin() {\n let failed = true;\n try {\n const kdf = await this.stateService.getKdfType();\n const kdfIterations = await this.stateService.getKdfIterations();\n if (this.pinSet[0]) {\n const key = await this.cryptoService.makeKeyFromPin(\n this.pin,\n this.email,\n kdf,\n kdfIterations,\n await this.stateService.getDecryptedPinProtected()\n );\n const encKey = await this.cryptoService.getEncKey(key);\n const protectedPin = await this.stateService.getProtectedPin();\n const decPin = await this.cryptoService.decryptToUtf8(new EncString(protectedPin), encKey);\n failed = decPin !== this.pin;\n if (!failed) {\n await this.setKeyAndContinue(key);\n }\n } else {\n const key = await this.cryptoService.makeKeyFromPin(\n this.pin,\n this.email,\n kdf,\n kdfIterations\n );\n failed = false;\n await this.setKeyAndContinue(key);\n }\n } catch {\n failed = true;\n }\n\n if (failed) {\n this.invalidPinAttempts++;\n if (this.invalidPinAttempts >= 5) {\n this.messagingService.send(\"logout\");\n return;\n }\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidPin\")\n );\n }\n }\n\n private async handleMasterPasswordRequiredUnlock() {\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordRequired\")\n );\n return;\n }\n await this.doUnlockWithMasterPassword();\n }\n\n private async doUnlockWithMasterPassword() {\n const kdf = await this.stateService.getKdfType();\n const kdfIterations = await this.stateService.getKdfIterations();\n\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email,\n kdf,\n kdfIterations\n );\n const storedKeyHash = await this.cryptoService.getKeyHash();\n\n let passwordValid = false;\n\n if (storedKeyHash != null) {\n passwordValid = await this.cryptoService.compareAndUpdateKeyHash(this.masterPassword, key);\n } else {\n const request = new SecretVerificationRequest();\n const serverKeyHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n key,\n HashPurpose.ServerAuthorization\n );\n request.masterPasswordHash = serverKeyHash;\n try {\n this.formPromise = this.apiService.postAccountVerifyPassword(request);\n await this.formPromise;\n passwordValid = true;\n const localKeyHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n key,\n HashPurpose.LocalAuthorization\n );\n await this.cryptoService.setKeyHash(localKeyHash);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n if (!passwordValid) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidMasterPassword\")\n );\n return;\n }\n\n if (this.pinSet[0]) {\n const protectedPin = await this.stateService.getProtectedPin();\n const encKey = await this.cryptoService.getEncKey(key);\n const decPin = await this.cryptoService.decryptToUtf8(new EncString(protectedPin), encKey);\n const pinKey = await this.cryptoService.makePinKey(decPin, this.email, kdf, kdfIterations);\n await this.stateService.setDecryptedPinProtected(\n await this.cryptoService.encrypt(key.key, pinKey)\n );\n }\n await this.setKeyAndContinue(key);\n }\n private async setKeyAndContinue(key: SymmetricCryptoKey) {\n await this.cryptoService.setKey(key);\n await this.doContinue();\n }\n\n private async doContinue() {\n await this.stateService.setEverBeenUnlocked(true);\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n this.messagingService.send(\"unlocked\");\n if (this.onSuccessfulSubmit != null) {\n await this.onSuccessfulSubmit();\n } else if (this.router != null) {\n this.router.navigate([this.successRoute]);\n }\n }\n\n private async load() {\n this.pinSet = await this.vaultTimeoutSettingsService.isPinLockSet();\n this.pinLock =\n (this.pinSet[0] && (await this.stateService.getDecryptedPinProtected()) != null) ||\n this.pinSet[1];\n this.supportsBiometric = await this.platformUtilsService.supportsBiometric();\n this.biometricLock =\n (await this.vaultTimeoutSettingsService.isBiometricLockSet()) &&\n ((await this.cryptoService.hasKeyStored(KeySuffixOptions.Biometric)) ||\n !this.platformUtilsService.supportsSecureStorage());\n this.biometricText = await this.stateService.getBiometricText();\n this.email = await this.stateService.getEmail();\n const usesKeyConnector = await this.keyConnectorService.getUsesKeyConnector();\n this.hideInput = usesKeyConnector && !this.pinLock;\n\n // Users with key connector and without biometric or pin has no MP to unlock using\n if (usesKeyConnector && !(this.biometricLock || this.pinLock)) {\n await this.vaultTimeoutService.logOut();\n }\n\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n const vaultUrl =\n webVaultUrl === \"https://vault.bitwarden.com\" ? \"https://bitwarden.com\" : webVaultUrl;\n this.webVaultHostname = Utils.getHostname(vaultUrl);\n }\n}\n","import { Component, NgZone } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { LockComponent as BaseLockComponent } from \"@bitwarden/angular/components/lock.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service\";\n\nimport { RouterService } from \"../core\";\n\n@Component({\n selector: \"app-lock\",\n templateUrl: \"lock.component.html\",\n})\nexport class LockComponent extends BaseLockComponent {\n constructor(\n router: Router,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n cryptoService: CryptoService,\n vaultTimeoutService: VaultTimeoutService,\n vaultTimeoutSettingsService: VaultTimeoutSettingsService,\n environmentService: EnvironmentService,\n private routerService: RouterService,\n stateService: StateService,\n apiService: ApiService,\n logService: LogService,\n keyConnectorService: KeyConnectorService,\n ngZone: NgZone\n ) {\n super(\n router,\n i18nService,\n platformUtilsService,\n messagingService,\n cryptoService,\n vaultTimeoutService,\n vaultTimeoutSettingsService,\n environmentService,\n stateService,\n apiService,\n logService,\n keyConnectorService,\n ngZone\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n this.onSuccessfulSubmit = async () => {\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl && previousUrl !== \"/\" && previousUrl.indexOf(\"lock\") === -1) {\n this.successRoute = previousUrl;\n }\n this.router.navigateByUrl(this.successRoute);\n };\n }\n}\n","
\n
\n
\n

\n \n

\n

{{ \"yourVaultIsLocked\" | i18n }}

\n
\n
\n
\n \n
\n \n \n \n \n
\n \n {{ \"loggedInAsEmailOn\" | i18n: email:webVaultHostname }}\n \n
\n
\n
\n \n {{ \"unlock\" | i18n }} \n \n \n \n {{ \"logOut\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { I18nService } from \"../abstractions/i18n.service\";\n\nimport { IFrameComponent } from \"./iframe_component\";\n\nexport class CaptchaIFrame extends IFrameComponent {\n constructor(\n win: Window,\n webVaultUrl: string,\n private i18nService: I18nService,\n successCallback: (message: string) => any,\n errorCallback: (message: string) => any,\n infoCallback: (message: string) => any\n ) {\n super(\n win,\n webVaultUrl,\n \"captcha-connector.html\",\n \"hcaptcha_iframe\",\n successCallback,\n errorCallback,\n (message: string) => {\n const parsedMessage = JSON.parse(message);\n if (typeof parsedMessage !== \"string\") {\n this.iframe.height = parsedMessage.height.toString();\n this.iframe.width = parsedMessage.width.toString();\n } else {\n infoCallback(parsedMessage);\n }\n }\n );\n }\n\n init(siteKey: string): void {\n super.initComponent(\n this.createParams({ siteKey: siteKey, locale: this.i18nService.translationLocale }, 1)\n );\n }\n}\n","export abstract class IFrameComponent {\n iframe: HTMLIFrameElement;\n private connectorLink: HTMLAnchorElement;\n private parseFunction = this.parseMessage.bind(this);\n\n constructor(\n private win: Window,\n protected webVaultUrl: string,\n private path: string,\n private iframeId: string,\n public successCallback?: (message: string) => any,\n public errorCallback?: (message: string) => any,\n public infoCallback?: (message: string) => any\n ) {\n this.connectorLink = win.document.createElement(\"a\");\n }\n\n stop() {\n this.sendMessage(\"stop\");\n }\n\n start() {\n this.sendMessage(\"start\");\n }\n\n sendMessage(message: any) {\n if (!this.iframe || !this.iframe.src || !this.iframe.contentWindow) {\n return;\n }\n\n this.iframe.contentWindow.postMessage(message, this.iframe.src);\n }\n\n base64Encode(str: string): string {\n return btoa(\n encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode((\"0x\" + p1) as any);\n })\n );\n }\n\n cleanup() {\n this.win.removeEventListener(\"message\", this.parseFunction, false);\n }\n\n protected createParams(data: any, version: number) {\n return new URLSearchParams({\n data: this.base64Encode(JSON.stringify(data)),\n parent: encodeURIComponent(this.win.document.location.href),\n v: version.toString(),\n });\n }\n\n protected initComponent(params: URLSearchParams): void {\n this.connectorLink.href = `${this.webVaultUrl}/${this.path}?${params}`;\n this.iframe = this.win.document.getElementById(this.iframeId) as HTMLIFrameElement;\n this.iframe.src = this.connectorLink.href;\n\n this.win.addEventListener(\"message\", this.parseFunction, false);\n }\n\n private parseMessage(event: MessageEvent) {\n if (!this.validMessage(event)) {\n return;\n }\n\n const parts: string[] = event.data.split(\"|\");\n if (parts[0] === \"success\" && this.successCallback) {\n this.successCallback(parts[1]);\n } else if (parts[0] === \"error\" && this.errorCallback) {\n this.errorCallback(parts[1]);\n } else if (parts[0] === \"info\" && this.infoCallback) {\n this.infoCallback(parts[1]);\n }\n }\n\n private validMessage(event: MessageEvent) {\n if (\n event.origin == null ||\n event.origin === \"\" ||\n event.origin !== (this.connectorLink as any).origin ||\n event.data == null ||\n typeof event.data !== \"string\"\n ) {\n return false;\n }\n\n return (\n event.data.indexOf(\"success|\") === 0 ||\n event.data.indexOf(\"error|\") === 0 ||\n event.data.indexOf(\"info|\") === 0\n );\n }\n}\n","export enum AuthRequestType {\n AuthenticateAndUnlock = 0,\n Unlock = 1,\n}\n","import { Directive, Input } from \"@angular/core\";\n\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CaptchaIFrame } from \"@bitwarden/common/misc/captcha_iframe\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Directive()\nexport abstract class CaptchaProtectedComponent {\n @Input() captchaSiteKey: string = null;\n captchaToken: string = null;\n captcha: CaptchaIFrame;\n\n constructor(\n protected environmentService: EnvironmentService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService\n ) {}\n\n async setupCaptcha() {\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n\n this.captcha = new CaptchaIFrame(\n window,\n webVaultUrl,\n this.i18nService,\n (token: string) => {\n this.captchaToken = token;\n },\n (error: string) => {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), error);\n },\n (info: string) => {\n this.platformUtilsService.showToast(\"info\", this.i18nService.t(\"info\"), info);\n }\n );\n }\n\n showCaptcha() {\n return !Utils.isNullOrWhitespace(this.captchaSiteKey);\n }\n\n protected handleCaptchaRequired(response: { captchaSiteKey: string }): boolean {\n if (Utils.isNullOrWhitespace(response.captchaSiteKey)) {\n return false;\n }\n\n this.captchaSiteKey = response.captchaSiteKey;\n this.captcha.init(response.captchaSiteKey);\n return true;\n }\n}\n","import { AuthenticationType } from \"../../enums/authenticationType\";\nimport { TokenTwoFactorRequest } from \"../request/identity-token/token-two-factor.request\";\n\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class PasswordLogInCredentials {\n readonly type = AuthenticationType.Password;\n\n constructor(\n public email: string,\n public masterPassword: string,\n public captchaToken?: string,\n public twoFactor?: TokenTwoFactorRequest\n ) {}\n}\n\nexport class SsoLogInCredentials {\n readonly type = AuthenticationType.Sso;\n\n constructor(\n public code: string,\n public codeVerifier: string,\n public redirectUrl: string,\n public orgId: string,\n public twoFactor?: TokenTwoFactorRequest\n ) {}\n}\n\nexport class ApiLogInCredentials {\n readonly type = AuthenticationType.Api;\n\n constructor(public clientId: string, public clientSecret: string) {}\n}\n\nexport class PasswordlessLogInCredentials {\n readonly type = AuthenticationType.Passwordless;\n\n constructor(\n public email: string,\n public accessCode: string,\n public authRequestId: string,\n public decKey: SymmetricCryptoKey,\n public localPasswordHash: string,\n public twoFactor?: TokenTwoFactorRequest\n ) {}\n}\n","import { AuthRequestType } from \"../../enums/authRequestType\";\n\nexport class PasswordlessCreateAuthRequest {\n constructor(\n readonly email: string,\n readonly deviceIdentifier: string,\n readonly publicKey: string,\n readonly type: AuthRequestType,\n readonly accessCode: string,\n readonly fingerprintPhrase: string\n ) {}\n}\n","\n
\n \n

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

\n\n \n

{{ \"logInInitiated\" | i18n }}

\n\n
\n

{{ \"notificationSentDevice\" | i18n }}

\n\n

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

\n
\n\n
\n

{{ \"fingerprintPhraseHeader\" | i18n }}

\n

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

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

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

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

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

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

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

\n {{ \"notYou\" | i18n }}\n
\n
\n","import { Component, NgZone, OnDestroy, OnInit } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nimport { LoginComponent as BaseLoginComponent } from \"@bitwarden/angular/components/login.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AppIdService } from \"@bitwarden/common/abstractions/appId.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { FormValidationErrorsService } from \"@bitwarden/common/abstractions/formValidationErrors.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { InternalPolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { PolicyData } from \"@bitwarden/common/models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policy.response\";\n\nimport { flagEnabled } from \"../../../utils/flags\";\nimport { RouterService, StateService } from \"../../core\";\n\n@Component({\n selector: \"app-login\",\n templateUrl: \"login.component.html\",\n})\nexport class LoginComponent extends BaseLoginComponent implements OnInit, OnDestroy {\n showResetPasswordAutoEnrollWarning = false;\n enforcedPasswordPolicyOptions: MasterPasswordPolicyOptions;\n policies: ListResponse;\n showPasswordless = false;\n\n private destroy$ = new Subject();\n\n constructor(\n apiService: ApiService,\n appIdService: AppIdService,\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n route: ActivatedRoute,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n passwordGenerationService: PasswordGenerationService,\n cryptoFunctionService: CryptoFunctionService,\n private policyApiService: PolicyApiServiceAbstraction,\n private policyService: InternalPolicyService,\n logService: LogService,\n ngZone: NgZone,\n protected stateService: StateService,\n private messagingService: MessagingService,\n private routerService: RouterService,\n formBuilder: FormBuilder,\n formValidationErrorService: FormValidationErrorsService,\n loginService: LoginService\n ) {\n super(\n apiService,\n appIdService,\n authService,\n router,\n platformUtilsService,\n i18nService,\n stateService,\n environmentService,\n passwordGenerationService,\n cryptoFunctionService,\n logService,\n ngZone,\n formBuilder,\n formValidationErrorService,\n route,\n loginService\n );\n this.onSuccessfulLogin = async () => {\n this.messagingService.send(\"setFullWidth\");\n };\n this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n this.showPasswordless = flagEnabled(\"showPasswordless\");\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.premium != null) {\n this.routerService.setPreviousUrl(\"/settings/premium\");\n } else if (qParams.org != null) {\n const route = this.router.createUrlTree([\"create-organization\"], {\n queryParams: { plan: qParams.org },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n\n // Are they coming from an email for sponsoring a families organization\n if (qParams.sponsorshipToken != null) {\n const route = this.router.createUrlTree([\"setup/families-for-enterprise\"], {\n queryParams: { token: qParams.sponsorshipToken },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n await super.ngOnInit();\n });\n\n const invite = await this.stateService.getOrganizationInvitation();\n if (invite != null) {\n let policyList: Policy[] = null;\n try {\n this.policies = await this.policyApiService.getPoliciesByToken(\n invite.organizationId,\n invite.token,\n invite.email,\n invite.organizationUserId\n );\n policyList = this.policyService.mapPoliciesFromToken(this.policies);\n } catch (e) {\n this.logService.error(e);\n }\n\n if (policyList != null) {\n const resetPasswordPolicy = this.policyService.getResetPasswordPolicyOptions(\n policyList,\n invite.organizationId\n );\n // Set to true if policy enabled and auto-enroll enabled\n this.showResetPasswordAutoEnrollWarning =\n resetPasswordPolicy[1] && resetPasswordPolicy[0].autoEnrollEnabled;\n\n this.policyService\n .masterPasswordPolicyOptions$(policyList)\n .pipe(takeUntil(this.destroy$))\n .subscribe((enforcedPasswordPolicyOptions) => {\n this.enforcedPasswordPolicyOptions = enforcedPasswordPolicyOptions;\n });\n }\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async goAfterLogIn() {\n const masterPassword = this.formGroup.value.masterPassword;\n\n // Check master password against policy\n if (this.enforcedPasswordPolicyOptions != null) {\n const strengthResult = this.passwordGenerationService.passwordStrength(\n masterPassword,\n this.getPasswordStrengthUserInput()\n );\n const masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n\n // If invalid, save policies and require update\n if (\n !this.policyService.evaluateMasterPassword(\n masterPasswordScore,\n masterPassword,\n this.enforcedPasswordPolicyOptions\n )\n ) {\n const policiesData: { [id: string]: PolicyData } = {};\n this.policies.data.map((p) => (policiesData[p.id] = new PolicyData(p)));\n await this.policyService.replace(policiesData);\n this.router.navigate([\"update-password\"]);\n return;\n }\n }\n\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl) {\n this.router.navigateByUrl(previousUrl);\n } else {\n this.loginService.clearValues();\n this.router.navigate([this.successRoute]);\n }\n }\n\n goToHint() {\n this.setFormValues();\n this.router.navigateByUrl(\"/hint\");\n }\n\n async submit() {\n const rememberEmail = this.formGroup.value.rememberEmail;\n\n await this.stateService.setRememberEmail(rememberEmail);\n if (!rememberEmail) {\n await this.stateService.setRememberedEmail(null);\n }\n await super.submit(false);\n }\n\n async startPasswordlessLogin() {\n this.formGroup.get(\"masterPassword\")?.clearValidators();\n this.formGroup.get(\"masterPassword\")?.updateValueAndValidity();\n\n if (!this.formGroup.valid) {\n return;\n }\n\n const email = this.formGroup.get(\"email\").value;\n this.router.navigate([\"/login-with-device\"], { state: { email: email } });\n }\n\n private getPasswordStrengthUserInput() {\n const email = this.formGroup.value.email;\n let userInput: string[] = [];\n const atPosition = email.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput.concat(\n email\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n );\n }\n return userInput;\n }\n}\n","export class DeleteRecoverRequest {\n email: string;\n}\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { DeleteRecoverRequest } from \"@bitwarden/common/models/request/delete-recover.request\";\n\n@Component({\n selector: \"app-recover-delete\",\n templateUrl: \"recover-delete.component.html\",\n})\nexport class RecoverDeleteComponent {\n email: string;\n formPromise: Promise;\n\n constructor(\n private router: Router,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const request = new DeleteRecoverRequest();\n request.email = this.email.trim().toLowerCase();\n this.formPromise = this.apiService.postAccountRecoverDelete(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deleteRecoverEmailSent\")\n );\n this.router.navigate([\"/\"]);\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n
\n

{{ \"deleteAccount\" | i18n }}

\n
\n
\n

{{ \"deleteRecoverDesc\" | i18n }}

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

{{ \"recoverAccountTwoStep\" | i18n }}

\n
\n
\n

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

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n {{ \"submit\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { CaptchaProtectedRequest } from \"./captcha-protected.request\";\nimport { KeysRequest } from \"./keys.request\";\nimport { ReferenceEventRequest } from \"./reference-event.request\";\n\nexport class RegisterRequest implements CaptchaProtectedRequest {\n masterPasswordHint: string;\n keys: KeysRequest;\n token: string;\n organizationUserId: string;\n\n constructor(\n public email: string,\n public name: string,\n public masterPasswordHash: string,\n masterPasswordHint: string,\n public key: string,\n public kdf: KdfType,\n public kdfIterations: number,\n public referenceData: ReferenceEventRequest,\n public captchaResponse: string\n ) {\n this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null;\n }\n}\n","import { AbstractControl, UntypedFormGroup, ValidatorFn } from \"@angular/forms\";\n\nimport { FormGroupControls } from \"@bitwarden/common/abstractions/formValidationErrors.service\";\n\nexport class InputsFieldMatch {\n //check to ensure two fields do not have the same value\n static validateInputsDoesntMatch(matchTo: string, errorMessage: string): ValidatorFn {\n return (control: AbstractControl) => {\n if (control.parent && control.parent.controls) {\n return control?.value === (control?.parent?.controls as FormGroupControls)[matchTo].value\n ? {\n inputsMatchError: {\n message: errorMessage,\n },\n }\n : null;\n }\n\n return null;\n };\n }\n\n //check to ensure two fields have the same value\n static validateInputsMatch(matchTo: string, errorMessage: string): ValidatorFn {\n return (control: AbstractControl) => {\n if (control.parent && control.parent.controls) {\n return control?.value === (control?.parent?.controls as FormGroupControls)[matchTo].value\n ? null\n : {\n inputsDoesntMatchError: {\n message: errorMessage,\n },\n };\n }\n\n return null;\n };\n }\n\n //checks the formGroup if two fields have the same value and validation is controlled from either field\n static validateFormInputsMatch(field: string, fieldMatchTo: string, errorMessage: string) {\n return (formGroup: UntypedFormGroup) => {\n const fieldCtrl = formGroup.controls[field];\n const fieldMatchToCtrl = formGroup.controls[fieldMatchTo];\n\n if (fieldCtrl.value !== fieldMatchToCtrl.value) {\n fieldMatchToCtrl.setErrors({\n inputsDoesntMatchError: {\n message: errorMessage,\n },\n });\n } else {\n fieldMatchToCtrl.setErrors(null);\n }\n };\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { AbstractControl, UntypedFormBuilder, ValidatorFn, Validators } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport {\n AllValidationErrors,\n FormValidationErrorsService,\n} from \"@bitwarden/common/abstractions/formValidationErrors.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { DEFAULT_KDF_ITERATIONS, DEFAULT_KDF_TYPE } from \"@bitwarden/common/enums/kdfType\";\nimport { PasswordLogInCredentials } from \"@bitwarden/common/models/domain/log-in-credentials\";\nimport { KeysRequest } from \"@bitwarden/common/models/request/keys.request\";\nimport { ReferenceEventRequest } from \"@bitwarden/common/models/request/reference-event.request\";\nimport { RegisterRequest } from \"@bitwarden/common/models/request/register.request\";\nimport { RegisterResponse } from \"@bitwarden/common/models/response/authentication/register.response\";\n\nimport { PasswordColorText } from \"../shared/components/password-strength/password-strength.component\";\nimport { InputsFieldMatch } from \"../validators/inputsFieldMatch.validator\";\n\nimport { CaptchaProtectedComponent } from \"./captchaProtected.component\";\n\n@Directive()\nexport class RegisterComponent extends CaptchaProtectedComponent implements OnInit {\n @Input() isInTrialFlow = false;\n @Output() createdAccount = new EventEmitter();\n\n showPassword = false;\n formPromise: Promise;\n referenceData: ReferenceEventRequest;\n showTerms = true;\n showErrorSummary = false;\n passwordStrengthResult: any;\n color: string;\n text: string;\n\n formGroup = this.formBuilder.group(\n {\n email: [\"\", [Validators.required, Validators.email]],\n name: [\"\"],\n masterPassword: [\"\", [Validators.required, Validators.minLength(8)]],\n confirmMasterPassword: [\"\", [Validators.required, Validators.minLength(8)]],\n hint: [\n null,\n [\n InputsFieldMatch.validateInputsDoesntMatch(\n \"masterPassword\",\n this.i18nService.t(\"hintEqualsPassword\")\n ),\n ],\n ],\n acceptPolicies: [false, [this.acceptPoliciesValidation()]],\n },\n {\n validator: InputsFieldMatch.validateFormInputsMatch(\n \"masterPassword\",\n \"confirmMasterPassword\",\n this.i18nService.t(\"masterPassDoesntMatch\")\n ),\n }\n );\n\n protected successRoute = \"login\";\n\n protected accountCreated = false;\n\n protected captchaBypassToken: string = null;\n\n constructor(\n protected formValidationErrorService: FormValidationErrorsService,\n protected formBuilder: UntypedFormBuilder,\n protected authService: AuthService,\n protected router: Router,\n i18nService: I18nService,\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n protected stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n protected passwordGenerationService: PasswordGenerationService,\n environmentService: EnvironmentService,\n protected logService: LogService\n ) {\n super(environmentService, i18nService, platformUtilsService);\n this.showTerms = !platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.setupCaptcha();\n }\n\n async submit(showToast = true) {\n let email = this.formGroup.value.email;\n email = email.trim().toLowerCase();\n let name = this.formGroup.value.name;\n name = name === \"\" ? null : name; // Why do we do this?\n const masterPassword = this.formGroup.value.masterPassword;\n try {\n if (!this.accountCreated) {\n const registerResponse = await this.registerAccount(\n await this.buildRegisterRequest(email, masterPassword, name),\n showToast\n );\n if (!registerResponse.successful) {\n return;\n }\n this.captchaBypassToken = registerResponse.captchaBypassToken;\n this.accountCreated = true;\n }\n if (this.isInTrialFlow) {\n if (!this.accountCreated) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"trialAccountCreated\")\n );\n }\n const loginResponse = await this.logIn(email, masterPassword, this.captchaBypassToken);\n if (loginResponse.captchaRequired) {\n return;\n }\n this.createdAccount.emit(this.formGroup.value.email);\n } else {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"newAccountCreated\")\n );\n this.router.navigate([this.successRoute], { queryParams: { email: email } });\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n }\n\n getStrengthResult(result: any) {\n this.passwordStrengthResult = result;\n }\n\n getPasswordScoreText(event: PasswordColorText) {\n this.color = event.color;\n this.text = event.text;\n }\n\n private getErrorToastMessage() {\n const error: AllValidationErrors = this.formValidationErrorService\n .getFormValidationErrors(this.formGroup.controls)\n .shift();\n\n if (error) {\n switch (error.errorName) {\n case \"email\":\n return this.i18nService.t(\"invalidEmail\");\n case \"inputsDoesntMatchError\":\n return this.i18nService.t(\"masterPassDoesntMatch\");\n case \"inputsMatchError\":\n return this.i18nService.t(\"hintEqualsPassword\");\n default:\n return this.i18nService.t(this.errorTag(error));\n }\n }\n\n return;\n }\n\n private errorTag(error: AllValidationErrors): string {\n const name = error.errorName.charAt(0).toUpperCase() + error.errorName.slice(1);\n return `${error.controlName}${name}`;\n }\n\n //validation would be ignored on selfhosted\n private acceptPoliciesValidation(): ValidatorFn {\n return (control: AbstractControl) => {\n const ctrlValue = control.value;\n\n return !ctrlValue && this.showTerms ? { required: true } : null;\n };\n }\n\n private async validateRegistration(showToast: boolean): Promise<{ isValid: boolean }> {\n this.formGroup.markAllAsTouched();\n this.showErrorSummary = true;\n\n if (this.formGroup.get(\"acceptPolicies\").hasError(\"required\")) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"acceptPoliciesRequired\")\n );\n return { isValid: false };\n }\n\n //web\n if (this.formGroup.invalid && !showToast) {\n return { isValid: false };\n }\n\n //desktop, browser\n if (this.formGroup.invalid && showToast) {\n const errorText = this.getErrorToastMessage();\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), errorText);\n return { isValid: false };\n }\n\n if (this.passwordStrengthResult != null && this.passwordStrengthResult.score < 3) {\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"weakMasterPasswordDesc\"),\n this.i18nService.t(\"weakMasterPassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n return { isValid: false };\n }\n }\n return { isValid: true };\n }\n\n private async buildRegisterRequest(\n email: string,\n masterPassword: string,\n name: string\n ): Promise {\n const hint = this.formGroup.value.hint;\n const kdf = DEFAULT_KDF_TYPE;\n const kdfIterations = DEFAULT_KDF_ITERATIONS;\n const key = await this.cryptoService.makeKey(masterPassword, email, kdf, kdfIterations);\n const encKey = await this.cryptoService.makeEncKey(key);\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, key);\n const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n const request = new RegisterRequest(\n email,\n name,\n hashedPassword,\n hint,\n encKey[1].encryptedString,\n kdf,\n kdfIterations,\n this.referenceData,\n this.captchaToken\n );\n request.keys = new KeysRequest(keys[0], keys[1].encryptedString);\n const orgInvite = await this.stateService.getOrganizationInvitation();\n if (orgInvite != null && orgInvite.token != null && orgInvite.organizationUserId != null) {\n request.token = orgInvite.token;\n request.organizationUserId = orgInvite.organizationUserId;\n }\n return request;\n }\n\n private async registerAccount(\n request: RegisterRequest,\n showToast: boolean\n ): Promise<{ successful: boolean; captchaBypassToken?: string }> {\n if (!(await this.validateRegistration(showToast)).isValid) {\n return { successful: false };\n }\n this.formPromise = this.apiService.postRegister(request);\n try {\n const response = await this.formPromise;\n return { successful: true, captchaBypassToken: response.captchaBypassToken };\n } catch (e) {\n if (this.handleCaptchaRequired(e)) {\n return { successful: false };\n } else {\n throw e;\n }\n }\n }\n\n private async logIn(\n email: string,\n masterPassword: string,\n captchaBypassToken: string\n ): Promise<{ captchaRequired: boolean }> {\n const credentials = new PasswordLogInCredentials(\n email,\n masterPassword,\n captchaBypassToken,\n null\n );\n const loginResponse = await this.authService.logIn(credentials);\n if (this.handleCaptchaRequired(loginResponse)) {\n return { captchaRequired: true };\n }\n return { captchaRequired: false };\n }\n}\n","export class ReferenceEventRequest {\n id: string;\n layout: string;\n flow: string;\n}\n","
\n \n \n {{ text }}\n \n
\n\n","import { Component, EventEmitter, Input, OnChanges, Output } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\n\nexport interface PasswordColorText {\n color: string;\n text: string;\n}\n\n@Component({\n selector: \"app-password-strength\",\n templateUrl: \"password-strength.component.html\",\n})\nexport class PasswordStrengthComponent implements OnChanges {\n @Input() showText = false;\n @Input() email: string;\n @Input() name: string;\n @Input() set password(value: string) {\n this.updatePasswordStrength(value);\n }\n @Output() passwordStrengthResult = new EventEmitter();\n @Output() passwordScoreColor = new EventEmitter();\n\n masterPasswordScore: number;\n scoreWidth = 0;\n color = \"bg-danger\";\n text: string;\n\n private masterPasswordStrengthTimeout: any;\n\n //used by desktop and browser to display strength text color\n get masterPasswordScoreColor() {\n switch (this.masterPasswordScore) {\n case 4:\n return \"success\";\n case 3:\n return \"primary\";\n case 2:\n return \"warning\";\n default:\n return \"danger\";\n }\n }\n\n //used by desktop and browser to display strength text\n get masterPasswordScoreText() {\n switch (this.masterPasswordScore) {\n case 4:\n return this.i18nService.t(\"strong\");\n case 3:\n return this.i18nService.t(\"good\");\n case 2:\n return this.i18nService.t(\"weak\");\n default:\n return this.masterPasswordScore != null ? this.i18nService.t(\"weak\") : null;\n }\n }\n\n constructor(\n private i18nService: I18nService,\n private passwordGenerationService: PasswordGenerationService\n ) {}\n\n ngOnChanges(): void {\n this.masterPasswordStrengthTimeout = setTimeout(() => {\n this.scoreWidth = this.masterPasswordScore == null ? 0 : (this.masterPasswordScore + 1) * 20;\n\n switch (this.masterPasswordScore) {\n case 4:\n this.color = \"bg-success\";\n this.text = this.i18nService.t(\"strong\");\n break;\n case 3:\n this.color = \"bg-primary\";\n this.text = this.i18nService.t(\"good\");\n break;\n case 2:\n this.color = \"bg-warning\";\n this.text = this.i18nService.t(\"weak\");\n break;\n default:\n this.color = \"bg-danger\";\n this.text = this.masterPasswordScore != null ? this.i18nService.t(\"weak\") : null;\n break;\n }\n\n this.setPasswordScoreText(this.color, this.text);\n }, 300);\n }\n\n updatePasswordStrength(password: string) {\n const masterPassword = password;\n\n if (this.masterPasswordStrengthTimeout != null) {\n clearTimeout(this.masterPasswordStrengthTimeout);\n }\n\n const strengthResult = this.passwordGenerationService.passwordStrength(\n masterPassword,\n this.getPasswordStrengthUserInput()\n );\n this.passwordStrengthResult.emit(strengthResult);\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n }\n\n getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const email = this.email;\n const name = this.name;\n const atPosition = email?.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput.concat(\n email\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n );\n }\n if (name != null && name !== \"\") {\n userInput = userInput.concat(name.trim().toLowerCase().split(\" \"));\n }\n return userInput;\n }\n\n setPasswordScoreText(color: string, text: string) {\n color = color.slice(3);\n this.passwordScoreColor.emit({ color: color, text: text });\n }\n}\n","import { Component, Input } from \"@angular/core\";\nimport { AbstractControl, UntypedFormGroup } from \"@angular/forms\";\n\n@Component({\n selector: \"bit-error-summary\",\n template: ` 0\">\n {{ \"fieldsNeedAttention\" | i18n: errorString }}\n `,\n host: {\n class: \"tw-block tw-text-danger tw-mt-2\",\n \"aria-live\": \"assertive\",\n },\n})\nexport class BitErrorSummary {\n @Input()\n formGroup: UntypedFormGroup;\n\n get errorCount(): number {\n return this.getErrorCount(this.formGroup);\n }\n\n get errorString() {\n return this.errorCount.toString();\n }\n\n private getErrorCount(form: UntypedFormGroup): number {\n return Object.values(form.controls).reduce((acc: number, control: AbstractControl) => {\n if (control instanceof UntypedFormGroup) {\n return acc + this.getErrorCount(control);\n }\n\n if (control.errors == null) {\n return acc;\n }\n\n if (!control.dirty && control.untouched) {\n return acc;\n }\n\n return acc + Object.keys(control.errors).length;\n }, 0);\n }\n}\n","\n
\n
\n \n {{ \"emailAddress\" | i18n }}\n \n {{ \"emailAddressDesc\" | i18n }}\n \n
\n\n
\n \n {{ \"name\" | i18n }}\n \n {{ \"yourNameDesc\" | i18n }}\n \n
\n\n
\n \n \n \n {{ \"masterPass\" | i18n }}\n \n \n \n Important:\n {{ \"masterPassImportant\" | i18n }}\n \n \n \n \n
\n\n
\n \n {{ \"reTypeMasterPass\" | i18n }}\n \n \n \n
\n\n
\n \n {{ \"masterPassHint\" | i18n }}\n \n {{ \"masterPassHintDesc\" | i18n }}\n \n
\n\n
\n \n
\n\n
\n
\n \n
\n \n {{ \"acceptPolicies\" | i18n }}
\n {{\n \"termsOfService\" | i18n\n }},\n {{\n \"privacyPolicy\" | i18n\n }}\n
\n
\n\n
\n \n \n \n \n {{ \"logIn\" | i18n }}\n \n \n \n \n \n
\n \n
\n\n","import { Component, Input } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\n\nimport { RegisterComponent as BaseRegisterComponent } from \"@bitwarden/angular/components/register.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { FormValidationErrorsService } from \"@bitwarden/common/abstractions/formValidationErrors.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { ReferenceEventRequest } from \"@bitwarden/common/models/request/reference-event.request\";\n\n@Component({\n selector: \"app-register-form\",\n templateUrl: \"./register-form.component.html\",\n})\nexport class RegisterFormComponent extends BaseRegisterComponent {\n @Input() queryParamEmail: string;\n @Input() enforcedPolicyOptions: MasterPasswordPolicyOptions;\n @Input() referenceDataValue: ReferenceEventRequest;\n\n showErrorSummary = false;\n\n constructor(\n formValidationErrorService: FormValidationErrorsService,\n formBuilder: UntypedFormBuilder,\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n cryptoService: CryptoService,\n apiService: ApiService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n private policyService: PolicyService,\n environmentService: EnvironmentService,\n logService: LogService\n ) {\n super(\n formValidationErrorService,\n formBuilder,\n authService,\n router,\n i18nService,\n cryptoService,\n apiService,\n stateService,\n platformUtilsService,\n passwordGenerationService,\n environmentService,\n logService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n this.referenceData = this.referenceDataValue;\n\n if (this.queryParamEmail) {\n this.formGroup.get(\"email\")?.setValue(this.queryParamEmail);\n }\n }\n\n async submit() {\n if (\n this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n this.passwordStrengthResult.score,\n this.formGroup.value.masterPassword,\n this.enforcedPolicyOptions\n )\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordPolicyRequirementsNotMet\")\n );\n return;\n }\n\n await super.submit(false);\n }\n}\n","
\n \n \n
\n
\n
\n
\n
\n
\n \n\n
\n
\n
\n
\n \n \n

The Bitwarden Password Manager

\n

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

\n

Store logins, secure notes, and more

\n

Collaborate and share securely

\n

Access anywhere on any device

\n

Create your account to get started

\n
\n\n \n
\n

\n Start Your Teams
Enterprise Free Trial Now\n

\n

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

\n

Collaborate and share securely

\n

Deploy and manage quickly and easily

\n

Access anywhere on any device

\n

Create your account to get started

\n
\n\n \n
\n

\n Start Your Teams
Enterprise Free Trial Now\n

\n

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

\n

Collaborate and share securely

\n

Deploy and manage quickly and easily

\n

Access anywhere on any device

\n

Create your account to get started

\n
\n\n \n
\n

Start Your Premium Account Now

\n

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

\n

Store logins, secure notes, and more

\n

Secure your account with advanced two-step login

\n

Access anywhere on any device

\n

Create your account to get started

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

{{ \"createAccount\" | i18n }}

\n
\n
\n \n {{ \"createOrganizationCreatePersonalAccount\" | i18n }}\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n \n \n \n
\n
\n \"No more excuses; start using Bitwarden today. The identity you save could be your\n own. The money definitely will be.\"\n
\n
\n
\n\n \n
\n
\n \n \n \n
\n
\n “Bitwarden boasts the backing of some of the world's best security experts and an\n attractive, easy-to-use interface”\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nimport { RegisterComponent as BaseRegisterComponent } from \"@bitwarden/angular/components/register.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { FormValidationErrorsService } from \"@bitwarden/common/abstractions/formValidationErrors.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { PolicyData } from \"@bitwarden/common/models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { ReferenceEventRequest } from \"@bitwarden/common/models/request/reference-event.request\";\n\nimport { RouterService } from \"../core\";\n\n@Component({\n selector: \"app-register\",\n templateUrl: \"register.component.html\",\n})\nexport class RegisterComponent extends BaseRegisterComponent implements OnInit, OnDestroy {\n email = \"\";\n showCreateOrgMessage = false;\n layout = \"\";\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n\n private policies: Policy[];\n private destroy$ = new Subject();\n\n constructor(\n formValidationErrorService: FormValidationErrorsService,\n formBuilder: UntypedFormBuilder,\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n cryptoService: CryptoService,\n apiService: ApiService,\n private route: ActivatedRoute,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n private policyApiService: PolicyApiServiceAbstraction,\n private policyService: PolicyService,\n environmentService: EnvironmentService,\n logService: LogService,\n private routerService: RouterService\n ) {\n super(\n formValidationErrorService,\n formBuilder,\n authService,\n router,\n i18nService,\n cryptoService,\n apiService,\n stateService,\n platformUtilsService,\n passwordGenerationService,\n environmentService,\n logService\n );\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n this.route.queryParams.pipe(first()).subscribe((qParams) => {\n this.referenceData = new ReferenceEventRequest();\n if (qParams.email != null && qParams.email.indexOf(\"@\") > -1) {\n this.email = qParams.email;\n }\n if (qParams.premium != null) {\n this.routerService.setPreviousUrl(\"/settings/premium\");\n } else if (qParams.org != null) {\n this.showCreateOrgMessage = true;\n this.referenceData.flow = qParams.org;\n const route = this.router.createUrlTree([\"create-organization\"], {\n queryParams: { plan: qParams.org },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n if (qParams.layout != null) {\n this.layout = this.referenceData.layout = qParams.layout;\n }\n if (qParams.reference != null) {\n this.referenceData.id = qParams.reference;\n } else {\n this.referenceData.id = (\"; \" + document.cookie)\n .split(\"; reference=\")\n .pop()\n .split(\";\")\n .shift();\n }\n // Are they coming from an email for sponsoring a families organization\n if (qParams.sponsorshipToken != null) {\n // After logging in redirect them to setup the families sponsorship\n const route = this.router.createUrlTree([\"setup/families-for-enterprise\"], {\n queryParams: { plan: qParams.sponsorshipToken },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n if (this.referenceData.id === \"\") {\n this.referenceData.id = null;\n }\n });\n const invite = await this.stateService.getOrganizationInvitation();\n if (invite != null) {\n try {\n const policies = await this.policyApiService.getPoliciesByToken(\n invite.organizationId,\n invite.token,\n invite.email,\n invite.organizationUserId\n );\n if (policies.data != null) {\n const policiesData = policies.data.map((p) => new PolicyData(p));\n this.policies = policiesData.map((p) => new Policy(p));\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n if (this.policies != null) {\n this.policyService\n .masterPasswordPolicyOptions$(this.policies)\n .pipe(takeUntil(this.destroy$))\n .subscribe((enforcedPasswordPolicyOptions) => {\n this.enforcedPolicyOptions = enforcedPasswordPolicyOptions;\n });\n }\n\n await super.ngOnInit();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Directive()\nexport class RemovePasswordComponent implements OnInit {\n actionPromise: Promise;\n continuing = false;\n leaving = false;\n\n loading = true;\n organization: Organization;\n email: string;\n\n constructor(\n private router: Router,\n private stateService: StateService,\n private syncService: SyncService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private keyConnectorService: KeyConnectorService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n this.organization = await this.keyConnectorService.getManagingOrganization();\n this.email = await this.stateService.getEmail();\n await this.syncService.fullSync(false);\n this.loading = false;\n }\n\n async convert() {\n this.continuing = true;\n this.actionPromise = this.keyConnectorService.migrateUser();\n\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedMasterPassword\")\n );\n await this.keyConnectorService.removeConvertAccountRequired();\n this.router.navigate([\"\"]);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), e.message);\n }\n }\n\n async leave() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"leaveOrganizationConfirmation\"),\n this.organization.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.leaving = true;\n this.actionPromise = this.organizationApiService.leave(this.organization.id);\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"leftOrganization\"));\n await this.keyConnectorService.removeConvertAccountRequired();\n this.router.navigate([\"\"]);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), e);\n }\n }\n}\n","
\n
\n \"Bitwarden\"\n

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

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

{{ \"removeMasterPassword\" | i18n }}

\n
\n
\n
\n

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

\n\n \n \n {{ \"removeMasterPassword\" | i18n }}\n \n \n \n {{ \"leaveOrganization\" | i18n }}\n \n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { RemovePasswordComponent as BaseRemovePasswordComponent } from \"@bitwarden/angular/components/remove-password.component\";\n\n@Component({\n selector: \"app-remove-password\",\n templateUrl: \"remove-password.component.html\",\n})\nexport class RemovePasswordComponent extends BaseRemovePasswordComponent {}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class OrganizationUserResetPasswordEnrollmentRequest extends SecretVerificationRequest {\n resetPasswordKey: string;\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { KeysRequest } from \"./keys.request\";\n\nexport class SetPasswordRequest {\n masterPasswordHash: string;\n key: string;\n masterPasswordHint: string;\n keys: KeysRequest;\n kdf: KdfType;\n kdfIterations: number;\n orgIdentifier: string;\n\n constructor(\n masterPasswordHash: string,\n key: string,\n masterPasswordHint: string,\n kdf: KdfType,\n kdfIterations: number,\n orgIdentifier: string,\n keys: KeysRequest\n ) {\n this.masterPasswordHash = masterPasswordHash;\n this.key = key;\n this.masterPasswordHint = masterPasswordHint;\n this.kdf = kdf;\n this.kdfIterations = kdfIterations;\n this.orgIdentifier = orgIdentifier;\n this.keys = keys;\n }\n}\n","import { Directive, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { KdfType } from \"@bitwarden/common/enums/kdfType\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\n\nimport { PasswordColorText } from \"../shared/components/password-strength/password-strength.component\";\n\n@Directive()\nexport class ChangePasswordComponent implements OnInit, OnDestroy {\n masterPassword: string;\n masterPasswordRetype: string;\n formPromise: Promise;\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n passwordStrengthResult: any;\n color: string;\n text: string;\n\n protected email: string;\n protected kdf: KdfType;\n protected kdfIterations: number;\n\n protected destroy$ = new Subject();\n\n constructor(\n protected i18nService: I18nService,\n protected cryptoService: CryptoService,\n protected messagingService: MessagingService,\n protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService,\n protected policyService: PolicyService,\n protected stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.email = await this.stateService.getEmail();\n this.policyService\n .masterPasswordPolicyOptions$()\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (enforcedPasswordPolicyOptions) =>\n (this.enforcedPolicyOptions ??= enforcedPasswordPolicyOptions)\n );\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async submit() {\n if (!(await this.strongPassword())) {\n return;\n }\n\n if (!(await this.setupSubmitActions())) {\n return;\n }\n\n const email = await this.stateService.getEmail();\n if (this.kdf == null) {\n this.kdf = await this.stateService.getKdfType();\n }\n if (this.kdfIterations == null) {\n this.kdfIterations = await this.stateService.getKdfIterations();\n }\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n email.trim().toLowerCase(),\n this.kdf,\n this.kdfIterations\n );\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n let encKey: [SymmetricCryptoKey, EncString] = null;\n const existingEncKey = await this.cryptoService.getEncKey();\n if (existingEncKey == null) {\n encKey = await this.cryptoService.makeEncKey(key);\n } else {\n encKey = await this.cryptoService.remakeEncKey(key);\n }\n\n await this.performSubmitActions(masterPasswordHash, key, encKey);\n }\n\n async setupSubmitActions(): Promise {\n // Override in sub-class\n // Can be used for additional validation and/or other processes the should occur before changing passwords\n return true;\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n // Override in sub-class\n }\n\n async strongPassword(): Promise {\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordRequired\")\n );\n return false;\n }\n if (this.masterPassword.length < 8) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordMinlength\")\n );\n return false;\n }\n if (this.masterPassword !== this.masterPasswordRetype) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassDoesntMatch\")\n );\n return false;\n }\n\n const strengthResult = this.passwordStrengthResult;\n\n if (\n this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n strengthResult.score,\n this.masterPassword,\n this.enforcedPolicyOptions\n )\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordPolicyRequirementsNotMet\")\n );\n return false;\n }\n\n if (strengthResult != null && strengthResult.score < 3) {\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"weakMasterPasswordDesc\"),\n this.i18nService.t(\"weakMasterPassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n return false;\n }\n }\n\n return true;\n }\n\n async logOut() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"logOutConfirmation\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"cancel\")\n );\n if (confirmed) {\n this.messagingService.send(\"logout\");\n }\n }\n\n getStrengthResult(result: any) {\n this.passwordStrengthResult = result;\n }\n\n getPasswordScoreText(event: PasswordColorText) {\n this.color = event.color;\n this.text = event.text;\n }\n}\n","import { Directive } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { HashPurpose } from \"@bitwarden/common/enums/hashPurpose\";\nimport { DEFAULT_KDF_ITERATIONS, DEFAULT_KDF_TYPE } from \"@bitwarden/common/enums/kdfType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { KeysRequest } from \"@bitwarden/common/models/request/keys.request\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/models/request/organization-user-reset-password-enrollment.request\";\nimport { SetPasswordRequest } from \"@bitwarden/common/models/request/set-password.request\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"./change-password.component\";\n\n@Directive()\nexport class SetPasswordComponent extends BaseChangePasswordComponent {\n syncLoading = true;\n showPassword = false;\n hint = \"\";\n identifier: string = null;\n orgId: string;\n resetPasswordAutoEnroll = false;\n\n onSuccessfulChangePassword: () => Promise;\n successRoute = \"vault\";\n\n constructor(\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n private policyApiService: PolicyApiServiceAbstraction,\n policyService: PolicyService,\n protected router: Router,\n private apiService: ApiService,\n private syncService: SyncService,\n private route: ActivatedRoute,\n stateService: StateService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n await this.syncService.fullSync(true);\n this.syncLoading = false;\n\n // eslint-disable-next-line rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n }\n });\n\n // Automatic Enrollment Detection\n if (this.identifier != null) {\n try {\n const response = await this.organizationApiService.getAutoEnrollStatus(this.identifier);\n this.orgId = response.id;\n this.resetPasswordAutoEnroll = response.resetPasswordEnabled;\n this.enforcedPolicyOptions =\n await this.policyApiService.getMasterPasswordPoliciesForInvitedUsers(this.orgId);\n } catch {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n }\n\n super.ngOnInit();\n }\n\n async setupSubmitActions() {\n this.kdf = DEFAULT_KDF_TYPE;\n this.kdfIterations = DEFAULT_KDF_ITERATIONS;\n return true;\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n const request = new SetPasswordRequest(\n masterPasswordHash,\n encKey[1].encryptedString,\n this.hint,\n this.kdf,\n this.kdfIterations,\n this.identifier,\n new KeysRequest(keys[0], keys[1].encryptedString)\n );\n try {\n if (this.resetPasswordAutoEnroll) {\n this.formPromise = this.apiService\n .setPassword(request)\n .then(async () => {\n await this.onSetPasswordSuccess(key, encKey, keys);\n return this.organizationApiService.getKeys(this.orgId);\n })\n .then(async (response) => {\n if (response == null) {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n const userId = await this.stateService.getUserId();\n const publicKey = Utils.fromB64ToArray(response.publicKey);\n\n // RSA Encrypt user's encKey.key with organization public key\n const userEncKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(\n userEncKey.key,\n publicKey.buffer\n );\n\n const resetRequest = new OrganizationUserResetPasswordEnrollmentRequest();\n resetRequest.masterPasswordHash = masterPasswordHash;\n resetRequest.resetPasswordKey = encryptedKey.encryptedString;\n\n return this.apiService.putOrganizationUserResetPasswordEnrollment(\n this.orgId,\n userId,\n resetRequest\n );\n });\n } else {\n this.formPromise = this.apiService.setPassword(request).then(async () => {\n await this.onSetPasswordSuccess(key, encKey, keys);\n });\n }\n\n await this.formPromise;\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.router.navigate([this.successRoute]);\n }\n } catch {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n private async onSetPasswordSuccess(\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString],\n keys: [string, EncString]\n ) {\n await this.stateService.setKdfType(this.kdf);\n await this.stateService.setKdfIterations(this.kdfIterations);\n await this.cryptoService.setKey(key);\n await this.cryptoService.setEncKey(encKey[1].encryptedString);\n await this.cryptoService.setEncPrivateKey(keys[1].encryptedString);\n\n const localKeyHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n key,\n HashPurpose.LocalAuthorization\n );\n await this.cryptoService.setKeyHash(localKeyHash);\n }\n}\n","
\n
\n
\n

{{ \"setMasterPassword\" | i18n }}

\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n {{ \"ssoCompleteRegistration\" | i18n }}\n \n {{ \"resetPasswordAutoEnrollInviteWarning\" | i18n }}\n \n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n {{ \"masterPassDesc\" | i18n }}\n
\n
\n \n
\n \n \n \n \n
\n
\n
\n \n \n {{ \"masterPassHintDesc\" | i18n }}\n
\n
\n
\n \n \n {{ \"submit\" | i18n }}\n \n \n {{ \"logOut\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { SetPasswordComponent as BaseSetPasswordComponent } from \"@bitwarden/angular/components/set-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\n\n@Component({\n selector: \"app-set-password\",\n templateUrl: \"set-password.component.html\",\n})\nexport class SetPasswordComponent extends BaseSetPasswordComponent {\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n policyApiService: PolicyApiServiceAbstraction,\n policyService: PolicyService,\n router: Router,\n syncService: SyncService,\n route: ActivatedRoute,\n stateService: StateService,\n organizationApiService: OrganizationApiServiceAbstraction\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyApiService,\n policyService,\n router,\n apiService,\n syncService,\n route,\n stateService,\n organizationApiService\n );\n }\n}\n","import { Directive } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { AuthResult } from \"@bitwarden/common/models/domain/auth-result\";\nimport { SsoLogInCredentials } from \"@bitwarden/common/models/domain/log-in-credentials\";\nimport { SsoPreValidateResponse } from \"@bitwarden/common/models/response/sso-pre-validate.response\";\n\n@Directive()\nexport class SsoComponent {\n identifier: string;\n loggingIn = false;\n\n formPromise: Promise;\n initiateSsoFormPromise: Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n onSuccessfulLoginChangePasswordNavigate: () => Promise;\n onSuccessfulLoginForceResetNavigate: () => Promise;\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"lock\";\n protected changePasswordRoute = \"set-password\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n protected clientId: string;\n protected redirectUri: string;\n protected state: string;\n protected codeChallenge: string;\n\n constructor(\n protected authService: AuthService,\n protected router: Router,\n protected i18nService: I18nService,\n protected route: ActivatedRoute,\n protected stateService: StateService,\n protected platformUtilsService: PlatformUtilsService,\n protected apiService: ApiService,\n protected cryptoFunctionService: CryptoFunctionService,\n protected environmentService: EnvironmentService,\n protected passwordGenerationService: PasswordGenerationService,\n protected logService: LogService\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.code != null && qParams.state != null) {\n const codeVerifier = await this.stateService.getSsoCodeVerifier();\n const state = await this.stateService.getSsoState();\n await this.stateService.setSsoCodeVerifier(null);\n await this.stateService.setSsoState(null);\n if (\n qParams.code != null &&\n codeVerifier != null &&\n state != null &&\n this.checkState(state, qParams.state)\n ) {\n await this.logIn(\n qParams.code,\n codeVerifier,\n this.getOrgIdentifierFromState(qParams.state)\n );\n }\n } else if (\n qParams.clientId != null &&\n qParams.redirectUri != null &&\n qParams.state != null &&\n qParams.codeChallenge != null\n ) {\n this.redirectUri = qParams.redirectUri;\n this.state = qParams.state;\n this.codeChallenge = qParams.codeChallenge;\n this.clientId = qParams.clientId;\n }\n });\n }\n\n async submit(returnUri?: string, includeUserIdentifier?: boolean) {\n if (this.identifier == null || this.identifier === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"ssoValidationFailed\"),\n this.i18nService.t(\"ssoIdentifierRequired\")\n );\n return;\n }\n\n this.initiateSsoFormPromise = this.apiService.preValidateSso(this.identifier);\n const response = await this.initiateSsoFormPromise;\n\n const authorizeUrl = await this.buildAuthorizeUrl(\n returnUri,\n includeUserIdentifier,\n response.token\n );\n this.platformUtilsService.launchUri(authorizeUrl, { sameWindow: true });\n }\n\n protected async buildAuthorizeUrl(\n returnUri?: string,\n includeUserIdentifier?: boolean,\n token?: string\n ): Promise {\n let codeChallenge = this.codeChallenge;\n let state = this.state;\n\n const passwordOptions: any = {\n type: \"password\",\n length: 64,\n uppercase: true,\n lowercase: true,\n numbers: true,\n special: false,\n };\n\n if (codeChallenge == null) {\n const codeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n const codeVerifierHash = await this.cryptoFunctionService.hash(codeVerifier, \"sha256\");\n codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n await this.stateService.setSsoCodeVerifier(codeVerifier);\n }\n\n if (state == null) {\n state = await this.passwordGenerationService.generatePassword(passwordOptions);\n if (returnUri) {\n state += `_returnUri='${returnUri}'`;\n }\n }\n\n // Add Organization Identifier to state\n state += `_identifier=${this.identifier}`;\n\n // Save state (regardless of new or existing)\n await this.stateService.setSsoState(state);\n\n let authorizeUrl =\n this.environmentService.getIdentityUrl() +\n \"/connect/authorize?\" +\n \"client_id=\" +\n this.clientId +\n \"&redirect_uri=\" +\n encodeURIComponent(this.redirectUri) +\n \"&\" +\n \"response_type=code&scope=api offline_access&\" +\n \"state=\" +\n state +\n \"&code_challenge=\" +\n codeChallenge +\n \"&\" +\n \"code_challenge_method=S256&response_mode=query&\" +\n \"domain_hint=\" +\n encodeURIComponent(this.identifier) +\n \"&ssoToken=\" +\n encodeURIComponent(token);\n\n if (includeUserIdentifier) {\n const userIdentifier = await this.apiService.getSsoUserIdentifier();\n authorizeUrl += `&user_identifier=${encodeURIComponent(userIdentifier)}`;\n }\n\n return authorizeUrl;\n }\n\n private async logIn(code: string, codeVerifier: string, orgIdFromState: string) {\n this.loggingIn = true;\n try {\n const credentials = new SsoLogInCredentials(\n code,\n codeVerifier,\n this.redirectUri,\n orgIdFromState\n );\n this.formPromise = this.authService.logIn(credentials);\n const response = await this.formPromise;\n if (response.requiresTwoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute], {\n queryParams: {\n identifier: orgIdFromState,\n sso: \"true\",\n },\n });\n }\n } else if (response.resetMasterPassword) {\n if (this.onSuccessfulLoginChangePasswordNavigate != null) {\n this.onSuccessfulLoginChangePasswordNavigate();\n } else {\n this.router.navigate([this.changePasswordRoute], {\n queryParams: {\n identifier: orgIdFromState,\n },\n });\n }\n } else if (response.forcePasswordReset) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch (e) {\n this.logService.error(e);\n\n // TODO: Key Connector Service should pass this error message to the logout callback instead of displaying here\n if (e.message === \"Key Connector error\") {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"ssoKeyConnectorError\")\n );\n }\n }\n this.loggingIn = false;\n }\n\n private getOrgIdentifierFromState(state: string): string {\n if (state === null || state === undefined) {\n return null;\n }\n\n const stateSplit = state.split(\"_identifier=\");\n return stateSplit.length > 1 ? stateSplit[1] : null;\n }\n\n private checkState(state: string, checkState: string): boolean {\n if (state === null || state === undefined) {\n return false;\n }\n if (checkState === null || checkState === undefined) {\n return false;\n }\n\n const stateSplit = state.split(\"_identifier=\");\n const checkStateSplit = checkState.split(\"_identifier=\");\n return stateSplit[0] === checkStateSplit[0];\n }\n}\n","\n
\n
\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n

{{ \"ssoLogInWithOrgIdentifier\" | i18n }}

\n
\n \n \n
\n
\n
\n \n {{ \"logIn\" | i18n }} \n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { SsoComponent as BaseSsoComponent } from \"@bitwarden/angular/components/sso.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Component({\n selector: \"app-sso\",\n templateUrl: \"sso.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class SsoComponent extends BaseSsoComponent {\n constructor(\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n route: ActivatedRoute,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n cryptoFunctionService: CryptoFunctionService,\n environmentService: EnvironmentService,\n passwordGenerationService: PasswordGenerationService,\n logService: LogService\n ) {\n super(\n authService,\n router,\n i18nService,\n route,\n stateService,\n platformUtilsService,\n apiService,\n cryptoFunctionService,\n environmentService,\n passwordGenerationService,\n logService\n );\n this.redirectUri = window.location.origin + \"/sso-connector.html\";\n this.clientId = \"web\";\n }\n\n async ngOnInit() {\n super.ngOnInit();\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n } else {\n const storedIdentifier = await this.stateService.getSsoOrgIdentifier();\n if (storedIdentifier != null) {\n this.identifier = storedIdentifier;\n }\n }\n });\n }\n\n async submit() {\n await this.stateService.setSsoOrganizationIdentifier(this.identifier);\n if (this.clientId === \"browser\") {\n document.cookie = `ssoHandOffMessage=${this.i18nService.t(\"ssoHandOff\")};SameSite=strict`;\n }\n super.submit();\n }\n}\n","\n \n \n \n\n","import { CdkStep } from \"@angular/cdk/stepper\";\nimport { Component, Input } from \"@angular/core\";\n\n@Component({\n selector: \"app-vertical-step\",\n templateUrl: \"vertical-step.component.html\",\n providers: [{ provide: CdkStep, useExisting: VerticalStep }],\n})\nexport class VerticalStep extends CdkStep {\n @Input() subLabel = \"\";\n @Input() applyBorder = true;\n}\n","
\n \n \n {{ stepNumber }}\n \n \n \n \n \n \n {{ step.label }}\n

\n

{{ step.subLabel }}

\n
\n \n\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { VerticalStep } from \"./vertical-step.component\";\n\n@Component({\n selector: \"app-vertical-step-content\",\n templateUrl: \"vertical-step-content.component.html\",\n})\nexport class VerticalStepContentComponent {\n @Output() onSelectStep = new EventEmitter();\n\n @Input() disabled = false;\n @Input() selected = false;\n @Input() step: VerticalStep;\n @Input() stepNumber: number;\n\n selectStep() {\n this.onSelectStep.emit();\n }\n}\n","
\n
    \n
  • \n \n
\n \n \n \n\n","import { CdkStepper } from \"@angular/cdk/stepper\";\nimport { Component, Input } from \"@angular/core\";\n\n@Component({\n selector: \"app-vertical-stepper\",\n templateUrl: \"vertical-stepper.component.html\",\n providers: [{ provide: CdkStepper, useExisting: VerticalStepperComponent }],\n})\nexport class VerticalStepperComponent extends CdkStepper {\n @Input()\n activeClass = \"active\";\n\n isNextButtonHidden() {\n return !(this.steps.length === this.selectedIndex + 1);\n }\n\n isStepDisabled(index: number) {\n if (this.selectedIndex !== index) {\n return this.selectedIndex === index - 1\n ? !this.steps.find((_, i) => i == index - 1)?.completed\n : true;\n }\n return false;\n }\n\n selectStepByIndex(index: number): void {\n this.selectedIndex = index;\n }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-logo-forbes\",\n templateUrl: \"logo-forbes.component.html\",\n})\nexport class LogoForbesComponent {}\n","
\n
\n \n \n \n
\n
\n “Bitwarden boasts the backing of some of the world's best security experts and an attractive,\n easy-to-use interface”\n
\n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-logo-us-news\",\n templateUrl: \"logo-us-news.component.html\",\n})\nexport class LogoUSNewsComponent {}\n","\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-enterprise-content\",\n templateUrl: \"enterprise-content.component.html\",\n})\nexport class EnterpriseContentComponent {}\n","

The Bitwarden Password Manager

\n
\n

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

\n
\n
    \n
  • Store logins, secure notes, and more
  • \n
  • Collaborate and share securely
  • \n
  • Access anywhere on any device
  • \n
  • Create your account to get started
  • \n
\n
\n \n \n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-teams-content\",\n templateUrl: \"teams-content.component.html\",\n})\nexport class TeamsContentComponent {}\n","

The Bitwarden Password Manager

\n
\n

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

\n
\n
    \n
  • Store logins, secure notes, and more
  • \n
  • Collaborate and share securely
  • \n
  • Access anywhere on any device
  • \n
  • Create your account to get started
  • \n
\n
\n \n \n
\n","import { Component, Input } from \"@angular/core\";\n\n@Component({\n selector: \"app-trial-confirmation-details\",\n templateUrl: \"confirmation-details.component.html\",\n})\nexport class ConfirmationDetailsComponent {\n @Input() email: string;\n @Input() orgLabel: string;\n}\n","
\n

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

\n
    \n
  • \n

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

    \n
  • \n
  • \n

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

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

{{ \"billingPlanLabel\" | i18n }}

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

{{ \"paymentType\" | i18n }}

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

The Bitwarden Password Manager

\n
\n

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

\n
\n
    \n
  • Store logins, secure notes, and more
  • \n
  • Collaborate and share securely
  • \n
  • Access anywhere on any device
  • \n
  • Create your account to get started
  • \n
\n
\n \n \n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-enterprise1-content\",\n templateUrl: \"enterprise1-content.component.html\",\n})\nexport class Enterprise1ContentComponent {}\n","

The Bitwarden Password Manager

\n
\n

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

\n
\n
    \n
  • Store logins, secure notes, and more
  • \n
  • Collaborate and share securely
  • \n
  • Access anywhere on any device
  • \n
  • Create your account to get started
  • \n
\n
\n \n \n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-enterprise2-content\",\n templateUrl: \"enterprise2-content.component.html\",\n})\nexport class Enterprise2ContentComponent {}\n","

Start Your Enterprise Free Trial Now

\n
\n

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

\n
\n
    \n
  • Collaborate and share securely
  • \n
  • Deploy and manage quickly and easily
  • \n
  • Access anywhere on any device
  • \n
  • Create your account to get started
  • \n
\n
\n \n \n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-teams1-content\",\n templateUrl: \"teams1-content.component.html\",\n})\nexport class Teams1ContentComponent {}\n","

Start Your Teams Free Trial Now

\n
\n

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

\n
\n
    \n
  • Collaborate and share securely
  • \n
  • Deploy and manage quickly and easily
  • \n
  • Access anywhere on any device
  • \n
  • Create your account to get started
  • \n
\n
\n \n \n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-teams2-content\",\n templateUrl: \"teams2-content.component.html\",\n})\nexport class Teams2ContentComponent {}\n","

Start Your Free Trial Now

\n
\n

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

\n
\n
    \n
  • Collaborate and share securely
  • \n
  • Deploy and manage quickly and easily
  • \n
  • Access anywhere on any device
  • \n
  • Create your account to get started
  • \n
\n
\n \n \n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-logo-cnet\",\n templateUrl: \"logo-cnet.component.html\",\n})\nexport class LogoCnetComponent {}\n","
\n
\n \n \n \n
\n
\n \"No more excuses; start using Bitwarden today. The identity you save could be your own. The\n money definitely will be.\"\n
\n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-cnet-enterprise-content\",\n templateUrl: \"cnet-enterprise-content.component.html\",\n})\nexport class CnetEnterpriseContentComponent {}\n","

Start Your Enterprise Free Trial Now

\n
\n

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

\n
\n
    \n
  • Collaborate and share securely
  • \n
  • Deploy and manage quickly and easily
  • \n
  • Access anywhere on any device
  • \n
  • Create your account to get started
  • \n
\n
\n \n \n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-cnet-individual-content\",\n templateUrl: \"cnet-individual-content.component.html\",\n})\nexport class CnetIndividualContentComponent {}\n","

Start Your Premium Account Now

\n
\n

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

\n
\n
    \n
  • Store logins, secure notes, and more
  • \n
  • Secure your account with advanced two-step login
  • \n
  • Access anywhere on any device
  • \n
  • Create your account to get started
  • \n
\n
\n \n \n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-cnet-teams-content\",\n templateUrl: \"cnet-teams-content.component.html\",\n})\nexport class CnetTeamsContentComponent {}\n","

Start Your Teams Free Trial Now

\n
\n

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

\n
\n
    \n
  • Collaborate and share securely
  • \n
  • Deploy and manage quickly and easily
  • \n
  • Access anywhere on any device
  • \n
  • Create your account to get started
  • \n
\n
\n \n \n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-abm-enterprise-content\",\n templateUrl: \"abm-enterprise-content.component.html\",\n})\nexport class AbmEnterpriseContentComponent {}\n","

The Bitwarden Password Manager

\n
\n

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

\n
\n
    \n
  • Store logins, secure notes, and more
  • \n
  • Collaborate and share securely
  • \n
  • Access anywhere on any device
  • \n
  • Create your account to get started
  • \n
\n
\n \n \n
\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-abm-teams-content\",\n templateUrl: \"abm-teams-content.component.html\",\n})\nexport class AbmTeamsContentComponent {}\n","

The Bitwarden Password Manager

\n
\n

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

\n
\n
    \n
  • Store logins, secure notes, and more
  • \n
  • Collaborate and share securely
  • \n
  • Access anywhere on any device
  • \n
  • Create your account to get started
  • \n
\n
\n \n \n
\n","
\n

{{ \"createAccount\" | i18n }}

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

\n Start your 7-Day free trial of Bitwarden for {{ org }}\n

\n
\n \n \n \n \n \n \n \n Next\n \n \n \n \n \n \n \n
\n \n \n Invite Users\n \n
\n
\n
\n
\n
\n
\n
\n
\n","import { StepperSelectionEvent } from \"@angular/cdk/stepper\";\nimport { TitleCasePipe } from \"@angular/common\";\nimport { Component, OnDestroy, OnInit, ViewChild } from \"@angular/core\";\nimport { UntypedFormBuilder, Validators } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first, Subject, takeUntil } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { PlanType } from \"@bitwarden/common/enums/planType\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\nimport { PolicyData } from \"@bitwarden/common/models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { ReferenceEventRequest } from \"@bitwarden/common/models/request/reference-event.request\";\n\nimport { RouterService } from \"./../../core/router.service\";\nimport { VerticalStepperComponent } from \"./vertical-stepper/vertical-stepper.component\";\n\n@Component({\n selector: \"app-trial\",\n templateUrl: \"trial-initiation.component.html\",\n})\nexport class TrialInitiationComponent implements OnInit, OnDestroy {\n email = \"\";\n org = \"\";\n orgInfoSubLabel = \"\";\n orgId = \"\";\n orgLabel = \"\";\n billingSubLabel = \"\";\n layout = \"default\";\n plan: PlanType;\n product: ProductType;\n accountCreateOnly = true;\n policies: Policy[];\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n validOrgs: string[] = [\"teams\", \"enterprise\", \"families\"];\n referenceData: ReferenceEventRequest;\n @ViewChild(\"stepper\", { static: false }) verticalStepper: VerticalStepperComponent;\n\n orgInfoFormGroup = this.formBuilder.group({\n name: [\"\", [Validators.required]],\n email: [\"\"],\n });\n\n private set referenceDataId(referenceId: string) {\n if (referenceId != null) {\n this.referenceData.id = referenceId;\n } else {\n this.referenceData.id = (\"; \" + document.cookie)\n .split(\"; reference=\")\n .pop()\n .split(\";\")\n .shift();\n }\n\n if (this.referenceData.id === \"\") {\n this.referenceData.id = null;\n }\n }\n\n private destroy$ = new Subject();\n\n constructor(\n private route: ActivatedRoute,\n protected router: Router,\n private formBuilder: UntypedFormBuilder,\n private titleCasePipe: TitleCasePipe,\n private stateService: StateService,\n private logService: LogService,\n private policyApiService: PolicyApiServiceAbstraction,\n private policyService: PolicyService,\n private i18nService: I18nService,\n private routerService: RouterService\n ) {}\n\n async ngOnInit(): Promise {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n this.route.queryParams.pipe(first()).subscribe((qParams) => {\n this.referenceData = new ReferenceEventRequest();\n if (qParams.email != null && qParams.email.indexOf(\"@\") > -1) {\n this.email = qParams.email;\n }\n\n this.referenceDataId = qParams.reference;\n\n if (!qParams.org) {\n return;\n }\n\n if (qParams.layout) {\n this.layout = qParams.layout;\n }\n\n if (this.validOrgs.includes(qParams.org)) {\n this.org = qParams.org;\n } else {\n this.org = \"families\";\n }\n\n this.referenceData.flow = qParams.org;\n\n // Are they coming from an email for sponsoring a families organization\n // After logging in redirect them to setup the families sponsorship\n this.setupFamilySponsorship(qParams.sponsorshipToken);\n\n this.orgLabel = this.titleCasePipe.transform(this.org);\n this.accountCreateOnly = false;\n\n if (this.org === \"families\") {\n this.plan = PlanType.FamiliesAnnually;\n this.product = ProductType.Families;\n } else if (this.org === \"teams\") {\n this.plan = PlanType.TeamsAnnually;\n this.product = ProductType.Teams;\n } else if (this.org === \"enterprise\") {\n this.plan = PlanType.EnterpriseAnnually;\n this.product = ProductType.Enterprise;\n }\n });\n\n const invite = await this.stateService.getOrganizationInvitation();\n if (invite != null) {\n try {\n const policies = await this.policyApiService.getPoliciesByToken(\n invite.organizationId,\n invite.token,\n invite.email,\n invite.organizationUserId\n );\n if (policies.data != null) {\n const policiesData = policies.data.map((p) => new PolicyData(p));\n this.policies = policiesData.map((p) => new Policy(p));\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n if (this.policies != null) {\n this.policyService\n .masterPasswordPolicyOptions$(this.policies)\n .pipe(takeUntil(this.destroy$))\n .subscribe((enforcedPasswordPolicyOptions) => {\n this.enforcedPolicyOptions = enforcedPasswordPolicyOptions;\n });\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n stepSelectionChange(event: StepperSelectionEvent) {\n // Set org info sub label\n if (event.selectedIndex === 1 && this.orgInfoFormGroup.controls.name.value === \"\") {\n this.orgInfoSubLabel =\n \"Enter your \" + this.titleCasePipe.transform(this.org) + \" organization information\";\n } else if (event.previouslySelectedIndex === 1) {\n this.orgInfoSubLabel = this.orgInfoFormGroup.controls.name.value;\n }\n\n //set billing sub label\n if (event.selectedIndex === 2) {\n this.billingSubLabel = this.i18nService.t(\"billingTrialSubLabel\");\n }\n }\n\n createdAccount(email: string) {\n this.email = email;\n this.orgInfoFormGroup.get(\"email\")?.setValue(email);\n this.verticalStepper.next();\n }\n\n billingSuccess(event: any) {\n this.orgId = event?.orgId;\n this.billingSubLabel = event?.subLabelText;\n this.verticalStepper.next();\n }\n\n navigateToOrgVault() {\n this.router.navigate([\"organizations\", this.orgId, \"vault\"]);\n }\n\n navigateToOrgInvite() {\n this.router.navigate([\"organizations\", this.orgId, \"manage\", \"people\"]);\n }\n\n previousStep() {\n this.verticalStepper.previous();\n }\n\n private setupFamilySponsorship(sponsorshipToken: string) {\n if (sponsorshipToken != null) {\n const route = this.router.createUrlTree([\"setup/families-for-enterprise\"], {\n queryParams: { plan: sponsorshipToken },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n }\n}\n","import { I18nService } from \"../abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\n\nexport class WebAuthnIFrame {\n private iframe: HTMLIFrameElement = null;\n private connectorLink: HTMLAnchorElement;\n private parseFunction = this.parseMessage.bind(this);\n\n constructor(\n private win: Window,\n private webVaultUrl: string,\n private webAuthnNewTab: boolean,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private successCallback: Function, // eslint-disable-line\n private errorCallback: Function, // eslint-disable-line\n private infoCallback: Function // eslint-disable-line\n ) {\n this.connectorLink = win.document.createElement(\"a\");\n }\n\n init(data: any): void {\n const params = new URLSearchParams({\n data: this.base64Encode(JSON.stringify(data)),\n parent: encodeURIComponent(this.win.document.location.href),\n btnText: encodeURIComponent(this.i18nService.t(\"webAuthnAuthenticate\")),\n v: \"1\",\n });\n\n if (this.webAuthnNewTab) {\n // Firefox fallback which opens the webauthn page in a new tab\n params.append(\"locale\", this.i18nService.translationLocale);\n this.platformUtilsService.launchUri(\n `${this.webVaultUrl}/webauthn-fallback-connector.html?${params}`\n );\n } else {\n this.connectorLink.href = `${this.webVaultUrl}/webauthn-connector.html?${params}`;\n this.iframe = this.win.document.getElementById(\"webauthn_iframe\") as HTMLIFrameElement;\n this.iframe.allow = \"publickey-credentials-get \" + new URL(this.webVaultUrl).origin;\n this.iframe.src = this.connectorLink.href;\n\n this.win.addEventListener(\"message\", this.parseFunction, false);\n }\n }\n\n stop() {\n this.sendMessage(\"stop\");\n }\n\n start() {\n this.sendMessage(\"start\");\n }\n\n sendMessage(message: any) {\n if (!this.iframe || !this.iframe.src || !this.iframe.contentWindow) {\n return;\n }\n\n this.iframe.contentWindow.postMessage(message, this.iframe.src);\n }\n\n base64Encode(str: string): string {\n return btoa(\n encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode((\"0x\" + p1) as any);\n })\n );\n }\n\n cleanup() {\n this.win.removeEventListener(\"message\", this.parseFunction, false);\n }\n\n private parseMessage(event: MessageEvent) {\n if (!this.validMessage(event)) {\n return;\n }\n\n const parts: string[] = event.data.split(\"|\");\n if (parts[0] === \"success\" && this.successCallback) {\n this.successCallback(parts[1]);\n } else if (parts[0] === \"error\" && this.errorCallback) {\n this.errorCallback(parts[1]);\n } else if (parts[0] === \"info\" && this.infoCallback) {\n this.infoCallback(parts[1]);\n }\n }\n\n private validMessage(event: MessageEvent) {\n if (\n event.origin == null ||\n event.origin === \"\" ||\n event.origin !== (this.connectorLink as any).origin ||\n event.data == null ||\n typeof event.data !== \"string\"\n ) {\n return false;\n }\n\n return (\n event.data.indexOf(\"success|\") === 0 ||\n event.data.indexOf(\"error|\") === 0 ||\n event.data.indexOf(\"info|\") === 0\n );\n }\n}\n","import { Directive, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport * as DuoWebSDK from \"duo_web_sdk\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AppIdService } from \"@bitwarden/common/abstractions/appId.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TwoFactorService } from \"@bitwarden/common/abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\nimport { WebAuthnIFrame } from \"@bitwarden/common/misc/webauthn_iframe\";\nimport { AuthResult } from \"@bitwarden/common/models/domain/auth-result\";\nimport { TokenTwoFactorRequest } from \"@bitwarden/common/models/request/identity-token/token-two-factor.request\";\nimport { TwoFactorEmailRequest } from \"@bitwarden/common/models/request/two-factor-email.request\";\nimport { TwoFactorProviders } from \"@bitwarden/common/services/twoFactor.service\";\n\nimport { CaptchaProtectedComponent } from \"./captchaProtected.component\";\n\n@Directive()\nexport class TwoFactorComponent extends CaptchaProtectedComponent implements OnInit, OnDestroy {\n token = \"\";\n remember = false;\n webAuthnReady = false;\n webAuthnNewTab = false;\n providers = TwoFactorProviders;\n providerType = TwoFactorProviderType;\n selectedProviderType: TwoFactorProviderType = TwoFactorProviderType.Authenticator;\n webAuthnSupported = false;\n webAuthn: WebAuthnIFrame = null;\n title = \"\";\n twoFactorEmail: string = null;\n formPromise: Promise;\n emailPromise: Promise;\n identifier: string = null;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n\n get webAuthnAllow(): string {\n return `publickey-credentials-get ${this.environmentService.getWebVaultUrl()}`;\n }\n\n protected loginRoute = \"login\";\n protected successRoute = \"vault\";\n\n constructor(\n protected authService: AuthService,\n protected router: Router,\n protected i18nService: I18nService,\n protected apiService: ApiService,\n protected platformUtilsService: PlatformUtilsService,\n protected win: Window,\n protected environmentService: EnvironmentService,\n protected stateService: StateService,\n protected route: ActivatedRoute,\n protected logService: LogService,\n protected twoFactorService: TwoFactorService,\n protected appIdService: AppIdService,\n protected loginService: LoginService\n ) {\n super(environmentService, i18nService, platformUtilsService);\n this.webAuthnSupported = this.platformUtilsService.supportsWebAuthn(win);\n }\n\n async ngOnInit() {\n if (!this.authing || this.twoFactorService.getProviders() == null) {\n this.router.navigate([this.loginRoute]);\n return;\n }\n\n this.route.queryParams.pipe(first()).subscribe((qParams) => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n }\n });\n\n if (this.needsLock) {\n this.successRoute = \"lock\";\n }\n\n if (this.win != null && this.webAuthnSupported) {\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n this.webAuthn = new WebAuthnIFrame(\n this.win,\n webVaultUrl,\n this.webAuthnNewTab,\n this.platformUtilsService,\n this.i18nService,\n (token: string) => {\n this.token = token;\n this.submit();\n },\n (error: string) => {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), error);\n },\n (info: string) => {\n if (info === \"ready\") {\n this.webAuthnReady = true;\n }\n }\n );\n }\n\n this.selectedProviderType = this.twoFactorService.getDefaultProvider(this.webAuthnSupported);\n await this.init();\n }\n\n ngOnDestroy(): void {\n this.cleanupWebAuthn();\n this.webAuthn = null;\n }\n\n async init() {\n if (this.selectedProviderType == null) {\n this.title = this.i18nService.t(\"loginUnavailable\");\n return;\n }\n\n this.cleanupWebAuthn();\n this.title = (TwoFactorProviders as any)[this.selectedProviderType].name;\n const providerData = this.twoFactorService.getProviders().get(this.selectedProviderType);\n switch (this.selectedProviderType) {\n case TwoFactorProviderType.WebAuthn:\n if (!this.webAuthnNewTab) {\n setTimeout(() => {\n this.authWebAuthn();\n }, 500);\n }\n break;\n case TwoFactorProviderType.Duo:\n case TwoFactorProviderType.OrganizationDuo:\n setTimeout(() => {\n DuoWebSDK.init({\n iframe: undefined,\n host: providerData.Host,\n sig_request: providerData.Signature,\n submit_callback: async (f: HTMLFormElement) => {\n const sig = f.querySelector('input[name=\"sig_response\"]') as HTMLInputElement;\n if (sig != null) {\n this.token = sig.value;\n await this.submit();\n }\n },\n });\n }, 0);\n break;\n case TwoFactorProviderType.Email:\n this.twoFactorEmail = providerData.Email;\n if (this.twoFactorService.getProviders().size > 1) {\n await this.sendEmail(false);\n }\n break;\n default:\n break;\n }\n }\n\n async submit() {\n await this.setupCaptcha();\n\n if (this.token == null || this.token === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"verificationCodeRequired\")\n );\n return;\n }\n\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn) {\n if (this.webAuthn != null) {\n this.webAuthn.stop();\n } else {\n return;\n }\n } else if (\n this.selectedProviderType === TwoFactorProviderType.Email ||\n this.selectedProviderType === TwoFactorProviderType.Authenticator\n ) {\n this.token = this.token.replace(\" \", \"\").trim();\n }\n\n try {\n await this.doSubmit();\n } catch {\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn && this.webAuthn != null) {\n this.webAuthn.start();\n }\n }\n }\n\n async doSubmit() {\n this.formPromise = this.authService.logInTwoFactor(\n new TokenTwoFactorRequest(this.selectedProviderType, this.token, this.remember),\n this.captchaToken\n );\n const response: AuthResult = await this.formPromise;\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n if (this.handleCaptchaRequired(response)) {\n return;\n }\n if (this.onSuccessfulLogin != null) {\n this.loginService.clearValues();\n this.onSuccessfulLogin();\n }\n if (response.resetMasterPassword) {\n this.successRoute = \"set-password\";\n }\n if (response.forcePasswordReset) {\n this.successRoute = \"update-temp-password\";\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.loginService.clearValues();\n this.onSuccessfulLoginNavigate();\n } else {\n this.loginService.clearValues();\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.identifier,\n },\n });\n }\n }\n\n async sendEmail(doToast: boolean) {\n if (this.selectedProviderType !== TwoFactorProviderType.Email) {\n return;\n }\n\n if (this.emailPromise != null) {\n return;\n }\n\n try {\n const request = new TwoFactorEmailRequest();\n request.email = this.authService.email;\n request.masterPasswordHash = this.authService.masterPasswordHash;\n request.deviceIdentifier = await this.appIdService.getAppId();\n request.authRequestAccessCode = this.authService.accessCode;\n request.authRequestId = this.authService.authRequestId;\n this.emailPromise = this.apiService.postTwoFactorEmail(request);\n await this.emailPromise;\n if (doToast) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"verificationCodeEmailSent\", this.twoFactorEmail)\n );\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n this.emailPromise = null;\n }\n\n authWebAuthn() {\n const providerData = this.twoFactorService.getProviders().get(this.selectedProviderType);\n\n if (!this.webAuthnSupported || this.webAuthn == null) {\n return;\n }\n\n this.webAuthn.init(providerData);\n }\n\n private cleanupWebAuthn() {\n if (this.webAuthn != null) {\n this.webAuthn.stop();\n this.webAuthn.cleanup();\n }\n }\n\n get authing(): boolean {\n return (\n this.authService.authingWithPassword() ||\n this.authService.authingWithSso() ||\n this.authService.authingWithApiKey() ||\n this.authService.authingWithPasswordless()\n );\n }\n\n get needsLock(): boolean {\n return this.authService.authingWithSso() || this.authService.authingWithApiKey();\n }\n}\n","import { Directive, EventEmitter, OnInit, Output } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { TwoFactorService } from \"@bitwarden/common/abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\n\n@Directive()\nexport class TwoFactorOptionsComponent implements OnInit {\n @Output() onProviderSelected = new EventEmitter();\n @Output() onRecoverSelected = new EventEmitter();\n\n providers: any[] = [];\n\n constructor(\n protected twoFactorService: TwoFactorService,\n protected router: Router,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected win: Window\n ) {}\n\n ngOnInit() {\n this.providers = this.twoFactorService.getSupportedProviders(this.win);\n }\n\n choose(p: any) {\n this.onProviderSelected.emit(p.type);\n }\n\n recover() {\n this.platformUtilsService.launchUri(\"https://bitwarden.com/help/lost-two-step-device/\");\n this.onRecoverSelected.emit();\n }\n}\n","
\n
\n
\n
\n

{{ \"twoStepOptions\" | i18n }}

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

{{ p.name }}

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

{{ \"recoveryCodeTitle\" | i18n }}

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

{{ title }}

\n
\n
\n \n

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

\n

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

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

{{ \"insertYubiKey\" | i18n }}

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

{{ \"noTwoStepProviders\" | i18n }}

\n

{{ \"noTwoStepProviders2\" | i18n }}

\n
\n
\n
\n \n
\n
\n \n \n {{ \"continue\" | i18n }}\n \n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n \n
\n
\n
\n \n\n\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { TwoFactorComponent as BaseTwoFactorComponent } from \"@bitwarden/angular/components/two-factor.component\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AppIdService } from \"@bitwarden/common/abstractions/appId.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TwoFactorService } from \"@bitwarden/common/abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/enums/twoFactorProviderType\";\n\nimport { RouterService } from \"../core\";\n\nimport { TwoFactorOptionsComponent } from \"./two-factor-options.component\";\n\n@Component({\n selector: \"app-two-factor\",\n templateUrl: \"two-factor.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class TwoFactorComponent extends BaseTwoFactorComponent {\n @ViewChild(\"twoFactorOptions\", { read: ViewContainerRef, static: true })\n twoFactorOptionsModal: ViewContainerRef;\n\n constructor(\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n apiService: ApiService,\n platformUtilsService: PlatformUtilsService,\n stateService: StateService,\n environmentService: EnvironmentService,\n private modalService: ModalService,\n route: ActivatedRoute,\n logService: LogService,\n twoFactorService: TwoFactorService,\n appIdService: AppIdService,\n private routerService: RouterService,\n loginService: LoginService\n ) {\n super(\n authService,\n router,\n i18nService,\n apiService,\n platformUtilsService,\n window,\n environmentService,\n stateService,\n route,\n logService,\n twoFactorService,\n appIdService,\n loginService\n );\n this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n }\n\n async anotherMethod() {\n const [modal] = await this.modalService.openViewRef(\n TwoFactorOptionsComponent,\n this.twoFactorOptionsModal,\n (comp) => {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onProviderSelected.subscribe(async (provider: TwoFactorProviderType) => {\n modal.close();\n this.selectedProviderType = provider;\n await this.init();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onRecoverSelected.subscribe(() => {\n modal.close();\n });\n }\n );\n }\n\n async goAfterLogIn() {\n this.loginService.clearValues();\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl) {\n this.router.navigateByUrl(previousUrl);\n } else {\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.identifier,\n },\n });\n }\n }\n}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class PasswordRequest extends SecretVerificationRequest {\n newMasterPasswordHash: string;\n masterPasswordHint: string;\n key: string;\n}\n","import { Directive } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { VerificationType } from \"@bitwarden/common/enums/verificationType\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { PasswordRequest } from \"@bitwarden/common/models/request/password.request\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"./change-password.component\";\n\n@Directive()\nexport class UpdatePasswordComponent extends BaseChangePasswordComponent {\n hint: string;\n key: string;\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n showPassword = false;\n currentMasterPassword: string;\n\n onSuccessfulChangePassword: () => Promise;\n\n constructor(\n protected router: Router,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n private apiService: ApiService,\n stateService: StateService,\n private userVerificationService: UserVerificationService,\n private logService: LogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n async cancel() {\n await this.stateService.setOrganizationInvitation(null);\n this.router.navigate([\"/vault\"]);\n }\n\n async setupSubmitActions(): Promise {\n if (this.currentMasterPassword == null || this.currentMasterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordRequired\")\n );\n return false;\n }\n\n const secret: Verification = {\n type: VerificationType.MasterPassword,\n secret: this.currentMasterPassword,\n };\n try {\n await this.userVerificationService.verifyUser(secret);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), e.message);\n return false;\n }\n\n this.kdf = await this.stateService.getKdfType();\n this.kdfIterations = await this.stateService.getKdfIterations();\n return true;\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n try {\n // Create Request\n const request = new PasswordRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(\n this.currentMasterPassword,\n null\n );\n request.newMasterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n\n // Update user's password\n this.apiService.postPassword(request);\n\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"masterPasswordChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.messagingService.send(\"logout\");\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n
\n

{{ \"updateMasterPassword\" | i18n }}

\n
\n
\n {{ \"masterPasswordInvalidWarning\" | i18n }} \n \n\n \n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n \n \n \n
\n
\n
\n
\n\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { UpdatePasswordComponent as BaseUpdatePasswordComponent } from \"@bitwarden/angular/components/update-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\n\n@Component({\n selector: \"app-update-password\",\n templateUrl: \"update-password.component.html\",\n})\nexport class UpdatePasswordComponent extends BaseUpdatePasswordComponent {\n constructor(\n router: Router,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n apiService: ApiService,\n logService: LogService,\n stateService: StateService,\n userVerificationService: UserVerificationService\n ) {\n super(\n router,\n i18nService,\n platformUtilsService,\n passwordGenerationService,\n policyService,\n cryptoService,\n messagingService,\n apiService,\n stateService,\n userVerificationService,\n logService\n );\n }\n}\n","export class OrganizationUserResetPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","import { OrganizationUserResetPasswordRequest } from \"./organization-user-reset-password.request\";\n\nexport class UpdateTempPasswordRequest extends OrganizationUserResetPasswordRequest {\n masterPasswordHint: string;\n}\n","import { Directive } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { UpdateTempPasswordRequest } from \"@bitwarden/common/models/request/update-temp-password.request\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"./change-password.component\";\n\n@Directive()\nexport class UpdateTempPasswordComponent extends BaseChangePasswordComponent {\n hint: string;\n key: string;\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n showPassword = false;\n\n onSuccessfulChangePassword: () => Promise;\n\n constructor(\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n private apiService: ApiService,\n stateService: StateService,\n private syncService: SyncService,\n private logService: LogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n await this.syncService.fullSync(true);\n super.ngOnInit();\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n async setupSubmitActions(): Promise {\n this.email = await this.stateService.getEmail();\n this.kdf = await this.stateService.getKdfType();\n this.kdfIterations = await this.stateService.getKdfIterations();\n return true;\n }\n\n async submit() {\n // Validation\n if (!(await this.strongPassword())) {\n return;\n }\n\n if (!(await this.setupSubmitActions())) {\n return;\n }\n\n try {\n // Create new key and hash new password\n const newKey = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email.trim().toLowerCase(),\n this.kdf,\n this.kdfIterations\n );\n const newPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey);\n\n // Grab user's current enc key\n const userEncKey = await this.cryptoService.getEncKey();\n\n // Create new encKey for the User\n const newEncKey = await this.cryptoService.remakeEncKey(newKey, userEncKey);\n\n await this.performSubmitActions(newPasswordHash, newKey, newEncKey);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n try {\n // Create request\n const request = new UpdateTempPasswordRequest();\n request.key = encKey[1].encryptedString;\n request.newMasterPasswordHash = masterPasswordHash;\n request.masterPasswordHint = this.hint;\n\n // Update user's password\n this.formPromise = this.apiService.putUpdateTempPassword(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"updatedMasterPassword\")\n );\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.messagingService.send(\"logout\");\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n
\n

{{ \"updateMasterPassword\" | i18n }}

\n
\n
\n {{ \"updateMasterPasswordWarning\" | i18n }} \n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n
\n
\n \n
\n \n \n \n \n
\n
\n
\n \n \n {{ \"masterPassHintDesc\" | i18n }}\n
\n
\n
\n \n \n {{ \"submit\" | i18n }}\n \n \n {{ \"logOut\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { UpdateTempPasswordComponent as BaseUpdateTempPasswordComponent } from \"@bitwarden/angular/components/update-temp-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\n\n@Component({\n selector: \"app-update-temp-password\",\n templateUrl: \"update-temp-password.component.html\",\n})\nexport class UpdateTempPasswordComponent extends BaseUpdateTempPasswordComponent {\n constructor(\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n apiService: ApiService,\n logService: LogService,\n stateService: StateService,\n syncService: SyncService\n ) {\n super(\n i18nService,\n platformUtilsService,\n passwordGenerationService,\n policyService,\n cryptoService,\n messagingService,\n apiService,\n stateService,\n syncService,\n logService\n );\n }\n}\n","export class VerifyEmailRequest {\n userId: string;\n token: string;\n\n constructor(userId: string, token: string) {\n this.userId = userId;\n this.token = token;\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { VerifyEmailRequest } from \"@bitwarden/common/models/request/verify-email.request\";\n\n@Component({\n selector: \"app-verify-email-token\",\n templateUrl: \"verify-email-token.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class VerifyEmailTokenComponent implements OnInit {\n constructor(\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private apiService: ApiService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.userId != null && qParams.token != null) {\n try {\n await this.apiService.postAccountVerifyEmailToken(\n new VerifyEmailRequest(qParams.userId, qParams.token)\n );\n if (await this.stateService.getIsAuthenticated()) {\n await this.apiService.refreshIdentityToken();\n }\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"emailVerified\"));\n this.router.navigate([\"/\"]);\n return;\n } catch (e) {\n this.logService.error(e);\n }\n }\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"emailVerifiedFailed\"));\n this.router.navigate([\"/\"]);\n });\n }\n}\n","
\n
\n \"Bitwarden\"\n

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

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

{{ \"deleteAccount\" | i18n }}

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

\n {{ email }}\n

\n

{{ \"deleteRecoverConfirmDesc\" | i18n }}

\n
\n
\n \n {{ \"deleteAccount\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class HomeGuard implements CanActivate {\n constructor(private router: Router, private authService: AuthService) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n return this.router.createUrlTree([\"/login\"], { queryParams: route.queryParams });\n }\n if (authStatus === AuthenticationStatus.Locked) {\n return this.router.createUrlTree([\"/lock\"], { queryParams: route.queryParams });\n }\n return this.router.createUrlTree([\"/vault\"], { queryParams: route.queryParams });\n }\n}\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-frontend-layout\",\n templateUrl: \"frontend-layout.component.html\",\n})\nexport class FrontendLayoutComponent implements OnInit, OnDestroy {\n version: string;\n year = \"2015\";\n\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n async ngOnInit() {\n this.year = new Date().getFullYear().toString();\n this.version = await this.platformUtilsService.getApplicationVersion();\n document.body.classList.add(\"layout_frontend\");\n }\n\n ngOnDestroy() {\n document.body.classList.remove(\"layout_frontend\");\n }\n}\n","\n
\n © {{ year }} Bitwarden Inc.
\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.
\n
\n
\n {{ \"versionNumber\" | i18n: version }}\n
\n
\n
\n","import { FocusableOption } from \"@angular/cdk/a11y\";\nimport { Directive, ElementRef, HostBinding } from \"@angular/core\";\n\n@Directive({\n selector: \"[bitMenuItem]\",\n})\nexport class MenuItemDirective implements FocusableOption {\n @HostBinding(\"class\") classList = [\n \"tw-block\",\n \"tw-py-1\",\n \"tw-px-4\",\n \"!tw-text-main\",\n \"!tw-no-underline\",\n \"tw-cursor-pointer\",\n \"tw-border-none\",\n \"tw-bg-background\",\n \"tw-text-left\",\n \"hover:tw-bg-secondary-100\",\n \"focus:tw-bg-secondary-100\",\n \"focus:tw-z-50\",\n \"focus:tw-outline-none\",\n \"focus:tw-ring\",\n \"focus:tw-ring-offset-2\",\n \"focus:tw-ring-primary-700\",\n \"active:!tw-ring-0\",\n \"active:!tw-ring-offset-0\",\n ];\n @HostBinding(\"attr.role\") role = \"menuitem\";\n @HostBinding(\"tabIndex\") tabIndex = \"-1\";\n\n constructor(private elementRef: ElementRef) {}\n\n focus() {\n this.elementRef.nativeElement.focus();\n }\n}\n","\n \n \n \n\n","import { FocusKeyManager } from \"@angular/cdk/a11y\";\nimport {\n Component,\n Output,\n TemplateRef,\n ViewChild,\n EventEmitter,\n ContentChildren,\n QueryList,\n AfterContentInit,\n} from \"@angular/core\";\n\nimport { MenuItemDirective } from \"./menu-item.directive\";\n\n@Component({\n selector: \"bit-menu\",\n templateUrl: \"./menu.component.html\",\n exportAs: \"menuComponent\",\n})\nexport class MenuComponent implements AfterContentInit {\n @ViewChild(TemplateRef) templateRef: TemplateRef;\n @Output() closed = new EventEmitter();\n @ContentChildren(MenuItemDirective, { descendants: true })\n menuItems: QueryList;\n keyManager: FocusKeyManager;\n\n ngAfterContentInit() {\n this.keyManager = new FocusKeyManager(this.menuItems).withWrap();\n }\n}\n","import { Overlay, OverlayConfig, OverlayRef } from \"@angular/cdk/overlay\";\nimport { TemplatePortal } from \"@angular/cdk/portal\";\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { Observable, Subscription } from \"rxjs\";\nimport { filter, mergeWith } from \"rxjs/operators\";\n\nimport { MenuComponent } from \"./menu.component\";\n\n@Directive({\n selector: \"[bitMenuTriggerFor]\",\n})\nexport class MenuTriggerForDirective implements OnDestroy {\n @HostBinding(\"attr.aria-expanded\") isOpen = false;\n @HostBinding(\"attr.aria-haspopup\") hasPopup = \"menu\";\n @HostBinding(\"attr.role\") role = \"button\";\n\n @Input(\"bitMenuTriggerFor\") menu: MenuComponent;\n\n private overlayRef: OverlayRef;\n private defaultMenuConfig: OverlayConfig = {\n panelClass: \"bit-menu-panel\",\n hasBackdrop: true,\n backdropClass: \"cdk-overlay-transparent-backdrop\",\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions([\n {\n originX: \"start\",\n originY: \"bottom\",\n overlayX: \"start\",\n overlayY: \"top\",\n },\n {\n originX: \"end\",\n originY: \"bottom\",\n overlayX: \"end\",\n overlayY: \"top\",\n },\n ])\n .withLockedPosition(true)\n .withFlexibleDimensions(false)\n .withPush(false),\n };\n private closedEventsSub: Subscription;\n private keyDownEventsSub: Subscription;\n\n constructor(\n private elementRef: ElementRef,\n private viewContainerRef: ViewContainerRef,\n private overlay: Overlay\n ) {}\n\n @HostListener(\"click\") toggleMenu() {\n this.isOpen ? this.destroyMenu() : this.openMenu();\n }\n\n ngOnDestroy() {\n this.disposeAll();\n }\n\n private openMenu() {\n if (this.menu == null) {\n throw new Error(\"Cannot find bit-menu element\");\n }\n\n this.isOpen = true;\n this.overlayRef = this.overlay.create(this.defaultMenuConfig);\n\n const templatePortal = new TemplatePortal(this.menu.templateRef, this.viewContainerRef);\n this.overlayRef.attach(templatePortal);\n\n this.closedEventsSub = this.getClosedEvents().subscribe((event: KeyboardEvent | undefined) => {\n if (event?.key === \"Tab\") {\n // Required to ensure tab order resumes correctly\n this.elementRef.nativeElement.focus();\n }\n this.destroyMenu();\n });\n this.keyDownEventsSub = this.overlayRef\n .keydownEvents()\n .subscribe((event: KeyboardEvent) => this.menu.keyManager.onKeydown(event));\n }\n\n private destroyMenu() {\n if (this.overlayRef == null || !this.isOpen) {\n return;\n }\n\n this.isOpen = false;\n this.disposeAll();\n }\n\n private getClosedEvents(): Observable {\n const detachments = this.overlayRef.detachments();\n const escKey = this.overlayRef\n .keydownEvents()\n .pipe(filter((event: KeyboardEvent) => event.key === \"Escape\" || event.key === \"Tab\"));\n const backdrop = this.overlayRef.backdropClick();\n const menuClosed = this.menu.closed;\n\n return detachments.pipe(mergeWith(escKey, backdrop, menuClosed));\n }\n\n private disposeAll() {\n this.closedEventsSub?.unsubscribe();\n this.overlayRef?.dispose();\n this.keyDownEventsSub?.unsubscribe();\n }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"bit-menu-divider\",\n templateUrl: \"./menu-divider.component.html\",\n})\nexport class MenuDividerComponent {}\n","\n","\n","import { Component, OnInit } from \"@angular/core\";\nimport { map, Observable } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport {\n canAccessAdmin,\n isNotProviderUser,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\n\n@Component({\n selector: \"app-navbar\",\n templateUrl: \"navbar.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class NavbarComponent implements OnInit {\n selfHosted = false;\n name: string;\n email: string;\n providers: Provider[] = [];\n userId: string;\n organizations$: Observable;\n\n constructor(\n private messagingService: MessagingService,\n private platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService,\n private providerService: ProviderService,\n private syncService: SyncService,\n private organizationService: OrganizationService,\n private i18nService: I18nService\n ) {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.name = await this.tokenService.getName();\n this.email = await this.tokenService.getEmail();\n this.userId = await this.tokenService.getUserId();\n if (this.name == null || this.name.trim() === \"\") {\n this.name = this.email;\n }\n\n // Ensure providers and organizations are loaded\n if ((await this.syncService.getLastSync()) == null) {\n await this.syncService.fullSync(false);\n }\n this.providers = await this.providerService.getAll();\n\n this.organizations$ = this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter(isNotProviderUser)),\n canAccessAdmin(this.i18nService)\n );\n }\n\n lock() {\n this.messagingService.send(\"lockVault\");\n }\n\n logOut() {\n this.messagingService.send(\"logout\");\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\n@Component({\n selector: \"app-user-layout\",\n templateUrl: \"user-layout.component.html\",\n})\nexport class UserLayoutComponent implements OnInit {\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n }\n}\n","\n\n\n","import { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selection-read-only.request\";\nimport { SelectionReadOnlyResponse } from \"@bitwarden/common/models/response/selection-read-only.response\";\nimport { SelectItemView } from \"@bitwarden/components/src/multi-select/models/select-item-view\";\n\n/**\n * Permission options that replace/correspond with readOnly and hidePassword server fields.\n */\nexport enum CollectionPermission {\n View = \"view\",\n ViewExceptPass = \"viewExceptPass\",\n Edit = \"edit\",\n EditExceptPass = \"editExceptPass\",\n}\n\nexport enum AccessItemType {\n Collection,\n Group,\n Member,\n}\n\n/**\n * A \"generic\" type that describes an item that can be selected from a\n * ng-select list and have its collection permission modified.\n *\n * Currently, it supports Collections, Groups, and Members. Members require some additional\n * details to render in the AccessSelectorComponent so their type is defined separately\n * and then joined back with the base type.\n *\n */\nexport type AccessItemView =\n | SelectItemView & {\n /**\n * Flag that this group/member can access all items.\n * This will disable the permission editor for this item.\n */\n accessAllItems?: boolean;\n\n /**\n * Flag that this item cannot be modified.\n * This will disable the permission editor and will keep\n * the item always selected.\n */\n readonly?: boolean;\n\n /**\n * Optional permission that will be rendered for this\n * item if it set to readonly.\n */\n readonlyPermission?: CollectionPermission;\n } & (\n | {\n type: AccessItemType.Collection;\n viaGroupName?: string;\n }\n | {\n type: AccessItemType.Group;\n }\n | {\n type: AccessItemType.Member; // Members have a few extra details required to display, so they're added here\n email: string;\n role: OrganizationUserType;\n status: OrganizationUserStatusType;\n }\n );\n\n/**\n * A type that is emitted as a value for the ngControl\n */\nexport type AccessItemValue = {\n id: string;\n permission?: CollectionPermission;\n type: AccessItemType;\n};\n\n/**\n * Converts the older SelectionReadOnly interface to one of the new CollectionPermission values\n * for the dropdown in the AccessSelectorComponent\n * @param value\n */\nexport const convertToPermission = (value: SelectionReadOnlyResponse) => {\n if (value.readOnly) {\n return value.hidePasswords ? CollectionPermission.ViewExceptPass : CollectionPermission.View;\n } else {\n return value.hidePasswords ? CollectionPermission.EditExceptPass : CollectionPermission.Edit;\n }\n};\n\n/**\n * Converts an AccessItemValue back into a SelectionReadOnly class using the CollectionPermission\n * to determine the values for `readOnly` and `hidePassword`\n * @param value\n */\nexport const convertToSelectionReadOnly = (value: AccessItemValue) => {\n return new SelectionReadOnlyRequest(\n value.id,\n readOnly(value.permission),\n hidePassword(value.permission)\n );\n};\n\nconst readOnly = (perm: CollectionPermission) =>\n [CollectionPermission.View, CollectionPermission.ViewExceptPass].includes(perm);\n\nconst hidePassword = (perm: CollectionPermission) =>\n [CollectionPermission.ViewExceptPass, CollectionPermission.EditExceptPass].includes(perm);\n","import { AbstractControl, FormArray } from \"@angular/forms\";\n\nexport type SelectionItemId = {\n id: string;\n};\n\nfunction findSortedIndex(sortedArray: T[], val: T, compareFn: (a: T, b: T) => number) {\n let low = 0;\n let high = sortedArray.length || 0;\n let mid = -1,\n c = 0;\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n c = compareFn(sortedArray[mid], val);\n if (c < 0) {\n low = mid + 1;\n } else if (c > 0) {\n high = mid;\n } else {\n return mid;\n }\n }\n return low;\n}\n\n/**\n * Utility to help manage a list of selectable items for use with Reactive Angular forms and FormArrays.\n *\n * It supports selecting/deselecting items, keeping items sorted, and synchronizing the selected items\n * with an array of FormControl.\n *\n * The first type parameter TItem represents the item being selected/deselected, it must have an `id`\n * property for identification/comparison. The second type parameter TControlValue represents the value\n * type of the form control.\n */\nexport class FormSelectionList<\n TItem extends SelectionItemId,\n TControlValue extends SelectionItemId\n> {\n allItems: TItem[] = [];\n /**\n * Sorted list of selected items\n * Immutable and should be recreated whenever a modification is made\n */\n selectedItems: TItem[] = [];\n\n /**\n * Sorted list of deselected items\n * Immutable and should be recreated whenever a modification is made\n */\n deselectedItems: TItem[] = [];\n\n /**\n * Sorted FormArray that corresponds and stays in sync with the selectedItems\n */\n formArray: FormArray, TControlValue>> = new FormArray([]);\n\n /**\n * Construct a new FormSelectionList\n * @param controlFactory - Factory responsible for creating initial form controls for each selected item. It is\n * provided a copy of the selected item for any form control initialization logic. Specify any additional form\n * control options or validators here.\n * @param compareFn - Comparison function used for sorting the items.\n */\n constructor(\n private controlFactory: (item: TItem) => AbstractControl, TControlValue>,\n private compareFn: (a: TItem, b: TItem) => number\n ) {}\n\n /**\n * Select multiple items by their ids at once. Optionally provide an initial form control value.\n * @param ids - List of ids to select\n * @param initialValue - Value that will be applied to the corresponding form controls\n * The provided `id` arguments will be automatically assigned to each form control value\n */\n selectItems(ids: string[], initialValue?: Partial | undefined) {\n for (const id of ids) {\n this.selectItem(id, initialValue);\n }\n }\n\n /**\n * Deselect multiple items by their ids at once\n * @param ids - List of ids to deselect\n */\n deselectItems(ids: string[]) {\n for (const id of ids) {\n this.deselectItem(id);\n }\n }\n\n deselectAll() {\n this.formArray.clear();\n this.selectedItems = [];\n this.deselectedItems = [...this.allItems];\n }\n\n /**\n * Select a single item by id.\n *\n * Maintains list order for both selected items, deselected items, and the FormArray.\n *\n * @param id - Id of the item to select\n * @param initialValue - Value that will be applied to the corresponding form control for the selected item.\n * The provided `id` argument will be automatically assigned unless explicitly set in the initialValue.\n */\n selectItem(id: string, initialValue?: Partial) {\n const index = this.deselectedItems.findIndex((o) => o.id === id);\n\n if (index === -1) {\n return;\n }\n\n const selectedOption = this.deselectedItems[index];\n\n // Note: Changes to the deselected/selected arrays must create a new copy of the array\n // in order for Angular's Change Detection to pick up the modification (i.e. treat the arrays as immutable)\n\n // Remove from the list of deselected options\n this.deselectedItems = [\n ...this.deselectedItems.slice(0, index),\n ...this.deselectedItems.slice(index + 1),\n ];\n\n // Insert into the sorted selected options list\n const sortedInsertIndex = findSortedIndex(this.selectedItems, selectedOption, this.compareFn);\n\n this.selectedItems = [\n ...this.selectedItems.slice(0, sortedInsertIndex),\n selectedOption,\n ...this.selectedItems.slice(sortedInsertIndex),\n ];\n\n const newControl = this.controlFactory(selectedOption);\n\n // Patch the value and ensure the `id` is set\n newControl.patchValue({\n id,\n ...initialValue,\n });\n\n this.formArray.insert(sortedInsertIndex, newControl);\n }\n\n /**\n * Deselect a single item by id.\n *\n * Maintains list order for both selected items, deselected items, and the FormArray.\n *\n * @param id - Id of the item to deselect\n */\n deselectItem(id: string) {\n const index = this.selectedItems.findIndex((o) => o.id === id);\n\n if (index === -1) {\n return;\n }\n\n const deselectedOption = this.selectedItems[index];\n\n // Note: Changes to the deselected/selected arrays must create a new copy of the array\n // in order for Angular's Change Detection to pick up the modification (i.e. treat the arrays as immutable)\n\n // Remove from the list of selected items (and FormArray)\n this.selectedItems = [\n ...this.selectedItems.slice(0, index),\n ...this.selectedItems.slice(index + 1),\n ];\n this.formArray.removeAt(index);\n\n // Insert into the sorted deselected array\n const sortedInsertIndex = findSortedIndex(\n this.deselectedItems,\n deselectedOption,\n this.compareFn\n );\n\n this.deselectedItems = [\n ...this.deselectedItems.slice(0, sortedInsertIndex),\n deselectedOption,\n ...this.deselectedItems.slice(sortedInsertIndex),\n ];\n }\n\n /**\n * Populate the list of deselected items, and optional specify which items should be selected and with what initial\n * value for their Form Control\n * @param items - A list of all items. (Will be sorted internally)\n * @param selectedItems - The items to select initially\n */\n populateItems(items: TItem[], selectedItems: TControlValue[] = []) {\n this.formArray.clear();\n this.allItems = [...items].sort(this.compareFn);\n this.selectedItems = [];\n this.deselectedItems = [...this.allItems];\n\n for (const selectedItem of selectedItems) {\n this.selectItem(selectedItem.id, selectedItem);\n }\n }\n}\n","\n \n \n \n \n \n \n {{ item.labelName }}\n \n \n \n \n
\n
\n \n
\n
\n \n
\n
\n {{ item.listName }}\n
\n
\n
\n\n","import {\n Component,\n Input,\n OnInit,\n Output,\n ViewChild,\n EventEmitter,\n HostBinding,\n Optional,\n Self,\n} from \"@angular/core\";\nimport { ControlValueAccessor, NgControl, Validators } from \"@angular/forms\";\nimport { NgSelectComponent } from \"@ng-select/ng-select\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\nimport { BitFormFieldControl } from \"../form-field/form-field-control\";\n\nimport { SelectItemView } from \"./models/select-item-view\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Component({\n selector: \"bit-multi-select\",\n templateUrl: \"./multi-select.component.html\",\n providers: [{ provide: BitFormFieldControl, useExisting: MultiSelectComponent }],\n})\n/**\n * This component has been implemented to only support Multi-select list events\n */\nexport class MultiSelectComponent implements OnInit, BitFormFieldControl, ControlValueAccessor {\n @ViewChild(NgSelectComponent) select: NgSelectComponent;\n\n // Parent component should only pass selectable items (complete list - selected items = baseItems)\n @Input() baseItems: SelectItemView[];\n // Defaults to native ng-select behavior - set to \"true\" to clear selected items on dropdown close\n @Input() removeSelectedItems = false;\n @Input() placeholder: string;\n @Input() loading = false;\n @Input() disabled = false;\n\n // Internal tracking of selected items\n @Input() selectedItems: SelectItemView[];\n\n // Default values for our implementation\n loadingText: string;\n\n protected searchInputId = `search-input-${nextId++}`;\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n private notifyOnChange?: (value: SelectItemView[]) => void;\n /**Implemented as part of NG_VALUE_ACCESSOR */\n private notifyOnTouched?: () => void;\n\n @Output() onItemsConfirmed = new EventEmitter();\n\n constructor(private i18nService: I18nService, @Optional() @Self() private ngControl?: NgControl) {\n if (ngControl != null) {\n ngControl.valueAccessor = this;\n }\n }\n\n ngOnInit(): void {\n // Default Text Values\n this.placeholder = this.placeholder ?? this.i18nService.t(\"multiSelectPlaceholder\");\n this.loadingText = this.i18nService.t(\"multiSelectLoading\");\n }\n\n /** Helper method for showing selected state in custom template */\n isSelected(item: any): boolean {\n return this.selectedItems?.find((selected) => selected.id === item.id) != undefined;\n }\n\n /**\n * The `close` callback will act as the only trigger for signifying the user's intent of completing the selection\n * of items. Selected items will be emitted to the parent component in order to allow for separate data handling.\n */\n onDropdownClosed(): void {\n // Early exit\n if (this.selectedItems == null || this.selectedItems.length == 0) {\n return;\n }\n\n // Emit results to parent component\n this.onItemsConfirmed.emit(this.selectedItems);\n\n // Remove selected items from base list based on input property\n if (this.removeSelectedItems) {\n let updatedBaseItems = this.baseItems;\n this.selectedItems.forEach((selectedItem) => {\n updatedBaseItems = updatedBaseItems.filter((item) => selectedItem.id !== item.id);\n });\n\n // Reset Lists\n this.selectedItems = null;\n this.baseItems = updatedBaseItems;\n }\n }\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n writeValue(obj: SelectItemView[]): void {\n this.selectedItems = obj;\n }\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n registerOnChange(fn: (value: SelectItemView[]) => void): void {\n this.notifyOnChange = fn;\n }\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n registerOnTouched(fn: any): void {\n this.notifyOnTouched = fn;\n }\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n protected onChange(items: SelectItemView[]) {\n if (!this.notifyOnChange) {\n return;\n }\n\n this.notifyOnChange(items);\n }\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n protected onBlur() {\n if (!this.notifyOnTouched) {\n return;\n }\n\n this.notifyOnTouched();\n }\n\n /**Implemented as part of BitFormFieldControl */\n @HostBinding(\"attr.aria-describedby\")\n get ariaDescribedBy() {\n return this._ariaDescribedBy;\n }\n set ariaDescribedBy(value: string) {\n this._ariaDescribedBy = value;\n this.select?.searchInput.nativeElement.setAttribute(\"aria-describedby\", value);\n }\n private _ariaDescribedBy: string;\n\n /**Implemented as part of BitFormFieldControl */\n get labelForId() {\n return this.searchInputId;\n }\n\n /**Implemented as part of BitFormFieldControl */\n @HostBinding() @Input() id = `bit-multi-select-${nextId++}`;\n\n /**Implemented as part of BitFormFieldControl */\n @HostBinding(\"attr.required\")\n @Input()\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value: any) {\n this._required = value != null && value !== false;\n }\n private _required: boolean;\n\n /**Implemented as part of BitFormFieldControl */\n get hasError() {\n return this.ngControl?.status === \"INVALID\" && this.ngControl?.touched;\n }\n\n /**Implemented as part of BitFormFieldControl */\n get error(): [string, any] {\n const key = Object.keys(this.ngControl?.errors)[0];\n return [key, this.ngControl?.errors[key]];\n }\n}\n","import { Component, HostBinding, Input } from \"@angular/core\";\n\nimport { ButtonLikeAbstraction } from \"../shared/button-like.abstraction\";\n\nexport type IconButtonType = \"contrast\" | \"main\" | \"muted\" | \"primary\" | \"secondary\" | \"danger\";\n\nconst styles: Record = {\n contrast: [\n \"tw-bg-transparent\",\n \"!tw-text-contrast\",\n \"tw-border-transparent\",\n \"hover:tw-bg-transparent-hover\",\n \"hover:tw-border-text-contrast\",\n \"focus-visible:before:tw-ring-text-contrast\",\n \"disabled:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\n ],\n main: [\n \"tw-bg-transparent\",\n \"!tw-text-main\",\n \"tw-border-transparent\",\n \"hover:tw-bg-transparent-hover\",\n \"hover:tw-border-text-main\",\n \"focus-visible:before:tw-ring-text-main\",\n \"disabled:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\n ],\n muted: [\n \"tw-bg-transparent\",\n \"!tw-text-muted\",\n \"tw-border-transparent\",\n \"hover:tw-bg-transparent-hover\",\n \"hover:tw-border-primary-700\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\n ],\n primary: [\n \"tw-bg-primary-500\",\n \"!tw-text-contrast\",\n \"tw-border-primary-500\",\n \"hover:tw-bg-primary-700\",\n \"hover:tw-border-primary-700\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:hover:tw-border-primary-500\",\n \"disabled:hover:tw-bg-primary-500\",\n ],\n secondary: [\n \"tw-bg-transparent\",\n \"!tw-text-muted\",\n \"tw-border-text-muted\",\n \"hover:!tw-text-contrast\",\n \"hover:tw-bg-text-muted\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:hover:tw-border-text-muted\",\n \"disabled:hover:tw-bg-transparent\",\n \"disabled:hover:!tw-text-muted\",\n \"disabled:hover:tw-border-text-muted\",\n ],\n danger: [\n \"tw-bg-transparent\",\n \"!tw-text-danger\",\n \"tw-border-danger-500\",\n \"hover:!tw-text-contrast\",\n \"hover:tw-bg-danger-500\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:hover:tw-border-danger-500\",\n \"disabled:hover:tw-bg-transparent\",\n \"disabled:hover:!tw-text-danger\",\n \"disabled:hover:tw-border-danger-500\",\n ],\n};\n\nexport type IconButtonSize = \"default\" | \"small\";\n\nconst sizes: Record = {\n default: [\"tw-px-2.5\", \"tw-py-1.5\"],\n small: [\"tw-leading-none\", \"tw-text-base\", \"tw-p-1\"],\n};\n\n@Component({\n selector: \"button[bitIconButton]\",\n templateUrl: \"icon-button.component.html\",\n providers: [{ provide: ButtonLikeAbstraction, useExisting: BitIconButtonComponent }],\n})\nexport class BitIconButtonComponent implements ButtonLikeAbstraction {\n @Input(\"bitIconButton\") icon: string;\n\n @Input() buttonType: IconButtonType = \"main\";\n\n @Input() size: IconButtonSize = \"default\";\n\n @HostBinding(\"class\") get classList() {\n return [\n \"tw-font-semibold\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-rounded\",\n \"tw-transition\",\n \"hover:tw-no-underline\",\n \"disabled:tw-opacity-60\",\n \"focus:tw-outline-none\",\n\n // Workaround for box-shadow with transparent offset issue:\n // https://github.com/tailwindlabs/tailwindcss/issues/3595\n // Remove `before:` and use regular `tw-ring` when browser no longer has bug, or better:\n // switch to `outline` with `outline-offset` when Safari supports border radius on outline.\n // Using `box-shadow` to create outlines is a hack and as such `outline` should be preferred.\n \"tw-relative\",\n \"before:tw-content-['']\",\n \"before:tw-block\",\n \"before:tw-absolute\",\n \"before:-tw-inset-[3px]\",\n \"before:tw-rounded-md\",\n \"before:tw-transition\",\n \"before:tw-ring\",\n \"before:tw-ring-transparent\",\n \"focus-visible:before:tw-ring-text-contrast\",\n \"focus-visible:tw-z-10\",\n ]\n .concat(styles[this.buttonType])\n .concat(sizes[this.size]);\n }\n\n get iconClass() {\n return [this.icon, \"!tw-m-0\"];\n }\n\n @HostBinding(\"attr.disabled\")\n get disabledAttr() {\n const disabled = this.disabled != null && this.disabled !== false;\n return disabled || this.loading ? true : null;\n }\n\n @Input() loading = false;\n @Input() disabled = false;\n}\n","\n \n \n \n \n \n \n\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\n\n@Pipe({\n name: \"userType\",\n})\nexport class UserTypePipe implements PipeTransform {\n constructor(private i18nService: I18nService) {}\n\n transform(value?: OrganizationUserType, unknownText?: string): string {\n if (value == null) {\n return unknownText ?? this.i18nService.t(\"unknown\");\n }\n switch (value) {\n case OrganizationUserType.Owner:\n return this.i18nService.t(\"owner\");\n case OrganizationUserType.Admin:\n return this.i18nService.t(\"admin\");\n case OrganizationUserType.User:\n return this.i18nService.t(\"user\");\n case OrganizationUserType.Manager:\n return this.i18nService.t(\"manager\");\n case OrganizationUserType.Custom:\n return this.i18nService.t(\"custom\");\n }\n }\n}\n","
\n \n {{ \"permission\" | i18n }}\n \n \n \n \n\n \n {{ selectorLabelText }}\n \n {{ selectorHelpText }}\n \n
\n\n\n \n \n {{ columnHeader }}\n \n {{ \"permission\" | i18n }}\n \n {{ \"role\" | i18n }}\n {{ \"group\" | i18n }}\n \n \n \n \n \n \n
\n \n
\n
\n {{ item.labelName }}\n \n {{ \"invited\" | i18n }}\n \n
\n
{{ item.email }}
\n
\n
\n\n
\n \n {{ item.labelName }}\n
\n \n\n \n \n \n\n \n \n {{ \"canEdit\" | i18n }}\n \n \n\n \n {{ permissionLabelId(item.readonlyPermission) | i18n }}\n \n \n \n\n \n {{ item.role | userType: \"-\" }}\n \n\n \n {{ item.viaGroupName ?? \"-\" }}\n \n\n \n \n \n \n \n {{ emptySelectionText }}\n \n
\n
\n","import { Component, forwardRef, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { ControlValueAccessor, FormBuilder, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { FormSelectionList } from \"@bitwarden/angular/utils/form-selection-list\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { SelectItemView } from \"@bitwarden/components/src/multi-select/models/select-item-view\";\n\nimport {\n AccessItemType,\n AccessItemValue,\n AccessItemView,\n CollectionPermission,\n} from \"./access-selector.models\";\n\nexport enum PermissionMode {\n /**\n * No permission controls or column present. No permission values are emitted.\n */\n Hidden = \"hidden\",\n\n /**\n * No permission controls. Column rendered an if available on an item. No permission values are emitted\n */\n Readonly = \"readonly\",\n\n /**\n * Permission Controls and column present. Permission values are emitted.\n */\n Edit = \"edit\",\n}\n\n@Component({\n selector: \"bit-access-selector\",\n templateUrl: \"access-selector.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AccessSelectorComponent),\n multi: true,\n },\n ],\n})\nexport class AccessSelectorComponent implements ControlValueAccessor, OnInit, OnDestroy {\n private destroy$ = new Subject();\n private notifyOnChange: (v: unknown) => void;\n private notifyOnTouch: () => void;\n private pauseChangeNotification: boolean;\n\n /**\n * The internal selection list that tracks the value of this form control / component.\n * It's responsible for keeping items sorted and synced with the rendered form controls\n * @protected\n */\n protected selectionList = new FormSelectionList((item) => {\n const permissionControl = this.formBuilder.control(this.initialPermission);\n\n const fg = this.formBuilder.group({\n id: item.id,\n type: item.type,\n permission: permissionControl,\n });\n\n // Disable entire row form group if readonly\n if (item.readonly) {\n fg.disable();\n }\n\n // Disable permission control if accessAllItems is enabled\n if (item.accessAllItems || this.permissionMode != PermissionMode.Edit) {\n permissionControl.disable();\n }\n\n return fg;\n }, this._itemComparator.bind(this));\n\n /**\n * Internal form group for this component.\n * @protected\n */\n protected formGroup = this.formBuilder.group({\n items: this.selectionList.formArray,\n });\n\n protected itemType = AccessItemType;\n protected permissionList = [\n { perm: CollectionPermission.View, labelId: \"canView\" },\n { perm: CollectionPermission.ViewExceptPass, labelId: \"canViewExceptPass\" },\n { perm: CollectionPermission.Edit, labelId: \"canEdit\" },\n { perm: CollectionPermission.EditExceptPass, labelId: \"canEditExceptPass\" },\n ];\n protected initialPermission = CollectionPermission.View;\n\n disabled: boolean;\n\n /**\n * List of all selectable items that. Sorted internally.\n */\n @Input()\n get items(): AccessItemView[] {\n return this.selectionList.allItems;\n }\n\n set items(val: AccessItemView[]) {\n const selected = (this.selectionList.formArray.getRawValue() ?? []).concat(\n val.filter((m) => m.readonly)\n );\n this.selectionList.populateItems(\n val.map((m) => {\n m.icon = m.icon ?? this.itemIcon(m); // Ensure an icon is set\n return m;\n }),\n selected\n );\n }\n\n /**\n * Permission mode that controls if the permission form controls and column should be present.\n */\n @Input()\n get permissionMode(): PermissionMode {\n return this._permissionMode;\n }\n\n set permissionMode(value: PermissionMode) {\n this._permissionMode = value;\n // Toggle any internal permission controls\n for (const control of this.selectionList.formArray.controls) {\n if (value == PermissionMode.Edit) {\n control.get(\"permission\").enable();\n } else {\n control.get(\"permission\").disable();\n }\n }\n }\n private _permissionMode: PermissionMode = PermissionMode.Hidden;\n\n /**\n * Column header for the selected items table\n */\n @Input() columnHeader: string;\n\n /**\n * Label used for the ng selector\n */\n @Input() selectorLabelText: string;\n\n /**\n * Helper text displayed under the ng selector\n */\n @Input() selectorHelpText: string;\n\n /**\n * Text that is shown in the table when no items are selected\n */\n @Input() emptySelectionText: string;\n\n /**\n * Flag for if the member roles column should be present\n */\n @Input() showMemberRoles: boolean;\n\n /**\n * Flag for if the group column should be present\n */\n @Input() showGroupColumn: boolean;\n\n constructor(\n private readonly formBuilder: FormBuilder,\n private readonly i18nService: I18nService\n ) {}\n\n /** Required for NG_VALUE_ACCESSOR */\n registerOnChange(fn: any): void {\n this.notifyOnChange = fn;\n }\n\n /** Required for NG_VALUE_ACCESSOR */\n registerOnTouched(fn: any): void {\n this.notifyOnTouch = fn;\n }\n\n /** Required for NG_VALUE_ACCESSOR */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n\n // Keep the internal FormGroup in sync\n if (this.disabled) {\n this.formGroup.disable();\n } else {\n this.formGroup.enable();\n }\n }\n\n /** Required for NG_VALUE_ACCESSOR */\n writeValue(selectedItems: AccessItemValue[]): void {\n // Modifying the selection list, mistakenly fires valueChanges in the\n // internal form array, so we need to know to pause external notification\n this.pauseChangeNotification = true;\n\n // Always clear the internal selection list on a new value\n this.selectionList.deselectAll();\n\n // We need to also select any read only items to appear in the table\n this.selectionList.selectItems(this.items.filter((m) => m.readonly).map((m) => m.id));\n\n // If the new value is null, then we're done\n if (selectedItems == null) {\n this.pauseChangeNotification = false;\n return;\n }\n\n // Unable to handle other value types, throw\n if (!Array.isArray(selectedItems)) {\n throw new Error(\"The access selector component only supports Array form values!\");\n }\n\n // Iterate and internally select each item\n for (const value of selectedItems) {\n this.selectionList.selectItem(value.id, value);\n }\n\n this.pauseChangeNotification = false;\n }\n\n ngOnInit() {\n // Watch the internal formArray for changes and propagate them\n this.selectionList.formArray.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((v) => {\n if (!this.notifyOnChange || this.pauseChangeNotification) {\n return;\n }\n this.notifyOnChange(v);\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected handleBlur() {\n if (!this.notifyOnTouch) {\n return;\n }\n\n this.notifyOnTouch();\n }\n\n protected selectItems(items: SelectItemView[]) {\n this.pauseChangeNotification = true;\n this.selectionList.selectItems(items.map((i) => i.id));\n this.pauseChangeNotification = false;\n if (this.notifyOnChange != undefined) {\n this.notifyOnChange(this.selectionList.formArray.value);\n }\n }\n\n protected itemIcon(item: AccessItemView) {\n switch (item.type) {\n case AccessItemType.Collection:\n return \"bwi-collection\";\n case AccessItemType.Group:\n return \"bwi-users\";\n case AccessItemType.Member:\n return \"bwi-user\";\n }\n }\n\n protected permissionLabelId(perm: CollectionPermission) {\n return this.permissionList.find((p) => p.perm == perm)?.labelId;\n }\n\n protected accessAllLabelId(item: AccessItemView) {\n return item.type == AccessItemType.Group ? \"groupAccessAll\" : \"memberAccessAll\";\n }\n\n protected canEditItemPermission(item: AccessItemView) {\n return this.permissionMode == PermissionMode.Edit && !item.readonly && !item.accessAllItems;\n }\n\n private _itemComparator(a: AccessItemView, b: AccessItemView) {\n if (a.type != b.type) {\n return a.type - b.type;\n }\n return this.i18nService.collator.compare(\n a.listName + a.labelName + a.readonly,\n b.listName + b.labelName + b.readonly\n );\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../shared\";\n\nimport { AccessSelectorComponent } from \"./access-selector.component\";\nimport { UserTypePipe } from \"./user-type.pipe\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [AccessSelectorComponent, UserTypePipe],\n exports: [AccessSelectorComponent],\n})\nexport class AccessSelectorModule {}\n","import { FocusableOption } from \"@angular/cdk/a11y\";\nimport { Directive, ElementRef, HostBinding, Input } from \"@angular/core\";\n\n/**\n * Directive used for styling tab header items for both nav links (anchor tags)\n * and content tabs (button tags)\n */\n@Directive({ selector: \"[bitTabListItem]\" })\nexport class TabListItemDirective implements FocusableOption {\n @Input() active: boolean;\n @Input() disabled: boolean;\n\n @HostBinding(\"attr.disabled\")\n get disabledAttr() {\n return this.disabled || null; // native disabled attr must be null when false\n }\n\n constructor(private elementRef: ElementRef) {}\n\n focus() {\n this.elementRef.nativeElement.focus();\n }\n\n click() {\n this.elementRef.nativeElement.click();\n }\n\n @HostBinding(\"class\")\n get classList(): string[] {\n return this.baseClassList\n .concat(this.active ? this.activeClassList : [])\n .concat(this.disabled ? this.disabledClassList : [])\n .concat(this.textColorClassList);\n }\n\n /**\n * Classes used for styling tab item text color.\n * Separate text color class list required to override bootstrap classes in Web.\n */\n get textColorClassList(): string[] {\n if (this.disabled) {\n return [\"!tw-text-muted\", \"hover:!tw-text-muted\"];\n }\n if (this.active) {\n return [\"!tw-text-primary-500\", \"hover:!tw-text-primary-700\"];\n }\n return [\"!tw-text-main\", \"hover:!tw-text-main\"];\n }\n\n get baseClassList(): string[] {\n return [\n \"tw-block\",\n \"tw-relative\",\n \"tw-py-2\",\n \"tw-px-4\",\n \"tw-font-semibold\",\n \"tw-transition\",\n \"tw-rounded-t\",\n \"tw-border-0\",\n \"tw-border-x\",\n \"tw-border-t-4\",\n \"tw-border-transparent\",\n \"tw-border-solid\",\n \"tw-bg-transparent\",\n \"hover:tw-underline\",\n \"focus-visible:tw-z-10\",\n \"focus-visible:tw-outline-none\",\n \"focus-visible:tw-ring-2\",\n \"focus-visible:tw-ring-primary-700\",\n ];\n }\n\n get disabledClassList(): string[] {\n return [\"!tw-bg-secondary-100\", \"!tw-no-underline\", \"tw-cursor-not-allowed\"];\n }\n\n get activeClassList(): string[] {\n return [\n \"tw--mb-px\",\n \"tw-border-x-secondary-300\",\n \"tw-border-t-primary-500\",\n \"tw-border-b\",\n \"tw-border-b-background\",\n \"tw-bg-background\",\n \"hover:tw-border-t-primary-700\",\n \"focus-visible:tw-border-t-primary-700\",\n \"focus-visible:!tw-text-primary-700\",\n ];\n }\n}\n","import { FocusableOption } from \"@angular/cdk/a11y\";\nimport { AfterViewInit, Component, HostListener, Input, OnDestroy, ViewChild } from \"@angular/core\";\nimport { IsActiveMatchOptions, RouterLinkActive } from \"@angular/router\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { TabListItemDirective } from \"../shared/tab-list-item.directive\";\n\nimport { TabNavBarComponent } from \"./tab-nav-bar.component\";\n\n@Component({\n selector: \"bit-tab-link\",\n templateUrl: \"tab-link.component.html\",\n})\nexport class TabLinkComponent implements FocusableOption, AfterViewInit, OnDestroy {\n private destroy$ = new Subject();\n\n @ViewChild(TabListItemDirective) tabItem: TabListItemDirective;\n @ViewChild(\"rla\") routerLinkActive: RouterLinkActive;\n\n readonly routerLinkMatchOptions: IsActiveMatchOptions = {\n queryParams: \"ignored\",\n matrixParams: \"ignored\",\n paths: \"subset\",\n fragment: \"ignored\",\n };\n\n @Input() route: string;\n @Input() disabled = false;\n\n @HostListener(\"keydown\", [\"$event\"]) onKeyDown(event: KeyboardEvent) {\n if (event.code === \"Space\") {\n this.tabItem.click();\n }\n }\n\n get active() {\n return this.routerLinkActive?.isActive ?? false;\n }\n\n constructor(private _tabNavBar: TabNavBarComponent) {}\n\n focus(): void {\n this.tabItem.focus();\n }\n\n ngAfterViewInit() {\n // The active state of tab links are tracked via the routerLinkActive directive\n // We need to watch for changes to tell the parent nav group when the tab is active\n this.routerLinkActive.isActiveChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((_) => this._tabNavBar.updateActiveLink());\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","\n \n\n","import { Directive } from \"@angular/core\";\n\n/**\n * Directive used for styling the container for bit tab labels\n */\n@Directive({\n selector: \"[bitTabListContainer]\",\n host: {\n class: \"tw-inline-flex tw-flex-wrap tw-leading-5\",\n },\n})\nexport class TabListContainerDirective {}\n","import { Component } from \"@angular/core\";\n\n/**\n * Component used for styling the tab header/background for both content and navigation tabs\n */\n@Component({\n selector: \"bit-tab-header\",\n host: {\n class:\n \"tw-h-16 tw-pl-4 tw-bg-background-alt tw-flex tw-items-end tw-border-0 tw-border-b tw-border-solid tw-border-secondary-300\",\n },\n template: ``,\n})\nexport class TabHeaderComponent {}\n","import { FocusKeyManager } from \"@angular/cdk/a11y\";\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n forwardRef,\n Input,\n QueryList,\n} from \"@angular/core\";\n\nimport { TabLinkComponent } from \"./tab-link.component\";\n\n@Component({\n selector: \"bit-tab-nav-bar\",\n templateUrl: \"tab-nav-bar.component.html\",\n})\nexport class TabNavBarComponent implements AfterContentInit {\n @ContentChildren(forwardRef(() => TabLinkComponent)) tabLabels: QueryList;\n @Input() label = \"\";\n\n /**\n * Focus key manager for keeping tab controls accessible.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/tablist_role#keyboard_interactions\n */\n keyManager: FocusKeyManager;\n\n ngAfterContentInit(): void {\n this.keyManager = new FocusKeyManager(this.tabLabels)\n .withHorizontalOrientation(\"ltr\")\n .withWrap()\n .withHomeAndEnd();\n }\n\n updateActiveLink() {\n // Keep the keyManager in sync with active tabs\n const items = this.tabLabels.toArray();\n for (let i = 0; i < items.length; i++) {\n if (items[i].active) {\n this.keyManager.updateActiveItem(i);\n }\n }\n }\n}\n","\n \n\n","
\n \n \n
\n
\n {{ activeOrganization.name }}\n {{ \"organization\" | i18n }}\n
\n
\n \n
\n
\n \n
\n \n
\n \n {{ \"organizationIsDisabled\" | i18n }}\n
\n
\n \n
\n \n {{ \"accessingUsingProvider\" | i18n: activeOrganization.providerName }}\n
\n
\n \n\n \n \n \n\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { map, Observable } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport {\n canAccessAdmin,\n isNotProviderUser,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-organization-switcher\",\n templateUrl: \"organization-switcher.component.html\",\n})\nexport class OrganizationSwitcherComponent implements OnInit {\n constructor(private organizationService: OrganizationService, private i18nService: I18nService) {}\n\n @Input() activeOrganization: Organization = null;\n organizations$: Observable;\n\n loaded = false;\n\n async ngOnInit() {\n this.organizations$ = this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter(isNotProviderUser)),\n canAccessAdmin(this.i18nService)\n );\n\n this.loaded = true;\n }\n}\n","\n
\n
\n
\n \n \n {{ \"vault\" | i18n }}\n \n {{ \"manage\" | i18n }}\n \n \n {{ getReportTabLabel(organization) | i18n }}\n \n {{\n \"billing\" | i18n\n }}\n {{\n \"settings\" | i18n\n }}\n \n
\n
\n
\n\n\n\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { map, mergeMap, Observable, Subject, takeUntil } from \"rxjs\";\n\nimport {\n canAccessBillingTab,\n canAccessGroupsTab,\n canAccessManageTab,\n canAccessMembersTab,\n canAccessReportingTab,\n canAccessSettingsTab,\n getOrganizationById,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-organization-layout\",\n templateUrl: \"organization-layout.component.html\",\n})\nexport class OrganizationLayoutComponent implements OnInit, OnDestroy {\n organization$: Observable;\n\n private _destroy = new Subject();\n\n constructor(private route: ActivatedRoute, private organizationService: OrganizationService) {}\n\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n\n this.organization$ = this.route.params\n .pipe(takeUntil(this._destroy))\n .pipe(map((p) => p.organizationId))\n .pipe(\n mergeMap((id) => {\n return this.organizationService.organizations$\n .pipe(takeUntil(this._destroy))\n .pipe(getOrganizationById(id));\n })\n );\n }\n\n ngOnDestroy() {\n this._destroy.next();\n this._destroy.complete();\n }\n\n canShowSettingsTab(organization: Organization): boolean {\n return canAccessSettingsTab(organization);\n }\n\n canShowManageTab(organization: Organization): boolean {\n return canAccessManageTab(organization);\n }\n\n canShowMembersTab(organization: Organization): boolean {\n return canAccessMembersTab(organization);\n }\n\n canShowGroupsTab(organization: Organization): boolean {\n return canAccessGroupsTab(organization);\n }\n\n canShowReportsTab(organization: Organization): boolean {\n return canAccessReportingTab(organization);\n }\n\n canShowBillingTab(organization: Organization): boolean {\n return canAccessBillingTab(organization);\n }\n\n getReportTabLabel(organization: Organization): string {\n return organization.useEvents ? \"reporting\" : \"reports\";\n }\n}\n","export class SelectionReadOnlyRequest {\n id: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(id: string, readOnly: boolean, hidePasswords: boolean) {\n this.id = id;\n this.readOnly = readOnly;\n this.hidePasswords = hidePasswords;\n }\n}\n","
\n
\n \n
\n

{{ title }}

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

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

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

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

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n \n
\n
\n
\n \n \n
\n
\n \n {{ \"all\" | i18n }}\n \n \n {{ \"selected\" | i18n }}\n {{ selectedCount }}\n \n
\n
\n \n
\n {{ \"noUsersInList\" | i18n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
  {{ \"name\" | i18n }} {{ \"userType\" | i18n }}\n {{ \"hidePasswords\" | i18n }}\n \n {{ \"readOnly\" | i18n }}\n
\n \n \n \n \n {{ u.email }}\n {{ \"invited\" | i18n }}\n {{ \"accepted\" | i18n }}\n {{ u.name }}\n \n \n \n {{ \"userAccessAllItems\" | i18n }}\n \n \n {{ \"owner\" | i18n }}\n {{ \"admin\" | i18n }}\n {{\n \"manager\" | i18n\n }}\n {{ \"user\" | i18n }}\n {{ \"custom\" | i18n }}\n \n \n \n \n
\n
\n \n
\n \n \n
\n \n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selection-read-only.request\";\nimport { OrganizationUserUserDetailsResponse } from \"@bitwarden/common/models/response/organization-user.response\";\n\n@Component({\n selector: \"app-entity-users\",\n templateUrl: \"entity-users.component.html\",\n providers: [SearchPipe],\n})\nexport class EntityUsersComponent implements OnInit {\n @Input() entity: \"group\" | \"collection\";\n @Input() entityId: string;\n @Input() entityName: string;\n @Input() organizationId: string;\n @Output() onEditedUsers = new EventEmitter();\n\n organizationUserType = OrganizationUserType;\n organizationUserStatusType = OrganizationUserStatusType;\n\n showSelected = false;\n loading = true;\n formPromise: Promise;\n selectedCount = 0;\n searchText: string;\n\n private allUsers: OrganizationUserUserDetailsResponse[] = [];\n\n constructor(\n private search: SearchPipe,\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.loadUsers();\n this.loading = false;\n }\n\n get users() {\n if (this.showSelected) {\n return this.allUsers.filter((u) => (u as any).checked);\n } else {\n return this.allUsers;\n }\n }\n\n get searchedUsers() {\n return this.search.transform(this.users, this.searchText, \"name\", \"email\", \"id\");\n }\n\n get scrollViewportStyle() {\n return `min-height: 120px; height: ${120 + this.searchedUsers.length * 46}px`;\n }\n\n async loadUsers() {\n const users = await this.apiService.getOrganizationUsers(this.organizationId);\n this.allUsers = users.data.map((r) => r).sort(Utils.getSortFunction(this.i18nService, \"email\"));\n if (this.entity === \"group\") {\n const response = await this.apiService.getGroupUsers(this.organizationId, this.entityId);\n if (response != null && users.data.length > 0) {\n response.forEach((s) => {\n const user = users.data.filter((u) => u.id === s);\n if (user != null && user.length > 0) {\n (user[0] as any).checked = true;\n }\n });\n }\n } else if (this.entity === \"collection\") {\n const response = await this.apiService.getCollectionUsers(this.organizationId, this.entityId);\n if (response != null && users.data.length > 0) {\n response.forEach((s) => {\n const user = users.data.filter((u) => !u.accessAll && u.id === s.id);\n if (user != null && user.length > 0) {\n (user[0] as any).checked = true;\n (user[0] as any).readOnly = s.readOnly;\n (user[0] as any).hidePasswords = s.hidePasswords;\n }\n });\n }\n }\n\n this.allUsers.forEach((u) => {\n if (this.entity === \"collection\" && u.accessAll) {\n (u as any).checked = true;\n }\n if ((u as any).checked) {\n this.selectedCount++;\n }\n });\n }\n\n check(u: OrganizationUserUserDetailsResponse) {\n if (this.entity === \"collection\" && u.accessAll) {\n return;\n }\n (u as any).checked = !(u as any).checked;\n this.selectedChanged(u);\n }\n\n selectedChanged(u: OrganizationUserUserDetailsResponse) {\n if ((u as any).checked) {\n this.selectedCount++;\n } else {\n if (this.entity === \"collection\") {\n (u as any).readOnly = false;\n (u as any).hidePasswords = false;\n }\n this.selectedCount--;\n }\n }\n\n filterSelected(showSelected: boolean) {\n this.showSelected = showSelected;\n }\n\n async submit() {\n try {\n if (this.entity === \"group\") {\n const selections = this.users.filter((u) => (u as any).checked).map((u) => u.id);\n this.formPromise = this.apiService.putGroupUsers(\n this.organizationId,\n this.entityId,\n selections\n );\n } else {\n const selections = this.users\n .filter((u) => (u as any).checked && !u.accessAll)\n .map(\n (u) =>\n new SelectionReadOnlyRequest(u.id, !!(u as any).readOnly, !!(u as any).hidePasswords)\n );\n this.formPromise = this.apiService.putCollectionUsers(\n this.organizationId,\n this.entityId,\n selections\n );\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"updatedUsers\"));\n this.onEditedUsers.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n

{{ \"collections\" | i18n }}

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

{{ \"noCollectionsInList\" | i18n }}

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

{{ title }}

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

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

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

{{ \"groups\" | i18n }}

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

{{ \"noGroupsInList\" | i18n }}

\n \n \n \n \n {{ g.name }}\n \n \n \n \n \n \n \n\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { GroupResponse } from \"@bitwarden/common/models/response/group.response\";\n\nimport { EntityUsersComponent } from \"./entity-users.component\";\nimport { GroupAddEditComponent } from \"./group-add-edit.component\";\n\n@Component({\n selector: \"app-org-groups\",\n templateUrl: \"groups.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class GroupsComponent implements OnInit {\n @ViewChild(\"addEdit\", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild(\"usersTemplate\", { read: ViewContainerRef, static: true })\n usersModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n groups: GroupResponse[];\n pagedGroups: GroupResponse[];\n searchText: string;\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedGroupsCount = 0;\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n private i18nService: I18nService,\n private modalService: ModalService,\n private platformUtilsService: PlatformUtilsService,\n private searchService: SearchService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n /* eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe */\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n this.searchText = qParams.search;\n });\n });\n }\n\n async load() {\n const response = await this.apiService.getGroups(this.organizationId);\n const groups = response.data != null && response.data.length > 0 ? response.data : [];\n groups.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n this.groups = groups;\n this.resetPaging();\n this.loading = false;\n }\n\n loadMore() {\n if (!this.groups || this.groups.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedGroups.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedGroupsCount > this.pageSize) {\n pagedSize = this.pagedGroupsCount;\n }\n if (this.groups.length > pagedLength) {\n this.pagedGroups = this.pagedGroups.concat(\n this.groups.slice(pagedLength, pagedLength + pagedSize)\n );\n }\n this.pagedGroupsCount = this.pagedGroups.length;\n this.didScroll = this.pagedGroups.length > this.pageSize;\n }\n\n async edit(group: GroupResponse) {\n const [modal] = await this.modalService.openViewRef(\n GroupAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.groupId = group != null ? group.id : null;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onSavedGroup.subscribe(() => {\n modal.close();\n this.load();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onDeletedGroup.subscribe(() => {\n modal.close();\n this.removeGroup(group);\n });\n }\n );\n }\n\n add() {\n this.edit(null);\n }\n\n async delete(group: GroupResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteGroupConfirmation\"),\n group.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteGroup(this.organizationId, group.id);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedGroupId\", group.name)\n );\n this.removeGroup(group);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async users(group: GroupResponse) {\n const [modal] = await this.modalService.openViewRef(\n EntityUsersComponent,\n this.usersModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.entity = \"group\";\n comp.entityId = group.id;\n comp.entityName = group.name;\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onEditedUsers.subscribe(() => {\n modal.close();\n });\n }\n );\n }\n\n async resetPaging() {\n this.pagedGroups = [];\n this.loadMore();\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.groups && this.groups.length > this.pageSize;\n }\n\n private removeGroup(group: GroupResponse) {\n const index = this.groups.indexOf(group);\n if (index > -1) {\n this.groups.splice(index, 1);\n this.resetPaging();\n }\n }\n}\n","
\n
\n
\n
\n
{{ \"manage\" | i18n }}
\n
\n \n {{ \"members\" | i18n }}\n \n \n {{ \"collections\" | i18n }}\n \n \n {{ \"groups\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-org-manage\",\n templateUrl: \"manage.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class ManageComponent implements OnInit {\n organization: Organization;\n\n constructor(private route: ActivatedRoute, private organizationService: OrganizationService) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n });\n }\n}\n","export class OrganizationUserBulkRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","export class OrganizationUserConfirmRequest {\n key: string;\n}\n","
\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Component({\n selector: \"app-user-confirm\",\n templateUrl: \"user-confirm.component.html\",\n})\nexport class UserConfirmComponent implements OnInit {\n @Input() name: string;\n @Input() userId: string;\n @Input() publicKey: Uint8Array;\n @Output() onConfirmedUser = new EventEmitter();\n\n dontAskAgain = false;\n loading = true;\n fingerprint: string;\n formPromise: Promise;\n\n constructor(\n private cryptoService: CryptoService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n try {\n if (this.publicKey != null) {\n const fingerprint = await this.cryptoService.getFingerprint(\n this.userId,\n this.publicKey.buffer\n );\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join(\"-\");\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.loading = false;\n }\n\n async submit() {\n if (this.loading) {\n return;\n }\n\n if (this.dontAskAgain) {\n await this.stateService.setAutoConfirmFingerprints(true);\n }\n\n this.onConfirmedUser.emit();\n }\n}\n","import { Directive, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\nimport { ProviderUserStatusType } from \"@bitwarden/common/enums/providerUserStatusType\";\nimport { ProviderUserType } from \"@bitwarden/common/enums/providerUserType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { OrganizationUserUserDetailsResponse } from \"@bitwarden/common/models/response/organization-user.response\";\nimport { ProviderUserUserDetailsResponse } from \"@bitwarden/common/models/response/provider/provider-user.response\";\n\nimport { UserConfirmComponent } from \"../organizations/manage/user-confirm.component\";\n\ntype StatusType = OrganizationUserStatusType | ProviderUserStatusType;\n\nconst MaxCheckedCount = 500;\n\n@Directive()\nexport abstract class BasePeopleComponent<\n UserType extends ProviderUserUserDetailsResponse | OrganizationUserUserDetailsResponse\n> {\n @ViewChild(\"confirmTemplate\", { read: ViewContainerRef, static: true })\n confirmModalRef: ViewContainerRef;\n\n get allCount() {\n return this.activeUsers != null ? this.activeUsers.length : 0;\n }\n\n get invitedCount() {\n return this.statusMap.has(this.userStatusType.Invited)\n ? this.statusMap.get(this.userStatusType.Invited).length\n : 0;\n }\n\n get acceptedCount() {\n return this.statusMap.has(this.userStatusType.Accepted)\n ? this.statusMap.get(this.userStatusType.Accepted).length\n : 0;\n }\n\n get confirmedCount() {\n return this.statusMap.has(this.userStatusType.Confirmed)\n ? this.statusMap.get(this.userStatusType.Confirmed).length\n : 0;\n }\n\n get revokedCount() {\n return this.statusMap.has(this.userStatusType.Revoked)\n ? this.statusMap.get(this.userStatusType.Revoked).length\n : 0;\n }\n\n get showConfirmUsers(): boolean {\n return (\n this.activeUsers != null &&\n this.statusMap != null &&\n this.activeUsers.length > 1 &&\n this.confirmedCount > 0 &&\n this.confirmedCount < 3 &&\n this.acceptedCount > 0\n );\n }\n\n get showBulkConfirmUsers(): boolean {\n return this.acceptedCount > 0;\n }\n\n abstract userType: typeof OrganizationUserType | typeof ProviderUserType;\n abstract userStatusType: typeof OrganizationUserStatusType | typeof ProviderUserStatusType;\n\n loading = true;\n statusMap = new Map();\n status: StatusType;\n users: UserType[] = [];\n pagedUsers: UserType[] = [];\n searchText: string;\n actionPromise: Promise;\n\n protected allUsers: UserType[] = [];\n protected activeUsers: UserType[] = [];\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedUsersCount = 0;\n\n constructor(\n protected apiService: ApiService,\n private searchService: SearchService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected cryptoService: CryptoService,\n protected validationService: ValidationService,\n protected modalService: ModalService,\n private logService: LogService,\n private searchPipe: SearchPipe,\n protected userNamePipe: UserNamePipe,\n protected stateService: StateService\n ) {}\n\n abstract edit(user: UserType): void;\n abstract getUsers(): Promise>;\n abstract deleteUser(id: string): Promise;\n abstract revokeUser(id: string): Promise;\n abstract restoreUser(id: string): Promise;\n abstract reinviteUser(id: string): Promise;\n abstract confirmUser(user: UserType, publicKey: Uint8Array): Promise;\n\n async load() {\n const response = await this.getUsers();\n this.statusMap.clear();\n this.activeUsers = [];\n for (const status of Utils.iterateEnum(this.userStatusType)) {\n this.statusMap.set(status, []);\n }\n\n this.allUsers = response.data != null && response.data.length > 0 ? response.data : [];\n this.allUsers.sort(\n Utils.getSortFunction(\n this.i18nService,\n \"email\"\n )\n );\n this.allUsers.forEach((u) => {\n if (!this.statusMap.has(u.status)) {\n this.statusMap.set(u.status, [u]);\n } else {\n this.statusMap.get(u.status).push(u);\n }\n if (u.status !== this.userStatusType.Revoked) {\n this.activeUsers.push(u);\n }\n });\n this.filter(this.status);\n this.loading = false;\n }\n\n filter(status: StatusType) {\n this.status = status;\n if (this.status != null) {\n this.users = this.statusMap.get(this.status);\n } else {\n this.users = this.activeUsers;\n }\n // Reset checkbox selecton\n this.selectAll(false);\n this.resetPaging();\n }\n\n loadMore() {\n if (!this.users || this.users.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedUsers.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedUsersCount > this.pageSize) {\n pagedSize = this.pagedUsersCount;\n }\n if (this.users.length > pagedLength) {\n this.pagedUsers = this.pagedUsers.concat(\n this.users.slice(pagedLength, pagedLength + pagedSize)\n );\n }\n this.pagedUsersCount = this.pagedUsers.length;\n this.didScroll = this.pagedUsers.length > this.pageSize;\n }\n\n checkUser(user: OrganizationUserUserDetailsResponse, select?: boolean) {\n (user as any).checked = select == null ? !(user as any).checked : select;\n }\n\n selectAll(select: boolean) {\n if (select) {\n this.selectAll(false);\n }\n\n const filteredUsers = this.searchPipe.transform(\n this.users,\n this.searchText,\n \"name\",\n \"email\",\n \"id\"\n );\n\n const selectCount =\n select && filteredUsers.length > MaxCheckedCount ? MaxCheckedCount : filteredUsers.length;\n for (let i = 0; i < selectCount; i++) {\n this.checkUser(filteredUsers[i], select);\n }\n }\n\n async resetPaging() {\n this.pagedUsers = [];\n this.loadMore();\n }\n\n invite() {\n this.edit(null);\n }\n\n protected async removeUserConfirmationDialog(user: UserType) {\n return this.platformUtilsService.showDialog(\n this.i18nService.t(\"removeUserConfirmation\"),\n this.userNamePipe.transform(user),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n }\n\n async remove(user: UserType) {\n const confirmed = await this.removeUserConfirmationDialog(user);\n if (!confirmed) {\n return false;\n }\n\n this.actionPromise = this.deleteUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedUserId\", this.userNamePipe.transform(user))\n );\n this.removeUser(user);\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async revoke(user: UserType) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.revokeWarningMessage(),\n this.i18nService.t(\"revokeUserId\", this.userNamePipe.transform(user)),\n this.i18nService.t(\"revokeAccess\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n this.actionPromise = this.revokeUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"revokedUserId\", this.userNamePipe.transform(user))\n );\n await this.load();\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async restore(user: UserType) {\n this.actionPromise = this.restoreUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"restoredUserId\", this.userNamePipe.transform(user))\n );\n await this.load();\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async reinvite(user: UserType) {\n if (this.actionPromise != null) {\n return;\n }\n\n this.actionPromise = this.reinviteUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenReinvited\", this.userNamePipe.transform(user))\n );\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async confirm(user: UserType) {\n function updateUser(self: BasePeopleComponent) {\n user.status = self.userStatusType.Confirmed;\n const mapIndex = self.statusMap.get(self.userStatusType.Accepted).indexOf(user);\n if (mapIndex > -1) {\n self.statusMap.get(self.userStatusType.Accepted).splice(mapIndex, 1);\n self.statusMap.get(self.userStatusType.Confirmed).push(user);\n }\n }\n\n const confirmUser = async (publicKey: Uint8Array) => {\n try {\n this.actionPromise = this.confirmUser(user, publicKey);\n await this.actionPromise;\n updateUser(this);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenConfirmed\", this.userNamePipe.transform(user))\n );\n } catch (e) {\n this.validationService.showError(e);\n throw e;\n } finally {\n this.actionPromise = null;\n }\n };\n\n if (this.actionPromise != null) {\n return;\n }\n\n try {\n const publicKeyResponse = await this.apiService.getUserPublicKey(user.userId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n const autoConfirm = await this.stateService.getAutoConfirmFingerPrints();\n if (autoConfirm == null || !autoConfirm) {\n const [modal] = await this.modalService.openViewRef(\n UserConfirmComponent,\n this.confirmModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.userId = user != null ? user.userId : null;\n comp.publicKey = publicKey;\n // eslint-disable-next-line rxjs/no-async-subscribe\n comp.onConfirmedUser.subscribe(async () => {\n try {\n comp.formPromise = confirmUser(publicKey);\n await comp.formPromise;\n modal.close();\n } catch (e) {\n this.logService.error(e);\n }\n });\n }\n );\n return;\n }\n\n try {\n const fingerprint = await this.cryptoService.getFingerprint(user.userId, publicKey.buffer);\n this.logService.info(`User's fingerprint: ${fingerprint.join(\"-\")}`);\n } catch (e) {\n this.logService.error(e);\n }\n await confirmUser(publicKey);\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.users && this.users.length > this.pageSize;\n }\n\n protected revokeWarningMessage(): string {\n return this.i18nService.t(\"revokeUserConfirmation\");\n }\n\n protected getCheckedUsers() {\n return this.users.filter((u) => (u as any).checked);\n }\n\n protected removeUser(user: UserType) {\n let index = this.users.indexOf(user);\n if (index > -1) {\n this.users.splice(index, 1);\n this.resetPaging();\n }\n if (this.statusMap.has(user.status)) {\n index = this.statusMap.get(user.status).indexOf(user);\n if (index > -1) {\n this.statusMap.get(user.status).splice(index, 1);\n }\n }\n }\n}\n","type OrganizationUserBulkRequestEntry = {\n id: string;\n key: string;\n};\n\nexport class OrganizationUserBulkConfirmRequest {\n keys: OrganizationUserBulkRequestEntry[];\n\n constructor(keys: OrganizationUserBulkRequestEntry[]) {\n this.keys = keys;\n }\n}\n","\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { OrganizationUserBulkConfirmRequest } from \"@bitwarden/common/models/request/organization-user-bulk-confirm.request\";\nimport { OrganizationUserBulkRequest } from \"@bitwarden/common/models/request/organization-user-bulk.request\";\n\nimport { BulkUserDetails } from \"./bulk-status.component\";\n\n@Component({\n selector: \"app-bulk-confirm\",\n templateUrl: \"bulk-confirm.component.html\",\n})\nexport class BulkConfirmComponent implements OnInit {\n @Input() organizationId: string;\n @Input() users: BulkUserDetails[];\n\n excludedUsers: BulkUserDetails[];\n filteredUsers: BulkUserDetails[];\n publicKeys: Map = new Map();\n fingerprints: Map = new Map();\n statuses: Map = new Map();\n\n loading = true;\n done = false;\n error: string;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n this.excludedUsers = this.users.filter((u) => !this.isAccepted(u));\n this.filteredUsers = this.users.filter((u) => this.isAccepted(u));\n\n if (this.filteredUsers.length <= 0) {\n this.done = true;\n }\n\n const response = await this.getPublicKeys();\n\n for (const entry of response.data) {\n const publicKey = Utils.fromB64ToArray(entry.key);\n const fingerprint = await this.cryptoService.getFingerprint(entry.userId, publicKey.buffer);\n if (fingerprint != null) {\n this.publicKeys.set(entry.id, publicKey);\n this.fingerprints.set(entry.id, fingerprint.join(\"-\"));\n }\n }\n\n this.loading = false;\n }\n\n async submit() {\n this.loading = true;\n try {\n const key = await this.getCryptoKey();\n const userIdsWithKeys: any[] = [];\n for (const user of this.filteredUsers) {\n const publicKey = this.publicKeys.get(user.id);\n if (publicKey == null) {\n continue;\n }\n const encryptedKey = await this.cryptoService.rsaEncrypt(key.key, publicKey.buffer);\n userIdsWithKeys.push({\n id: user.id,\n key: encryptedKey.encryptedString,\n });\n }\n const response = await this.postConfirmRequest(userIdsWithKeys);\n\n response.data.forEach((entry) => {\n const error = entry.error !== \"\" ? entry.error : this.i18nService.t(\"bulkConfirmMessage\");\n this.statuses.set(entry.id, error);\n });\n\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n this.loading = false;\n }\n\n protected isAccepted(user: BulkUserDetails) {\n return user.status === OrganizationUserStatusType.Accepted;\n }\n\n protected async getPublicKeys() {\n const request = new OrganizationUserBulkRequest(this.filteredUsers.map((user) => user.id));\n return await this.apiService.postOrganizationUsersPublicKey(this.organizationId, request);\n }\n\n protected getCryptoKey() {\n return this.cryptoService.getOrgKey(this.organizationId);\n }\n\n protected async postConfirmRequest(userIdsWithKeys: any[]) {\n const request = new OrganizationUserBulkConfirmRequest(userIdsWithKeys);\n return await this.apiService.postOrganizationUserBulkConfirm(this.organizationId, request);\n }\n}\n","
\n
\n
\n
\n

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

\n \n ×\n \n
\n
\n \n {{ \"noSelectedUsersApplicable\" | i18n }}\n \n \n {{ error }}\n \n \n 0 && !error\">\n {{ removeUsersWarning }}\n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}
\n \n \n {{ user.email }}\n {{ user.name }}\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}{{ \"status\" | i18n }}
\n \n \n {{ user.email }}\n {{ user.name }}\n \n {{ statuses.get(user.id) }}\n \n {{ \"bulkFilteredMessage\" | i18n }}\n
\n
\n
\n
\n 0\"\n [disabled]=\"loading\"\n (click)=\"submit()\"\n >\n \n {{ \"removeUsers\" | i18n }}\n \n \n
\n
\n
\n
\n","import { Component, Input } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationUserBulkRequest } from \"@bitwarden/common/models/request/organization-user-bulk.request\";\n\nimport { BulkUserDetails } from \"./bulk-status.component\";\n\n@Component({\n selector: \"app-bulk-remove\",\n templateUrl: \"bulk-remove.component.html\",\n})\nexport class BulkRemoveComponent {\n @Input() organizationId: string;\n @Input() users: BulkUserDetails[];\n\n statuses: Map = new Map();\n\n loading = false;\n done = false;\n error: string;\n\n constructor(protected apiService: ApiService, protected i18nService: I18nService) {}\n\n async submit() {\n this.loading = true;\n try {\n const response = await this.deleteUsers();\n\n response.data.forEach((entry) => {\n const error = entry.error !== \"\" ? entry.error : this.i18nService.t(\"bulkRemovedMessage\");\n this.statuses.set(entry.id, error);\n });\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n\n this.loading = false;\n }\n\n protected async deleteUsers() {\n const request = new OrganizationUserBulkRequest(this.users.map((user) => user.id));\n return await this.apiService.deleteManyOrganizationUsers(this.organizationId, request);\n }\n\n protected get removeUsersWarning() {\n return this.i18nService.t(\"removeOrgUsersConfirmation\");\n }\n}\n","
\n
\n
\n
\n

\n {{ bulkTitle }}\n

\n \n ×\n \n
\n
\n \n {{ \"noSelectedUsersApplicable\" | i18n }}\n \n \n {{ error }}\n \n \n 0 && !error && isRevoking\">\n {{ \"revokeUsersWarning\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}
\n \n \n {{ user.email }}\n {{ user.name }}\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}{{ \"status\" | i18n }}
\n \n \n {{ user.email }}\n {{ user.name }}\n \n {{ statuses.get(user.id) }}\n \n {{ \"bulkFilteredMessage\" | i18n }}\n
\n
\n
\n
\n 0\"\n [disabled]=\"loading\"\n (click)=\"submit()\"\n >\n \n {{ bulkTitle }}\n \n \n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ModalConfig } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationUserBulkRequest } from \"@bitwarden/common/models/request/organization-user-bulk.request\";\n\nimport { BulkUserDetails } from \"./bulk-status.component\";\n\n@Component({\n selector: \"app-bulk-restore-revoke\",\n templateUrl: \"bulk-restore-revoke.component.html\",\n})\nexport class BulkRestoreRevokeComponent {\n isRevoking: boolean;\n organizationId: string;\n users: BulkUserDetails[];\n\n statuses: Map = new Map();\n\n loading = false;\n done = false;\n error: string;\n\n constructor(\n protected apiService: ApiService,\n protected i18nService: I18nService,\n config: ModalConfig\n ) {\n this.isRevoking = config.data.isRevoking;\n this.organizationId = config.data.organizationId;\n this.users = config.data.users;\n }\n\n get bulkTitle() {\n const titleKey = this.isRevoking ? \"revokeUsers\" : \"restoreUsers\";\n return this.i18nService.t(titleKey);\n }\n\n async submit() {\n this.loading = true;\n try {\n const response = await this.performBulkUserAction();\n\n const bulkMessage = this.isRevoking ? \"bulkRevokedMessage\" : \"bulkRestoredMessage\";\n response.data.forEach((entry) => {\n const error = entry.error !== \"\" ? entry.error : this.i18nService.t(bulkMessage);\n this.statuses.set(entry.id, error);\n });\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n\n this.loading = false;\n }\n\n protected async performBulkUserAction() {\n const request = new OrganizationUserBulkRequest(this.users.map((user) => user.id));\n if (this.isRevoking) {\n return await this.apiService.revokeManyOrganizationUsers(this.organizationId, request);\n } else {\n return await this.apiService.restoreManyOrganizationUsers(this.organizationId, request);\n }\n }\n}\n","
\n
\n
\n
\n

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

\n \n ×\n \n
\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}{{ \"status\" | i18n }}
\n \n \n {{ item.user.email }}\n {{ item.user.name }}\n \n {{ item.message }}\n \n {{ item.message }}\n
\n
\n
\n \n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { ProviderUserStatusType } from \"@bitwarden/common/enums/providerUserStatusType\";\n\nexport interface BulkUserDetails {\n id: string;\n name: string;\n email: string;\n status: OrganizationUserStatusType | ProviderUserStatusType;\n}\n\ntype BulkStatusEntry = {\n user: BulkUserDetails;\n error: boolean;\n message: string;\n};\n\n@Component({\n selector: \"app-bulk-status\",\n templateUrl: \"bulk-status.component.html\",\n})\nexport class BulkStatusComponent {\n users: BulkStatusEntry[];\n loading = false;\n}\n","
\n
\n
\n
\n

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

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n
\n
\n \n \n -\n \n \n
\n \n \n {{ \"refresh\" | i18n }}\n \n
\n
\n
\n {{ \"noEventsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"timestamp\" | i18n }}\n {{ \"device\" | i18n }}\n {{ \"user\" | i18n }}{{ \"event\" | i18n }}
{{ e.date | date: \"medium\" }}\n \n {{ e.appName }}, {{ e.ip }}\n \n {{ e.userName }}\n
\n \n \n {{ \"loadMore\" | i18n }}\n \n
\n
\n \n
\n
\n
\n
\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { EventResponse } from \"@bitwarden/common/models/response/event.response\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\n\nimport { EventService } from \"../../core\";\n\n@Component({\n selector: \"app-entity-events\",\n templateUrl: \"entity-events.component.html\",\n})\nexport class EntityEventsComponent implements OnInit {\n @Input() name: string;\n @Input() entity: \"user\" | \"cipher\";\n @Input() entityId: string;\n @Input() organizationId: string;\n @Input() providerId: string;\n @Input() showUser = false;\n\n loading = true;\n loaded = false;\n events: any[];\n start: string;\n end: string;\n continuationToken: string;\n refreshPromise: Promise;\n morePromise: Promise;\n\n private orgUsersUserIdMap = new Map();\n private orgUsersIdMap = new Map();\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private eventService: EventService,\n private platformUtilsService: PlatformUtilsService,\n private userNamePipe: UserNamePipe,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n await this.load();\n }\n\n async load() {\n if (this.showUser) {\n const response = await this.apiService.getOrganizationUsers(this.organizationId);\n response.data.forEach((u) => {\n const name = this.userNamePipe.transform(u);\n this.orgUsersIdMap.set(u.id, { name: name, email: u.email });\n this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n });\n }\n await this.loadEvents(true);\n this.loaded = true;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.refreshPromise != null || this.morePromise != null) {\n return;\n }\n\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidDateRange\")\n );\n return;\n }\n\n this.loading = true;\n let response: ListResponse;\n try {\n let promise: Promise;\n if (this.entity === \"user\" && this.providerId) {\n promise = this.apiService.getEventsProviderUser(\n this.providerId,\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n } else if (this.entity === \"user\") {\n promise = this.apiService.getEventsOrganizationUser(\n this.organizationId,\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n } else {\n promise = this.apiService.getEventsCipher(\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n }\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n response = await promise;\n } catch (e) {\n this.logService.error(e);\n }\n\n this.continuationToken = response.continuationToken;\n const events = await Promise.all(\n response.data.map(async (r) => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = await this.eventService.getEventInfo(r);\n const user =\n this.showUser && userId != null && this.orgUsersUserIdMap.has(userId)\n ? this.orgUsersUserIdMap.get(userId)\n : null;\n return {\n message: eventInfo.message,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: user != null ? user.name : this.showUser ? this.i18nService.t(\"unknown\") : null,\n userEmail: user != null ? user.email : this.showUser ? \"\" : null,\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n };\n })\n );\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n}\n","
\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport zxcvbn from \"zxcvbn\";\n\nimport { PasswordStrengthComponent } from \"@bitwarden/angular/shared/components/password-strength/password-strength.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { OrganizationUserResetPasswordRequest } from \"@bitwarden/common/models/request/organization-user-reset-password.request\";\n\n@Component({\n selector: \"app-reset-password\",\n templateUrl: \"reset-password.component.html\",\n})\nexport class ResetPasswordComponent implements OnInit, OnDestroy {\n @Input() name: string;\n @Input() email: string;\n @Input() id: string;\n @Input() organizationId: string;\n @Output() onPasswordReset = new EventEmitter();\n @ViewChild(PasswordStrengthComponent) passwordStrengthComponent: PasswordStrengthComponent;\n\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n newPassword: string = null;\n showPassword = false;\n passwordStrengthResult: zxcvbn.ZXCVBNResult;\n formPromise: Promise;\n\n private destroy$ = new Subject();\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private passwordGenerationService: PasswordGenerationService,\n private policyService: PolicyService,\n private cryptoService: CryptoService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.policyService\n .masterPasswordPolicyOptions$()\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (enforcedPasswordPolicyOptions) =>\n (this.enforcedPolicyOptions = enforcedPasswordPolicyOptions)\n );\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n get loggedOutWarningName() {\n return this.name != null ? this.name : this.i18nService.t(\"thisUser\");\n }\n\n async generatePassword() {\n const options = (await this.passwordGenerationService.getOptions())?.[0] ?? {};\n this.newPassword = await this.passwordGenerationService.generatePassword(options);\n this.passwordStrengthComponent.updatePasswordStrength(this.newPassword);\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"newPassword\").focus();\n }\n\n copy(value: string) {\n if (value == null) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"password\"))\n );\n }\n\n async submit() {\n // Validation\n if (this.newPassword == null || this.newPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordRequired\")\n );\n return false;\n }\n\n if (this.newPassword.length < 8) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordMinlength\")\n );\n return false;\n }\n\n if (\n this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n this.passwordStrengthResult.score,\n this.newPassword,\n this.enforcedPolicyOptions\n )\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordPolicyRequirementsNotMet\")\n );\n return;\n }\n\n if (this.passwordStrengthResult.score < 3) {\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"weakMasterPasswordDesc\"),\n this.i18nService.t(\"weakMasterPassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n return false;\n }\n }\n\n // Get user Information (kdf type, kdf iterations, resetPasswordKey, private key) and change password\n try {\n this.formPromise = this.apiService\n .getOrganizationUserResetPasswordDetails(this.organizationId, this.id)\n .then(async (response) => {\n if (response == null) {\n throw new Error(this.i18nService.t(\"resetPasswordDetailsError\"));\n }\n\n const kdfType = response.kdf;\n const kdfIterations = response.kdfIterations;\n const resetPasswordKey = response.resetPasswordKey;\n const encryptedPrivateKey = response.encryptedPrivateKey;\n\n // Decrypt Organization's encrypted Private Key with org key\n const orgSymKey = await this.cryptoService.getOrgKey(this.organizationId);\n const decPrivateKey = await this.cryptoService.decryptToBytes(\n new EncString(encryptedPrivateKey),\n orgSymKey\n );\n\n // Decrypt User's Reset Password Key to get EncKey\n const decValue = await this.cryptoService.rsaDecrypt(resetPasswordKey, decPrivateKey);\n const userEncKey = new SymmetricCryptoKey(decValue);\n\n // Create new key and hash new password\n const newKey = await this.cryptoService.makeKey(\n this.newPassword,\n this.email.trim().toLowerCase(),\n kdfType,\n kdfIterations\n );\n const newPasswordHash = await this.cryptoService.hashPassword(this.newPassword, newKey);\n\n // Create new encKey for the User\n const newEncKey = await this.cryptoService.remakeEncKey(newKey, userEncKey);\n\n // Create request\n const request = new OrganizationUserResetPasswordRequest();\n request.key = newEncKey[1].encryptedString;\n request.newMasterPasswordHash = newPasswordHash;\n\n // Change user's password\n return this.apiService.putOrganizationUserResetPassword(\n this.organizationId,\n this.id,\n request\n );\n });\n\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"resetPasswordSuccess\")\n );\n this.onPasswordReset.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n getStrengthResult(result: zxcvbn.ZXCVBNResult) {\n this.passwordStrengthResult = result;\n }\n}\n","import { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\n\nimport { SelectionReadOnlyRequest } from \"./selection-read-only.request\";\n\nexport class OrganizationUserInviteRequest {\n emails: string[] = [];\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","import { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\n\nimport { SelectionReadOnlyRequest } from \"./selection-read-only.request\";\n\nexport class OrganizationUserUpdateRequest {\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","
\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Component({\n selector: \"app-nested-checkbox\",\n templateUrl: \"nested-checkbox.component.html\",\n})\nexport class NestedCheckboxComponent {\n @Input() parentId: string;\n @Input() checkboxes: { id: string; get: () => boolean; set: (v: boolean) => void }[];\n @Output() onSavedUser = new EventEmitter();\n @Output() onDeletedUser = new EventEmitter();\n\n get parentIndeterminate() {\n return !this.parentChecked && this.checkboxes.some((c) => c.get());\n }\n\n get parentChecked() {\n return this.checkboxes.every((c) => c.get());\n }\n\n set parentChecked(value: boolean) {\n this.checkboxes.forEach((c) => {\n c.set(value);\n });\n }\n\n pascalize(s: string) {\n return Utils.camelToPascalCase(s);\n }\n}\n","
\n
\n \n
\n

\n {{ title }}\n {{ name }}\n {{ \"revoked\" | i18n }}\n

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

{{ \"inviteUserDesc\" | i18n }}

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

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

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

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

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

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

\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n  \n {{ \"name\" | i18n }}\n {{ \"hidePasswords\" | i18n }}\n {{ \"readOnly\" | i18n }}\n \n \n \n \n \n \n \n \n {{ c.name }}\n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n \n
\n \n \n {{ \"restoreAccess\" | i18n }}\n \n \n \n {{ \"revokeAccess\" | i18n }}\n \n \n \n \n \n
\n
\n \n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\nimport { PermissionsApi } from \"@bitwarden/common/models/api/permissions.api\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collection.data\";\nimport { Collection } from \"@bitwarden/common/models/domain/collection\";\nimport { OrganizationUserInviteRequest } from \"@bitwarden/common/models/request/organization-user-invite.request\";\nimport { OrganizationUserUpdateRequest } from \"@bitwarden/common/models/request/organization-user-update.request\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selection-read-only.request\";\nimport { CollectionDetailsResponse } from \"@bitwarden/common/models/response/collection.response\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\n\n@Component({\n selector: \"app-user-add-edit\",\n templateUrl: \"user-add-edit.component.html\",\n})\nexport class UserAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() organizationUserId: string;\n @Input() organizationId: string;\n @Input() usesKeyConnector = false;\n @Output() onSavedUser = new EventEmitter();\n @Output() onDeletedUser = new EventEmitter();\n @Output() onRevokedUser = new EventEmitter();\n @Output() onRestoredUser = new EventEmitter();\n\n loading = true;\n editMode = false;\n isRevoked = false;\n title: string;\n emails: string;\n type: OrganizationUserType = OrganizationUserType.User;\n permissions = new PermissionsApi();\n showCustom = false;\n access: \"all\" | \"selected\" = \"selected\";\n collections: CollectionView[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n organizationUserType = OrganizationUserType;\n canUseCustomPermissions: boolean;\n\n manageAllCollectionsCheckboxes = [\n {\n id: \"createNewCollections\",\n get: () => this.permissions.createNewCollections,\n set: (v: boolean) => (this.permissions.createNewCollections = v),\n },\n {\n id: \"editAnyCollection\",\n get: () => this.permissions.editAnyCollection,\n set: (v: boolean) => (this.permissions.editAnyCollection = v),\n },\n {\n id: \"deleteAnyCollection\",\n get: () => this.permissions.deleteAnyCollection,\n set: (v: boolean) => (this.permissions.deleteAnyCollection = v),\n },\n ];\n\n manageAssignedCollectionsCheckboxes = [\n {\n id: \"editAssignedCollections\",\n get: () => this.permissions.editAssignedCollections,\n set: (v: boolean) => (this.permissions.editAssignedCollections = v),\n },\n {\n id: \"deleteAssignedCollections\",\n get: () => this.permissions.deleteAssignedCollections,\n set: (v: boolean) => (this.permissions.deleteAssignedCollections = v),\n },\n ];\n\n get customUserTypeSelected(): boolean {\n return this.type === OrganizationUserType.Custom;\n }\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService,\n private organizationService: OrganizationService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.editMode = this.loading = this.organizationUserId != null;\n const organization = this.organizationService.get(this.organizationId);\n this.canUseCustomPermissions = organization.useCustomPermissions;\n await this.loadCollections();\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editUser\");\n try {\n const user = await this.apiService.getOrganizationUser(\n this.organizationId,\n this.organizationUserId\n );\n this.access = user.accessAll ? \"all\" : \"selected\";\n this.type = user.type;\n this.isRevoked = user.status === OrganizationUserStatusType.Revoked;\n if (user.type === OrganizationUserType.Custom) {\n this.permissions = user.permissions;\n }\n if (user.collections != null && this.collections != null) {\n user.collections.forEach((s) => {\n const collection = this.collections.filter((c) => c.id === s.id);\n if (collection != null && collection.length > 0) {\n (collection[0] as any).checked = true;\n collection[0].readOnly = s.readOnly;\n collection[0].hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"inviteUser\");\n }\n\n this.loading = false;\n }\n\n async loadCollections() {\n const response = await this.apiService.getCollections(this.organizationId);\n const collections = response.data.map(\n (r) => new Collection(new CollectionData(r as CollectionDetailsResponse))\n );\n this.collections = await this.collectionService.decryptMany(collections);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n if (!(c as any).checked) {\n c.readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.collections.forEach((c) => this.check(c, select));\n }\n\n setRequestPermissions(p: PermissionsApi, clearPermissions: boolean) {\n Object.assign(p, clearPermissions ? new PermissionsApi() : this.permissions);\n return p;\n }\n\n handleDependentPermissions() {\n // Manage Password Reset must have Manage Users enabled\n if (this.permissions.manageResetPassword && !this.permissions.manageUsers) {\n this.permissions.manageUsers = true;\n (document.getElementById(\"manageUsers\") as HTMLInputElement).checked = true;\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"resetPasswordManageUsers\")\n );\n }\n }\n\n async submit() {\n if (!this.canUseCustomPermissions && this.type === OrganizationUserType.Custom) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"customNonEnterpriseError\")\n );\n return;\n }\n\n let collections: SelectionReadOnlyRequest[] = null;\n if (this.access !== \"all\") {\n collections = this.collections\n .filter((c) => (c as any).checked)\n .map((c) => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));\n }\n\n try {\n if (this.editMode) {\n this.updateUser(collections);\n } else {\n this.inviteUser(collections);\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedUserId\" : \"invitedUsers\", this.name)\n );\n this.onSavedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const message = this.usesKeyConnector\n ? \"removeUserConfirmationKeyConnector\"\n : \"removeOrgUserConfirmation\";\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(message),\n this.i18nService.t(\"removeUserIdAccess\", this.name),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteOrganizationUser(\n this.organizationId,\n this.organizationUserId\n );\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedUserId\", this.name)\n );\n this.onDeletedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async revoke() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"revokeUserConfirmation\"),\n this.i18nService.t(\"revokeUserId\", this.name),\n this.i18nService.t(\"revokeAccess\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.formPromise = this.apiService.revokeOrganizationUser(\n this.organizationId,\n this.organizationUserId\n );\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"revokedUserId\", this.name)\n );\n this.isRevoked = true;\n this.onRevokedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async restore() {\n if (!this.editMode) {\n return;\n }\n\n try {\n this.formPromise = this.apiService.restoreOrganizationUser(\n this.organizationId,\n this.organizationUserId\n );\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"restoredUserId\", this.name)\n );\n this.isRevoked = false;\n this.onRestoredUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n updateUser(collections: SelectionReadOnlyRequest[]) {\n const request = new OrganizationUserUpdateRequest();\n request.accessAll = this.access === \"all\";\n request.type = this.type;\n request.collections = collections;\n request.permissions = this.setRequestPermissions(\n request.permissions ?? new PermissionsApi(),\n request.type !== OrganizationUserType.Custom\n );\n this.formPromise = this.apiService.putOrganizationUser(\n this.organizationId,\n this.organizationUserId,\n request\n );\n }\n\n inviteUser(collections: SelectionReadOnlyRequest[]) {\n const request = new OrganizationUserInviteRequest();\n request.emails = [...new Set(this.emails.trim().split(/\\s*,\\s*/))];\n request.accessAll = this.access === \"all\";\n request.type = this.type;\n request.permissions = this.setRequestPermissions(\n request.permissions ?? new PermissionsApi(),\n request.type !== OrganizationUserType.Custom\n );\n request.collections = collections;\n this.formPromise = this.apiService.postOrganizationUserInvite(this.organizationId, request);\n }\n}\n","export class OrganizationUserUpdateGroupsRequest {\n groupIds: string[] = [];\n}\n","
\n
\n
\n
\n

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

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

{{ \"groupAccessUserDesc\" | i18n }}

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

{{ \"members\" | i18n }}

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

{{ \"noUsersInList\" | i18n }}

\n \n \n {{ \"usersNeedConfirmed\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n \n {{ u.email }}\n {{\n \"invited\" | i18n\n }}\n {{\n \"accepted\" | i18n\n }}\n {{\n \"revoked\" | i18n\n }}\n {{ u.name }}\n \n \n \n \n {{ \"userUsingTwoStep\" | i18n }}\n \n \n \n {{ \"enrolledPasswordReset\" | i18n }}\n \n \n \n {{ \"owner\" | i18n }}\n {{ \"admin\" | i18n }}\n {{ \"manager\" | i18n }}\n {{ \"user\" | i18n }}\n {{ \"custom\" | i18n }}\n \n \n
\n \n \n \n
\n \n \n {{ \"resendInvitation\" | i18n }}\n \n \n \n {{ \"confirm\" | i18n }}\n \n \n \n {{ \"groups\" | i18n }}\n \n \n \n {{ \"eventLogs\" | i18n }}\n \n \n \n {{ \"resetPassword\" | i18n }}\n \n \n \n {{ \"restoreAccess\" | i18n }}\n \n \n \n {{ \"revokeAccess\" | i18n }}\n \n \n \n {{ \"remove\" | i18n }}\n \n
\n
\n \n \n \n \n
\n\n\n\n\n\n\n\n\n\n","import { Component, OnDestroy, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { combineLatest, concatMap, Subject, takeUntil } from \"rxjs\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { OrganizationKeysRequest } from \"@bitwarden/common/models/request/organization-keys.request\";\nimport { OrganizationUserBulkRequest } from \"@bitwarden/common/models/request/organization-user-bulk.request\";\nimport { OrganizationUserConfirmRequest } from \"@bitwarden/common/models/request/organization-user-confirm.request\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { OrganizationUserBulkResponse } from \"@bitwarden/common/models/response/organization-user-bulk.response\";\nimport { OrganizationUserUserDetailsResponse } from \"@bitwarden/common/models/response/organization-user.response\";\n\nimport { BasePeopleComponent } from \"../../common/base.people.component\";\n\nimport { BulkConfirmComponent } from \"./bulk/bulk-confirm.component\";\nimport { BulkRemoveComponent } from \"./bulk/bulk-remove.component\";\nimport { BulkRestoreRevokeComponent } from \"./bulk/bulk-restore-revoke.component\";\nimport { BulkStatusComponent } from \"./bulk/bulk-status.component\";\nimport { EntityEventsComponent } from \"./entity-events.component\";\nimport { ResetPasswordComponent } from \"./reset-password.component\";\nimport { UserAddEditComponent } from \"./user-add-edit.component\";\nimport { UserGroupsComponent } from \"./user-groups.component\";\n\n@Component({\n selector: \"app-org-people\",\n templateUrl: \"people.component.html\",\n})\nexport class PeopleComponent\n extends BasePeopleComponent\n implements OnInit, OnDestroy\n{\n @ViewChild(\"addEdit\", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild(\"groupsTemplate\", { read: ViewContainerRef, static: true })\n groupsModalRef: ViewContainerRef;\n @ViewChild(\"eventsTemplate\", { read: ViewContainerRef, static: true })\n eventsModalRef: ViewContainerRef;\n @ViewChild(\"confirmTemplate\", { read: ViewContainerRef, static: true })\n confirmModalRef: ViewContainerRef;\n @ViewChild(\"resetPasswordTemplate\", { read: ViewContainerRef, static: true })\n resetPasswordModalRef: ViewContainerRef;\n @ViewChild(\"bulkStatusTemplate\", { read: ViewContainerRef, static: true })\n bulkStatusModalRef: ViewContainerRef;\n @ViewChild(\"bulkConfirmTemplate\", { read: ViewContainerRef, static: true })\n bulkConfirmModalRef: ViewContainerRef;\n @ViewChild(\"bulkRemoveTemplate\", { read: ViewContainerRef, static: true })\n bulkRemoveModalRef: ViewContainerRef;\n\n userType = OrganizationUserType;\n userStatusType = OrganizationUserStatusType;\n\n organizationId: string;\n status: OrganizationUserStatusType = null;\n accessEvents = false;\n accessGroups = false;\n canResetPassword = false; // User permission (admin/custom)\n orgUseResetPassword = false; // Org plan ability\n orgHasKeys = false; // Org public/private keys\n orgResetPasswordPolicyEnabled = false;\n callingUserType: OrganizationUserType = null;\n\n private destroy$ = new Subject();\n\n constructor(\n apiService: ApiService,\n private route: ActivatedRoute,\n i18nService: I18nService,\n modalService: ModalService,\n platformUtilsService: PlatformUtilsService,\n cryptoService: CryptoService,\n searchService: SearchService,\n validationService: ValidationService,\n private policyService: PolicyService,\n logService: LogService,\n searchPipe: SearchPipe,\n userNamePipe: UserNamePipe,\n private syncService: SyncService,\n stateService: StateService,\n private organizationService: OrganizationService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {\n super(\n apiService,\n searchService,\n i18nService,\n platformUtilsService,\n cryptoService,\n validationService,\n modalService,\n logService,\n searchPipe,\n userNamePipe,\n stateService\n );\n }\n\n async ngOnInit() {\n combineLatest([this.route.params, this.route.queryParams, this.policyService.policies$])\n .pipe(\n concatMap(async ([params, qParams, policies]) => {\n this.organizationId = params.organizationId;\n const organization = await this.organizationService.get(this.organizationId);\n this.accessEvents = organization.useEvents;\n this.accessGroups = organization.useGroups;\n this.canResetPassword = organization.canManageUsersPassword;\n this.orgUseResetPassword = organization.useResetPassword;\n this.callingUserType = organization.type;\n this.orgHasKeys = organization.hasPublicAndPrivateKeys;\n\n // Backfill pub/priv key if necessary\n if (this.canResetPassword && !this.orgHasKeys) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n const request = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n const response = await this.organizationApiService.updateKeys(\n this.organizationId,\n request\n );\n if (response != null) {\n this.orgHasKeys = response.publicKey != null && response.privateKey != null;\n await this.syncService.fullSync(true); // Replace oganizations with new data\n } else {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n }\n\n const resetPasswordPolicy = policies\n .filter((policy) => policy.type === PolicyType.ResetPassword)\n .find((p) => p.organizationId === this.organizationId);\n this.orgResetPasswordPolicyEnabled = resetPasswordPolicy?.enabled;\n\n await this.load();\n\n this.searchText = qParams.search;\n if (qParams.viewEvents != null) {\n const user = this.users.filter((u) => u.id === qParams.viewEvents);\n if (user.length > 0 && user[0].status === OrganizationUserStatusType.Confirmed) {\n this.events(user[0]);\n }\n }\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async load() {\n super.load();\n await super.load();\n }\n\n getUsers(): Promise> {\n return this.apiService.getOrganizationUsers(this.organizationId);\n }\n\n deleteUser(id: string): Promise {\n return this.apiService.deleteOrganizationUser(this.organizationId, id);\n }\n\n revokeUser(id: string): Promise {\n return this.apiService.revokeOrganizationUser(this.organizationId, id);\n }\n\n restoreUser(id: string): Promise {\n return this.apiService.restoreOrganizationUser(this.organizationId, id);\n }\n\n reinviteUser(id: string): Promise {\n return this.apiService.postOrganizationUserReinvite(this.organizationId, id);\n }\n\n async confirmUser(\n user: OrganizationUserUserDetailsResponse,\n publicKey: Uint8Array\n ): Promise {\n const orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey.buffer);\n const request = new OrganizationUserConfirmRequest();\n request.key = key.encryptedString;\n await this.apiService.postOrganizationUserConfirm(this.organizationId, user.id, request);\n }\n\n allowResetPassword(orgUser: OrganizationUserUserDetailsResponse): boolean {\n // Hierarchy check\n let callingUserHasPermission = false;\n\n switch (this.callingUserType) {\n case OrganizationUserType.Owner:\n callingUserHasPermission = true;\n break;\n case OrganizationUserType.Admin:\n callingUserHasPermission = orgUser.type !== OrganizationUserType.Owner;\n break;\n case OrganizationUserType.Custom:\n callingUserHasPermission =\n orgUser.type !== OrganizationUserType.Owner &&\n orgUser.type !== OrganizationUserType.Admin;\n break;\n }\n\n // Final\n return (\n this.canResetPassword &&\n callingUserHasPermission &&\n this.orgUseResetPassword &&\n this.orgHasKeys &&\n orgUser.resetPasswordEnrolled &&\n this.orgResetPasswordPolicyEnabled &&\n orgUser.status === OrganizationUserStatusType.Confirmed\n );\n }\n\n showEnrolledStatus(orgUser: OrganizationUserUserDetailsResponse): boolean {\n return (\n this.orgUseResetPassword &&\n orgUser.resetPasswordEnrolled &&\n this.orgResetPasswordPolicyEnabled\n );\n }\n\n async edit(user: OrganizationUserUserDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n UserAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.organizationId = this.organizationId;\n comp.organizationUserId = user != null ? user.id : null;\n comp.usesKeyConnector = user?.usesKeyConnector;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onSavedUser.subscribe(() => {\n modal.close();\n this.load();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onDeletedUser.subscribe(() => {\n modal.close();\n this.removeUser(user);\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onRevokedUser.subscribe(() => {\n modal.close();\n this.load();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onRestoredUser.subscribe(() => {\n modal.close();\n this.load();\n });\n }\n );\n }\n\n async groups(user: OrganizationUserUserDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n UserGroupsComponent,\n this.groupsModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.organizationId = this.organizationId;\n comp.organizationUserId = user != null ? user.id : null;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onSavedUser.subscribe(() => {\n modal.close();\n });\n }\n );\n }\n\n async bulkRemove() {\n if (this.actionPromise != null) {\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkRemoveComponent,\n this.bulkRemoveModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.users = this.getCheckedUsers();\n }\n );\n\n await modal.onClosedPromise();\n await this.load();\n }\n\n async bulkRevoke() {\n await this.bulkRevokeOrRestore(true);\n }\n\n async bulkRestore() {\n await this.bulkRevokeOrRestore(false);\n }\n\n async bulkRevokeOrRestore(isRevoking: boolean) {\n if (this.actionPromise != null) {\n return;\n }\n\n const ref = this.modalService.open(BulkRestoreRevokeComponent, {\n allowMultipleModals: true,\n data: {\n organizationId: this.organizationId,\n users: this.getCheckedUsers(),\n isRevoking: isRevoking,\n },\n });\n\n await ref.onClosedPromise();\n await this.load();\n }\n\n async bulkReinvite() {\n if (this.actionPromise != null) {\n return;\n }\n\n const users = this.getCheckedUsers();\n const filteredUsers = users.filter((u) => u.status === OrganizationUserStatusType.Invited);\n\n if (filteredUsers.length <= 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"noSelectedUsersApplicable\")\n );\n return;\n }\n\n try {\n const request = new OrganizationUserBulkRequest(filteredUsers.map((user) => user.id));\n const response = this.apiService.postManyOrganizationUserReinvite(\n this.organizationId,\n request\n );\n this.showBulkStatus(\n users,\n filteredUsers,\n response,\n this.i18nService.t(\"bulkReinviteMessage\")\n );\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async bulkConfirm() {\n if (this.actionPromise != null) {\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkConfirmComponent,\n this.bulkConfirmModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.users = this.getCheckedUsers();\n }\n );\n\n await modal.onClosedPromise();\n await this.load();\n }\n\n async events(user: OrganizationUserUserDetailsResponse) {\n await this.modalService.openViewRef(EntityEventsComponent, this.eventsModalRef, (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.organizationId = this.organizationId;\n comp.entityId = user.id;\n comp.showUser = false;\n comp.entity = \"user\";\n });\n }\n\n async resetPassword(user: OrganizationUserUserDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n ResetPasswordComponent,\n this.resetPasswordModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.email = user != null ? user.email : null;\n comp.organizationId = this.organizationId;\n comp.id = user != null ? user.id : null;\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onPasswordReset.subscribe(() => {\n modal.close();\n this.load();\n });\n }\n );\n }\n\n protected async removeUserConfirmationDialog(user: OrganizationUserUserDetailsResponse) {\n const warningMessage = user.usesKeyConnector\n ? this.i18nService.t(\"removeUserConfirmationKeyConnector\")\n : this.i18nService.t(\"removeOrgUserConfirmation\");\n\n return this.platformUtilsService.showDialog(\n warningMessage,\n this.i18nService.t(\"removeUserIdAccess\", this.userNamePipe.transform(user)),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n }\n\n private async showBulkStatus(\n users: OrganizationUserUserDetailsResponse[],\n filteredUsers: OrganizationUserUserDetailsResponse[],\n request: Promise>,\n successfullMessage: string\n ) {\n const [modal, childComponent] = await this.modalService.openViewRef(\n BulkStatusComponent,\n this.bulkStatusModalRef,\n (comp) => {\n comp.loading = true;\n }\n );\n\n // Workaround to handle closing the modal shortly after it has been opened\n let close = false;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n modal.onShown.subscribe(() => {\n if (close) {\n modal.close();\n }\n });\n\n try {\n const response = await request;\n\n if (modal) {\n const keyedErrors: any = response.data\n .filter((r) => r.error !== \"\")\n .reduce((a, x) => ({ ...a, [x.id]: x.error }), {});\n const keyedFilteredUsers: any = filteredUsers.reduce((a, x) => ({ ...a, [x.id]: x }), {});\n\n childComponent.users = users.map((user) => {\n let message = keyedErrors[user.id] ?? successfullMessage;\n // eslint-disable-next-line\n if (!keyedFilteredUsers.hasOwnProperty(user.id)) {\n message = this.i18nService.t(\"bulkFilteredMessage\");\n }\n\n return {\n user: user,\n error: keyedErrors.hasOwnProperty(user.id), // eslint-disable-line\n message: message,\n };\n });\n childComponent.loading = false;\n }\n } catch {\n close = true;\n modal.close();\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { GetOrgNameFromIdPipe } from \"./get-organization-name.pipe\";\n\n@NgModule({\n declarations: [GetOrgNameFromIdPipe],\n exports: [GetOrgNameFromIdPipe],\n})\nexport class PipesModule {}\n","import { VaultFilter } from \"@bitwarden/angular/vault/vault-filter/models/vault-filter.model\";\n\nexport class VaultService {\n calculateSearchBarLocalizationString(vaultFilter: VaultFilter): string {\n if (vaultFilter.status === \"favorites\") {\n return \"searchFavorites\";\n }\n if (vaultFilter.status === \"trash\") {\n return \"searchTrash\";\n }\n if (vaultFilter.cipherType != null) {\n return \"searchType\";\n }\n if (vaultFilter.selectedFolderId != null && vaultFilter.selectedFolderId != \"none\") {\n return \"searchFolder\";\n }\n if (vaultFilter.selectedCollection) {\n return \"searchCollection\";\n }\n if (vaultFilter.selectedOrganizationId != null) {\n return \"searchOrganization\";\n }\n if (vaultFilter.myVaultOnly) {\n return \"searchMyVault\";\n }\n\n return \"searchVault\";\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\nimport { LooseComponentsModule } from \"../../shared/loose-components.module\";\nimport { VaultFilterModule } from \"../vault-filter/vault-filter.module\";\n\nimport { PipesModule } from \"./pipes/pipes.module\";\nimport { VaultService } from \"./vault.service\";\n\n@NgModule({\n imports: [SharedModule, VaultFilterModule, LooseComponentsModule, PipesModule],\n exports: [SharedModule, VaultFilterModule, LooseComponentsModule, PipesModule],\n providers: [\n {\n provide: VaultService,\n useClass: VaultService,\n },\n ],\n})\nexport class VaultSharedModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { VaultFilterSharedModule } from \"../../../vault/vault-filter/shared/vault-filter-shared.module\";\n\nimport { VaultFilterComponent } from \"./vault-filter.component\";\n\n@NgModule({\n imports: [VaultFilterSharedModule],\n declarations: [VaultFilterComponent],\n exports: [VaultFilterComponent],\n})\nexport class VaultFilterModule {}\n","import { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { CipherStatus } from \"./cipher-status.model\";\n\nexport type VaultFilterFunction = (cipher: CipherView) => boolean;\n\nexport class VaultFilter {\n cipherType?: CipherType;\n selectedCollection = false; // This is needed because of how the \"Unassigned\" collection works. It has a null id.\n selectedCollectionId?: string;\n status?: CipherStatus;\n selectedFolder = false; // This is needed because of how the \"No Folder\" folder works. It has a null id.\n selectedFolderId?: string;\n selectedOrganizationId?: string;\n myVaultOnly = false;\n refreshCollectionsAndFolders = false;\n\n constructor(init?: Partial) {\n Object.assign(this, init);\n }\n\n resetFilter() {\n this.cipherType = null;\n this.status = null;\n this.selectedCollection = false;\n this.selectedCollectionId = null;\n this.selectedFolder = false;\n this.selectedFolderId = null;\n }\n\n resetOrganization() {\n this.myVaultOnly = false;\n this.selectedOrganizationId = null;\n this.resetFilter();\n }\n\n buildFilter(): VaultFilterFunction {\n return (cipher) => {\n let cipherPassesFilter = true;\n if (this.status === \"favorites\" && cipherPassesFilter) {\n cipherPassesFilter = cipher.favorite;\n }\n if (this.status === \"trash\" && cipherPassesFilter) {\n cipherPassesFilter = cipher.isDeleted;\n }\n if (this.cipherType != null && cipherPassesFilter) {\n cipherPassesFilter = cipher.type === this.cipherType;\n }\n if (this.selectedFolder && this.selectedFolderId == null && cipherPassesFilter) {\n cipherPassesFilter = cipher.folderId == null;\n }\n if (this.selectedFolder && this.selectedFolderId != null && cipherPassesFilter) {\n cipherPassesFilter = cipher.folderId === this.selectedFolderId;\n }\n if (this.selectedCollection && this.selectedCollectionId == null && cipherPassesFilter) {\n cipherPassesFilter =\n cipher.organizationId != null &&\n (cipher.collectionIds == null || cipher.collectionIds.length === 0);\n }\n if (this.selectedCollection && this.selectedCollectionId != null && cipherPassesFilter) {\n cipherPassesFilter =\n cipher.collectionIds != null && cipher.collectionIds.includes(this.selectedCollectionId);\n }\n if (this.selectedOrganizationId != null && cipherPassesFilter) {\n cipherPassesFilter = cipher.organizationId === this.selectedOrganizationId;\n }\n if (this.myVaultOnly && cipherPassesFilter) {\n cipherPassesFilter = cipher.organizationId === null;\n }\n return cipherPassesFilter;\n };\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { EncArrayBuffer } from \"@bitwarden/common/models/domain/enc-array-buffer\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { AttachmentView } from \"@bitwarden/common/models/view/attachment.view\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\n@Directive()\nexport class AttachmentsComponent implements OnInit {\n @Input() cipherId: string;\n @Output() onUploadedAttachment = new EventEmitter();\n @Output() onDeletedAttachment = new EventEmitter();\n @Output() onReuploadedAttachment = new EventEmitter();\n\n cipher: CipherView;\n cipherDomain: Cipher;\n hasUpdatedKey: boolean;\n canAccessAttachments: boolean;\n formPromise: Promise;\n deletePromises: { [id: string]: Promise } = {};\n reuploadPromises: { [id: string]: Promise } = {};\n emergencyAccessId?: string = null;\n\n constructor(\n protected cipherService: CipherService,\n protected i18nService: I18nService,\n protected cryptoService: CryptoService,\n protected platformUtilsService: PlatformUtilsService,\n protected apiService: ApiService,\n protected win: Window,\n protected logService: LogService,\n protected stateService: StateService,\n protected fileDownloadService: FileDownloadService\n ) {}\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit() {\n if (!this.hasUpdatedKey) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"updateKey\")\n );\n return;\n }\n\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n if (files[0].size > 524288000) {\n // 500 MB\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"maxFileSize\")\n );\n return;\n }\n\n try {\n this.formPromise = this.saveCipherAttachment(files[0]);\n this.cipherDomain = await this.formPromise;\n this.cipher = await this.cipherDomain.decrypt();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"attachmentSaved\"));\n this.onUploadedAttachment.emit();\n } catch (e) {\n this.logService.error(e);\n }\n\n // reset file input\n // ref: https://stackoverflow.com/a/20552042\n fileEl.type = \"\";\n fileEl.type = \"file\";\n fileEl.value = \"\";\n }\n\n async delete(attachment: AttachmentView) {\n if (this.deletePromises[attachment.id] != null) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteAttachmentConfirmation\"),\n this.i18nService.t(\"deleteAttachment\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n await this.deletePromises[attachment.id];\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedAttachment\"));\n const i = this.cipher.attachments.indexOf(attachment);\n if (i > -1) {\n this.cipher.attachments.splice(i, 1);\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n this.deletePromises[attachment.id] = null;\n this.onDeletedAttachment.emit();\n }\n\n async download(attachment: AttachmentView) {\n const a = attachment as any;\n if (a.downloading) {\n return;\n }\n\n if (!this.canAccessAttachments) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"premiumRequired\"),\n this.i18nService.t(\"premiumRequiredDesc\")\n );\n return;\n }\n\n let url: string;\n try {\n const attachmentDownloadResponse = await this.apiService.getAttachmentData(\n this.cipher.id,\n attachment.id,\n this.emergencyAccessId\n );\n url = attachmentDownloadResponse.url;\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n url = attachment.url;\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n\n a.downloading = true;\n const response = await fetch(new Request(url, { cache: \"no-store\" }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n a.downloading = false;\n return;\n }\n\n try {\n const encBuf = await EncArrayBuffer.fromResponse(response);\n const key =\n attachment.key != null\n ? attachment.key\n : await this.cryptoService.getOrgKey(this.cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(encBuf, key);\n this.fileDownloadService.download({\n fileName: attachment.fileName,\n blobData: decBuf,\n });\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n\n a.downloading = false;\n }\n\n protected async init() {\n this.cipherDomain = await this.loadCipher();\n this.cipher = await this.cipherDomain.decrypt();\n\n this.hasUpdatedKey = await this.cryptoService.hasEncKey();\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n this.canAccessAttachments = canAccessPremium || this.cipher.organizationId != null;\n\n if (!this.canAccessAttachments) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"premiumRequiredDesc\"),\n this.i18nService.t(\"premiumRequired\"),\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"cancel\")\n );\n if (confirmed) {\n this.platformUtilsService.launchUri(\"https://vault.bitwarden.com/#/?premium=purchase\");\n }\n } else if (!this.hasUpdatedKey) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"updateKey\"),\n this.i18nService.t(\"featureUnavailable\"),\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n if (confirmed) {\n this.platformUtilsService.launchUri(\n \"https://bitwarden.com/help/account-encryption-key/#rotate-your-encryption-key\"\n );\n }\n }\n }\n\n protected async reuploadCipherAttachment(attachment: AttachmentView, admin: boolean) {\n const a = attachment as any;\n if (attachment.key != null || a.downloading || this.reuploadPromises[attachment.id] != null) {\n return;\n }\n\n try {\n this.reuploadPromises[attachment.id] = Promise.resolve().then(async () => {\n // 1. Download\n a.downloading = true;\n const response = await fetch(new Request(attachment.url, { cache: \"no-store\" }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n a.downloading = false;\n return;\n }\n\n try {\n // 2. Resave\n const encBuf = await EncArrayBuffer.fromResponse(response);\n const key =\n attachment.key != null\n ? attachment.key\n : await this.cryptoService.getOrgKey(this.cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(encBuf, key);\n this.cipherDomain = await this.cipherService.saveAttachmentRawWithServer(\n this.cipherDomain,\n attachment.fileName,\n decBuf,\n admin\n );\n this.cipher = await this.cipherDomain.decrypt();\n\n // 3. Delete old\n this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n await this.deletePromises[attachment.id];\n const foundAttachment = this.cipher.attachments.filter((a2) => a2.id === attachment.id);\n if (foundAttachment.length > 0) {\n const i = this.cipher.attachments.indexOf(foundAttachment[0]);\n if (i > -1) {\n this.cipher.attachments.splice(i, 1);\n }\n }\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"attachmentSaved\")\n );\n this.onReuploadedAttachment.emit();\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n\n a.downloading = false;\n });\n await this.reuploadPromises[attachment.id];\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected saveCipherAttachment(file: File) {\n return this.cipherService.saveAttachmentWithServer(this.cipherDomain, file);\n }\n\n protected deleteCipherAttachment(attachmentId: string) {\n return this.cipherService.deleteAttachmentWithServer(this.cipher.id, attachmentId);\n }\n}\n","
\n
\n \n
\n

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

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

{{ \"newAttachment\" | i18n }}

\n \n \n {{ \"maxFileSize\" | i18n }}\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"@bitwarden/angular/components/attachments.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { AttachmentView } from \"@bitwarden/common/models/view/attachment.view\";\n\n@Component({\n selector: \"app-vault-attachments\",\n templateUrl: \"attachments.component.html\",\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n\n constructor(\n cipherService: CipherService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n logService: LogService,\n fileDownloadService: FileDownloadService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n platformUtilsService,\n apiService,\n window,\n logService,\n stateService,\n fileDownloadService\n );\n }\n\n protected async reupload(attachment: AttachmentView) {\n if (this.showFixOldAttachments(attachment)) {\n await this.reuploadCipherAttachment(attachment, false);\n }\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return attachment.key == null && this.cipher.organizationId == null;\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherData } from \"@bitwarden/common/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { AttachmentView } from \"@bitwarden/common/models/view/attachment.view\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"../../vault/attachments.component\";\n\n@Component({\n selector: \"app-org-vault-attachments\",\n templateUrl: \"../../vault/attachments.component.html\",\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n organization: Organization;\n\n constructor(\n cipherService: CipherService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n logService: LogService,\n fileDownloadService: FileDownloadService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n stateService,\n platformUtilsService,\n apiService,\n logService,\n fileDownloadService\n );\n }\n\n protected async reupload(attachment: AttachmentView) {\n if (this.organization.canEditAnyCollection && this.showFixOldAttachments(attachment)) {\n await super.reuploadCipherAttachment(attachment, true);\n }\n }\n\n protected async loadCipher() {\n if (!this.organization.canEditAnyCollection) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n return new Cipher(new CipherData(response));\n }\n\n protected saveCipherAttachment(file: File) {\n return this.cipherService.saveAttachmentWithServer(\n this.cipherDomain,\n file,\n this.organization.canEditAnyCollection\n );\n }\n\n protected deleteCipherAttachment(attachmentId: string) {\n if (!this.organization.canEditAnyCollection) {\n return super.deleteCipherAttachment(attachmentId);\n }\n return this.apiService.deleteCipherAttachmentAdmin(this.cipherId, attachmentId);\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return attachment.key == null && this.organization.canEditAnyCollection;\n }\n}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\n@Directive()\nexport class CiphersComponent {\n @Input() activeCipherId: string = null;\n @Output() onCipherClicked = new EventEmitter();\n @Output() onCipherRightClicked = new EventEmitter();\n @Output() onAddCipher = new EventEmitter();\n @Output() onAddCipherOptions = new EventEmitter();\n\n loaded = false;\n ciphers: CipherView[] = [];\n searchText: string;\n searchPlaceholder: string = null;\n filter: (cipher: CipherView) => boolean = null;\n deleted = false;\n\n protected searchPending = false;\n\n private searchTimeout: any = null;\n\n constructor(protected searchService: SearchService) {}\n\n async load(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n this.deleted = deleted || false;\n await this.applyFilter(filter);\n this.loaded = true;\n }\n\n async reload(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n this.loaded = false;\n await this.load(filter, deleted);\n }\n\n async refresh() {\n await this.reload(this.filter, this.deleted);\n }\n\n async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n this.filter = filter;\n await this.search(null);\n }\n\n async search(timeout: number = null, indexedCiphers?: CipherView[]) {\n this.searchPending = false;\n if (this.searchTimeout != null) {\n clearTimeout(this.searchTimeout);\n }\n if (timeout == null) {\n await this.doSearch(indexedCiphers);\n return;\n }\n this.searchPending = true;\n this.searchTimeout = setTimeout(async () => {\n await this.doSearch(indexedCiphers);\n this.searchPending = false;\n }, timeout);\n }\n\n selectCipher(cipher: CipherView) {\n this.onCipherClicked.emit(cipher);\n }\n\n rightClickCipher(cipher: CipherView) {\n this.onCipherRightClicked.emit(cipher);\n }\n\n addCipher() {\n this.onAddCipher.emit();\n }\n\n addCipherOptions() {\n this.onAddCipherOptions.emit();\n }\n\n isSearching() {\n return !this.searchPending && this.searchService.isSearchable(this.searchText);\n }\n\n protected deletedFilter: (cipher: CipherView) => boolean = (c) => c.isDeleted === this.deleted;\n\n protected async doSearch(indexedCiphers?: CipherView[]) {\n this.ciphers = await this.searchService.searchCiphers(\n this.searchText,\n [this.filter, this.deletedFilter],\n indexedCiphers\n );\n }\n}\n","import { svgIcon } from \"../icon\";\n\nexport const Search = svgIcon`\n\n \n \n \n \n \n \n \n \n \n \n \n \n\n`;\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: \"ellipsis\",\n})\nexport class EllipsisPipe implements PipeTransform {\n transform(value: string, limit = 25, completeWords = false, ellipsis = \"...\") {\n if (value.length <= limit) {\n return value;\n }\n limit -= ellipsis.length;\n if (completeWords && value.length > limit && value.indexOf(\" \") > 0) {\n limit = value.substring(0, limit).lastIndexOf(\" \");\n }\n return value.substring(0, limit) + ellipsis;\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Component({\n selector: \"app-org-badge\",\n templateUrl: \"organization-name-badge.component.html\",\n})\nexport class OrganizationNameBadgeComponent implements OnInit {\n @Input() organizationName: string;\n @Input() profileName: string;\n\n @Output() onOrganizationClicked = new EventEmitter();\n\n color: string;\n textColor: string;\n\n constructor(private i18nService: I18nService) {}\n\n ngOnInit(): void {\n if (this.organizationName == null || this.organizationName === \"\") {\n this.organizationName = this.i18nService.t(\"me\");\n this.color = Utils.stringToColor(this.profileName.toUpperCase());\n }\n if (this.color == null) {\n this.color = Utils.stringToColor(this.organizationName.toUpperCase());\n }\n this.textColor = Utils.pickTextColorBasedOnBgColor(this.color);\n }\n\n emitOnOrganizationClicked() {\n this.onOrganizationClicked.emit();\n }\n}\n","\n {{ organizationName | ellipsis: 13 }}\n\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Pipe({\n name: \"orgNameFromId\",\n pure: true,\n})\nexport class GetOrgNameFromIdPipe implements PipeTransform {\n transform(value: string, organizations: Organization[]) {\n const orgName = organizations.find((o) => o.id === value)?.name;\n return orgName;\n }\n}\n","\n \n \n \n \n \n \n \n \n \n \n {{ c.name }}\n \n \n {{ \"attachments\" | i18n }}\n \n \n {{ \"attachmentsNeedFix\" | i18n }}\n \n \n
\n {{ c.subTitle }}\n \n 0 && !organization\" class=\"tw-w-28\">\n \n \n \n \n \n \n \n \n \n \n \n \n {{ \"copyPassword\" | i18n }}\n \n \n \n {{ \"copyVerificationCode\" | i18n }}\n \n \n \n \n \n \n {{ \"clone\" | i18n }}\n \n \n \n {{ \"moveToOrganization\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n
\n \n \n {{ \"loading\" | i18n }}\n \n \n \n

{{ \"noItemsInList\" | i18n }}

\n \n
\n
\n
\n","import { Component, EventEmitter, Input, OnDestroy, Output } from \"@angular/core\";\n\nimport { CiphersComponent as BaseCiphersComponent } from \"@bitwarden/angular/components/ciphers.component\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { EventService } from \"@bitwarden/common/abstractions/event.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/enums/cipherRepromptType\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { EventType } from \"@bitwarden/common/enums/eventType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { Icons } from \"@bitwarden/components\";\n\nconst MaxCheckedCount = 500;\n\n@Component({\n selector: \"app-vault-ciphers\",\n templateUrl: \"ciphers.component.html\",\n})\nexport class CiphersComponent extends BaseCiphersComponent implements OnDestroy {\n @Input() showAddNew = true;\n @Output() onAttachmentsClicked = new EventEmitter();\n @Output() onShareClicked = new EventEmitter();\n @Output() onCollectionsClicked = new EventEmitter();\n @Output() onCloneClicked = new EventEmitter();\n @Output() onOrganzationBadgeClicked = new EventEmitter();\n\n pagedCiphers: CipherView[] = [];\n pageSize = 200;\n cipherType = CipherType;\n actionPromise: Promise;\n userHasPremiumAccess = false;\n organizations: Organization[] = [];\n profileName: string;\n noItemIcon = Icons.Search;\n\n private didScroll = false;\n private pagedCiphersCount = 0;\n private refreshing = false;\n\n constructor(\n searchService: SearchService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected cipherService: CipherService,\n protected eventService: EventService,\n protected totpService: TotpService,\n protected stateService: StateService,\n protected passwordRepromptService: PasswordRepromptService,\n private logService: LogService,\n private organizationService: OrganizationService,\n private tokenService: TokenService\n ) {\n super(searchService);\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n // load() is called after the page loads and the first sync has completed.\n // Do not use ngOnInit() for anything that requires sync data.\n async load(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n await super.load(filter, deleted);\n this.profileName = await this.tokenService.getName();\n this.organizations = await this.organizationService.getAll();\n this.userHasPremiumAccess = await this.stateService.getCanAccessPremium();\n }\n\n loadMore() {\n if (this.ciphers.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedCiphers.length;\n let pagedSize = this.pageSize;\n if (this.refreshing && pagedLength === 0 && this.pagedCiphersCount > this.pageSize) {\n pagedSize = this.pagedCiphersCount;\n }\n if (this.ciphers.length > pagedLength) {\n this.pagedCiphers = this.pagedCiphers.concat(\n this.ciphers.slice(pagedLength, pagedLength + pagedSize)\n );\n }\n this.pagedCiphersCount = this.pagedCiphers.length;\n this.didScroll = this.pagedCiphers.length > this.pageSize;\n }\n\n async refresh() {\n try {\n this.refreshing = true;\n await this.reload(this.filter, this.deleted);\n } finally {\n this.refreshing = false;\n }\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.ciphers.length > this.pageSize;\n }\n\n async resetPaging() {\n this.pagedCiphers = [];\n this.loadMore();\n }\n\n async doSearch(indexedCiphers?: CipherView[]) {\n this.ciphers = await this.searchService.searchCiphers(\n this.searchText,\n [this.filter, this.deletedFilter],\n indexedCiphers\n );\n this.resetPaging();\n }\n\n launch(uri: string) {\n this.platformUtilsService.launchUri(uri);\n }\n\n async attachments(c: CipherView) {\n if (!(await this.repromptCipher(c))) {\n return;\n }\n this.onAttachmentsClicked.emit(c);\n }\n\n async share(c: CipherView) {\n if (!(await this.repromptCipher(c))) {\n return;\n }\n this.onShareClicked.emit(c);\n }\n\n collections(c: CipherView) {\n this.onCollectionsClicked.emit(c);\n }\n\n async clone(c: CipherView) {\n if (!(await this.repromptCipher(c))) {\n return;\n }\n this.onCloneClicked.emit(c);\n }\n\n async delete(c: CipherView): Promise {\n if (!(await this.repromptCipher(c))) {\n return;\n }\n if (this.actionPromise != null) {\n return;\n }\n const permanent = c.isDeleted;\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\n permanent ? \"permanentlyDeleteItemConfirmation\" : \"deleteItemConfirmation\"\n ),\n this.i18nService.t(permanent ? \"permanentlyDeleteItem\" : \"deleteItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.deleteCipher(c.id, permanent);\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(permanent ? \"permanentlyDeletedItem\" : \"deletedItem\")\n );\n this.refresh();\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n\n async restore(c: CipherView): Promise {\n if (this.actionPromise != null || !c.isDeleted) {\n return;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"restoreItemConfirmation\"),\n this.i18nService.t(\"restoreItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.cipherService.restoreWithServer(c.id);\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItem\"));\n this.refresh();\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n\n async copy(cipher: CipherView, value: string, typeI18nKey: string, aType: string) {\n if (\n this.passwordRepromptService.protectedFields().includes(aType) &&\n !(await this.repromptCipher(cipher))\n ) {\n return;\n }\n\n if (value == null || (aType === \"TOTP\" && !this.displayTotpCopyButton(cipher))) {\n return;\n } else if (value === cipher.login.totp) {\n value = await this.totpService.getCode(value);\n }\n\n if (!cipher.viewPassword) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(typeI18nKey))\n );\n\n if (typeI18nKey === \"password\" || typeI18nKey === \"verificationCodeTotp\") {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, cipher.id);\n } else if (typeI18nKey === \"securityCode\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id);\n }\n }\n\n selectAll(select: boolean) {\n if (select) {\n this.selectAll(false);\n }\n const selectCount =\n select && this.ciphers.length > MaxCheckedCount ? MaxCheckedCount : this.ciphers.length;\n for (let i = 0; i < selectCount; i++) {\n this.checkCipher(this.ciphers[i], select);\n }\n }\n\n checkCipher(c: CipherView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n getSelected(): CipherView[] {\n if (this.ciphers == null) {\n return [];\n }\n return this.ciphers.filter((c) => !!(c as any).checked);\n }\n\n getSelectedIds(): string[] {\n return this.getSelected().map((c) => c.id);\n }\n\n displayTotpCopyButton(cipher: CipherView) {\n return (\n (cipher?.login?.hasTotp ?? false) && (cipher.organizationUseTotp || this.userHasPremiumAccess)\n );\n }\n\n async selectCipher(cipher: CipherView) {\n if (await this.repromptCipher(cipher)) {\n super.selectCipher(cipher);\n }\n }\n\n onOrganizationClicked(organizationId: string) {\n this.onOrganzationBadgeClicked.emit(organizationId);\n }\n\n protected deleteCipher(id: string, permanent: boolean) {\n return permanent\n ? this.cipherService.deleteWithServer(id)\n : this.cipherService.softDeleteWithServer(id);\n }\n\n protected showFixOldAttachments(c: CipherView) {\n return c.hasOldAttachments && c.organizationId == null;\n }\n\n protected async repromptCipher(c: CipherView) {\n return (\n c.reprompt === CipherRepromptType.None ||\n (await this.passwordRepromptService.showPasswordPrompt())\n );\n }\n}\n","import { Component, EventEmitter, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { EventService } from \"@bitwarden/common/abstractions/event.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { CiphersComponent as BaseCiphersComponent } from \"../../vault/ciphers.component\";\n\n@Component({\n selector: \"app-org-vault-ciphers\",\n templateUrl: \"../../vault/ciphers.component.html\",\n})\nexport class CiphersComponent extends BaseCiphersComponent {\n @Output() onEventsClicked = new EventEmitter();\n\n organization: Organization;\n accessEvents = false;\n\n protected allCiphers: CipherView[] = [];\n\n constructor(\n searchService: SearchService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n cipherService: CipherService,\n eventService: EventService,\n totpService: TotpService,\n passwordRepromptService: PasswordRepromptService,\n logService: LogService,\n stateService: StateService,\n organizationService: OrganizationService,\n tokenService: TokenService,\n private apiService: ApiService\n ) {\n super(\n searchService,\n i18nService,\n platformUtilsService,\n cipherService,\n eventService,\n totpService,\n stateService,\n passwordRepromptService,\n logService,\n organizationService,\n tokenService\n );\n }\n\n async load(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n this.deleted = deleted || false;\n if (this.organization.canEditAnyCollection) {\n this.accessEvents = this.organization.useEvents;\n this.allCiphers = await this.cipherService.getAllFromApiForOrganization(this.organization.id);\n } else {\n this.allCiphers = (await this.cipherService.getAllDecrypted()).filter(\n (c) => c.organizationId === this.organization.id\n );\n }\n await this.searchService.indexCiphers(this.organization.id, this.allCiphers);\n await this.applyFilter(filter);\n this.loaded = true;\n }\n\n async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n if (this.organization.canViewAllCollections) {\n await super.applyFilter(filter);\n } else {\n const f = (c: CipherView) =>\n c.organizationId === this.organization.id && (filter == null || filter(c));\n await super.applyFilter(f);\n }\n }\n\n async search(timeout: number = null) {\n await super.search(timeout, this.allCiphers);\n }\n events(c: CipherView) {\n this.onEventsClicked.emit(c);\n }\n\n protected deleteCipher(id: string) {\n if (!this.organization.canEditAnyCollection) {\n return super.deleteCipher(id, this.deleted);\n }\n return this.deleted\n ? this.apiService.deleteCipherAdmin(id)\n : this.apiService.putDeleteCipherAdmin(id);\n }\n\n protected showFixOldAttachments(c: CipherView) {\n return this.organization.canEditAnyCollection && c.hasOldAttachments;\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\n\n@Directive()\nexport class CollectionsComponent implements OnInit {\n @Input() cipherId: string;\n @Input() allowSelectNone = false;\n @Output() onSavedCollections = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collectionIds: string[];\n collections: CollectionView[] = [];\n\n protected cipherDomain: Cipher;\n\n constructor(\n protected collectionService: CollectionService,\n protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService,\n protected cipherService: CipherService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n this.cipherDomain = await this.loadCipher();\n this.collectionIds = this.loadCipherCollections();\n this.cipher = await this.cipherDomain.decrypt();\n this.collections = await this.loadCollections();\n\n this.collections.forEach((c) => ((c as any).checked = false));\n if (this.collectionIds != null) {\n this.collections.forEach((c) => {\n (c as any).checked = this.collectionIds != null && this.collectionIds.indexOf(c.id) > -1;\n });\n }\n }\n\n async submit() {\n const selectedCollectionIds = this.collections\n .filter((c) => !!(c as any).checked)\n .map((c) => c.id);\n if (!this.allowSelectNone && selectedCollectionIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectOneCollection\")\n );\n return;\n }\n this.cipherDomain.collectionIds = selectedCollectionIds;\n try {\n this.formPromise = this.saveCollections();\n await this.formPromise;\n this.onSavedCollections.emit();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"editedItem\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected loadCipherCollections() {\n return this.cipherDomain.collectionIds;\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter(\n (c) => !c.readOnly && c.organizationId === this.cipher.organizationId\n );\n }\n\n protected saveCollections() {\n return this.cipherService.saveCollectionsWithServer(this.cipherDomain);\n }\n}\n","
\n
\n
\n
\n

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

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

{{ \"collectionsDesc\" | i18n }}

\n
\n

{{ \"collections\" | i18n }}

\n
\n \n \n
\n
\n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n
\n \n \n {{ c.name }}\n
\n
\n
\n \n \n
\n
\n
\n
\n","import { Component, OnDestroy } from \"@angular/core\";\n\nimport { CollectionsComponent as BaseCollectionsComponent } from \"@bitwarden/angular/components/collections.component\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\n\n@Component({\n selector: \"app-vault-collections\",\n templateUrl: \"collections.component.html\",\n})\nexport class CollectionsComponent extends BaseCollectionsComponent implements OnDestroy {\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n logService: LogService\n ) {\n super(collectionService, platformUtilsService, i18nService, cipherService, logService);\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n this.collections.forEach((c) => this.check(c, select));\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CipherData } from \"@bitwarden/common/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherCollectionsRequest } from \"@bitwarden/common/models/request/cipher-collections.request\";\n\nimport { CollectionsComponent as BaseCollectionsComponent } from \"../../vault/collections.component\";\n\n@Component({\n selector: \"app-org-vault-collections\",\n templateUrl: \"../../vault/collections.component.html\",\n})\nexport class CollectionsComponent extends BaseCollectionsComponent {\n organization: Organization;\n\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n private apiService: ApiService,\n logService: LogService\n ) {\n super(collectionService, platformUtilsService, i18nService, cipherService, logService);\n this.allowSelectNone = true;\n }\n\n protected async loadCipher() {\n if (!this.organization.canViewAllCollections) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n return new Cipher(new CipherData(response));\n }\n\n protected loadCipherCollections() {\n if (!this.organization.canViewAllCollections) {\n return super.loadCipherCollections();\n }\n return this.collectionIds;\n }\n\n protected loadCollections() {\n if (!this.organization.canViewAllCollections) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected saveCollections() {\n if (this.organization.canEditAnyCollection) {\n const request = new CipherCollectionsRequest(this.cipherDomain.collectionIds);\n return this.apiService.putCipherCollectionsAdmin(this.cipherId, request);\n } else {\n return super.saveCollections();\n }\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { firstValueFrom, Observable } from \"rxjs\";\n\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { ITreeNodeObject } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { FolderView } from \"@bitwarden/common/models/view/folder.view\";\n\nimport { DynamicTreeNode } from \"../models/dynamic-tree-node.model\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\nimport { VaultFilterService } from \"../services/vault-filter.service\";\n\n@Directive()\nexport class VaultFilterComponent implements OnInit {\n @Input() activeFilter: VaultFilter = new VaultFilter();\n @Input() hideFolders = false;\n @Input() hideCollections = false;\n @Input() hideFavorites = false;\n @Input() hideTrash = false;\n @Input() hideOrganizations = false;\n\n @Output() onFilterChange = new EventEmitter();\n @Output() onAddFolder = new EventEmitter();\n @Output() onEditFolder = new EventEmitter();\n\n isLoaded = false;\n collapsedFilterNodes: Set;\n organizations: Organization[];\n activePersonalOwnershipPolicy: boolean;\n activeSingleOrganizationPolicy: boolean;\n collections: DynamicTreeNode;\n folders$: Observable>;\n\n constructor(protected vaultFilterService: VaultFilterService) {}\n\n get displayCollections() {\n return this.collections?.fullList != null && this.collections.fullList.length > 0;\n }\n\n async ngOnInit(): Promise {\n this.collapsedFilterNodes = await this.vaultFilterService.buildCollapsedFilterNodes();\n this.organizations = await this.vaultFilterService.buildOrganizations();\n if (this.organizations != null && this.organizations.length > 0) {\n this.activePersonalOwnershipPolicy =\n await this.vaultFilterService.checkForPersonalOwnershipPolicy();\n this.activeSingleOrganizationPolicy =\n await this.vaultFilterService.checkForSingleOrganizationPolicy();\n }\n this.folders$ = await this.vaultFilterService.buildNestedFolders();\n this.collections = await this.initCollections();\n this.isLoaded = true;\n }\n\n // overwritten in web for organization vaults\n async initCollections() {\n return await this.vaultFilterService.buildCollections();\n }\n\n async toggleFilterNodeCollapseState(node: ITreeNodeObject) {\n if (this.collapsedFilterNodes.has(node.id)) {\n this.collapsedFilterNodes.delete(node.id);\n } else {\n this.collapsedFilterNodes.add(node.id);\n }\n await this.vaultFilterService.storeCollapsedFilterNodes(this.collapsedFilterNodes);\n }\n\n async applyFilter(filter: VaultFilter) {\n if (filter.refreshCollectionsAndFolders) {\n await this.reloadCollectionsAndFolders(filter);\n filter = await this.pruneInvalidatedFilterSelections(filter);\n }\n this.onFilterChange.emit(filter);\n }\n\n async reloadCollectionsAndFolders(filter: VaultFilter) {\n this.folders$ = await this.vaultFilterService.buildNestedFolders(filter.selectedOrganizationId);\n this.collections = filter.myVaultOnly\n ? null\n : await this.vaultFilterService.buildCollections(filter.selectedOrganizationId);\n }\n\n async reloadOrganizations() {\n this.organizations = await this.vaultFilterService.buildOrganizations();\n this.activePersonalOwnershipPolicy =\n await this.vaultFilterService.checkForPersonalOwnershipPolicy();\n this.activeSingleOrganizationPolicy =\n await this.vaultFilterService.checkForSingleOrganizationPolicy();\n }\n\n addFolder() {\n this.onAddFolder.emit();\n }\n\n editFolder(folder: FolderView) {\n this.onEditFolder.emit(folder);\n }\n\n protected async pruneInvalidatedFilterSelections(filter: VaultFilter): Promise {\n filter = await this.pruneInvalidFolderSelection(filter);\n filter = this.pruneInvalidCollectionSelection(filter);\n return filter;\n }\n\n protected async pruneInvalidFolderSelection(filter: VaultFilter): Promise {\n if (\n filter.selectedFolder &&\n !(await firstValueFrom(this.folders$))?.hasId(filter.selectedFolderId)\n ) {\n filter.selectedFolder = false;\n filter.selectedFolderId = null;\n }\n return filter;\n }\n\n protected pruneInvalidCollectionSelection(filter: VaultFilter): VaultFilter {\n if (\n filter.myVaultOnly ||\n (filter.selectedCollection &&\n filter.selectedCollectionId != null &&\n !this.collections?.hasId(filter.selectedCollectionId))\n ) {\n filter.selectedCollection = false;\n filter.selectedCollectionId = null;\n }\n return filter;\n }\n}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ITreeNodeObject } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\n\nimport { DynamicTreeNode } from \"../models/dynamic-tree-node.model\";\nimport { TopLevelTreeNode } from \"../models/top-level-tree-node.model\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\n\n@Directive()\nexport class CollectionFilterComponent {\n @Input() hide = false;\n @Input() collapsedFilterNodes: Set;\n @Input() collectionNodes: DynamicTreeNode;\n @Input() activeFilter: VaultFilter;\n\n @Output() onNodeCollapseStateChange: EventEmitter =\n new EventEmitter();\n @Output() onFilterChange: EventEmitter = new EventEmitter();\n\n readonly collectionsGrouping: TopLevelTreeNode = {\n id: \"collections\",\n name: \"collections\",\n };\n\n get collections() {\n return this.collectionNodes?.fullList;\n }\n\n get nestedCollections() {\n return this.collectionNodes?.nestedList;\n }\n\n get show() {\n return !this.hide && this.collections != null && this.collections.length > 0;\n }\n\n isCollapsed(node: ITreeNodeObject) {\n return this.collapsedFilterNodes.has(node.id);\n }\n\n applyFilter(collection: CollectionView) {\n this.activeFilter.resetFilter();\n this.activeFilter.selectedCollection = true;\n this.activeFilter.selectedCollectionId = collection.id;\n this.onFilterChange.emit(this.activeFilter);\n }\n\n async toggleCollapse(node: ITreeNodeObject) {\n this.onNodeCollapseStateChange.emit(node);\n }\n}\n","\n
\n \n \n \n

 {{ collectionsGrouping.name | i18n }}

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

 {{ \"folders\" | i18n }}

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

 {{ \"types\" | i18n }}

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

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

\n \n ×\n \n
\n
\n \n {{ \"resetPasswordEnrollmentWarning\" | i18n }}\n \n \n
\n
\n \n \n \n {{ \"cancel\" | i18n }}\n \n \n
\n \n
\n\n","import { AfterContentInit, Component, Input } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { SsoComponent } from \"@bitwarden/angular/components/sso.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-link-sso\",\n templateUrl: \"link-sso.component.html\",\n})\nexport class LinkSsoComponent extends SsoComponent implements AfterContentInit {\n @Input() organization: Organization;\n returnUri = \"/settings/organizations\";\n\n constructor(\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n apiService: ApiService,\n authService: AuthService,\n router: Router,\n route: ActivatedRoute,\n cryptoFunctionService: CryptoFunctionService,\n passwordGenerationService: PasswordGenerationService,\n stateService: StateService,\n environmentService: EnvironmentService,\n logService: LogService\n ) {\n super(\n authService,\n router,\n i18nService,\n route,\n stateService,\n platformUtilsService,\n apiService,\n cryptoFunctionService,\n environmentService,\n passwordGenerationService,\n logService\n );\n\n this.returnUri = \"/settings/organizations\";\n this.redirectUri = window.location.origin + \"/sso-connector.html\";\n this.clientId = \"web\";\n }\n\n async ngAfterContentInit() {\n this.identifier = this.organization.identifier;\n }\n}\n","\n \n {{ \"linkSso\" | i18n }}\n\n","\n \n {{ \"loading\" | i18n }}\n\n\n \n \n {{ \"enrollPasswordReset\" | i18n }}\n \n \n \n {{ \"withdrawPasswordReset\" | i18n }}\n \n \n \n \n {{ \"unlinkSso\" | i18n }}\n \n \n \n \n \n \n \n {{ \"leave\" | i18n }}\n \n\n","import { Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { map, Subject, takeUntil } from \"rxjs\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/models/request/organization-user-reset-password-enrollment.request\";\n\nimport { EnrollMasterPasswordReset } from \"../../../organizations/users/enroll-master-password-reset.component\";\n\n@Component({\n selector: \"app-organization-options\",\n templateUrl: \"organization-options.component.html\",\n})\nexport class OrganizationOptionsComponent implements OnInit, OnDestroy {\n actionPromise: Promise;\n policies: Policy[];\n loaded = false;\n\n @Input() organization: Organization;\n\n private destroy$ = new Subject();\n\n constructor(\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private apiService: ApiService,\n private syncService: SyncService,\n private policyService: PolicyService,\n private modalService: ModalService,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n this.policyService.policies$\n .pipe(\n map((policies) => policies.filter((policy) => policy.type === PolicyType.ResetPassword)),\n takeUntil(this.destroy$)\n )\n .subscribe((policies) => {\n this.policies = policies;\n this.loaded = true;\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n allowEnrollmentChanges(org: Organization): boolean {\n if (org.usePolicies && org.useResetPassword && org.hasPublicAndPrivateKeys) {\n const policy = this.policies.find((p) => p.organizationId === org.id);\n if (policy != null && policy.enabled) {\n return org.resetPasswordEnrolled && policy.data.autoEnrollEnabled ? false : true;\n }\n }\n\n return false;\n }\n\n showEnrolledStatus(org: Organization): boolean {\n return (\n org.useResetPassword &&\n org.resetPasswordEnrolled &&\n this.policies.some((p) => p.organizationId === org.id && p.enabled)\n );\n }\n\n async unlinkSso(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"unlinkSsoConfirmation\"),\n org.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.apiService.deleteSsoUser(org.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, \"Unlinked SSO\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async leave(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"leaveOrganizationConfirmation\"),\n org.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.organizationApiService.leave(org.id);\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"leftOrganization\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async toggleResetPasswordEnrollment(org: Organization) {\n if (!this.organization.resetPasswordEnrolled) {\n this.modalService.open(EnrollMasterPasswordReset, {\n allowMultipleModals: true,\n data: {\n organization: org,\n },\n });\n } else {\n // Remove reset password\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.masterPasswordHash = \"ignored\";\n request.resetPasswordKey = null;\n this.actionPromise = this.apiService.putOrganizationUserResetPasswordEnrollment(\n this.organization.id,\n this.organization.userId,\n request\n );\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"withdrawPasswordResetSuccess\")\n );\n this.syncService.fullSync(true);\n } catch (e) {\n this.logService.error(e);\n }\n }\n }\n}\n","\n \n \n \n \n \n
\n \n \n \n \n  {{ organizationGrouping.name | i18n }}\n \n
\n \n
\n \n
\n \n \n {{ organizations[0].name }}\n \n \n \n \n \n \n \n
\n
\n \n
\n \n \n \n \n  {{ organizationGrouping.name | i18n }}\n \n
\n \n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { OrganizationFilterComponent as BaseOrganizationFilterComponent } from \"@bitwarden/angular/vault/vault-filter/components/organization-filter.component\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-organization-filter\",\n templateUrl: \"organization-filter.component.html\",\n})\nexport class OrganizationFilterComponent extends BaseOrganizationFilterComponent {\n displayText = \"allVaults\";\n\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {\n super();\n }\n\n async applyOrganizationFilter(organization: Organization) {\n if (organization.enabled) {\n //proceed with default behaviour for enabled organizations\n super.applyOrganizationFilter(organization);\n } else {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"disabledOrganizationFilterError\")\n );\n }\n }\n}\n","
\n
\n \n
\n
\n
\n {{ \"filters\" | i18n }}\n \n \n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n","import { Component, EventEmitter, Output } from \"@angular/core\";\n\nimport { VaultFilterComponent as BaseVaultFilterComponent } from \"@bitwarden/angular/vault/vault-filter/components/vault-filter.component\";\n\nimport { VaultFilterService } from \"./shared/vault-filter.service\";\n\n@Component({\n selector: \"./app-vault-filter\",\n templateUrl: \"vault-filter.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class VaultFilterComponent extends BaseVaultFilterComponent {\n @Output() onSearchTextChanged = new EventEmitter();\n\n searchPlaceholder: string;\n searchText = \"\";\n\n constructor(protected vaultFilterService: VaultFilterService) {\n // This empty constructor is required to provide the web vaultFilterService subclass to super()\n // TODO: refactor this to use proper dependency injection\n super(vaultFilterService);\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n this.vaultFilterService.collapsedFilterNodes$.subscribe((nodes) => {\n this.collapsedFilterNodes = nodes;\n });\n }\n\n searchTextChanged() {\n this.onSearchTextChanged.emit(this.searchText);\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\nimport { VaultFilterComponent as BaseVaultFilterComponent } from \"../../../vault/vault-filter/vault-filter.component\";\n\n@Component({\n selector: \"app-organization-vault-filter\",\n templateUrl: \"../../../vault/vault-filter/vault-filter.component.html\",\n})\nexport class VaultFilterComponent extends BaseVaultFilterComponent {\n hideOrganizations = true;\n hideFavorites = true;\n hideFolders = true;\n\n organization: Organization;\n\n async initCollections() {\n if (this.organization.canEditAnyCollection) {\n return await this.vaultFilterService.buildAdminCollections(this.organization.id);\n }\n return await this.vaultFilterService.buildCollections(this.organization.id);\n }\n\n async reloadCollectionsAndFolders() {\n this.collections = await this.initCollections();\n }\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherBulkDeleteRequest } from \"@bitwarden/common/models/request/cipher-bulk-delete.request\";\n\n@Component({\n selector: \"app-vault-bulk-delete\",\n templateUrl: \"bulk-delete.component.html\",\n})\nexport class BulkDeleteComponent {\n @Input() cipherIds: string[] = [];\n @Input() permanent = false;\n @Input() organization: Organization;\n @Output() onDeleted = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private apiService: ApiService\n ) {}\n\n async submit() {\n if (!this.organization || !this.organization.canEditAnyCollection) {\n await this.deleteCiphers();\n } else {\n await this.deleteCiphersAdmin();\n }\n\n await this.formPromise;\n\n this.onDeleted.emit();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.permanent ? \"permanentlyDeletedItems\" : \"deletedItems\")\n );\n }\n\n private async deleteCiphers() {\n if (this.permanent) {\n this.formPromise = await this.cipherService.deleteManyWithServer(this.cipherIds);\n } else {\n this.formPromise = await this.cipherService.softDeleteManyWithServer(this.cipherIds);\n }\n }\n\n private async deleteCiphersAdmin() {\n const deleteRequest = new CipherBulkDeleteRequest(this.cipherIds, this.organization.id);\n if (this.permanent) {\n this.formPromise = await this.apiService.deleteManyCiphersAdmin(deleteRequest);\n } else {\n this.formPromise = await this.apiService.putDeleteManyCiphersAdmin(deleteRequest);\n }\n }\n}\n","
\n
\n
\n
\n

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

\n \n ×\n \n
\n
\n {{\n (permanent ? \"permanentlyDeleteSelectedItemsDesc\" : \"deleteSelectedItemsDesc\")\n | i18n: cipherIds.length\n }}\n
\n
\n \n \n {{ (permanent ? \"permanentlyDelete\" : \"delete\") | i18n }}\n \n \n
\n
\n
\n
\n","
\n
\n
\n
\n

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

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

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

\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { firstValueFrom, Observable } from \"rxjs\";\n\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { FolderView } from \"@bitwarden/common/models/view/folder.view\";\n\n@Component({\n selector: \"app-vault-bulk-move\",\n templateUrl: \"bulk-move.component.html\",\n})\nexport class BulkMoveComponent implements OnInit {\n @Input() cipherIds: string[] = [];\n @Output() onMoved = new EventEmitter();\n\n folderId: string = null;\n folders$: Observable;\n formPromise: Promise;\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private folderService: FolderService\n ) {}\n\n async ngOnInit() {\n this.folders$ = this.folderService.folderViews$;\n this.folderId = (await firstValueFrom(this.folders$))[0].id;\n }\n\n async submit() {\n this.formPromise = this.cipherService.moveManyWithServer(this.cipherIds, this.folderId);\n await this.formPromise;\n this.onMoved.emit();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"movedItems\"));\n }\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-vault-bulk-restore\",\n templateUrl: \"bulk-restore.component.html\",\n})\nexport class BulkRestoreComponent {\n @Input() cipherIds: string[] = [];\n @Output() onRestored = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {}\n\n async submit() {\n this.formPromise = this.cipherService.restoreManyWithServer(this.cipherIds);\n await this.formPromise;\n this.onRestored.emit();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItems\"));\n }\n}\n","type CheckableBase = {\n checked?: boolean;\n};\n\nexport type Checkable = T & CheckableBase;\n\nexport function isChecked(item: CheckableBase): boolean {\n return !!item.checked;\n}\n","
\n
\n
\n
\n

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

\n \n ×\n \n
\n
\n {{ \"restoreSelectedItemsDesc\" | i18n: cipherIds.length }}\n
\n
\n \n \n {{ \"restore\" | i18n }}\n \n \n
\n
\n
\n
\n","
\n
\n
\n
\n

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

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

{{ \"moveManyToOrgDesc\" | i18n }}

\n

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

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

{{ \"collections\" | i18n }}

\n
\n \n \n
\n
\n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n
\n \n \n {{ c.name }}\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { Checkable, isChecked } from \"@bitwarden/common/types/checkable\";\n\n@Component({\n selector: \"app-vault-bulk-share\",\n templateUrl: \"bulk-share.component.html\",\n})\nexport class BulkShareComponent implements OnInit {\n @Input() ciphers: CipherView[] = [];\n @Input() organizationId: string;\n @Output() onShared = new EventEmitter();\n\n nonShareableCount = 0;\n collections: Checkable[] = [];\n organizations: Organization[] = [];\n shareableCiphers: CipherView[] = [];\n formPromise: Promise;\n\n private writeableCollections: CollectionView[] = [];\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private organizationService: OrganizationService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.shareableCiphers = this.ciphers.filter(\n (c) => !c.hasOldAttachments && c.organizationId == null\n );\n this.nonShareableCount = this.ciphers.length - this.shareableCiphers.length;\n const allCollections = await this.collectionService.getAllDecrypted();\n this.writeableCollections = allCollections.filter((c) => !c.readOnly);\n this.organizations = await this.organizationService.getAll();\n if (this.organizationId == null && this.organizations.length > 0) {\n this.organizationId = this.organizations[0].id;\n }\n this.filterCollections();\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n filterCollections() {\n this.selectAll(false);\n if (this.organizationId == null || this.writeableCollections.length === 0) {\n this.collections = [];\n } else {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.organizationId\n );\n }\n }\n\n async submit() {\n const checkedCollectionIds = this.collections.filter(isChecked).map((c) => c.id);\n try {\n this.formPromise = this.cipherService.shareManyWithServer(\n this.shareableCiphers,\n this.organizationId,\n checkedCollectionIds\n );\n await this.formPromise;\n this.onShared.emit();\n const orgName =\n this.organizations.find((o) => o.id === this.organizationId)?.name ??\n this.i18nService.t(\"organization\");\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"movedItemsToOrg\", orgName)\n );\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n check(c: Checkable, select?: boolean) {\n c.checked = select == null ? !c.checked : select;\n }\n\n selectAll(select: boolean) {\n const collections = select ? this.collections : this.writeableCollections;\n collections.forEach((c) => this.check(c, select));\n }\n\n get canSave() {\n if (\n this.shareableCiphers != null &&\n this.shareableCiphers.length > 0 &&\n this.collections != null\n ) {\n for (let i = 0; i < this.collections.length; i++) {\n if (this.collections[i].checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","
\n \n \n \n
\n \n \n {{ \"moveSelected\" | i18n }}\n \n \n \n {{ \"moveSelectedToOrg\" | i18n }}\n \n \n \n
\n \n \n
\n
\n\n\n\n\n\n","import { Component, Input, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/enums/cipherRepromptType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\nimport { BulkDeleteComponent } from \"./bulk-delete.component\";\nimport { BulkMoveComponent } from \"./bulk-move.component\";\nimport { BulkRestoreComponent } from \"./bulk-restore.component\";\nimport { BulkShareComponent } from \"./bulk-share.component\";\nimport { CiphersComponent } from \"./ciphers.component\";\n\n@Component({\n selector: \"app-vault-bulk-actions\",\n templateUrl: \"bulk-actions.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class BulkActionsComponent {\n @Input() ciphersComponent: CiphersComponent;\n @Input() deleted: boolean;\n @Input() organization: Organization;\n\n @ViewChild(\"bulkDeleteTemplate\", { read: ViewContainerRef, static: true })\n bulkDeleteModalRef: ViewContainerRef;\n @ViewChild(\"bulkRestoreTemplate\", { read: ViewContainerRef, static: true })\n bulkRestoreModalRef: ViewContainerRef;\n @ViewChild(\"bulkMoveTemplate\", { read: ViewContainerRef, static: true })\n bulkMoveModalRef: ViewContainerRef;\n @ViewChild(\"bulkShareTemplate\", { read: ViewContainerRef, static: true })\n bulkShareModalRef: ViewContainerRef;\n\n constructor(\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private modalService: ModalService,\n private passwordRepromptService: PasswordRepromptService\n ) {}\n\n async bulkDelete() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkDeleteComponent,\n this.bulkDeleteModalRef,\n (comp) => {\n comp.permanent = this.deleted;\n comp.cipherIds = selectedIds;\n comp.organization = this.organization;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeleted.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async bulkRestore() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkRestoreComponent,\n this.bulkRestoreModalRef,\n (comp) => {\n comp.cipherIds = selectedIds;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onRestored.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async bulkShare() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedCiphers = this.ciphersComponent.getSelected();\n if (selectedCiphers.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkShareComponent,\n this.bulkShareModalRef,\n (comp) => {\n comp.ciphers = selectedCiphers;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onShared.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async bulkMove() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkMoveComponent,\n this.bulkMoveModalRef,\n (comp) => {\n comp.cipherIds = selectedIds;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onMoved.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n selectAll(select: boolean) {\n this.ciphersComponent.selectAll(select);\n }\n\n private async promptPassword() {\n const selectedCiphers = this.ciphersComponent.getSelected();\n const notProtected = !selectedCiphers.find(\n (cipher) => cipher.reprompt !== CipherRepromptType.None\n );\n\n return notProtected || (await this.passwordRepromptService.showPasswordPrompt());\n }\n}\n","
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n

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

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

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

\n
\n
\n","import { Component } from \"@angular/core\";\nimport { Params } from \"@angular/router\";\n\nimport { BaseAcceptComponent } from \"../../common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-family-sponsorship\",\n templateUrl: \"accept-family-sponsorship.component.html\",\n})\nexport class AcceptFamilySponsorshipComponent extends BaseAcceptComponent {\n failedShortMessage = \"inviteAcceptFailedShort\";\n failedMessage = \"inviteAcceptFailed\";\n\n requiredParameters = [\"email\", \"token\"];\n\n async authedHandler(qParams: Params) {\n this.router.navigate([\"/setup/families-for-enterprise\"], { queryParams: qParams });\n }\n\n async unauthedHandler(qParams: Params) {\n if (!qParams.register) {\n this.router.navigate([\"/login\"], { queryParams: { email: qParams.email } });\n } else {\n this.router.navigate([\"/register\"], { queryParams: { email: qParams.email } });\n }\n }\n}\n","import { PlanSponsorshipType } from \"../../../enums/planSponsorshipType\";\n\nexport class OrganizationSponsorshipRedeemRequest {\n planSponsorshipType: PlanSponsorshipType;\n sponsoredOrganizationId: string;\n}\n","
\n
\n

{{ \"sponsoredFamiliesOffer\" | i18n }}

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

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

\n
\n \n \n \n \n \n \n
\n
\n \n
\n
\n \n
\n \n
\n\n","import { Component, OnDestroy, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { Observable, Subject } from \"rxjs\";\nimport { first, map, takeUntil } from \"rxjs/operators\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { PlanSponsorshipType } from \"@bitwarden/common/enums/planSponsorshipType\";\nimport { PlanType } from \"@bitwarden/common/enums/planType\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { OrganizationSponsorshipRedeemRequest } from \"@bitwarden/common/models/request/organization/organization-sponsorship-redeem.request\";\n\nimport { DeleteOrganizationComponent } from \"../../organizations/settings\";\nimport { OrganizationPlansComponent } from \"../../settings/organization-plans.component\";\n\n@Component({\n selector: \"families-for-enterprise-setup\",\n templateUrl: \"families-for-enterprise-setup.component.html\",\n})\nexport class FamiliesForEnterpriseSetupComponent implements OnInit, OnDestroy {\n @ViewChild(OrganizationPlansComponent, { static: false })\n set organizationPlansComponent(value: OrganizationPlansComponent) {\n if (!value) {\n return;\n }\n\n value.plan = PlanType.FamiliesAnnually;\n value.product = ProductType.Families;\n value.acceptingSponsorship = true;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n value.onSuccess.subscribe(this.onOrganizationCreateSuccess.bind(this));\n }\n\n @ViewChild(\"deleteOrganizationTemplate\", { read: ViewContainerRef, static: true })\n deleteModalRef: ViewContainerRef;\n\n loading = true;\n badToken = false;\n formPromise: Promise;\n\n token: string;\n existingFamilyOrganizations: Organization[];\n existingFamilyOrganizations$: Observable;\n\n showNewOrganization = false;\n _organizationPlansComponent: OrganizationPlansComponent;\n _selectedFamilyOrganizationId = \"\";\n\n private _destroy = new Subject();\n\n constructor(\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private apiService: ApiService,\n private syncService: SyncService,\n private validationService: ValidationService,\n private organizationService: OrganizationService,\n private modalService: ModalService\n ) {}\n\n async ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n const error = qParams.token == null;\n if (error) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"sponsoredFamiliesAcceptFailed\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"/\"]);\n return;\n }\n\n this.token = qParams.token;\n\n await this.syncService.fullSync(true);\n this.badToken = !(await this.apiService.postPreValidateSponsorshipToken(this.token));\n this.loading = false;\n });\n\n this.existingFamilyOrganizations$ = this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter((o) => o.planProductType === ProductType.Families))\n );\n\n this.existingFamilyOrganizations$.pipe(takeUntil(this._destroy)).subscribe((orgs) => {\n if (orgs.length === 0) {\n this.selectedFamilyOrganizationId = \"createNew\";\n }\n });\n }\n\n ngOnDestroy(): void {\n this._destroy.next();\n this._destroy.complete();\n }\n\n async submit() {\n this.formPromise = this.doSubmit(this._selectedFamilyOrganizationId);\n await this.formPromise;\n this.formPromise = null;\n }\n\n get selectedFamilyOrganizationId() {\n return this._selectedFamilyOrganizationId;\n }\n\n set selectedFamilyOrganizationId(value: string) {\n this._selectedFamilyOrganizationId = value;\n this.showNewOrganization = value === \"createNew\";\n }\n\n private async doSubmit(organizationId: string) {\n try {\n const request = new OrganizationSponsorshipRedeemRequest();\n request.planSponsorshipType = PlanSponsorshipType.FamiliesForEnterprise;\n request.sponsoredOrganizationId = organizationId;\n\n await this.apiService.postRedeemSponsorship(this.token, request);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"sponsoredFamiliesOfferRedeemed\")\n );\n await this.syncService.fullSync(true);\n\n this.router.navigate([\"/\"]);\n } catch (e) {\n if (this.showNewOrganization) {\n await this.modalService.openViewRef(\n DeleteOrganizationComponent,\n this.deleteModalRef,\n (comp) => {\n comp.organizationId = organizationId;\n comp.deleteOrganizationRequestType = \"InvalidFamiliesForEnterprise\";\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onSuccess.subscribe(() => {\n this.router.navigate([\"/\"]);\n });\n }\n );\n }\n this.validationService.showError(this.i18nService.t(\"sponsorshipTokenHasExpired\"));\n }\n }\n\n private async onOrganizationCreateSuccess(value: any) {\n // Use newly created organization id\n await this.doSubmit(value.organizationId);\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendAccess } from \"../domain/send-access\";\n\nimport { SendFileView } from \"./send-file.view\";\nimport { SendTextView } from \"./send-text.view\";\nimport { View } from \"./view\";\n\nexport class SendAccessView implements View {\n id: string = null;\n name: string = null;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n expirationDate: Date = null;\n creatorIdentifier: string = null;\n\n constructor(s?: SendAccess) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.type = s.type;\n this.expirationDate = s.expirationDate;\n this.creatorIdentifier = s.creatorIdentifier;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendAccessResponse } from \"../response/send-access.response\";\nimport { SendAccessView } from \"../view/send-access.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SendFile } from \"./send-file\";\nimport { SendText } from \"./send-text\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class SendAccess extends Domain {\n id: string;\n type: SendType;\n name: EncString;\n file: SendFile;\n text: SendText;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(obj?: SendAccessResponse) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n name: null,\n expirationDate: null,\n creatorIdentifier: null,\n },\n [\"id\", \"expirationDate\", \"creatorIdentifier\"]\n );\n\n this.type = obj.type;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendText(obj.text);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file);\n break;\n default:\n break;\n }\n }\n\n async decrypt(key: SymmetricCryptoKey): Promise {\n const model = new SendAccessView(this);\n\n await this.decryptObj(\n model,\n {\n name: null,\n },\n null,\n key\n );\n\n switch (this.type) {\n case SendType.File:\n model.file = await this.file.decrypt(key);\n break;\n case SendType.Text:\n model.text = await this.text.decrypt(key);\n break;\n default:\n break;\n }\n\n return model;\n }\n}\n","export class SendAccessRequest {\n password: string;\n}\n","
\n
\n
\n

Bitwarden Send

\n
\n
\n

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

\n
\n
\n \n {{ \"viewSendHiddenEmailWarning\" | i18n }}\n {{\n \"learnMore\" | i18n\n }}.\n \n
\n
\n \n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SEND_KDF_ITERATIONS } from \"@bitwarden/common/enums/kdfType\";\nimport { SendType } from \"@bitwarden/common/enums/sendType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EncArrayBuffer } from \"@bitwarden/common/models/domain/enc-array-buffer\";\nimport { SendAccess } from \"@bitwarden/common/models/domain/send-access\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { SendAccessRequest } from \"@bitwarden/common/models/request/send-access.request\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { SendAccessResponse } from \"@bitwarden/common/models/response/send-access.response\";\nimport { SendAccessView } from \"@bitwarden/common/models/view/send-access.view\";\n\n@Component({\n selector: \"app-send-access\",\n templateUrl: \"access.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class AccessComponent implements OnInit {\n send: SendAccessView;\n sendType = SendType;\n downloading = false;\n loading = true;\n passwordRequired = false;\n formPromise: Promise;\n password: string;\n showText = false;\n unavailable = false;\n error = false;\n hideEmail = false;\n\n private id: string;\n private key: string;\n private decKey: SymmetricCryptoKey;\n private accessRequest: SendAccessRequest;\n\n constructor(\n private i18nService: I18nService,\n private cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private route: ActivatedRoute,\n private cryptoService: CryptoService,\n private fileDownloadService: FileDownloadService\n ) {}\n\n get sendText() {\n if (this.send == null || this.send.text == null) {\n return null;\n }\n return this.showText ? this.send.text.text : this.send.text.maskedText;\n }\n\n get expirationDate() {\n if (this.send == null || this.send.expirationDate == null) {\n return null;\n }\n return this.send.expirationDate;\n }\n\n get creatorIdentifier() {\n if (this.send == null || this.send.creatorIdentifier == null) {\n return null;\n }\n return this.send.creatorIdentifier;\n }\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.params.subscribe(async (params) => {\n this.id = params.sendId;\n this.key = params.key;\n if (this.key == null || this.id == null) {\n return;\n }\n await this.load();\n });\n }\n\n async download() {\n if (this.send == null || this.decKey == null) {\n return;\n }\n\n if (this.downloading) {\n return;\n }\n\n const downloadData = await this.apiService.getSendFileDownloadData(\n this.send,\n this.accessRequest\n );\n\n if (Utils.isNullOrWhitespace(downloadData.url)) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"missingSendFile\"));\n return;\n }\n\n this.downloading = true;\n const response = await fetch(new Request(downloadData.url, { cache: \"no-store\" }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n this.downloading = false;\n return;\n }\n\n try {\n const encBuf = await EncArrayBuffer.fromResponse(response);\n const decBuf = await this.cryptoService.decryptFromBytes(encBuf, this.decKey);\n this.fileDownloadService.download({\n fileName: this.send.file.fileName,\n blobData: decBuf,\n downloadMethod: \"save\",\n });\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n\n this.downloading = false;\n }\n\n copyText() {\n this.platformUtilsService.copyToClipboard(this.send.text.text);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"sendTypeText\"))\n );\n }\n\n toggleText() {\n this.showText = !this.showText;\n }\n\n async load() {\n this.unavailable = false;\n this.error = false;\n this.hideEmail = false;\n const keyArray = Utils.fromUrlB64ToArray(this.key);\n this.accessRequest = new SendAccessRequest();\n if (this.password != null) {\n const passwordHash = await this.cryptoFunctionService.pbkdf2(\n this.password,\n keyArray,\n \"sha256\",\n SEND_KDF_ITERATIONS\n );\n this.accessRequest.password = Utils.fromBufferToB64(passwordHash);\n }\n try {\n let sendResponse: SendAccessResponse = null;\n if (this.loading) {\n sendResponse = await this.apiService.postSendAccess(this.id, this.accessRequest);\n } else {\n this.formPromise = this.apiService.postSendAccess(this.id, this.accessRequest);\n sendResponse = await this.formPromise;\n }\n this.passwordRequired = false;\n const sendAccess = new SendAccess(sendResponse);\n this.decKey = await this.cryptoService.makeSendKey(keyArray);\n this.send = await sendAccess.decrypt(this.decKey);\n this.showText = this.send.text != null ? !this.send.text.hidden : true;\n } catch (e) {\n if (e instanceof ErrorResponse) {\n if (e.statusCode === 401) {\n this.passwordRequired = true;\n } else if (e.statusCode === 404) {\n this.unavailable = true;\n } else {\n this.error = true;\n }\n }\n }\n this.loading = false;\n this.hideEmail =\n this.creatorIdentifier == null &&\n !this.passwordRequired &&\n !this.loading &&\n !this.unavailable;\n }\n}\n","import { Directive, NgZone, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { SendService } from \"@bitwarden/common/abstractions/send.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { SendType } from \"@bitwarden/common/enums/sendType\";\nimport { SendView } from \"@bitwarden/common/models/view/send.view\";\n\n@Directive()\nexport class SendComponent implements OnInit, OnDestroy {\n disableSend = false;\n sendType = SendType;\n loaded = false;\n loading = true;\n refreshing = false;\n expired = false;\n type: SendType = null;\n sends: SendView[] = [];\n filteredSends: SendView[] = [];\n searchText: string;\n selectedType: SendType;\n selectedAll: boolean;\n searchPlaceholder: string;\n filter: (cipher: SendView) => boolean;\n searchPending = false;\n hasSearched = false; // search() function called - returns true if text qualifies for search\n\n actionPromise: any;\n onSuccessfulRemovePassword: () => Promise;\n onSuccessfulDelete: () => Promise;\n onSuccessfulLoad: () => Promise;\n\n private searchTimeout: any;\n private destroy$ = new Subject();\n\n constructor(\n protected sendService: SendService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected environmentService: EnvironmentService,\n protected ngZone: NgZone,\n protected searchService: SearchService,\n protected policyService: PolicyService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.DisableSend)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n this.disableSend = policyAppliesToActiveUser;\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async load(filter: (send: SendView) => boolean = null) {\n this.loading = true;\n const sends = await this.sendService.getAllDecrypted();\n this.sends = sends;\n if (this.onSuccessfulLoad != null) {\n await this.onSuccessfulLoad();\n } else {\n // Default action\n this.selectAll();\n }\n this.loading = false;\n this.loaded = true;\n }\n\n async reload(filter: (send: SendView) => boolean = null) {\n this.loaded = false;\n this.sends = [];\n await this.load(filter);\n }\n\n async refresh() {\n try {\n this.refreshing = true;\n await this.reload(this.filter);\n } finally {\n this.refreshing = false;\n }\n }\n\n async applyFilter(filter: (send: SendView) => boolean = null) {\n this.filter = filter;\n await this.search(null);\n }\n\n async search(timeout: number = null) {\n this.searchPending = false;\n if (this.searchTimeout != null) {\n clearTimeout(this.searchTimeout);\n }\n if (timeout == null) {\n this.hasSearched = this.searchService.isSearchable(this.searchText);\n this.filteredSends = this.sends.filter((s) => this.filter == null || this.filter(s));\n this.applyTextSearch();\n return;\n }\n this.searchPending = true;\n this.searchTimeout = setTimeout(async () => {\n this.hasSearched = this.searchService.isSearchable(this.searchText);\n this.filteredSends = this.sends.filter((s) => this.filter == null || this.filter(s));\n this.applyTextSearch();\n this.searchPending = false;\n }, timeout);\n }\n\n async removePassword(s: SendView): Promise {\n if (this.actionPromise != null || s.password == null) {\n return;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removePasswordConfirmation\"),\n this.i18nService.t(\"removePassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendService.removePasswordWithServer(s.id);\n await this.actionPromise;\n if (this.onSuccessfulRemovePassword != null) {\n this.onSuccessfulRemovePassword();\n } else {\n // Default actions\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"removedPassword\"));\n await this.load();\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n\n async delete(s: SendView): Promise {\n if (this.actionPromise != null) {\n return false;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteSendConfirmation\"),\n this.i18nService.t(\"deleteSend\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendService.deleteWithServer(s.id);\n await this.actionPromise;\n\n if (this.onSuccessfulDelete != null) {\n this.onSuccessfulDelete();\n } else {\n // Default actions\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedSend\"));\n await this.refresh();\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n return true;\n }\n\n copy(s: SendView) {\n const sendLinkBaseUrl = this.environmentService.getSendUrl();\n const link = sendLinkBaseUrl + s.accessId + \"/\" + s.urlB64Key;\n this.platformUtilsService.copyToClipboard(link);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"sendLink\"))\n );\n }\n\n searchTextChanged() {\n this.search(200);\n }\n\n selectAll() {\n this.clearSelections();\n this.selectedAll = true;\n this.applyFilter(null);\n }\n\n selectType(type: SendType) {\n this.clearSelections();\n this.selectedType = type;\n this.applyFilter((s) => s.type === type);\n }\n\n clearSelections() {\n this.selectedAll = false;\n this.selectedType = null;\n }\n\n private applyTextSearch() {\n if (this.searchText != null) {\n this.filteredSends = this.searchService.searchSends(this.filteredSends, this.searchText);\n }\n }\n}\n","import { DatePipe } from \"@angular/common\";\nimport { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { UntypedFormControl, UntypedFormGroup } from \"@angular/forms\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n// Different BrowserPath = different controls.\nenum BrowserPath {\n // Native datetime-locale.\n // We are happy.\n Default = \"default\",\n\n // Native date and time inputs, but no datetime-locale.\n // We use individual date and time inputs and create a datetime programatically on submit.\n Firefox = \"firefox\",\n\n // No native date, time, or datetime-locale inputs.\n // We use a polyfill for dates and a dropdown for times.\n Safari = \"safari\",\n}\n\nenum DateField {\n DeletionDate = \"deletion\",\n ExpriationDate = \"expiration\",\n}\n\n// Value = hours\nenum DatePreset {\n OneHour = 1,\n OneDay = 24,\n TwoDays = 48,\n ThreeDays = 72,\n SevenDays = 168,\n ThirtyDays = 720,\n Custom = 0,\n Never = null,\n}\n\n// TimeOption is used for the dropdown implementation of custom times\n// twelveHour = displayed time; twentyFourHour = time used in logic\ninterface TimeOption {\n twelveHour: string;\n twentyFourHour: string;\n}\n\n@Directive()\nexport class EffluxDatesComponent implements OnInit {\n @Input() readonly initialDeletionDate: Date;\n @Input() readonly initialExpirationDate: Date;\n @Input() readonly editMode: boolean;\n @Input() readonly disabled: boolean;\n\n @Output() datesChanged = new EventEmitter<{ deletionDate: string; expirationDate: string }>();\n\n get browserPath(): BrowserPath {\n if (this.platformUtilsService.isFirefox()) {\n return BrowserPath.Firefox;\n } else if (this.platformUtilsService.isSafari()) {\n return BrowserPath.Safari;\n }\n return BrowserPath.Default;\n }\n\n datesForm = new UntypedFormGroup({\n selectedDeletionDatePreset: new UntypedFormControl(),\n selectedExpirationDatePreset: new UntypedFormControl(),\n defaultDeletionDateTime: new UntypedFormControl(),\n defaultExpirationDateTime: new UntypedFormControl(),\n fallbackDeletionDate: new UntypedFormControl(),\n fallbackDeletionTime: new UntypedFormControl(),\n fallbackExpirationDate: new UntypedFormControl(),\n fallbackExpirationTime: new UntypedFormControl(),\n });\n\n deletionDatePresets: any[] = [\n { name: this.i18nService.t(\"oneHour\"), value: DatePreset.OneHour },\n { name: this.i18nService.t(\"oneDay\"), value: DatePreset.OneDay },\n { name: this.i18nService.t(\"days\", \"2\"), value: DatePreset.TwoDays },\n { name: this.i18nService.t(\"days\", \"3\"), value: DatePreset.ThreeDays },\n { name: this.i18nService.t(\"days\", \"7\"), value: DatePreset.SevenDays },\n { name: this.i18nService.t(\"days\", \"30\"), value: DatePreset.ThirtyDays },\n { name: this.i18nService.t(\"custom\"), value: DatePreset.Custom },\n ];\n\n expirationDatePresets: any[] = [\n { name: this.i18nService.t(\"never\"), value: DatePreset.Never },\n ].concat([...this.deletionDatePresets]);\n\n get selectedDeletionDatePreset(): UntypedFormControl {\n return this.datesForm.get(\"selectedDeletionDatePreset\") as UntypedFormControl;\n }\n\n get selectedExpirationDatePreset(): UntypedFormControl {\n return this.datesForm.get(\"selectedExpirationDatePreset\") as UntypedFormControl;\n }\n\n get defaultDeletionDateTime(): UntypedFormControl {\n return this.datesForm.get(\"defaultDeletionDateTime\") as UntypedFormControl;\n }\n\n get defaultExpirationDateTime(): UntypedFormControl {\n return this.datesForm.get(\"defaultExpirationDateTime\") as UntypedFormControl;\n }\n\n get fallbackDeletionDate(): UntypedFormControl {\n return this.datesForm.get(\"fallbackDeletionDate\") as UntypedFormControl;\n }\n\n get fallbackDeletionTime(): UntypedFormControl {\n return this.datesForm.get(\"fallbackDeletionTime\") as UntypedFormControl;\n }\n\n get fallbackExpirationDate(): UntypedFormControl {\n return this.datesForm.get(\"fallbackExpirationDate\") as UntypedFormControl;\n }\n\n get fallbackExpirationTime(): UntypedFormControl {\n return this.datesForm.get(\"fallbackExpirationTime\") as UntypedFormControl;\n }\n\n // Should be able to call these at any time and compute a submitable value\n get formattedDeletionDate(): string {\n switch (this.selectedDeletionDatePreset.value as DatePreset) {\n case DatePreset.Never:\n this.selectedDeletionDatePreset.setValue(DatePreset.SevenDays);\n return this.formattedDeletionDate;\n case DatePreset.Custom:\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n return this.fallbackDeletionDate.value + \"T\" + this.fallbackDeletionTime.value;\n default:\n return this.defaultDeletionDateTime.value;\n }\n default: {\n const now = new Date();\n const miliseconds = now.setTime(\n now.getTime() + (this.selectedDeletionDatePreset.value as number) * 60 * 60 * 1000\n );\n return new Date(miliseconds).toString();\n }\n }\n }\n\n get formattedExpirationDate(): string {\n switch (this.selectedExpirationDatePreset.value as DatePreset) {\n case DatePreset.Never:\n return null;\n case DatePreset.Custom:\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n if (\n (!this.fallbackExpirationDate.value || !this.fallbackExpirationTime.value) &&\n this.editMode\n ) {\n return null;\n }\n return this.fallbackExpirationDate.value + \"T\" + this.fallbackExpirationTime.value;\n default:\n if (!this.defaultExpirationDateTime.value) {\n return null;\n }\n return this.defaultExpirationDateTime.value;\n }\n default: {\n const now = new Date();\n const miliseconds = now.setTime(\n now.getTime() + (this.selectedExpirationDatePreset.value as number) * 60 * 60 * 1000\n );\n return new Date(miliseconds).toString();\n }\n }\n }\n //\n\n get safariDeletionTimePresetOptions() {\n return this.safariTimePresetOptions(DateField.DeletionDate);\n }\n\n get safariExpirationTimePresetOptions() {\n return this.safariTimePresetOptions(DateField.ExpriationDate);\n }\n\n private get nextWeek(): Date {\n const nextWeek = new Date();\n nextWeek.setDate(nextWeek.getDate() + 7);\n return nextWeek;\n }\n\n constructor(\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected datePipe: DatePipe\n ) {}\n\n ngOnInit(): void {\n this.setInitialFormValues();\n this.emitDates();\n this.datesForm.valueChanges.subscribe(() => {\n this.emitDates();\n });\n }\n\n onDeletionDatePresetSelect(value: DatePreset) {\n this.selectedDeletionDatePreset.setValue(value);\n }\n\n clearExpiration() {\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n this.fallbackExpirationDate.setValue(null);\n this.fallbackExpirationTime.setValue(null);\n break;\n case BrowserPath.Default:\n this.defaultExpirationDateTime.setValue(null);\n break;\n }\n }\n\n protected emitDates() {\n this.datesChanged.emit({\n deletionDate: this.formattedDeletionDate,\n expirationDate: this.formattedExpirationDate,\n });\n }\n\n protected setInitialFormValues() {\n if (this.editMode) {\n this.selectedDeletionDatePreset.setValue(DatePreset.Custom);\n this.selectedExpirationDatePreset.setValue(DatePreset.Custom);\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n this.fallbackDeletionDate.setValue(this.initialDeletionDate.toISOString().slice(0, 10));\n this.fallbackDeletionTime.setValue(this.initialDeletionDate.toTimeString().slice(0, 5));\n if (this.initialExpirationDate != null) {\n this.fallbackExpirationDate.setValue(\n this.initialExpirationDate.toISOString().slice(0, 10)\n );\n this.fallbackExpirationTime.setValue(\n this.initialExpirationDate.toTimeString().slice(0, 5)\n );\n }\n break;\n case BrowserPath.Default:\n if (this.initialExpirationDate) {\n this.defaultExpirationDateTime.setValue(\n this.datePipe.transform(new Date(this.initialExpirationDate), \"yyyy-MM-ddTHH:mm\")\n );\n }\n this.defaultDeletionDateTime.setValue(\n this.datePipe.transform(new Date(this.initialDeletionDate), \"yyyy-MM-ddTHH:mm\")\n );\n break;\n }\n } else {\n this.selectedDeletionDatePreset.setValue(DatePreset.SevenDays);\n this.selectedExpirationDatePreset.setValue(DatePreset.Never);\n\n switch (this.browserPath) {\n case BrowserPath.Safari:\n this.fallbackDeletionDate.setValue(this.nextWeek.toISOString().slice(0, 10));\n this.fallbackDeletionTime.setValue(\n this.safariTimePresetOptions(DateField.DeletionDate)[1].twentyFourHour\n );\n break;\n default:\n break;\n }\n }\n }\n\n protected safariTimePresetOptions(field: DateField): TimeOption[] {\n // init individual arrays for major sort groups\n const noon: TimeOption[] = [];\n const midnight: TimeOption[] = [];\n const ams: TimeOption[] = [];\n const pms: TimeOption[] = [];\n\n // determine minute skip (5 min, 10 min, 15 min, etc.)\n const minuteIncrementer = 15;\n\n // loop through each hour on a 12 hour system\n for (let h = 1; h <= 12; h++) {\n // loop through each minute in the hour using the skip to incriment\n for (let m = 0; m < 60; m += minuteIncrementer) {\n // init the final strings that will be added to the lists\n let hour = h.toString();\n let minutes = m.toString();\n\n // add prepending 0s to single digit hours/minutes\n if (h < 10) {\n hour = \"0\" + hour;\n }\n if (m < 10) {\n minutes = \"0\" + minutes;\n }\n\n // build time strings and push to relevant sort groups\n if (h === 12) {\n const midnightOption: TimeOption = {\n twelveHour: `${hour}:${minutes} AM`,\n twentyFourHour: `00:${minutes}`,\n };\n midnight.push(midnightOption);\n\n const noonOption: TimeOption = {\n twelveHour: `${hour}:${minutes} PM`,\n twentyFourHour: `${hour}:${minutes}`,\n };\n noon.push(noonOption);\n } else {\n const amOption: TimeOption = {\n twelveHour: `${hour}:${minutes} AM`,\n twentyFourHour: `${hour}:${minutes}`,\n };\n ams.push(amOption);\n\n const pmOption: TimeOption = {\n twelveHour: `${hour}:${minutes} PM`,\n twentyFourHour: `${h + 12}:${minutes}`,\n };\n pms.push(pmOption);\n }\n }\n }\n\n // bring all the arrays together in the right order\n const validTimes = [...midnight, ...ams, ...noon, ...pms];\n\n // determine if an unsupported value already exists on the send & add that to the top of the option list\n // example: if the Send was created with a different client\n if (field === DateField.ExpriationDate && this.initialExpirationDate != null && this.editMode) {\n const previousValue: TimeOption = {\n twelveHour: this.datePipe.transform(this.initialExpirationDate, \"hh:mm a\"),\n twentyFourHour: this.datePipe.transform(this.initialExpirationDate, \"HH:mm\"),\n };\n return [previousValue, { twelveHour: null, twentyFourHour: null }, ...validTimes];\n } else if (\n field === DateField.DeletionDate &&\n this.initialDeletionDate != null &&\n this.editMode\n ) {\n const previousValue: TimeOption = {\n twelveHour: this.datePipe.transform(this.initialDeletionDate, \"hh:mm a\"),\n twentyFourHour: this.datePipe.transform(this.initialDeletionDate, \"HH:mm\"),\n };\n return [previousValue, ...validTimes];\n } else {\n return [{ twelveHour: null, twentyFourHour: null }, ...validTimes];\n }\n }\n}\n","import { DatePipe } from \"@angular/common\";\nimport { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SendService } from \"@bitwarden/common/abstractions/send.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { SendType } from \"@bitwarden/common/enums/sendType\";\nimport { EncArrayBuffer } from \"@bitwarden/common/models/domain/enc-array-buffer\";\nimport { Send } from \"@bitwarden/common/models/domain/send\";\nimport { SendFileView } from \"@bitwarden/common/models/view/send-file.view\";\nimport { SendTextView } from \"@bitwarden/common/models/view/send-text.view\";\nimport { SendView } from \"@bitwarden/common/models/view/send.view\";\n\n@Directive()\nexport class AddEditComponent implements OnInit, OnDestroy {\n @Input() sendId: string;\n @Input() type: SendType;\n\n @Output() onSavedSend = new EventEmitter();\n @Output() onDeletedSend = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n\n copyLink = false;\n disableSend = false;\n disableHideEmail = false;\n send: SendView;\n deletionDate: string;\n expirationDate: string;\n hasPassword: boolean;\n password: string;\n showPassword = false;\n formPromise: Promise;\n deletePromise: Promise;\n sendType = SendType;\n typeOptions: any[];\n canAccessPremium = true;\n emailVerified = true;\n alertShown = false;\n showOptions = false;\n\n private sendLinkBaseUrl: string;\n private destroy$ = new Subject();\n\n constructor(\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected environmentService: EnvironmentService,\n protected datePipe: DatePipe,\n protected sendService: SendService,\n protected messagingService: MessagingService,\n protected policyService: PolicyService,\n private logService: LogService,\n protected stateService: StateService\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"sendTypeFile\"), value: SendType.File },\n { name: i18nService.t(\"sendTypeText\"), value: SendType.Text },\n ];\n this.sendLinkBaseUrl = this.environmentService.getSendUrl();\n }\n\n get link(): string {\n if (this.send.id != null && this.send.accessId != null) {\n return this.sendLinkBaseUrl + this.send.accessId + \"/\" + this.send.urlB64Key;\n }\n return null;\n }\n\n get isSafari() {\n return this.platformUtilsService.isSafari();\n }\n\n get isDateTimeLocalSupported(): boolean {\n return !(this.platformUtilsService.isFirefox() || this.platformUtilsService.isSafari());\n }\n\n async ngOnInit() {\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.DisableSend)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n this.disableSend = policyAppliesToActiveUser;\n });\n\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.SendOptions, (p) => p.data.disableHideEmail)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n this.disableHideEmail = policyAppliesToActiveUser;\n });\n\n await this.load();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n get editMode(): boolean {\n return this.sendId != null;\n }\n\n get title(): string {\n return this.i18nService.t(this.editMode ? \"editSend\" : \"createSend\");\n }\n\n setDates(event: { deletionDate: string; expirationDate: string }) {\n this.deletionDate = event.deletionDate;\n this.expirationDate = event.expirationDate;\n }\n\n async load() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n this.emailVerified = await this.stateService.getEmailVerified();\n if (!this.canAccessPremium || !this.emailVerified) {\n this.type = SendType.Text;\n }\n\n if (this.send == null) {\n if (this.editMode) {\n const send = await this.loadSend();\n this.send = await send.decrypt();\n } else {\n this.send = new SendView();\n this.send.type = this.type == null ? SendType.File : this.type;\n this.send.file = new SendFileView();\n this.send.text = new SendTextView();\n this.send.deletionDate = new Date();\n this.send.deletionDate.setDate(this.send.deletionDate.getDate() + 7);\n }\n }\n\n this.hasPassword = this.send.password != null && this.send.password.trim() !== \"\";\n }\n\n async submit(): Promise {\n if (this.disableSend) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"sendDisabledWarning\")\n );\n return false;\n }\n\n if (this.send.name == null || this.send.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n let file: File = null;\n if (this.send.type === SendType.File && !this.editMode) {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n file = files[0];\n if (files[0].size > 524288000) {\n // 500 MB\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"maxFileSize\")\n );\n return;\n }\n }\n\n if (this.password != null && this.password.trim() === \"\") {\n this.password = null;\n }\n\n this.formPromise = this.encryptSend(file).then(async (encSend) => {\n const uploadPromise = this.sendService.saveWithServer(encSend);\n await uploadPromise;\n if (this.send.id == null) {\n this.send.id = encSend[0].id;\n }\n if (this.send.accessId == null) {\n this.send.accessId = encSend[0].accessId;\n }\n this.onSavedSend.emit(this.send);\n if (this.copyLink && this.link != null) {\n const copySuccess = await this.copyLinkToClipboard(this.link);\n if (copySuccess ?? true) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedSend\" : \"createdSend\")\n );\n } else {\n await this.platformUtilsService.showDialog(\n this.i18nService.t(this.editMode ? \"editedSend\" : \"createdSend\"),\n null,\n this.i18nService.t(\"ok\"),\n null,\n \"success\",\n null\n );\n await this.copyLinkToClipboard(this.link);\n }\n }\n });\n try {\n await this.formPromise;\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n return false;\n }\n\n async copyLinkToClipboard(link: string): Promise {\n return Promise.resolve(this.platformUtilsService.copyToClipboard(link));\n }\n\n async delete(): Promise {\n if (this.deletePromise != null) {\n return false;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteSendConfirmation\"),\n this.i18nService.t(\"deleteSend\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.sendService.deleteWithServer(this.send.id);\n await this.deletePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedSend\"));\n await this.load();\n this.onDeletedSend.emit(this.send);\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n typeChanged() {\n if (this.send.type === SendType.File && !this.alertShown) {\n if (!this.canAccessPremium) {\n this.alertShown = true;\n this.messagingService.send(\"premiumRequired\");\n } else if (!this.emailVerified) {\n this.alertShown = true;\n this.messagingService.send(\"emailVerificationRequired\");\n }\n }\n }\n\n toggleOptions() {\n this.showOptions = !this.showOptions;\n }\n\n protected async loadSend(): Promise {\n return this.sendService.get(this.sendId);\n }\n\n protected async encryptSend(file: File): Promise<[Send, EncArrayBuffer]> {\n const sendData = await this.sendService.encrypt(this.send, file, this.password, null);\n\n // Parse dates\n try {\n sendData[0].deletionDate = this.deletionDate == null ? null : new Date(this.deletionDate);\n } catch {\n sendData[0].deletionDate = null;\n }\n try {\n sendData[0].expirationDate =\n this.expirationDate == null ? null : new Date(this.expirationDate);\n } catch {\n sendData[0].expirationDate = null;\n }\n\n return sendData;\n }\n\n protected togglePasswordVisible() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"password\").focus();\n }\n}\n","
\n
\n \n \n \n \n
\n \n \n
\n
\n \n
\n \n \n \n {{ o.twelveHour }}\n \n \n
\n
\n \n \n \n
\n
\n
\n \n \n \n \n \n \n
\n
\n \n
\n
{{ \"deletionDateDesc\" | i18n }}
\n
\n
\n
\n \n \n {{ \"clear\" | i18n }}\n \n
\n \n \n
\n \n \n
\n \n
\n \n \n \n {{ o.twelveHour }}\n \n \n
\n \n \n \n
\n
\n
\n \n \n \n \n \n \n
\n
\n \n
\n
{{ \"expirationDateDesc\" | i18n }}
\n
\n
\n","import { DatePipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\nimport { ControlContainer, NgForm } from \"@angular/forms\";\n\nimport { EffluxDatesComponent as BaseEffluxDatesComponent } from \"@bitwarden/angular/components/send/efflux-dates.component\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-send-efflux-dates\",\n templateUrl: \"efflux-dates.component.html\",\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n})\nexport class EffluxDatesComponent extends BaseEffluxDatesComponent {\n constructor(\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected datePipe: DatePipe\n ) {\n super(i18nService, platformUtilsService, datePipe);\n }\n}\n","
\n
\n \n
\n

{{ title }}

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

{{ \"share\" | i18n }}

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

{{ \"options\" | i18n }}

\n \n \n \n
\n
\n \n \n
\n
\n \n \n
{{ \"maxAccessCountDesc\" | i18n }}
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n
\n \n \n \n
\n
\n
{{ \"sendPasswordDesc\" | i18n }}
\n
\n
\n
\n \n \n
{{ \"sendNotesDesc\" | i18n }}
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n \n \n \n \n
\n
\n \n
\n\n","import { DatePipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"@bitwarden/angular/components/send/add-edit.component\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SendService } from \"@bitwarden/common/abstractions/send.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Component({\n selector: \"app-send-add-edit\",\n templateUrl: \"add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n constructor(\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n datePipe: DatePipe,\n sendService: SendService,\n stateService: StateService,\n messagingService: MessagingService,\n policyService: PolicyService,\n logService: LogService\n ) {\n super(\n i18nService,\n platformUtilsService,\n environmentService,\n datePipe,\n sendService,\n messagingService,\n policyService,\n logService,\n stateService\n );\n }\n\n async copyLinkToClipboard(link: string): Promise {\n // Copy function on web depends on the modal being open or not. Since this event occurs during a transition\n // of the modal closing we need to add a small delay to make sure state of the DOM is consistent.\n return new Promise((resolve) => {\n window.setTimeout(() => resolve(super.copyLinkToClipboard(link)), 500);\n });\n }\n}\n","
\n \n {{ \"sendDisabledWarning\" | i18n }}\n \n
\n
\n
\n
\n {{ \"filters\" | i18n }}\n
\n
\n \n
\n
    \n
  • \n \n \n \n
  • \n
\n
\n
\n
\n

{{ \"types\" | i18n }}

\n
\n
    \n
  • \n \n \n \n
  • \n
  • \n \n \n \n
  • \n
\n
\n
\n
\n
\n
\n
\n

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

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

{{ \"noSendsInList\" | i18n }}

\n \n
\n
\n
\n
\n
\n\n","import { Component, NgZone, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { SendComponent as BaseSendComponent } from \"@bitwarden/angular/components/send/send.component\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { SendService } from \"@bitwarden/common/abstractions/send.service\";\nimport { SendView } from \"@bitwarden/common/models/view/send.view\";\nimport { Icons } from \"@bitwarden/components\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\n\nconst BroadcasterSubscriptionId = \"SendComponent\";\n\n@Component({\n selector: \"app-send\",\n templateUrl: \"send.component.html\",\n})\nexport class SendComponent extends BaseSendComponent {\n @ViewChild(\"sendAddEdit\", { read: ViewContainerRef, static: true })\n sendAddEditModalRef: ViewContainerRef;\n noItemIcon = Icons.Search;\n\n constructor(\n sendService: SendService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n ngZone: NgZone,\n searchService: SearchService,\n policyService: PolicyService,\n private modalService: ModalService,\n private broadcasterService: BroadcasterService,\n logService: LogService\n ) {\n super(\n sendService,\n i18nService,\n platformUtilsService,\n environmentService,\n ngZone,\n searchService,\n policyService,\n logService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n\n // Broadcaster subscription - load if sync completes in the background\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"syncCompleted\":\n if (message.successfully) {\n await this.load();\n }\n break;\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async addSend() {\n if (this.disableSend) {\n return;\n }\n\n const component = await this.editSend(null);\n component.type = this.type;\n }\n\n async editSend(send: SendView) {\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.sendAddEditModalRef,\n (comp) => {\n comp.sendId = send == null ? null : send.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedSend.subscribe(async () => {\n modal.close();\n await this.load();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeletedSend.subscribe(async () => {\n modal.close();\n await this.load();\n });\n }\n );\n\n return childComponent;\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\n@Component({\n selector: \"app-deauthorize-sessions\",\n templateUrl: \"deauthorize-sessions.component.html\",\n})\nexport class DeauthorizeSessionsComponent {\n masterPassword: Verification;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private userVerificationService: UserVerificationService,\n private messagingService: MessagingService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword)\n .then((request) => this.apiService.postSecurityStamp(request));\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"sessionsDeauthorized\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ \"deauthorizeSessions\" | i18n }}

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

{{ \"deauthorizeSessionsDesc\" | i18n }}

\n {{ \"deauthorizeSessionsWarning\" | i18n }}\n \n \n
\n
\n \n \n
\n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { AccountApiService } from \"@bitwarden/common/abstractions/account/account-api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\n@Component({\n selector: \"app-delete-account\",\n templateUrl: \"delete-account.component.html\",\n})\nexport class DeleteAccountComponent {\n formPromise: Promise;\n\n deleteForm = this.formBuilder.group({\n verification: undefined as Verification | undefined,\n });\n\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private formBuilder: FormBuilder,\n private accountApiService: AccountApiService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const verification = this.deleteForm.get(\"verification\").value;\n this.formPromise = this.accountApiService.deleteAccount(verification);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"accountDeleted\"),\n this.i18nService.t(\"accountDeletedDesc\")\n );\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ \"deleteAccount\" | i18n }}

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

{{ \"deleteAccountDesc\" | i18n }}

\n {{ \"deleteAccountWarning\" | i18n }}\n \n \n
\n
\n \n \n
\n \n
\n
\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class EmailTokenRequest extends SecretVerificationRequest {\n newEmail: string;\n masterPasswordHash: string;\n}\n","import { EmailTokenRequest } from \"./email-token.request\";\n\nexport class EmailRequest extends EmailTokenRequest {\n newMasterPasswordHash: string;\n token: string;\n key: string;\n}\n","
\n \n {{ \"changeEmailTwoFactorWarning\" | i18n }}\n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n

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

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

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

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

{{ \"myAccount\" | i18n }}

\n
\n\n\n
\n

{{ \"changeEmail\" | i18n }}

\n
\n \n
\n
\n

{{ \"dangerZone\" | i18n }}

\n
\n
\n
\n

{{ \"dangerZoneDesc\" | i18n }}

\n \n \n \n
\n
\n\n\n\n\n\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\nimport { DeauthorizeSessionsComponent } from \"./deauthorize-sessions.component\";\nimport { DeleteAccountComponent } from \"./delete-account.component\";\nimport { PurgeVaultComponent } from \"./purge-vault.component\";\n\n@Component({\n selector: \"app-account\",\n templateUrl: \"account.component.html\",\n})\nexport class AccountComponent {\n @ViewChild(\"deauthorizeSessionsTemplate\", { read: ViewContainerRef, static: true })\n deauthModalRef: ViewContainerRef;\n @ViewChild(\"purgeVaultTemplate\", { read: ViewContainerRef, static: true })\n purgeModalRef: ViewContainerRef;\n @ViewChild(\"deleteAccountTemplate\", { read: ViewContainerRef, static: true })\n deleteModalRef: ViewContainerRef;\n\n showChangeEmail = true;\n\n constructor(\n private modalService: ModalService,\n private apiService: ApiService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.showChangeEmail = !(await this.keyConnectorService.getUsesKeyConnector());\n }\n\n async deauthorizeSessions() {\n await this.modalService.openViewRef(DeauthorizeSessionsComponent, this.deauthModalRef);\n }\n\n async purgeVault() {\n await this.modalService.openViewRef(PurgeVaultComponent, this.purgeModalRef);\n }\n\n async deleteAccount() {\n await this.modalService.openViewRef(DeleteAccountComponent, this.deleteModalRef);\n }\n}\n","import { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { PlanType } from \"@bitwarden/common/enums/planType\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\n\nimport { OrganizationPlansComponent } from \"./organization-plans.component\";\n\n@Component({\n selector: \"app-create-organization\",\n templateUrl: \"create-organization.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class CreateOrganizationComponent implements OnInit {\n @ViewChild(OrganizationPlansComponent, { static: true })\n orgPlansComponent: OrganizationPlansComponent;\n\n constructor(private route: ActivatedRoute) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.plan === \"families\") {\n this.orgPlansComponent.plan = PlanType.FamiliesAnnually;\n this.orgPlansComponent.product = ProductType.Families;\n } else if (qParams.plan === \"teams\") {\n this.orgPlansComponent.plan = PlanType.TeamsAnnually;\n this.orgPlansComponent.product = ProductType.Teams;\n } else if (qParams.plan === \"enterprise\") {\n this.orgPlansComponent.plan = PlanType.EnterpriseAnnually;\n this.orgPlansComponent.product = ProductType.Enterprise;\n }\n });\n }\n}\n","
\n
\n
\n
\n

{{ \"newOrganization\" | i18n }}

\n
\n

{{ \"newOrganizationDesc\" | i18n }}

\n \n
\n
\n
\n","export class UpdateDomainsRequest {\n equivalentDomains: string[][];\n excludedGlobalEquivalentDomains: number[];\n}\n","
\n

{{ \"domainRules\" | i18n }}

\n
\n

{{ \"domainRulesDesc\" | i18n }}

\n
\n

{{ \"customEqDomains\" | i18n }}

\n

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

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

{{ \"globalEqDomains\" | i18n }}

\n

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

\n 0\">\n \n \n \n \n \n \n
{{ d.domains }}\n
\n \n \n \n
\n \n \n {{ \"exclude\" | i18n }}\n \n \n \n {{ \"include\" | i18n }}\n \n \n \n {{ \"customize\" | i18n }}\n \n
\n
\n
\n \n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UpdateDomainsRequest } from \"@bitwarden/common/models/request/update-domains.request\";\n\n@Component({\n selector: \"app-domain-rules\",\n templateUrl: \"domain-rules.component.html\",\n})\nexport class DomainRulesComponent implements OnInit {\n loading = true;\n custom: string[] = [];\n global: any[] = [];\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n const response = await this.apiService.getSettingsDomains();\n this.loading = false;\n if (response.equivalentDomains != null) {\n this.custom = response.equivalentDomains.map((d) => d.join(\", \"));\n }\n if (response.globalEquivalentDomains != null) {\n this.global = response.globalEquivalentDomains.map((d) => {\n return {\n domains: d.domains.join(\", \"),\n excluded: d.excluded,\n key: d.type,\n };\n });\n }\n }\n\n toggleExcluded(globalDomain: any) {\n globalDomain.excluded = !globalDomain.excluded;\n }\n\n customize(globalDomain: any) {\n globalDomain.excluded = true;\n this.custom.push(globalDomain.domains);\n }\n\n remove(index: number) {\n this.custom.splice(index, 1);\n }\n\n add() {\n this.custom.push(\"\");\n }\n\n async submit() {\n const request = new UpdateDomainsRequest();\n request.excludedGlobalEquivalentDomains = this.global\n .filter((d) => d.excluded)\n .map((d) => d.key);\n if (request.excludedGlobalEquivalentDomains.length === 0) {\n request.excludedGlobalEquivalentDomains = null;\n }\n request.equivalentDomains = this.custom\n .filter((d) => d != null && d.trim() !== \"\")\n .map((d) => d.split(\",\").map((d2) => d2.trim()));\n if (request.equivalentDomains.length === 0) {\n request.equivalentDomains = null;\n }\n\n try {\n this.formPromise = this.apiService.putSettingsDomains(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"domainsUpdated\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n indexTrackBy(index: number, obj: any): any {\n return index;\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"@bitwarden/angular/components/attachments.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { AttachmentView } from \"@bitwarden/common/models/view/attachment.view\";\n\n@Component({\n selector: \"emergency-access-attachments\",\n templateUrl: \"../vault/attachments.component.html\",\n})\nexport class EmergencyAccessAttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = true;\n canAccessAttachments = true;\n\n constructor(\n cipherService: CipherService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n logService: LogService,\n fileDownloadService: FileDownloadService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n platformUtilsService,\n apiService,\n window,\n logService,\n stateService,\n fileDownloadService\n );\n }\n\n protected async init() {\n // Do nothing since cipher is already decoded\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return false;\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { EventService } from \"@bitwarden/common/abstractions/event.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"../vault/add-edit.component\";\n\n@Component({\n selector: \"app-org-vault-add-edit\",\n templateUrl: \"../vault/add-edit.component.html\",\n})\nexport class EmergencyAddEditComponent extends BaseAddEditComponent {\n originalCipher: Cipher = null;\n viewOnly = true;\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n totpService: TotpService,\n passwordGenerationService: PasswordGenerationService,\n messagingService: MessagingService,\n eventService: EventService,\n policyService: PolicyService,\n passwordRepromptService: PasswordRepromptService,\n organizationService: OrganizationService,\n logService: LogService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n totpService,\n passwordGenerationService,\n messagingService,\n eventService,\n policyService,\n organizationService,\n logService,\n passwordRepromptService\n );\n }\n\n async load() {\n this.title = this.i18nService.t(\"viewItem\");\n }\n\n protected async loadCipher() {\n return Promise.resolve(this.originalCipher);\n }\n}\n","
\n

{{ \"vault\" | i18n }}

\n
\n
\n \n \n \n \n \n \n \n \n \n
\n \n \n {{\n c.name\n }}\n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n
\n
\n \n \n {{ \"loading\" | i18n }}\n \n
\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { CipherData } from \"@bitwarden/common/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/models/domain/cipher\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { EmergencyAccessViewResponse } from \"@bitwarden/common/models/response/emergency-access.response\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { EmergencyAccessAttachmentsComponent } from \"./emergency-access-attachments.component\";\nimport { EmergencyAddEditComponent } from \"./emergency-add-edit.component\";\n\n@Component({\n selector: \"emergency-access-view\",\n templateUrl: \"emergency-access-view.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class EmergencyAccessViewComponent implements OnInit {\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n @ViewChild(\"attachments\", { read: ViewContainerRef, static: true })\n attachmentsModalRef: ViewContainerRef;\n\n id: string;\n ciphers: CipherView[] = [];\n loaded = false;\n\n constructor(\n private cipherService: CipherService,\n private cryptoService: CryptoService,\n private modalService: ModalService,\n private router: Router,\n private route: ActivatedRoute,\n private apiService: ApiService\n ) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n this.route.params.subscribe((qParams) => {\n if (qParams.id == null) {\n return this.router.navigate([\"settings/emergency-access\"]);\n }\n\n this.id = qParams.id;\n\n this.load();\n });\n }\n\n async selectCipher(cipher: CipherView) {\n // eslint-disable-next-line\n const [_, childComponent] = await this.modalService.openViewRef(\n EmergencyAddEditComponent,\n this.cipherAddEditModalRef,\n (comp) => {\n comp.cipherId = cipher == null ? null : cipher.id;\n comp.cipher = cipher;\n }\n );\n\n return childComponent;\n }\n\n async load() {\n const response = await this.apiService.postEmergencyAccessView(this.id);\n this.ciphers = await this.getAllCiphers(response);\n this.loaded = true;\n }\n\n async viewAttachments(cipher: CipherView) {\n await this.modalService.openViewRef(\n EmergencyAccessAttachmentsComponent,\n this.attachmentsModalRef,\n (comp) => {\n comp.cipher = cipher;\n comp.emergencyAccessId = this.id;\n }\n );\n }\n\n protected async getAllCiphers(response: EmergencyAccessViewResponse): Promise {\n const ciphers = response.ciphers;\n\n const decCiphers: CipherView[] = [];\n const oldKeyBuffer = await this.cryptoService.rsaDecrypt(response.keyEncrypted);\n const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n const promises: any[] = [];\n ciphers.forEach((cipherResponse) => {\n const cipherData = new CipherData(cipherResponse);\n const cipher = new Cipher(cipherData);\n promises.push(cipher.decrypt(oldEncKey).then((c) => decCiphers.push(c)));\n });\n\n await Promise.all(promises);\n decCiphers.sort(this.cipherService.getLocaleSortingFunction());\n\n return decCiphers;\n }\n}\n","export enum EmergencyAccessStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n RecoveryInitiated = 3,\n RecoveryApproved = 4,\n}\n","export enum EmergencyAccessType {\n View = 0,\n Takeover = 1,\n}\n","export class EmergencyAccessConfirmRequest {\n key: string;\n}\n","import { EmergencyAccessType } from \"../../enums/emergencyAccessType\";\n\nexport class EmergencyAccessInviteRequest {\n email: string;\n type: EmergencyAccessType;\n waitTimeDays: number;\n}\n","import { EmergencyAccessType } from \"../../enums/emergencyAccessType\";\n\nexport class EmergencyAccessUpdateRequest {\n type: EmergencyAccessType;\n waitTimeDays: number;\n keyEncrypted?: string;\n}\n","
\n
\n \n
\n

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

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

{{ \"inviteEmergencyContactDesc\" | i18n }}

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

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

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n \n \n {{ \"waitTimeDesc\" | i18n }}\n
\n
\n
\n \n {{ \"save\" | i18n }}\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { EmergencyAccessType } from \"@bitwarden/common/enums/emergencyAccessType\";\nimport { EmergencyAccessInviteRequest } from \"@bitwarden/common/models/request/emergency-access-invite.request\";\nimport { EmergencyAccessUpdateRequest } from \"@bitwarden/common/models/request/emergency-access-update.request\";\n\n@Component({\n selector: \"emergency-access-add-edit\",\n templateUrl: \"emergency-access-add-edit.component.html\",\n})\nexport class EmergencyAccessAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() emergencyAccessId: string;\n @Output() onSaved = new EventEmitter();\n @Output() onDeleted = new EventEmitter();\n\n loading = true;\n readOnly = false;\n editMode = false;\n title: string;\n email: string;\n type: EmergencyAccessType = EmergencyAccessType.View;\n\n formPromise: Promise;\n\n emergencyAccessType = EmergencyAccessType;\n waitTimes: { name: string; value: number }[];\n waitTime: number;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.editMode = this.loading = this.emergencyAccessId != null;\n\n this.waitTimes = [\n { name: this.i18nService.t(\"oneDay\"), value: 1 },\n { name: this.i18nService.t(\"days\", \"2\"), value: 2 },\n { name: this.i18nService.t(\"days\", \"7\"), value: 7 },\n { name: this.i18nService.t(\"days\", \"14\"), value: 14 },\n { name: this.i18nService.t(\"days\", \"30\"), value: 30 },\n { name: this.i18nService.t(\"days\", \"90\"), value: 90 },\n ];\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editEmergencyContact\");\n try {\n const emergencyAccess = await this.apiService.getEmergencyAccess(this.emergencyAccessId);\n this.type = emergencyAccess.type;\n this.waitTime = emergencyAccess.waitTimeDays;\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"inviteEmergencyContact\");\n this.waitTime = this.waitTimes[2].value;\n }\n\n this.loading = false;\n }\n\n async submit() {\n try {\n if (this.editMode) {\n const request = new EmergencyAccessUpdateRequest();\n request.type = this.type;\n request.waitTimeDays = this.waitTime;\n\n this.formPromise = this.apiService.putEmergencyAccess(this.emergencyAccessId, request);\n } else {\n const request = new EmergencyAccessInviteRequest();\n request.email = this.email.trim();\n request.type = this.type;\n request.waitTimeDays = this.waitTime;\n\n this.formPromise = this.apiService.postEmergencyAccessInvite(request);\n }\n\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedUserId\" : \"invitedUsers\", this.name)\n );\n this.onSaved.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n this.onDeleted.emit();\n }\n}\n","
\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Component({\n selector: \"emergency-access-confirm\",\n templateUrl: \"emergency-access-confirm.component.html\",\n})\nexport class EmergencyAccessConfirmComponent implements OnInit {\n @Input() name: string;\n @Input() userId: string;\n @Input() emergencyAccessId: string;\n @Input() formPromise: Promise;\n @Output() onConfirmed = new EventEmitter();\n\n dontAskAgain = false;\n loading = true;\n fingerprint: string;\n\n constructor(\n private apiService: ApiService,\n private cryptoService: CryptoService,\n private stateService: StateService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n try {\n const publicKeyResponse = await this.apiService.getUserPublicKey(this.userId);\n if (publicKeyResponse != null) {\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n const fingerprint = await this.cryptoService.getFingerprint(this.userId, publicKey.buffer);\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join(\"-\");\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.loading = false;\n }\n\n async submit() {\n if (this.loading) {\n return;\n }\n\n if (this.dontAskAgain) {\n await this.stateService.setAutoConfirmFingerprints(true);\n }\n\n try {\n this.onConfirmed.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","export class EmergencyAccessPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","
\n
\n \n
\n

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

\n \n ×\n \n
\n
\n {{ \"loggedOutWarning\" | i18n }}\n \n \n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n \n
\n
\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { takeUntil } from \"rxjs\";\n\nimport { ChangePasswordComponent } from \"@bitwarden/angular/components/change-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { KdfType } from \"@bitwarden/common/enums/kdfType\";\nimport { PolicyData } from \"@bitwarden/common/models/data/policy.data\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { EmergencyAccessPasswordRequest } from \"@bitwarden/common/models/request/emergency-access-password.request\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policy.response\";\n\n@Component({\n selector: \"emergency-access-takeover\",\n templateUrl: \"emergency-access-takeover.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class EmergencyAccessTakeoverComponent\n extends ChangePasswordComponent\n implements OnInit, OnDestroy\n{\n @Output() onDone = new EventEmitter();\n @Input() emergencyAccessId: string;\n @Input() name: string;\n @Input() email: string;\n @Input() kdf: KdfType;\n @Input() kdfIterations: number;\n\n formPromise: Promise;\n\n constructor(\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n private apiService: ApiService,\n private logService: LogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n const response = await this.apiService.getEmergencyGrantorPolicies(this.emergencyAccessId);\n if (response.data != null && response.data.length > 0) {\n const policies = response.data.map(\n (policyResponse: PolicyResponse) => new Policy(new PolicyData(policyResponse))\n );\n\n this.policyService\n .masterPasswordPolicyOptions$(policies)\n .pipe(takeUntil(this.destroy$))\n .subscribe((enforcedPolicyOptions) => (this.enforcedPolicyOptions = enforcedPolicyOptions));\n }\n }\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n async submit() {\n if (!(await this.strongPassword())) {\n return;\n }\n\n const takeoverResponse = await this.apiService.postEmergencyAccessTakeover(\n this.emergencyAccessId\n );\n\n const oldKeyBuffer = await this.cryptoService.rsaDecrypt(takeoverResponse.keyEncrypted);\n const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n if (oldEncKey == null) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"unexpectedError\")\n );\n return;\n }\n\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email,\n takeoverResponse.kdf,\n takeoverResponse.kdfIterations\n );\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n const encKey = await this.cryptoService.remakeEncKey(key, oldEncKey);\n\n const request = new EmergencyAccessPasswordRequest();\n request.newMasterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n\n this.apiService.postEmergencyAccessPassword(this.emergencyAccessId, request);\n\n try {\n this.onDone.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n

{{ \"emergencyAccess\" | i18n }}

\n
\n

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

\n\n

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

\n\n
\n

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

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

{{ \"noTrustedContacts\" | i18n }}

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

{{ \"designatedEmergencyContacts\" | i18n }}

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

{{ \"noGrantedAccess\" | i18n }}

\n \n \n {{ \"loading\" | i18n }}\n \n
\n\n\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { EmergencyAccessStatusType } from \"@bitwarden/common/enums/emergencyAccessStatusType\";\nimport { EmergencyAccessType } from \"@bitwarden/common/enums/emergencyAccessType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EmergencyAccessConfirmRequest } from \"@bitwarden/common/models/request/emergency-access-confirm.request\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n} from \"@bitwarden/common/models/response/emergency-access.response\";\n\nimport { EmergencyAccessAddEditComponent } from \"./emergency-access-add-edit.component\";\nimport { EmergencyAccessConfirmComponent } from \"./emergency-access-confirm.component\";\nimport { EmergencyAccessTakeoverComponent } from \"./emergency-access-takeover.component\";\n\n@Component({\n selector: \"emergency-access\",\n templateUrl: \"emergency-access.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class EmergencyAccessComponent implements OnInit {\n @ViewChild(\"addEdit\", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild(\"takeoverTemplate\", { read: ViewContainerRef, static: true })\n takeoverModalRef: ViewContainerRef;\n @ViewChild(\"confirmTemplate\", { read: ViewContainerRef, static: true })\n confirmModalRef: ViewContainerRef;\n\n loaded = false;\n canAccessPremium: boolean;\n trustedContacts: EmergencyAccessGranteeDetailsResponse[];\n grantedContacts: EmergencyAccessGrantorDetailsResponse[];\n emergencyAccessType = EmergencyAccessType;\n emergencyAccessStatusType = EmergencyAccessStatusType;\n actionPromise: Promise;\n isOrganizationOwner: boolean;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private modalService: ModalService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private userNamePipe: UserNamePipe,\n private logService: LogService,\n private stateService: StateService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n const orgs = await this.organizationService.getAll();\n this.isOrganizationOwner = orgs.some((o) => o.isOwner);\n this.load();\n }\n\n async load() {\n this.trustedContacts = (await this.apiService.getEmergencyAccessTrusted()).data;\n this.grantedContacts = (await this.apiService.getEmergencyAccessGranted()).data;\n this.loaded = true;\n }\n\n async premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n\n async edit(details: EmergencyAccessGranteeDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n EmergencyAccessAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(details);\n comp.emergencyAccessId = details?.id;\n comp.readOnly = !this.canAccessPremium;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onSaved.subscribe(() => {\n modal.close();\n this.load();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onDeleted.subscribe(() => {\n modal.close();\n this.remove(details);\n });\n }\n );\n }\n\n invite() {\n this.edit(null);\n }\n\n async reinvite(contact: EmergencyAccessGranteeDetailsResponse) {\n if (this.actionPromise != null) {\n return;\n }\n this.actionPromise = this.apiService.postEmergencyAccessReinvite(contact.id);\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenReinvited\", contact.email)\n );\n this.actionPromise = null;\n }\n\n async confirm(contact: EmergencyAccessGranteeDetailsResponse) {\n function updateUser() {\n contact.status = EmergencyAccessStatusType.Confirmed;\n }\n\n if (this.actionPromise != null) {\n return;\n }\n\n const autoConfirm = await this.stateService.getAutoConfirmFingerPrints();\n if (autoConfirm == null || !autoConfirm) {\n const [modal] = await this.modalService.openViewRef(\n EmergencyAccessConfirmComponent,\n this.confirmModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(contact);\n comp.emergencyAccessId = contact.id;\n comp.userId = contact?.granteeId;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onConfirmed.subscribe(async () => {\n modal.close();\n\n comp.formPromise = this.doConfirmation(contact);\n await comp.formPromise;\n\n updateUser();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenConfirmed\", this.userNamePipe.transform(contact))\n );\n });\n }\n );\n return;\n }\n\n this.actionPromise = this.doConfirmation(contact);\n await this.actionPromise;\n updateUser();\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenConfirmed\", this.userNamePipe.transform(contact))\n );\n this.actionPromise = null;\n }\n\n async remove(\n details: EmergencyAccessGranteeDetailsResponse | EmergencyAccessGrantorDetailsResponse\n ) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removeUserConfirmation\"),\n this.userNamePipe.transform(details),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteEmergencyAccess(details.id);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedUserId\", this.userNamePipe.transform(details))\n );\n\n if (details instanceof EmergencyAccessGranteeDetailsResponse) {\n this.removeGrantee(details);\n } else {\n this.removeGrantor(details);\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async requestAccess(details: EmergencyAccessGrantorDetailsResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"requestAccessConfirmation\", details.waitTimeDays.toString()),\n this.userNamePipe.transform(details),\n this.i18nService.t(\"requestAccess\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n await this.apiService.postEmergencyAccessInitiate(details.id);\n\n details.status = EmergencyAccessStatusType.RecoveryInitiated;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"requestSent\", this.userNamePipe.transform(details))\n );\n }\n\n async approve(details: EmergencyAccessGranteeDetailsResponse) {\n const type = this.i18nService.t(\n details.type === EmergencyAccessType.View ? \"view\" : \"takeover\"\n );\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"approveAccessConfirmation\", this.userNamePipe.transform(details), type),\n this.userNamePipe.transform(details),\n this.i18nService.t(\"approve\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n await this.apiService.postEmergencyAccessApprove(details.id);\n details.status = EmergencyAccessStatusType.RecoveryApproved;\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"emergencyApproved\", this.userNamePipe.transform(details))\n );\n }\n\n async reject(details: EmergencyAccessGranteeDetailsResponse) {\n await this.apiService.postEmergencyAccessReject(details.id);\n details.status = EmergencyAccessStatusType.Confirmed;\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"emergencyRejected\", this.userNamePipe.transform(details))\n );\n }\n\n async takeover(details: EmergencyAccessGrantorDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n EmergencyAccessTakeoverComponent,\n this.takeoverModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(details);\n comp.email = details.email;\n comp.emergencyAccessId = details != null ? details.id : null;\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onDone.subscribe(() => {\n modal.close();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"passwordResetFor\", this.userNamePipe.transform(details))\n );\n });\n }\n );\n }\n\n private removeGrantee(details: EmergencyAccessGranteeDetailsResponse) {\n const index = this.trustedContacts.indexOf(details);\n if (index > -1) {\n this.trustedContacts.splice(index, 1);\n }\n }\n\n private removeGrantor(details: EmergencyAccessGrantorDetailsResponse) {\n const index = this.grantedContacts.indexOf(details);\n if (index > -1) {\n this.grantedContacts.splice(index, 1);\n }\n }\n\n // Encrypt the master password hash using the grantees public key, and send it to bitwarden for escrow.\n private async doConfirmation(details: EmergencyAccessGranteeDetailsResponse) {\n const encKey = await this.cryptoService.getEncKey();\n const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n try {\n this.logService.debug(\n \"User's fingerprint: \" +\n (await this.cryptoService.getFingerprint(details.granteeId, publicKey.buffer)).join(\"-\")\n );\n } catch {\n // Ignore errors since it's just a debug message\n }\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n const request = new EmergencyAccessConfirmRequest();\n request.key = encryptedKey.encryptedString;\n await this.apiService.postEmergencyAccessConfirm(details.id, request);\n }\n}\n","import { Directive, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n ValidationErrors,\n Validator,\n} from \"@angular/forms\";\nimport { combineLatestWith, Subject, takeUntil } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\n\n@Directive()\nexport class VaultTimeoutInputComponent\n implements ControlValueAccessor, Validator, OnInit, OnDestroy\n{\n get showCustom() {\n return this.form.get(\"vaultTimeout\").value === VaultTimeoutInputComponent.CUSTOM_VALUE;\n }\n\n get exceedsMinimumTimout(): boolean {\n return (\n !this.showCustom || this.customTimeInMinutes() > VaultTimeoutInputComponent.MIN_CUSTOM_MINUTES\n );\n }\n\n static CUSTOM_VALUE = -100;\n static MIN_CUSTOM_MINUTES = 0;\n\n form = this.formBuilder.group({\n vaultTimeout: [null],\n custom: this.formBuilder.group({\n hours: [null],\n minutes: [null],\n }),\n });\n\n @Input() vaultTimeouts: { name: string; value: number }[];\n vaultTimeoutPolicy: Policy;\n vaultTimeoutPolicyHours: number;\n vaultTimeoutPolicyMinutes: number;\n\n private onChange: (vaultTimeout: number) => void;\n private validatorChange: () => void;\n private destroy$ = new Subject();\n\n constructor(\n private formBuilder: FormBuilder,\n private policyService: PolicyService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.MaximumVaultTimeout)\n .pipe(combineLatestWith(this.policyService.policies$), takeUntil(this.destroy$))\n .subscribe(([policyAppliesToActiveUser, policies]) => {\n if (policyAppliesToActiveUser) {\n const vaultTimeoutPolicy = policies.find(\n (policy) => policy.type === PolicyType.MaximumVaultTimeout && policy.enabled\n );\n\n this.vaultTimeoutPolicy = vaultTimeoutPolicy;\n this.applyVaultTimeoutPolicy();\n }\n });\n\n // eslint-disable-next-line rxjs/no-async-subscribe\n this.form.valueChanges.subscribe(async (value) => {\n this.onChange(this.getVaultTimeout(value));\n });\n\n // Assign the previous value to the custom fields\n this.form.get(\"vaultTimeout\").valueChanges.subscribe((value) => {\n if (value !== VaultTimeoutInputComponent.CUSTOM_VALUE) {\n return;\n }\n\n const current = Math.max(this.form.value.vaultTimeout, 0);\n this.form.patchValue({\n custom: {\n hours: Math.floor(current / 60),\n minutes: current % 60,\n },\n });\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngOnChanges() {\n this.vaultTimeouts.push({\n name: this.i18nService.t(\"custom\"),\n value: VaultTimeoutInputComponent.CUSTOM_VALUE,\n });\n }\n\n getVaultTimeout(value: any) {\n if (value.vaultTimeout !== VaultTimeoutInputComponent.CUSTOM_VALUE) {\n return value.vaultTimeout;\n }\n\n return value.custom.hours * 60 + value.custom.minutes;\n }\n\n writeValue(value: number): void {\n if (value == null) {\n return;\n }\n\n if (this.vaultTimeouts.every((p) => p.value !== value)) {\n this.form.setValue({\n vaultTimeout: VaultTimeoutInputComponent.CUSTOM_VALUE,\n custom: {\n hours: Math.floor(value / 60),\n minutes: value % 60,\n },\n });\n return;\n }\n\n this.form.patchValue({\n vaultTimeout: value,\n });\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any): void {\n // Empty\n }\n\n setDisabledState?(isDisabled: boolean): void {\n // Empty\n }\n\n validate(control: AbstractControl): ValidationErrors {\n if (this.vaultTimeoutPolicy && this.vaultTimeoutPolicy?.data?.minutes < control.value) {\n return { policyError: true };\n }\n\n if (!this.exceedsMinimumTimout) {\n return { minTimeoutError: true };\n }\n\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange = fn;\n }\n\n private customTimeInMinutes() {\n return this.form.value.custom.hours * 60 + this.form.value.custom.minutes;\n }\n\n private applyVaultTimeoutPolicy() {\n this.vaultTimeoutPolicyHours = Math.floor(this.vaultTimeoutPolicy.data.minutes / 60);\n this.vaultTimeoutPolicyMinutes = this.vaultTimeoutPolicy.data.minutes % 60;\n\n this.vaultTimeouts = this.vaultTimeouts.filter(\n (t) =>\n t.value <= this.vaultTimeoutPolicy.data.minutes &&\n (t.value > 0 || t.value === VaultTimeoutInputComponent.CUSTOM_VALUE) &&\n t.value != null\n );\n this.validatorChange();\n }\n}\n","\n {{ \"vaultTimeoutPolicyInEffect\" | i18n: vaultTimeoutPolicyHours:vaultTimeoutPolicyMinutes }}\n\n\n
\n
\n \n \n \n \n {{ \"vaultTimeoutDesc\" | i18n }}\n
\n
\n \n
\n
\n \n {{ \"hours\" | i18n }}\n
\n
\n \n {{ \"minutes\" | i18n }}\n
\n
\n\n \n {{ \"vaultCustomTimeoutMinimum\" | i18n }}\n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\nimport { VaultTimeoutInputComponent as VaultTimeoutInputComponentBase } from \"@bitwarden/angular/components/settings/vault-timeout-input.component\";\n\n@Component({\n selector: \"app-vault-timeout-input\",\n templateUrl: \"vault-timeout-input.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: VaultTimeoutInputComponent,\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: VaultTimeoutInputComponent,\n },\n ],\n})\nexport class VaultTimeoutInputComponent extends VaultTimeoutInputComponentBase {}\n","
\n

{{ \"preferences\" | i18n }}

\n
\n

{{ \"preferencesDesc\" | i18n }}

\n
\n
\n
\n \n \n
\n
\n
\n \n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n \n {{ \"languageDesc\" | i18n }}\n
\n
\n
\n
\n
\n \n \n \n \n \n
\n {{ \"faviconDesc\" | i18n }}\n
\n
\n
\n \n \n
\n {{ \"enableFullWidthDesc\" | i18n }}\n
\n
\n
\n
\n \n \n {{ \"themeDesc\" | i18n }}\n
\n
\n
\n \n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { UntypedFormControl } from \"@angular/forms\";\n\nimport { AbstractThemingService } from \"@bitwarden/angular/services/theming/theming.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { ThemeType } from \"@bitwarden/common/enums/themeType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Component({\n selector: \"app-preferences\",\n templateUrl: \"preferences.component.html\",\n})\nexport class PreferencesComponent implements OnInit {\n vaultTimeoutAction = \"lock\";\n enableFavicons: boolean;\n enableFullWidth: boolean;\n theme: ThemeType;\n locale: string;\n vaultTimeouts: { name: string; value: number }[];\n localeOptions: any[];\n themeOptions: any[];\n\n vaultTimeout: UntypedFormControl = new UntypedFormControl(null);\n\n private startingLocale: string;\n private startingTheme: ThemeType;\n\n constructor(\n private stateService: StateService,\n private i18nService: I18nService,\n private vaultTimeoutSettingsService: VaultTimeoutSettingsService,\n private platformUtilsService: PlatformUtilsService,\n private messagingService: MessagingService,\n private themingService: AbstractThemingService\n ) {\n this.vaultTimeouts = [\n { name: i18nService.t(\"oneMinute\"), value: 1 },\n { name: i18nService.t(\"fiveMinutes\"), value: 5 },\n { name: i18nService.t(\"fifteenMinutes\"), value: 15 },\n { name: i18nService.t(\"thirtyMinutes\"), value: 30 },\n { name: i18nService.t(\"oneHour\"), value: 60 },\n { name: i18nService.t(\"fourHours\"), value: 240 },\n { name: i18nService.t(\"onRefresh\"), value: -1 },\n ];\n if (this.platformUtilsService.isDev()) {\n this.vaultTimeouts.push({ name: i18nService.t(\"never\"), value: null });\n }\n\n const localeOptions: any[] = [];\n i18nService.supportedTranslationLocales.forEach((locale) => {\n let name = locale;\n if (i18nService.localeNames.has(locale)) {\n name += \" - \" + i18nService.localeNames.get(locale);\n }\n localeOptions.push({ name: name, value: locale });\n });\n localeOptions.sort(Utils.getSortFunction(i18nService, \"name\"));\n localeOptions.splice(0, 0, { name: i18nService.t(\"default\"), value: null });\n this.localeOptions = localeOptions;\n this.themeOptions = [\n { name: i18nService.t(\"themeLight\"), value: ThemeType.Light },\n { name: i18nService.t(\"themeDark\"), value: ThemeType.Dark },\n { name: i18nService.t(\"themeSystem\"), value: ThemeType.System },\n ];\n }\n\n async ngOnInit() {\n this.vaultTimeout.setValue(await this.vaultTimeoutSettingsService.getVaultTimeout());\n this.vaultTimeoutAction = await this.stateService.getVaultTimeoutAction();\n this.enableFavicons = !(await this.stateService.getDisableFavicon());\n this.enableFullWidth = await this.stateService.getEnableFullWidth();\n\n this.locale = (await this.stateService.getLocale()) ?? null;\n this.startingLocale = this.locale;\n\n this.theme = await this.stateService.getTheme();\n this.startingTheme = this.theme;\n }\n\n async submit() {\n if (!this.vaultTimeout.valid) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"vaultTimeoutRangeError\")\n );\n return;\n }\n\n await this.vaultTimeoutSettingsService.setVaultTimeoutOptions(\n this.vaultTimeout.value,\n this.vaultTimeoutAction\n );\n await this.stateService.setDisableFavicon(!this.enableFavicons);\n await this.stateService.setEnableFullWidth(this.enableFullWidth);\n this.messagingService.send(\"setFullWidth\");\n if (this.theme !== this.startingTheme) {\n await this.themingService.updateConfiguredTheme(this.theme);\n this.startingTheme = this.theme;\n }\n await this.stateService.setLocale(this.locale);\n if (this.locale !== this.startingLocale) {\n window.location.reload();\n } else {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"preferencesUpdated\")\n );\n }\n }\n\n async vaultTimeoutActionChanged(newValue: string) {\n if (newValue === \"logOut\") {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"vaultTimeoutLogOutConfirmation\"),\n this.i18nService.t(\"vaultTimeoutLogOutConfirmationTitle\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n if (!confirmed) {\n this.vaultTimeoutAction = \"lock\";\n return;\n }\n }\n this.vaultTimeoutAction = newValue;\n }\n}\n","import { Folder } from \"../domain/folder\";\n\nimport { FolderRequest } from \"./folder.request\";\n\nexport class FolderWithIdRequest extends FolderRequest {\n id: string;\n\n constructor(folder: Folder) {\n super(folder);\n this.id = folder.id;\n }\n}\n","import { Send } from \"../domain/send\";\n\nimport { SendRequest } from \"./send.request\";\n\nexport class SendWithIdRequest extends SendRequest {\n id: string;\n\n constructor(send: Send) {\n super(send);\n this.id = send.id;\n }\n}\n","import { CipherWithIdRequest } from \"./cipher-with-id.request\";\nimport { FolderWithIdRequest } from \"./folder-with-id.request\";\nimport { SendWithIdRequest } from \"./send-with-id.request\";\n\nexport class UpdateKeyRequest {\n ciphers: CipherWithIdRequest[] = [];\n folders: FolderWithIdRequest[] = [];\n sends: SendWithIdRequest[] = [];\n masterPasswordHash: string;\n privateKey: string;\n key: string;\n}\n","
\n

{{ \"changeMasterPassword\" | i18n }}

\n
\n\n{{ \"loggedOutWarning\" | i18n }}\n\n\n\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n \n \n \n \n \n
\n
\n \n
\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"@bitwarden/angular/components/change-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SendService } from \"@bitwarden/common/abstractions/send.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { EmergencyAccessStatusType } from \"@bitwarden/common/enums/emergencyAccessStatusType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { CipherWithIdRequest } from \"@bitwarden/common/models/request/cipher-with-id.request\";\nimport { EmergencyAccessUpdateRequest } from \"@bitwarden/common/models/request/emergency-access-update.request\";\nimport { FolderWithIdRequest } from \"@bitwarden/common/models/request/folder-with-id.request\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/models/request/organization-user-reset-password-enrollment.request\";\nimport { PasswordRequest } from \"@bitwarden/common/models/request/password.request\";\nimport { SendWithIdRequest } from \"@bitwarden/common/models/request/send-with-id.request\";\nimport { UpdateKeyRequest } from \"@bitwarden/common/models/request/update-key.request\";\n\n@Component({\n selector: \"app-change-password\",\n templateUrl: \"change-password.component.html\",\n})\nexport class ChangePasswordComponent extends BaseChangePasswordComponent {\n rotateEncKey = false;\n currentMasterPassword: string;\n masterPasswordHint: string;\n\n constructor(\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n private folderService: FolderService,\n private cipherService: CipherService,\n private syncService: SyncService,\n private apiService: ApiService,\n private sendService: SendService,\n private organizationService: OrganizationService,\n private keyConnectorService: KeyConnectorService,\n private router: Router,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n if (await this.keyConnectorService.getUsesKeyConnector()) {\n this.router.navigate([\"/settings/security/two-factor\"]);\n }\n\n this.masterPasswordHint = (await this.apiService.getProfile()).masterPasswordHint;\n await super.ngOnInit();\n }\n\n async rotateEncKeyClicked() {\n if (this.rotateEncKey) {\n const ciphers = await this.cipherService.getAllDecrypted();\n let hasOldAttachments = false;\n if (ciphers != null) {\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId == null && ciphers[i].hasOldAttachments) {\n hasOldAttachments = true;\n break;\n }\n }\n }\n\n if (hasOldAttachments) {\n const learnMore = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"oldAttachmentsNeedFixDesc\"),\n null,\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"close\"),\n \"warning\"\n );\n if (learnMore) {\n this.platformUtilsService.launchUri(\n \"https://bitwarden.com/help/attachments/#add-storage-space\"\n );\n }\n this.rotateEncKey = false;\n return;\n }\n\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"updateEncryptionKeyWarning\") +\n \" \" +\n this.i18nService.t(\"updateEncryptionKeyExportWarning\") +\n \" \" +\n this.i18nService.t(\"rotateEncKeyConfirmation\"),\n this.i18nService.t(\"rotateEncKeyTitle\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n this.rotateEncKey = false;\n }\n }\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"updateKey\"));\n return;\n }\n\n await super.submit();\n }\n\n async setupSubmitActions() {\n if (this.currentMasterPassword == null || this.currentMasterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordRequired\")\n );\n return false;\n }\n\n if (this.rotateEncKey) {\n await this.syncService.fullSync(true);\n }\n\n return super.setupSubmitActions();\n }\n\n async performSubmitActions(\n newMasterPasswordHash: string,\n newKey: SymmetricCryptoKey,\n newEncKey: [SymmetricCryptoKey, EncString]\n ) {\n const request = new PasswordRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(\n this.currentMasterPassword,\n null\n );\n request.masterPasswordHint = this.masterPasswordHint;\n request.newMasterPasswordHash = newMasterPasswordHash;\n request.key = newEncKey[1].encryptedString;\n\n try {\n if (this.rotateEncKey) {\n this.formPromise = this.apiService.postPassword(request).then(() => {\n return this.updateKey(newKey, request.newMasterPasswordHash);\n });\n } else {\n this.formPromise = this.apiService.postPassword(request);\n }\n\n await this.formPromise;\n\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"masterPasswordChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n }\n\n private async updateKey(key: SymmetricCryptoKey, masterPasswordHash: string) {\n const encKey = await this.cryptoService.makeEncKey(key);\n const privateKey = await this.cryptoService.getPrivateKey();\n let encPrivateKey: EncString = null;\n if (privateKey != null) {\n encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n }\n const request = new UpdateKeyRequest();\n request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHash = masterPasswordHash;\n\n const folders = await firstValueFrom(this.folderService.folderViews$);\n for (let i = 0; i < folders.length; i++) {\n if (folders[i].id == null) {\n continue;\n }\n const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n request.folders.push(new FolderWithIdRequest(folder));\n }\n\n const ciphers = await this.cipherService.getAllDecrypted();\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId != null) {\n continue;\n }\n\n const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n request.ciphers.push(new CipherWithIdRequest(cipher));\n }\n\n const sends = await this.sendService.getAll();\n await Promise.all(\n sends.map(async (send) => {\n const cryptoKey = await this.cryptoService.decryptToBytes(send.key, null);\n send.key = (await this.cryptoService.encrypt(cryptoKey, encKey[0])) ?? send.key;\n request.sends.push(new SendWithIdRequest(send));\n })\n );\n\n await this.apiService.postAccountKey(request);\n\n await this.updateEmergencyAccesses(encKey[0]);\n\n await this.updateAllResetPasswordKeys(encKey[0], masterPasswordHash);\n }\n\n private async updateEmergencyAccesses(encKey: SymmetricCryptoKey) {\n const emergencyAccess = await this.apiService.getEmergencyAccessTrusted();\n const allowedStatuses = [\n EmergencyAccessStatusType.Confirmed,\n EmergencyAccessStatusType.RecoveryInitiated,\n EmergencyAccessStatusType.RecoveryApproved,\n ];\n\n const filteredAccesses = emergencyAccess.data.filter((d) => allowedStatuses.includes(d.status));\n\n for (const details of filteredAccesses) {\n const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n const updateRequest = new EmergencyAccessUpdateRequest();\n updateRequest.type = details.type;\n updateRequest.waitTimeDays = details.waitTimeDays;\n updateRequest.keyEncrypted = encryptedKey.encryptedString;\n\n await this.apiService.putEmergencyAccess(details.id, updateRequest);\n }\n }\n\n private async updateAllResetPasswordKeys(encKey: SymmetricCryptoKey, masterPasswordHash: string) {\n const orgs = await this.organizationService.getAll();\n\n for (const org of orgs) {\n // If not already enrolled, skip\n if (!org.resetPasswordEnrolled) {\n continue;\n }\n\n // Retrieve public key\n const response = await this.organizationApiService.getKeys(org.id);\n const publicKey = Utils.fromB64ToArray(response?.publicKey);\n\n // Re-enroll - encrpyt user's encKey.key with organization public key\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n // Create/Execute request\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.masterPasswordHash = masterPasswordHash;\n request.resetPasswordKey = encryptedKey.encryptedString;\n\n await this.apiService.putOrganizationUserResetPasswordEnrollment(org.id, org.userId, request);\n }\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { PasswordRequest } from \"./password.request\";\n\nexport class KdfRequest extends PasswordRequest {\n kdf: KdfType;\n kdfIterations: number;\n}\n","
\n

{{ \"encKeySettings\" | i18n }}

\n
\n{{ \"loggedOutWarning\" | i18n }}\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
\n

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

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

{{ \"apiKey\" | i18n }}

\n\n

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

\n\n\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\nimport { ApiKeyComponent } from \"./api-key.component\";\n\n@Component({\n selector: \"app-security-keys\",\n templateUrl: \"security-keys.component.html\",\n})\nexport class SecurityKeysComponent implements OnInit {\n @ViewChild(\"viewUserApiKeyTemplate\", { read: ViewContainerRef, static: true })\n viewUserApiKeyModalRef: ViewContainerRef;\n @ViewChild(\"rotateUserApiKeyTemplate\", { read: ViewContainerRef, static: true })\n rotateUserApiKeyModalRef: ViewContainerRef;\n\n showChangeKdf = true;\n\n constructor(\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private modalService: ModalService,\n private apiService: ApiService\n ) {}\n\n async ngOnInit() {\n this.showChangeKdf = !(await this.keyConnectorService.getUsesKeyConnector());\n }\n\n async viewUserApiKey() {\n const entityId = await this.stateService.getUserId();\n await this.modalService.openViewRef(ApiKeyComponent, this.viewUserApiKeyModalRef, (comp) => {\n comp.keyType = \"user\";\n comp.entityId = entityId;\n comp.postKey = this.apiService.postUserApiKey.bind(this.apiService);\n comp.scope = \"api\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"userApiKeyWarning\";\n comp.apiKeyDescription = \"userApiKeyDesc\";\n });\n }\n\n async rotateUserApiKey() {\n const entityId = await this.stateService.getUserId();\n await this.modalService.openViewRef(ApiKeyComponent, this.rotateUserApiKeyModalRef, (comp) => {\n comp.keyType = \"user\";\n comp.isRotation = true;\n comp.entityId = entityId;\n comp.postKey = this.apiService.postUserRotateApiKey.bind(this.apiService);\n comp.scope = \"api\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"userApiKeyWarning\";\n comp.apiKeyDescription = \"apiKeyRotateDesc\";\n });\n }\n}\n","\n\n","import { Component } from \"@angular/core\";\n\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\n\n@Component({\n selector: \"app-security\",\n templateUrl: \"security.component.html\",\n})\nexport class SecurityComponent {\n showChangePassword = true;\n\n constructor(private keyConnectorService: KeyConnectorService) {}\n\n async ngOnInit() {\n this.showChangePassword = !(await this.keyConnectorService.getUsesKeyConnector());\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { ChangePasswordComponent } from \"./change-password.component\";\nimport { SecurityKeysComponent } from \"./security-keys.component\";\nimport { SecurityComponent } from \"./security.component\";\nimport { TwoFactorSetupComponent } from \"./two-factor-setup.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: SecurityComponent,\n data: { titleId: \"security\" },\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"change-password\" },\n {\n path: \"change-password\",\n component: ChangePasswordComponent,\n data: { titleId: \"masterPassword\" },\n },\n {\n path: \"two-factor\",\n component: TwoFactorSetupComponent,\n data: { titleId: \"twoStepLogin\" },\n },\n {\n path: \"security-keys\",\n component: SecurityKeysComponent,\n data: { titleId: \"keys\" },\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class SecurityRoutingModule {}\n","
\n
\n
\n
\n
{{ \"accountSettings\" | i18n }}
\n \n
\n
\n
\n \n
\n
\n
\n","import { Component, NgZone, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\n\nimport { StateService } from \"../core\";\n\nconst BroadcasterSubscriptionId = \"SettingsComponent\";\n\n@Component({\n selector: \"app-settings\",\n templateUrl: \"settings.component.html\",\n})\nexport class SettingsComponent implements OnInit, OnDestroy {\n premium: boolean;\n selfHosted: boolean;\n hasFamilySponsorshipAvailable: boolean;\n hideSubscription: boolean;\n\n constructor(\n private tokenService: TokenService,\n private broadcasterService: BroadcasterService,\n private ngZone: NgZone,\n private platformUtilsService: PlatformUtilsService,\n private organizationService: OrganizationService,\n private stateService: StateService,\n private apiService: ApiService\n ) {}\n\n async ngOnInit() {\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"purchasedPremium\":\n await this.load();\n break;\n default:\n }\n });\n });\n\n this.selfHosted = await this.platformUtilsService.isSelfHost();\n await this.load();\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async load() {\n this.premium = await this.stateService.getHasPremiumPersonally();\n this.hasFamilySponsorshipAvailable = await this.organizationService.canManageSponsorships();\n const hasPremiumFromOrg = await this.stateService.getHasPremiumFromOrganization();\n let billing = null;\n if (!this.selfHosted) {\n billing = await this.apiService.getUserBillingHistory();\n }\n this.hideSubscription =\n !this.premium && hasPremiumFromOrg && (this.selfHosted || billing?.hasNoHistory);\n }\n}\n","import { AbstractControl, AsyncValidatorFn, ValidationErrors } from \"@angular/forms\";\n\nexport function notAllowedValueAsync(\n valueGetter: () => Promise,\n caseInsensitive = false\n): AsyncValidatorFn {\n return async (control: AbstractControl): Promise => {\n let notAllowedValue = await valueGetter();\n let controlValue = control.value;\n if (caseInsensitive) {\n notAllowedValue = notAllowedValue.toLowerCase();\n controlValue = controlValue.toLowerCase();\n }\n\n if (controlValue === notAllowedValue) {\n return {\n notAllowedValue: true,\n };\n }\n };\n}\n","\n {{ sponsoringOrg.familySponsorshipFriendlyName }}\n\n{{ sponsoringOrg.name }}\n\n {{ statusMessage }}\n\n\n
\n \n \n \n
\n \n \n {{ \"resendEmail\" | i18n }}\n \n \n \n {{ \"remove\" | i18n }}\n \n
\n
\n\n","import { formatDate } from \"@angular/common\";\nimport { Component, EventEmitter, Input, Output, OnInit } from \"@angular/core\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"[sponsoring-org-row]\",\n templateUrl: \"sponsoring-org-row.component.html\",\n})\nexport class SponsoringOrgRowComponent implements OnInit {\n @Input() sponsoringOrg: Organization = null;\n @Input() isSelfHosted = false;\n\n @Output() sponsorshipRemoved = new EventEmitter();\n\n statusMessage = \"loading\";\n statusClass: \"text-success\" | \"text-danger\" = \"text-success\";\n\n revokeSponsorshipPromise: Promise;\n resendEmailPromise: Promise;\n\n private locale = \"\";\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private logService: LogService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n async ngOnInit() {\n this.locale = await firstValueFrom(this.i18nService.locale$);\n\n this.setStatus(\n this.isSelfHosted,\n this.sponsoringOrg.familySponsorshipToDelete,\n this.sponsoringOrg.familySponsorshipValidUntil,\n this.sponsoringOrg.familySponsorshipLastSyncDate\n );\n }\n\n async revokeSponsorship() {\n try {\n this.revokeSponsorshipPromise = this.doRevokeSponsorship();\n await this.revokeSponsorshipPromise;\n } catch (e) {\n this.logService.error(e);\n }\n\n this.revokeSponsorshipPromise = null;\n }\n\n async resendEmail() {\n this.resendEmailPromise = this.apiService.postResendSponsorshipOffer(this.sponsoringOrg.id);\n await this.resendEmailPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"emailSent\"));\n this.resendEmailPromise = null;\n }\n\n get isSentAwaitingSync() {\n return this.isSelfHosted && !this.sponsoringOrg.familySponsorshipLastSyncDate;\n }\n\n private async doRevokeSponsorship() {\n const isConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"revokeSponsorshipConfirmation\"),\n `${this.i18nService.t(\"remove\")} ${this.sponsoringOrg.familySponsorshipFriendlyName}?`,\n this.i18nService.t(\"remove\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n\n if (!isConfirmed) {\n return;\n }\n\n await this.apiService.deleteRevokeSponsorship(this.sponsoringOrg.id);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"reclaimedFreePlan\"));\n this.sponsorshipRemoved.emit();\n }\n\n private setStatus(\n selfHosted: boolean,\n toDelete?: boolean,\n validUntil?: Date,\n lastSyncDate?: Date\n ) {\n /*\n * Possible Statuses:\n * Requested (self-hosted only)\n * Sent\n * Active\n * RequestRevoke\n * RevokeWhenExpired\n */\n\n if (toDelete && validUntil) {\n // They want to delete but there is a valid until date which means there is an active sponsorship\n this.statusMessage = this.i18nService.t(\n \"revokeWhenExpired\",\n formatDate(validUntil, \"MM/dd/yyyy\", this.locale)\n );\n this.statusClass = \"text-danger\";\n } else if (toDelete) {\n // They want to delete and we don't have a valid until date so we can\n // this should only happen on a self-hosted install\n this.statusMessage = this.i18nService.t(\"requestRemoved\");\n this.statusClass = \"text-danger\";\n } else if (validUntil) {\n // They don't want to delete and they have a valid until date\n // that means they are actively sponsoring someone\n this.statusMessage = this.i18nService.t(\"active\");\n this.statusClass = \"text-success\";\n } else if (selfHosted && lastSyncDate) {\n // We are on a self-hosted install and it has been synced but we have not gotten\n // a valid until date so we can't know if they are actively sponsoring someone\n this.statusMessage = this.i18nService.t(\"sent\");\n this.statusClass = \"text-success\";\n } else if (!selfHosted) {\n // We are in cloud and all other status checks have been false therefore we have\n // sent the request but it hasn't been accepted yet\n this.statusMessage = this.i18nService.t(\"sent\");\n this.statusClass = \"text-success\";\n } else {\n // We are on a self-hosted install and we have not synced yet\n this.statusMessage = this.i18nService.t(\"requested\");\n this.statusClass = \"text-success\";\n }\n }\n}\n","
\n

{{ \"sponsoredFamilies\" | i18n }}

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

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

\n
\n {{ \"sponsoredFamiliesInclude\" | i18n }}:\n
    \n
  • {{ \"sponsoredFamiliesPremiumAccess\" | i18n }}
  • \n
  • {{ \"sponsoredFamiliesSharedCollections\" | i18n }}
  • \n
\n
\n \n
\n \n \n \n \n \n
\n
\n \n \n \n \n {{ \"cannotSponsorSelf\" | i18n }}\n \n \n \n {{ \"invalidEmail\" | i18n }}\n \n
\n
\n \n
\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"recipient\" | i18n }}{{ \"sponsoringOrg\" | i18n }}{{ \"status\" | i18n }}
\n
\n {{ \"sponsoredFamiliesLeaveCopy\" | i18n }}\n
\n\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { FormBuilder, FormControl, FormGroup, Validators } from \"@angular/forms\";\nimport { map, Observable, Subject, takeUntil } from \"rxjs\";\n\nimport { notAllowedValueAsync } from \"@bitwarden/angular/validators/notAllowedValueAsync.validator\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { PlanSponsorshipType } from \"@bitwarden/common/enums/planSponsorshipType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\ninterface RequestSponsorshipForm {\n selectedSponsorshipOrgId: FormControl;\n sponsorshipEmail: FormControl;\n}\n\n@Component({\n selector: \"app-sponsored-families\",\n templateUrl: \"sponsored-families.component.html\",\n})\nexport class SponsoredFamiliesComponent implements OnInit, OnDestroy {\n loading = false;\n\n availableSponsorshipOrgs$: Observable;\n activeSponsorshipOrgs$: Observable;\n anyOrgsAvailable$: Observable;\n anyActiveSponsorships$: Observable;\n\n // Conditional display properties\n formPromise: Promise;\n\n sponsorshipForm: FormGroup;\n\n private _destroy = new Subject();\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private syncService: SyncService,\n private organizationService: OrganizationService,\n private formBuilder: FormBuilder,\n private stateService: StateService\n ) {\n this.sponsorshipForm = this.formBuilder.group({\n selectedSponsorshipOrgId: new FormControl(\"\", {\n validators: [Validators.required],\n }),\n sponsorshipEmail: new FormControl(\"\", {\n validators: [Validators.email],\n asyncValidators: [\n notAllowedValueAsync(async () => await this.stateService.getEmail(), true),\n ],\n updateOn: \"blur\",\n }),\n });\n }\n\n async ngOnInit() {\n this.availableSponsorshipOrgs$ = this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter((o) => o.familySponsorshipAvailable))\n );\n\n this.availableSponsorshipOrgs$.pipe(takeUntil(this._destroy)).subscribe((orgs) => {\n if (orgs.length === 1) {\n this.sponsorshipForm.patchValue({\n selectedSponsorshipOrgId: orgs[0].id,\n });\n }\n });\n\n this.anyOrgsAvailable$ = this.availableSponsorshipOrgs$.pipe(map((orgs) => orgs.length > 0));\n\n this.activeSponsorshipOrgs$ = this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter((o) => o.familySponsorshipFriendlyName !== null))\n );\n\n this.anyActiveSponsorships$ = this.activeSponsorshipOrgs$.pipe(map((orgs) => orgs.length > 0));\n\n this.loading = false;\n }\n\n ngOnDestroy(): void {\n this._destroy.next();\n this._destroy.complete();\n }\n\n async submit() {\n this.formPromise = this.apiService.postCreateSponsorship(\n this.sponsorshipForm.value.selectedSponsorshipOrgId,\n {\n sponsoredEmail: this.sponsorshipForm.value.sponsorshipEmail,\n planSponsorshipType: PlanSponsorshipType.FamiliesForEnterprise,\n friendlyName: this.sponsorshipForm.value.sponsorshipEmail,\n }\n );\n\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"sponsorshipCreated\"));\n this.formPromise = null;\n this.resetForm();\n await this.forceReload();\n }\n\n async forceReload() {\n this.loading = true;\n await this.syncService.fullSync(true);\n this.loading = false;\n }\n\n get sponsorshipEmailControl() {\n return this.sponsorshipForm.controls.sponsorshipEmail;\n }\n\n private async resetForm() {\n this.sponsorshipForm.reset();\n }\n\n get isSelfHosted(): boolean {\n return this.platformUtilsService.isSelfHost();\n }\n}\n","
\n

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

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

{{ \"subscription\" | i18n }}

\n
\n
\n

{{ \"goPremium\" | i18n }}

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

{{ \"premiumUpgradeUnlockFeatures\" | i18n }}

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

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

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

{{ \"uploadLicenseFilePremium\" | i18n }}

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

{{ \"addons\" | i18n }}

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

{{ \"summary\" | i18n }}

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

{{ \"paymentInformation\" | i18n }}

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

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

\n
\n {{ \"paymentChargedAnnually\" | i18n }}\n \n
\n","import { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\n\nimport { PaymentComponent } from \"./payment.component\";\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\n selector: \"app-premium\",\n templateUrl: \"premium.component.html\",\n})\nexport class PremiumComponent implements OnInit {\n @ViewChild(PaymentComponent) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent) taxInfoComponent: TaxInfoComponent;\n\n canAccessPremium = false;\n selfHosted = false;\n premiumPrice = 10;\n storageGbPrice = 4;\n additionalStorage = 0;\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService,\n private router: Router,\n private messagingService: MessagingService,\n private syncService: SyncService,\n private logService: LogService,\n private stateService: StateService\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n const premiumPersonally = await this.stateService.getHasPremiumPersonally();\n if (premiumPersonally) {\n this.router.navigate([\"/settings/subscription/user-subscription\"]);\n return;\n }\n }\n\n async submit() {\n let files: FileList = null;\n if (this.selfHosted) {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n }\n\n try {\n if (this.selfHosted) {\n if (!this.tokenService.getEmailVerified()) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"verifyEmailFirst\")\n );\n return;\n }\n\n const fd = new FormData();\n fd.append(\"license\", files[0]);\n this.formPromise = this.apiService.postAccountLicense(fd).then(() => {\n return this.finalizePremium();\n });\n } else {\n this.formPromise = this.paymentComponent\n .createPaymentToken()\n .then((result) => {\n const fd = new FormData();\n fd.append(\"paymentMethodType\", result[1].toString());\n if (result[0] != null) {\n fd.append(\"paymentToken\", result[0]);\n }\n fd.append(\"additionalStorageGb\", (this.additionalStorage || 0).toString());\n fd.append(\"country\", this.taxInfoComponent.taxInfo.country);\n fd.append(\"postalCode\", this.taxInfoComponent.taxInfo.postalCode);\n return this.apiService.postPremium(fd);\n })\n .then((paymentResponse) => {\n if (!paymentResponse.success && paymentResponse.paymentIntentClientSecret != null) {\n return this.paymentComponent.handleStripeCardPayment(\n paymentResponse.paymentIntentClientSecret,\n () => this.finalizePremium()\n );\n } else {\n return this.finalizePremium();\n }\n });\n }\n await this.formPromise;\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async finalizePremium() {\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"premiumUpdated\"));\n this.messagingService.send(\"purchasedPremium\");\n this.router.navigate([\"/settings/subscription/user-subscription\"]);\n }\n\n get additionalStorageTotal(): number {\n return this.storageGbPrice * Math.abs(this.additionalStorage || 0);\n }\n\n get subtotal(): number {\n return this.premiumPrice + this.additionalStorageTotal;\n }\n\n get taxCharges(): number {\n return this.taxInfoComponent != null && this.taxInfoComponent.taxRate != null\n ? (this.taxInfoComponent.taxRate / 100) * this.subtotal\n : 0;\n }\n\n get total(): number {\n return this.subtotal + this.taxCharges || 0;\n }\n}\n","\n\n","import { Component } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Component({\n selector: \"app-subscription\",\n templateUrl: \"subscription.component.html\",\n})\nexport class SubscriptionComponent {\n hasPremium: boolean;\n selfHosted: boolean;\n\n constructor(\n private stateService: StateService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n async ngOnInit() {\n this.hasPremium = await this.stateService.getHasPremiumPersonally();\n this.selfHosted = this.platformUtilsService.isSelfHost();\n }\n\n get subscriptionRoute(): string {\n return this.hasPremium ? \"user-subscription\" : \"premium\";\n }\n}\n","\n

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

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

{{ \"subscriptionPendingCanceled\" | i18n }}

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

{{ \"updateLicense\" | i18n }}

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

{{ \"storage\" | i18n }}

\n

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

\n
\n \n {{ storagePercentage / 100 | percent }}\n
\n \n \n
\n
\n \n \n {{ \"removeStorage\" | i18n }}\n \n
\n \n
\n
\n
\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SubscriptionResponse } from \"@bitwarden/common/models/response/subscription.response\";\n\n@Component({\n selector: \"app-user-subscription\",\n templateUrl: \"user-subscription.component.html\",\n})\nexport class UserSubscriptionComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n adjustStorageAdd = true;\n showAdjustStorage = false;\n showUpdateLicense = false;\n sub: SubscriptionResponse;\n selfHosted = false;\n\n cancelPromise: Promise;\n reinstatePromise: Promise;\n\n constructor(\n private stateService: StateService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private router: Router,\n private logService: LogService,\n private fileDownloadService: FileDownloadService\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n await this.load();\n this.firstLoaded = true;\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n\n if (this.stateService.getHasPremiumPersonally()) {\n this.loading = true;\n this.sub = await this.apiService.getUserSubscription();\n } else {\n this.router.navigate([\"/settings/subscription/premium\"]);\n return;\n }\n\n this.loading = false;\n }\n\n async reinstate() {\n if (this.loading) {\n return;\n }\n\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"manageSubscriptionFromStore\"),\n this.i18nService.t(\"cancelSubscription\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"reinstateConfirmation\"),\n this.i18nService.t(\"reinstateSubscription\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"cancel\")\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.reinstatePromise = this.apiService.postReinstatePremium();\n await this.reinstatePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"reinstated\"));\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async cancel() {\n if (this.loading) {\n return;\n }\n\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"manageSubscriptionFromStore\"),\n this.i18nService.t(\"cancelSubscription\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"cancelConfirmation\"),\n this.i18nService.t(\"cancelSubscription\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.cancelPromise = this.apiService.postCancelPremium();\n await this.cancelPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"canceledSubscription\")\n );\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n downloadLicense() {\n if (this.loading) {\n return;\n }\n\n const licenseString = JSON.stringify(this.sub.license, null, 2);\n this.fileDownloadService.download({\n fileName: \"bitwarden_premium_license.json\",\n blobData: licenseString,\n });\n }\n\n updateLicense() {\n if (this.loading) {\n return;\n }\n this.showUpdateLicense = true;\n }\n\n closeUpdateLicense(load: boolean) {\n this.showUpdateLicense = false;\n if (load) {\n this.load();\n }\n }\n\n adjustStorage(add: boolean) {\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"cannotPerformInAppPurchase\"),\n this.i18nService.t(add ? \"addStorage\" : \"removeStorage\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n this.adjustStorageAdd = add;\n this.showAdjustStorage = true;\n }\n\n closeStorage(load: boolean) {\n this.showAdjustStorage = false;\n if (load) {\n this.load();\n }\n }\n\n get subscriptionMarkedForCancel() {\n return (\n this.subscription != null && !this.subscription.cancelled && this.subscription.cancelAtEndDate\n );\n }\n\n get subscription() {\n return this.sub != null ? this.sub.subscription : null;\n }\n\n get nextInvoice() {\n return this.sub != null ? this.sub.upcomingInvoice : null;\n }\n\n get storagePercentage() {\n return this.sub != null && this.sub.maxStorageGb\n ? +(100 * (this.sub.storageGb / this.sub.maxStorageGb)).toFixed(2)\n : 0;\n }\n\n get storageProgressWidth() {\n return this.storagePercentage < 5 ? 5 : 0;\n }\n\n get usingInAppPurchase() {\n return this.sub != null ? this.sub.usingInAppPurchase : false;\n }\n\n get title(): string {\n return this.i18nService.t(this.selfHosted ? \"subscription\" : \"premiumMembership\");\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { BillingHistoryViewComponent } from \"./billing-history-view.component\";\nimport { PaymentMethodComponent } from \"./payment-method.component\";\nimport { PremiumComponent } from \"./premium.component\";\nimport { SubscriptionComponent } from \"./subscription.component\";\nimport { UserSubscriptionComponent } from \"./user-subscription.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: SubscriptionComponent,\n data: { titleId: \"subscription\" },\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"premium\" },\n {\n path: \"user-subscription\",\n component: UserSubscriptionComponent,\n data: { titleId: \"premiumMembership\" },\n },\n {\n path: \"premium\",\n component: PremiumComponent,\n data: { titleId: \"goPremium\" },\n },\n {\n path: \"payment-method\",\n component: PaymentMethodComponent,\n data: { titleId: \"paymentMethod\" },\n },\n {\n path: \"billing-history\",\n component: BillingHistoryViewComponent,\n data: { titleId: \"billingHistory\" },\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class SubscriptionRoutingModule {}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UsernameGenerationService } from \"@bitwarden/common/abstractions/usernameGeneration.service\";\nimport { PasswordGeneratorPolicyOptions } from \"@bitwarden/common/models/domain/password-generator-policy-options\";\n\n@Directive()\nexport class GeneratorComponent implements OnInit {\n @Input() comingFromAddEdit = false;\n @Input() type: string;\n @Output() onSelected = new EventEmitter();\n\n usernameGeneratingPromise: Promise;\n typeOptions: any[];\n passTypeOptions: any[];\n usernameTypeOptions: any[];\n subaddressOptions: any[];\n catchallOptions: any[];\n forwardOptions: any[];\n usernameOptions: any = {};\n passwordOptions: any = {};\n username = \"-\";\n password = \"-\";\n showOptions = false;\n avoidAmbiguous = false;\n enforcedPasswordPolicyOptions: PasswordGeneratorPolicyOptions;\n usernameWebsite: string = null;\n\n constructor(\n protected passwordGenerationService: PasswordGenerationService,\n protected usernameGenerationService: UsernameGenerationService,\n protected platformUtilsService: PlatformUtilsService,\n protected stateService: StateService,\n protected i18nService: I18nService,\n protected logService: LogService,\n protected route: ActivatedRoute,\n private win: Window\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"password\"), value: \"password\" },\n { name: i18nService.t(\"username\"), value: \"username\" },\n ];\n this.passTypeOptions = [\n { name: i18nService.t(\"password\"), value: \"password\" },\n { name: i18nService.t(\"passphrase\"), value: \"passphrase\" },\n ];\n this.usernameTypeOptions = [\n {\n name: i18nService.t(\"plusAddressedEmail\"),\n value: \"subaddress\",\n desc: i18nService.t(\"plusAddressedEmailDesc\"),\n },\n {\n name: i18nService.t(\"catchallEmail\"),\n value: \"catchall\",\n desc: i18nService.t(\"catchallEmailDesc\"),\n },\n {\n name: i18nService.t(\"forwardedEmail\"),\n value: \"forwarded\",\n desc: i18nService.t(\"forwardedEmailDesc\"),\n },\n { name: i18nService.t(\"randomWord\"), value: \"word\" },\n ];\n this.subaddressOptions = [{ name: i18nService.t(\"random\"), value: \"random\" }];\n this.catchallOptions = [{ name: i18nService.t(\"random\"), value: \"random\" }];\n this.forwardOptions = [\n { name: \"SimpleLogin\", value: \"simplelogin\" },\n { name: \"AnonAddy\", value: \"anonaddy\" },\n { name: \"Firefox Relay\", value: \"firefoxrelay\" },\n { name: \"Fastmail\", value: \"fastmail\" },\n { name: \"DuckDuckGo\", value: \"duckduckgo\" },\n ];\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n const passwordOptionsResponse = await this.passwordGenerationService.getOptions();\n this.passwordOptions = passwordOptionsResponse[0];\n this.enforcedPasswordPolicyOptions = passwordOptionsResponse[1];\n this.avoidAmbiguous = !this.passwordOptions.ambiguous;\n this.passwordOptions.type =\n this.passwordOptions.type === \"passphrase\" ? \"passphrase\" : \"password\";\n\n this.usernameOptions = await this.usernameGenerationService.getOptions();\n if (this.usernameOptions.type == null) {\n this.usernameOptions.type = \"word\";\n }\n if (\n this.usernameOptions.subaddressEmail == null ||\n this.usernameOptions.subaddressEmail === \"\"\n ) {\n this.usernameOptions.subaddressEmail = await this.stateService.getEmail();\n }\n if (this.usernameWebsite == null) {\n this.usernameOptions.subaddressType = this.usernameOptions.catchallType = \"random\";\n } else {\n this.usernameOptions.website = this.usernameWebsite;\n const websiteOption = { name: this.i18nService.t(\"websiteName\"), value: \"website-name\" };\n this.subaddressOptions.push(websiteOption);\n this.catchallOptions.push(websiteOption);\n }\n\n if (this.type !== \"username\" && this.type !== \"password\") {\n if (qParams.type === \"username\" || qParams.type === \"password\") {\n this.type = qParams.type;\n } else {\n const generatorOptions = await this.stateService.getGeneratorOptions();\n this.type = generatorOptions?.type ?? \"password\";\n }\n }\n if (this.regenerateWithoutButtonPress()) {\n await this.regenerate();\n }\n });\n }\n\n async typeChanged() {\n await this.stateService.setGeneratorOptions({ type: this.type });\n if (this.regenerateWithoutButtonPress()) {\n await this.regenerate();\n }\n }\n\n async regenerate() {\n if (this.type === \"password\") {\n await this.regeneratePassword();\n } else if (this.type === \"username\") {\n await this.regenerateUsername();\n }\n }\n\n async sliderChanged() {\n this.savePasswordOptions(false);\n await this.passwordGenerationService.addHistory(this.password);\n }\n\n async sliderInput() {\n this.normalizePasswordOptions();\n this.password = await this.passwordGenerationService.generatePassword(this.passwordOptions);\n }\n\n async savePasswordOptions(regenerate = true) {\n this.normalizePasswordOptions();\n await this.passwordGenerationService.saveOptions(this.passwordOptions);\n\n if (regenerate && this.regenerateWithoutButtonPress()) {\n await this.regeneratePassword();\n }\n }\n\n async saveUsernameOptions(regenerate = true) {\n await this.usernameGenerationService.saveOptions(this.usernameOptions);\n if (this.usernameOptions.type === \"forwarded\") {\n this.username = \"-\";\n }\n if (regenerate && this.regenerateWithoutButtonPress()) {\n await this.regenerateUsername();\n }\n }\n\n async regeneratePassword() {\n this.password = await this.passwordGenerationService.generatePassword(this.passwordOptions);\n await this.passwordGenerationService.addHistory(this.password);\n }\n\n regenerateUsername() {\n return this.generateUsername();\n }\n\n async generateUsername() {\n try {\n this.usernameGeneratingPromise = this.usernameGenerationService.generateUsername(\n this.usernameOptions\n );\n this.username = await this.usernameGeneratingPromise;\n if (this.username === \"\" || this.username === null) {\n this.username = \"-\";\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n copy() {\n const password = this.type === \"password\";\n const copyOptions = this.win != null ? { window: this.win } : null;\n this.platformUtilsService.copyToClipboard(\n password ? this.password : this.username,\n copyOptions\n );\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(password ? \"password\" : \"username\"))\n );\n }\n\n select() {\n this.onSelected.emit(this.type === \"password\" ? this.password : this.username);\n }\n\n toggleOptions() {\n this.showOptions = !this.showOptions;\n }\n\n regenerateWithoutButtonPress() {\n return this.type !== \"username\" || this.usernameOptions.type !== \"forwarded\";\n }\n\n private normalizePasswordOptions() {\n // Application level normalize options depedent on class variables\n this.passwordOptions.ambiguous = !this.avoidAmbiguous;\n\n if (\n !this.passwordOptions.uppercase &&\n !this.passwordOptions.lowercase &&\n !this.passwordOptions.number &&\n !this.passwordOptions.special\n ) {\n this.passwordOptions.lowercase = true;\n if (this.win != null) {\n const lowercase = this.win.document.querySelector(\"#lowercase\") as HTMLInputElement;\n if (lowercase) {\n lowercase.checked = true;\n }\n }\n }\n\n this.passwordGenerationService.normalizeOptions(\n this.passwordOptions,\n this.enforcedPasswordPolicyOptions\n );\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { GeneratedPasswordHistory } from \"@bitwarden/common/models/domain/generated-password-history\";\n\n@Directive()\nexport class PasswordGeneratorHistoryComponent implements OnInit {\n history: GeneratedPasswordHistory[] = [];\n\n constructor(\n protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService,\n private win: Window\n ) {}\n\n async ngOnInit() {\n this.history = await this.passwordGenerationService.getHistory();\n }\n\n clear() {\n this.history = [];\n this.passwordGenerationService.clear();\n }\n\n copy(password: string) {\n const copyOptions = this.win != null ? { window: this.win } : null;\n this.platformUtilsService.copyToClipboard(password, copyOptions);\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"password\"))\n );\n }\n}\n","import { Directive, ElementRef, HostListener } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Directive({\n selector: \"[appSelectCopy]\",\n})\nexport class SelectCopyDirective {\n constructor(private el: ElementRef, private platformUtilsService: PlatformUtilsService) {}\n\n @HostListener(\"copy\") onCopy() {\n if (window == null) {\n return;\n }\n let copyText = \"\";\n const selection = window.getSelection();\n for (let i = 0; i < selection.rangeCount; i++) {\n const range = selection.getRangeAt(i);\n const text = range.toString();\n\n // The selection should only contain one line of text. In some cases however, the\n // selection contains newlines and space characters from the indentation of following\n // sibling nodes. To avoid copying passwords containing trailing newlines and spaces\n // that aren't part of the password, the selection has to be trimmed.\n let stringEndPos = text.length;\n const newLinePos = text.search(/(?:\\r\\n|\\r|\\n)/);\n if (newLinePos > -1) {\n const otherPart = text.substr(newLinePos).trim();\n if (otherPart === \"\") {\n stringEndPos = newLinePos;\n }\n }\n copyText += text.substring(0, stringEndPos);\n }\n this.platformUtilsService.copyToClipboard(copyText, { window: window });\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n/*\n An updated pipe that sanitizes HTML, highlights numbers and special characters (in different colors each)\n and handles Unicode / Emoji characters correctly.\n*/\n@Pipe({ name: \"colorPassword\" })\nexport class ColorPasswordPipe implements PipeTransform {\n transform(password: string) {\n const template = (character: string, type: string) =>\n `${character}`;\n const colorizedPassword = this.generateTemplate(password, template);\n return colorizedPassword;\n }\n\n protected generateTemplate(\n password: string,\n templateGenerator: (chararacter: string, type: string, index?: number) => string\n ) {\n // Convert to an array to handle cases that stings have special characters, ie: emoji.\n const passwordArray = Array.from(password);\n let colorizedPassword = \"\";\n for (let i = 0; i < passwordArray.length; i++) {\n let character = passwordArray[i];\n let isSpecial = false;\n // Sanitize HTML first.\n switch (character) {\n case \"&\":\n character = \"&\";\n isSpecial = true;\n break;\n case \"<\":\n character = \"<\";\n isSpecial = true;\n break;\n case \">\":\n character = \">\";\n isSpecial = true;\n break;\n case \" \":\n character = \" \";\n isSpecial = true;\n break;\n default:\n break;\n }\n let type = \"letter\";\n if (character.match(Utils.regexpEmojiPresentation)) {\n type = \"emoji\";\n } else if (isSpecial || character.match(/[^\\w ]/)) {\n type = \"special\";\n } else if (character.match(/\\d/)) {\n type = \"number\";\n }\n colorizedPassword += templateGenerator(character, type, i);\n }\n return colorizedPassword;\n }\n}\n","
\n
\n
\n
\n

{{ \"passwordHistory\" | i18n }}

\n \n ×\n \n
\n
\n
    \n
  • \n
    \n
    \n {{ h.date | date: \"medium\" }}\n
\n
\n \n \n \n
\n \n \n
\n
\n {{ \"noPasswordsInList\" | i18n }}\n
\n
\n \n
\n \n \n \n
\n
\n
\n
\n\n","import { Component } from \"@angular/core\";\n\nimport { PasswordGeneratorHistoryComponent as BasePasswordGeneratorHistoryComponent } from \"@bitwarden/angular/components/password-generator-history.component\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-password-generator-history\",\n templateUrl: \"password-generator-history.component.html\",\n})\nexport class PasswordGeneratorHistoryComponent extends BasePasswordGeneratorHistoryComponent {\n constructor(\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService\n ) {\n super(passwordGenerationService, platformUtilsService, i18nService, window);\n }\n}\n","
\n

{{ \"generator\" | i18n }}

\n
\n\n {{ \"passwordGeneratorPolicyInEffect\" | i18n }}\n\n
\n
\n
\n
\n \n\n
\n \n
\n \n \n
\n
\n\n
\n \n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n \n
\n
\n
\n\n
\n
\n \n \n \n \n
\n
\n \n \n
\n
\n \n
\n \n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n {{ \"regenerateUsername\" | i18n }}\n \n \n
\n
\n\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { GeneratorComponent as BaseGeneratorComponent } from \"@bitwarden/angular/components/generator.component\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UsernameGenerationService } from \"@bitwarden/common/abstractions/usernameGeneration.service\";\n\nimport { PasswordGeneratorHistoryComponent } from \"./password-generator-history.component\";\n\n@Component({\n selector: \"app-generator\",\n templateUrl: \"generator.component.html\",\n})\nexport class GeneratorComponent extends BaseGeneratorComponent {\n @ViewChild(\"historyTemplate\", { read: ViewContainerRef, static: true })\n historyModalRef: ViewContainerRef;\n\n constructor(\n passwordGenerationService: PasswordGenerationService,\n usernameGenerationService: UsernameGenerationService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n logService: LogService,\n route: ActivatedRoute,\n private modalService: ModalService\n ) {\n super(\n passwordGenerationService,\n usernameGenerationService,\n platformUtilsService,\n stateService,\n i18nService,\n logService,\n route,\n window\n );\n if (platformUtilsService.isSelfHost()) {\n // Cannot use Firefox Relay on self hosted web vaults due to CORS issues with Firefox Relay API\n this.forwardOptions.splice(\n this.forwardOptions.findIndex((o) => o.value === \"firefoxrelay\"),\n 1\n );\n // Also cannot use Duck Duck Go on self hosted web vaults due to CORS issues\n this.forwardOptions.splice(\n this.forwardOptions.findIndex((o) => o.value === \"duckduckgo\"),\n 1\n );\n }\n }\n\n async history() {\n await this.modalService.openViewRef(PasswordGeneratorHistoryComponent, this.historyModalRef);\n }\n\n lengthChanged() {\n document.getElementById(\"length\").focus();\n }\n\n minNumberChanged() {\n document.getElementById(\"min-number\").focus();\n }\n\n minSpecialChanged() {\n document.getElementById(\"min-special\").focus();\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Component({\n selector: \"app-tools\",\n templateUrl: \"tools.component.html\",\n})\nexport class ToolsComponent implements OnInit {\n canAccessPremium = false;\n\n constructor(private stateService: StateService, private messagingService: MessagingService) {}\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n}\n","
\n \n
\n","import { Component } from \"@angular/core\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { CipherWithIdRequest } from \"@bitwarden/common/models/request/cipher-with-id.request\";\nimport { FolderWithIdRequest } from \"@bitwarden/common/models/request/folder-with-id.request\";\nimport { UpdateKeyRequest } from \"@bitwarden/common/models/request/update-key.request\";\n\n@Component({\n selector: \"app-update-key\",\n templateUrl: \"update-key.component.html\",\n})\nexport class UpdateKeyComponent {\n masterPassword: string;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private syncService: SyncService,\n private folderService: FolderService,\n private cipherService: CipherService,\n private logService: LogService\n ) {}\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (hasEncKey) {\n return;\n }\n\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordRequired\")\n );\n return;\n }\n\n try {\n this.formPromise = this.makeRequest().then((request) => {\n return this.apiService.postAccountKey(request);\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"keyUpdated\"),\n this.i18nService.t(\"logBackInOthersToo\"),\n { timeout: 15000 }\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private async makeRequest(): Promise {\n const key = await this.cryptoService.getKey();\n const encKey = await this.cryptoService.makeEncKey(key);\n const privateKey = await this.cryptoService.getPrivateKey();\n let encPrivateKey: EncString = null;\n if (privateKey != null) {\n encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n }\n const request = new UpdateKeyRequest();\n request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n\n await this.syncService.fullSync(true);\n\n const folders = await firstValueFrom(this.folderService.folderViews$);\n for (let i = 0; i < folders.length; i++) {\n if (folders[i].id == null) {\n continue;\n }\n const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n request.folders.push(new FolderWithIdRequest(folder));\n }\n\n const ciphers = await this.cipherService.getAllDecrypted();\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId != null) {\n continue;\n }\n const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n request.ciphers.push(new CipherWithIdRequest(cipher));\n }\n\n return request;\n }\n}\n","
\n
\n \n
\n

{{ \"updateEncryptionKey\" | i18n }}

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

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

\n {{ \"updateEncryptionKeyWarning\" | i18n }}\n \n \n
\n
\n \n \n
\n \n
\n
\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { FolderApiServiceAbstraction } from \"@bitwarden/common/abstractions/folder/folder-api.service.abstraction\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { FolderView } from \"@bitwarden/common/models/view/folder.view\";\n\n@Directive()\nexport class FolderAddEditComponent implements OnInit {\n @Input() folderId: string;\n @Output() onSavedFolder = new EventEmitter();\n @Output() onDeletedFolder = new EventEmitter();\n\n editMode = false;\n folder: FolderView = new FolderView();\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n\n constructor(\n protected folderService: FolderService,\n protected folderApiService: FolderApiServiceAbstraction,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit(): Promise {\n if (this.folder.name == null || this.folder.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n try {\n const folder = await this.folderService.encrypt(this.folder);\n this.formPromise = this.folderApiService.save(folder);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedFolder\" : \"addedFolder\")\n );\n this.onSavedFolder.emit(this.folder);\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n async delete(): Promise {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteFolderConfirmation\"),\n this.i18nService.t(\"deleteFolder\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.folderApiService.delete(this.folder.id);\n await this.deletePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedFolder\"));\n this.onDeletedFolder.emit(this.folder);\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n protected async init() {\n this.editMode = this.folderId != null;\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editFolder\");\n const folder = await this.folderService.get(this.folderId);\n this.folder = await folder.decrypt();\n } else {\n this.title = this.i18nService.t(\"addFolder\");\n }\n }\n}\n","
\n
\n \n
\n

{{ title }}

\n \n ×\n \n
\n
\n \n \n
\n
\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { FolderAddEditComponent as BaseFolderAddEditComponent } from \"@bitwarden/angular/components/folder-add-edit.component\";\nimport { FolderApiServiceAbstraction } from \"@bitwarden/common/abstractions/folder/folder-api.service.abstraction\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-folder-add-edit\",\n templateUrl: \"folder-add-edit.component.html\",\n})\nexport class FolderAddEditComponent extends BaseFolderAddEditComponent {\n constructor(\n folderService: FolderService,\n folderApiService: FolderApiServiceAbstraction,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService\n ) {\n super(folderService, folderApiService, i18nService, platformUtilsService, logService);\n }\n}\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { firstValueFrom, map, Observable, Subject, takeUntil } from \"rxjs\";\n\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport {\n isNotProviderUser,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { Checkable, isChecked } from \"@bitwarden/common/types/checkable\";\n\n@Directive()\nexport class ShareComponent implements OnInit, OnDestroy {\n @Input() cipherId: string;\n @Input() organizationId: string;\n @Output() onSharedCipher = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collections: Checkable[] = [];\n organizations$: Observable;\n\n protected writeableCollections: Checkable[] = [];\n\n private _destroy = new Subject();\n\n constructor(\n protected collectionService: CollectionService,\n protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService,\n protected cipherService: CipherService,\n private logService: LogService,\n protected organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n ngOnDestroy(): void {\n this._destroy.next();\n this._destroy.complete();\n }\n\n async load() {\n const allCollections = await this.collectionService.getAllDecrypted();\n this.writeableCollections = allCollections.map((c) => c).filter((c) => !c.readOnly);\n\n this.organizations$ = this.organizationService.organizations$.pipe(\n map((orgs) => {\n return orgs\n .filter(\n (o) =>\n o.enabled && o.status === OrganizationUserStatusType.Confirmed && isNotProviderUser(o)\n )\n .sort(Utils.getSortFunction(this.i18nService, \"name\"));\n })\n );\n\n this.organizations$.pipe(takeUntil(this._destroy)).subscribe((orgs) => {\n if (this.organizationId == null && orgs.length > 0) {\n this.organizationId = orgs[0].id;\n }\n });\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n this.cipher = await cipherDomain.decrypt();\n\n this.filterCollections();\n }\n\n filterCollections() {\n this.writeableCollections.forEach((c) => (c.checked = false));\n if (this.organizationId == null || this.writeableCollections.length === 0) {\n this.collections = [];\n } else {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.organizationId\n );\n }\n }\n\n async submit(): Promise {\n const selectedCollectionIds = this.collections.filter(isChecked).map((c) => c.id);\n if (selectedCollectionIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectOneCollection\")\n );\n return;\n }\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n const cipherView = await cipherDomain.decrypt();\n const orgs = await firstValueFrom(this.organizations$);\n const orgName =\n orgs.find((o) => o.id === this.organizationId)?.name ?? this.i18nService.t(\"organization\");\n\n try {\n this.formPromise = this.cipherService\n .shareWithServer(cipherView, this.organizationId, selectedCollectionIds)\n .then(async () => {\n this.onSharedCipher.emit();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"movedItemToOrg\", cipherView.name, orgName)\n );\n });\n await this.formPromise;\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n return false;\n }\n\n get canSave() {\n if (this.collections != null) {\n for (let i = 0; i < this.collections.length; i++) {\n if (this.collections[i].checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","
\n
\n
\n
\n

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

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

{{ \"moveToOrgDesc\" | i18n }}

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

{{ \"collections\" | i18n }}

\n
\n \n \n
\n
\n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n {{ c.name }}\n \n \n \n \n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n {{ \"newOrganization\" | i18n }}\n \n \n
\n
\n
\n
\n
\n","import { Component, OnDestroy } from \"@angular/core\";\n\nimport { ShareComponent as BaseShareComponent } from \"@bitwarden/angular/components/share.component\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\n\n@Component({\n selector: \"app-vault-share\",\n templateUrl: \"share.component.html\",\n})\nexport class ShareComponent extends BaseShareComponent implements OnDestroy {\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n organizationService: OrganizationService,\n logService: LogService\n ) {\n super(\n collectionService,\n platformUtilsService,\n i18nService,\n cipherService,\n logService,\n organizationService\n );\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n const collections = select ? this.collections : this.writeableCollections;\n collections.forEach((c) => this.check(c, select));\n }\n}\n","import { Component, EventEmitter, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\n\n@Component({\n selector: \"app-verify-email\",\n templateUrl: \"verify-email.component.html\",\n})\nexport class VerifyEmailComponent {\n actionPromise: Promise;\n\n @Output() onVerified = new EventEmitter();\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService,\n private tokenService: TokenService\n ) {}\n\n async verifyEmail(): Promise {\n await this.apiService.refreshIdentityToken();\n if (await this.tokenService.getEmailVerified()) {\n this.onVerified.emit(true);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"emailVerified\"));\n return;\n }\n\n await this.apiService.postAccountVerifyEmail();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"checkInboxForVerification\")\n );\n }\n\n async send() {\n if (this.actionPromise != null) {\n return;\n }\n\n try {\n this.actionPromise = this.verifyEmail();\n await this.actionPromise;\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n}\n","
\n
\n {{ \"verifyEmail\" | i18n }}\n
\n
\n

{{ \"verifyEmailDesc\" | i18n }}

\n \n \n \n {{ \"sendEmail\" | i18n }}\n \n \n
\n
\n","
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n

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

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

{{ \"updateEncryptionKeyShortDesc\" | i18n }}

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

{{ \"updateBrowserDesc\" | i18n }}

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

{{ \"premiumUpgradeUnlockFeatures\" | i18n }}

\n \n {{ \"goPremium\" | i18n }}\n \n
\n
\n
\n
\n
\n\n\n\n\n\n\n","import {\n ChangeDetectorRef,\n Component,\n NgZone,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { VaultFilter } from \"@bitwarden/angular/vault/vault-filter/models/vault-filter.model\";\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordRepromptService } from \"@bitwarden/common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\nimport { UpdateKeyComponent } from \"../settings/update-key.component\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\nimport { AttachmentsComponent } from \"./attachments.component\";\nimport { CiphersComponent } from \"./ciphers.component\";\nimport { CollectionsComponent } from \"./collections.component\";\nimport { FolderAddEditComponent } from \"./folder-add-edit.component\";\nimport { ShareComponent } from \"./share.component\";\nimport { VaultService } from \"./shared/vault.service\";\nimport { VaultFilterService } from \"./vault-filter/shared/vault-filter.service\";\nimport { VaultFilterComponent } from \"./vault-filter/vault-filter.component\";\n\nconst BroadcasterSubscriptionId = \"VaultComponent\";\n\n@Component({\n selector: \"app-vault\",\n templateUrl: \"vault.component.html\",\n})\nexport class VaultComponent implements OnInit, OnDestroy {\n @ViewChild(\"vaultFilter\", { static: true }) filterComponent: VaultFilterComponent;\n @ViewChild(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;\n @ViewChild(\"attachments\", { read: ViewContainerRef, static: true })\n attachmentsModalRef: ViewContainerRef;\n @ViewChild(\"folderAddEdit\", { read: ViewContainerRef, static: true })\n folderAddEditModalRef: ViewContainerRef;\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n @ViewChild(\"share\", { read: ViewContainerRef, static: true }) shareModalRef: ViewContainerRef;\n @ViewChild(\"collections\", { read: ViewContainerRef, static: true })\n collectionsModalRef: ViewContainerRef;\n @ViewChild(\"updateKeyTemplate\", { read: ViewContainerRef, static: true })\n updateKeyModalRef: ViewContainerRef;\n\n folderId: string = null;\n myVaultOnly = false;\n showVerifyEmail = false;\n showBrowserOutdated = false;\n showUpdateKey = false;\n showPremiumCallout = false;\n trashCleanupWarning: string = null;\n activeFilter: VaultFilter = new VaultFilter();\n\n constructor(\n private syncService: SyncService,\n private route: ActivatedRoute,\n private router: Router,\n private changeDetectorRef: ChangeDetectorRef,\n private i18nService: I18nService,\n private modalService: ModalService,\n private tokenService: TokenService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private platformUtilsService: PlatformUtilsService,\n private broadcasterService: BroadcasterService,\n private ngZone: NgZone,\n private stateService: StateService,\n private organizationService: OrganizationService,\n private vaultService: VaultService,\n private cipherService: CipherService,\n private passwordRepromptService: PasswordRepromptService,\n private vaultFilterService: VaultFilterService\n ) {}\n\n async ngOnInit() {\n this.showVerifyEmail = !(await this.tokenService.getEmailVerified());\n this.showBrowserOutdated = window.navigator.userAgent.indexOf(\"MSIE\") !== -1;\n this.trashCleanupWarning = this.i18nService.t(\n this.platformUtilsService.isSelfHost()\n ? \"trashCleanupWarningSelfHosted\"\n : \"trashCleanupWarning\"\n );\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (params) => {\n await this.syncService.fullSync(false);\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n this.showPremiumCallout =\n !this.showVerifyEmail && !canAccessPremium && !this.platformUtilsService.isSelfHost();\n\n this.filterComponent.reloadCollectionsAndFolders(this.activeFilter);\n this.filterComponent.reloadOrganizations();\n this.showUpdateKey = !(await this.cryptoService.hasEncKey());\n\n const cipherId = getCipherIdFromParams(params);\n\n if (cipherId) {\n const cipherView = new CipherView();\n cipherView.id = cipherId;\n if (params.action === \"clone\") {\n await this.cloneCipher(cipherView);\n } else if (params.action === \"edit\") {\n await this.editCipher(cipherView);\n }\n }\n await this.ciphersComponent.reload();\n\n /* eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe */\n this.route.queryParams.subscribe(async (params) => {\n const cipherId = getCipherIdFromParams(params);\n if (cipherId) {\n if ((await this.cipherService.get(cipherId)) != null) {\n this.editCipherId(cipherId);\n } else {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"unknownCipher\")\n );\n this.router.navigate([], {\n queryParams: { itemId: null, cipherId: null },\n queryParamsHandling: \"merge\",\n });\n }\n }\n });\n\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"syncCompleted\":\n if (message.successfully) {\n await Promise.all([\n this.filterComponent.reloadCollectionsAndFolders(this.activeFilter),\n this.filterComponent.reloadOrganizations(),\n this.ciphersComponent.load(this.ciphersComponent.filter),\n ]);\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n });\n }\n\n get isShowingCards() {\n return (\n this.showBrowserOutdated ||\n this.showPremiumCallout ||\n this.showUpdateKey ||\n this.showVerifyEmail\n );\n }\n\n emailVerified(verified: boolean) {\n this.showVerifyEmail = !verified;\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async applyVaultFilter(vaultFilter: VaultFilter) {\n this.ciphersComponent.showAddNew = vaultFilter.status !== \"trash\";\n this.activeFilter = vaultFilter;\n await this.ciphersComponent.reload(\n this.activeFilter.buildFilter(),\n vaultFilter.status === \"trash\"\n );\n this.filterComponent.searchPlaceholder = this.vaultService.calculateSearchBarLocalizationString(\n this.activeFilter\n );\n this.go();\n }\n\n async applyOrganizationFilter(orgId: string) {\n if (orgId == null) {\n this.activeFilter.resetOrganization();\n this.activeFilter.myVaultOnly = true;\n } else {\n this.activeFilter.selectedOrganizationId = orgId;\n }\n await this.vaultFilterService.ensureVaultFiltersAreExpanded();\n await this.applyVaultFilter(this.activeFilter);\n }\n\n filterSearchText(searchText: string) {\n this.ciphersComponent.searchText = searchText;\n this.ciphersComponent.search(200);\n }\n\n async editCipherAttachments(cipher: CipherView) {\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n if (cipher.organizationId == null && !canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n } else if (cipher.organizationId != null) {\n const org = await this.organizationService.get(cipher.organizationId);\n if (org != null && (org.maxStorageGb == null || org.maxStorageGb === 0)) {\n this.messagingService.send(\"upgradeOrganization\", {\n organizationId: cipher.organizationId,\n });\n return;\n }\n }\n\n let madeAttachmentChanges = false;\n const [modal] = await this.modalService.openViewRef(\n AttachmentsComponent,\n this.attachmentsModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onUploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onDeletedAttachment.subscribe(() => (madeAttachmentChanges = true));\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onReuploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n }\n );\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n modal.onClosed.subscribe(async () => {\n if (madeAttachmentChanges) {\n await this.ciphersComponent.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n async shareCipher(cipher: CipherView) {\n const [modal] = await this.modalService.openViewRef(\n ShareComponent,\n this.shareModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSharedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async editCipherCollections(cipher: CipherView) {\n const [modal] = await this.modalService.openViewRef(\n CollectionsComponent,\n this.collectionsModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedCollections.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async addFolder() {\n const [modal] = await this.modalService.openViewRef(\n FolderAddEditComponent,\n this.folderAddEditModalRef,\n (comp) => {\n comp.folderId = null;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedFolder.subscribe(async () => {\n modal.close();\n await this.filterComponent.reloadCollectionsAndFolders(this.activeFilter);\n });\n }\n );\n }\n\n async editFolder(folderId: string) {\n const [modal] = await this.modalService.openViewRef(\n FolderAddEditComponent,\n this.folderAddEditModalRef,\n (comp) => {\n comp.folderId = folderId;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedFolder.subscribe(async () => {\n modal.close();\n await this.filterComponent.reloadCollectionsAndFolders(this.activeFilter);\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeletedFolder.subscribe(async () => {\n modal.close();\n await this.filterComponent.reloadCollectionsAndFolders(this.activeFilter);\n });\n }\n );\n }\n\n async addCipher() {\n const component = await this.editCipher(null);\n component.type = this.activeFilter.cipherType;\n component.folderId = this.folderId === \"none\" ? null : this.folderId;\n if (this.activeFilter.selectedCollectionId != null) {\n const collection = this.filterComponent.collections.fullList.filter(\n (c) => c.id === this.activeFilter.selectedCollectionId\n );\n if (collection.length > 0) {\n component.organizationId = collection[0].organizationId;\n component.collectionIds = [this.activeFilter.selectedCollectionId];\n }\n }\n if (this.activeFilter.selectedFolderId && this.activeFilter.selectedFolder) {\n component.folderId = this.activeFilter.selectedFolderId;\n }\n if (this.activeFilter.selectedOrganizationId) {\n component.organizationId = this.activeFilter.selectedOrganizationId;\n }\n }\n\n async editCipher(cipher: CipherView) {\n return this.editCipherId(cipher?.id);\n }\n\n async editCipherId(id: string) {\n const cipher = await this.cipherService.get(id);\n if (cipher != null && cipher.reprompt != 0) {\n if (!(await this.passwordRepromptService.showPasswordPrompt())) {\n this.go({ cipherId: null, itemId: null });\n return;\n }\n }\n\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.cipherAddEditModalRef,\n (comp) => {\n comp.cipherId = id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeletedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onRestoredCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n\n modal.onClosedPromise().then(() => {\n this.go({ cipherId: null, itemId: null });\n });\n\n return childComponent;\n }\n\n async cloneCipher(cipher: CipherView) {\n const component = await this.editCipher(cipher);\n component.cloneMode = true;\n }\n\n async updateKey() {\n await this.modalService.openViewRef(UpdateKeyComponent, this.updateKeyModalRef);\n }\n\n private go(queryParams: any = null) {\n if (queryParams == null) {\n queryParams = {\n favorites: this.activeFilter.status === \"favorites\" ? true : null,\n type: this.activeFilter.cipherType,\n folderId: this.activeFilter.selectedFolderId,\n collectionId: this.activeFilter.selectedCollectionId,\n deleted: this.activeFilter.status === \"trash\" ? true : null,\n };\n }\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n queryParamsHandling: \"merge\",\n replaceUrl: true,\n });\n }\n}\n\n/**\n * Allows backwards compatibility with\n * old links that used the original `cipherId` param\n */\nconst getCipherIdFromParams = (params: Params): string => {\n return params[\"itemId\"] || params[\"cipherId\"];\n};\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { VaultComponent } from \"./vault.component\";\nconst routes: Routes = [\n {\n path: \"\",\n component: VaultComponent,\n data: { titleId: \"vaults\" },\n },\n];\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class VaultRoutingModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { CiphersComponent } from \"./ciphers.component\";\nimport { OrganizationBadgeModule } from \"./organization-badge/organization-badge.module\";\nimport { VaultSharedModule } from \"./shared/vault-shared.module\";\nimport { VaultRoutingModule } from \"./vault-routing.module\";\nimport { VaultComponent } from \"./vault.component\";\n\n@NgModule({\n imports: [VaultSharedModule, VaultRoutingModule, OrganizationBadgeModule],\n declarations: [VaultComponent, CiphersComponent],\n exports: [VaultComponent],\n})\nexport class VaultModule {}\n","import { NgModule } from \"@angular/core\";\nimport { Route, RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"@bitwarden/angular/guards/auth.guard\";\nimport { LockGuard } from \"@bitwarden/angular/guards/lock.guard\";\nimport { UnauthGuard } from \"@bitwarden/angular/guards/unauth.guard\";\n\nimport { flagEnabled, Flags } from \"../utils/flags\";\n\nimport { AcceptEmergencyComponent } from \"./accounts/accept-emergency.component\";\nimport { AcceptOrganizationComponent } from \"./accounts/accept-organization.component\";\nimport { HintComponent } from \"./accounts/hint.component\";\nimport { LockComponent } from \"./accounts/lock.component\";\nimport { LoginWithDeviceComponent } from \"./accounts/login/login-with-device.component\";\nimport { LoginComponent } from \"./accounts/login/login.component\";\nimport { RecoverDeleteComponent } from \"./accounts/recover-delete.component\";\nimport { RecoverTwoFactorComponent } from \"./accounts/recover-two-factor.component\";\nimport { RegisterComponent } from \"./accounts/register.component\";\nimport { RemovePasswordComponent } from \"./accounts/remove-password.component\";\nimport { SetPasswordComponent } from \"./accounts/set-password.component\";\nimport { SsoComponent } from \"./accounts/sso.component\";\nimport { TrialInitiationComponent } from \"./accounts/trial-initiation/trial-initiation.component\";\nimport { TwoFactorComponent } from \"./accounts/two-factor.component\";\nimport { UpdatePasswordComponent } from \"./accounts/update-password.component\";\nimport { UpdateTempPasswordComponent } from \"./accounts/update-temp-password.component\";\nimport { VerifyEmailTokenComponent } from \"./accounts/verify-email-token.component\";\nimport { VerifyRecoverDeleteComponent } from \"./accounts/verify-recover-delete.component\";\nimport { HomeGuard } from \"./guards/home.guard\";\nimport { FrontendLayoutComponent } from \"./layouts/frontend-layout.component\";\nimport { UserLayoutComponent } from \"./layouts/user-layout.component\";\nimport { OrganizationModule } from \"./organizations/organization.module\";\nimport { AcceptFamilySponsorshipComponent } from \"./organizations/sponsorships/accept-family-sponsorship.component\";\nimport { FamiliesForEnterpriseSetupComponent } from \"./organizations/sponsorships/families-for-enterprise-setup.component\";\nimport { ReportsModule } from \"./reports\";\nimport { AccessComponent } from \"./send/access.component\";\nimport { SendComponent } from \"./send/send.component\";\nimport { AccountComponent } from \"./settings/account.component\";\nimport { CreateOrganizationComponent } from \"./settings/create-organization.component\";\nimport { DomainRulesComponent } from \"./settings/domain-rules.component\";\nimport { EmergencyAccessViewComponent } from \"./settings/emergency-access-view.component\";\nimport { EmergencyAccessComponent } from \"./settings/emergency-access.component\";\nimport { PreferencesComponent } from \"./settings/preferences.component\";\nimport { SecurityRoutingModule } from \"./settings/security-routing.module\";\nimport { SettingsComponent } from \"./settings/settings.component\";\nimport { SponsoredFamiliesComponent } from \"./settings/sponsored-families.component\";\nimport { SubscriptionRoutingModule } from \"./settings/subscription-routing.module\";\nimport { GeneratorComponent } from \"./tools/generator.component\";\nimport { ToolsComponent } from \"./tools/tools.component\";\nimport { VaultModule } from \"./vault/vault.module\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: FrontendLayoutComponent,\n data: { doNotSaveUrl: true },\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n children: [], // Children lets us have an empty component.\n canActivate: [HomeGuard], // Redirects either to vault, login or lock page.\n },\n { path: \"login\", component: LoginComponent, canActivate: [UnauthGuard] },\n {\n path: \"login-with-device\",\n component: LoginWithDeviceComponent,\n data: { titleId: \"loginWithDevice\" },\n },\n { path: \"2fa\", component: TwoFactorComponent, canActivate: [UnauthGuard] },\n {\n path: \"register\",\n component: RegisterComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"createAccount\" },\n },\n buildFlaggedRoute(\"showTrial\", {\n path: \"trial\",\n component: TrialInitiationComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"startTrial\" },\n }),\n {\n path: \"sso\",\n component: SsoComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"enterpriseSingleSignOn\" },\n },\n {\n path: \"set-password\",\n component: SetPasswordComponent,\n data: { titleId: \"setMasterPassword\" },\n },\n {\n path: \"hint\",\n component: HintComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"passwordHint\" },\n },\n {\n path: \"lock\",\n component: LockComponent,\n canActivate: [LockGuard],\n },\n { path: \"verify-email\", component: VerifyEmailTokenComponent },\n {\n path: \"accept-organization\",\n component: AcceptOrganizationComponent,\n data: { titleId: \"joinOrganization\", doNotSaveUrl: false },\n },\n {\n path: \"accept-emergency\",\n component: AcceptEmergencyComponent,\n data: { titleId: \"acceptEmergency\", doNotSaveUrl: false },\n },\n {\n path: \"accept-families-for-enterprise\",\n component: AcceptFamilySponsorshipComponent,\n data: { titleId: \"acceptFamilySponsorship\", doNotSaveUrl: false },\n },\n { path: \"recover\", pathMatch: \"full\", redirectTo: \"recover-2fa\" },\n {\n path: \"recover-2fa\",\n component: RecoverTwoFactorComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"recoverAccountTwoStep\" },\n },\n {\n path: \"recover-delete\",\n component: RecoverDeleteComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"deleteAccount\" },\n },\n {\n path: \"verify-recover-delete\",\n component: VerifyRecoverDeleteComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"deleteAccount\" },\n },\n {\n path: \"send/:sendId/:key\",\n component: AccessComponent,\n data: { title: \"Bitwarden Send\" },\n },\n {\n path: \"update-temp-password\",\n component: UpdateTempPasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"updateTempPassword\" },\n },\n {\n path: \"update-password\",\n component: UpdatePasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"updatePassword\" },\n },\n {\n path: \"remove-password\",\n component: RemovePasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"removeMasterPassword\" },\n },\n ],\n },\n {\n path: \"\",\n component: UserLayoutComponent,\n canActivate: [AuthGuard],\n children: [\n {\n path: \"vault\",\n loadChildren: () => VaultModule,\n },\n { path: \"sends\", component: SendComponent, data: { title: \"Send\" } },\n {\n path: \"create-organization\",\n component: CreateOrganizationComponent,\n data: { titleId: \"newOrganization\" },\n },\n {\n path: \"settings\",\n component: SettingsComponent,\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"account\" },\n { path: \"account\", component: AccountComponent, data: { titleId: \"myAccount\" } },\n {\n path: \"preferences\",\n component: PreferencesComponent,\n data: { titleId: \"preferences\" },\n },\n {\n path: \"security\",\n loadChildren: () => SecurityRoutingModule,\n },\n {\n path: \"domain-rules\",\n component: DomainRulesComponent,\n data: { titleId: \"domainRules\" },\n },\n {\n path: \"subscription\",\n loadChildren: () => SubscriptionRoutingModule,\n },\n {\n path: \"emergency-access\",\n children: [\n {\n path: \"\",\n component: EmergencyAccessComponent,\n data: { titleId: \"emergencyAccess\" },\n },\n {\n path: \":id\",\n component: EmergencyAccessViewComponent,\n data: { titleId: \"emergencyAccess\" },\n },\n ],\n },\n {\n path: \"sponsored-families\",\n component: SponsoredFamiliesComponent,\n data: { titleId: \"sponsoredFamilies\" },\n },\n ],\n },\n {\n path: \"tools\",\n component: ToolsComponent,\n canActivate: [AuthGuard],\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"generator\" },\n {\n path: \"\",\n loadChildren: () =>\n import(\"./tools/import-export/import-export.module\").then(\n (m) => m.ImportExportModule\n ),\n },\n {\n path: \"generator\",\n component: GeneratorComponent,\n data: { titleId: \"generator\" },\n },\n ],\n },\n {\n path: \"reports\",\n loadChildren: () => ReportsModule,\n },\n { path: \"setup/families-for-enterprise\", component: FamiliesForEnterpriseSetupComponent },\n ],\n },\n {\n path: \"organizations\",\n loadChildren: () => OrganizationModule,\n },\n];\n\n@NgModule({\n imports: [\n RouterModule.forRoot(routes, {\n useHash: true,\n paramsInheritanceStrategy: \"always\",\n // enableTracing: true,\n }),\n ],\n exports: [RouterModule],\n})\nexport class OssRoutingModule {}\n\nexport function buildFlaggedRoute(flagName: keyof Flags, route: Route): Route {\n return flagEnabled(flagName)\n ? route\n : {\n path: route.path,\n redirectTo: \"/\",\n };\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { LoginWithDeviceComponent } from \"./login-with-device.component\";\nimport { LoginComponent } from \"./login.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [LoginComponent, LoginWithDeviceComponent],\n exports: [LoginComponent, LoginWithDeviceComponent],\n})\nexport class LoginModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../shared\";\n\nimport { VerticalStepContentComponent } from \"./vertical-step-content.component\";\nimport { VerticalStep } from \"./vertical-step.component\";\nimport { VerticalStepperComponent } from \"./vertical-stepper.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [VerticalStepperComponent, VerticalStep, VerticalStepContentComponent],\n exports: [VerticalStepperComponent, VerticalStep],\n})\nexport class VerticalStepperModule {}\n","import { CdkStepperModule } from \"@angular/cdk/stepper\";\nimport { TitleCasePipe } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { FormFieldModule } from \"@bitwarden/components\";\n\nimport { OrganizationCreateModule } from \"../../organizations/create/organization-create.module\";\nimport { LooseComponentsModule, SharedModule } from \"../../shared\";\nimport { RegisterFormModule } from \"../register-form/register-form.module\";\n\nimport { BillingComponent } from \"./billing.component\";\nimport { ConfirmationDetailsComponent } from \"./confirmation-details.component\";\nimport { AbmEnterpriseContentComponent } from \"./content/abm-enterprise-content.component\";\nimport { AbmTeamsContentComponent } from \"./content/abm-teams-content.component\";\nimport { CnetEnterpriseContentComponent } from \"./content/cnet-enterprise-content.component\";\nimport { CnetIndividualContentComponent } from \"./content/cnet-individual-content.component\";\nimport { CnetTeamsContentComponent } from \"./content/cnet-teams-content.component\";\nimport { DefaultContentComponent } from \"./content/default-content.component\";\nimport { EnterpriseContentComponent } from \"./content/enterprise-content.component\";\nimport { Enterprise1ContentComponent } from \"./content/enterprise1-content.component\";\nimport { Enterprise2ContentComponent } from \"./content/enterprise2-content.component\";\nimport { LogoCnetComponent } from \"./content/logo-cnet.component\";\nimport { LogoForbesComponent } from \"./content/logo-forbes.component\";\nimport { LogoUSNewsComponent } from \"./content/logo-us-news.component\";\nimport { TeamsContentComponent } from \"./content/teams-content.component\";\nimport { Teams1ContentComponent } from \"./content/teams1-content.component\";\nimport { Teams2ContentComponent } from \"./content/teams2-content.component\";\nimport { TrialInitiationComponent } from \"./trial-initiation.component\";\nimport { VerticalStepperModule } from \"./vertical-stepper/vertical-stepper.module\";\n\n@NgModule({\n imports: [\n SharedModule,\n CdkStepperModule,\n VerticalStepperModule,\n FormFieldModule,\n RegisterFormModule,\n OrganizationCreateModule,\n LooseComponentsModule,\n ],\n declarations: [\n TrialInitiationComponent,\n EnterpriseContentComponent,\n TeamsContentComponent,\n ConfirmationDetailsComponent,\n BillingComponent,\n DefaultContentComponent,\n EnterpriseContentComponent,\n Enterprise1ContentComponent,\n Enterprise2ContentComponent,\n TeamsContentComponent,\n Teams1ContentComponent,\n Teams2ContentComponent,\n CnetEnterpriseContentComponent,\n CnetIndividualContentComponent,\n CnetTeamsContentComponent,\n AbmEnterpriseContentComponent,\n AbmTeamsContentComponent,\n LogoCnetComponent,\n LogoForbesComponent,\n LogoUSNewsComponent,\n ],\n exports: [TrialInitiationComponent],\n providers: [TitleCasePipe],\n})\nexport class TrialInitiationModule {}\n","import { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { EntityUsersComponent } from \"./entity-users.component\";\n\n@NgModule({\n imports: [SharedModule, ScrollingModule],\n declarations: [EntityUsersComponent],\n exports: [EntityUsersComponent],\n})\nexport class OrganizationManageModule {}\n","import { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { NgModule } from \"@angular/core\";\n\nimport { LooseComponentsModule, SharedModule } from \"../../shared\";\n\nimport { EnrollMasterPasswordReset } from \"./enroll-master-password-reset.component\";\n\n@NgModule({\n imports: [SharedModule, ScrollingModule, LooseComponentsModule],\n declarations: [EnrollMasterPasswordReset],\n exports: [EnrollMasterPasswordReset],\n})\nexport class OrganizationUserModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { LoginModule } from \"./accounts/login/login.module\";\nimport { TrialInitiationModule } from \"./accounts/trial-initiation/trial-initiation.module\";\nimport { OrganizationCreateModule } from \"./organizations/create/organization-create.module\";\nimport { OrganizationManageModule } from \"./organizations/manage/organization-manage.module\";\nimport { OrganizationUserModule } from \"./organizations/users/organization-user.module\";\nimport { LooseComponentsModule, SharedModule } from \"./shared\";\nimport { OrganizationBadgeModule } from \"./vault/organization-badge/organization-badge.module\";\nimport { VaultFilterModule } from \"./vault/vault-filter/vault-filter.module\";\n\n@NgModule({\n imports: [\n SharedModule,\n LooseComponentsModule,\n TrialInitiationModule,\n VaultFilterModule,\n OrganizationBadgeModule,\n OrganizationManageModule,\n OrganizationUserModule,\n OrganizationCreateModule,\n LoginModule,\n ],\n exports: [\n SharedModule,\n LooseComponentsModule,\n TrialInitiationModule,\n VaultFilterModule,\n OrganizationBadgeModule,\n LoginModule,\n ],\n bootstrap: [],\n})\nexport class OssModule {}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nconst routes: Routes = [{ path: \"**\", redirectTo: \"\" }];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class WildcardRoutingModule {}\n","export class ProviderAddOrganizationRequest {\n organizationId: string;\n key: string;\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { ProviderAddOrganizationRequest } from \"@bitwarden/common/models/request/provider/provider-add-organization.request\";\n\n@Injectable()\nexport class WebProviderService {\n constructor(\n private cryptoService: CryptoService,\n private syncService: SyncService,\n private apiService: ApiService\n ) {}\n\n async addOrganizationToProvider(providerId: string, organizationId: string) {\n const orgKey = await this.cryptoService.getOrgKey(organizationId);\n const providerKey = await this.cryptoService.getProviderKey(providerId);\n\n const encryptedOrgKey = await this.cryptoService.encrypt(orgKey.key, providerKey);\n\n const request = new ProviderAddOrganizationRequest();\n request.organizationId = organizationId;\n request.key = encryptedOrgKey.encryptedString;\n\n const response = await this.apiService.postProviderAddOrganization(providerId, request);\n await this.syncService.fullSync(true);\n return response;\n }\n\n async detachOrganizastion(providerId: string, organizationId: string): Promise {\n await this.apiService.deleteProviderOrganization(providerId, organizationId);\n await this.syncService.fullSync(true);\n }\n}\n","
\n
\n
\n
\n

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

\n \n ×\n \n
\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n \n \n \n \n \n \n \n
\n \n \n {{ o.name }}\n \n \n Add\n \n
\n
\n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\n\nimport { WebProviderService } from \"../services/webProvider.service\";\n\n@Component({\n selector: \"provider-add-organization\",\n templateUrl: \"add-organization.component.html\",\n})\nexport class AddOrganizationComponent implements OnInit {\n @Input() providerId: string;\n @Input() organizations: Organization[];\n @Output() onAddedOrganization = new EventEmitter();\n\n provider: Provider;\n formPromise: Promise;\n loading = true;\n\n constructor(\n private providerService: ProviderService,\n private webProviderService: WebProviderService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private validationService: ValidationService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n if (this.providerId == null) {\n return;\n }\n\n this.provider = await this.providerService.get(this.providerId);\n\n this.loading = false;\n }\n\n async add(organization: Organization) {\n if (this.formPromise) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"addOrganizationConfirmation\", organization.name, this.provider.name),\n organization.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n try {\n this.formPromise = this.webProviderService.addOrganizationToProvider(\n this.providerId,\n organization.id\n );\n await this.formPromise;\n } catch (e) {\n this.validationService.showError(e);\n return;\n } finally {\n this.formPromise = null;\n }\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"organizationJoinedProvider\")\n );\n this.onAddedOrganization.emit();\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router } from \"@angular/router\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\n\n@Injectable()\nexport class ProviderPermissionsGuard implements CanActivate {\n constructor(\n private providerService: ProviderService,\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const provider = await this.providerService.get(route.params.providerId);\n if (provider == null) {\n return this.router.createUrlTree([\"/\"]);\n }\n\n if (!provider.isProviderAdmin && !provider.enabled) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"providerIsDisabled\"));\n return this.router.createUrlTree([\"/\"]);\n }\n\n const permissionsCallback: (provider: Provider) => boolean = route.data?.providerPermissions;\n const hasSpecifiedPermissions = permissionsCallback == null || permissionsCallback(provider);\n\n if (!hasSpecifiedPermissions) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"accessDenied\"));\n return this.router.createUrlTree([\"/providers\", provider.id]);\n }\n\n return true;\n }\n}\n","\n
\n
\n

{{ \"providers\" | i18n }}

\n
\n

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

\n \n \n \n \n \n \n \n \n
\n \n \n {{ p.name }}\n \n \n {{ \"providerIsDisabled\" | i18n }}\n \n
\n
\n
\n\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\n\n@Component({\n selector: \"app-providers\",\n templateUrl: \"providers.component.html\",\n})\nexport class ProvidersComponent implements OnInit {\n providers: Provider[];\n loaded = false;\n actionPromise: Promise;\n\n constructor(private providerService: ProviderService, private i18nService: I18nService) {}\n\n async ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n await this.load();\n }\n\n async load() {\n const providers = await this.providerService.getAll();\n providers.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n this.providers = providers;\n this.loaded = true;\n }\n}\n","
\n

{{ \"clients\" | i18n }}

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

{{ \"noClientsInList\" | i18n }}

\n \n \n \n \n {{ \"name\" | i18n }}\n {{ \"numberOfUsers\" | i18n }}\n {{ \"billingPlan\" | i18n }}\n \n \n \n \n \n \n \n \n \n {{ o.organizationName }}\n \n \n {{ o.userCount }}\n / {{ o.seats }}\n \n \n {{ o.plan }}\n \n \n \n \n \n \n \n \n\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { PlanType } from \"@bitwarden/common/enums/planType\";\nimport { ProviderUserType } from \"@bitwarden/common/enums/providerUserType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { ProviderOrganizationOrganizationDetailsResponse } from \"@bitwarden/common/models/response/provider/provider-organization.response\";\n\nimport { WebProviderService } from \"../services/webProvider.service\";\n\nimport { AddOrganizationComponent } from \"./add-organization.component\";\n\nconst DisallowedPlanTypes = [\n PlanType.Free,\n PlanType.FamiliesAnnually2019,\n PlanType.FamiliesAnnually,\n];\n\n@Component({\n templateUrl: \"clients.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class ClientsComponent implements OnInit {\n @ViewChild(\"add\", { read: ViewContainerRef, static: true }) addModalRef: ViewContainerRef;\n\n providerId: string;\n searchText: string;\n addableOrganizations: Organization[];\n loading = true;\n manageOrganizations = false;\n showAddExisting = false;\n\n clients: ProviderOrganizationOrganizationDetailsResponse[];\n pagedClients: ProviderOrganizationOrganizationDetailsResponse[];\n\n protected didScroll = false;\n protected pageSize = 100;\n protected actionPromise: Promise;\n private pagedClientsCount = 0;\n\n constructor(\n private route: ActivatedRoute,\n private providerService: ProviderService,\n private apiService: ApiService,\n private searchService: SearchService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private validationService: ValidationService,\n private webProviderService: WebProviderService,\n private logService: LogService,\n private modalService: ModalService,\n private organizationService: OrganizationService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n\n await this.load();\n\n /* eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe */\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n this.searchText = qParams.search;\n });\n });\n }\n\n async load() {\n const response = await this.apiService.getProviderClients(this.providerId);\n this.clients = response.data != null && response.data.length > 0 ? response.data : [];\n this.manageOrganizations =\n (await this.providerService.get(this.providerId)).type === ProviderUserType.ProviderAdmin;\n const candidateOrgs = (await this.organizationService.getAll()).filter(\n (o) => o.isOwner && o.providerId == null\n );\n const allowedOrgsIds = await Promise.all(\n candidateOrgs.map((o) => this.organizationApiService.get(o.id))\n ).then((orgs) =>\n orgs.filter((o) => !DisallowedPlanTypes.includes(o.planType)).map((o) => o.id)\n );\n this.addableOrganizations = candidateOrgs.filter((o) => allowedOrgsIds.includes(o.id));\n\n this.showAddExisting = this.addableOrganizations.length !== 0;\n this.loading = false;\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.clients && this.clients.length > this.pageSize;\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n async resetPaging() {\n this.pagedClients = [];\n this.loadMore();\n }\n\n loadMore() {\n if (!this.clients || this.clients.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedClients.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedClientsCount > this.pageSize) {\n pagedSize = this.pagedClientsCount;\n }\n if (this.clients.length > pagedLength) {\n this.pagedClients = this.pagedClients.concat(\n this.clients.slice(pagedLength, pagedLength + pagedSize)\n );\n }\n this.pagedClientsCount = this.pagedClients.length;\n this.didScroll = this.pagedClients.length > this.pageSize;\n }\n\n async addExistingOrganization() {\n const [modal] = await this.modalService.openViewRef(\n AddOrganizationComponent,\n this.addModalRef,\n (comp) => {\n comp.providerId = this.providerId;\n comp.organizations = this.addableOrganizations;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onAddedOrganization.subscribe(async () => {\n try {\n await this.load();\n modal.close();\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n });\n }\n );\n }\n\n async remove(organization: ProviderOrganizationOrganizationDetailsResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"detachOrganizationConfirmation\"),\n organization.organizationName,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n this.actionPromise = this.webProviderService.detachOrganizastion(\n this.providerId,\n organization.id\n );\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"detachedOrganization\", organization.organizationName)\n );\n await this.load();\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n}\n","import { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { OrganizationPlansComponent } from \"@bitwarden/web-vault/app/settings/organization-plans.component\";\n\n@Component({\n selector: \"app-create-organization\",\n templateUrl: \"create-organization.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class CreateOrganizationComponent implements OnInit {\n @ViewChild(OrganizationPlansComponent, { static: true })\n orgPlansComponent: OrganizationPlansComponent;\n\n providerId: string;\n\n constructor(private route: ActivatedRoute) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n });\n }\n}\n","
\n

{{ \"newClientOrganization\" | i18n }}

\n
\n

{{ \"newClientOrganizationDesc\" | i18n }}

\n\n","export class ProviderUserAcceptRequest {\n token: string;\n}\n","
\n
\n \"Bitwarden\"\n

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

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

{{ \"joinProvider\" | i18n }}

\n
\n
\n

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

\n

{{ \"joinProviderDesc\" | i18n }}

\n
\n
\n \n {{ \"logIn\" | i18n }}\n \n \n {{ \"createAccount\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { ProviderUserAcceptRequest } from \"@bitwarden/common/models/request/provider/provider-user-accept.request\";\nimport { BaseAcceptComponent } from \"@bitwarden/web-vault/app/common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-provider\",\n templateUrl: \"accept-provider.component.html\",\n})\nexport class AcceptProviderComponent extends BaseAcceptComponent {\n providerName: string;\n\n failedMessage = \"providerInviteAcceptFailed\";\n\n requiredParameters = [\"providerId\", \"providerUserId\", \"token\"];\n\n constructor(\n router: Router,\n i18nService: I18nService,\n route: ActivatedRoute,\n stateService: StateService,\n private apiService: ApiService,\n platformUtilService: PlatformUtilsService\n ) {\n super(router, platformUtilService, i18nService, route, stateService);\n }\n\n async authedHandler(qParams: Params) {\n const request = new ProviderUserAcceptRequest();\n request.token = qParams.token;\n\n await this.apiService.postProviderUserAccept(\n qParams.providerId,\n qParams.providerUserId,\n request\n );\n this.platformUtilService.showToast(\n \"success\",\n this.i18nService.t(\"inviteAccepted\"),\n this.i18nService.t(\"providerInviteAcceptedDesc\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"/vault\"]);\n }\n\n async unauthedHandler(qParams: Params) {\n this.providerName = qParams.providerName;\n }\n}\n","
\n

{{ \"eventLogs\" | i18n }}

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

{{ \"noEventsInList\" | i18n }}

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"timestamp\" | i18n }}\n {{ \"device\" | i18n }}\n {{ \"user\" | i18n }}{{ \"event\" | i18n }}
{{ e.date | date: \"medium\" }}\n \n {{ e.appName }}, {{ e.ip }}\n \n {{ e.userName }}\n
\n \n \n {{ \"loadMore\" | i18n }}\n \n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { ExportService } from \"@bitwarden/common/abstractions/export.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { EventResponse } from \"@bitwarden/common/models/response/event.response\";\nimport { BaseEventsComponent } from \"@bitwarden/web-vault/app/common/base.events.component\";\nimport { EventService } from \"@bitwarden/web-vault/app/core\";\n\n@Component({\n selector: \"provider-events\",\n templateUrl: \"events.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class EventsComponent extends BaseEventsComponent implements OnInit {\n exportFileName = \"provider-events\";\n providerId: string;\n\n private providerUsersUserIdMap = new Map();\n private providerUsersIdMap = new Map();\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n eventService: EventService,\n i18nService: I18nService,\n private providerService: ProviderService,\n exportService: ExportService,\n platformUtilsService: PlatformUtilsService,\n private router: Router,\n logService: LogService,\n private userNamePipe: UserNamePipe,\n fileDownloadService: FileDownloadService\n ) {\n super(\n eventService,\n i18nService,\n exportService,\n platformUtilsService,\n logService,\n fileDownloadService\n );\n }\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n const provider = await this.providerService.get(this.providerId);\n if (provider == null || !provider.useEvents) {\n this.router.navigate([\"/providers\", this.providerId]);\n return;\n }\n await this.load();\n });\n }\n\n async load() {\n const response = await this.apiService.getProviderUsers(this.providerId);\n response.data.forEach((u) => {\n const name = this.userNamePipe.transform(u);\n this.providerUsersIdMap.set(u.id, { name: name, email: u.email });\n this.providerUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n });\n await this.loadEvents(true);\n this.loaded = true;\n }\n\n protected requestEvents(startDate: string, endDate: string, continuationToken: string) {\n return this.apiService.getEventsProvider(\n this.providerId,\n startDate,\n endDate,\n continuationToken\n );\n }\n\n protected getUserName(r: EventResponse, userId: string) {\n if (r.installationId != null) {\n return `Installation: ${r.installationId}`;\n }\n\n if (userId != null && this.providerUsersUserIdMap.has(userId)) {\n return this.providerUsersUserIdMap.get(userId);\n }\n\n return null;\n }\n}\n","
\n
\n
\n
\n
{{ \"manage\" | i18n }}
\n
\n \n {{ \"people\" | i18n }}\n \n \n {{ \"eventLogs\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\n\n@Component({\n selector: \"provider-manage\",\n templateUrl: \"manage.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class ManageComponent implements OnInit {\n provider: Provider;\n accessEvents = false;\n\n constructor(private route: ActivatedRoute, private providerService: ProviderService) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.params.subscribe(async (params) => {\n this.provider = await this.providerService.get(params.providerId);\n this.accessEvents = this.provider.useEvents;\n });\n }\n}\n","export class ProviderUserBulkRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","export class ProviderUserConfirmRequest {\n key: string;\n}\n","type ProviderUserBulkRequestEntry = {\n id: string;\n key: string;\n};\n\nexport class ProviderUserBulkConfirmRequest {\n keys: ProviderUserBulkRequestEntry[];\n\n constructor(keys: ProviderUserBulkRequestEntry[]) {\n this.keys = keys;\n }\n}\n","import { Component, Input } from \"@angular/core\";\n\nimport { ProviderUserStatusType } from \"@bitwarden/common/enums/providerUserStatusType\";\nimport { ProviderUserBulkConfirmRequest } from \"@bitwarden/common/models/request/provider/provider-user-bulk-confirm.request\";\nimport { ProviderUserBulkRequest } from \"@bitwarden/common/models/request/provider/provider-user-bulk.request\";\nimport { BulkConfirmComponent as OrganizationBulkConfirmComponent } from \"@bitwarden/web-vault/app/organizations/manage/bulk/bulk-confirm.component\";\nimport { BulkUserDetails } from \"@bitwarden/web-vault/app/organizations/manage/bulk/bulk-status.component\";\n\n@Component({\n templateUrl:\n \"../../../../../../../apps/web/src/app/organizations/manage/bulk/bulk-confirm.component.html\",\n})\nexport class BulkConfirmComponent extends OrganizationBulkConfirmComponent {\n @Input() providerId: string;\n\n protected isAccepted(user: BulkUserDetails) {\n return user.status === ProviderUserStatusType.Accepted;\n }\n\n protected async getPublicKeys() {\n const request = new ProviderUserBulkRequest(this.filteredUsers.map((user) => user.id));\n return await this.apiService.postProviderUsersPublicKey(this.providerId, request);\n }\n\n protected getCryptoKey() {\n return this.cryptoService.getProviderKey(this.providerId);\n }\n\n protected async postConfirmRequest(userIdsWithKeys: any[]) {\n const request = new ProviderUserBulkConfirmRequest(userIdsWithKeys);\n return await this.apiService.postProviderUserBulkConfirm(this.providerId, request);\n }\n}\n","import { Component, Input } from \"@angular/core\";\n\nimport { ProviderUserBulkRequest } from \"@bitwarden/common/models/request/provider/provider-user-bulk.request\";\nimport { BulkRemoveComponent as OrganizationBulkRemoveComponent } from \"@bitwarden/web-vault/app/organizations/manage/bulk/bulk-remove.component\";\n\n@Component({\n templateUrl:\n \"../../../../../../../apps/web/src/app/organizations/manage/bulk/bulk-remove.component.html\",\n})\nexport class BulkRemoveComponent extends OrganizationBulkRemoveComponent {\n @Input() providerId: string;\n\n async deleteUsers() {\n const request = new ProviderUserBulkRequest(this.users.map((user) => user.id));\n return await this.apiService.deleteManyProviderUsers(this.providerId, request);\n }\n\n protected get removeUsersWarning() {\n return this.i18nService.t(\"removeUsersWarning\");\n }\n}\n","import { ProviderUserType } from \"../../../enums/providerUserType\";\n\nexport class ProviderUserInviteRequest {\n emails: string[] = [];\n type: ProviderUserType;\n}\n","import { ProviderUserType } from \"../../../enums/providerUserType\";\n\nexport class ProviderUserUpdateRequest {\n type: ProviderUserType;\n}\n","
\n
\n \n
\n

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

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

{{ \"providerInviteUserDesc\" | i18n }}

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

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

\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderUserType } from \"@bitwarden/common/enums/providerUserType\";\nimport { PermissionsApi } from \"@bitwarden/common/models/api/permissions.api\";\nimport { ProviderUserInviteRequest } from \"@bitwarden/common/models/request/provider/provider-user-invite.request\";\nimport { ProviderUserUpdateRequest } from \"@bitwarden/common/models/request/provider/provider-user-update.request\";\n\n@Component({\n selector: \"provider-user-add-edit\",\n templateUrl: \"user-add-edit.component.html\",\n})\nexport class UserAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() providerUserId: string;\n @Input() providerId: string;\n @Output() onSavedUser = new EventEmitter();\n @Output() onDeletedUser = new EventEmitter();\n\n loading = true;\n editMode = false;\n title: string;\n emails: string;\n type: ProviderUserType = ProviderUserType.ServiceUser;\n permissions = new PermissionsApi();\n showCustom = false;\n access: \"all\" | \"selected\" = \"selected\";\n formPromise: Promise;\n deletePromise: Promise;\n userType = ProviderUserType;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.editMode = this.loading = this.providerUserId != null;\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editUser\");\n try {\n const user = await this.apiService.getProviderUser(this.providerId, this.providerUserId);\n this.type = user.type;\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"inviteUser\");\n }\n\n this.loading = false;\n }\n\n async submit() {\n try {\n if (this.editMode) {\n const request = new ProviderUserUpdateRequest();\n request.type = this.type;\n this.formPromise = this.apiService.putProviderUser(\n this.providerId,\n this.providerUserId,\n request\n );\n } else {\n const request = new ProviderUserInviteRequest();\n request.emails = this.emails.trim().split(/\\s*,\\s*/);\n request.type = this.type;\n this.formPromise = this.apiService.postProviderUserInvite(this.providerId, request);\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedUserId\" : \"invitedUsers\", this.name)\n );\n this.onSavedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removeUserConfirmation\"),\n this.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteProviderUser(this.providerId, this.providerUserId);\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedUserId\", this.name)\n );\n this.onDeletedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n

{{ \"people\" | i18n }}

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

{{ \"noUsersInList\" | i18n }}

\n \n \n {{ \"providerUsersNeedConfirmed\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n \n {{ u.email }}\n {{\n \"invited\" | i18n\n }}\n {{\n \"accepted\" | i18n\n }}\n {{ u.name }}\n \n \n \n \n {{ \"userUsingTwoStep\" | i18n }}\n \n \n \n {{ \"providerAdmin\" | i18n }}\n {{ \"serviceUser\" | i18n }}\n {{ \"custom\" | i18n }}\n \n \n
\n \n \n \n
\n \n \n {{ \"resendInvitation\" | i18n }}\n \n \n \n {{ \"confirm\" | i18n }}\n \n \n \n {{ \"groups\" | i18n }}\n \n \n \n {{ \"eventLogs\" | i18n }}\n \n \n \n {{ \"remove\" | i18n }}\n \n
\n
\n \n \n \n \n
\n\n\n\n\n\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { ProviderUserStatusType } from \"@bitwarden/common/enums/providerUserStatusType\";\nimport { ProviderUserType } from \"@bitwarden/common/enums/providerUserType\";\nimport { ProviderUserBulkRequest } from \"@bitwarden/common/models/request/provider/provider-user-bulk.request\";\nimport { ProviderUserConfirmRequest } from \"@bitwarden/common/models/request/provider/provider-user-confirm.request\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { ProviderUserBulkResponse } from \"@bitwarden/common/models/response/provider/provider-user-bulk.response\";\nimport { ProviderUserUserDetailsResponse } from \"@bitwarden/common/models/response/provider/provider-user.response\";\nimport { BasePeopleComponent } from \"@bitwarden/web-vault/app/common/base.people.component\";\nimport { BulkStatusComponent } from \"@bitwarden/web-vault/app/organizations/manage/bulk/bulk-status.component\";\nimport { EntityEventsComponent } from \"@bitwarden/web-vault/app/organizations/manage/entity-events.component\";\n\nimport { BulkConfirmComponent } from \"./bulk/bulk-confirm.component\";\nimport { BulkRemoveComponent } from \"./bulk/bulk-remove.component\";\nimport { UserAddEditComponent } from \"./user-add-edit.component\";\n\n@Component({\n selector: \"provider-people\",\n templateUrl: \"people.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class PeopleComponent\n extends BasePeopleComponent\n implements OnInit\n{\n @ViewChild(\"addEdit\", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild(\"groupsTemplate\", { read: ViewContainerRef, static: true })\n groupsModalRef: ViewContainerRef;\n @ViewChild(\"eventsTemplate\", { read: ViewContainerRef, static: true })\n eventsModalRef: ViewContainerRef;\n @ViewChild(\"bulkStatusTemplate\", { read: ViewContainerRef, static: true })\n bulkStatusModalRef: ViewContainerRef;\n @ViewChild(\"bulkConfirmTemplate\", { read: ViewContainerRef, static: true })\n bulkConfirmModalRef: ViewContainerRef;\n @ViewChild(\"bulkRemoveTemplate\", { read: ViewContainerRef, static: true })\n bulkRemoveModalRef: ViewContainerRef;\n\n userType = ProviderUserType;\n userStatusType = ProviderUserStatusType;\n providerId: string;\n accessEvents = false;\n\n constructor(\n apiService: ApiService,\n private route: ActivatedRoute,\n i18nService: I18nService,\n modalService: ModalService,\n platformUtilsService: PlatformUtilsService,\n cryptoService: CryptoService,\n private router: Router,\n searchService: SearchService,\n validationService: ValidationService,\n logService: LogService,\n searchPipe: SearchPipe,\n userNamePipe: UserNamePipe,\n stateService: StateService,\n private providerService: ProviderService\n ) {\n super(\n apiService,\n searchService,\n i18nService,\n platformUtilsService,\n cryptoService,\n validationService,\n modalService,\n logService,\n searchPipe,\n userNamePipe,\n stateService\n );\n }\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n const provider = await this.providerService.get(this.providerId);\n\n if (!provider.canManageUsers) {\n this.router.navigate([\"../\"], { relativeTo: this.route });\n return;\n }\n\n this.accessEvents = provider.useEvents;\n\n await this.load();\n\n /* eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe, rxjs/no-nested-subscribe */\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n this.searchText = qParams.search;\n if (qParams.viewEvents != null) {\n const user = this.users.filter((u) => u.id === qParams.viewEvents);\n if (user.length > 0 && user[0].status === ProviderUserStatusType.Confirmed) {\n this.events(user[0]);\n }\n }\n });\n });\n }\n\n getUsers(): Promise> {\n return this.apiService.getProviderUsers(this.providerId);\n }\n\n deleteUser(id: string): Promise {\n return this.apiService.deleteProviderUser(this.providerId, id);\n }\n\n revokeUser(id: string): Promise {\n // Not implemented.\n return null;\n }\n\n restoreUser(id: string): Promise {\n // Not implemented.\n return null;\n }\n\n reinviteUser(id: string): Promise {\n return this.apiService.postProviderUserReinvite(this.providerId, id);\n }\n\n async confirmUser(user: ProviderUserUserDetailsResponse, publicKey: Uint8Array): Promise {\n const providerKey = await this.cryptoService.getProviderKey(this.providerId);\n const key = await this.cryptoService.rsaEncrypt(providerKey.key, publicKey.buffer);\n const request = new ProviderUserConfirmRequest();\n request.key = key.encryptedString;\n await this.apiService.postProviderUserConfirm(this.providerId, user.id, request);\n }\n\n async edit(user: ProviderUserUserDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n UserAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.providerId = this.providerId;\n comp.providerUserId = user != null ? user.id : null;\n comp.onSavedUser.subscribe(() => {\n modal.close();\n this.load();\n });\n comp.onDeletedUser.subscribe(() => {\n modal.close();\n this.removeUser(user);\n });\n }\n );\n }\n\n async events(user: ProviderUserUserDetailsResponse) {\n await this.modalService.openViewRef(EntityEventsComponent, this.eventsModalRef, (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.providerId = this.providerId;\n comp.entityId = user.id;\n comp.showUser = false;\n comp.entity = \"user\";\n });\n }\n\n async bulkRemove() {\n if (this.actionPromise != null) {\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkRemoveComponent,\n this.bulkRemoveModalRef,\n (comp) => {\n comp.providerId = this.providerId;\n comp.users = this.getCheckedUsers();\n }\n );\n\n await modal.onClosedPromise();\n await this.load();\n }\n\n async bulkReinvite() {\n if (this.actionPromise != null) {\n return;\n }\n\n const users = this.getCheckedUsers();\n const filteredUsers = users.filter((u) => u.status === ProviderUserStatusType.Invited);\n\n if (filteredUsers.length <= 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"noSelectedUsersApplicable\")\n );\n return;\n }\n\n try {\n const request = new ProviderUserBulkRequest(filteredUsers.map((user) => user.id));\n const response = this.apiService.postManyProviderUserReinvite(this.providerId, request);\n this.showBulkStatus(\n users,\n filteredUsers,\n response,\n this.i18nService.t(\"bulkReinviteMessage\")\n );\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async bulkConfirm() {\n if (this.actionPromise != null) {\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkConfirmComponent,\n this.bulkConfirmModalRef,\n (comp) => {\n comp.providerId = this.providerId;\n comp.users = this.getCheckedUsers();\n }\n );\n\n await modal.onClosedPromise();\n await this.load();\n }\n\n private async showBulkStatus(\n users: ProviderUserUserDetailsResponse[],\n filteredUsers: ProviderUserUserDetailsResponse[],\n request: Promise>,\n successfullMessage: string\n ) {\n const [modal, childComponent] = await this.modalService.openViewRef(\n BulkStatusComponent,\n this.bulkStatusModalRef,\n (comp) => {\n comp.loading = true;\n }\n );\n\n // Workaround to handle closing the modal shortly after it has been opened\n let close = false;\n modal.onShown.subscribe(() => {\n if (close) {\n modal.close();\n }\n });\n\n try {\n const response = await request;\n\n if (modal) {\n const keyedErrors: any = response.data\n .filter((r) => r.error !== \"\")\n .reduce((a, x) => ({ ...a, [x.id]: x.error }), {});\n const keyedFilteredUsers: any = filteredUsers.reduce((a, x) => ({ ...a, [x.id]: x }), {});\n\n childComponent.users = users.map((user) => {\n let message = keyedErrors[user.id] ?? successfullMessage;\n // eslint-disable-next-line\n if (!keyedFilteredUsers.hasOwnProperty(user.id)) {\n message = this.i18nService.t(\"bulkFilteredMessage\");\n }\n\n return {\n user: user,\n error: keyedErrors.hasOwnProperty(user.id), // eslint-disable-line\n message: message,\n };\n });\n childComponent.loading = false;\n }\n } catch {\n close = true;\n modal.close();\n }\n }\n}\n","\n
\n
\n
\n
\n \n
\n {{ provider.name }}\n {{ \"provider\" | i18n }}\n
\n
\n
\n \n {{ \"providerIsDisabled\" | i18n }}\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\n\n@Component({\n selector: \"providers-layout\",\n templateUrl: \"providers-layout.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class ProvidersLayoutComponent {\n provider: Provider;\n private providerId: string;\n\n constructor(private route: ActivatedRoute, private providerService: ProviderService) {}\n\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n await this.load();\n });\n }\n\n async load() {\n this.provider = await this.providerService.get(this.providerId);\n }\n\n get showMenuBar() {\n return this.showManageTab || this.showSettingsTab;\n }\n\n get showManageTab() {\n return this.provider.canManageUsers || this.provider.canAccessEventLogs;\n }\n\n get showSettingsTab() {\n return this.provider.isProviderAdmin;\n }\n\n get manageRoute(): string {\n switch (true) {\n case this.provider.canManageUsers:\n return \"manage/people\";\n case this.provider.canAccessEventLogs:\n return \"manage/events\";\n }\n }\n}\n","export class ProviderUpdateRequest {\n name: string;\n businessName: string;\n billingEmail: string;\n}\n","
\n

{{ \"myProvider\" | i18n }}

\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n
\n \n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { ProviderUpdateRequest } from \"@bitwarden/common/models/request/provider/provider-update.request\";\nimport { ProviderResponse } from \"@bitwarden/common/models/response/provider/provider.response\";\n\n@Component({\n selector: \"provider-account\",\n templateUrl: \"account.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class AccountComponent {\n selfHosted = false;\n loading = true;\n provider: ProviderResponse;\n formPromise: Promise;\n taxFormPromise: Promise;\n\n private providerId: string;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private syncService: SyncService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n try {\n this.provider = await this.apiService.getProvider(this.providerId);\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n });\n this.loading = false;\n }\n\n async submit() {\n try {\n const request = new ProviderUpdateRequest();\n request.name = this.provider.name;\n request.businessName = this.provider.businessName;\n request.billingEmail = this.provider.billingEmail;\n\n this.formPromise = this.apiService.putProvider(this.providerId, request).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"providerUpdated\"));\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n }\n}\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\n\n@Component({\n selector: \"provider-settings\",\n templateUrl: \"settings.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class SettingsComponent {\n constructor(private route: ActivatedRoute, private providerService: ProviderService) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.params.subscribe(async (params) => {\n await this.providerService.get(params.providerId);\n });\n }\n}\n","
\n
\n
\n
\n
{{ \"settings\" | i18n }}
\n \n
\n
\n
\n \n
\n
\n
\n","
\n
\n \"Bitwarden\"\n

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

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

{{ \"setupProvider\" | i18n }}

\n
\n
\n

{{ \"setupProviderLoginDesc\" | i18n }}

\n
\n
\n \n {{ \"logIn\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { Params } from \"@angular/router\";\n\nimport { BaseAcceptComponent } from \"@bitwarden/web-vault/app/common/base.accept.component\";\n\n@Component({\n selector: \"app-setup-provider\",\n templateUrl: \"setup-provider.component.html\",\n})\nexport class SetupProviderComponent extends BaseAcceptComponent {\n failedShortMessage = \"inviteAcceptFailedShort\";\n failedMessage = \"inviteAcceptFailed\";\n\n requiredParameters = [\"providerId\", \"email\", \"token\"];\n\n async authedHandler(qParams: Params) {\n this.router.navigate([\"/providers/setup\"], { queryParams: qParams });\n }\n\n async unauthedHandler(qParams: Params) {\n // Empty\n }\n}\n","export class ProviderSetupRequest {\n name: string;\n businessName: string;\n billingEmail: string;\n token: string;\n key: string;\n}\n","\n
\n
\n

{{ \"setupProvider\" | i18n }}

\n
\n

{{ \"setupProviderDesc\" | i18n }}

\n\n
\n

{{ \"generalInformation\" | i18n }}

\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n \n \n
\n
\n
\n\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { ProviderSetupRequest } from \"@bitwarden/common/models/request/provider/provider-setup.request\";\n\n@Component({\n selector: \"provider-setup\",\n templateUrl: \"setup.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class SetupComponent implements OnInit {\n loading = true;\n authed = false;\n email: string;\n formPromise: Promise;\n\n providerId: string;\n token: string;\n name: string;\n billingEmail: string;\n\n constructor(\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private cryptoService: CryptoService,\n private apiService: ApiService,\n private syncService: SyncService,\n private validationService: ValidationService\n ) {}\n\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n const error = qParams.providerId == null || qParams.email == null || qParams.token == null;\n\n if (error) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"emergencyInviteAcceptFailed\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"/\"]);\n return;\n }\n\n this.providerId = qParams.providerId;\n this.token = qParams.token;\n\n // Check if provider exists, redirect if it does\n try {\n const provider = await this.apiService.getProvider(this.providerId);\n if (provider.name != null) {\n this.router.navigate([\"/providers\", provider.id], { replaceUrl: true });\n }\n } catch (e) {\n this.validationService.showError(e);\n this.router.navigate([\"/\"]);\n }\n });\n }\n\n async submit() {\n this.formPromise = this.doSubmit();\n await this.formPromise;\n this.formPromise = null;\n }\n\n async doSubmit() {\n try {\n const shareKey = await this.cryptoService.makeShareKey();\n const key = shareKey[0].encryptedString;\n\n const request = new ProviderSetupRequest();\n request.name = this.name;\n request.billingEmail = this.billingEmail;\n request.token = this.token;\n request.key = key;\n\n const provider = await this.apiService.postProviderSetup(this.providerId, request);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"providerSetup\"));\n await this.syncService.fullSync(true);\n\n this.router.navigate([\"/providers\", provider.id]);\n } catch (e) {\n this.validationService.showError(e);\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"@bitwarden/angular/guards/auth.guard\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\nimport { FrontendLayoutComponent } from \"@bitwarden/web-vault/app/layouts/frontend-layout.component\";\nimport { ProvidersComponent } from \"@bitwarden/web-vault/app/providers/providers.component\";\n\nimport { ClientsComponent } from \"./clients/clients.component\";\nimport { CreateOrganizationComponent } from \"./clients/create-organization.component\";\nimport { ProviderPermissionsGuard } from \"./guards/provider-permissions.guard\";\nimport { AcceptProviderComponent } from \"./manage/accept-provider.component\";\nimport { EventsComponent } from \"./manage/events.component\";\nimport { ManageComponent } from \"./manage/manage.component\";\nimport { PeopleComponent } from \"./manage/people.component\";\nimport { ProvidersLayoutComponent } from \"./providers-layout.component\";\nimport { AccountComponent } from \"./settings/account.component\";\nimport { SettingsComponent } from \"./settings/settings.component\";\nimport { SetupProviderComponent } from \"./setup/setup-provider.component\";\nimport { SetupComponent } from \"./setup/setup.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n canActivate: [AuthGuard],\n component: ProvidersComponent,\n },\n {\n path: \"\",\n component: FrontendLayoutComponent,\n children: [\n {\n path: \"setup-provider\",\n component: SetupProviderComponent,\n data: { titleId: \"setupProvider\" },\n },\n {\n path: \"accept-provider\",\n component: AcceptProviderComponent,\n data: { titleId: \"acceptProvider\" },\n },\n ],\n },\n {\n path: \"\",\n canActivate: [AuthGuard],\n children: [\n {\n path: \"setup\",\n component: SetupComponent,\n },\n {\n path: \":providerId\",\n component: ProvidersLayoutComponent,\n canActivate: [ProviderPermissionsGuard],\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"clients\" },\n { path: \"clients/create\", component: CreateOrganizationComponent },\n { path: \"clients\", component: ClientsComponent, data: { titleId: \"clients\" } },\n {\n path: \"manage\",\n component: ManageComponent,\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n redirectTo: \"people\",\n },\n {\n path: \"people\",\n component: PeopleComponent,\n canActivate: [ProviderPermissionsGuard],\n data: {\n titleId: \"people\",\n providerPermissions: (provider: Provider) => provider.canManageUsers,\n },\n },\n {\n path: \"events\",\n component: EventsComponent,\n canActivate: [ProviderPermissionsGuard],\n data: {\n titleId: \"eventLogs\",\n providerPermissions: (provider: Provider) => provider.canAccessEventLogs,\n },\n },\n ],\n },\n {\n path: \"settings\",\n component: SettingsComponent,\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n redirectTo: \"account\",\n },\n {\n path: \"account\",\n component: AccountComponent,\n canActivate: [ProviderPermissionsGuard],\n data: {\n titleId: \"myProvider\",\n providerPermissions: (provider: Provider) => provider.isProviderAdmin,\n },\n },\n ],\n },\n ],\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class ProvidersRoutingModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { ComponentFactoryResolver, NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport { JslibModule } from \"@bitwarden/angular/jslib.module\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { OssModule } from \"@bitwarden/web-vault/app/oss.module\";\n\nimport { AddOrganizationComponent } from \"./clients/add-organization.component\";\nimport { ClientsComponent } from \"./clients/clients.component\";\nimport { CreateOrganizationComponent } from \"./clients/create-organization.component\";\nimport { ProviderPermissionsGuard } from \"./guards/provider-permissions.guard\";\nimport { AcceptProviderComponent } from \"./manage/accept-provider.component\";\nimport { BulkConfirmComponent } from \"./manage/bulk/bulk-confirm.component\";\nimport { BulkRemoveComponent } from \"./manage/bulk/bulk-remove.component\";\nimport { EventsComponent } from \"./manage/events.component\";\nimport { ManageComponent } from \"./manage/manage.component\";\nimport { PeopleComponent } from \"./manage/people.component\";\nimport { UserAddEditComponent } from \"./manage/user-add-edit.component\";\nimport { ProvidersLayoutComponent } from \"./providers-layout.component\";\nimport { ProvidersRoutingModule } from \"./providers-routing.module\";\nimport { WebProviderService } from \"./services/webProvider.service\";\nimport { AccountComponent } from \"./settings/account.component\";\nimport { SettingsComponent } from \"./settings/settings.component\";\nimport { SetupProviderComponent } from \"./setup/setup-provider.component\";\nimport { SetupComponent } from \"./setup/setup.component\";\n\n@NgModule({\n imports: [CommonModule, FormsModule, OssModule, JslibModule, ProvidersRoutingModule],\n declarations: [\n AcceptProviderComponent,\n AccountComponent,\n AddOrganizationComponent,\n BulkConfirmComponent,\n BulkRemoveComponent,\n ClientsComponent,\n CreateOrganizationComponent,\n EventsComponent,\n ManageComponent,\n PeopleComponent,\n ProvidersLayoutComponent,\n SettingsComponent,\n SetupComponent,\n SetupProviderComponent,\n UserAddEditComponent,\n ],\n providers: [WebProviderService, ProviderPermissionsGuard],\n})\nexport class ProvidersModule {\n constructor(modalService: ModalService, componentFactoryResolver: ComponentFactoryResolver) {\n modalService.registerComponentFactoryResolver(\n AddOrganizationComponent,\n componentFactoryResolver\n );\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { ProvidersModule } from \"./providers/providers.module\";\n\nconst routes: Routes = [\n {\n path: \"providers\",\n loadChildren: () => ProvidersModule,\n },\n {\n path: \"sm\",\n loadChildren: async () => (await import(\"./sm/sm.module\")).SecretsManagerModule,\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class AppRoutingModule {}\n","import { DOCUMENT } from \"@angular/common\";\nimport { Component, Inject, NgZone, OnDestroy, OnInit, SecurityContext } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport * as jq from \"jquery\";\nimport { IndividualConfig, ToastrService } from \"ngx-toastr\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport Swal from \"sweetalert2\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EventService } from \"@bitwarden/common/abstractions/event.service\";\nimport { InternalFolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { NotificationsService } from \"@bitwarden/common/abstractions/notifications.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { InternalPolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { SettingsService } from \"@bitwarden/common/abstractions/settings.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/abstractions/sync/sync.service.abstraction\";\nimport { VaultTimeoutService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\n\nimport { PolicyListService, RouterService } from \"./core\";\nimport {\n DisableSendPolicy,\n MasterPasswordPolicy,\n PasswordGeneratorPolicy,\n PersonalOwnershipPolicy,\n RequireSsoPolicy,\n ResetPasswordPolicy,\n SendOptionsPolicy,\n SingleOrgPolicy,\n TwoFactorAuthenticationPolicy,\n} from \"./organizations/policies\";\n\nconst BroadcasterSubscriptionId = \"AppComponent\";\nconst IdleTimeout = 60000 * 10; // 10 minutes\n\n@Component({\n selector: \"app-root\",\n templateUrl: \"app.component.html\",\n})\nexport class AppComponent implements OnDestroy, OnInit {\n private lastActivity: number = null;\n private idleTimer: number = null;\n private isIdle = false;\n private destroy$ = new Subject();\n\n constructor(\n @Inject(DOCUMENT) private document: Document,\n private broadcasterService: BroadcasterService,\n private folderService: InternalFolderService,\n private settingsService: SettingsService,\n private syncService: SyncService,\n private passwordGenerationService: PasswordGenerationService,\n private cipherService: CipherService,\n private authService: AuthService,\n private router: Router,\n private toastrService: ToastrService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private ngZone: NgZone,\n private vaultTimeoutService: VaultTimeoutService,\n private cryptoService: CryptoService,\n private collectionService: CollectionService,\n private sanitizer: DomSanitizer,\n private searchService: SearchService,\n private notificationsService: NotificationsService,\n private routerService: RouterService,\n private stateService: StateService,\n private eventService: EventService,\n private policyService: InternalPolicyService,\n protected policyListService: PolicyListService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n ngOnInit() {\n this.i18nService.locale$.pipe(takeUntil(this.destroy$)).subscribe((locale) => {\n this.document.documentElement.lang = locale;\n });\n\n this.ngZone.runOutsideAngular(() => {\n window.onmousemove = () => this.recordActivity();\n window.onmousedown = () => this.recordActivity();\n window.ontouchstart = () => this.recordActivity();\n window.onclick = () => this.recordActivity();\n window.onscroll = () => this.recordActivity();\n window.onkeypress = () => this.recordActivity();\n });\n\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"loggedIn\":\n this.notificationsService.updateConnection(false);\n break;\n case \"loggedOut\":\n this.routerService.setPreviousUrl(null);\n this.notificationsService.updateConnection(false);\n break;\n case \"unlocked\":\n this.notificationsService.updateConnection(false);\n break;\n case \"authBlocked\":\n this.routerService.setPreviousUrl(message.url);\n this.router.navigate([\"/\"]);\n break;\n case \"logout\":\n this.logOut(!!message.expired);\n break;\n case \"lockVault\":\n await this.vaultTimeoutService.lock();\n break;\n case \"locked\":\n this.notificationsService.updateConnection(false);\n this.router.navigate([\"lock\"]);\n break;\n case \"lockedUrl\":\n this.routerService.setPreviousUrl(message.url);\n break;\n case \"syncStarted\":\n break;\n case \"syncCompleted\":\n break;\n case \"upgradeOrganization\": {\n const upgradeConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"upgradeOrganizationDesc\"),\n this.i18nService.t(\"upgradeOrganization\"),\n this.i18nService.t(\"upgradeOrganization\"),\n this.i18nService.t(\"cancel\")\n );\n if (upgradeConfirmed) {\n this.router.navigate([\n \"organizations\",\n message.organizationId,\n \"settings\",\n \"billing\",\n ]);\n }\n break;\n }\n case \"premiumRequired\": {\n const premiumConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"premiumRequiredDesc\"),\n this.i18nService.t(\"premiumRequired\"),\n this.i18nService.t(\"upgrade\"),\n this.i18nService.t(\"cancel\")\n );\n if (premiumConfirmed) {\n this.router.navigate([\"settings/subscription/premium\"]);\n }\n break;\n }\n case \"emailVerificationRequired\": {\n const emailVerificationConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"emailVerificationRequiredDesc\"),\n this.i18nService.t(\"emailVerificationRequired\"),\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"cancel\")\n );\n if (emailVerificationConfirmed) {\n this.platformUtilsService.launchUri(\n \"https://bitwarden.com/help/create-bitwarden-account/\"\n );\n }\n break;\n }\n case \"showToast\":\n this.showToast(message);\n break;\n case \"setFullWidth\":\n this.setFullWidth();\n break;\n case \"convertAccountToKeyConnector\":\n this.router.navigate([\"/remove-password\"]);\n break;\n default:\n break;\n }\n });\n });\n\n this.router.events.pipe(takeUntil(this.destroy$)).subscribe((event) => {\n if (event instanceof NavigationEnd) {\n const modals = Array.from(document.querySelectorAll(\".modal\"));\n for (const modal of modals) {\n (jq(modal) as any).modal(\"hide\");\n }\n\n if (document.querySelector(\".swal-modal\") != null) {\n Swal.close(undefined);\n }\n }\n });\n\n this.policyListService.addPolicies([\n new TwoFactorAuthenticationPolicy(),\n new MasterPasswordPolicy(),\n new ResetPasswordPolicy(),\n new PasswordGeneratorPolicy(),\n new SingleOrgPolicy(),\n new RequireSsoPolicy(),\n new PersonalOwnershipPolicy(),\n new DisableSendPolicy(),\n new SendOptionsPolicy(),\n ]);\n\n this.setFullWidth();\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async logOut(expired: boolean) {\n await this.eventService.uploadEvents();\n const userId = await this.stateService.getUserId();\n await Promise.all([\n this.eventService.clearEvents(),\n this.syncService.setLastSync(new Date(0)),\n this.cryptoService.clearKeys(),\n this.settingsService.clear(userId),\n this.cipherService.clear(userId),\n this.folderService.clear(userId),\n this.collectionService.clear(userId),\n this.policyService.clear(userId),\n this.passwordGenerationService.clear(),\n this.keyConnectorService.clear(),\n ]);\n\n this.searchService.clearIndex();\n this.authService.logOut(async () => {\n if (expired) {\n this.platformUtilsService.showToast(\n \"warning\",\n this.i18nService.t(\"loggedOut\"),\n this.i18nService.t(\"loginExpired\")\n );\n }\n\n await this.stateService.clean({ userId: userId });\n Swal.close();\n this.router.navigate([\"/\"]);\n });\n }\n\n private async recordActivity() {\n const now = new Date().getTime();\n if (this.lastActivity != null && now - this.lastActivity < 250) {\n return;\n }\n\n this.lastActivity = now;\n this.stateService.setLastActive(now);\n // Idle states\n if (this.isIdle) {\n this.isIdle = false;\n this.idleStateChanged();\n }\n if (this.idleTimer != null) {\n window.clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n this.idleTimer = window.setTimeout(() => {\n if (!this.isIdle) {\n this.isIdle = true;\n this.idleStateChanged();\n }\n }, IdleTimeout);\n }\n\n private showToast(msg: any) {\n let message = \"\";\n\n const options: Partial = {};\n\n if (typeof msg.text === \"string\") {\n message = msg.text;\n } else if (msg.text.length === 1) {\n message = msg.text[0];\n } else {\n msg.text.forEach(\n (t: string) =>\n (message += \"

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

\")\n );\n options.enableHtml = true;\n }\n if (msg.options != null) {\n if (msg.options.trustedHtml === true) {\n options.enableHtml = true;\n }\n if (msg.options.timeout != null && msg.options.timeout > 0) {\n options.timeOut = msg.options.timeout;\n }\n }\n\n this.toastrService.show(message, msg.title, options, \"toast-\" + msg.type);\n }\n\n private idleStateChanged() {\n if (this.isIdle) {\n this.notificationsService.disconnectFromInactivity();\n } else {\n this.notificationsService.reconnectFromActivity();\n }\n }\n\n private async setFullWidth() {\n const enableFullWidth = await this.stateService.getEnableFullWidth();\n if (enableFullWidth) {\n document.body.classList.add(\"full-width\");\n } else {\n document.body.classList.remove(\"full-width\");\n }\n }\n}\n","\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport {\n BasePolicy,\n BasePolicyComponent,\n} from \"@bitwarden/web-vault/app/organizations/policies/base-policy.component\";\n\nexport class DisablePersonalVaultExportPolicy extends BasePolicy {\n name = \"disablePersonalVaultExport\";\n description = \"disablePersonalVaultExportDesc\";\n type = PolicyType.DisablePersonalVaultExport;\n component = DisablePersonalVaultExportPolicyComponent;\n}\n\n@Component({\n selector: \"policy-disable-personal-vault-export\",\n templateUrl: \"disable-personal-vault-export.component.html\",\n})\nexport class DisablePersonalVaultExportPolicyComponent extends BasePolicyComponent {}\n","
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { PolicyRequest } from \"@bitwarden/common/models/request/policy.request\";\nimport {\n BasePolicy,\n BasePolicyComponent,\n} from \"@bitwarden/web-vault/app/organizations/policies/base-policy.component\";\n\nexport class MaximumVaultTimeoutPolicy extends BasePolicy {\n name = \"maximumVaultTimeout\";\n description = \"maximumVaultTimeoutDesc\";\n type = PolicyType.MaximumVaultTimeout;\n component = MaximumVaultTimeoutPolicyComponent;\n}\n\n@Component({\n selector: \"policy-maximum-timeout\",\n templateUrl: \"maximum-vault-timeout.component.html\",\n})\nexport class MaximumVaultTimeoutPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n hours: [null],\n minutes: [null],\n });\n\n constructor(private formBuilder: UntypedFormBuilder, private i18nService: I18nService) {\n super();\n }\n\n loadData() {\n const minutes = this.policyResponse.data?.minutes;\n\n if (minutes == null) {\n return;\n }\n\n this.data.patchValue({\n hours: Math.floor(minutes / 60),\n minutes: minutes % 60,\n });\n }\n\n buildRequestData() {\n if (this.data.value.hours == null && this.data.value.minutes == null) {\n return null;\n }\n\n return {\n minutes: this.data.value.hours * 60 + this.data.value.minutes,\n };\n }\n\n buildRequest(policiesEnabledMap: Map): Promise {\n const singleOrgEnabled = policiesEnabledMap.get(PolicyType.SingleOrg) ?? false;\n if (this.enabled.value && !singleOrgEnabled) {\n throw new Error(this.i18nService.t(\"requireSsoPolicyReqError\"));\n }\n\n const data = this.buildRequestData();\n if (data?.minutes == null || data?.minutes <= 0) {\n throw new Error(this.i18nService.t(\"invalidMaximumVaultTimeout\"));\n }\n\n return super.buildRequest(policiesEnabledMap);\n }\n}\n","\n {{ \"requireSsoPolicyReq\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n\n
\n
\n \n
\n
\n \n {{ \"hours\" | i18n }}\n
\n
\n \n {{ \"minutes\" | i18n }}\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { AppComponent as BaseAppComponent } from \"@bitwarden/web-vault/app/app.component\";\n\nimport { DisablePersonalVaultExportPolicy } from \"./policies/disable-personal-vault-export.component\";\nimport { MaximumVaultTimeoutPolicy } from \"./policies/maximum-vault-timeout.component\";\n\n@Component({\n selector: \"app-root\",\n templateUrl: \"../../../../apps/web/src/app/app.component.html\",\n})\nexport class AppComponent extends BaseAppComponent {\n ngOnInit() {\n super.ngOnInit();\n\n this.policyListService.addPolicies([\n new MaximumVaultTimeoutPolicy(),\n new DisablePersonalVaultExportPolicy(),\n ]);\n }\n}\n","import { ScimProviderType } from \"../../enums/scimProviderType\";\nimport { BaseResponse } from \"../response/base.response\";\n\nexport class ScimConfigApi extends BaseResponse {\n enabled: boolean;\n scimProvider: ScimProviderType;\n\n constructor(data: any) {\n super(data);\n if (data == null) {\n return;\n }\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.scimProvider = this.getResponseProperty(\"ScimProvider\");\n }\n}\n","import { ScimProviderType } from \"../../enums/scimProviderType\";\n\nexport class ScimConfigRequest {\n constructor(private enabled: boolean, private scimProvider: ScimProviderType = null) {}\n}\n","
\n

{{ \"scim\" | i18n }}

\n
\n\n

{{ \"scimDescription\" | i18n }}

\n\n
\n \n {{ \"loading\" | i18n }}\n
\n\n
\n
\n \n \n
\n {{ \"scimEnabledCheckboxDescHelpText\" | i18n }}\n
\n
\n
\n\n \n {{ \"scimUrl\" | i18n }}\n \n \n \n \n \n\n \n {{ \"scimApiKey\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n \n \n {{ \"scimApiKeyHelperText\" | i18n }}\n \n\n \n {{ \"save\" | i18n }}\n \n\n","import { Component, OnInit } from \"@angular/core\";\nimport { UntypedFormBuilder, FormControl } from \"@angular/forms\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { OrganizationApiKeyType } from \"@bitwarden/common/enums/organizationApiKeyType\";\nimport { OrganizationConnectionType } from \"@bitwarden/common/enums/organizationConnectionType\";\nimport { ScimConfigApi } from \"@bitwarden/common/models/api/scim-config.api\";\nimport { OrganizationApiKeyRequest } from \"@bitwarden/common/models/request/organization-api-key.request\";\nimport { OrganizationConnectionRequest } from \"@bitwarden/common/models/request/organization-connection.request\";\nimport { ScimConfigRequest } from \"@bitwarden/common/models/request/scim-config.request\";\nimport { ApiKeyResponse } from \"@bitwarden/common/models/response/api-key.response\";\nimport { OrganizationConnectionResponse } from \"@bitwarden/common/models/response/organization-connection.response\";\n\n@Component({\n selector: \"app-org-manage-scim\",\n templateUrl: \"scim.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class ScimComponent implements OnInit {\n loading = true;\n organizationId: string;\n existingConnectionId: string;\n formPromise: Promise>;\n rotatePromise: Promise;\n enabled = new FormControl(false);\n showScimSettings = false;\n showScimKey = false;\n\n formData = this.formBuilder.group({\n endpointUrl: new FormControl({ value: \"\", disabled: true }),\n clientSecret: new FormControl({ value: \"\", disabled: true }),\n });\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private route: ActivatedRoute,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private environmentService: EnvironmentService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n });\n }\n\n async load() {\n const connection = await this.apiService.getOrganizationConnection(\n this.organizationId,\n OrganizationConnectionType.Scim,\n ScimConfigApi\n );\n await this.setConnectionFormValues(connection);\n }\n\n async loadApiKey() {\n const apiKeyRequest = new OrganizationApiKeyRequest();\n apiKeyRequest.type = OrganizationApiKeyType.Scim;\n apiKeyRequest.masterPasswordHash = \"N/A\";\n const apiKeyResponse = await this.organizationApiService.getOrCreateApiKey(\n this.organizationId,\n apiKeyRequest\n );\n this.formData.setValue({\n endpointUrl: this.getScimEndpointUrl(),\n clientSecret: apiKeyResponse.apiKey,\n });\n }\n\n async copyScimUrl() {\n this.platformUtilsService.copyToClipboard(this.getScimEndpointUrl());\n }\n\n async rotateScimKey() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"rotateScimKeyWarning\"),\n this.i18nService.t(\"rotateScimKey\"),\n this.i18nService.t(\"rotateKey\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n const request = new OrganizationApiKeyRequest();\n request.type = OrganizationApiKeyType.Scim;\n request.masterPasswordHash = \"N/A\";\n\n this.rotatePromise = this.organizationApiService.rotateApiKey(this.organizationId, request);\n\n try {\n const response = await this.rotatePromise;\n this.formData.setValue({\n endpointUrl: this.getScimEndpointUrl(),\n clientSecret: response.apiKey,\n });\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"scimApiKeyRotated\"));\n } catch {\n // Logged by appApiAction, do nothing\n }\n\n this.rotatePromise = null;\n }\n\n async copyScimKey() {\n this.platformUtilsService.copyToClipboard(this.formData.get(\"clientSecret\").value);\n }\n\n async submit() {\n try {\n const request = new OrganizationConnectionRequest(\n this.organizationId,\n OrganizationConnectionType.Scim,\n true,\n new ScimConfigRequest(this.enabled.value)\n );\n if (this.existingConnectionId == null) {\n this.formPromise = this.apiService.createOrganizationConnection(request, ScimConfigApi);\n } else {\n this.formPromise = this.apiService.updateOrganizationConnection(\n request,\n ScimConfigApi,\n this.existingConnectionId\n );\n }\n const response = (await this.formPromise) as OrganizationConnectionResponse;\n await this.setConnectionFormValues(response);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"scimSettingsSaved\"));\n } catch (e) {\n // Logged by appApiAction, do nothing\n }\n\n this.formPromise = null;\n }\n\n getScimEndpointUrl() {\n return this.environmentService.getScimUrl() + \"/\" + this.organizationId;\n }\n\n toggleScimKey() {\n this.showScimKey = !this.showScimKey;\n document.getElementById(\"clientSecret\").focus();\n }\n\n private async setConnectionFormValues(connection: OrganizationConnectionResponse) {\n this.existingConnectionId = connection?.id;\n if (connection !== null && connection.config?.enabled) {\n this.showScimSettings = true;\n this.enabled.setValue(true);\n this.formData.setValue({\n endpointUrl: this.getScimEndpointUrl(),\n clientSecret: \"\",\n });\n await this.loadApiKey();\n } else {\n this.showScimSettings = false;\n this.enabled.setValue(false);\n }\n this.loading = false;\n }\n}\n","import { SsoConfigApi } from \"../../api/sso-config.api\";\n\nexport class OrganizationSsoRequest {\n enabled = false;\n identifier: string;\n data: SsoConfigApi;\n}\n","import {\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"../../enums/ssoEnums\";\nimport { SsoConfigApi } from \"../api/sso-config.api\";\n\nimport { View } from \"./view\";\n\nexport class SsoConfigView extends View {\n configType: SsoType;\n\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n\n openId: {\n authority: string;\n clientId: string;\n clientSecret: string;\n metadataAddress: string;\n redirectBehavior: OpenIdConnectRedirectBehavior;\n getClaimsFromUserInfoEndpoint: boolean;\n additionalScopes: string;\n additionalUserIdClaimTypes: string;\n additionalEmailClaimTypes: string;\n additionalNameClaimTypes: string;\n acrValues: string;\n expectedReturnAcrValue: string;\n };\n\n saml: {\n spNameIdFormat: Saml2NameIdFormat;\n spOutboundSigningAlgorithm: string;\n spSigningBehavior: Saml2SigningBehavior;\n spMinIncomingSigningAlgorithm: string;\n spWantAssertionsSigned: boolean;\n spValidateCertificates: boolean;\n\n idpEntityId: string;\n idpBindingType: Saml2BindingType;\n idpSingleSignOnServiceUrl: string;\n idpSingleLogoutServiceUrl: string;\n idpX509PublicCert: string;\n idpOutboundSigningAlgorithm: string;\n idpAllowUnsolicitedAuthnResponse: boolean;\n idpAllowOutboundLogoutRequests: boolean;\n idpWantAuthnRequestsSigned: boolean;\n };\n\n constructor(api: SsoConfigApi) {\n super();\n if (api == null) {\n return;\n }\n\n this.configType = api.configType;\n\n this.keyConnectorEnabled = api.keyConnectorEnabled;\n this.keyConnectorUrl = api.keyConnectorUrl;\n\n if (this.configType === SsoType.OpenIdConnect) {\n this.openId = {\n authority: api.authority,\n clientId: api.clientId,\n clientSecret: api.clientSecret,\n metadataAddress: api.metadataAddress,\n redirectBehavior: api.redirectBehavior,\n getClaimsFromUserInfoEndpoint: api.getClaimsFromUserInfoEndpoint,\n additionalScopes: api.additionalScopes,\n additionalUserIdClaimTypes: api.additionalUserIdClaimTypes,\n additionalEmailClaimTypes: api.additionalEmailClaimTypes,\n additionalNameClaimTypes: api.additionalNameClaimTypes,\n acrValues: api.acrValues,\n expectedReturnAcrValue: api.expectedReturnAcrValue,\n };\n } else if (this.configType === SsoType.Saml2) {\n this.saml = {\n spNameIdFormat: api.spNameIdFormat,\n spOutboundSigningAlgorithm: api.spOutboundSigningAlgorithm,\n spSigningBehavior: api.spSigningBehavior,\n spMinIncomingSigningAlgorithm: api.spMinIncomingSigningAlgorithm,\n spWantAssertionsSigned: api.spWantAssertionsSigned,\n spValidateCertificates: api.spValidateCertificates,\n\n idpEntityId: api.idpEntityId,\n idpBindingType: api.idpBindingType,\n idpSingleSignOnServiceUrl: api.idpSingleSignOnServiceUrl,\n idpSingleLogoutServiceUrl: api.idpSingleLogoutServiceUrl,\n idpX509PublicCert: api.idpX509PublicCert,\n idpOutboundSigningAlgorithm: api.idpOutboundSigningAlgorithm,\n idpAllowUnsolicitedAuthnResponse: api.idpAllowUnsolicitedAuthnResponse,\n idpWantAuthnRequestsSigned: api.idpWantAuthnRequestsSigned,\n\n // Value is inverted in the view model (allow instead of disable)\n idpAllowOutboundLogoutRequests:\n api.idpDisableOutboundLogoutRequests == null\n ? null\n : !api.idpDisableOutboundLogoutRequests,\n };\n }\n }\n}\n","export class View {}\n","import { Directive, ElementRef, HostListener } from \"@angular/core\";\n\n@Directive({\n selector: \"input[appInputStripSpaces]\",\n})\nexport class InputStripSpacesDirective {\n constructor(private el: ElementRef) {}\n\n @HostListener(\"input\") onInput() {\n this.el.nativeElement.value = this.el.nativeElement.value.replace(/ /g, \"\");\n }\n}\n","import { Directive, HostListener, Input } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Directive({\n selector: \"[appCopyClick]\",\n})\nexport class CopyClickDirective {\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n @Input(\"appCopyClick\") valueToCopy = \"\";\n\n @HostListener(\"click\") onClick() {\n this.platformUtilsService.copyToClipboard(this.valueToCopy);\n }\n}\n","import { Directive, HostListener, Input } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Directive({\n selector: \"[appLaunchClick]\",\n})\nexport class LaunchClickDirective {\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n @Input(\"appLaunchClick\") uriToLaunch = \"\";\n\n @HostListener(\"click\") onClick() {\n if (!Utils.isNullOrWhitespace(this.uriToLaunch)) {\n this.platformUtilsService.launchUri(this.uriToLaunch);\n }\n }\n}\n","import { Directive, Input, OnInit, Self } from \"@angular/core\";\nimport { ControlValueAccessor, UntypedFormControl, NgControl, Validators } from \"@angular/forms\";\n\n/** For use in the SSO Config Form only - will be deprecated by the Component Library */\n@Directive()\nexport abstract class BaseCvaComponent implements ControlValueAccessor, OnInit {\n get describedById() {\n return this.showDescribedBy ? this.controlId + \"Desc\" : null;\n }\n\n get showDescribedBy() {\n return this.helperText != null || this.controlDir.control.hasError(\"required\");\n }\n\n get isRequired() {\n return this.controlDir.control.hasValidator(Validators.required);\n }\n\n @Input() label: string;\n @Input() controlId: string;\n @Input() helperText: string;\n\n internalControl = new UntypedFormControl(\"\");\n\n protected onChange: any;\n protected onTouched: any;\n\n constructor(@Self() public controlDir: NgControl) {\n this.controlDir.valueAccessor = this;\n }\n\n ngOnInit() {\n this.internalControl.valueChanges.subscribe(this.onValueChangesInternal);\n }\n\n onBlurInternal() {\n this.onTouched();\n }\n\n // CVA interfaces\n writeValue(value: string) {\n this.internalControl.setValue(value);\n }\n\n registerOnChange(fn: any) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n if (isDisabled) {\n this.internalControl.disable();\n } else {\n this.internalControl.enable();\n }\n }\n\n protected onValueChangesInternal: any = (value: string) => this.onChange(value);\n // End CVA interfaces\n}\n","
\n
\n \n \n
\n {{\n helperText\n }}\n
\n","import { Component } from \"@angular/core\";\n\nimport { BaseCvaComponent } from \"./base-cva.component\";\n\n/** For use in the SSO Config Form only - will be deprecated by the Component Library */\n@Component({\n selector: \"app-input-checkbox\",\n templateUrl: \"input-checkbox.component.html\",\n})\nexport class InputCheckboxComponent extends BaseCvaComponent {}\n","
\n

{{ \"singleSignOn\" | i18n }}

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

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

\n\n \n \n \n\n \n {{ \"ssoIdentifier\" | i18n }}\n \n {{ \"ssoIdentifierHint\" | i18n }}\n \n\n
\n\n
\n \n
\n \n \n
\n
\n \n \n
\n
\n\n \n \n \n {{ \"keyConnectorWarning\" | i18n }}\n \n\n \n {{ \"keyConnectorUrl\" | i18n }}\n \n \n \n \n {{ \"keyConnectorTest\" | i18n }}\n \n \n \n \n \n {{ \"keyConnectorTestSuccess\" | i18n }}\n \n \n \n \n\n
\n\n \n {{ \"type\" | i18n }}\n \n \n
\n\n \n \n
\n

{{ \"openIdConnectConfig\" | i18n }}

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

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

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

{{ \"samlSpConfig\" | i18n }}

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

{{ \"samlIdpConfig\" | i18n }}

\n\n \n {{ \"idpEntityId\" | i18n }}\n \n \n\n \n {{ \"idpBindingType\" | i18n }}\n \n \n\n \n {{ \"idpSingleSignOnServiceUrl\" | i18n }}\n \n {{ \"idpSingleSignOnServiceUrlRequired\" | i18n }}\n \n\n \n {{ \"idpSingleLogoutServiceUrl\" | i18n }}\n \n \n\n \n {{ \"idpX509PublicCert\" | i18n }}\n \n \n\n \n {{ \"idpOutboundSigningAlgorithm\" | i18n }}\n \n \n\n \n \n\n \n\n \n
\n
\n\n \n \n\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport {\n AbstractControl,\n FormBuilder,\n FormControl,\n UntypedFormGroup,\n Validators,\n} from \"@angular/forms\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { concatMap, Subject, takeUntil } from \"rxjs\";\n\nimport { SelectOptions } from \"@bitwarden/angular/interfaces/selectOptions\";\nimport { ControlsOf } from \"@bitwarden/angular/types/controls-of\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport {\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"@bitwarden/common/enums/ssoEnums\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { SsoConfigApi } from \"@bitwarden/common/models/api/sso-config.api\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { OrganizationSsoRequest } from \"@bitwarden/common/models/request/organization/organization-sso.request\";\nimport { OrganizationSsoResponse } from \"@bitwarden/common/models/response/organization/organization-sso.response\";\nimport { SsoConfigView } from \"@bitwarden/common/models/view/sso-config.view\";\n\nconst defaultSigningAlgorithm = \"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\";\n\n@Component({\n selector: \"app-org-manage-sso\",\n templateUrl: \"sso.component.html\",\n})\nexport class SsoComponent implements OnInit, OnDestroy {\n readonly ssoType = SsoType;\n\n readonly ssoTypeOptions: SelectOptions[] = [\n { name: this.i18nService.t(\"selectType\"), value: SsoType.None, disabled: true },\n { name: \"OpenID Connect\", value: SsoType.OpenIdConnect },\n { name: \"SAML 2.0\", value: SsoType.Saml2 },\n ];\n\n readonly samlSigningAlgorithms = [\n \"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\",\n \"http://www.w3.org/2000/09/xmldsig#rsa-sha384\",\n \"http://www.w3.org/2000/09/xmldsig#rsa-sha512\",\n \"http://www.w3.org/2000/09/xmldsig#rsa-sha1\",\n ];\n\n readonly saml2SigningBehaviourOptions: SelectOptions[] = [\n {\n name: \"If IdP Wants Authn Requests Signed\",\n value: Saml2SigningBehavior.IfIdpWantAuthnRequestsSigned,\n },\n { name: \"Always\", value: Saml2SigningBehavior.Always },\n { name: \"Never\", value: Saml2SigningBehavior.Never },\n ];\n readonly saml2BindingTypeOptions: SelectOptions[] = [\n { name: \"Redirect\", value: Saml2BindingType.HttpRedirect },\n { name: \"HTTP POST\", value: Saml2BindingType.HttpPost },\n ];\n readonly saml2NameIdFormatOptions: SelectOptions[] = [\n { name: \"Not Configured\", value: Saml2NameIdFormat.NotConfigured },\n { name: \"Unspecified\", value: Saml2NameIdFormat.Unspecified },\n { name: \"Email Address\", value: Saml2NameIdFormat.EmailAddress },\n { name: \"X.509 Subject Name\", value: Saml2NameIdFormat.X509SubjectName },\n { name: \"Windows Domain Qualified Name\", value: Saml2NameIdFormat.WindowsDomainQualifiedName },\n { name: \"Kerberos Principal Name\", value: Saml2NameIdFormat.KerberosPrincipalName },\n { name: \"Entity Identifier\", value: Saml2NameIdFormat.EntityIdentifier },\n { name: \"Persistent\", value: Saml2NameIdFormat.Persistent },\n { name: \"Transient\", value: Saml2NameIdFormat.Transient },\n ];\n\n readonly connectRedirectOptions: SelectOptions[] = [\n { name: \"Redirect GET\", value: OpenIdConnectRedirectBehavior.RedirectGet },\n { name: \"Form POST\", value: OpenIdConnectRedirectBehavior.FormPost },\n ];\n\n private destory$ = new Subject();\n\n showOpenIdCustomizations = false;\n\n loading = true;\n haveTestedKeyConnector = false;\n organizationId: string;\n organization: Organization;\n formPromise: Promise;\n\n callbackPath: string;\n signedOutCallbackPath: string;\n spEntityId: string;\n spMetadataUrl: string;\n spAcsUrl: string;\n\n private enabled = this.formBuilder.control(false);\n\n private ssoIdentifier = this.formBuilder.control(\"\", {\n validators: [Validators.maxLength(50), Validators.required],\n });\n\n private openIdForm = this.formBuilder.group>(\n {\n authority: new FormControl(\"\", Validators.required),\n clientId: new FormControl(\"\", Validators.required),\n clientSecret: new FormControl(\"\", Validators.required),\n metadataAddress: new FormControl(),\n redirectBehavior: new FormControl(\n OpenIdConnectRedirectBehavior.RedirectGet,\n Validators.required\n ),\n getClaimsFromUserInfoEndpoint: new FormControl(),\n additionalScopes: new FormControl(),\n additionalUserIdClaimTypes: new FormControl(),\n additionalEmailClaimTypes: new FormControl(),\n additionalNameClaimTypes: new FormControl(),\n acrValues: new FormControl(),\n expectedReturnAcrValue: new FormControl(),\n },\n {\n updateOn: \"blur\",\n }\n );\n\n private samlForm = this.formBuilder.group>(\n {\n spNameIdFormat: new FormControl(Saml2NameIdFormat.NotConfigured),\n spOutboundSigningAlgorithm: new FormControl(defaultSigningAlgorithm),\n spSigningBehavior: new FormControl(Saml2SigningBehavior.IfIdpWantAuthnRequestsSigned),\n spMinIncomingSigningAlgorithm: new FormControl(defaultSigningAlgorithm),\n spWantAssertionsSigned: new FormControl(),\n spValidateCertificates: new FormControl(),\n\n idpEntityId: new FormControl(\"\", Validators.required),\n idpBindingType: new FormControl(Saml2BindingType.HttpRedirect),\n idpSingleSignOnServiceUrl: new FormControl(),\n idpSingleLogoutServiceUrl: new FormControl(),\n idpX509PublicCert: new FormControl(\"\", Validators.required),\n idpOutboundSigningAlgorithm: new FormControl(defaultSigningAlgorithm),\n idpAllowUnsolicitedAuthnResponse: new FormControl(),\n idpAllowOutboundLogoutRequests: new FormControl(true),\n idpWantAuthnRequestsSigned: new FormControl(),\n },\n {\n updateOn: \"blur\",\n }\n );\n\n private ssoConfigForm = this.formBuilder.group>({\n configType: new FormControl(SsoType.None),\n keyConnectorEnabled: new FormControl(false),\n keyConnectorUrl: new FormControl(\"\"),\n openId: this.openIdForm,\n saml: this.samlForm,\n });\n\n constructor(\n private formBuilder: FormBuilder,\n private route: ActivatedRoute,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private organizationService: OrganizationService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n this.ssoConfigForm\n .get(\"configType\")\n .valueChanges.pipe(takeUntil(this.destory$))\n .subscribe((newType: SsoType) => {\n if (newType === SsoType.OpenIdConnect) {\n this.openIdForm.enable();\n this.samlForm.disable();\n } else if (newType === SsoType.Saml2) {\n this.openIdForm.disable();\n this.samlForm.enable();\n } else {\n this.openIdForm.disable();\n this.samlForm.disable();\n }\n });\n\n this.samlForm\n .get(\"spSigningBehavior\")\n .valueChanges.pipe(takeUntil(this.destory$))\n .subscribe(() => this.samlForm.get(\"idpX509PublicCert\").updateValueAndValidity());\n\n this.route.params\n .pipe(\n concatMap(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n }),\n takeUntil(this.destory$)\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destory$.next();\n this.destory$.complete();\n }\n\n async load() {\n this.organization = await this.organizationService.get(this.organizationId);\n const ssoSettings = await this.organizationApiService.getSso(this.organizationId);\n this.populateForm(ssoSettings);\n\n this.callbackPath = ssoSettings.urls.callbackPath;\n this.signedOutCallbackPath = ssoSettings.urls.signedOutCallbackPath;\n this.spEntityId = ssoSettings.urls.spEntityId;\n this.spMetadataUrl = ssoSettings.urls.spMetadataUrl;\n this.spAcsUrl = ssoSettings.urls.spAcsUrl;\n\n this.loading = false;\n }\n\n async submit() {\n this.validateForm(this.ssoConfigForm);\n\n if (this.ssoConfigForm.value.keyConnectorEnabled) {\n this.haveTestedKeyConnector = false;\n await this.validateKeyConnectorUrl();\n }\n\n if (!this.ssoConfigForm.valid) {\n this.readOutErrors();\n return;\n }\n\n const request = new OrganizationSsoRequest();\n request.enabled = this.enabled.value;\n request.identifier = this.ssoIdentifier.value;\n request.data = SsoConfigApi.fromView(this.ssoConfigForm.getRawValue());\n\n this.formPromise = this.organizationApiService.updateSso(this.organizationId, request);\n\n try {\n const response = await this.formPromise;\n this.populateForm(response);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"ssoSettingsSaved\"));\n } catch {\n // Logged by appApiAction, do nothing\n }\n\n this.formPromise = null;\n }\n\n async validateKeyConnectorUrl() {\n if (this.haveTestedKeyConnector) {\n return;\n }\n\n this.keyConnectorUrl.markAsPending();\n\n try {\n await this.apiService.getKeyConnectorAlive(this.keyConnectorUrl.value);\n this.keyConnectorUrl.updateValueAndValidity();\n } catch {\n this.keyConnectorUrl.setErrors({\n invalidUrl: { message: this.i18nService.t(\"keyConnectorTestFail\") },\n });\n }\n\n this.haveTestedKeyConnector = true;\n }\n\n toggleOpenIdCustomizations() {\n this.showOpenIdCustomizations = !this.showOpenIdCustomizations;\n }\n\n getErrorCount(form: UntypedFormGroup): number {\n return Object.values(form.controls).reduce((acc: number, control: AbstractControl) => {\n if (control instanceof UntypedFormGroup) {\n return acc + this.getErrorCount(control);\n }\n\n if (control.errors == null) {\n return acc;\n }\n return acc + Object.keys(control.errors).length;\n }, 0);\n }\n\n get enableTestKeyConnector() {\n return (\n this.ssoConfigForm.get(\"keyConnectorEnabled\").value &&\n !Utils.isNullOrWhitespace(this.keyConnectorUrl?.value)\n );\n }\n\n get keyConnectorUrl() {\n return this.ssoConfigForm.get(\"keyConnectorUrl\");\n }\n\n get samlSigningAlgorithmOptions(): SelectOptions[] {\n return this.samlSigningAlgorithms.map((algorithm) => ({ name: algorithm, value: algorithm }));\n }\n\n private validateForm(form: UntypedFormGroup) {\n Object.values(form.controls).forEach((control: AbstractControl) => {\n if (control.disabled) {\n return;\n }\n\n if (control instanceof UntypedFormGroup) {\n this.validateForm(control);\n } else {\n control.markAsDirty();\n control.markAsTouched();\n control.updateValueAndValidity();\n }\n });\n }\n\n private populateForm(ssoSettings: OrganizationSsoResponse) {\n this.enabled.setValue(ssoSettings.enabled);\n this.ssoIdentifier.setValue(ssoSettings.identifier);\n if (ssoSettings.data != null) {\n const ssoConfigView = new SsoConfigView(ssoSettings.data);\n this.ssoConfigForm.patchValue(ssoConfigView);\n }\n }\n\n private readOutErrors() {\n const errorText = this.i18nService.t(\"error\");\n const errorCount = this.getErrorCount(this.ssoConfigForm);\n const errorCountText = this.i18nService.t(\n errorCount === 1 ? \"formErrorSummarySingle\" : \"formErrorSummaryPlural\",\n errorCount.toString()\n );\n\n const div = document.createElement(\"div\");\n div.className = \"sr-only\";\n div.id = \"srErrorCount\";\n div.setAttribute(\"aria-live\", \"polite\");\n div.innerText = errorText + \": \" + errorCountText;\n\n const existing = document.getElementById(\"srErrorCount\");\n if (existing != null) {\n existing.remove();\n }\n\n document.body.append(div);\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"@bitwarden/angular/guards/auth.guard\";\nimport { canAccessSettingsTab } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { OrganizationPermissionsGuard } from \"@bitwarden/web-vault/app/organizations/guards/org-permissions.guard\";\nimport { OrganizationLayoutComponent } from \"@bitwarden/web-vault/app/organizations/layouts/organization-layout.component\";\nimport { SettingsComponent } from \"@bitwarden/web-vault/app/organizations/settings/settings.component\";\n\nimport { ScimComponent } from \"./manage/scim.component\";\nimport { SsoComponent } from \"./manage/sso.component\";\n\nconst routes: Routes = [\n {\n path: \"organizations/:organizationId\",\n component: OrganizationLayoutComponent,\n canActivate: [AuthGuard, OrganizationPermissionsGuard],\n children: [\n {\n path: \"settings\",\n component: SettingsComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: canAccessSettingsTab,\n },\n children: [\n {\n path: \"sso\",\n component: SsoComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: (org: Organization) => org.canManageSso,\n },\n },\n {\n path: \"scim\",\n component: ScimComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: (org: Organization) => org.canManageScim,\n },\n },\n ],\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class OrganizationsRoutingModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"@bitwarden/web-vault/app/shared/shared.module\";\n\nimport { InputCheckboxComponent } from \"./components/input-checkbox.component\";\nimport { ScimComponent } from \"./manage/scim.component\";\nimport { SsoComponent } from \"./manage/sso.component\";\nimport { OrganizationsRoutingModule } from \"./organizations-routing.module\";\n\n@NgModule({\n imports: [SharedModule, OrganizationsRoutingModule],\n declarations: [InputCheckboxComponent, SsoComponent, ScimComponent],\n})\nexport class OrganizationsModule {}\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { OverlayModule } from \"@angular/cdk/overlay\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { BrowserAnimationsModule } from \"@angular/platform-browser/animations\";\nimport { RouterModule } from \"@angular/router\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\n\nimport { JslibModule } from \"@bitwarden/angular/jslib.module\";\nimport { CoreModule } from \"@bitwarden/web-vault/app/core/core.module\";\nimport { OssRoutingModule } from \"@bitwarden/web-vault/app/oss-routing.module\";\nimport { OssModule } from \"@bitwarden/web-vault/app/oss.module\";\nimport { WildcardRoutingModule } from \"@bitwarden/web-vault/app/wildcard-routing.module\";\n\nimport { AppRoutingModule } from \"./app-routing.module\";\nimport { AppComponent } from \"./app.component\";\nimport { OrganizationsModule } from \"./organizations/organizations.module\";\nimport { DisablePersonalVaultExportPolicyComponent } from \"./policies/disable-personal-vault-export.component\";\nimport { MaximumVaultTimeoutPolicyComponent } from \"./policies/maximum-vault-timeout.component\";\n\n@NgModule({\n imports: [\n OverlayModule,\n OssModule,\n JslibModule,\n BrowserAnimationsModule,\n FormsModule,\n ReactiveFormsModule,\n CoreModule,\n InfiniteScrollModule,\n DragDropModule,\n AppRoutingModule,\n OssRoutingModule,\n OrganizationsModule, // Must be after OssRoutingModule for competing routes to resolve properly\n RouterModule,\n WildcardRoutingModule, // Needs to be last to catch all non-existing routes\n ],\n declarations: [\n AppComponent,\n DisablePersonalVaultExportPolicyComponent,\n MaximumVaultTimeoutPolicyComponent,\n ],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n","import { enableProdMode } from \"@angular/core\";\nimport { platformBrowserDynamic } from \"@angular/platform-browser-dynamic\";\n\nimport \"bootstrap\";\nimport \"jquery\";\nimport \"popper.js\";\n\nrequire(\"@bitwarden/web-vault/scss/styles.scss\");\nrequire(\"@bitwarden/web-vault/scss/tailwind.css\");\n\nimport { AppModule } from \"./app/app.module\";\n\nif (process.env.NODE_ENV === \"production\") {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, { preserveWhitespaces: true });\n","\n

\n \n {{ title }}\n

\n
\n {{ enforcedPolicyMessage }}\n
    \n
  • 0\">\n {{ \"policyInEffectMinComplexity\" | i18n: getPasswordScoreAlertDisplay() }}\n
  • \n
  • 0\">\n {{ \"policyInEffectMinLength\" | i18n: enforcedPolicyOptions?.minLength.toString() }}\n
  • \n
  • \n {{ \"policyInEffectUppercase\" | i18n }}\n
  • \n
  • \n {{ \"policyInEffectLowercase\" | i18n }}\n
  • \n
  • \n {{ \"policyInEffectNumbers\" | i18n }}\n
  • \n
  • \n {{ \"policyInEffectSpecial\" | i18n: \"!@#$%^&*\" }}\n
  • \n
\n
\n \n\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/models/domain/master-password-policy-options\";\n\n@Component({\n selector: \"app-callout\",\n templateUrl: \"callout.component.html\",\n})\nexport class CalloutComponent implements OnInit {\n @Input() type = \"info\";\n @Input() icon: string;\n @Input() title: string;\n @Input() clickable: boolean;\n @Input() enforcedPolicyOptions: MasterPasswordPolicyOptions;\n @Input() enforcedPolicyMessage: string;\n @Input() useAlertRole = false;\n\n calloutStyle: string;\n\n constructor(private i18nService: I18nService) {}\n\n ngOnInit() {\n this.calloutStyle = this.type;\n\n if (this.enforcedPolicyMessage === undefined) {\n this.enforcedPolicyMessage = this.i18nService.t(\"masterPasswordPolicyInEffect\");\n }\n\n if (this.type === \"warning\" || this.type === \"danger\") {\n if (this.type === \"danger\") {\n this.calloutStyle = \"danger\";\n }\n if (this.title === undefined) {\n this.title = this.i18nService.t(\"warning\");\n }\n if (this.icon === undefined) {\n this.icon = \"bwi-exclamation-triangle\";\n }\n } else if (this.type === \"error\") {\n this.calloutStyle = \"danger\";\n if (this.title === undefined) {\n this.title = this.i18nService.t(\"error\");\n }\n if (this.icon === undefined) {\n this.icon = \"bwi-error\";\n }\n } else if (this.type === \"tip\") {\n this.calloutStyle = \"success\";\n if (this.title === undefined) {\n this.title = this.i18nService.t(\"tip\");\n }\n if (this.icon === undefined) {\n this.icon = \"bwi-lightbulb\";\n }\n }\n }\n\n getPasswordScoreAlertDisplay() {\n if (this.enforcedPolicyOptions == null) {\n return \"\";\n }\n\n let str: string;\n switch (this.enforcedPolicyOptions.minComplexity) {\n case 4:\n str = this.i18nService.t(\"strong\");\n break;\n case 3:\n str = this.i18nService.t(\"good\");\n break;\n default:\n str = this.i18nService.t(\"weak\");\n break;\n }\n return str + \" (\" + this.enforcedPolicyOptions.minComplexity + \")\";\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from \"@angular/core\";\n\n@Directive({\n selector: \"[appFallbackSrc]\",\n})\nexport class FallbackSrcDirective {\n @Input(\"appFallbackSrc\") appFallbackSrc: string;\n\n constructor(private el: ElementRef) {}\n\n @HostListener(\"error\") onError() {\n this.el.nativeElement.src = this.appFallbackSrc;\n }\n}\n","
\n \n \n
\n","import { Component, Input, OnChanges } from \"@angular/core\";\n\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { CipherType } from \"@bitwarden/common/enums/cipherType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { CipherView } from \"@bitwarden/common/models/view/cipher.view\";\n\n/**\n * Provides a mapping from supported card brands to\n * the filenames of icon that should be present in images/cards folder of clients.\n */\nconst cardIcons: Record = {\n Visa: \"card-visa\",\n Mastercard: \"card-mastercard\",\n Amex: \"card-amex\",\n Discover: \"card-discover\",\n \"Diners Club\": \"card-diners-club\",\n JCB: \"card-jcb\",\n Maestro: \"card-maestro\",\n UnionPay: \"card-union-pay\",\n RuPay: \"card-ru-pay\",\n Mir: \"card-mir\",\n};\n\n@Component({\n selector: \"app-vault-icon\",\n templateUrl: \"icon.component.html\",\n})\nexport class IconComponent implements OnChanges {\n @Input() cipher: CipherView;\n icon: string;\n image: string;\n fallbackImage: string;\n imageEnabled: boolean;\n\n private iconsUrl: string;\n\n constructor(environmentService: EnvironmentService, private stateService: StateService) {\n this.iconsUrl = environmentService.getIconsUrl();\n }\n\n async ngOnChanges() {\n // Components may be re-used when using cdk-virtual-scroll. Which puts the component in a weird state,\n // to avoid this we reset all state variables.\n this.image = null;\n this.fallbackImage = null;\n this.imageEnabled = !(await this.stateService.getDisableFavicon());\n this.load();\n }\n\n protected load() {\n switch (this.cipher.type) {\n case CipherType.Login:\n this.icon = \"bwi-globe\";\n this.setLoginIcon();\n break;\n case CipherType.SecureNote:\n this.icon = \"bwi-sticky-note\";\n break;\n case CipherType.Card:\n this.icon = \"bwi-credit-card\";\n this.setCardIcon();\n break;\n case CipherType.Identity:\n this.icon = \"bwi-id-card\";\n break;\n default:\n break;\n }\n }\n\n private setLoginIcon() {\n if (this.cipher.login.uri) {\n let hostnameUri = this.cipher.login.uri;\n let isWebsite = false;\n\n if (hostnameUri.indexOf(\"androidapp://\") === 0) {\n this.icon = \"bwi-android\";\n this.image = null;\n } else if (hostnameUri.indexOf(\"iosapp://\") === 0) {\n this.icon = \"bwi-apple\";\n this.image = null;\n } else if (\n this.imageEnabled &&\n hostnameUri.indexOf(\"://\") === -1 &&\n hostnameUri.indexOf(\".\") > -1\n ) {\n hostnameUri = \"http://\" + hostnameUri;\n isWebsite = true;\n } else if (this.imageEnabled) {\n isWebsite = hostnameUri.indexOf(\"http\") === 0 && hostnameUri.indexOf(\".\") > -1;\n }\n\n if (this.imageEnabled && isWebsite) {\n try {\n this.image = this.iconsUrl + \"/\" + Utils.getHostname(hostnameUri) + \"/icon.png\";\n this.fallbackImage = \"images/bwi-globe.png\";\n } catch (e) {\n // Ignore error since the fallback icon will be shown if image is null.\n }\n }\n } else {\n this.image = null;\n }\n }\n\n private setCardIcon() {\n const brand = this.cipher.card.brand;\n if (this.imageEnabled && brand in cardIcons) {\n this.icon = \"credit-card-icon \" + cardIcons[brand];\n }\n }\n}\n","import { Observable, Subject } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nexport class ModalRef {\n onCreated: Observable; // Modal added to the DOM.\n onClose: Observable; // Initiated close.\n onClosed: Observable; // Modal was closed (Remove element from DOM)\n onShow: Observable; // Start showing modal\n onShown: Observable; // Modal is fully visible\n\n private readonly _onCreated = new Subject();\n private readonly _onClose = new Subject();\n private readonly _onClosed = new Subject();\n private readonly _onShow = new Subject();\n private readonly _onShown = new Subject();\n private lastResult: any;\n\n constructor() {\n this.onCreated = this._onCreated.asObservable();\n this.onClose = this._onClose.asObservable();\n this.onClosed = this._onClosed.asObservable();\n this.onShow = this._onShow.asObservable();\n this.onShown = this._onShow.asObservable();\n }\n\n show() {\n this._onShow.next();\n }\n\n shown() {\n this._onShown.next();\n }\n\n close(result?: any) {\n this.lastResult = result;\n this._onClose.next(result);\n }\n\n closed() {\n this._onClosed.next(this.lastResult);\n }\n\n created(el: HTMLElement) {\n this._onCreated.next(el);\n }\n\n onClosedPromise(): Promise {\n return this.onClosed.pipe(first()).toPromise();\n }\n}\n","\n \n \n {{ \"confirmIdentity\" | i18n }}\n\n\n
\n \n \n {{ \"sendCode\" | i18n }}\n \n \n \n {{ \"codeSent\" | i18n }}\n \n
\n\n
\n \n \n {{ \"confirmIdentity\" | i18n }}\n
\n
\n","import { animate, style, transition, trigger } from \"@angular/animations\";\nimport { Component, OnInit } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormControl } from \"@angular/forms\";\n\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { VerificationType } from \"@bitwarden/common/enums/verificationType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\n/**\n * Used for general-purpose user verification throughout the app.\n * Collects the user's master password, or if they are using Key Connector, prompts for an OTP via email.\n * This is exposed to the parent component via the ControlValueAccessor interface (e.g. bind it to a FormControl).\n * Use UserVerificationService to verify the user's input.\n */\n@Component({\n selector: \"app-user-verification\",\n templateUrl: \"user-verification.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: UserVerificationComponent,\n },\n ],\n animations: [\n trigger(\"sent\", [\n transition(\":enter\", [style({ opacity: 0 }), animate(\"100ms\", style({ opacity: 1 }))]),\n ]),\n ],\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class UserVerificationComponent implements ControlValueAccessor, OnInit {\n usesKeyConnector = false;\n disableRequestOTP = false;\n sentCode = false;\n\n secret = new FormControl(\"\");\n\n private onChange: (value: Verification) => void;\n\n constructor(\n private keyConnectorService: KeyConnectorService,\n private userVerificationService: UserVerificationService\n ) {}\n\n async ngOnInit() {\n this.usesKeyConnector = await this.keyConnectorService.getUsesKeyConnector();\n this.processChanges(this.secret.value);\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n this.secret.valueChanges.subscribe((secret: string) => this.processChanges(secret));\n }\n\n async requestOTP() {\n if (this.usesKeyConnector) {\n this.disableRequestOTP = true;\n try {\n await this.userVerificationService.requestOTP();\n this.sentCode = true;\n } finally {\n this.disableRequestOTP = false;\n }\n }\n }\n\n writeValue(obj: any): void {\n this.secret.setValue(obj);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n // Not implemented\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disableRequestOTP = isDisabled;\n if (isDisabled) {\n this.secret.disable();\n } else {\n this.secret.enable();\n }\n }\n\n private processChanges(secret: string) {\n if (this.onChange == null) {\n return;\n }\n\n this.onChange({\n type: this.usesKeyConnector ? VerificationType.OTP : VerificationType.MasterPassword,\n secret: Utils.isNullOrWhitespace(secret) ? null : secret,\n });\n }\n}\n","import { Directive, ElementRef, Input, Renderer2 } from \"@angular/core\";\n\n@Directive({\n selector: \"[appA11yTitle]\",\n})\nexport class A11yTitleDirective {\n @Input() set appA11yTitle(title: string) {\n this.title = title;\n }\n\n private title: string;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n ngOnInit() {\n if (!this.el.nativeElement.hasAttribute(\"title\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"title\", this.title);\n }\n if (!this.el.nativeElement.hasAttribute(\"aria-label\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"aria-label\", this.title);\n }\n }\n}\n","import { Directive, ElementRef, Input, OnChanges } from \"@angular/core\";\n\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\n\n/**\n * Provides error handling, in particular for any error returned by the server in an api call.\n * Attach it to a
element and provide the name of the class property that will hold the api call promise.\n * e.g. \n * Any errors/rejections that occur will be intercepted and displayed as error toasts.\n */\n@Directive({\n selector: \"[appApiAction]\",\n})\nexport class ApiActionDirective implements OnChanges {\n @Input() appApiAction: Promise;\n\n constructor(\n private el: ElementRef,\n private validationService: ValidationService,\n private logService: LogService\n ) {}\n\n ngOnChanges(changes: any) {\n if (this.appApiAction == null || this.appApiAction.then == null) {\n return;\n }\n\n this.el.nativeElement.loading = true;\n\n this.appApiAction.then(\n (response: any) => {\n this.el.nativeElement.loading = false;\n },\n (e: any) => {\n this.el.nativeElement.loading = false;\n\n if ((e as ErrorResponse).captchaRequired) {\n this.logService.error(\"Captcha required error response: \" + e.getSingleMessage());\n return;\n }\n this.logService?.error(`Received API exception: ${e}`);\n this.validationService.showError(e);\n }\n );\n }\n}\n","import { Directive, ElementRef, Input, NgZone } from \"@angular/core\";\nimport { take } from \"rxjs/operators\";\n\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Directive({\n selector: \"[appAutofocus]\",\n})\nexport class AutofocusDirective {\n @Input() set appAutofocus(condition: boolean | string) {\n this.autofocus = condition === \"\" || condition === true;\n }\n\n private autofocus: boolean;\n\n constructor(private el: ElementRef, private ngZone: NgZone) {}\n\n ngOnInit() {\n if (!Utils.isMobileBrowser && this.autofocus) {\n if (this.ngZone.isStable) {\n this.el.nativeElement.focus();\n } else {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => this.el.nativeElement.focus());\n }\n }\n }\n}\n","import { Directive, ElementRef, Input, Renderer2 } from \"@angular/core\";\n\n@Directive({\n selector: \"[appInputVerbatim]\",\n})\nexport class InputVerbatimDirective {\n @Input() set appInputVerbatim(condition: boolean | string) {\n this.disableComplete = condition === \"\" || condition === true;\n }\n\n private disableComplete: boolean;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n ngOnInit() {\n if (this.disableComplete && !this.el.nativeElement.hasAttribute(\"autocomplete\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"autocomplete\", \"off\");\n }\n if (!this.el.nativeElement.hasAttribute(\"autocapitalize\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"autocapitalize\", \"none\");\n }\n if (!this.el.nativeElement.hasAttribute(\"autocorrect\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"autocorrect\", \"none\");\n }\n if (!this.el.nativeElement.hasAttribute(\"spellcheck\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"spellcheck\", \"false\");\n }\n if (!this.el.nativeElement.hasAttribute(\"inputmode\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"inputmode\", \"verbatim\");\n }\n }\n}\n","import { Directive, HostListener } from \"@angular/core\";\n\n@Directive({\n selector: \"[appStopClick]\",\n})\nexport class StopClickDirective {\n @HostListener(\"click\", [\"$event\"]) onClick($event: MouseEvent) {\n $event.preventDefault();\n }\n}\n","import { Directive, HostListener } from \"@angular/core\";\n\n@Directive({\n selector: \"[appStopProp]\",\n})\nexport class StopPropDirective {\n @HostListener(\"click\", [\"$event\"]) onClick($event: MouseEvent) {\n $event.stopPropagation();\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable()\nexport class AuthGuard implements CanActivate {\n constructor(\n private authService: AuthService,\n private router: Router,\n private messagingService: MessagingService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n this.messagingService.send(\"authBlocked\", { url: routerState.url });\n return false;\n }\n\n if (authStatus === AuthenticationStatus.Locked) {\n if (routerState != null) {\n this.messagingService.send(\"lockedUrl\", { url: routerState.url });\n }\n return this.router.createUrlTree([\"lock\"], { queryParams: { promptBiometric: true } });\n }\n\n if (\n !routerState.url.includes(\"remove-password\") &&\n (await this.keyConnectorService.getConvertAccountRequired())\n ) {\n return this.router.createUrlTree([\"/remove-password\"]);\n }\n\n return true;\n }\n}\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { CommonModule } from \"@angular/common\";\nimport { Component, ModuleWithProviders, NgModule } from \"@angular/core\";\nimport {\n DefaultNoComponentGlobalConfig,\n GlobalConfig,\n Toast as BaseToast,\n ToastPackage,\n ToastrService,\n TOAST_CONFIG,\n} from \"ngx-toastr\";\n\n@Component({\n selector: \"[toast-component2]\",\n template: `\n \n ×\n \n
\n \n
\n
\n
\n {{ title }} [{{ duplicatesCount + 1 }}]\n
\n
\n \n {{ message }}\n \n \n
\n
\n
\n `,\n animations: [\n trigger(\"flyInOut\", [\n state(\"inactive\", style({ opacity: 0 })),\n state(\"active\", style({ opacity: 1 })),\n state(\"removed\", style({ opacity: 0 })),\n transition(\"inactive => active\", animate(\"{{ easeTime }}ms {{ easing }}\")),\n transition(\"active => removed\", animate(\"{{ easeTime }}ms {{ easing }}\")),\n ]),\n ],\n preserveWhitespaces: false,\n})\nexport class BitwardenToast extends BaseToast {\n constructor(protected toastrService: ToastrService, public toastPackage: ToastPackage) {\n super(toastrService, toastPackage);\n }\n}\n\nexport const BitwardenToastGlobalConfig: GlobalConfig = {\n ...DefaultNoComponentGlobalConfig,\n toastComponent: BitwardenToast,\n};\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitwardenToast],\n exports: [BitwardenToast],\n})\nexport class BitwardenToastModule {\n static forRoot(config: Partial = {}): ModuleWithProviders {\n return {\n ngModule: BitwardenToastModule,\n providers: [\n {\n provide: TOAST_CONFIG,\n useValue: {\n default: BitwardenToastGlobalConfig,\n config: config,\n },\n },\n ],\n };\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\ninterface CardRuleEntry {\n cardLength: number;\n blocks: number[];\n}\n\n// See https://baymard.com/checkout-usability/credit-card-patterns for\n// all possible credit card spacing patterns. For now, we just handle\n// the below.\nconst numberFormats: Record = {\n Visa: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n Mastercard: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n Maestro: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 13, blocks: [4, 4, 5] },\n { cardLength: 15, blocks: [4, 6, 5] },\n { cardLength: 19, blocks: [4, 4, 4, 4, 3] },\n ],\n Discover: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n \"Diners Club\": [{ cardLength: 14, blocks: [4, 6, 4] }],\n JCB: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n UnionPay: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 19, blocks: [6, 13] },\n ],\n Amex: [{ cardLength: 15, blocks: [4, 6, 5] }],\n Mir: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 17, blocks: [5, 4, 4, 4] },\n { cardLength: 18, blocks: [6, 4, 4, 4] },\n { cardLength: 19, blocks: [7, 4, 4, 4] },\n ],\n Other: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n};\n\n@Pipe({ name: \"creditCardNumber\" })\nexport class CreditCardNumberPipe implements PipeTransform {\n transform(creditCardNumber: string, brand: string): string {\n let rules = numberFormats[brand];\n\n if (rules == null) {\n rules = numberFormats[\"Other\"];\n }\n\n const cardLength = creditCardNumber.length;\n\n let matchingRule = rules.find((r) => r.cardLength == cardLength);\n if (matchingRule == null) {\n matchingRule = rules[0];\n }\n\n const blocks = matchingRule.blocks;\n\n const chunks: string[] = [];\n let total = 0;\n\n blocks.forEach((c) => {\n chunks.push(creditCardNumber.slice(total, total + c));\n total += c;\n });\n\n // Append the remaining part\n if (cardLength > total) {\n chunks.push(creditCardNumber.slice(total));\n }\n\n return chunks.join(\" \");\n }\n}\n","import { CommonModule, DatePipe } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\n\nimport { CalloutComponent } from \"./components/callout.component\";\nimport { ExportScopeCalloutComponent } from \"./components/export-scope-callout.component\";\nimport { IconComponent } from \"./components/icon.component\";\nimport { BitwardenToastModule } from \"./components/toastr.component\";\nimport { A11yInvalidDirective } from \"./directives/a11y-invalid.directive\";\nimport { A11yTitleDirective } from \"./directives/a11y-title.directive\";\nimport { ApiActionDirective } from \"./directives/api-action.directive\";\nimport { AutofocusDirective } from \"./directives/autofocus.directive\";\nimport { BoxRowDirective } from \"./directives/box-row.directive\";\nimport { CopyClickDirective } from \"./directives/copy-click.directive\";\nimport { FallbackSrcDirective } from \"./directives/fallback-src.directive\";\nimport { InputStripSpacesDirective } from \"./directives/input-strip-spaces.directive\";\nimport { InputVerbatimDirective } from \"./directives/input-verbatim.directive\";\nimport { LaunchClickDirective } from \"./directives/launch-click.directive\";\nimport { NotPremiumDirective } from \"./directives/not-premium.directive\";\nimport { SelectCopyDirective } from \"./directives/select-copy.directive\";\nimport { StopClickDirective } from \"./directives/stop-click.directive\";\nimport { StopPropDirective } from \"./directives/stop-prop.directive\";\nimport { TrueFalseValueDirective } from \"./directives/true-false-value.directive\";\nimport { ColorPasswordCountPipe } from \"./pipes/color-password-count.pipe\";\nimport { ColorPasswordPipe } from \"./pipes/color-password.pipe\";\nimport { CreditCardNumberPipe } from \"./pipes/credit-card-number.pipe\";\nimport { EllipsisPipe } from \"./pipes/ellipsis.pipe\";\nimport { I18nPipe } from \"./pipes/i18n.pipe\";\nimport { SearchCiphersPipe } from \"./pipes/search-ciphers.pipe\";\nimport { SearchPipe } from \"./pipes/search.pipe\";\nimport { UserNamePipe } from \"./pipes/user-name.pipe\";\nimport { PasswordStrengthComponent } from \"./shared/components/password-strength/password-strength.component\";\n\n@NgModule({\n imports: [\n BitwardenToastModule.forRoot({\n maxOpened: 5,\n autoDismiss: true,\n closeButton: true,\n }),\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n ],\n declarations: [\n A11yInvalidDirective,\n A11yTitleDirective,\n ApiActionDirective,\n AutofocusDirective,\n BoxRowDirective,\n CalloutComponent,\n ColorPasswordCountPipe,\n ColorPasswordPipe,\n CreditCardNumberPipe,\n EllipsisPipe,\n ExportScopeCalloutComponent,\n FallbackSrcDirective,\n I18nPipe,\n IconComponent,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n CopyClickDirective,\n LaunchClickDirective,\n UserNamePipe,\n PasswordStrengthComponent,\n ],\n exports: [\n A11yInvalidDirective,\n A11yTitleDirective,\n ApiActionDirective,\n AutofocusDirective,\n BitwardenToastModule,\n BoxRowDirective,\n CalloutComponent,\n ColorPasswordCountPipe,\n ColorPasswordPipe,\n CreditCardNumberPipe,\n EllipsisPipe,\n ExportScopeCalloutComponent,\n FallbackSrcDirective,\n I18nPipe,\n IconComponent,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n CopyClickDirective,\n LaunchClickDirective,\n UserNamePipe,\n PasswordStrengthComponent,\n ],\n providers: [CreditCardNumberPipe, DatePipe, I18nPipe, SearchPipe, UserNamePipe],\n})\nexport class JslibModule {}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\n@Pipe({\n name: \"i18n\",\n})\nexport class I18nPipe implements PipeTransform {\n constructor(private i18nService: I18nService) {}\n\n transform(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.i18nService.t(id, p1, p2, p3);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: \"search\",\n})\nexport class SearchPipe implements PipeTransform {\n transform(\n items: any[],\n searchText: string,\n prop1?: string,\n prop2?: string,\n prop3?: string\n ): any[] {\n if (items == null || items.length === 0) {\n return [];\n }\n\n if (searchText == null || searchText.length < 2) {\n return items;\n }\n\n searchText = searchText.trim().toLowerCase();\n return items.filter((i) => {\n if (\n prop1 != null &&\n i[prop1] != null &&\n i[prop1].toString().toLowerCase().indexOf(searchText) > -1\n ) {\n return true;\n }\n if (\n prop2 != null &&\n i[prop2] != null &&\n i[prop2].toString().toLowerCase().indexOf(searchText) > -1\n ) {\n return true;\n }\n if (\n prop3 != null &&\n i[prop3] != null &&\n i[prop3].toString().toLowerCase().indexOf(searchText) > -1\n ) {\n return true;\n }\n return false;\n });\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\ninterface User {\n name?: string;\n email: string;\n}\n\n@Pipe({\n name: \"userName\",\n})\nexport class UserNamePipe implements PipeTransform {\n transform(user?: User): string {\n if (user == null) {\n return null;\n }\n\n return user.name == null || user.name.trim() === \"\" ? user.email : user.name;\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nimport { AbstractStorageService } from \"@bitwarden/common/abstractions/storage.service\";\nimport { StateFactory } from \"@bitwarden/common/factories/stateFactory\";\n\nexport const WINDOW = new InjectionToken(\"WINDOW\");\nexport const MEMORY_STORAGE = new InjectionToken(\"MEMORY_STORAGE\");\nexport const SECURE_STORAGE = new InjectionToken(\"SECURE_STORAGE\");\nexport const STATE_FACTORY = new InjectionToken(\"STATE_FACTORY\");\nexport const STATE_SERVICE_USE_CACHE = new InjectionToken(\"STATE_SERVICE_USE_CACHE\");\nexport const LOGOUT_CALLBACK = new InjectionToken<(expired: boolean, userId?: string) => void>(\n \"LOGOUT_CALLBACK\"\n);\nexport const LOCKED_CALLBACK = new InjectionToken<() => void>(\"LOCKED_CALLBACK\");\nexport const CLIENT_TYPE = new InjectionToken(\"CLIENT_TYPE\");\nexport const LOCALES_DIRECTORY = new InjectionToken(\"LOCALES_DIRECTORY\");\nexport const SYSTEM_LANGUAGE = new InjectionToken(\"SYSTEM_LANGUAGE\");\nexport const LOG_MAC_FAILURES = new InjectionToken(\"LOG_MAC_FAILURES\");\n","import { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from \"@angular/cdk/a11y\";\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n ElementRef,\n OnDestroy,\n Type,\n ViewChild,\n ViewContainerRef,\n} from \"@angular/core\";\n\nimport { ModalService } from \"../../services/modal.service\";\n\nimport { ModalRef } from \"./modal.ref\";\n\n@Component({\n selector: \"app-modal\",\n template: \"\",\n})\nexport class DynamicModalComponent implements AfterViewInit, OnDestroy {\n componentRef: ComponentRef;\n\n @ViewChild(\"modalContent\", { read: ViewContainerRef, static: true })\n modalContentRef: ViewContainerRef;\n\n childComponentType: Type;\n setComponentParameters: (component: any) => void;\n\n private focusTrap: ConfigurableFocusTrap;\n\n constructor(\n private modalService: ModalService,\n private cd: ChangeDetectorRef,\n private el: ElementRef,\n private focusTrapFactory: ConfigurableFocusTrapFactory,\n public modalRef: ModalRef\n ) {}\n\n ngAfterViewInit() {\n this.loadChildComponent(this.childComponentType);\n if (this.setComponentParameters != null) {\n this.setComponentParameters(this.componentRef.instance);\n }\n this.cd.detectChanges();\n\n this.modalRef.created(this.el.nativeElement);\n this.focusTrap = this.focusTrapFactory.create(\n this.el.nativeElement.querySelector(\".modal-dialog\")\n );\n if (this.el.nativeElement.querySelector(\"[appAutoFocus]\") == null) {\n this.focusTrap.focusFirstTabbableElementWhenReady();\n }\n }\n\n loadChildComponent(componentType: Type) {\n const componentFactory = this.modalService.resolveComponentFactory(componentType);\n\n this.modalContentRef.clear();\n this.componentRef = this.modalContentRef.createComponent(componentFactory);\n }\n\n ngOnDestroy() {\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n this.focusTrap.destroy();\n }\n\n close() {\n this.modalRef.close();\n }\n\n getFocus() {\n const autoFocusEl = this.el.nativeElement.querySelector(\"[appAutoFocus]\") as HTMLElement;\n autoFocusEl?.focus();\n }\n}\n","import { InjectFlags, InjectionToken, Injector, Type } from \"@angular/core\";\n\nexport class ModalInjector implements Injector {\n constructor(private _parentInjector: Injector, private _additionalTokens: WeakMap) {}\n\n get(token: Type | InjectionToken, notFoundValue?: T, flags?: InjectFlags): T;\n get(token: any, notFoundValue?: any, flags?: any) {\n return this._additionalTokens.get(token) ?? this._parentInjector.get(token, notFoundValue);\n }\n}\n","import {\n ApplicationRef,\n ComponentFactory,\n ComponentFactoryResolver,\n ComponentRef,\n EmbeddedViewRef,\n Injectable,\n Injector,\n Type,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { first } from \"rxjs/operators\";\n\nimport { DynamicModalComponent } from \"../components/modal/dynamic-modal.component\";\nimport { ModalInjector } from \"../components/modal/modal-injector\";\nimport { ModalRef } from \"../components/modal/modal.ref\";\n\nexport class ModalConfig {\n data?: D;\n allowMultipleModals?: boolean;\n replaceTopModal?: boolean;\n}\n\n@Injectable()\nexport class ModalService {\n protected modalList: ComponentRef[] = [];\n\n // Lazy loaded modules are not available in componentFactoryResolver,\n // therefore modules needs to manually initialize their resolvers.\n private factoryResolvers: Map, ComponentFactoryResolver> = new Map();\n\n constructor(\n private componentFactoryResolver: ComponentFactoryResolver,\n private applicationRef: ApplicationRef,\n private injector: Injector\n ) {\n document.addEventListener(\"keyup\", (event) => {\n if (event.key === \"Escape\" && this.modalCount > 0) {\n this.topModal.instance.close();\n }\n });\n }\n\n get modalCount() {\n return this.modalList.length;\n }\n\n private get topModal() {\n return this.modalList[this.modalCount - 1];\n }\n\n /**\n * @deprecated Use `dialogService.open` (in web) or `modalService.open` (in desktop/browser) instead.\n * If replacing an existing call to this method, also remove any `@ViewChild` and `` associated with the\n * existing usage.\n */\n async openViewRef(\n componentType: Type,\n viewContainerRef: ViewContainerRef,\n setComponentParameters: (component: T) => void = null\n ): Promise<[ModalRef, T]> {\n const [modalRef, modalComponentRef] = this.openInternal(componentType, null, false);\n modalComponentRef.instance.setComponentParameters = setComponentParameters;\n\n viewContainerRef.insert(modalComponentRef.hostView);\n\n await modalRef.onCreated.pipe(first()).toPromise();\n\n return [modalRef, modalComponentRef.instance.componentRef.instance];\n }\n\n open(componentType: Type, config: ModalConfig = {}) {\n const { replaceTopModal = false, allowMultipleModals = false } = config;\n\n if (this.modalCount > 0 && replaceTopModal) {\n this.topModal.instance.close();\n }\n\n if (this.modalCount > 0 && !allowMultipleModals) {\n return;\n }\n\n const [modalRef] = this.openInternal(componentType, config, true);\n\n return modalRef;\n }\n\n registerComponentFactoryResolver(\n componentType: Type,\n componentFactoryResolver: ComponentFactoryResolver\n ): void {\n this.factoryResolvers.set(componentType, componentFactoryResolver);\n }\n\n resolveComponentFactory(componentType: Type): ComponentFactory {\n if (this.factoryResolvers.has(componentType)) {\n return this.factoryResolvers.get(componentType).resolveComponentFactory(componentType);\n }\n\n return this.componentFactoryResolver.resolveComponentFactory(componentType);\n }\n\n closeAll(): void {\n this.modalList.forEach((modal) => modal.instance.close());\n }\n\n protected openInternal(\n componentType: Type,\n config?: ModalConfig,\n attachToDom?: boolean\n ): [ModalRef, ComponentRef] {\n const [modalRef, componentRef] = this.createModalComponent(config);\n componentRef.instance.childComponentType = componentType;\n\n if (attachToDom) {\n this.applicationRef.attachView(componentRef.hostView);\n const domElem = (componentRef.hostView as EmbeddedViewRef).rootNodes[0] as HTMLElement;\n document.body.appendChild(domElem);\n }\n\n modalRef.onClosed.pipe(first()).subscribe(() => {\n if (attachToDom) {\n this.applicationRef.detachView(componentRef.hostView);\n }\n componentRef.destroy();\n\n this.modalList.pop();\n if (this.modalCount > 0) {\n this.topModal.instance.getFocus();\n }\n });\n\n this.setupHandlers(modalRef);\n\n this.modalList.push(componentRef);\n\n return [modalRef, componentRef];\n }\n\n protected setupHandlers(modalRef: ModalRef) {\n let backdrop: HTMLElement = null;\n\n // Add backdrop, setup [data-dismiss] handler.\n modalRef.onCreated.pipe(first()).subscribe((el) => {\n document.body.classList.add(\"modal-open\");\n\n const modalEl: HTMLElement = el.querySelector(\".modal\");\n const dialogEl = modalEl.querySelector(\".modal-dialog\") as HTMLElement;\n\n backdrop = document.createElement(\"div\");\n backdrop.className = \"modal-backdrop fade\";\n backdrop.style.zIndex = `${this.modalCount}040`;\n modalEl.prepend(backdrop);\n\n dialogEl.addEventListener(\"click\", (e: Event) => {\n e.stopPropagation();\n });\n dialogEl.style.zIndex = `${this.modalCount}050`;\n\n const modals = Array.from(\n el.querySelectorAll('.modal-backdrop, .modal *[data-dismiss=\"modal\"]')\n );\n for (const closeElement of modals) {\n closeElement.addEventListener(\"click\", () => {\n modalRef.close();\n });\n }\n });\n\n // onClose is used in Web to hook into bootstrap. On other projects we pipe it directly to closed.\n modalRef.onClose.pipe(first()).subscribe(() => {\n modalRef.closed();\n\n if (this.modalCount === 0) {\n document.body.classList.remove(\"modal-open\");\n }\n });\n }\n\n protected createModalComponent(\n config: ModalConfig\n ): [ModalRef, ComponentRef] {\n const modalRef = new ModalRef();\n\n const map = new WeakMap();\n map.set(ModalConfig, config);\n map.set(ModalRef, modalRef);\n\n const componentFactory =\n this.componentFactoryResolver.resolveComponentFactory(DynamicModalComponent);\n const componentRef = componentFactory.create(new ModalInjector(this.injector, map));\n\n return [modalRef, componentRef];\n }\n}\n","import { Observable } from \"rxjs\";\n\nimport { ThemeType } from \"@bitwarden/common/enums/themeType\";\n\nimport { Theme } from \"./theme\";\n\nexport abstract class AbstractThemingService {\n theme$: Observable;\n monitorThemeChanges: () => Promise;\n updateSystemTheme: (systemTheme: ThemeType) => void;\n updateConfiguredTheme: (theme: ThemeType) => Promise;\n}\n","import { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { FolderView } from \"@bitwarden/common/models/view/folder.view\";\n\nexport class DynamicTreeNode {\n fullList: T[];\n nestedList: TreeNode[];\n\n hasId(id: string): boolean {\n return this.fullList != null && this.fullList.filter((i: T) => i.id === id).length > 0;\n }\n\n constructor(init?: Partial>) {\n Object.assign(this, init);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { firstValueFrom, from, mergeMap, Observable } from \"rxjs\";\n\nimport { CipherService } from \"@bitwarden/common/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { FolderService } from \"@bitwarden/common/abstractions/folder/folder.service.abstraction\";\nimport {\n isNotProviderUser,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { ServiceUtils } from \"@bitwarden/common/misc/serviceUtils\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { FolderView } from \"@bitwarden/common/models/view/folder.view\";\n\nimport { DynamicTreeNode } from \"../models/dynamic-tree-node.model\";\n\nconst NestingDelimiter = \"/\";\n\n@Injectable()\nexport class VaultFilterService {\n constructor(\n protected stateService: StateService,\n protected organizationService: OrganizationService,\n protected folderService: FolderService,\n protected cipherService: CipherService,\n protected collectionService: CollectionService,\n protected policyService: PolicyService\n ) {}\n\n async storeCollapsedFilterNodes(collapsedFilterNodes: Set): Promise {\n await this.stateService.setCollapsedGroupings(Array.from(collapsedFilterNodes));\n }\n\n async buildCollapsedFilterNodes(): Promise> {\n return new Set(await this.stateService.getCollapsedGroupings());\n }\n\n async buildOrganizations(): Promise {\n let organizations = await this.organizationService.getAll();\n if (organizations != null) {\n organizations = organizations.filter(isNotProviderUser);\n }\n\n return organizations;\n }\n\n buildNestedFolders(organizationId?: string): Observable> {\n const transformation = async (storedFolders: FolderView[]) => {\n let folders: FolderView[];\n if (organizationId != null) {\n const ciphers = await this.cipherService.getAllDecrypted();\n const orgCiphers = ciphers.filter((c) => c.organizationId == organizationId);\n folders = storedFolders.filter(\n (f) =>\n orgCiphers.filter((oc) => oc.folderId == f.id).length > 0 ||\n ciphers.filter((c) => c.folderId == f.id).length < 1\n );\n } else {\n folders = storedFolders;\n }\n const nestedFolders = await this.getAllFoldersNested(folders);\n return new DynamicTreeNode({\n fullList: folders,\n nestedList: nestedFolders,\n });\n };\n\n return this.folderService.folderViews$.pipe(\n mergeMap((folders) => from(transformation(folders)))\n );\n }\n\n async buildCollections(organizationId?: string): Promise> {\n const storedCollections = await this.collectionService.getAllDecrypted();\n let collections: CollectionView[];\n if (organizationId != null) {\n collections = storedCollections.filter((c) => c.organizationId === organizationId);\n } else {\n collections = storedCollections;\n }\n const nestedCollections = await this.collectionService.getAllNested(collections);\n return new DynamicTreeNode({\n fullList: collections,\n nestedList: nestedCollections,\n });\n }\n\n async checkForSingleOrganizationPolicy(): Promise {\n return await firstValueFrom(\n this.policyService.policyAppliesToActiveUser$(PolicyType.SingleOrg)\n );\n }\n\n async checkForPersonalOwnershipPolicy(): Promise {\n return await firstValueFrom(\n this.policyService.policyAppliesToActiveUser$(PolicyType.PersonalOwnership)\n );\n }\n\n protected async getAllFoldersNested(folders: FolderView[]): Promise[]> {\n const nodes: TreeNode[] = [];\n folders.forEach((f) => {\n const folderCopy = new FolderView();\n folderCopy.id = f.id;\n folderCopy.revisionDate = f.revisionDate;\n const parts = f.name != null ? f.name.replace(/^\\/+|\\/+$/g, \"\").split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, folderCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n async getFolderNested(id: string): Promise> {\n const folders = await this.getAllFoldersNested(\n await firstValueFrom(this.folderService.folderViews$)\n );\n return ServiceUtils.getTreeNodeObject(folders, id) as TreeNode;\n }\n}\n","import { OrganizationConnectionType } from \"../enums/organizationConnectionType\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/set-key-connector-key.request\";\nimport { AttachmentRequest } from \"../models/request/attachment.request\";\nimport { BitPayInvoiceRequest } from \"../models/request/bit-pay-invoice.request\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipher-bulk-delete.request\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipher-bulk-move.request\";\nimport { CipherBulkRestoreRequest } from \"../models/request/cipher-bulk-restore.request\";\nimport { CipherBulkShareRequest } from \"../models/request/cipher-bulk-share.request\";\nimport { CipherCollectionsRequest } from \"../models/request/cipher-collections.request\";\nimport { CipherCreateRequest } from \"../models/request/cipher-create.request\";\nimport { CipherPartialRequest } from \"../models/request/cipher-partial.request\";\nimport { CipherShareRequest } from \"../models/request/cipher-share.request\";\nimport { CipherRequest } from \"../models/request/cipher.request\";\nimport { CollectionRequest } from \"../models/request/collection.request\";\nimport { DeleteRecoverRequest } from \"../models/request/delete-recover.request\";\nimport { DeviceVerificationRequest } from \"../models/request/device-verification.request\";\nimport { EmailTokenRequest } from \"../models/request/email-token.request\";\nimport { EmailRequest } from \"../models/request/email.request\";\nimport { EmergencyAccessAcceptRequest } from \"../models/request/emergency-access-accept.request\";\nimport { EmergencyAccessConfirmRequest } from \"../models/request/emergency-access-confirm.request\";\nimport { EmergencyAccessInviteRequest } from \"../models/request/emergency-access-invite.request\";\nimport { EmergencyAccessPasswordRequest } from \"../models/request/emergency-access-password.request\";\nimport { EmergencyAccessUpdateRequest } from \"../models/request/emergency-access-update.request\";\nimport { EventRequest } from \"../models/request/event.request\";\nimport { GroupRequest } from \"../models/request/group.request\";\nimport { IapCheckRequest } from \"../models/request/iap-check.request\";\nimport { ApiTokenRequest } from \"../models/request/identity-token/api-token.request\";\nimport { PasswordTokenRequest } from \"../models/request/identity-token/password-token.request\";\nimport { SsoTokenRequest } from \"../models/request/identity-token/sso-token.request\";\nimport { ImportCiphersRequest } from \"../models/request/import-ciphers.request\";\nimport { ImportOrganizationCiphersRequest } from \"../models/request/import-organization-ciphers.request\";\nimport { KdfRequest } from \"../models/request/kdf.request\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/key-connector-user-key.request\";\nimport { KeysRequest } from \"../models/request/keys.request\";\nimport { OrganizationConnectionRequest } from \"../models/request/organization-connection.request\";\nimport { OrganizationImportRequest } from \"../models/request/organization-import.request\";\nimport { OrganizationUserAcceptRequest } from \"../models/request/organization-user-accept.request\";\nimport { OrganizationUserBulkConfirmRequest } from \"../models/request/organization-user-bulk-confirm.request\";\nimport { OrganizationUserBulkRequest } from \"../models/request/organization-user-bulk.request\";\nimport { OrganizationUserConfirmRequest } from \"../models/request/organization-user-confirm.request\";\nimport { OrganizationUserInviteRequest } from \"../models/request/organization-user-invite.request\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"../models/request/organization-user-reset-password-enrollment.request\";\nimport { OrganizationUserResetPasswordRequest } from \"../models/request/organization-user-reset-password.request\";\nimport { OrganizationUserUpdateGroupsRequest } from \"../models/request/organization-user-update-groups.request\";\nimport { OrganizationUserUpdateRequest } from \"../models/request/organization-user-update.request\";\nimport { OrganizationSponsorshipCreateRequest } from \"../models/request/organization/organization-sponsorship-create.request\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../models/request/organization/organization-sponsorship-redeem.request\";\nimport { PasswordHintRequest } from \"../models/request/password-hint.request\";\nimport { PasswordRequest } from \"../models/request/password.request\";\nimport { PasswordlessCreateAuthRequest } from \"../models/request/passwordless-create-auth.request\";\nimport { PaymentRequest } from \"../models/request/payment.request\";\nimport { PreloginRequest } from \"../models/request/prelogin.request\";\nimport { ProviderAddOrganizationRequest } from \"../models/request/provider/provider-add-organization.request\";\nimport { ProviderOrganizationCreateRequest } from \"../models/request/provider/provider-organization-create.request\";\nimport { ProviderSetupRequest } from \"../models/request/provider/provider-setup.request\";\nimport { ProviderUpdateRequest } from \"../models/request/provider/provider-update.request\";\nimport { ProviderUserAcceptRequest } from \"../models/request/provider/provider-user-accept.request\";\nimport { ProviderUserBulkConfirmRequest } from \"../models/request/provider/provider-user-bulk-confirm.request\";\nimport { ProviderUserBulkRequest } from \"../models/request/provider/provider-user-bulk.request\";\nimport { ProviderUserConfirmRequest } from \"../models/request/provider/provider-user-confirm.request\";\nimport { ProviderUserInviteRequest } from \"../models/request/provider/provider-user-invite.request\";\nimport { ProviderUserUpdateRequest } from \"../models/request/provider/provider-user-update.request\";\nimport { RegisterRequest } from \"../models/request/register.request\";\nimport { SecretVerificationRequest } from \"../models/request/secret-verification.request\";\nimport { SelectionReadOnlyRequest } from \"../models/request/selection-read-only.request\";\nimport { SendAccessRequest } from \"../models/request/send-access.request\";\nimport { SendRequest } from \"../models/request/send.request\";\nimport { SetPasswordRequest } from \"../models/request/set-password.request\";\nimport { StorageRequest } from \"../models/request/storage.request\";\nimport { TaxInfoUpdateRequest } from \"../models/request/tax-info-update.request\";\nimport { TwoFactorEmailRequest } from \"../models/request/two-factor-email.request\";\nimport { TwoFactorProviderRequest } from \"../models/request/two-factor-provider.request\";\nimport { TwoFactorRecoveryRequest } from \"../models/request/two-factor-recovery.request\";\nimport { UpdateDomainsRequest } from \"../models/request/update-domains.request\";\nimport { UpdateKeyRequest } from \"../models/request/update-key.request\";\nimport { UpdateProfileRequest } from \"../models/request/update-profile.request\";\nimport { UpdateTempPasswordRequest } from \"../models/request/update-temp-password.request\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../models/request/update-two-factor-authenticator.request\";\nimport { UpdateTwoFactorDuoRequest } from \"../models/request/update-two-factor-duo.request\";\nimport { UpdateTwoFactorEmailRequest } from \"../models/request/update-two-factor-email.request\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../models/request/update-two-factor-web-authn-delete.request\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../models/request/update-two-factor-web-authn.request\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../models/request/update-two-factor-yubio-otp.request\";\nimport { VerifyDeleteRecoverRequest } from \"../models/request/verify-delete-recover.request\";\nimport { VerifyEmailRequest } from \"../models/request/verify-email.request\";\nimport { ApiKeyResponse } from \"../models/response/api-key.response\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachment-upload-data.response\";\nimport { AttachmentResponse } from \"../models/response/attachment.response\";\nimport { AuthRequestResponse } from \"../models/response/auth-request.response\";\nimport { RegisterResponse } from \"../models/response/authentication/register.response\";\nimport { BillingHistoryResponse } from \"../models/response/billing-history.response\";\nimport { BillingPaymentResponse } from \"../models/response/billing-payment.response\";\nimport { BreachAccountResponse } from \"../models/response/breach-account.response\";\nimport { CipherResponse } from \"../models/response/cipher.response\";\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from \"../models/response/collection.response\";\nimport { DeviceVerificationResponse } from \"../models/response/device-verification.response\";\nimport { DomainsResponse } from \"../models/response/domains.response\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse,\n} from \"../models/response/emergency-access.response\";\nimport { EventResponse } from \"../models/response/event.response\";\nimport { GroupDetailsResponse, GroupResponse } from \"../models/response/group.response\";\nimport { IdentityCaptchaResponse } from \"../models/response/identity-captcha.response\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identity-two-factor.response\";\nimport { KeyConnectorUserKeyResponse } from \"../models/response/key-connector-user-key.response\";\nimport { ListResponse } from \"../models/response/list.response\";\nimport {\n OrganizationConnectionConfigApis,\n OrganizationConnectionResponse,\n} from \"../models/response/organization-connection.response\";\nimport { OrganizationExportResponse } from \"../models/response/organization-export.response\";\nimport { OrganizationSponsorshipSyncStatusResponse } from \"../models/response/organization-sponsorship-sync-status.response\";\nimport { OrganizationUserBulkPublicKeyResponse } from \"../models/response/organization-user-bulk-public-key.response\";\nimport { OrganizationUserBulkResponse } from \"../models/response/organization-user-bulk.response\";\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n} from \"../models/response/organization-user.response\";\nimport { PaymentResponse } from \"../models/response/payment.response\";\nimport { PlanResponse } from \"../models/response/plan.response\";\nimport { PolicyResponse } from \"../models/response/policy.response\";\nimport { PreloginResponse } from \"../models/response/prelogin.response\";\nimport { ProfileResponse } from \"../models/response/profile.response\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../models/response/provider/provider-organization.response\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../models/response/provider/provider-user-bulk-public-key.response\";\nimport { ProviderUserBulkResponse } from \"../models/response/provider/provider-user-bulk.response\";\nimport {\n ProviderUserUserDetailsResponse,\n ProviderUserResponse,\n} from \"../models/response/provider/provider-user.response\";\nimport { ProviderResponse } from \"../models/response/provider/provider.response\";\nimport { SelectionReadOnlyResponse } from \"../models/response/selection-read-only.response\";\nimport { SendAccessResponse } from \"../models/response/send-access.response\";\nimport { SendFileDownloadDataResponse } from \"../models/response/send-file-download-data.response\";\nimport { SendFileUploadDataResponse } from \"../models/response/send-file-upload-data.response\";\nimport { SendResponse } from \"../models/response/send.response\";\nimport { SsoPreValidateResponse } from \"../models/response/sso-pre-validate.response\";\nimport { SubscriptionResponse } from \"../models/response/subscription.response\";\nimport { SyncResponse } from \"../models/response/sync.response\";\nimport { TaxInfoResponse } from \"../models/response/tax-info.response\";\nimport { TaxRateResponse } from \"../models/response/tax-rate.response\";\nimport { TwoFactorAuthenticatorResponse } from \"../models/response/two-factor-authenticator.response\";\nimport { TwoFactorDuoResponse } from \"../models/response/two-factor-duo.response\";\nimport { TwoFactorEmailResponse } from \"../models/response/two-factor-email.response\";\nimport { TwoFactorProviderResponse } from \"../models/response/two-factor-provider.response\";\nimport { TwoFactorRecoverResponse } from \"../models/response/two-factor-recover.response\";\nimport {\n TwoFactorWebAuthnResponse,\n ChallengeResponse,\n} from \"../models/response/two-factor-web-authn.response\";\nimport { TwoFactorYubiKeyResponse } from \"../models/response/two-factor-yubi-key.response\";\nimport { UserKeyResponse } from \"../models/response/user-key.response\";\nimport { SendAccessView } from \"../models/view/send-access.view\";\n\nexport abstract class ApiService {\n send: (\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n path: string,\n body: any,\n authed: boolean,\n hasResponse: boolean,\n apiUrl?: string,\n alterHeaders?: (headers: Headers) => void\n ) => Promise;\n\n postIdentityToken: (\n request: PasswordTokenRequest | SsoTokenRequest | ApiTokenRequest\n ) => Promise;\n refreshIdentityToken: () => Promise;\n\n getProfile: () => Promise;\n getUserSubscription: () => Promise;\n getTaxInfo: () => Promise;\n putProfile: (request: UpdateProfileRequest) => Promise;\n putTaxInfo: (request: TaxInfoUpdateRequest) => Promise;\n postPrelogin: (request: PreloginRequest) => Promise;\n postEmailToken: (request: EmailTokenRequest) => Promise;\n postEmail: (request: EmailRequest) => Promise;\n postPassword: (request: PasswordRequest) => Promise;\n setPassword: (request: SetPasswordRequest) => Promise;\n postSetKeyConnectorKey: (request: SetKeyConnectorKeyRequest) => Promise;\n postSecurityStamp: (request: SecretVerificationRequest) => Promise;\n getAccountRevisionDate: () => Promise;\n postPasswordHint: (request: PasswordHintRequest) => Promise;\n postRegister: (request: RegisterRequest) => Promise;\n postPremium: (data: FormData) => Promise;\n postIapCheck: (request: IapCheckRequest) => Promise;\n postReinstatePremium: () => Promise;\n postCancelPremium: () => Promise;\n postAccountStorage: (request: StorageRequest) => Promise;\n postAccountPayment: (request: PaymentRequest) => Promise;\n postAccountLicense: (data: FormData) => Promise;\n postAccountKey: (request: UpdateKeyRequest) => Promise;\n postAccountKeys: (request: KeysRequest) => Promise;\n postAccountVerifyEmail: () => Promise;\n postAccountVerifyEmailToken: (request: VerifyEmailRequest) => Promise;\n postAccountVerifyPassword: (request: SecretVerificationRequest) => Promise;\n postAccountRecoverDelete: (request: DeleteRecoverRequest) => Promise;\n postAccountRecoverDeleteToken: (request: VerifyDeleteRecoverRequest) => Promise;\n postAccountKdf: (request: KdfRequest) => Promise;\n postUserApiKey: (id: string, request: SecretVerificationRequest) => Promise;\n postUserRotateApiKey: (id: string, request: SecretVerificationRequest) => Promise;\n putUpdateTempPassword: (request: UpdateTempPasswordRequest) => Promise;\n postConvertToKeyConnector: () => Promise;\n //passwordless\n postAuthRequest: (request: PasswordlessCreateAuthRequest) => Promise;\n getAuthResponse: (id: string, accessCode: string) => Promise;\n\n getUserBillingHistory: () => Promise;\n getUserBillingPayment: () => Promise;\n\n getSend: (id: string) => Promise;\n postSendAccess: (\n id: string,\n request: SendAccessRequest,\n apiUrl?: string\n ) => Promise;\n getSends: () => Promise>;\n postSend: (request: SendRequest) => Promise;\n postFileTypeSend: (request: SendRequest) => Promise;\n postSendFile: (sendId: string, fileId: string, data: FormData) => Promise;\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n postSendFileLegacy: (data: FormData) => Promise;\n putSend: (id: string, request: SendRequest) => Promise;\n putSendRemovePassword: (id: string) => Promise;\n deleteSend: (id: string) => Promise;\n getSendFileDownloadData: (\n send: SendAccessView,\n request: SendAccessRequest,\n apiUrl?: string\n ) => Promise;\n renewSendFileUploadUrl: (sendId: string, fileId: string) => Promise;\n\n getCipher: (id: string) => Promise;\n getFullCipherDetails: (id: string) => Promise;\n getCipherAdmin: (id: string) => Promise;\n getAttachmentData: (\n cipherId: string,\n attachmentId: string,\n emergencyAccessId?: string\n ) => Promise;\n getCiphersOrganization: (organizationId: string) => Promise>;\n postCipher: (request: CipherRequest) => Promise;\n postCipherCreate: (request: CipherCreateRequest) => Promise;\n postCipherAdmin: (request: CipherCreateRequest) => Promise;\n putCipher: (id: string, request: CipherRequest) => Promise;\n putPartialCipher: (id: string, request: CipherPartialRequest) => Promise;\n putCipherAdmin: (id: string, request: CipherRequest) => Promise;\n deleteCipher: (id: string) => Promise;\n deleteCipherAdmin: (id: string) => Promise;\n deleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise;\n deleteManyCiphersAdmin: (request: CipherBulkDeleteRequest) => Promise;\n putMoveCiphers: (request: CipherBulkMoveRequest) => Promise;\n putShareCipher: (id: string, request: CipherShareRequest) => Promise;\n putShareCiphers: (request: CipherBulkShareRequest) => Promise;\n putCipherCollections: (id: string, request: CipherCollectionsRequest) => Promise;\n putCipherCollectionsAdmin: (id: string, request: CipherCollectionsRequest) => Promise;\n postPurgeCiphers: (request: SecretVerificationRequest, organizationId?: string) => Promise;\n postImportCiphers: (request: ImportCiphersRequest) => Promise;\n postImportOrganizationCiphers: (\n organizationId: string,\n request: ImportOrganizationCiphersRequest\n ) => Promise;\n putDeleteCipher: (id: string) => Promise;\n putDeleteCipherAdmin: (id: string) => Promise;\n putDeleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise;\n putDeleteManyCiphersAdmin: (request: CipherBulkDeleteRequest) => Promise;\n putRestoreCipher: (id: string) => Promise;\n putRestoreCipherAdmin: (id: string) => Promise;\n putRestoreManyCiphers: (\n request: CipherBulkRestoreRequest\n ) => Promise>;\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n postCipherAttachmentLegacy: (id: string, data: FormData) => Promise;\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n postCipherAttachmentAdminLegacy: (id: string, data: FormData) => Promise;\n postCipherAttachment: (\n id: string,\n request: AttachmentRequest\n ) => Promise;\n deleteCipherAttachment: (id: string, attachmentId: string) => Promise;\n deleteCipherAttachmentAdmin: (id: string, attachmentId: string) => Promise;\n postShareCipherAttachment: (\n id: string,\n attachmentId: string,\n data: FormData,\n organizationId: string\n ) => Promise;\n renewAttachmentUploadUrl: (\n id: string,\n attachmentId: string\n ) => Promise;\n postAttachmentFile: (id: string, attachmentId: string, data: FormData) => Promise;\n\n getCollectionDetails: (\n organizationId: string,\n id: string\n ) => Promise;\n getUserCollections: () => Promise>;\n getCollections: (organizationId: string) => Promise>;\n getCollectionUsers: (organizationId: string, id: string) => Promise;\n postCollection: (\n organizationId: string,\n request: CollectionRequest\n ) => Promise;\n putCollectionUsers: (\n organizationId: string,\n id: string,\n request: SelectionReadOnlyRequest[]\n ) => Promise;\n putCollection: (\n organizationId: string,\n id: string,\n request: CollectionRequest\n ) => Promise;\n deleteCollection: (organizationId: string, id: string) => Promise;\n deleteCollectionUser: (\n organizationId: string,\n id: string,\n organizationUserId: string\n ) => Promise;\n\n getGroupDetails: (organizationId: string, id: string) => Promise;\n getGroups: (organizationId: string) => Promise>;\n getGroupUsers: (organizationId: string, id: string) => Promise;\n postGroup: (organizationId: string, request: GroupRequest) => Promise;\n putGroup: (organizationId: string, id: string, request: GroupRequest) => Promise;\n putGroupUsers: (organizationId: string, id: string, request: string[]) => Promise;\n deleteGroup: (organizationId: string, id: string) => Promise;\n deleteGroupUser: (organizationId: string, id: string, organizationUserId: string) => Promise;\n\n getOrganizationUser: (\n organizationId: string,\n id: string\n ) => Promise;\n getOrganizationUserGroups: (organizationId: string, id: string) => Promise;\n getOrganizationUsers: (\n organizationId: string\n ) => Promise>;\n getOrganizationUserResetPasswordDetails: (\n organizationId: string,\n id: string\n ) => Promise;\n postOrganizationUserInvite: (\n organizationId: string,\n request: OrganizationUserInviteRequest\n ) => Promise;\n postOrganizationUserReinvite: (organizationId: string, id: string) => Promise;\n postManyOrganizationUserReinvite: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n postOrganizationUserAccept: (\n organizationId: string,\n id: string,\n request: OrganizationUserAcceptRequest\n ) => Promise;\n postOrganizationUserConfirm: (\n organizationId: string,\n id: string,\n request: OrganizationUserConfirmRequest\n ) => Promise;\n postOrganizationUsersPublicKey: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n postOrganizationUserBulkConfirm: (\n organizationId: string,\n request: OrganizationUserBulkConfirmRequest\n ) => Promise>;\n\n putOrganizationUser: (\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateRequest\n ) => Promise;\n putOrganizationUserGroups: (\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateGroupsRequest\n ) => Promise;\n putOrganizationUserResetPasswordEnrollment: (\n organizationId: string,\n userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest\n ) => Promise;\n putOrganizationUserResetPassword: (\n organizationId: string,\n id: string,\n request: OrganizationUserResetPasswordRequest\n ) => Promise;\n deleteOrganizationUser: (organizationId: string, id: string) => Promise;\n deleteManyOrganizationUsers: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n revokeOrganizationUser: (organizationId: string, id: string) => Promise;\n revokeManyOrganizationUsers: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n restoreOrganizationUser: (organizationId: string, id: string) => Promise;\n restoreManyOrganizationUsers: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n\n getSync: () => Promise;\n postPublicImportDirectory: (request: OrganizationImportRequest) => Promise;\n\n getSettingsDomains: () => Promise;\n putSettingsDomains: (request: UpdateDomainsRequest) => Promise;\n\n getTwoFactorProviders: () => Promise>;\n getTwoFactorOrganizationProviders: (\n organizationId: string\n ) => Promise>;\n getTwoFactorAuthenticator: (\n request: SecretVerificationRequest\n ) => Promise;\n getTwoFactorEmail: (request: SecretVerificationRequest) => Promise;\n getTwoFactorDuo: (request: SecretVerificationRequest) => Promise;\n getTwoFactorOrganizationDuo: (\n organizationId: string,\n request: SecretVerificationRequest\n ) => Promise;\n getTwoFactorYubiKey: (request: SecretVerificationRequest) => Promise;\n getTwoFactorWebAuthn: (request: SecretVerificationRequest) => Promise;\n getTwoFactorWebAuthnChallenge: (request: SecretVerificationRequest) => Promise;\n getTwoFactorRecover: (request: SecretVerificationRequest) => Promise;\n putTwoFactorAuthenticator: (\n request: UpdateTwoFactorAuthenticatorRequest\n ) => Promise;\n putTwoFactorEmail: (request: UpdateTwoFactorEmailRequest) => Promise;\n putTwoFactorDuo: (request: UpdateTwoFactorDuoRequest) => Promise;\n putTwoFactorOrganizationDuo: (\n organizationId: string,\n request: UpdateTwoFactorDuoRequest\n ) => Promise;\n putTwoFactorYubiKey: (\n request: UpdateTwoFactorYubioOtpRequest\n ) => Promise;\n putTwoFactorWebAuthn: (\n request: UpdateTwoFactorWebAuthnRequest\n ) => Promise;\n deleteTwoFactorWebAuthn: (\n request: UpdateTwoFactorWebAuthnDeleteRequest\n ) => Promise;\n putTwoFactorDisable: (request: TwoFactorProviderRequest) => Promise;\n putTwoFactorOrganizationDisable: (\n organizationId: string,\n request: TwoFactorProviderRequest\n ) => Promise;\n postTwoFactorRecover: (request: TwoFactorRecoveryRequest) => Promise;\n postTwoFactorEmailSetup: (request: TwoFactorEmailRequest) => Promise;\n postTwoFactorEmail: (request: TwoFactorEmailRequest) => Promise;\n getDeviceVerificationSettings: () => Promise;\n putDeviceVerificationSettings: (\n request: DeviceVerificationRequest\n ) => Promise;\n getKnownDevice: (email: string, deviceIdentifier: string) => Promise;\n\n getEmergencyAccessTrusted: () => Promise>;\n getEmergencyAccessGranted: () => Promise>;\n getEmergencyAccess: (id: string) => Promise;\n getEmergencyGrantorPolicies: (id: string) => Promise>;\n putEmergencyAccess: (id: string, request: EmergencyAccessUpdateRequest) => Promise;\n deleteEmergencyAccess: (id: string) => Promise;\n postEmergencyAccessInvite: (request: EmergencyAccessInviteRequest) => Promise;\n postEmergencyAccessReinvite: (id: string) => Promise;\n postEmergencyAccessAccept: (id: string, request: EmergencyAccessAcceptRequest) => Promise;\n postEmergencyAccessConfirm: (id: string, request: EmergencyAccessConfirmRequest) => Promise;\n postEmergencyAccessInitiate: (id: string) => Promise;\n postEmergencyAccessApprove: (id: string) => Promise;\n postEmergencyAccessReject: (id: string) => Promise;\n postEmergencyAccessTakeover: (id: string) => Promise;\n postEmergencyAccessPassword: (\n id: string,\n request: EmergencyAccessPasswordRequest\n ) => Promise;\n postEmergencyAccessView: (id: string) => Promise;\n getCloudCommunicationsEnabled: () => Promise;\n abstract getOrganizationConnection(\n id: string,\n type: OrganizationConnectionType,\n configType: { new (response: any): TConfig }\n ): Promise>;\n abstract createOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig }\n ): Promise>;\n abstract updateOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig },\n organizationConnectionId: string\n ): Promise>;\n deleteOrganizationConnection: (id: string) => Promise;\n getPlans: () => Promise>;\n getTaxRates: () => Promise>;\n\n postProviderSetup: (id: string, request: ProviderSetupRequest) => Promise;\n getProvider: (id: string) => Promise;\n putProvider: (id: string, request: ProviderUpdateRequest) => Promise;\n\n getProviderUsers: (providerId: string) => Promise>;\n getProviderUser: (providerId: string, id: string) => Promise;\n postProviderUserInvite: (providerId: string, request: ProviderUserInviteRequest) => Promise;\n postProviderUserReinvite: (providerId: string, id: string) => Promise;\n postManyProviderUserReinvite: (\n providerId: string,\n request: ProviderUserBulkRequest\n ) => Promise>;\n postProviderUserAccept: (\n providerId: string,\n id: string,\n request: ProviderUserAcceptRequest\n ) => Promise;\n postProviderUserConfirm: (\n providerId: string,\n id: string,\n request: ProviderUserConfirmRequest\n ) => Promise;\n postProviderUsersPublicKey: (\n providerId: string,\n request: ProviderUserBulkRequest\n ) => Promise>;\n postProviderUserBulkConfirm: (\n providerId: string,\n request: ProviderUserBulkConfirmRequest\n ) => Promise>;\n putProviderUser: (\n providerId: string,\n id: string,\n request: ProviderUserUpdateRequest\n ) => Promise;\n deleteProviderUser: (organizationId: string, id: string) => Promise;\n deleteManyProviderUsers: (\n providerId: string,\n request: ProviderUserBulkRequest\n ) => Promise>;\n getProviderClients: (\n providerId: string\n ) => Promise>;\n postProviderAddOrganization: (\n providerId: string,\n request: ProviderAddOrganizationRequest\n ) => Promise;\n postProviderCreateOrganization: (\n providerId: string,\n request: ProviderOrganizationCreateRequest\n ) => Promise;\n deleteProviderOrganization: (providerId: string, organizationId: string) => Promise;\n\n getEvents: (start: string, end: string, token: string) => Promise>;\n getEventsCipher: (\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsOrganization: (\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsOrganizationUser: (\n organizationId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsProvider: (\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsProviderUser: (\n providerId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n postEventsCollect: (request: EventRequest[]) => Promise;\n\n deleteSsoUser: (organizationId: string) => Promise;\n getSsoUserIdentifier: () => Promise;\n\n getUserPublicKey: (id: string) => Promise;\n\n getHibpBreach: (username: string) => Promise;\n\n postBitPayInvoice: (request: BitPayInvoiceRequest) => Promise;\n postSetupPayment: () => Promise;\n\n getActiveBearerToken: () => Promise;\n fetch: (request: Request) => Promise;\n nativeFetch: (request: Request) => Promise;\n\n preValidateSso: (identifier: string) => Promise;\n\n postCreateSponsorship: (\n sponsorshipOrgId: string,\n request: OrganizationSponsorshipCreateRequest\n ) => Promise;\n getSponsorshipSyncStatus: (\n sponsoredOrgId: string\n ) => Promise;\n deleteRevokeSponsorship: (sponsoringOrganizationId: string) => Promise;\n deleteRemoveSponsorship: (sponsoringOrgId: string) => Promise;\n postPreValidateSponsorshipToken: (sponsorshipToken: string) => Promise;\n postRedeemSponsorship: (\n sponsorshipToken: string,\n request: OrganizationSponsorshipRedeemRequest\n ) => Promise;\n postResendSponsorshipOffer: (sponsoringOrgId: string) => Promise;\n\n getUserKeyFromKeyConnector: (keyConnectorUrl: string) => Promise;\n postUserKeyToKeyConnector: (\n keyConnectorUrl: string,\n request: KeyConnectorUserKeyRequest\n ) => Promise;\n getKeyConnectorAlive: (keyConnectorUrl: string) => Promise;\n getOrganizationExport: (organizationId: string) => Promise;\n}\n","import { BreachAccountResponse } from \"../models/response/breach-account.response\";\n\nexport abstract class AuditService {\n passwordLeaked: (password: string) => Promise;\n breachedAccounts: (username: string) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { AuthenticationStatus } from \"../enums/authenticationStatus\";\nimport { AuthResult } from \"../models/domain/auth-result\";\nimport {\n ApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../models/domain/log-in-credentials\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { TokenTwoFactorRequest } from \"../models/request/identity-token/token-two-factor.request\";\nimport { AuthRequestPushNotification } from \"../models/response/notification.response\";\n\nexport abstract class AuthService {\n masterPasswordHash: string;\n email: string;\n accessCode: string;\n authRequestId: string;\n\n logIn: (\n credentials:\n | ApiLogInCredentials\n | PasswordLogInCredentials\n | SsoLogInCredentials\n | PasswordlessLogInCredentials\n ) => Promise;\n logInTwoFactor: (\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ) => Promise;\n logOut: (callback: () => void) => void;\n makePreloginKey: (masterPassword: string, email: string) => Promise;\n authingWithApiKey: () => boolean;\n authingWithSso: () => boolean;\n authingWithPassword: () => boolean;\n authingWithPasswordless: () => boolean;\n getAuthStatus: (userId?: string) => Promise;\n authResponsePushNotifiction: (notification: AuthRequestPushNotification) => Promise;\n\n getPushNotifcationObs$: () => Observable;\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CipherData } from \"../models/data/cipher.data\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport { Field } from \"../models/domain/field\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { CipherView } from \"../models/view/cipher.view\";\nimport { FieldView } from \"../models/view/field.view\";\n\nexport abstract class CipherService {\n clearCache: (userId?: string) => Promise;\n encrypt: (\n model: CipherView,\n key?: SymmetricCryptoKey,\n originalCipher?: Cipher\n ) => Promise;\n encryptFields: (fieldsModel: FieldView[], key: SymmetricCryptoKey) => Promise;\n encryptField: (fieldModel: FieldView, key: SymmetricCryptoKey) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllDecryptedForGrouping: (groupingId: string, folder?: boolean) => Promise;\n getAllDecryptedForUrl: (\n url: string,\n includeOtherTypes?: CipherType[],\n defaultMatch?: UriMatchType\n ) => Promise;\n getAllFromApiForOrganization: (organizationId: string) => Promise;\n getLastUsedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise;\n getLastLaunchedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise;\n getNextCipherForUrl: (url: string) => Promise;\n updateLastUsedIndexForUrl: (url: string) => void;\n updateLastUsedDate: (id: string) => Promise;\n updateLastLaunchedDate: (id: string) => Promise;\n saveNeverDomain: (domain: string) => Promise;\n createWithServer: (cipher: Cipher) => Promise;\n updateWithServer: (cipher: Cipher) => Promise;\n shareWithServer: (\n cipher: CipherView,\n organizationId: string,\n collectionIds: string[]\n ) => Promise;\n shareManyWithServer: (\n ciphers: CipherView[],\n organizationId: string,\n collectionIds: string[]\n ) => Promise;\n saveAttachmentWithServer: (\n cipher: Cipher,\n unencryptedFile: any,\n admin?: boolean\n ) => Promise;\n saveAttachmentRawWithServer: (\n cipher: Cipher,\n filename: string,\n data: ArrayBuffer,\n admin?: boolean\n ) => Promise;\n saveCollectionsWithServer: (cipher: Cipher) => Promise;\n upsert: (cipher: CipherData | CipherData[]) => Promise;\n replace: (ciphers: { [id: string]: CipherData }) => Promise;\n clear: (userId: string) => Promise;\n moveManyWithServer: (ids: string[], folderId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string) => Promise;\n deleteManyWithServer: (ids: string[]) => Promise;\n deleteAttachment: (id: string, attachmentId: string) => Promise;\n deleteAttachmentWithServer: (id: string, attachmentId: string) => Promise;\n sortCiphersByLastUsed: (a: any, b: any) => number;\n sortCiphersByLastUsedThenName: (a: any, b: any) => number;\n getLocaleSortingFunction: () => (a: CipherView, b: CipherView) => number;\n softDelete: (id: string | string[]) => Promise;\n softDeleteWithServer: (id: string) => Promise;\n softDeleteManyWithServer: (ids: string[]) => Promise;\n restore: (\n cipher: { id: string; revisionDate: string } | { id: string; revisionDate: string }[]\n ) => Promise;\n restoreWithServer: (id: string) => Promise;\n restoreManyWithServer: (ids: string[]) => Promise;\n}\n","import { CollectionData } from \"../models/data/collection.data\";\nimport { Collection } from \"../models/domain/collection\";\nimport { TreeNode } from \"../models/domain/tree-node\";\nimport { CollectionView } from \"../models/view/collection.view\";\n\nexport abstract class CollectionService {\n clearCache: (userId?: string) => Promise;\n encrypt: (model: CollectionView) => Promise;\n decryptMany: (collections: Collection[]) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllNested: (collections?: CollectionView[]) => Promise[]>;\n getNested: (id: string) => Promise>;\n upsert: (collection: CollectionData | CollectionData[]) => Promise;\n replace: (collections: { [id: string]: CollectionData }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n}\n","import { HashPurpose } from \"../enums/hashPurpose\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { KeySuffixOptions } from \"../enums/keySuffixOptions\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { ProfileOrganizationResponse } from \"../models/response/profile-organization.response\";\nimport { ProfileProviderOrganizationResponse } from \"../models/response/profile-provider-organization.response\";\nimport { ProfileProviderResponse } from \"../models/response/profile-provider.response\";\n\nexport abstract class CryptoService {\n setKey: (key: SymmetricCryptoKey) => Promise;\n setKeyHash: (keyHash: string) => Promise;\n setEncKey: (encKey: string) => Promise;\n setEncPrivateKey: (encPrivateKey: string) => Promise;\n setOrgKeys: (\n orgs: ProfileOrganizationResponse[],\n providerOrgs: ProfileProviderOrganizationResponse[]\n ) => Promise;\n setProviderKeys: (orgs: ProfileProviderResponse[]) => Promise;\n getKey: (keySuffix?: KeySuffixOptions, userId?: string) => Promise;\n getKeyFromStorage: (keySuffix: KeySuffixOptions, userId?: string) => Promise;\n getKeyHash: () => Promise;\n compareAndUpdateKeyHash: (masterPassword: string, key: SymmetricCryptoKey) => Promise;\n getEncKey: (key?: SymmetricCryptoKey) => Promise;\n getPublicKey: () => Promise;\n getPrivateKey: () => Promise;\n getFingerprint: (userId: string, publicKey?: ArrayBuffer) => Promise;\n getOrgKeys: () => Promise>;\n getOrgKey: (orgId: string) => Promise;\n getProviderKey: (providerId: string) => Promise;\n getKeyForUserEncryption: (key?: SymmetricCryptoKey) => Promise;\n hasKey: () => Promise;\n hasKeyInMemory: (userId?: string) => Promise;\n hasKeyStored: (keySuffix?: KeySuffixOptions, userId?: string) => Promise;\n hasEncKey: () => Promise;\n clearKey: (clearSecretStorage?: boolean, userId?: string) => Promise;\n clearKeyHash: () => Promise;\n clearEncKey: (memoryOnly?: boolean, userId?: string) => Promise;\n clearKeyPair: (memoryOnly?: boolean, userId?: string) => Promise;\n clearOrgKeys: (memoryOnly?: boolean, userId?: string) => Promise;\n clearProviderKeys: (memoryOnly?: boolean) => Promise;\n clearPinProtectedKey: () => Promise;\n clearKeys: (userId?: string) => Promise;\n toggleKey: () => Promise;\n makeKey: (\n password: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number\n ) => Promise;\n makeKeyFromPin: (\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number,\n protectedKeyCs?: EncString\n ) => Promise;\n makeShareKey: () => Promise<[EncString, SymmetricCryptoKey]>;\n makeKeyPair: (key?: SymmetricCryptoKey) => Promise<[string, EncString]>;\n makePinKey: (\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number\n ) => Promise;\n makeSendKey: (keyMaterial: ArrayBuffer) => Promise;\n hashPassword: (\n password: string,\n key: SymmetricCryptoKey,\n hashPurpose?: HashPurpose\n ) => Promise;\n makeEncKey: (key: SymmetricCryptoKey) => Promise<[SymmetricCryptoKey, EncString]>;\n remakeEncKey: (\n key: SymmetricCryptoKey,\n encKey?: SymmetricCryptoKey\n ) => Promise<[SymmetricCryptoKey, EncString]>;\n encrypt: (plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey) => Promise;\n encryptToBytes: (plainValue: ArrayBuffer, key?: SymmetricCryptoKey) => Promise;\n rsaEncrypt: (data: ArrayBuffer, publicKey?: ArrayBuffer) => Promise;\n rsaDecrypt: (encValue: string, privateKeyValue?: ArrayBuffer) => Promise;\n decryptToBytes: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n decryptToUtf8: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n decryptFromBytes: (encBuffer: EncArrayBuffer, key: SymmetricCryptoKey) => Promise;\n randomNumber: (min: number, max: number) => Promise;\n validateKey: (key: SymmetricCryptoKey) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nexport type Urls = {\n base?: string;\n webVault?: string;\n api?: string;\n identity?: string;\n icons?: string;\n notifications?: string;\n events?: string;\n keyConnector?: string;\n scim?: string;\n};\n\nexport type PayPalConfig = {\n businessId?: string;\n buttonAction?: string;\n};\n\nexport abstract class EnvironmentService {\n urls: Observable;\n\n hasBaseUrl: () => boolean;\n getNotificationsUrl: () => string;\n getWebVaultUrl: () => string;\n getSendUrl: () => string;\n getIconsUrl: () => string;\n getApiUrl: () => string;\n getIdentityUrl: () => string;\n getEventsUrl: () => string;\n getKeyConnectorUrl: () => string;\n getScimUrl: () => string;\n setUrlsFromStorage: () => Promise;\n setUrls: (urls: Urls) => Promise;\n getUrls: () => Urls;\n isCloud: () => boolean;\n}\n","import { EventType } from \"../enums/eventType\";\n\nexport abstract class EventService {\n collect: (\n eventType: EventType,\n cipherId?: string,\n uploadImmediately?: boolean,\n organizationId?: string\n ) => Promise;\n uploadEvents: (userId?: string) => Promise;\n clearEvents: (userId?: string) => Promise;\n}\n","import { EventView } from \"../models/view/event.view\";\n\nexport type ExportFormat = \"csv\" | \"json\" | \"encrypted_json\";\n\nexport abstract class ExportService {\n getExport: (format?: ExportFormat, organizationId?: string) => Promise;\n getPasswordProtectedExport: (password: string, organizationId?: string) => Promise;\n getOrganizationExport: (organizationId: string, format?: ExportFormat) => Promise;\n getEventExport: (events: EventView[]) => Promise;\n getFileName: (prefix?: string, extension?: string) => string;\n}\n","import { FileDownloadRequest } from \"./fileDownloadRequest\";\n\nexport abstract class FileDownloadService {\n download: (request: FileDownloadRequest) => void;\n}\n","import { Observable } from \"rxjs\";\n\nimport { FolderData } from \"../../models/data/folder.data\";\nimport { Folder } from \"../../models/domain/folder\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\nimport { FolderView } from \"../../models/view/folder.view\";\n\nexport abstract class FolderService {\n folders$: Observable;\n folderViews$: Observable;\n\n clearCache: () => Promise;\n encrypt: (model: FolderView, key?: SymmetricCryptoKey) => Promise;\n get: (id: string) => Promise;\n /**\n * @deprecated Only use in CLI!\n */\n getAllDecryptedFromState: () => Promise;\n}\n\nexport abstract class InternalFolderService extends FolderService {\n upsert: (folder: FolderData | FolderData[]) => Promise;\n replace: (folders: { [id: string]: FolderData }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nexport abstract class I18nService {\n locale$: Observable;\n supportedTranslationLocales: string[];\n translationLocale: string;\n collator: Intl.Collator;\n localeNames: Map;\n t: (id: string, p1?: string, p2?: string, p3?: string) => string;\n translate: (id: string, p1?: string, p2?: string, p3?: string) => string;\n}\n","import { Organization } from \"../models/domain/organization\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\n\nexport abstract class KeyConnectorService {\n getAndSetKey: (url?: string) => Promise;\n getManagingOrganization: () => Promise;\n getUsesKeyConnector: () => Promise;\n migrateUser: () => Promise;\n userNeedsMigration: () => Promise;\n convertNewSsoUserToKeyConnector: (\n tokenResponse: IdentityTokenResponse,\n orgId: string\n ) => Promise;\n setUsesKeyConnector: (enabled: boolean) => Promise;\n setConvertAccountRequired: (status: boolean) => Promise;\n getConvertAccountRequired: () => Promise;\n removeConvertAccountRequired: () => Promise;\n clear: () => Promise;\n}\n","import { LogLevelType } from \"../enums/logLevelType\";\n\nexport abstract class LogService {\n debug: (message: string) => void;\n info: (message: string) => void;\n warning: (message: string) => void;\n error: (message: string) => void;\n write: (level: LogLevelType, message: string) => void;\n}\n","export abstract class MessagingService {\n send: (subscriber: string, arg?: any) => void;\n}\n","import { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\nimport { ImportDirectoryRequest } from \"../../models/request/import-directory.request\";\nimport { OrganizationApiKeyRequest } from \"../../models/request/organization-api-key.request\";\nimport { OrganizationCreateRequest } from \"../../models/request/organization-create.request\";\nimport { OrganizationKeysRequest } from \"../../models/request/organization-keys.request\";\nimport { OrganizationSubscriptionUpdateRequest } from \"../../models/request/organization-subscription-update.request\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../../models/request/organization-tax-info-update.request\";\nimport { OrganizationUpdateRequest } from \"../../models/request/organization-update.request\";\nimport { OrganizationUpgradeRequest } from \"../../models/request/organization-upgrade.request\";\nimport { OrganizationSsoRequest } from \"../../models/request/organization/organization-sso.request\";\nimport { PaymentRequest } from \"../../models/request/payment.request\";\nimport { SeatRequest } from \"../../models/request/seat.request\";\nimport { SecretVerificationRequest } from \"../../models/request/secret-verification.request\";\nimport { StorageRequest } from \"../../models/request/storage.request\";\nimport { VerifyBankRequest } from \"../../models/request/verify-bank.request\";\nimport { ApiKeyResponse } from \"../../models/response/api-key.response\";\nimport { BillingResponse } from \"../../models/response/billing.response\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { OrganizationApiKeyInformationResponse } from \"../../models/response/organization-api-key-information.response\";\nimport { OrganizationAutoEnrollStatusResponse } from \"../../models/response/organization-auto-enroll-status.response\";\nimport { OrganizationKeysResponse } from \"../../models/response/organization-keys.response\";\nimport { OrganizationSubscriptionResponse } from \"../../models/response/organization-subscription.response\";\nimport { OrganizationResponse } from \"../../models/response/organization.response\";\nimport { OrganizationSsoResponse } from \"../../models/response/organization/organization-sso.response\";\nimport { PaymentResponse } from \"../../models/response/payment.response\";\nimport { TaxInfoResponse } from \"../../models/response/tax-info.response\";\n\nexport class OrganizationApiServiceAbstraction {\n get: (id: string) => Promise;\n getBilling: (id: string) => Promise;\n getSubscription: (id: string) => Promise;\n getLicense: (id: string, installationId: string) => Promise;\n getAutoEnrollStatus: (identifier: string) => Promise;\n create: (request: OrganizationCreateRequest) => Promise;\n createLicense: (data: FormData) => Promise;\n save: (id: string, request: OrganizationUpdateRequest) => Promise;\n updatePayment: (id: string, request: PaymentRequest) => Promise;\n upgrade: (id: string, request: OrganizationUpgradeRequest) => Promise;\n updateSubscription: (id: string, request: OrganizationSubscriptionUpdateRequest) => Promise;\n updateSeats: (id: string, request: SeatRequest) => Promise;\n updateStorage: (id: string, request: StorageRequest) => Promise;\n verifyBank: (id: string, request: VerifyBankRequest) => Promise;\n cancel: (id: string) => Promise;\n reinstate: (id: string) => Promise;\n leave: (id: string) => Promise;\n delete: (id: string, request: SecretVerificationRequest) => Promise;\n updateLicense: (id: string, data: FormData) => Promise;\n importDirectory: (organizationId: string, request: ImportDirectoryRequest) => Promise;\n getOrCreateApiKey: (id: string, request: OrganizationApiKeyRequest) => Promise;\n getApiKeyInformation: (\n id: string,\n organizationApiKeyType?: OrganizationApiKeyType\n ) => Promise>;\n rotateApiKey: (id: string, request: OrganizationApiKeyRequest) => Promise;\n getTaxInfo: (id: string) => Promise;\n updateTaxInfo: (id: string, request: OrganizationTaxInfoUpdateRequest) => Promise;\n getKeys: (id: string) => Promise;\n updateKeys: (id: string, request: OrganizationKeysRequest) => Promise;\n getSso: (id: string) => Promise;\n updateSso: (id: string, request: OrganizationSsoRequest) => Promise;\n}\n","import { map, Observable } from \"rxjs\";\n\nimport { Utils } from \"../../misc/utils\";\nimport { OrganizationData } from \"../../models/data/organization.data\";\nimport { Organization } from \"../../models/domain/organization\";\nimport { I18nService } from \"../i18n.service\";\n\nexport function canAccessVaultTab(org: Organization): boolean {\n return org.isManager;\n}\n\nexport function canAccessSettingsTab(org: Organization): boolean {\n return (\n org.isOwner ||\n org.canManagePolicies ||\n org.canManageSso ||\n org.canManageScim ||\n org.canAccessImportExport\n );\n}\n\nexport function canAccessMembersTab(org: Organization): boolean {\n return org.canManageUsers || org.canManageUsersPassword;\n}\n\nexport function canAccessGroupsTab(org: Organization): boolean {\n return org.canManageGroups;\n}\n\nexport function canAccessReportingTab(org: Organization): boolean {\n return org.canAccessReports || org.canAccessEventLogs;\n}\n\nexport function canAccessBillingTab(org: Organization): boolean {\n return org.canManageBilling;\n}\n\nexport function canManageCollections(org: Organization): boolean {\n return (\n org.canCreateNewCollections ||\n org.canEditAnyCollection ||\n org.canDeleteAnyCollection ||\n org.canViewAssignedCollections\n );\n}\n\nexport function canAccessManageTab(org: Organization): boolean {\n return canAccessMembersTab(org) || canAccessGroupsTab(org) || canManageCollections(org);\n}\n\nexport function canAccessOrgAdmin(org: Organization): boolean {\n return (\n canAccessMembersTab(org) ||\n canAccessGroupsTab(org) ||\n canAccessReportingTab(org) ||\n canAccessBillingTab(org) ||\n canAccessSettingsTab(org) ||\n canAccessVaultTab(org) ||\n canAccessManageTab(org)\n );\n}\n\nexport function getOrganizationById(id: string) {\n return map((orgs) => orgs.find((o) => o.id === id));\n}\n\nexport function canAccessAdmin(i18nService: I18nService) {\n return map((orgs) =>\n orgs.filter(canAccessOrgAdmin).sort(Utils.getSortFunction(i18nService, \"name\"))\n );\n}\n\nexport function isNotProviderUser(org: Organization): boolean {\n return !org.isProviderUser;\n}\n\nexport abstract class OrganizationService {\n organizations$: Observable;\n\n get: (id: string) => Organization;\n getByIdentifier: (identifier: string) => Organization;\n getAll: (userId?: string) => Promise;\n /**\n * @deprecated For the CLI only\n * @param id id of the organization\n */\n getFromState: (id: string) => Promise;\n canManageSponsorships: () => Promise;\n hasOrganizations: () => boolean;\n}\n\nexport abstract class InternalOrganizationService extends OrganizationService {\n replace: (organizations: { [id: string]: OrganizationData }) => Promise;\n}\n","import * as zxcvbn from \"zxcvbn\";\n\nimport { GeneratedPasswordHistory } from \"../models/domain/generated-password-history\";\nimport { PasswordGeneratorOptions } from \"../models/domain/password-generator-options\";\nimport { PasswordGeneratorPolicyOptions } from \"../models/domain/password-generator-policy-options\";\n\nexport abstract class PasswordGenerationService {\n generatePassword: (options: PasswordGeneratorOptions) => Promise;\n generatePassphrase: (options: PasswordGeneratorOptions) => Promise;\n getOptions: () => Promise<[PasswordGeneratorOptions, PasswordGeneratorPolicyOptions]>;\n enforcePasswordGeneratorPoliciesOnOptions: (\n options: PasswordGeneratorOptions\n ) => Promise<[PasswordGeneratorOptions, PasswordGeneratorPolicyOptions]>;\n getPasswordGeneratorPolicyOptions: () => Promise;\n saveOptions: (options: PasswordGeneratorOptions) => Promise;\n getHistory: () => Promise;\n addHistory: (password: string) => Promise;\n clear: (userId?: string) => Promise;\n passwordStrength: (password: string, userInputs?: string[]) => zxcvbn.ZXCVBNResult;\n normalizeOptions: (\n options: PasswordGeneratorOptions,\n enforcedPolicyOptions: PasswordGeneratorPolicyOptions\n ) => void;\n}\n","export abstract class PasswordRepromptService {\n protectedFields: () => string[];\n showPasswordPrompt: () => Promise;\n enabled: () => Promise;\n}\n","import { ClientType } from \"../enums/clientType\";\nimport { DeviceType } from \"../enums/deviceType\";\n\ninterface ToastOptions {\n timeout?: number;\n}\n\nexport abstract class PlatformUtilsService {\n getDevice: () => DeviceType;\n getDeviceString: () => string;\n getClientType: () => ClientType;\n isFirefox: () => boolean;\n isChrome: () => boolean;\n isEdge: () => boolean;\n isOpera: () => boolean;\n isVivaldi: () => boolean;\n isSafari: () => boolean;\n isMacAppStore: () => boolean;\n isViewOpen: () => Promise;\n launchUri: (uri: string, options?: any) => void;\n getApplicationVersion: () => Promise;\n getApplicationVersionNumber: () => Promise;\n supportsWebAuthn: (win: Window) => boolean;\n supportsDuo: () => boolean;\n showToast: (\n type: \"error\" | \"success\" | \"warning\" | \"info\",\n title: string,\n text: string | string[],\n options?: ToastOptions\n ) => void;\n showDialog: (\n body: string,\n title?: string,\n confirmText?: string,\n cancelText?: string,\n type?: string,\n bodyIsHtml?: boolean\n ) => Promise;\n isDev: () => boolean;\n isSelfHost: () => boolean;\n copyToClipboard: (text: string, options?: any) => void | boolean;\n readFromClipboard: (options?: any) => Promise;\n supportsBiometric: () => Promise;\n authenticateBiometric: () => Promise;\n supportsSecureStorage: () => boolean;\n}\n","import { PolicyType } from \"../../enums/policyType\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/master-password-policy-options\";\nimport { PolicyRequest } from \"../../models/request/policy.request\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\n\nexport class PolicyApiServiceAbstraction {\n getPolicy: (organizationId: string, type: PolicyType) => Promise;\n getPolicies: (organizationId: string) => Promise>;\n getPoliciesByToken: (\n organizationId: string,\n token: string,\n email: string,\n organizationUserId: string\n ) => Promise>;\n getPoliciesByInvitedUser: (\n organizationId: string,\n userId: string\n ) => Promise>;\n getMasterPasswordPoliciesForInvitedUsers: (orgId: string) => Promise;\n putPolicy: (organizationId: string, type: PolicyType, request: PolicyRequest) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { PolicyType } from \"../../enums/policyType\";\nimport { PolicyData } from \"../../models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/master-password-policy-options\";\nimport { Policy } from \"../../models/domain/policy\";\nimport { ResetPasswordPolicyOptions } from \"../../models/domain/reset-password-policy-options\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\n\nexport abstract class PolicyService {\n policies$: Observable;\n masterPasswordPolicyOptions$: (policies?: Policy[]) => Observable;\n policyAppliesToActiveUser$: (\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean\n ) => Observable;\n\n /**\n * @deprecated Do not call this, use the policies$ observable collection\n */\n getAll: (type?: PolicyType, userId?: string) => Promise;\n evaluateMasterPassword: (\n passwordStrength: number,\n newPassword: string,\n enforcedPolicyOptions?: MasterPasswordPolicyOptions\n ) => boolean;\n getResetPasswordPolicyOptions: (\n policies: Policy[],\n orgId: string\n ) => [ResetPasswordPolicyOptions, boolean];\n mapPoliciesFromToken: (policiesResponse: ListResponse) => Policy[];\n policyAppliesToUser: (\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean,\n userId?: string\n ) => Promise;\n}\n\nexport abstract class InternalPolicyService extends PolicyService {\n upsert: (policy: PolicyData) => Promise;\n replace: (policies: { [id: string]: PolicyData }) => Promise;\n clear: (userId?: string) => Promise;\n}\n","import { ProviderData } from \"../models/data/provider.data\";\nimport { Provider } from \"../models/domain/provider\";\n\nexport abstract class ProviderService {\n get: (id: string) => Promise;\n getAll: () => Promise;\n save: (providers: { [id: string]: ProviderData }) => Promise;\n}\n","import { BehaviorSubject, Observable } from \"rxjs\";\n\nimport { KdfType } from \"../enums/kdfType\";\nimport { ThemeType } from \"../enums/themeType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CipherData } from \"../models/data/cipher.data\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { EncryptedOrganizationKeyData } from \"../models/data/encrypted-organization-key.data\";\nimport { EventData } from \"../models/data/event.data\";\nimport { FolderData } from \"../models/data/folder.data\";\nimport { LocalData } from \"../models/data/local.data\";\nimport { OrganizationData } from \"../models/data/organization.data\";\nimport { PolicyData } from \"../models/data/policy.data\";\nimport { ProviderData } from \"../models/data/provider.data\";\nimport { SendData } from \"../models/data/send.data\";\nimport { ServerConfigData } from \"../models/data/server-config.data\";\nimport { Account, AccountSettingsSettings } from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { EnvironmentUrls } from \"../models/domain/environment-urls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generated-password-history\";\nimport { Policy } from \"../models/domain/policy\";\nimport { StorageOptions } from \"../models/domain/storage-options\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { WindowState } from \"../models/domain/window-state\";\nimport { CipherView } from \"../models/view/cipher.view\";\nimport { CollectionView } from \"../models/view/collection.view\";\nimport { SendView } from \"../models/view/send.view\";\n\nexport abstract class StateService {\n accounts: BehaviorSubject<{ [userId: string]: T }>;\n activeAccount$: Observable;\n activeAccountUnlocked$: Observable;\n\n addAccount: (account: T) => Promise;\n setActiveUser: (userId: string) => Promise;\n clean: (options?: StorageOptions) => Promise;\n init: () => Promise;\n\n getAccessToken: (options?: StorageOptions) => Promise;\n setAccessToken: (value: string, options?: StorageOptions) => Promise;\n getAddEditCipherInfo: (options?: StorageOptions) => Promise;\n setAddEditCipherInfo: (value: any, options?: StorageOptions) => Promise;\n getAlwaysShowDock: (options?: StorageOptions) => Promise;\n setAlwaysShowDock: (value: boolean, options?: StorageOptions) => Promise;\n getApiKeyClientId: (options?: StorageOptions) => Promise;\n setApiKeyClientId: (value: string, options?: StorageOptions) => Promise;\n getApiKeyClientSecret: (options?: StorageOptions) => Promise;\n setApiKeyClientSecret: (value: string, options?: StorageOptions) => Promise;\n getAutoConfirmFingerPrints: (options?: StorageOptions) => Promise;\n setAutoConfirmFingerprints: (value: boolean, options?: StorageOptions) => Promise;\n getAutoFillOnPageLoadDefault: (options?: StorageOptions) => Promise;\n setAutoFillOnPageLoadDefault: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricAwaitingAcceptance: (options?: StorageOptions) => Promise;\n setBiometricAwaitingAcceptance: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricFingerprintValidated: (options?: StorageOptions) => Promise;\n setBiometricFingerprintValidated: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricText: (options?: StorageOptions) => Promise;\n setBiometricText: (value: string, options?: StorageOptions) => Promise;\n getBiometricUnlock: (options?: StorageOptions) => Promise;\n setBiometricUnlock: (value: boolean, options?: StorageOptions) => Promise;\n getCanAccessPremium: (options?: StorageOptions) => Promise;\n getHasPremiumPersonally: (options?: StorageOptions) => Promise;\n setHasPremiumPersonally: (value: boolean, options?: StorageOptions) => Promise;\n setHasPremiumFromOrganization: (value: boolean, options?: StorageOptions) => Promise;\n getHasPremiumFromOrganization: (options?: StorageOptions) => Promise;\n getClearClipboard: (options?: StorageOptions) => Promise;\n setClearClipboard: (value: number, options?: StorageOptions) => Promise;\n getCollapsedGroupings: (options?: StorageOptions) => Promise;\n setCollapsedGroupings: (value: string[], options?: StorageOptions) => Promise;\n getConvertAccountToKeyConnector: (options?: StorageOptions) => Promise;\n setConvertAccountToKeyConnector: (value: boolean, options?: StorageOptions) => Promise;\n getCryptoMasterKey: (options?: StorageOptions) => Promise;\n setCryptoMasterKey: (value: SymmetricCryptoKey, options?: StorageOptions) => Promise;\n getCryptoMasterKeyAuto: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyAuto: (value: string, options?: StorageOptions) => Promise;\n getCryptoMasterKeyB64: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyB64: (value: string, options?: StorageOptions) => Promise;\n getCryptoMasterKeyBiometric: (options?: StorageOptions) => Promise;\n hasCryptoMasterKeyBiometric: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyBiometric: (value: string, options?: StorageOptions) => Promise;\n getDecryptedCiphers: (options?: StorageOptions) => Promise;\n setDecryptedCiphers: (value: CipherView[], options?: StorageOptions) => Promise;\n getDecryptedCollections: (options?: StorageOptions) => Promise;\n setDecryptedCollections: (value: CollectionView[], options?: StorageOptions) => Promise;\n getDecryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise;\n setDecryptedCryptoSymmetricKey: (\n value: SymmetricCryptoKey,\n options?: StorageOptions\n ) => Promise;\n getDecryptedOrganizationKeys: (\n options?: StorageOptions\n ) => Promise>;\n setDecryptedOrganizationKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n getDecryptedPasswordGenerationHistory: (\n options?: StorageOptions\n ) => Promise;\n setDecryptedPasswordGenerationHistory: (\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ) => Promise;\n getDecryptedPinProtected: (options?: StorageOptions) => Promise;\n setDecryptedPinProtected: (value: EncString, options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this, use PolicyService\n */\n getDecryptedPolicies: (options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this, use PolicyService\n */\n setDecryptedPolicies: (value: Policy[], options?: StorageOptions) => Promise;\n getDecryptedPrivateKey: (options?: StorageOptions) => Promise;\n setDecryptedPrivateKey: (value: ArrayBuffer, options?: StorageOptions) => Promise;\n getDecryptedProviderKeys: (options?: StorageOptions) => Promise>;\n setDecryptedProviderKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n getDecryptedSends: (options?: StorageOptions) => Promise;\n setDecryptedSends: (value: SendView[], options?: StorageOptions) => Promise;\n getDefaultUriMatch: (options?: StorageOptions) => Promise;\n setDefaultUriMatch: (value: UriMatchType, options?: StorageOptions) => Promise;\n getDisableAddLoginNotification: (options?: StorageOptions) => Promise;\n setDisableAddLoginNotification: (value: boolean, options?: StorageOptions) => Promise;\n getDisableAutoBiometricsPrompt: (options?: StorageOptions) => Promise;\n setDisableAutoBiometricsPrompt: (value: boolean, options?: StorageOptions) => Promise;\n getDisableAutoTotpCopy: (options?: StorageOptions) => Promise;\n setDisableAutoTotpCopy: (value: boolean, options?: StorageOptions) => Promise;\n getDisableBadgeCounter: (options?: StorageOptions) => Promise;\n setDisableBadgeCounter: (value: boolean, options?: StorageOptions) => Promise;\n getDisableChangedPasswordNotification: (options?: StorageOptions) => Promise;\n setDisableChangedPasswordNotification: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getDisableContextMenuItem: (options?: StorageOptions) => Promise;\n setDisableContextMenuItem: (value: boolean, options?: StorageOptions) => Promise;\n getDisableFavicon: (options?: StorageOptions) => Promise;\n setDisableFavicon: (value: boolean, options?: StorageOptions) => Promise;\n getDisableGa: (options?: StorageOptions) => Promise;\n setDisableGa: (value: boolean, options?: StorageOptions) => Promise;\n getDontShowCardsCurrentTab: (options?: StorageOptions) => Promise;\n setDontShowCardsCurrentTab: (value: boolean, options?: StorageOptions) => Promise;\n getDontShowIdentitiesCurrentTab: (options?: StorageOptions) => Promise;\n setDontShowIdentitiesCurrentTab: (value: boolean, options?: StorageOptions) => Promise;\n getDuckDuckGoSharedKey: (options?: StorageOptions) => Promise;\n setDuckDuckGoSharedKey: (value: string, options?: StorageOptions) => Promise;\n getEmail: (options?: StorageOptions) => Promise;\n setEmail: (value: string, options?: StorageOptions) => Promise;\n getEmailVerified: (options?: StorageOptions) => Promise;\n setEmailVerified: (value: boolean, options?: StorageOptions) => Promise;\n getEnableAlwaysOnTop: (options?: StorageOptions) => Promise;\n setEnableAlwaysOnTop: (value: boolean, options?: StorageOptions) => Promise;\n getEnableAutoFillOnPageLoad: (options?: StorageOptions) => Promise;\n setEnableAutoFillOnPageLoad: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBiometric: (options?: StorageOptions) => Promise;\n setEnableBiometric: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBrowserIntegration: (options?: StorageOptions) => Promise;\n setEnableBrowserIntegration: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBrowserIntegrationFingerprint: (options?: StorageOptions) => Promise;\n setEnableBrowserIntegrationFingerprint: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getEnableCloseToTray: (options?: StorageOptions) => Promise;\n setEnableCloseToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableDuckDuckGoBrowserIntegration: (options?: StorageOptions) => Promise;\n setEnableDuckDuckGoBrowserIntegration: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getEnableFullWidth: (options?: StorageOptions) => Promise;\n setEnableFullWidth: (value: boolean, options?: StorageOptions) => Promise;\n getEnableMinimizeToTray: (options?: StorageOptions) => Promise;\n setEnableMinimizeToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableStartToTray: (options?: StorageOptions) => Promise;\n setEnableStartToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableTray: (options?: StorageOptions) => Promise;\n setEnableTray: (value: boolean, options?: StorageOptions) => Promise;\n getEncryptedCiphers: (options?: StorageOptions) => Promise<{ [id: string]: CipherData }>;\n setEncryptedCiphers: (\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedCollections: (options?: StorageOptions) => Promise<{ [id: string]: CollectionData }>;\n setEncryptedCollections: (\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise;\n setEncryptedCryptoSymmetricKey: (value: string, options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use FolderService\n */\n getEncryptedFolders: (options?: StorageOptions) => Promise<{ [id: string]: FolderData }>;\n /**\n * @deprecated Do not call this directly, use FolderService\n */\n setEncryptedFolders: (\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedOrganizationKeys: (\n options?: StorageOptions\n ) => Promise<{ [orgId: string]: EncryptedOrganizationKeyData }>;\n setEncryptedOrganizationKeys: (\n value: { [orgId: string]: EncryptedOrganizationKeyData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedPasswordGenerationHistory: (\n options?: StorageOptions\n ) => Promise;\n setEncryptedPasswordGenerationHistory: (\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ) => Promise;\n getEncryptedPinProtected: (options?: StorageOptions) => Promise;\n setEncryptedPinProtected: (value: string, options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use PolicyService\n */\n getEncryptedPolicies: (options?: StorageOptions) => Promise<{ [id: string]: PolicyData }>;\n /**\n * @deprecated Do not call this directly, use PolicyService\n */\n setEncryptedPolicies: (\n value: { [id: string]: PolicyData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedPrivateKey: (options?: StorageOptions) => Promise;\n setEncryptedPrivateKey: (value: string, options?: StorageOptions) => Promise;\n getEncryptedProviderKeys: (options?: StorageOptions) => Promise;\n setEncryptedProviderKeys: (value: any, options?: StorageOptions) => Promise;\n getEncryptedSends: (options?: StorageOptions) => Promise<{ [id: string]: SendData }>;\n setEncryptedSends: (value: { [id: string]: SendData }, options?: StorageOptions) => Promise;\n getEntityId: (options?: StorageOptions) => Promise;\n setEntityId: (value: string, options?: StorageOptions) => Promise;\n getEntityType: (options?: StorageOptions) => Promise;\n setEntityType: (value: string, options?: StorageOptions) => Promise;\n getEnvironmentUrls: (options?: StorageOptions) => Promise;\n setEnvironmentUrls: (value: EnvironmentUrls, options?: StorageOptions) => Promise;\n getEquivalentDomains: (options?: StorageOptions) => Promise;\n setEquivalentDomains: (value: string, options?: StorageOptions) => Promise;\n getEventCollection: (options?: StorageOptions) => Promise;\n setEventCollection: (value: EventData[], options?: StorageOptions) => Promise;\n getEverBeenUnlocked: (options?: StorageOptions) => Promise;\n setEverBeenUnlocked: (value: boolean, options?: StorageOptions) => Promise;\n getForcePasswordReset: (options?: StorageOptions) => Promise;\n setForcePasswordReset: (value: boolean, options?: StorageOptions) => Promise;\n getInstalledVersion: (options?: StorageOptions) => Promise;\n setInstalledVersion: (value: string, options?: StorageOptions) => Promise;\n getIsAuthenticated: (options?: StorageOptions) => Promise;\n getKdfIterations: (options?: StorageOptions) => Promise;\n setKdfIterations: (value: number, options?: StorageOptions) => Promise;\n getKdfType: (options?: StorageOptions) => Promise;\n setKdfType: (value: KdfType, options?: StorageOptions) => Promise;\n getKeyHash: (options?: StorageOptions) => Promise;\n setKeyHash: (value: string, options?: StorageOptions) => Promise;\n getLastActive: (options?: StorageOptions) => Promise;\n setLastActive: (value: number, options?: StorageOptions) => Promise;\n getLastSync: (options?: StorageOptions) => Promise;\n setLastSync: (value: string, options?: StorageOptions) => Promise;\n getLocalData: (options?: StorageOptions) => Promise<{ [cipherId: string]: LocalData }>;\n setLocalData: (\n value: { [cipherId: string]: LocalData },\n options?: StorageOptions\n ) => Promise;\n getLocale: (options?: StorageOptions) => Promise;\n setLocale: (value: string, options?: StorageOptions) => Promise;\n getMainWindowSize: (options?: StorageOptions) => Promise;\n setMainWindowSize: (value: number, options?: StorageOptions) => Promise;\n getMinimizeOnCopyToClipboard: (options?: StorageOptions) => Promise;\n setMinimizeOnCopyToClipboard: (value: boolean, options?: StorageOptions) => Promise;\n getNeverDomains: (options?: StorageOptions) => Promise<{ [id: string]: any }>;\n setNeverDomains: (value: { [id: string]: any }, options?: StorageOptions) => Promise;\n getNoAutoPromptBiometrics: (options?: StorageOptions) => Promise;\n setNoAutoPromptBiometrics: (value: boolean, options?: StorageOptions) => Promise;\n getNoAutoPromptBiometricsText: (options?: StorageOptions) => Promise;\n setNoAutoPromptBiometricsText: (value: string, options?: StorageOptions) => Promise;\n getOpenAtLogin: (options?: StorageOptions) => Promise;\n setOpenAtLogin: (value: boolean, options?: StorageOptions) => Promise;\n getOrganizationInvitation: (options?: StorageOptions) => Promise;\n setOrganizationInvitation: (value: any, options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use OrganizationService\n */\n getOrganizations: (options?: StorageOptions) => Promise<{ [id: string]: OrganizationData }>;\n /**\n * @deprecated Do not call this directly, use OrganizationService\n */\n setOrganizations: (\n value: { [id: string]: OrganizationData },\n options?: StorageOptions\n ) => Promise;\n getPasswordGenerationOptions: (options?: StorageOptions) => Promise;\n setPasswordGenerationOptions: (value: any, options?: StorageOptions) => Promise;\n getUsernameGenerationOptions: (options?: StorageOptions) => Promise;\n setUsernameGenerationOptions: (value: any, options?: StorageOptions) => Promise;\n getGeneratorOptions: (options?: StorageOptions) => Promise;\n setGeneratorOptions: (value: any, options?: StorageOptions) => Promise;\n getProtectedPin: (options?: StorageOptions) => Promise;\n setProtectedPin: (value: string, options?: StorageOptions) => Promise;\n getProviders: (options?: StorageOptions) => Promise<{ [id: string]: ProviderData }>;\n setProviders: (value: { [id: string]: ProviderData }, options?: StorageOptions) => Promise;\n getPublicKey: (options?: StorageOptions) => Promise;\n setPublicKey: (value: ArrayBuffer, options?: StorageOptions) => Promise;\n getRefreshToken: (options?: StorageOptions) => Promise;\n setRefreshToken: (value: string, options?: StorageOptions) => Promise;\n getRememberedEmail: (options?: StorageOptions) => Promise;\n setRememberedEmail: (value: string, options?: StorageOptions) => Promise;\n getSecurityStamp: (options?: StorageOptions) => Promise;\n setSecurityStamp: (value: string, options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use SettingsService\n */\n getSettings: (options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use SettingsService\n */\n setSettings: (value: AccountSettingsSettings, options?: StorageOptions) => Promise;\n getSsoCodeVerifier: (options?: StorageOptions) => Promise;\n setSsoCodeVerifier: (value: string, options?: StorageOptions) => Promise;\n getSsoOrgIdentifier: (options?: StorageOptions) => Promise;\n setSsoOrganizationIdentifier: (value: string, options?: StorageOptions) => Promise;\n getSsoState: (options?: StorageOptions) => Promise;\n setSsoState: (value: string, options?: StorageOptions) => Promise;\n getTheme: (options?: StorageOptions) => Promise;\n setTheme: (value: ThemeType, options?: StorageOptions) => Promise;\n getTwoFactorToken: (options?: StorageOptions) => Promise;\n setTwoFactorToken: (value: string, options?: StorageOptions) => Promise;\n getUserId: (options?: StorageOptions) => Promise;\n getUsesKeyConnector: (options?: StorageOptions) => Promise;\n setUsesKeyConnector: (vaule: boolean, options?: StorageOptions) => Promise;\n getVaultTimeout: (options?: StorageOptions) => Promise;\n setVaultTimeout: (value: number, options?: StorageOptions) => Promise;\n getVaultTimeoutAction: (options?: StorageOptions) => Promise;\n setVaultTimeoutAction: (value: string, options?: StorageOptions) => Promise;\n getStateVersion: () => Promise;\n setStateVersion: (value: number) => Promise;\n getWindow: () => Promise;\n setWindow: (value: WindowState) => Promise;\n /**\n * @deprecated Do not call this directly, use ConfigService\n */\n getServerConfig: (options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use ConfigService\n */\n setServerConfig: (value: ServerConfigData, options?: StorageOptions) => Promise;\n}\n","export abstract class StateMigrationService {\n needsMigration: () => Promise;\n migrate: () => Promise;\n}\n","import { MemoryStorageOptions, StorageOptions } from \"../models/domain/storage-options\";\n\nexport abstract class AbstractStorageService {\n abstract get(key: string, options?: StorageOptions): Promise;\n abstract has(key: string, options?: StorageOptions): Promise;\n abstract save(key: string, obj: T, options?: StorageOptions): Promise;\n abstract remove(key: string, options?: StorageOptions): Promise;\n}\n\nexport abstract class AbstractCachedStorageService extends AbstractStorageService {\n abstract getBypassCache(key: string, options?: MemoryStorageOptions): Promise;\n}\n\nexport interface MemoryStorageServiceInterface {\n get(key: string, options?: MemoryStorageOptions): Promise;\n}\n","import {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../../models/response/notification.response\";\n\nexport abstract class SyncService {\n syncInProgress: boolean;\n\n getLastSync: () => Promise;\n setLastSync: (date: Date, userId?: string) => Promise;\n fullSync: (forceSync: boolean, allowThrowOnError?: boolean) => Promise;\n syncUpsertFolder: (notification: SyncFolderNotification, isEdit: boolean) => Promise;\n syncDeleteFolder: (notification: SyncFolderNotification) => Promise;\n syncUpsertCipher: (notification: SyncCipherNotification, isEdit: boolean) => Promise;\n syncDeleteCipher: (notification: SyncFolderNotification) => Promise;\n syncUpsertSend: (notification: SyncSendNotification, isEdit: boolean) => Promise;\n syncDeleteSend: (notification: SyncSendNotification) => Promise;\n}\n","export abstract class TotpService {\n getCode: (key: string) => Promise;\n getTimeInterval: (key: string) => number;\n}\n","import { SecretVerificationRequest } from \"../../models/request/secret-verification.request\";\nimport { Verification } from \"../../types/verification\";\n\nexport abstract class UserVerificationService {\n buildRequest: (\n verification: Verification,\n requestClass?: new () => T,\n alreadyHashed?: boolean\n ) => Promise;\n verifyUser: (verification: Verification) => Promise;\n requestOTP: () => Promise;\n}\n","export abstract class ValidationService {\n showError: (data: any) => string[];\n}\n","export enum AuthenticationStatus {\n LoggedOut = 0,\n Locked = 1,\n Unlocked = 2,\n}\n","export enum CipherRepromptType {\n None = 0,\n Password = 1,\n}\n","export enum CipherType {\n Login = 1,\n SecureNote = 2,\n Card = 3,\n Identity = 4,\n}\n","export enum DeviceType {\n Android = 0,\n iOS = 1,\n ChromeExtension = 2,\n FirefoxExtension = 3,\n OperaExtension = 4,\n EdgeExtension = 5,\n WindowsDesktop = 6,\n MacOsDesktop = 7,\n LinuxDesktop = 8,\n ChromeBrowser = 9,\n FirefoxBrowser = 10,\n OperaBrowser = 11,\n EdgeBrowser = 12,\n IEBrowser = 13,\n UnknownBrowser = 14,\n AndroidAmazon = 15,\n UWP = 16,\n SafariBrowser = 17,\n VivaldiBrowser = 18,\n VivaldiExtension = 19,\n SafariExtension = 20,\n}\n","export enum EncryptionType {\n AesCbc256_B64 = 0,\n AesCbc128_HmacSha256_B64 = 1,\n AesCbc256_HmacSha256_B64 = 2,\n Rsa2048_OaepSha256_B64 = 3,\n Rsa2048_OaepSha1_B64 = 4,\n Rsa2048_OaepSha256_HmacSha256_B64 = 5,\n Rsa2048_OaepSha1_HmacSha256_B64 = 6,\n}\n","export enum EventType {\n User_LoggedIn = 1000,\n User_ChangedPassword = 1001,\n User_Updated2fa = 1002,\n User_Disabled2fa = 1003,\n User_Recovered2fa = 1004,\n User_FailedLogIn = 1005,\n User_FailedLogIn2fa = 1006,\n User_ClientExportedVault = 1007,\n User_UpdatedTempPassword = 1008,\n User_MigratedKeyToKeyConnector = 1009,\n\n Cipher_Created = 1100,\n Cipher_Updated = 1101,\n Cipher_Deleted = 1102,\n Cipher_AttachmentCreated = 1103,\n Cipher_AttachmentDeleted = 1104,\n Cipher_Shared = 1105,\n Cipher_UpdatedCollections = 1106,\n Cipher_ClientViewed = 1107,\n Cipher_ClientToggledPasswordVisible = 1108,\n Cipher_ClientToggledHiddenFieldVisible = 1109,\n Cipher_ClientToggledCardCodeVisible = 1110,\n Cipher_ClientCopiedPassword = 1111,\n Cipher_ClientCopiedHiddenField = 1112,\n Cipher_ClientCopiedCardCode = 1113,\n Cipher_ClientAutofilled = 1114,\n Cipher_SoftDeleted = 1115,\n Cipher_Restored = 1116,\n Cipher_ClientToggledCardNumberVisible = 1117,\n\n Collection_Created = 1300,\n Collection_Updated = 1301,\n Collection_Deleted = 1302,\n\n Group_Created = 1400,\n Group_Updated = 1401,\n Group_Deleted = 1402,\n\n OrganizationUser_Invited = 1500,\n OrganizationUser_Confirmed = 1501,\n OrganizationUser_Updated = 1502,\n OrganizationUser_Removed = 1503,\n OrganizationUser_UpdatedGroups = 1504,\n OrganizationUser_UnlinkedSso = 1505,\n OrganizationUser_ResetPassword_Enroll = 1506,\n OrganizationUser_ResetPassword_Withdraw = 1507,\n OrganizationUser_AdminResetPassword = 1508,\n OrganizationUser_ResetSsoLink = 1509,\n OrganizationUser_FirstSsoLogin = 1510,\n OrganizationUser_Revoked = 1511,\n OrganizationUser_Restored = 1512,\n\n Organization_Updated = 1600,\n Organization_PurgedVault = 1601,\n Organization_ClientExportedVault = 1602,\n Organization_VaultAccessed = 1603,\n Organization_EnabledSso = 1604,\n Organization_DisabledSso = 1605,\n Organization_EnabledKeyConnector = 1606,\n Organization_DisabledKeyConnector = 1607,\n Organization_SponsorshipsSynced = 1608,\n\n Policy_Updated = 1700,\n\n ProviderUser_Invited = 1800,\n ProviderUser_Confirmed = 1801,\n ProviderUser_Updated = 1802,\n ProviderUser_Removed = 1803,\n\n ProviderOrganization_Created = 1900,\n ProviderOrganization_Added = 1901,\n ProviderOrganization_Removed = 1902,\n ProviderOrganization_VaultAccessed = 1903,\n}\n","export enum FieldType {\n Text = 0,\n Hidden = 1,\n Boolean = 2,\n Linked = 3,\n}\n","export enum HtmlStorageLocation {\n Local = \"local\",\n Memory = \"memory\",\n Session = \"session\",\n}\n","export enum KdfType {\n PBKDF2_SHA256 = 0,\n}\n\nexport const DEFAULT_KDF_TYPE = KdfType.PBKDF2_SHA256;\nexport const DEFAULT_KDF_ITERATIONS = 100000;\nexport const SEND_KDF_ITERATIONS = 100000;\n","export type LinkedIdType = LoginLinkedId | CardLinkedId | IdentityLinkedId;\n\n// LoginView\nexport enum LoginLinkedId {\n Username = 100,\n Password = 101,\n}\n\n// CardView\nexport enum CardLinkedId {\n CardholderName = 300,\n ExpMonth = 301,\n ExpYear = 302,\n Code = 303,\n Brand = 304,\n Number = 305,\n}\n\n// IdentityView\nexport enum IdentityLinkedId {\n Title = 400,\n MiddleName = 401,\n Address1 = 402,\n Address2 = 403,\n Address3 = 404,\n City = 405,\n State = 406,\n PostalCode = 407,\n Country = 408,\n Company = 409,\n Email = 410,\n Phone = 411,\n Ssn = 412,\n Username = 413,\n PassportNumber = 414,\n LicenseNumber = 415,\n FirstName = 416,\n LastName = 417,\n FullName = 418,\n}\n","export enum LogLevelType {\n Debug,\n Info,\n Warning,\n Error,\n}\n","export enum OrganizationApiKeyType {\n Default = 0,\n BillingSync = 1,\n Scim = 2,\n}\n","export enum OrganizationConnectionType {\n CloudBillingSync = 1,\n Scim = 2,\n}\n","export enum OrganizationUserStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n Revoked = -1,\n}\n","export enum PaymentMethodType {\n Card = 0,\n BankAccount = 1,\n PayPal = 2,\n BitPay = 3,\n Credit = 4,\n WireTransfer = 5,\n AppleInApp = 6,\n GoogleInApp = 7,\n Check = 8,\n}\n","export enum PlanType {\n Free = 0,\n FamiliesAnnually2019 = 1,\n TeamsMonthly2019 = 2,\n TeamsAnnually2019 = 3,\n EnterpriseMonthly2019 = 4,\n EnterpriseAnnually2019 = 5,\n Custom = 6,\n FamiliesAnnually = 7,\n TeamsMonthly = 8,\n TeamsAnnually = 9,\n EnterpriseMonthly = 10,\n EnterpriseAnnually = 11,\n}\n","export enum PolicyType {\n TwoFactorAuthentication = 0, // Requires users to have 2fa enabled\n MasterPassword = 1, // Sets minimum requirements for master password complexity\n PasswordGenerator = 2, // Sets minimum requirements/default type for generated passwords/passphrases\n SingleOrg = 3, // Allows users to only be apart of one organization\n RequireSso = 4, // Requires users to authenticate with SSO\n PersonalOwnership = 5, // Disables personal vault ownership for adding/cloning items\n DisableSend = 6, // Disables the ability to create and edit Bitwarden Sends\n SendOptions = 7, // Sets restrictions or defaults for Bitwarden Sends\n ResetPassword = 8, // Allows orgs to use reset password : also can enable auto-enrollment during invite flow\n MaximumVaultTimeout = 9, // Sets the maximum allowed vault timeout\n DisablePersonalVaultExport = 10, // Disable personal vault export\n}\n","export enum ProductType {\n Free = 0,\n Families = 1,\n Teams = 2,\n Enterprise = 3,\n}\n","export enum SecureNoteType {\n Generic = 0,\n}\n","export enum SendType {\n Text = 0,\n File = 1,\n}\n","export enum TwoFactorProviderType {\n Authenticator = 0,\n Email = 1,\n Duo = 2,\n Yubikey = 3,\n U2f = 4,\n Remember = 5,\n OrganizationDuo = 6,\n WebAuthn = 7,\n}\n","export enum UriMatchType {\n Domain = 0,\n Host = 1,\n StartsWith = 2,\n Exact = 3,\n RegularExpression = 4,\n Never = 5,\n}\n","export enum VerificationType {\n MasterPassword = 0,\n OTP = 1,\n}\n","import { LinkedIdType } from \"../enums/linkedIdType\";\nimport { ItemView } from \"../models/view/item.view\";\n\nexport class LinkedMetadata {\n constructor(readonly propertyKey: string, private readonly _i18nKey?: string) {}\n\n get i18nKey() {\n return this._i18nKey ?? this.propertyKey;\n }\n}\n\n/**\n * A decorator used to set metadata used by Linked custom fields. Apply it to a class property or getter to make it\n * available as a Linked custom field option.\n * @param id - A unique value that is saved in the Field model. It is used to look up the decorated class property.\n * @param i18nKey - The i18n key used to describe the decorated class property in the UI. If it is null, then the name\n * of the class property will be used as the i18n key.\n */\nexport function linkedFieldOption(id: LinkedIdType, i18nKey?: string) {\n return (prototype: ItemView, propertyKey: string) => {\n if (prototype.linkedFieldOptions == null) {\n prototype.linkedFieldOptions = new Map();\n }\n\n prototype.linkedFieldOptions.set(id, new LinkedMetadata(propertyKey, i18nKey));\n };\n}\n","export class TreeNode {\n parent: T;\n node: T;\n children: TreeNode[] = [];\n\n constructor(node: T, name: string, parent: T) {\n this.parent = parent;\n this.node = node;\n this.node.name = name;\n }\n}\n\nexport interface ITreeNodeObject {\n id: string;\n name: string;\n}\n","import { ITreeNodeObject, TreeNode } from \"../models/domain/tree-node\";\n\nexport class ServiceUtils {\n static nestedTraverse(\n nodeTree: TreeNode[],\n partIndex: number,\n parts: string[],\n obj: ITreeNodeObject,\n parent: ITreeNodeObject,\n delimiter: string\n ) {\n if (parts.length <= partIndex) {\n return;\n }\n\n const end = partIndex === parts.length - 1;\n const partName = parts[partIndex];\n\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.name !== parts[partIndex]) {\n continue;\n }\n if (end && nodeTree[i].node.id !== obj.id) {\n // Another node with the same name.\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n ServiceUtils.nestedTraverse(\n nodeTree[i].children,\n partIndex + 1,\n parts,\n obj,\n nodeTree[i].node,\n delimiter\n );\n return;\n }\n\n if (nodeTree.filter((n) => n.node.name === partName).length === 0) {\n if (end) {\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n const newPartName = parts[partIndex] + delimiter + parts[partIndex + 1];\n ServiceUtils.nestedTraverse(\n nodeTree,\n 0,\n [newPartName, ...parts.slice(partIndex + 2)],\n obj,\n parent,\n delimiter\n );\n }\n }\n\n static getTreeNodeObject(\n nodeTree: TreeNode[],\n id: string\n ): TreeNode {\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.id === id) {\n return nodeTree[i];\n } else if (nodeTree[i].children != null) {\n const node = ServiceUtils.getTreeNodeObject(nodeTree[i].children, id);\n if (node !== null) {\n return node;\n }\n }\n }\n return null;\n }\n}\n","/* eslint-disable no-useless-escape */\nimport { getHostname, parse } from \"tldts\";\nimport { Merge } from \"type-fest\";\n\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { EncryptService } from \"../abstractions/encrypt.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\n\nconst nodeURL = typeof window === \"undefined\" ? require(\"url\") : null;\n\ndeclare global {\n /* eslint-disable-next-line no-var */\n var bitwardenContainerService: BitwardenContainerService;\n}\n\ninterface BitwardenContainerService {\n getCryptoService: () => CryptoService;\n getEncryptService: () => EncryptService;\n}\n\nexport class Utils {\n static inited = false;\n static isNode = false;\n static isBrowser = true;\n static isMobileBrowser = false;\n static isAppleMobileBrowser = false;\n static global: typeof global = null;\n // Transpiled version of /\\p{Emoji_Presentation}/gu using https://mothereff.in/regexpu. Used for compatability in older browsers.\n static regexpEmojiPresentation =\n /(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])/g;\n static readonly validHosts: string[] = [\"localhost\"];\n\n static init() {\n if (Utils.inited) {\n return;\n }\n\n Utils.inited = true;\n Utils.isNode =\n typeof process !== \"undefined\" &&\n (process as any).release != null &&\n (process as any).release.name === \"node\";\n Utils.isBrowser = typeof window !== \"undefined\";\n\n Utils.isMobileBrowser = Utils.isBrowser && this.isMobile(window);\n Utils.isAppleMobileBrowser = Utils.isBrowser && this.isAppleMobile(window);\n\n if (Utils.isNode) {\n Utils.global = global;\n } else if (Utils.isBrowser) {\n Utils.global = window;\n } else {\n // If it's not browser or node then it must be a service worker\n Utils.global = self;\n }\n }\n\n static fromB64ToArray(str: string): Uint8Array {\n if (str == null) {\n return null;\n }\n\n if (Utils.isNode) {\n return new Uint8Array(Buffer.from(str, \"base64\"));\n } else {\n const binaryString = Utils.global.atob(str);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n }\n }\n\n static fromUrlB64ToArray(str: string): Uint8Array {\n return Utils.fromB64ToArray(Utils.fromUrlB64ToB64(str));\n }\n\n static fromHexToArray(str: string): Uint8Array {\n if (Utils.isNode) {\n return new Uint8Array(Buffer.from(str, \"hex\"));\n } else {\n const bytes = new Uint8Array(str.length / 2);\n for (let i = 0; i < str.length; i += 2) {\n bytes[i / 2] = parseInt(str.substr(i, 2), 16);\n }\n return bytes;\n }\n }\n\n static fromUtf8ToArray(str: string): Uint8Array {\n if (Utils.isNode) {\n return new Uint8Array(Buffer.from(str, \"utf8\"));\n } else {\n const strUtf8 = unescape(encodeURIComponent(str));\n const arr = new Uint8Array(strUtf8.length);\n for (let i = 0; i < strUtf8.length; i++) {\n arr[i] = strUtf8.charCodeAt(i);\n }\n return arr;\n }\n }\n\n static fromByteStringToArray(str: string): Uint8Array {\n if (str == null) {\n return null;\n }\n const arr = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n return arr;\n }\n\n static fromBufferToB64(buffer: ArrayBuffer): string {\n if (buffer == null) {\n return null;\n }\n if (Utils.isNode) {\n return Buffer.from(buffer).toString(\"base64\");\n } else {\n let binary = \"\";\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return Utils.global.btoa(binary);\n }\n }\n\n static fromBufferToUrlB64(buffer: ArrayBuffer): string {\n return Utils.fromB64toUrlB64(Utils.fromBufferToB64(buffer));\n }\n\n static fromB64toUrlB64(b64Str: string) {\n return b64Str.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n }\n\n static fromBufferToUtf8(buffer: ArrayBuffer): string {\n if (Utils.isNode) {\n return Buffer.from(buffer).toString(\"utf8\");\n } else {\n const bytes = new Uint8Array(buffer);\n const encodedString = String.fromCharCode.apply(null, bytes);\n return decodeURIComponent(escape(encodedString));\n }\n }\n\n static fromBufferToByteString(buffer: ArrayBuffer): string {\n return String.fromCharCode.apply(null, new Uint8Array(buffer));\n }\n\n // ref: https://stackoverflow.com/a/40031979/1090359\n static fromBufferToHex(buffer: ArrayBuffer): string {\n if (Utils.isNode) {\n return Buffer.from(buffer).toString(\"hex\");\n } else {\n const bytes = new Uint8Array(buffer);\n return Array.prototype.map\n .call(bytes, (x: number) => (\"00\" + x.toString(16)).slice(-2))\n .join(\"\");\n }\n }\n\n static fromUrlB64ToB64(urlB64Str: string): string {\n let output = urlB64Str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"Illegal base64url string!\");\n }\n\n return output;\n }\n\n static fromUrlB64ToUtf8(urlB64Str: string): string {\n return Utils.fromB64ToUtf8(Utils.fromUrlB64ToB64(urlB64Str));\n }\n\n static fromUtf8ToB64(utfStr: string): string {\n if (Utils.isNode) {\n return Buffer.from(utfStr, \"utf8\").toString(\"base64\");\n } else {\n return decodeURIComponent(escape(Utils.global.btoa(utfStr)));\n }\n }\n\n static fromUtf8ToUrlB64(utfStr: string): string {\n return Utils.fromBufferToUrlB64(Utils.fromUtf8ToArray(utfStr));\n }\n\n static fromB64ToUtf8(b64Str: string): string {\n if (Utils.isNode) {\n return Buffer.from(b64Str, \"base64\").toString(\"utf8\");\n } else {\n return decodeURIComponent(escape(Utils.global.atob(b64Str)));\n }\n }\n\n // ref: http://stackoverflow.com/a/2117523/1090359\n static newGuid(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n static isGuid(id: string) {\n return RegExp(\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/,\n \"i\"\n ).test(id);\n }\n\n static getHostname(uriString: string): string {\n if (Utils.isNullOrWhitespace(uriString)) {\n return null;\n }\n\n uriString = uriString.trim();\n\n if (uriString.startsWith(\"data:\")) {\n return null;\n }\n\n if (uriString.startsWith(\"about:\")) {\n return null;\n }\n\n if (uriString.startsWith(\"file:\")) {\n return null;\n }\n\n // Does uriString contain invalid characters\n // TODO Needs to possibly be extended, although '!' is a reserved character\n if (uriString.indexOf(\"!\") > 0) {\n return null;\n }\n\n try {\n const hostname = getHostname(uriString, { validHosts: this.validHosts });\n if (hostname != null) {\n return hostname;\n }\n } catch {\n return null;\n }\n return null;\n }\n\n static getHost(uriString: string): string {\n const url = Utils.getUrl(uriString);\n try {\n return url != null && url.host !== \"\" ? url.host : null;\n } catch {\n return null;\n }\n }\n\n static getDomain(uriString: string): string {\n if (Utils.isNullOrWhitespace(uriString)) {\n return null;\n }\n\n uriString = uriString.trim();\n\n if (uriString.startsWith(\"data:\")) {\n return null;\n }\n\n if (uriString.startsWith(\"about:\")) {\n return null;\n }\n\n try {\n const parseResult = parse(uriString, { validHosts: this.validHosts });\n if (parseResult != null && parseResult.hostname != null) {\n if (parseResult.hostname === \"localhost\" || parseResult.isIp) {\n return parseResult.hostname;\n }\n\n if (parseResult.domain != null) {\n return parseResult.domain;\n }\n return null;\n }\n } catch {\n return null;\n }\n return null;\n }\n\n static getQueryParams(uriString: string): Map {\n const url = Utils.getUrl(uriString);\n if (url == null || url.search == null || url.search === \"\") {\n return null;\n }\n const map = new Map();\n const pairs = (url.search[0] === \"?\" ? url.search.substr(1) : url.search).split(\"&\");\n pairs.forEach((pair) => {\n const parts = pair.split(\"=\");\n if (parts.length < 1) {\n return;\n }\n map.set(\n decodeURIComponent(parts[0]).toLowerCase(),\n parts[1] == null ? \"\" : decodeURIComponent(parts[1])\n );\n });\n return map;\n }\n\n static getSortFunction(\n i18nService: I18nService,\n prop: { [K in keyof T]: T[K] extends string ? K : never }[keyof T]\n ): (a: T, b: T) => number {\n return (a, b) => {\n if (a[prop] == null && b[prop] != null) {\n return -1;\n }\n if (a[prop] != null && b[prop] == null) {\n return 1;\n }\n if (a[prop] == null && b[prop] == null) {\n return 0;\n }\n\n // The `as unknown as string` here is unfortunate because typescript doesn't property understand that the return of T[prop] will be a string\n return i18nService.collator\n ? i18nService.collator.compare(a[prop] as unknown as string, b[prop] as unknown as string)\n : (a[prop] as unknown as string).localeCompare(b[prop] as unknown as string);\n };\n }\n\n static isNullOrWhitespace(str: string): boolean {\n return str == null || typeof str !== \"string\" || str.trim() === \"\";\n }\n\n static isNullOrEmpty(str: string): boolean {\n return str == null || typeof str !== \"string\" || str == \"\";\n }\n\n static isPromise(obj: any): obj is Promise {\n return (\n obj != undefined && typeof obj[\"then\"] === \"function\" && typeof obj[\"catch\"] === \"function\"\n );\n }\n\n static nameOf(name: string & keyof T) {\n return name;\n }\n\n static assign(target: T, source: Partial): T {\n return Object.assign(target, source);\n }\n\n static iterateEnum(obj: O) {\n return (Object.keys(obj).filter((k) => Number.isNaN(+k)) as K[]).map((k) => obj[k]);\n }\n\n static getUrl(uriString: string): URL {\n if (this.isNullOrWhitespace(uriString)) {\n return null;\n }\n\n uriString = uriString.trim();\n\n let url = Utils.getUrlObject(uriString);\n if (url == null) {\n const hasHttpProtocol =\n uriString.indexOf(\"http://\") === 0 || uriString.indexOf(\"https://\") === 0;\n if (!hasHttpProtocol && uriString.indexOf(\".\") > -1) {\n url = Utils.getUrlObject(\"http://\" + uriString);\n }\n }\n return url;\n }\n\n static camelToPascalCase(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n\n /**\n * There are a few ways to calculate text color for contrast, this one seems to fit accessibility guidelines best.\n * https://stackoverflow.com/a/3943023/6869691\n *\n * @param {string} bgColor\n * @param {number} [threshold] see stackoverflow link above\n * @param {boolean} [svgTextFill]\n * Indicates if this method is performed on an SVG 'fill' attribute (e.g. ).\n * This check is necessary because the '!important' tag cannot be used in a 'fill' attribute.\n */\n static pickTextColorBasedOnBgColor(bgColor: string, threshold = 186, svgTextFill = false) {\n const bgColorHexNums = bgColor.charAt(0) === \"#\" ? bgColor.substring(1, 7) : bgColor;\n const r = parseInt(bgColorHexNums.substring(0, 2), 16); // hexToR\n const g = parseInt(bgColorHexNums.substring(2, 4), 16); // hexToG\n const b = parseInt(bgColorHexNums.substring(4, 6), 16); // hexToB\n const blackColor = svgTextFill ? \"black\" : \"black !important\";\n const whiteColor = svgTextFill ? \"white\" : \"white !important\";\n return r * 0.299 + g * 0.587 + b * 0.114 > threshold ? blackColor : whiteColor;\n }\n\n static stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n let color = \"#\";\n for (let i = 0; i < 3; i++) {\n const value = (hash >> (i * 8)) & 0xff;\n color += (\"00\" + value.toString(16)).substr(-2);\n }\n return color;\n }\n\n /**\n * @throws Will throw an error if the ContainerService has not been attached to the window object\n */\n static getContainerService(): BitwardenContainerService {\n if (this.global.bitwardenContainerService == null) {\n throw new Error(\"global bitwardenContainerService not initialized.\");\n }\n return this.global.bitwardenContainerService;\n }\n\n /**\n * Converts map to a Record with the same data. Inverse of recordToMap\n * Useful in toJSON methods, since Maps are not serializable\n * @param map\n * @returns\n */\n static mapToRecord(map: Map): Record {\n if (map == null) {\n return null;\n }\n if (!(map instanceof Map)) {\n return map;\n }\n return Object.fromEntries(map);\n }\n\n /**\n * Converts record to a Map with the same data. Inverse of mapToRecord\n * Useful in fromJSON methods, since Maps are not serializable\n *\n * Warning: If the record has string keys that are numbers, they will be converted to numbers in the map\n * @param record\n * @returns\n */\n static recordToMap(record: Record): Map {\n if (record == null) {\n return null;\n } else if (record instanceof Map) {\n return record;\n }\n\n const entries = Object.entries(record);\n if (entries.length === 0) {\n return new Map();\n }\n\n if (isNaN(Number(entries[0][0]))) {\n return new Map(entries) as Map;\n } else {\n return new Map(entries.map((e) => [Number(e[0]), e[1]])) as Map;\n }\n }\n\n /** Applies Object.assign, but converts the type nicely using Type-Fest Merge */\n static merge(\n destination: Destination,\n source: Source\n ): Merge {\n return Object.assign(destination, source) as unknown as Merge;\n }\n\n private static isMobile(win: Window) {\n let mobile = false;\n ((a) => {\n if (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\n a\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\n a.substr(0, 4)\n )\n ) {\n mobile = true;\n }\n })(win.navigator.userAgent || win.navigator.vendor || (win as any).opera);\n return mobile || win.navigator.userAgent.match(/iPad/i) != null;\n }\n\n private static isAppleMobile(win: Window) {\n return (\n win.navigator.userAgent.match(/iPhone/i) != null ||\n win.navigator.userAgent.match(/iPad/i) != null\n );\n }\n\n private static getUrlObject(uriString: string): URL {\n try {\n if (nodeURL != null) {\n return new nodeURL.URL(uriString);\n } else if (typeof URL === \"function\") {\n return new URL(uriString);\n } else if (typeof window !== \"undefined\") {\n const hasProtocol = uriString.indexOf(\"://\") > -1;\n if (!hasProtocol && uriString.indexOf(\".\") > -1) {\n uriString = \"http://\" + uriString;\n } else if (!hasProtocol) {\n return null;\n }\n const anchor = window.document.createElement(\"a\");\n anchor.href = uriString;\n return anchor as any;\n }\n } catch (e) {\n // Ignore error\n }\n\n return null;\n }\n}\n\nUtils.init();\n","import { BaseResponse } from \"../response/base.response\";\n\nexport class CardApi extends BaseResponse {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.cardholderName = this.getResponseProperty(\"CardholderName\");\n this.brand = this.getResponseProperty(\"Brand\");\n this.number = this.getResponseProperty(\"Number\");\n this.expMonth = this.getResponseProperty(\"ExpMonth\");\n this.expYear = this.getResponseProperty(\"ExpYear\");\n this.code = this.getResponseProperty(\"Code\");\n }\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { BaseResponse } from \"../response/base.response\";\n\nexport class FieldApi extends BaseResponse {\n name: string;\n value: string;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.value = this.getResponseProperty(\"Value\");\n this.linkedId = this.getResponseProperty(\"linkedId\");\n }\n}\n","import { BaseResponse } from \"../response/base.response\";\n\nexport class IdentityApi extends BaseResponse {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.title = this.getResponseProperty(\"Title\");\n this.firstName = this.getResponseProperty(\"FirstName\");\n this.middleName = this.getResponseProperty(\"MiddleName\");\n this.lastName = this.getResponseProperty(\"LastName\");\n this.address1 = this.getResponseProperty(\"Address1\");\n this.address2 = this.getResponseProperty(\"Address2\");\n this.address3 = this.getResponseProperty(\"Address3\");\n this.city = this.getResponseProperty(\"City\");\n this.state = this.getResponseProperty(\"State\");\n this.postalCode = this.getResponseProperty(\"PostalCode\");\n this.country = this.getResponseProperty(\"Country\");\n this.company = this.getResponseProperty(\"Company\");\n this.email = this.getResponseProperty(\"Email\");\n this.phone = this.getResponseProperty(\"Phone\");\n this.ssn = this.getResponseProperty(\"SSN\");\n this.username = this.getResponseProperty(\"Username\");\n this.passportNumber = this.getResponseProperty(\"PassportNumber\");\n this.licenseNumber = this.getResponseProperty(\"LicenseNumber\");\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { BaseResponse } from \"../response/base.response\";\n\nexport class LoginUriApi extends BaseResponse {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.uri = this.getResponseProperty(\"Uri\");\n const match = this.getResponseProperty(\"Match\");\n this.match = match != null ? match : null;\n }\n}\n","import { BaseResponse } from \"../response/base.response\";\n\nimport { LoginUriApi } from \"./login-uri.api\";\n\nexport class LoginApi extends BaseResponse {\n uris: LoginUriApi[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n autofillOnPageLoad: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.username = this.getResponseProperty(\"Username\");\n this.password = this.getResponseProperty(\"Password\");\n this.passwordRevisionDate = this.getResponseProperty(\"PasswordRevisionDate\");\n this.totp = this.getResponseProperty(\"Totp\");\n this.autofillOnPageLoad = this.getResponseProperty(\"AutofillOnPageLoad\");\n\n const uris = this.getResponseProperty(\"Uris\");\n if (uris != null) {\n this.uris = uris.map((u: any) => new LoginUriApi(u));\n }\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { BaseResponse } from \"../response/base.response\";\n\nexport class SecureNoteApi extends BaseResponse {\n type: SecureNoteType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty(\"Type\");\n }\n}\n","import { AttachmentResponse } from \"../response/attachment.response\";\n\nexport class AttachmentData {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response?: AttachmentResponse) {\n if (response == null) {\n return;\n }\n this.id = response.id;\n this.url = response.url;\n this.fileName = response.fileName;\n this.key = response.key;\n this.size = response.size;\n this.sizeName = response.sizeName;\n }\n}\n","import { CardApi } from \"../api/card.api\";\n\nexport class CardData {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data?: CardApi) {\n if (data == null) {\n return;\n }\n\n this.cardholderName = data.cardholderName;\n this.brand = data.brand;\n this.number = data.number;\n this.expMonth = data.expMonth;\n this.expYear = data.expYear;\n this.code = data.code;\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { CipherResponse } from \"../response/cipher.response\";\n\nimport { AttachmentData } from \"./attachment.data\";\nimport { CardData } from \"./card.data\";\nimport { FieldData } from \"./field.data\";\nimport { IdentityData } from \"./identity.data\";\nimport { LoginData } from \"./login.data\";\nimport { PasswordHistoryData } from \"./password-history.data\";\nimport { SecureNoteData } from \"./secure-note.data\";\n\nexport class CipherData {\n id: string;\n organizationId: string;\n folderId: string;\n edit: boolean;\n viewPassword: boolean;\n organizationUseTotp: boolean;\n favorite: boolean;\n revisionDate: string;\n type: CipherType;\n name: string;\n notes: string;\n login?: LoginData;\n secureNote?: SecureNoteData;\n card?: CardData;\n identity?: IdentityData;\n fields?: FieldData[];\n attachments?: AttachmentData[];\n passwordHistory?: PasswordHistoryData[];\n collectionIds?: string[];\n creationDate: string;\n deletedDate: string;\n reprompt: CipherRepromptType;\n\n constructor(response?: CipherResponse, collectionIds?: string[]) {\n if (response == null) {\n return;\n }\n\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.folderId = response.folderId;\n this.edit = response.edit;\n this.viewPassword = response.viewPassword;\n this.organizationUseTotp = response.organizationUseTotp;\n this.favorite = response.favorite;\n this.revisionDate = response.revisionDate;\n this.type = response.type;\n this.name = response.name;\n this.notes = response.notes;\n this.collectionIds = collectionIds != null ? collectionIds : response.collectionIds;\n this.creationDate = response.creationDate;\n this.deletedDate = response.deletedDate;\n this.reprompt = response.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginData(response.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteData(response.secureNote);\n break;\n case CipherType.Card:\n this.card = new CardData(response.card);\n break;\n case CipherType.Identity:\n this.identity = new IdentityData(response.identity);\n break;\n default:\n break;\n }\n\n if (response.fields != null) {\n this.fields = response.fields.map((f) => new FieldData(f));\n }\n if (response.attachments != null) {\n this.attachments = response.attachments.map((a) => new AttachmentData(a));\n }\n if (response.passwordHistory != null) {\n this.passwordHistory = response.passwordHistory.map((ph) => new PasswordHistoryData(ph));\n }\n }\n}\n","import { CollectionDetailsResponse } from \"../response/collection.response\";\n\nexport class CollectionData {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n readOnly: boolean;\n\n constructor(response: CollectionDetailsResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.name = response.name;\n this.externalId = response.externalId;\n this.readOnly = response.readOnly;\n }\n}\n","import { EventType } from \"../../enums/eventType\";\n\nexport class EventData {\n type: EventType;\n cipherId: string;\n date: string;\n organizationId: string;\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { FieldApi } from \"../api/field.api\";\n\nexport class FieldData {\n type: FieldType;\n name: string;\n value: string;\n linkedId: LinkedIdType;\n\n constructor(response?: FieldApi) {\n if (response == null) {\n return;\n }\n this.type = response.type;\n this.name = response.name;\n this.value = response.value;\n this.linkedId = response.linkedId;\n }\n}\n","import { FolderResponse } from \"../response/folder.response\";\n\nexport class FolderData {\n id: string;\n name: string;\n revisionDate: string;\n\n constructor(response: FolderResponse) {\n this.name = response.name;\n this.id = response.id;\n this.revisionDate = response.revisionDate;\n }\n}\n","import { IdentityApi } from \"../api/identity.api\";\n\nexport class IdentityData {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data?: IdentityApi) {\n if (data == null) {\n return;\n }\n\n this.title = data.title;\n this.firstName = data.firstName;\n this.middleName = data.middleName;\n this.lastName = data.lastName;\n this.address1 = data.address1;\n this.address2 = data.address2;\n this.address3 = data.address3;\n this.city = data.city;\n this.state = data.state;\n this.postalCode = data.postalCode;\n this.country = data.country;\n this.company = data.company;\n this.email = data.email;\n this.phone = data.phone;\n this.ssn = data.ssn;\n this.username = data.username;\n this.passportNumber = data.passportNumber;\n this.licenseNumber = data.licenseNumber;\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { LoginUriApi } from \"../api/login-uri.api\";\n\nexport class LoginUriData {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data?: LoginUriApi) {\n if (data == null) {\n return;\n }\n this.uri = data.uri;\n this.match = data.match;\n }\n}\n","import { LoginApi } from \"../api/login.api\";\n\nimport { LoginUriData } from \"./login-uri.data\";\n\nexport class LoginData {\n uris: LoginUriData[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n autofillOnPageLoad: boolean;\n\n constructor(data?: LoginApi) {\n if (data == null) {\n return;\n }\n\n this.username = data.username;\n this.password = data.password;\n this.passwordRevisionDate = data.passwordRevisionDate;\n this.totp = data.totp;\n this.autofillOnPageLoad = data.autofillOnPageLoad;\n\n if (data.uris) {\n this.uris = data.uris.map((u) => new LoginUriData(u));\n }\n }\n}\n","import { PasswordHistoryResponse } from \"../response/password-history.response\";\n\nexport class PasswordHistoryData {\n password: string;\n lastUsedDate: string;\n\n constructor(response?: PasswordHistoryResponse) {\n if (response == null) {\n return;\n }\n\n this.password = response.password;\n this.lastUsedDate = response.lastUsedDate;\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\nimport { PolicyResponse } from \"../response/policy.response\";\n\nexport class PolicyData {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: PolicyResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.type = response.type;\n this.data = response.data;\n this.enabled = response.enabled;\n }\n}\n","import { ProviderUserStatusType } from \"../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../enums/providerUserType\";\nimport { ProfileProviderResponse } from \"../response/profile-provider.response\";\n\nexport class ProviderData {\n id: string;\n name: string;\n status: ProviderUserStatusType;\n type: ProviderUserType;\n enabled: boolean;\n userId: string;\n useEvents: boolean;\n\n constructor(response: ProfileProviderResponse) {\n this.id = response.id;\n this.name = response.name;\n this.status = response.status;\n this.type = response.type;\n this.enabled = response.enabled;\n this.userId = response.userId;\n this.useEvents = response.useEvents;\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNoteApi } from \"../api/secure-note.api\";\n\nexport class SecureNoteData {\n type: SecureNoteType;\n\n constructor(data?: SecureNoteApi) {\n if (data == null) {\n return;\n }\n\n this.type = data.type;\n }\n}\n","import { SendFileApi } from \"../api/send-file.api\";\n\nexport class SendFileData {\n id: string;\n fileName: string;\n size: string;\n sizeName: string;\n\n constructor(data?: SendFileApi) {\n if (data == null) {\n return;\n }\n\n this.id = data.id;\n this.fileName = data.fileName;\n this.size = data.size;\n this.sizeName = data.sizeName;\n }\n}\n","import { SendTextApi } from \"../api/send-text.api\";\n\nexport class SendTextData {\n text: string;\n hidden: boolean;\n\n constructor(data?: SendTextApi) {\n if (data == null) {\n return;\n }\n\n this.text = data.text;\n this.hidden = data.hidden;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendResponse } from \"../response/send.response\";\n\nimport { SendFileData } from \"./send-file.data\";\nimport { SendTextData } from \"./send-text.data\";\n\nexport class SendData {\n id: string;\n accessId: string;\n type: SendType;\n name: string;\n notes: string;\n file: SendFileData;\n text: SendTextData;\n key: string;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: string;\n expirationDate: string;\n deletionDate: string;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(response?: SendResponse) {\n if (response == null) {\n return;\n }\n\n this.id = response.id;\n this.accessId = response.accessId;\n this.type = response.type;\n this.name = response.name;\n this.notes = response.notes;\n this.key = response.key;\n this.maxAccessCount = response.maxAccessCount;\n this.accessCount = response.accessCount;\n this.revisionDate = response.revisionDate;\n this.expirationDate = response.expirationDate;\n this.deletionDate = response.deletionDate;\n this.password = response.password;\n this.disabled = response.disable;\n this.hideEmail = response.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendTextData(response.text);\n break;\n case SendType.File:\n this.file = new SendFileData(response.file);\n break;\n default:\n break;\n }\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport {\n ServerConfigResponse,\n ThirdPartyServerConfigResponse,\n EnvironmentServerConfigResponse,\n} from \"../response/server-config.response\";\n\nexport class ServerConfigData {\n version: string;\n gitHash: string;\n server?: ThirdPartyServerConfigData;\n environment?: EnvironmentServerConfigData;\n utcDate: string;\n\n constructor(serverConfigResponse: Partial) {\n this.version = serverConfigResponse?.version;\n this.gitHash = serverConfigResponse?.gitHash;\n this.server = serverConfigResponse?.server\n ? new ThirdPartyServerConfigData(serverConfigResponse.server)\n : null;\n this.utcDate = new Date().toISOString();\n this.environment = serverConfigResponse?.environment\n ? new EnvironmentServerConfigData(serverConfigResponse.environment)\n : null;\n }\n\n static fromJSON(obj: Jsonify): ServerConfigData {\n return Object.assign(new ServerConfigData({}), obj, {\n server: obj?.server ? ThirdPartyServerConfigData.fromJSON(obj.server) : null,\n environment: obj?.environment ? EnvironmentServerConfigData.fromJSON(obj.environment) : null,\n });\n }\n}\n\nexport class ThirdPartyServerConfigData {\n name: string;\n url: string;\n\n constructor(response: Partial) {\n this.name = response.name;\n this.url = response.url;\n }\n\n static fromJSON(obj: Jsonify): ThirdPartyServerConfigData {\n return Object.assign(new ThirdPartyServerConfigData({}), obj);\n }\n}\n\nexport class EnvironmentServerConfigData {\n vault: string;\n api: string;\n identity: string;\n notifications: string;\n sso: string;\n\n constructor(response: Partial) {\n this.vault = response.vault;\n this.api = response.api;\n this.identity = response.identity;\n this.notifications = response.notifications;\n this.sso = response.sso;\n }\n\n static fromJSON(obj: Jsonify): EnvironmentServerConfigData {\n return Object.assign(new EnvironmentServerConfigData({}), obj);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { AuthenticationStatus } from \"../../enums/authenticationStatus\";\nimport { KdfType } from \"../../enums/kdfType\";\nimport { UriMatchType } from \"../../enums/uriMatchType\";\nimport { Utils } from \"../../misc/utils\";\nimport { DeepJsonify } from \"../../types/deep-jsonify\";\nimport { CipherData } from \"../data/cipher.data\";\nimport { CollectionData } from \"../data/collection.data\";\nimport { EncryptedOrganizationKeyData } from \"../data/encrypted-organization-key.data\";\nimport { EventData } from \"../data/event.data\";\nimport { FolderData } from \"../data/folder.data\";\nimport { OrganizationData } from \"../data/organization.data\";\nimport { PolicyData } from \"../data/policy.data\";\nimport { ProviderData } from \"../data/provider.data\";\nimport { SendData } from \"../data/send.data\";\nimport { ServerConfigData } from \"../data/server-config.data\";\nimport { CipherView } from \"../view/cipher.view\";\nimport { CollectionView } from \"../view/collection.view\";\nimport { SendView } from \"../view/send.view\";\n\nimport { EncString } from \"./enc-string\";\nimport { EnvironmentUrls } from \"./environment-urls\";\nimport { GeneratedPasswordHistory } from \"./generated-password-history\";\nimport { Policy } from \"./policy\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class EncryptionPair {\n encrypted?: TEncrypted;\n decrypted?: TDecrypted;\n\n toJSON() {\n return {\n encrypted: this.encrypted,\n decrypted:\n this.decrypted instanceof ArrayBuffer\n ? Utils.fromBufferToByteString(this.decrypted)\n : this.decrypted,\n };\n }\n\n static fromJSON(\n obj: { encrypted?: Jsonify; decrypted?: string | Jsonify },\n decryptedFromJson?: (decObj: Jsonify | string) => TDecrypted,\n encryptedFromJson?: (encObj: Jsonify) => TEncrypted\n ) {\n if (obj == null) {\n return null;\n }\n\n const pair = new EncryptionPair();\n if (obj?.encrypted != null) {\n pair.encrypted = encryptedFromJson\n ? encryptedFromJson(obj.encrypted)\n : (obj.encrypted as TEncrypted);\n }\n if (obj?.decrypted != null) {\n pair.decrypted = decryptedFromJson\n ? decryptedFromJson(obj.decrypted)\n : (obj.decrypted as TDecrypted);\n }\n return pair;\n }\n}\n\nexport class DataEncryptionPair {\n encrypted?: { [id: string]: TEncrypted };\n decrypted?: TDecrypted[];\n}\n\n// This is a temporary structure to handle migrated `DataEncryptionPair` to\n// avoid needing a data migration at this stage. It should be replaced with\n// proper data migrations when `DataEncryptionPair` is deprecated.\nexport class TemporaryDataEncryption {\n encrypted?: { [id: string]: TEncrypted };\n}\n\nexport class AccountData {\n ciphers?: DataEncryptionPair = new DataEncryptionPair<\n CipherData,\n CipherView\n >();\n folders? = new TemporaryDataEncryption();\n localData?: any;\n sends?: DataEncryptionPair = new DataEncryptionPair();\n collections?: DataEncryptionPair = new DataEncryptionPair<\n CollectionData,\n CollectionView\n >();\n policies?: DataEncryptionPair = new DataEncryptionPair();\n passwordGenerationHistory?: EncryptionPair<\n GeneratedPasswordHistory[],\n GeneratedPasswordHistory[]\n > = new EncryptionPair();\n addEditCipherInfo?: any;\n eventCollection?: EventData[];\n organizations?: { [id: string]: OrganizationData };\n providers?: { [id: string]: ProviderData };\n}\n\nexport class AccountKeys {\n cryptoMasterKey?: SymmetricCryptoKey;\n cryptoMasterKeyAuto?: string;\n cryptoMasterKeyB64?: string;\n cryptoMasterKeyBiometric?: string;\n cryptoSymmetricKey?: EncryptionPair = new EncryptionPair<\n string,\n SymmetricCryptoKey\n >();\n organizationKeys?: EncryptionPair<\n { [orgId: string]: EncryptedOrganizationKeyData },\n Record\n > = new EncryptionPair<\n { [orgId: string]: EncryptedOrganizationKeyData },\n Record\n >();\n providerKeys?: EncryptionPair> = new EncryptionPair<\n any,\n Record\n >();\n privateKey?: EncryptionPair = new EncryptionPair();\n publicKey?: ArrayBuffer;\n apiKeyClientSecret?: string;\n\n toJSON() {\n return Utils.merge(this, {\n publicKey: Utils.fromBufferToByteString(this.publicKey),\n });\n }\n\n static fromJSON(obj: DeepJsonify): AccountKeys {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(\n new AccountKeys(),\n { cryptoMasterKey: SymmetricCryptoKey.fromJSON(obj?.cryptoMasterKey) },\n {\n cryptoSymmetricKey: EncryptionPair.fromJSON(\n obj?.cryptoSymmetricKey,\n SymmetricCryptoKey.fromJSON\n ),\n },\n { organizationKeys: AccountKeys.initRecordEncryptionPairsFromJSON(obj?.organizationKeys) },\n { providerKeys: AccountKeys.initRecordEncryptionPairsFromJSON(obj?.providerKeys) },\n {\n privateKey: EncryptionPair.fromJSON(\n obj?.privateKey,\n (decObj: string) => Utils.fromByteStringToArray(decObj).buffer\n ),\n },\n {\n publicKey: Utils.fromByteStringToArray(obj?.publicKey)?.buffer,\n }\n );\n }\n\n static initRecordEncryptionPairsFromJSON(obj: any) {\n return EncryptionPair.fromJSON(obj, (decObj: any) => {\n if (obj == null) {\n return null;\n }\n\n const record: Record = {};\n for (const id in decObj) {\n record[id] = SymmetricCryptoKey.fromJSON(decObj[id]);\n }\n return record;\n });\n }\n}\n\nexport class AccountProfile {\n apiKeyClientId?: string;\n authenticationStatus?: AuthenticationStatus;\n convertAccountToKeyConnector?: boolean;\n name?: string;\n email?: string;\n emailVerified?: boolean;\n entityId?: string;\n entityType?: string;\n everBeenUnlocked?: boolean;\n forcePasswordReset?: boolean;\n hasPremiumPersonally?: boolean;\n hasPremiumFromOrganization?: boolean;\n lastSync?: string;\n userId?: string;\n usesKeyConnector?: boolean;\n keyHash?: string;\n kdfIterations?: number;\n kdfType?: KdfType;\n\n static fromJSON(obj: Jsonify): AccountProfile {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new AccountProfile(), obj);\n }\n}\n\nexport class AccountSettings {\n autoConfirmFingerPrints?: boolean;\n autoFillOnPageLoadDefault?: boolean;\n biometricUnlock?: boolean;\n clearClipboard?: number;\n collapsedGroupings?: string[];\n defaultUriMatch?: UriMatchType;\n disableAddLoginNotification?: boolean;\n disableAutoBiometricsPrompt?: boolean;\n disableAutoTotpCopy?: boolean;\n disableBadgeCounter?: boolean;\n disableChangedPasswordNotification?: boolean;\n disableContextMenuItem?: boolean;\n disableGa?: boolean;\n dontShowCardsCurrentTab?: boolean;\n dontShowIdentitiesCurrentTab?: boolean;\n enableAlwaysOnTop?: boolean;\n enableAutoFillOnPageLoad?: boolean;\n enableBiometric?: boolean;\n enableFullWidth?: boolean;\n environmentUrls: EnvironmentUrls = new EnvironmentUrls();\n equivalentDomains?: any;\n minimizeOnCopyToClipboard?: boolean;\n neverDomains?: { [id: string]: any };\n passwordGenerationOptions?: any;\n usernameGenerationOptions?: any;\n generatorOptions?: any;\n pinProtected?: EncryptionPair = new EncryptionPair();\n protectedPin?: string;\n settings?: AccountSettingsSettings; // TODO: Merge whatever is going on here into the AccountSettings model properly\n vaultTimeout?: number;\n vaultTimeoutAction?: string = \"lock\";\n serverConfig?: ServerConfigData;\n\n static fromJSON(obj: Jsonify): AccountSettings {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new AccountSettings(), obj, {\n environmentUrls: EnvironmentUrls.fromJSON(obj?.environmentUrls),\n pinProtected: EncryptionPair.fromJSON(\n obj?.pinProtected,\n EncString.fromJSON\n ),\n serverConfig: ServerConfigData.fromJSON(obj?.serverConfig),\n });\n }\n}\n\nexport type AccountSettingsSettings = {\n equivalentDomains?: string[][];\n};\n\nexport class AccountTokens {\n accessToken?: string;\n refreshToken?: string;\n securityStamp?: string;\n\n static fromJSON(obj: Jsonify): AccountTokens {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new AccountTokens(), obj);\n }\n}\n\nexport class Account {\n data?: AccountData = new AccountData();\n keys?: AccountKeys = new AccountKeys();\n profile?: AccountProfile = new AccountProfile();\n settings?: AccountSettings = new AccountSettings();\n tokens?: AccountTokens = new AccountTokens();\n\n constructor(init: Partial) {\n Object.assign(this, {\n data: {\n ...new AccountData(),\n ...init?.data,\n },\n keys: {\n ...new AccountKeys(),\n ...init?.keys,\n },\n profile: {\n ...new AccountProfile(),\n ...init?.profile,\n },\n settings: {\n ...new AccountSettings(),\n ...init?.settings,\n },\n tokens: {\n ...new AccountTokens(),\n ...init?.tokens,\n },\n });\n }\n\n static fromJSON(json: Jsonify): Account {\n if (json == null) {\n return null;\n }\n\n return Object.assign(new Account({}), json, {\n keys: AccountKeys.fromJSON(json?.keys),\n profile: AccountProfile.fromJSON(json?.profile),\n settings: AccountSettings.fromJSON(json?.settings),\n tokens: AccountTokens.fromJSON(json?.tokens),\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { Utils } from \"../../misc/utils\";\nimport { AttachmentData } from \"../data/attachment.data\";\nimport { AttachmentView } from \"../view/attachment.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class Attachment extends Domain {\n id: string;\n url: string;\n size: string;\n sizeName: string; // Readable size, ex: \"4.2 KB\" or \"1.43 GB\"\n key: EncString;\n fileName: EncString;\n\n constructor(obj?: AttachmentData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.size = obj.size;\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n url: null,\n sizeName: null,\n fileName: null,\n key: null,\n },\n [\"id\", \"url\", \"sizeName\"]\n );\n }\n\n async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(\n new AttachmentView(this),\n {\n fileName: null,\n },\n orgId,\n encKey\n );\n\n if (this.key != null) {\n view.key = await this.decryptAttachmentKey(orgId, encKey);\n }\n\n return view;\n }\n\n private async decryptAttachmentKey(orgId: string, encKey?: SymmetricCryptoKey) {\n try {\n if (encKey == null) {\n encKey = await this.getKeyForDecryption(orgId);\n }\n\n const encryptService = Utils.getContainerService().getEncryptService();\n const decValue = await encryptService.decryptToBytes(this.key, encKey);\n return new SymmetricCryptoKey(decValue);\n } catch (e) {\n // TODO: error?\n }\n }\n\n private async getKeyForDecryption(orgId: string) {\n const cryptoService = Utils.getContainerService().getCryptoService();\n return orgId != null\n ? await cryptoService.getOrgKey(orgId)\n : await cryptoService.getKeyForUserEncryption();\n }\n\n toAttachmentData(): AttachmentData {\n const a = new AttachmentData();\n a.size = this.size;\n this.buildDataModel(\n this,\n a,\n {\n id: null,\n url: null,\n sizeName: null,\n fileName: null,\n key: null,\n },\n [\"id\", \"url\", \"sizeName\"]\n );\n return a;\n }\n\n static fromJSON(obj: Partial>): Attachment {\n if (obj == null) {\n return null;\n }\n\n const key = EncString.fromJSON(obj.key);\n const fileName = EncString.fromJSON(obj.fileName);\n\n return Object.assign(new Attachment(), obj, {\n key,\n fileName,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { CardData } from \"../data/card.data\";\nimport { CardView } from \"../view/card.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class Card extends Domain {\n cardholderName: EncString;\n brand: EncString;\n number: EncString;\n expMonth: EncString;\n expYear: EncString;\n code: EncString;\n\n constructor(obj?: CardData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n },\n []\n );\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new CardView(),\n {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n },\n orgId,\n encKey\n );\n }\n\n toCardData(): CardData {\n const c = new CardData();\n this.buildDataModel(this, c, {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n });\n return c;\n }\n\n static fromJSON(obj: Partial>): Card {\n if (obj == null) {\n return null;\n }\n\n const cardholderName = EncString.fromJSON(obj.cardholderName);\n const brand = EncString.fromJSON(obj.brand);\n const number = EncString.fromJSON(obj.number);\n const expMonth = EncString.fromJSON(obj.expMonth);\n const expYear = EncString.fromJSON(obj.expYear);\n const code = EncString.fromJSON(obj.code);\n return Object.assign(new Card(), obj, {\n cardholderName,\n brand,\n number,\n expMonth,\n expYear,\n code,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { Decryptable } from \"../../interfaces/decryptable.interface\";\nimport { InitializerKey } from \"../../services/cryptography/initializer-key\";\nimport { CipherData } from \"../data/cipher.data\";\nimport { LocalData } from \"../data/local.data\";\nimport { CipherView } from \"../view/cipher.view\";\n\nimport { Attachment } from \"./attachment\";\nimport { Card } from \"./card\";\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { Field } from \"./field\";\nimport { Identity } from \"./identity\";\nimport { Login } from \"./login\";\nimport { Password } from \"./password\";\nimport { SecureNote } from \"./secure-note\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class Cipher extends Domain implements Decryptable {\n readonly initializerKey = InitializerKey.Cipher;\n\n id: string;\n organizationId: string;\n folderId: string;\n name: EncString;\n notes: EncString;\n type: CipherType;\n favorite: boolean;\n organizationUseTotp: boolean;\n edit: boolean;\n viewPassword: boolean;\n revisionDate: Date;\n localData: LocalData;\n login: Login;\n identity: Identity;\n card: Card;\n secureNote: SecureNote;\n attachments: Attachment[];\n fields: Field[];\n passwordHistory: Password[];\n collectionIds: string[];\n creationDate: Date;\n deletedDate: Date;\n reprompt: CipherRepromptType;\n\n constructor(obj?: CipherData, localData: LocalData = null) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n organizationId: null,\n folderId: null,\n name: null,\n notes: null,\n },\n [\"id\", \"organizationId\", \"folderId\"]\n );\n\n this.type = obj.type;\n this.favorite = obj.favorite;\n this.organizationUseTotp = obj.organizationUseTotp;\n this.edit = obj.edit;\n if (obj.viewPassword != null) {\n this.viewPassword = obj.viewPassword;\n } else {\n this.viewPassword = true; // Default for already synced Ciphers without viewPassword\n }\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n this.collectionIds = obj.collectionIds;\n this.localData = localData;\n this.creationDate = obj.creationDate != null ? new Date(obj.creationDate) : null;\n this.deletedDate = obj.deletedDate != null ? new Date(obj.deletedDate) : null;\n this.reprompt = obj.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new Login(obj.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNote(obj.secureNote);\n break;\n case CipherType.Card:\n this.card = new Card(obj.card);\n break;\n case CipherType.Identity:\n this.identity = new Identity(obj.identity);\n break;\n default:\n break;\n }\n\n if (obj.attachments != null) {\n this.attachments = obj.attachments.map((a) => new Attachment(a));\n } else {\n this.attachments = null;\n }\n\n if (obj.fields != null) {\n this.fields = obj.fields.map((f) => new Field(f));\n } else {\n this.fields = null;\n }\n\n if (obj.passwordHistory != null) {\n this.passwordHistory = obj.passwordHistory.map((ph) => new Password(ph));\n } else {\n this.passwordHistory = null;\n }\n }\n\n async decrypt(encKey?: SymmetricCryptoKey): Promise {\n const model = new CipherView(this);\n\n await this.decryptObj(\n model,\n {\n name: null,\n notes: null,\n },\n this.organizationId,\n encKey\n );\n\n switch (this.type) {\n case CipherType.Login:\n model.login = await this.login.decrypt(this.organizationId, encKey);\n break;\n case CipherType.SecureNote:\n model.secureNote = await this.secureNote.decrypt(this.organizationId, encKey);\n break;\n case CipherType.Card:\n model.card = await this.card.decrypt(this.organizationId, encKey);\n break;\n case CipherType.Identity:\n model.identity = await this.identity.decrypt(this.organizationId, encKey);\n break;\n default:\n break;\n }\n\n const orgId = this.organizationId;\n\n if (this.attachments != null && this.attachments.length > 0) {\n const attachments: any[] = [];\n await this.attachments.reduce((promise, attachment) => {\n return promise\n .then(() => {\n return attachment.decrypt(orgId, encKey);\n })\n .then((decAttachment) => {\n attachments.push(decAttachment);\n });\n }, Promise.resolve());\n model.attachments = attachments;\n }\n\n if (this.fields != null && this.fields.length > 0) {\n const fields: any[] = [];\n await this.fields.reduce((promise, field) => {\n return promise\n .then(() => {\n return field.decrypt(orgId, encKey);\n })\n .then((decField) => {\n fields.push(decField);\n });\n }, Promise.resolve());\n model.fields = fields;\n }\n\n if (this.passwordHistory != null && this.passwordHistory.length > 0) {\n const passwordHistory: any[] = [];\n await this.passwordHistory.reduce((promise, ph) => {\n return promise\n .then(() => {\n return ph.decrypt(orgId, encKey);\n })\n .then((decPh) => {\n passwordHistory.push(decPh);\n });\n }, Promise.resolve());\n model.passwordHistory = passwordHistory;\n }\n\n return model;\n }\n\n toCipherData(): CipherData {\n const c = new CipherData();\n c.id = this.id;\n c.organizationId = this.organizationId;\n c.folderId = this.folderId;\n c.edit = this.edit;\n c.viewPassword = this.viewPassword;\n c.organizationUseTotp = this.organizationUseTotp;\n c.favorite = this.favorite;\n c.revisionDate = this.revisionDate != null ? this.revisionDate.toISOString() : null;\n c.type = this.type;\n c.collectionIds = this.collectionIds;\n c.creationDate = this.creationDate != null ? this.creationDate.toISOString() : null;\n c.deletedDate = this.deletedDate != null ? this.deletedDate.toISOString() : null;\n c.reprompt = this.reprompt;\n\n this.buildDataModel(this, c, {\n name: null,\n notes: null,\n });\n\n switch (c.type) {\n case CipherType.Login:\n c.login = this.login.toLoginData();\n break;\n case CipherType.SecureNote:\n c.secureNote = this.secureNote.toSecureNoteData();\n break;\n case CipherType.Card:\n c.card = this.card.toCardData();\n break;\n case CipherType.Identity:\n c.identity = this.identity.toIdentityData();\n break;\n default:\n break;\n }\n\n if (this.fields != null) {\n c.fields = this.fields.map((f) => f.toFieldData());\n }\n if (this.attachments != null) {\n c.attachments = this.attachments.map((a) => a.toAttachmentData());\n }\n if (this.passwordHistory != null) {\n c.passwordHistory = this.passwordHistory.map((ph) => ph.toPasswordHistoryData());\n }\n return c;\n }\n\n static fromJSON(obj: Jsonify) {\n if (obj == null) {\n return null;\n }\n\n const domain = new Cipher();\n const name = EncString.fromJSON(obj.name);\n const notes = EncString.fromJSON(obj.notes);\n const revisionDate = obj.revisionDate == null ? null : new Date(obj.revisionDate);\n const deletedDate = obj.deletedDate == null ? null : new Date(obj.deletedDate);\n const attachments = obj.attachments?.map((a: any) => Attachment.fromJSON(a));\n const fields = obj.fields?.map((f: any) => Field.fromJSON(f));\n const passwordHistory = obj.passwordHistory?.map((ph: any) => Password.fromJSON(ph));\n\n Object.assign(domain, obj, {\n name,\n notes,\n revisionDate,\n deletedDate,\n attachments,\n fields,\n passwordHistory,\n });\n\n switch (obj.type) {\n case CipherType.Card:\n domain.card = Card.fromJSON(obj.card);\n break;\n case CipherType.Identity:\n domain.identity = Identity.fromJSON(obj.identity);\n break;\n case CipherType.Login:\n domain.login = Login.fromJSON(obj.login);\n break;\n case CipherType.SecureNote:\n domain.secureNote = SecureNote.fromJSON(obj.secureNote);\n break;\n default:\n break;\n }\n\n return domain;\n }\n}\n","import { CollectionData } from \"../data/collection.data\";\nimport { CollectionView } from \"../view/collection.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\n\nexport class Collection extends Domain {\n id: string;\n organizationId: string;\n name: EncString;\n externalId: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(obj?: CollectionData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n organizationId: null,\n name: null,\n externalId: null,\n readOnly: null,\n hidePasswords: null,\n },\n [\"id\", \"organizationId\", \"externalId\", \"readOnly\", \"hidePasswords\"]\n );\n }\n\n decrypt(): Promise {\n return this.decryptObj(\n new CollectionView(this),\n {\n name: null,\n },\n this.organizationId\n );\n }\n}\n","import { View } from \"../view/view\";\n\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport default class Domain {\n protected buildDomainModel(\n domain: D,\n dataObj: any,\n map: any,\n notEncList: any[] = []\n ) {\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n const objProp = dataObj[map[prop] || prop];\n if (notEncList.indexOf(prop) > -1) {\n (domain as any)[prop] = objProp ? objProp : null;\n } else {\n (domain as any)[prop] = objProp ? new EncString(objProp) : null;\n }\n }\n }\n protected buildDataModel(\n domain: D,\n dataObj: any,\n map: any,\n notEncStringList: any[] = []\n ) {\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n const objProp = (domain as any)[map[prop] || prop];\n if (notEncStringList.indexOf(prop) > -1) {\n (dataObj as any)[prop] = objProp != null ? objProp : null;\n } else {\n (dataObj as any)[prop] = objProp != null ? (objProp as EncString).encryptedString : null;\n }\n }\n }\n\n protected async decryptObj(\n viewModel: T,\n map: any,\n orgId: string,\n key: SymmetricCryptoKey = null\n ): Promise {\n const promises = [];\n const self: any = this;\n\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n (function (theProp) {\n const p = Promise.resolve()\n .then(() => {\n const mapProp = map[theProp] || theProp;\n if (self[mapProp]) {\n return self[mapProp].decrypt(orgId, key);\n }\n return null;\n })\n .then((val: any) => {\n (viewModel as any)[theProp] = val;\n });\n promises.push(p);\n })(prop);\n }\n\n await Promise.all(promises);\n return viewModel;\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { EncryptionType } from \"../../enums/encryptionType\";\nimport { IEncrypted } from \"../../interfaces/IEncrypted\";\nimport { Utils } from \"../../misc/utils\";\n\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class EncString implements IEncrypted {\n encryptedString?: string;\n encryptionType?: EncryptionType;\n decryptedValue?: string;\n data?: string;\n iv?: string;\n mac?: string;\n\n constructor(\n encryptedStringOrType: string | EncryptionType,\n data?: string,\n iv?: string,\n mac?: string\n ) {\n if (data != null) {\n this.initFromData(encryptedStringOrType as EncryptionType, data, iv, mac);\n } else {\n this.initFromEncryptedString(encryptedStringOrType as string);\n }\n }\n\n get ivBytes(): ArrayBuffer {\n return this.iv == null ? null : Utils.fromB64ToArray(this.iv).buffer;\n }\n\n get macBytes(): ArrayBuffer {\n return this.mac == null ? null : Utils.fromB64ToArray(this.mac).buffer;\n }\n\n get dataBytes(): ArrayBuffer {\n return this.data == null ? null : Utils.fromB64ToArray(this.data).buffer;\n }\n\n toJSON() {\n return this.encryptedString;\n }\n\n static fromJSON(obj: Jsonify): EncString {\n if (obj == null) {\n return null;\n }\n\n return new EncString(obj);\n }\n\n private initFromData(encType: EncryptionType, data: string, iv: string, mac: string) {\n if (iv != null) {\n this.encryptedString = encType + \".\" + iv + \"|\" + data;\n } else {\n this.encryptedString = encType + \".\" + data;\n }\n\n // mac\n if (mac != null) {\n this.encryptedString += \"|\" + mac;\n }\n\n this.encryptionType = encType;\n this.data = data;\n this.iv = iv;\n this.mac = mac;\n }\n\n private initFromEncryptedString(encryptedString: string) {\n this.encryptedString = encryptedString as string;\n if (!this.encryptedString) {\n return;\n }\n\n const { encType, encPieces } = this.parseEncryptedString(this.encryptedString);\n this.encryptionType = encType;\n\n switch (encType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64:\n if (encPieces.length !== 3) {\n return;\n }\n\n this.iv = encPieces[0];\n this.data = encPieces[1];\n this.mac = encPieces[2];\n break;\n case EncryptionType.AesCbc256_B64:\n if (encPieces.length !== 2) {\n return;\n }\n\n this.iv = encPieces[0];\n this.data = encPieces[1];\n break;\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_B64:\n if (encPieces.length !== 1) {\n return;\n }\n\n this.data = encPieces[0];\n break;\n default:\n return;\n }\n }\n\n private parseEncryptedString(encryptedString: string): {\n encType: EncryptionType;\n encPieces: string[];\n } {\n const headerPieces = encryptedString.split(\".\");\n let encType: EncryptionType;\n let encPieces: string[] = null;\n\n if (headerPieces.length === 2) {\n try {\n encType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split(\"|\");\n } catch (e) {\n return;\n }\n } else {\n encPieces = encryptedString.split(\"|\");\n encType =\n encPieces.length === 3\n ? EncryptionType.AesCbc128_HmacSha256_B64\n : EncryptionType.AesCbc256_B64;\n }\n\n return {\n encType,\n encPieces,\n };\n }\n\n async decrypt(orgId: string, key: SymmetricCryptoKey = null): Promise {\n if (this.decryptedValue != null) {\n return this.decryptedValue;\n }\n\n try {\n if (key == null) {\n key = await this.getKeyForDecryption(orgId);\n }\n if (key == null) {\n throw new Error(\"No key to decrypt EncString with orgId \" + orgId);\n }\n\n const encryptService = Utils.getContainerService().getEncryptService();\n this.decryptedValue = await encryptService.decryptToUtf8(this, key);\n } catch (e) {\n this.decryptedValue = \"[error: cannot decrypt]\";\n }\n return this.decryptedValue;\n }\n\n private async getKeyForDecryption(orgId: string) {\n const cryptoService = Utils.getContainerService().getCryptoService();\n return orgId != null\n ? await cryptoService.getOrgKey(orgId)\n : await cryptoService.getKeyForUserEncryption();\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nexport class EnvironmentUrls {\n base: string = null;\n api: string = null;\n identity: string = null;\n icons: string = null;\n notifications: string = null;\n events: string = null;\n webVault: string = null;\n keyConnector: string = null;\n\n static fromJSON(obj: Jsonify): EnvironmentUrls {\n return Object.assign(new EnvironmentUrls(), obj);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { FieldData } from \"../data/field.data\";\nimport { FieldView } from \"../view/field.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class Field extends Domain {\n name: EncString;\n value: EncString;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(obj?: FieldData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.type = obj.type;\n this.linkedId = obj.linkedId;\n this.buildDomainModel(\n this,\n obj,\n {\n name: null,\n value: null,\n },\n []\n );\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new FieldView(this),\n {\n name: null,\n value: null,\n },\n orgId,\n encKey\n );\n }\n\n toFieldData(): FieldData {\n const f = new FieldData();\n this.buildDataModel(\n this,\n f,\n {\n name: null,\n value: null,\n type: null,\n linkedId: null,\n },\n [\"type\", \"linkedId\"]\n );\n return f;\n }\n\n static fromJSON(obj: Partial>): Field {\n if (obj == null) {\n return null;\n }\n\n const name = EncString.fromJSON(obj.name);\n const value = EncString.fromJSON(obj.value);\n\n return Object.assign(new Field(), obj, {\n name,\n value,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { FolderData } from \"../data/folder.data\";\nimport { FolderView } from \"../view/folder.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\n\nexport class Folder extends Domain {\n id: string;\n name: EncString;\n revisionDate: Date;\n\n constructor(obj?: FolderData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n name: null,\n },\n [\"id\"]\n );\n\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n }\n\n decrypt(): Promise {\n return this.decryptObj(\n new FolderView(this),\n {\n name: null,\n },\n null\n );\n }\n\n static fromJSON(obj: Jsonify) {\n const revisionDate = obj.revisionDate == null ? null : new Date(obj.revisionDate);\n return Object.assign(new Folder(), obj, { name: EncString.fromJSON(obj.name), revisionDate });\n }\n}\n","export class GeneratedPasswordHistory {\n password: string;\n date: number;\n\n constructor(password: string, date: number) {\n this.password = password;\n this.date = date;\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { IdentityData } from \"../data/identity.data\";\nimport { IdentityView } from \"../view/identity.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class Identity extends Domain {\n title: EncString;\n firstName: EncString;\n middleName: EncString;\n lastName: EncString;\n address1: EncString;\n address2: EncString;\n address3: EncString;\n city: EncString;\n state: EncString;\n postalCode: EncString;\n country: EncString;\n company: EncString;\n email: EncString;\n phone: EncString;\n ssn: EncString;\n username: EncString;\n passportNumber: EncString;\n licenseNumber: EncString;\n\n constructor(obj?: IdentityData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n },\n []\n );\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new IdentityView(),\n {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n },\n orgId,\n encKey\n );\n }\n\n toIdentityData(): IdentityData {\n const i = new IdentityData();\n this.buildDataModel(this, i, {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n });\n return i;\n }\n\n static fromJSON(obj: Jsonify): Identity {\n if (obj == null) {\n return null;\n }\n\n const title = EncString.fromJSON(obj.title);\n const firstName = EncString.fromJSON(obj.firstName);\n const middleName = EncString.fromJSON(obj.middleName);\n const lastName = EncString.fromJSON(obj.lastName);\n const address1 = EncString.fromJSON(obj.address1);\n const address2 = EncString.fromJSON(obj.address2);\n const address3 = EncString.fromJSON(obj.address3);\n const city = EncString.fromJSON(obj.city);\n const state = EncString.fromJSON(obj.state);\n const postalCode = EncString.fromJSON(obj.postalCode);\n const country = EncString.fromJSON(obj.country);\n const company = EncString.fromJSON(obj.company);\n const email = EncString.fromJSON(obj.email);\n const phone = EncString.fromJSON(obj.phone);\n const ssn = EncString.fromJSON(obj.ssn);\n const username = EncString.fromJSON(obj.username);\n const passportNumber = EncString.fromJSON(obj.passportNumber);\n const licenseNumber = EncString.fromJSON(obj.licenseNumber);\n\n return Object.assign(new Identity(), obj, {\n title,\n firstName,\n middleName,\n lastName,\n address1,\n address2,\n address3,\n city,\n state,\n postalCode,\n country,\n company,\n email,\n phone,\n ssn,\n username,\n passportNumber,\n licenseNumber,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { UriMatchType } from \"../../enums/uriMatchType\";\nimport { LoginUriData } from \"../data/login-uri.data\";\nimport { LoginUriView } from \"../view/login-uri.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class LoginUri extends Domain {\n uri: EncString;\n match: UriMatchType;\n\n constructor(obj?: LoginUriData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.match = obj.match;\n this.buildDomainModel(\n this,\n obj,\n {\n uri: null,\n },\n []\n );\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new LoginUriView(this),\n {\n uri: null,\n },\n orgId,\n encKey\n );\n }\n\n toLoginUriData(): LoginUriData {\n const u = new LoginUriData();\n this.buildDataModel(\n this,\n u,\n {\n uri: null,\n match: null,\n },\n [\"match\"]\n );\n return u;\n }\n\n static fromJSON(obj: Jsonify): LoginUri {\n if (obj == null) {\n return null;\n }\n\n const uri = EncString.fromJSON(obj.uri);\n return Object.assign(new LoginUri(), obj, {\n uri,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { LoginData } from \"../data/login.data\";\nimport { LoginView } from \"../view/login.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { LoginUri } from \"./login-uri\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class Login extends Domain {\n uris: LoginUri[];\n username: EncString;\n password: EncString;\n passwordRevisionDate?: Date;\n totp: EncString;\n autofillOnPageLoad: boolean;\n\n constructor(obj?: LoginData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.passwordRevisionDate =\n obj.passwordRevisionDate != null ? new Date(obj.passwordRevisionDate) : null;\n this.autofillOnPageLoad = obj.autofillOnPageLoad;\n this.buildDomainModel(\n this,\n obj,\n {\n username: null,\n password: null,\n totp: null,\n },\n []\n );\n\n if (obj.uris) {\n this.uris = [];\n obj.uris.forEach((u) => {\n this.uris.push(new LoginUri(u));\n });\n }\n }\n\n async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(\n new LoginView(this),\n {\n username: null,\n password: null,\n totp: null,\n },\n orgId,\n encKey\n );\n\n if (this.uris != null) {\n view.uris = [];\n for (let i = 0; i < this.uris.length; i++) {\n const uri = await this.uris[i].decrypt(orgId, encKey);\n view.uris.push(uri);\n }\n }\n\n return view;\n }\n\n toLoginData(): LoginData {\n const l = new LoginData();\n l.passwordRevisionDate =\n this.passwordRevisionDate != null ? this.passwordRevisionDate.toISOString() : null;\n l.autofillOnPageLoad = this.autofillOnPageLoad;\n this.buildDataModel(this, l, {\n username: null,\n password: null,\n totp: null,\n });\n\n if (this.uris != null && this.uris.length > 0) {\n l.uris = [];\n this.uris.forEach((u) => {\n l.uris.push(u.toLoginUriData());\n });\n }\n\n return l;\n }\n\n static fromJSON(obj: Partial>): Login {\n if (obj == null) {\n return null;\n }\n\n const username = EncString.fromJSON(obj.username);\n const password = EncString.fromJSON(obj.password);\n const totp = EncString.fromJSON(obj.totp);\n const passwordRevisionDate =\n obj.passwordRevisionDate == null ? null : new Date(obj.passwordRevisionDate);\n const uris = obj.uris?.map((uri: any) => LoginUri.fromJSON(uri));\n\n return Object.assign(new Login(), obj, {\n username,\n password,\n totp,\n passwordRevisionDate: passwordRevisionDate,\n uris: uris,\n });\n }\n}\n","import Domain from \"./domain-base\";\n\nexport class MasterPasswordPolicyOptions extends Domain {\n minComplexity = 0;\n minLength = 0;\n requireUpper = false;\n requireLower = false;\n requireNumbers = false;\n requireSpecial = false;\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { PasswordHistoryData } from \"../data/password-history.data\";\nimport { PasswordHistoryView } from \"../view/password-history.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class Password extends Domain {\n password: EncString;\n lastUsedDate: Date;\n\n constructor(obj?: PasswordHistoryData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n password: null,\n });\n this.lastUsedDate = new Date(obj.lastUsedDate);\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new PasswordHistoryView(this),\n {\n password: null,\n },\n orgId,\n encKey\n );\n }\n\n toPasswordHistoryData(): PasswordHistoryData {\n const ph = new PasswordHistoryData();\n ph.lastUsedDate = this.lastUsedDate.toISOString();\n this.buildDataModel(this, ph, {\n password: null,\n });\n return ph;\n }\n\n static fromJSON(obj: Partial>): Password {\n if (obj == null) {\n return null;\n }\n\n const password = EncString.fromJSON(obj.password);\n const lastUsedDate = obj.lastUsedDate == null ? null : new Date(obj.lastUsedDate);\n\n return Object.assign(new Password(), obj, {\n password,\n lastUsedDate,\n });\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\nimport { PolicyData } from \"../data/policy.data\";\n\nimport Domain from \"./domain-base\";\n\nexport class Policy extends Domain {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(obj?: PolicyData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.organizationId = obj.organizationId;\n this.type = obj.type;\n this.data = obj.data;\n this.enabled = obj.enabled;\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNoteData } from \"../data/secure-note.data\";\nimport { SecureNoteView } from \"../view/secure-note.view\";\n\nimport Domain from \"./domain-base\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class SecureNote extends Domain {\n type: SecureNoteType;\n\n constructor(obj?: SecureNoteData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.type = obj.type;\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return Promise.resolve(new SecureNoteView(this));\n }\n\n toSecureNoteData(): SecureNoteData {\n const n = new SecureNoteData();\n n.type = this.type;\n return n;\n }\n\n static fromJSON(obj: Jsonify): SecureNote {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new SecureNote(), obj);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { EncryptionType } from \"../../enums/encryptionType\";\nimport { Utils } from \"../../misc/utils\";\n\nexport class SymmetricCryptoKey {\n key: ArrayBuffer;\n encKey?: ArrayBuffer;\n macKey?: ArrayBuffer;\n encType: EncryptionType;\n\n keyB64: string;\n encKeyB64: string;\n macKeyB64: string;\n\n meta: any;\n\n constructor(key: ArrayBuffer, encType?: EncryptionType) {\n if (key == null) {\n throw new Error(\"Must provide key\");\n }\n\n if (encType == null) {\n if (key.byteLength === 32) {\n encType = EncryptionType.AesCbc256_B64;\n } else if (key.byteLength === 64) {\n encType = EncryptionType.AesCbc256_HmacSha256_B64;\n } else {\n throw new Error(\"Unable to determine encType.\");\n }\n }\n\n this.key = key;\n this.encType = encType;\n\n if (encType === EncryptionType.AesCbc256_B64 && key.byteLength === 32) {\n this.encKey = key;\n this.macKey = null;\n } else if (encType === EncryptionType.AesCbc128_HmacSha256_B64 && key.byteLength === 32) {\n this.encKey = key.slice(0, 16);\n this.macKey = key.slice(16, 32);\n } else if (encType === EncryptionType.AesCbc256_HmacSha256_B64 && key.byteLength === 64) {\n this.encKey = key.slice(0, 32);\n this.macKey = key.slice(32, 64);\n } else {\n throw new Error(\"Unsupported encType/key length.\");\n }\n\n if (this.key != null) {\n this.keyB64 = Utils.fromBufferToB64(this.key);\n }\n if (this.encKey != null) {\n this.encKeyB64 = Utils.fromBufferToB64(this.encKey);\n }\n if (this.macKey != null) {\n this.macKeyB64 = Utils.fromBufferToB64(this.macKey);\n }\n }\n\n toJSON() {\n // The whole object is constructed from the initial key, so just store the B64 key\n return { keyB64: this.keyB64 };\n }\n\n static fromJSON(obj: Jsonify): SymmetricCryptoKey {\n if (obj == null) {\n return null;\n }\n\n const arrayBuffer = Utils.fromB64ToArray(obj.keyB64).buffer;\n return new SymmetricCryptoKey(arrayBuffer);\n }\n}\n","export class WindowState {\n width?: number;\n height?: number;\n isMaximized?: boolean;\n // TODO: displayBounds is an Electron.Rectangle.\n // We need to establish some kind of client-specific global state, similiar to the way we already extend a base Account.\n displayBounds: any;\n x?: number;\n y?: number;\n}\n","import { Card as CardDomain } from \"../domain/card\";\nimport { EncString } from \"../domain/enc-string\";\nimport { CardView } from \"../view/card.view\";\n\nexport class CardExport {\n static template(): CardExport {\n const req = new CardExport();\n req.cardholderName = \"John Doe\";\n req.brand = \"visa\";\n req.number = \"4242424242424242\";\n req.expMonth = \"04\";\n req.expYear = \"2023\";\n req.code = \"123\";\n return req;\n }\n\n static toView(req: CardExport, view = new CardView()) {\n view.cardholderName = req.cardholderName;\n view.brand = req.brand;\n view.number = req.number;\n view.expMonth = req.expMonth;\n view.expYear = req.expYear;\n view.code = req.code;\n return view;\n }\n\n static toDomain(req: CardExport, domain = new CardDomain()) {\n domain.cardholderName = req.cardholderName != null ? new EncString(req.cardholderName) : null;\n domain.brand = req.brand != null ? new EncString(req.brand) : null;\n domain.number = req.number != null ? new EncString(req.number) : null;\n domain.expMonth = req.expMonth != null ? new EncString(req.expMonth) : null;\n domain.expYear = req.expYear != null ? new EncString(req.expYear) : null;\n domain.code = req.code != null ? new EncString(req.code) : null;\n return domain;\n }\n\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(o?: CardView | CardDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof CardView) {\n this.cardholderName = o.cardholderName;\n this.brand = o.brand;\n this.number = o.number;\n this.expMonth = o.expMonth;\n this.expYear = o.expYear;\n this.code = o.code;\n } else {\n this.cardholderName = o.cardholderName?.encryptedString;\n this.brand = o.brand?.encryptedString;\n this.number = o.number?.encryptedString;\n this.expMonth = o.expMonth?.encryptedString;\n this.expYear = o.expYear?.encryptedString;\n this.code = o.code?.encryptedString;\n }\n }\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { EncString } from \"../domain/enc-string\";\nimport { Field as FieldDomain } from \"../domain/field\";\nimport { FieldView } from \"../view/field.view\";\n\nexport class FieldExport {\n static template(): FieldExport {\n const req = new FieldExport();\n req.name = \"Field name\";\n req.value = \"Some value\";\n req.type = FieldType.Text;\n return req;\n }\n\n static toView(req: FieldExport, view = new FieldView()) {\n view.type = req.type;\n view.value = req.value;\n view.name = req.name;\n view.linkedId = req.linkedId;\n return view;\n }\n\n static toDomain(req: FieldExport, domain = new FieldDomain()) {\n domain.type = req.type;\n domain.value = req.value != null ? new EncString(req.value) : null;\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.linkedId = req.linkedId;\n return domain;\n }\n\n name: string;\n value: string;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(o?: FieldView | FieldDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof FieldView) {\n this.name = o.name;\n this.value = o.value;\n } else {\n this.name = o.name?.encryptedString;\n this.value = o.value?.encryptedString;\n }\n this.type = o.type;\n this.linkedId = o.linkedId;\n }\n}\n","import { EncString } from \"../domain/enc-string\";\nimport { Identity as IdentityDomain } from \"../domain/identity\";\nimport { IdentityView } from \"../view/identity.view\";\n\nexport class IdentityExport {\n static template(): IdentityExport {\n const req = new IdentityExport();\n req.title = \"Mr\";\n req.firstName = \"John\";\n req.middleName = \"William\";\n req.lastName = \"Doe\";\n req.address1 = \"123 Any St\";\n req.address2 = \"Apt #123\";\n req.address3 = null;\n req.city = \"New York\";\n req.state = \"NY\";\n req.postalCode = \"10001\";\n req.country = \"US\";\n req.company = \"Acme Inc.\";\n req.email = \"john@company.com\";\n req.phone = \"5555551234\";\n req.ssn = \"000-123-4567\";\n req.username = \"jdoe\";\n req.passportNumber = \"US-123456789\";\n req.licenseNumber = \"D123-12-123-12333\";\n return req;\n }\n\n static toView(req: IdentityExport, view = new IdentityView()) {\n view.title = req.title;\n view.firstName = req.firstName;\n view.middleName = req.middleName;\n view.lastName = req.lastName;\n view.address1 = req.address1;\n view.address2 = req.address2;\n view.address3 = req.address3;\n view.city = req.city;\n view.state = req.state;\n view.postalCode = req.postalCode;\n view.country = req.country;\n view.company = req.company;\n view.email = req.email;\n view.phone = req.phone;\n view.ssn = req.ssn;\n view.username = req.username;\n view.passportNumber = req.passportNumber;\n view.licenseNumber = req.licenseNumber;\n return view;\n }\n\n static toDomain(req: IdentityExport, domain = new IdentityDomain()) {\n domain.title = req.title != null ? new EncString(req.title) : null;\n domain.firstName = req.firstName != null ? new EncString(req.firstName) : null;\n domain.middleName = req.middleName != null ? new EncString(req.middleName) : null;\n domain.lastName = req.lastName != null ? new EncString(req.lastName) : null;\n domain.address1 = req.address1 != null ? new EncString(req.address1) : null;\n domain.address2 = req.address2 != null ? new EncString(req.address2) : null;\n domain.address3 = req.address3 != null ? new EncString(req.address3) : null;\n domain.city = req.city != null ? new EncString(req.city) : null;\n domain.state = req.state != null ? new EncString(req.state) : null;\n domain.postalCode = req.postalCode != null ? new EncString(req.postalCode) : null;\n domain.country = req.country != null ? new EncString(req.country) : null;\n domain.company = req.company != null ? new EncString(req.company) : null;\n domain.email = req.email != null ? new EncString(req.email) : null;\n domain.phone = req.phone != null ? new EncString(req.phone) : null;\n domain.ssn = req.ssn != null ? new EncString(req.ssn) : null;\n domain.username = req.username != null ? new EncString(req.username) : null;\n domain.passportNumber = req.passportNumber != null ? new EncString(req.passportNumber) : null;\n domain.licenseNumber = req.licenseNumber != null ? new EncString(req.licenseNumber) : null;\n return domain;\n }\n\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(o?: IdentityView | IdentityDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof IdentityView) {\n this.title = o.title;\n this.firstName = o.firstName;\n this.middleName = o.middleName;\n this.lastName = o.lastName;\n this.address1 = o.address1;\n this.address2 = o.address2;\n this.address3 = o.address3;\n this.city = o.city;\n this.state = o.state;\n this.postalCode = o.postalCode;\n this.country = o.country;\n this.company = o.company;\n this.email = o.email;\n this.phone = o.phone;\n this.ssn = o.ssn;\n this.username = o.username;\n this.passportNumber = o.passportNumber;\n this.licenseNumber = o.licenseNumber;\n } else {\n this.title = o.title?.encryptedString;\n this.firstName = o.firstName?.encryptedString;\n this.middleName = o.middleName?.encryptedString;\n this.lastName = o.lastName?.encryptedString;\n this.address1 = o.address1?.encryptedString;\n this.address2 = o.address2?.encryptedString;\n this.address3 = o.address3?.encryptedString;\n this.city = o.city?.encryptedString;\n this.state = o.state?.encryptedString;\n this.postalCode = o.postalCode?.encryptedString;\n this.country = o.country?.encryptedString;\n this.company = o.company?.encryptedString;\n this.email = o.email?.encryptedString;\n this.phone = o.phone?.encryptedString;\n this.ssn = o.ssn?.encryptedString;\n this.username = o.username?.encryptedString;\n this.passportNumber = o.passportNumber?.encryptedString;\n this.licenseNumber = o.licenseNumber?.encryptedString;\n }\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { EncString } from \"../domain/enc-string\";\nimport { LoginUri as LoginUriDomain } from \"../domain/login-uri\";\nimport { LoginUriView } from \"../view/login-uri.view\";\n\nexport class LoginUriExport {\n static template(): LoginUriExport {\n const req = new LoginUriExport();\n req.uri = \"https://google.com\";\n req.match = null;\n return req;\n }\n\n static toView(req: LoginUriExport, view = new LoginUriView()) {\n view.uri = req.uri;\n view.match = req.match;\n return view;\n }\n\n static toDomain(req: LoginUriExport, domain = new LoginUriDomain()) {\n domain.uri = req.uri != null ? new EncString(req.uri) : null;\n domain.match = req.match;\n return domain;\n }\n\n uri: string;\n match: UriMatchType = null;\n\n constructor(o?: LoginUriView | LoginUriDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof LoginUriView) {\n this.uri = o.uri;\n } else {\n this.uri = o.uri?.encryptedString;\n }\n this.match = o.match;\n }\n}\n","import { EncString } from \"../domain/enc-string\";\nimport { Login as LoginDomain } from \"../domain/login\";\nimport { LoginView } from \"../view/login.view\";\n\nimport { LoginUriExport } from \"./login-uri.export\";\n\nexport class LoginExport {\n static template(): LoginExport {\n const req = new LoginExport();\n req.uris = [];\n req.username = \"jdoe\";\n req.password = \"myp@ssword123\";\n req.totp = \"JBSWY3DPEHPK3PXP\";\n return req;\n }\n\n static toView(req: LoginExport, view = new LoginView()) {\n if (req.uris != null) {\n view.uris = req.uris.map((u) => LoginUriExport.toView(u));\n }\n view.username = req.username;\n view.password = req.password;\n view.totp = req.totp;\n return view;\n }\n\n static toDomain(req: LoginExport, domain = new LoginDomain()) {\n if (req.uris != null) {\n domain.uris = req.uris.map((u) => LoginUriExport.toDomain(u));\n }\n domain.username = req.username != null ? new EncString(req.username) : null;\n domain.password = req.password != null ? new EncString(req.password) : null;\n domain.totp = req.totp != null ? new EncString(req.totp) : null;\n return domain;\n }\n\n uris: LoginUriExport[];\n username: string;\n password: string;\n totp: string;\n\n constructor(o?: LoginView | LoginDomain) {\n if (o == null) {\n return;\n }\n\n if (o.uris != null) {\n if (o instanceof LoginView) {\n this.uris = o.uris.map((u) => new LoginUriExport(u));\n } else {\n this.uris = o.uris.map((u) => new LoginUriExport(u));\n }\n }\n\n if (o instanceof LoginView) {\n this.username = o.username;\n this.password = o.password;\n this.totp = o.totp;\n } else {\n this.username = o.username?.encryptedString;\n this.password = o.password?.encryptedString;\n this.totp = o.totp?.encryptedString;\n }\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNote as SecureNoteDomain } from \"../domain/secure-note\";\nimport { SecureNoteView } from \"../view/secure-note.view\";\n\nexport class SecureNoteExport {\n static template(): SecureNoteExport {\n const req = new SecureNoteExport();\n req.type = SecureNoteType.Generic;\n return req;\n }\n\n static toView(req: SecureNoteExport, view = new SecureNoteView()) {\n view.type = req.type;\n return view;\n }\n\n static toDomain(req: SecureNoteExport, view = new SecureNoteDomain()) {\n view.type = req.type;\n return view;\n }\n\n type: SecureNoteType;\n\n constructor(o?: SecureNoteView | SecureNoteDomain) {\n if (o == null) {\n return;\n }\n\n this.type = o.type;\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { Cipher as CipherDomain } from \"../domain/cipher\";\nimport { EncString } from \"../domain/enc-string\";\nimport { CipherView } from \"../view/cipher.view\";\n\nimport { CardExport } from \"./card.export\";\nimport { FieldExport } from \"./field.export\";\nimport { IdentityExport } from \"./identity.export\";\nimport { LoginExport } from \"./login.export\";\nimport { SecureNoteExport } from \"./secure-note.export\";\n\nexport class CipherExport {\n static template(): CipherExport {\n const req = new CipherExport();\n req.organizationId = null;\n req.collectionIds = null;\n req.folderId = null;\n req.type = CipherType.Login;\n req.name = \"Item name\";\n req.notes = \"Some notes about this item.\";\n req.favorite = false;\n req.fields = [];\n req.login = null;\n req.secureNote = null;\n req.card = null;\n req.identity = null;\n req.reprompt = CipherRepromptType.None;\n return req;\n }\n\n static toView(req: CipherExport, view = new CipherView()) {\n view.type = req.type;\n view.folderId = req.folderId;\n if (view.organizationId == null) {\n view.organizationId = req.organizationId;\n }\n if (view.collectionIds || req.collectionIds) {\n const set = new Set((view.collectionIds ?? []).concat(req.collectionIds ?? []));\n view.collectionIds = Array.from(set.values());\n }\n view.name = req.name;\n view.notes = req.notes;\n view.favorite = req.favorite;\n view.reprompt = req.reprompt ?? CipherRepromptType.None;\n\n if (req.fields != null) {\n view.fields = req.fields.map((f) => FieldExport.toView(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n view.login = LoginExport.toView(req.login);\n break;\n case CipherType.SecureNote:\n view.secureNote = SecureNoteExport.toView(req.secureNote);\n break;\n case CipherType.Card:\n view.card = CardExport.toView(req.card);\n break;\n case CipherType.Identity:\n view.identity = IdentityExport.toView(req.identity);\n break;\n }\n\n return view;\n }\n\n static toDomain(req: CipherExport, domain = new CipherDomain()) {\n domain.type = req.type;\n domain.folderId = req.folderId;\n if (domain.organizationId == null) {\n domain.organizationId = req.organizationId;\n }\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.notes = req.notes != null ? new EncString(req.notes) : null;\n domain.favorite = req.favorite;\n domain.reprompt = req.reprompt ?? CipherRepromptType.None;\n\n if (req.fields != null) {\n domain.fields = req.fields.map((f) => FieldExport.toDomain(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n domain.login = LoginExport.toDomain(req.login);\n break;\n case CipherType.SecureNote:\n domain.secureNote = SecureNoteExport.toDomain(req.secureNote);\n break;\n case CipherType.Card:\n domain.card = CardExport.toDomain(req.card);\n break;\n case CipherType.Identity:\n domain.identity = IdentityExport.toDomain(req.identity);\n break;\n }\n\n return domain;\n }\n\n type: CipherType;\n folderId: string;\n organizationId: string;\n collectionIds: string[];\n name: string;\n notes: string;\n favorite: boolean;\n fields: FieldExport[];\n login: LoginExport;\n secureNote: SecureNoteExport;\n card: CardExport;\n identity: IdentityExport;\n reprompt: CipherRepromptType;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView | CipherDomain) {\n this.organizationId = o.organizationId;\n this.folderId = o.folderId;\n this.type = o.type;\n this.reprompt = o.reprompt;\n\n if (o instanceof CipherView) {\n this.name = o.name;\n this.notes = o.notes;\n } else {\n this.name = o.name?.encryptedString;\n this.notes = o.notes?.encryptedString;\n }\n\n this.favorite = o.favorite;\n\n if (o.fields != null) {\n if (o instanceof CipherView) {\n this.fields = o.fields.map((f) => new FieldExport(f));\n } else {\n this.fields = o.fields.map((f) => new FieldExport(f));\n }\n }\n\n switch (o.type) {\n case CipherType.Login:\n this.login = new LoginExport(o.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteExport(o.secureNote);\n break;\n case CipherType.Card:\n this.card = new CardExport(o.card);\n break;\n case CipherType.Identity:\n this.identity = new IdentityExport(o.identity);\n break;\n }\n }\n}\n","import { Cipher as CipherDomain } from \"../domain/cipher\";\nimport { CipherView } from \"../view/cipher.view\";\n\nimport { CipherExport } from \"./cipher.export\";\n\nexport class CipherWithIdExport extends CipherExport {\n id: string;\n collectionIds: string[];\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView | CipherDomain) {\n this.id = o.id;\n super.build(o);\n this.collectionIds = o.collectionIds;\n }\n}\n","import { Collection as CollectionDomain } from \"../domain/collection\";\nimport { EncString } from \"../domain/enc-string\";\nimport { CollectionView } from \"../view/collection.view\";\n\nexport class CollectionExport {\n static template(): CollectionExport {\n const req = new CollectionExport();\n req.organizationId = \"00000000-0000-0000-0000-000000000000\";\n req.name = \"Collection name\";\n req.externalId = null;\n return req;\n }\n\n static toView(req: CollectionExport, view = new CollectionView()) {\n view.name = req.name;\n view.externalId = req.externalId;\n if (view.organizationId == null) {\n view.organizationId = req.organizationId;\n }\n return view;\n }\n\n static toDomain(req: CollectionExport, domain = new CollectionDomain()) {\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.externalId = req.externalId;\n if (domain.organizationId == null) {\n domain.organizationId = req.organizationId;\n }\n return domain;\n }\n\n organizationId: string;\n name: string;\n externalId: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CollectionView | CollectionDomain) {\n this.organizationId = o.organizationId;\n if (o instanceof CollectionView) {\n this.name = o.name;\n } else {\n this.name = o.name?.encryptedString;\n }\n this.externalId = o.externalId;\n }\n}\n","import { Collection as CollectionDomain } from \"../domain/collection\";\nimport { CollectionView } from \"../view/collection.view\";\n\nimport { CollectionExport } from \"./collection.export\";\n\nexport class CollectionWithIdExport extends CollectionExport {\n id: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CollectionView | CollectionDomain) {\n this.id = o.id;\n super.build(o);\n }\n}\n","import { EncString } from \"../domain/enc-string\";\nimport { Folder as FolderDomain } from \"../domain/folder\";\nimport { FolderView } from \"../view/folder.view\";\n\nexport class FolderExport {\n static template(): FolderExport {\n const req = new FolderExport();\n req.name = \"Folder name\";\n return req;\n }\n\n static toView(req: FolderExport, view = new FolderView()) {\n view.name = req.name;\n return view;\n }\n\n static toDomain(req: FolderExport, domain = new FolderDomain()) {\n domain.name = req.name != null ? new EncString(req.name) : null;\n return domain;\n }\n\n name: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView | FolderDomain) {\n if (o instanceof FolderView) {\n this.name = o.name;\n } else {\n this.name = o.name?.encryptedString;\n }\n }\n}\n","import { Folder as FolderDomain } from \"../domain/folder\";\nimport { FolderView } from \"../view/folder.view\";\n\nimport { FolderExport } from \"./folder.export\";\n\nexport class FolderWithIdExport extends FolderExport {\n id: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView | FolderDomain) {\n this.id = o.id;\n super.build(o);\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipher.request\";\n\nexport class CipherCreateRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","export class AttachmentRequest {\n fileName: string;\n key: string;\n fileSize: number;\n adminRequest: boolean;\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { CardApi } from \"../api/card.api\";\nimport { FieldApi } from \"../api/field.api\";\nimport { IdentityApi } from \"../api/identity.api\";\nimport { LoginUriApi } from \"../api/login-uri.api\";\nimport { LoginApi } from \"../api/login.api\";\nimport { SecureNoteApi } from \"../api/secure-note.api\";\nimport { Cipher } from \"../domain/cipher\";\n\nimport { AttachmentRequest } from \"./attachment.request\";\nimport { PasswordHistoryRequest } from \"./password-history.request\";\n\nexport class CipherRequest {\n type: CipherType;\n folderId: string;\n organizationId: string;\n name: string;\n notes: string;\n favorite: boolean;\n login: LoginApi;\n secureNote: SecureNoteApi;\n card: CardApi;\n identity: IdentityApi;\n fields: FieldApi[];\n passwordHistory: PasswordHistoryRequest[];\n // Deprecated, remove at some point and rename attachments2 to attachments\n attachments: { [id: string]: string };\n attachments2: { [id: string]: AttachmentRequest };\n lastKnownRevisionDate: Date;\n reprompt: CipherRepromptType;\n\n constructor(cipher: Cipher) {\n this.type = cipher.type;\n this.folderId = cipher.folderId;\n this.organizationId = cipher.organizationId;\n this.name = cipher.name ? cipher.name.encryptedString : null;\n this.notes = cipher.notes ? cipher.notes.encryptedString : null;\n this.favorite = cipher.favorite;\n this.lastKnownRevisionDate = cipher.revisionDate;\n this.reprompt = cipher.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginApi();\n this.login.uris = null;\n this.login.username = cipher.login.username ? cipher.login.username.encryptedString : null;\n this.login.password = cipher.login.password ? cipher.login.password.encryptedString : null;\n this.login.passwordRevisionDate =\n cipher.login.passwordRevisionDate != null\n ? cipher.login.passwordRevisionDate.toISOString()\n : null;\n this.login.totp = cipher.login.totp ? cipher.login.totp.encryptedString : null;\n this.login.autofillOnPageLoad = cipher.login.autofillOnPageLoad;\n\n if (cipher.login.uris != null) {\n this.login.uris = cipher.login.uris.map((u) => {\n const uri = new LoginUriApi();\n uri.uri = u.uri != null ? u.uri.encryptedString : null;\n uri.match = u.match != null ? u.match : null;\n return uri;\n });\n }\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteApi();\n this.secureNote.type = cipher.secureNote.type;\n break;\n case CipherType.Card:\n this.card = new CardApi();\n this.card.cardholderName =\n cipher.card.cardholderName != null ? cipher.card.cardholderName.encryptedString : null;\n this.card.brand = cipher.card.brand != null ? cipher.card.brand.encryptedString : null;\n this.card.number = cipher.card.number != null ? cipher.card.number.encryptedString : null;\n this.card.expMonth =\n cipher.card.expMonth != null ? cipher.card.expMonth.encryptedString : null;\n this.card.expYear =\n cipher.card.expYear != null ? cipher.card.expYear.encryptedString : null;\n this.card.code = cipher.card.code != null ? cipher.card.code.encryptedString : null;\n break;\n case CipherType.Identity:\n this.identity = new IdentityApi();\n this.identity.title =\n cipher.identity.title != null ? cipher.identity.title.encryptedString : null;\n this.identity.firstName =\n cipher.identity.firstName != null ? cipher.identity.firstName.encryptedString : null;\n this.identity.middleName =\n cipher.identity.middleName != null ? cipher.identity.middleName.encryptedString : null;\n this.identity.lastName =\n cipher.identity.lastName != null ? cipher.identity.lastName.encryptedString : null;\n this.identity.address1 =\n cipher.identity.address1 != null ? cipher.identity.address1.encryptedString : null;\n this.identity.address2 =\n cipher.identity.address2 != null ? cipher.identity.address2.encryptedString : null;\n this.identity.address3 =\n cipher.identity.address3 != null ? cipher.identity.address3.encryptedString : null;\n this.identity.city =\n cipher.identity.city != null ? cipher.identity.city.encryptedString : null;\n this.identity.state =\n cipher.identity.state != null ? cipher.identity.state.encryptedString : null;\n this.identity.postalCode =\n cipher.identity.postalCode != null ? cipher.identity.postalCode.encryptedString : null;\n this.identity.country =\n cipher.identity.country != null ? cipher.identity.country.encryptedString : null;\n this.identity.company =\n cipher.identity.company != null ? cipher.identity.company.encryptedString : null;\n this.identity.email =\n cipher.identity.email != null ? cipher.identity.email.encryptedString : null;\n this.identity.phone =\n cipher.identity.phone != null ? cipher.identity.phone.encryptedString : null;\n this.identity.ssn =\n cipher.identity.ssn != null ? cipher.identity.ssn.encryptedString : null;\n this.identity.username =\n cipher.identity.username != null ? cipher.identity.username.encryptedString : null;\n this.identity.passportNumber =\n cipher.identity.passportNumber != null\n ? cipher.identity.passportNumber.encryptedString\n : null;\n this.identity.licenseNumber =\n cipher.identity.licenseNumber != null\n ? cipher.identity.licenseNumber.encryptedString\n : null;\n break;\n default:\n break;\n }\n\n if (cipher.fields != null) {\n this.fields = cipher.fields.map((f) => {\n const field = new FieldApi();\n field.type = f.type;\n field.name = f.name ? f.name.encryptedString : null;\n field.value = f.value ? f.value.encryptedString : null;\n field.linkedId = f.linkedId;\n return field;\n });\n }\n\n if (cipher.passwordHistory != null) {\n this.passwordHistory = [];\n cipher.passwordHistory.forEach((ph) => {\n this.passwordHistory.push({\n lastUsedDate: ph.lastUsedDate,\n password: ph.password ? ph.password.encryptedString : null,\n });\n });\n }\n\n if (cipher.attachments != null) {\n this.attachments = {};\n this.attachments2 = {};\n cipher.attachments.forEach((attachment) => {\n const fileName = attachment.fileName ? attachment.fileName.encryptedString : null;\n this.attachments[attachment.id] = fileName;\n const attachmentRequest = new AttachmentRequest();\n attachmentRequest.fileName = fileName;\n if (attachment.key != null) {\n attachmentRequest.key = attachment.key.encryptedString;\n }\n this.attachments2[attachment.id] = attachmentRequest;\n });\n }\n }\n}\n","import { Collection } from \"../domain/collection\";\n\nimport { SelectionReadOnlyRequest } from \"./selection-read-only.request\";\n\nexport class CollectionRequest {\n name: string;\n externalId: string;\n groups: SelectionReadOnlyRequest[] = [];\n\n constructor(collection?: Collection) {\n if (collection == null) {\n return;\n }\n this.name = collection.name ? collection.name.encryptedString : null;\n this.externalId = collection.externalId;\n }\n}\n","import { Folder } from \"../domain/folder\";\n\nexport class FolderRequest {\n name: string;\n\n constructor(folder: Folder) {\n this.name = folder.name ? folder.name.encryptedString : null;\n }\n}\n","export class KeysRequest {\n publicKey: string;\n encryptedPrivateKey: string;\n\n constructor(publicKey: string, encryptedPrivateKey: string) {\n this.publicKey = publicKey;\n this.encryptedPrivateKey = encryptedPrivateKey;\n }\n}\n","import { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\n\nimport { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class OrganizationApiKeyRequest extends SecretVerificationRequest {\n type: OrganizationApiKeyType = OrganizationApiKeyType.Default;\n}\n","import { OrganizationConnectionType } from \"../../enums/organizationConnectionType\";\n\nimport { BillingSyncConfigRequest } from \"./billing-sync-config.request\";\nimport { ScimConfigRequest } from \"./scim-config.request\";\n\n/**API request config types for OrganizationConnectionRequest */\nexport type OrganizationConnectionRequestConfigs = BillingSyncConfigRequest | ScimConfigRequest;\n\nexport class OrganizationConnectionRequest {\n constructor(\n public organizationId: string,\n public type: OrganizationConnectionType,\n public enabled: boolean,\n public config: OrganizationConnectionRequestConfigs\n ) {}\n}\n","import { KeysRequest } from \"./keys.request\";\n\nexport class OrganizationKeysRequest extends KeysRequest {\n constructor(publicKey: string, encryptedPrivateKey: string) {\n super(publicKey, encryptedPrivateKey);\n }\n}\n","import { TaxInfoUpdateRequest } from \"./tax-info-update.request\";\n\nexport class OrganizationTaxInfoUpdateRequest extends TaxInfoUpdateRequest {\n taxId: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n}\n","export class SecretVerificationRequest {\n masterPasswordHash: string;\n otp: string;\n authRequestAccessCode: string;\n}\n","export class TaxInfoUpdateRequest {\n country: string;\n postalCode: string;\n}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class TwoFactorEmailRequest extends SecretVerificationRequest {\n email: string;\n deviceIdentifier: string;\n authRequestId: string;\n}\n","export abstract class BaseResponse {\n private response: any;\n\n constructor(response: any) {\n this.response = response;\n }\n\n protected getResponseProperty(\n propertyName: string,\n response: any = null,\n exactName = false\n ): any {\n if (propertyName == null || propertyName === \"\") {\n throw new Error(\"propertyName must not be null/empty.\");\n }\n if (response == null && this.response != null) {\n response = this.response;\n }\n if (response == null) {\n return null;\n }\n if (!exactName && response[propertyName] === undefined) {\n let otherCasePropertyName: string = null;\n if (propertyName.charAt(0) === propertyName.charAt(0).toUpperCase()) {\n otherCasePropertyName = propertyName.charAt(0).toLowerCase();\n } else {\n otherCasePropertyName = propertyName.charAt(0).toUpperCase();\n }\n if (propertyName.length > 1) {\n otherCasePropertyName += propertyName.slice(1);\n }\n\n propertyName = otherCasePropertyName;\n if (response[propertyName] === undefined) {\n propertyName = propertyName.toLowerCase();\n }\n if (response[propertyName] === undefined) {\n propertyName = propertyName.toUpperCase();\n }\n }\n return response[propertyName];\n }\n}\n","import { Utils } from \"../../misc/utils\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class ErrorResponse extends BaseResponse {\n message: string;\n validationErrors: { [key: string]: string[] };\n statusCode: number;\n captchaRequired: boolean;\n captchaSiteKey: string;\n\n constructor(response: any, status: number, identityResponse?: boolean) {\n super(response);\n let errorModel = null;\n if (response != null) {\n const responseErrorModel = this.getResponseProperty(\"ErrorModel\");\n if (responseErrorModel && identityResponse) {\n errorModel = responseErrorModel;\n } else {\n errorModel = response;\n }\n }\n\n if (status === 429) {\n this.message = \"Rate limit exceeded. Try again later.\";\n } else if (errorModel) {\n this.message = this.getResponseProperty(\"Message\", errorModel);\n this.validationErrors = this.getResponseProperty(\"ValidationErrors\", errorModel);\n this.captchaSiteKey = this.validationErrors?.HCaptcha_SiteKey?.[0];\n this.captchaRequired = !Utils.isNullOrWhitespace(this.captchaSiteKey);\n }\n this.statusCode = status;\n }\n\n getSingleMessage(): string {\n if (this.validationErrors == null) {\n return this.message;\n }\n for (const key in this.validationErrors) {\n // eslint-disable-next-line\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n if (this.validationErrors[key].length) {\n return this.validationErrors[key][0];\n }\n }\n return this.message;\n }\n\n getAllMessages(): string[] {\n const messages: string[] = [];\n if (this.validationErrors == null) {\n return messages;\n }\n for (const key in this.validationErrors) {\n // eslint-disable-next-line\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n this.validationErrors[key].forEach((item: string) => {\n let prefix = \"\";\n if (key.indexOf(\"[\") > -1 && key.indexOf(\"]\") > -1) {\n const lastSep = key.lastIndexOf(\".\");\n prefix = key.substr(0, lastSep > -1 ? lastSep : key.length) + \": \";\n }\n messages.push(prefix + item);\n });\n }\n return messages;\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class PolicyResponse extends BaseResponse {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.type = this.getResponseProperty(\"Type\");\n this.data = this.getResponseProperty(\"Data\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { Attachment } from \"../domain/attachment\";\nimport { SymmetricCryptoKey } from \"../domain/symmetric-crypto-key\";\n\nimport { View } from \"./view\";\n\nexport class AttachmentView implements View {\n id: string = null;\n url: string = null;\n size: string = null;\n sizeName: string = null;\n fileName: string = null;\n key: SymmetricCryptoKey = null;\n\n constructor(a?: Attachment) {\n if (!a) {\n return;\n }\n\n this.id = a.id;\n this.url = a.url;\n this.size = a.size;\n this.sizeName = a.sizeName;\n }\n\n get fileSize(): number {\n try {\n if (this.size != null) {\n return parseInt(this.size, null);\n }\n } catch {\n // Invalid file size.\n }\n return 0;\n }\n\n static fromJSON(obj: Partial>): AttachmentView {\n const key = obj.key == null ? null : SymmetricCryptoKey.fromJSON(obj.key);\n return Object.assign(new AttachmentView(), obj, { key: key });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { CardLinkedId as LinkedId } from \"../../enums/linkedIdType\";\nimport { linkedFieldOption } from \"../../misc/linkedFieldOption.decorator\";\n\nimport { ItemView } from \"./item.view\";\n\nexport class CardView extends ItemView {\n @linkedFieldOption(LinkedId.CardholderName)\n cardholderName: string = null;\n @linkedFieldOption(LinkedId.ExpMonth, \"expirationMonth\")\n expMonth: string = null;\n @linkedFieldOption(LinkedId.ExpYear, \"expirationYear\")\n expYear: string = null;\n @linkedFieldOption(LinkedId.Code, \"securityCode\")\n code: string = null;\n\n private _brand: string = null;\n private _number: string = null;\n private _subTitle: string = null;\n\n get maskedCode(): string {\n return this.code != null ? \"•\".repeat(this.code.length) : null;\n }\n\n get maskedNumber(): string {\n return this.number != null ? \"•\".repeat(this.number.length) : null;\n }\n\n @linkedFieldOption(LinkedId.Brand)\n get brand(): string {\n return this._brand;\n }\n set brand(value: string) {\n this._brand = value;\n this._subTitle = null;\n }\n\n @linkedFieldOption(LinkedId.Number)\n get number(): string {\n return this._number;\n }\n set number(value: string) {\n this._number = value;\n this._subTitle = null;\n }\n\n get subTitle(): string {\n if (this._subTitle == null) {\n this._subTitle = this.brand;\n if (this.number != null && this.number.length >= 4) {\n if (this._subTitle != null && this._subTitle !== \"\") {\n this._subTitle += \", \";\n } else {\n this._subTitle = \"\";\n }\n\n // Show last 5 on amex, last 4 for all others\n const count =\n this.number.length >= 5 && this.number.match(new RegExp(\"^3[47]\")) != null ? 5 : 4;\n this._subTitle += \"*\" + this.number.substr(this.number.length - count);\n }\n }\n return this._subTitle;\n }\n\n get expiration(): string {\n if (!this.expMonth && !this.expYear) {\n return null;\n }\n\n let exp = this.expMonth != null ? (\"0\" + this.expMonth).slice(-2) : \"__\";\n exp += \" / \" + (this.expYear != null ? this.formatYear(this.expYear) : \"____\");\n return exp;\n }\n\n private formatYear(year: string): string {\n return year.length === 2 ? \"20\" + year : year;\n }\n\n static fromJSON(obj: Partial>): CardView {\n return Object.assign(new CardView(), obj);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { InitializerMetadata } from \"../../interfaces/initializer-metadata.interface\";\nimport { InitializerKey } from \"../../services/cryptography/initializer-key\";\nimport { LocalData } from \"../data/local.data\";\nimport { Cipher } from \"../domain/cipher\";\n\nimport { AttachmentView } from \"./attachment.view\";\nimport { CardView } from \"./card.view\";\nimport { FieldView } from \"./field.view\";\nimport { IdentityView } from \"./identity.view\";\nimport { LoginView } from \"./login.view\";\nimport { PasswordHistoryView } from \"./password-history.view\";\nimport { SecureNoteView } from \"./secure-note.view\";\nimport { View } from \"./view\";\n\nexport class CipherView implements View, InitializerMetadata {\n readonly initializerKey = InitializerKey.CipherView;\n\n id: string = null;\n organizationId: string = null;\n folderId: string = null;\n name: string = null;\n notes: string = null;\n type: CipherType = null;\n favorite = false;\n organizationUseTotp = false;\n edit = false;\n viewPassword = true;\n localData: LocalData;\n login = new LoginView();\n identity = new IdentityView();\n card = new CardView();\n secureNote = new SecureNoteView();\n attachments: AttachmentView[] = null;\n fields: FieldView[] = null;\n passwordHistory: PasswordHistoryView[] = null;\n collectionIds: string[] = null;\n revisionDate: Date = null;\n creationDate: Date = null;\n deletedDate: Date = null;\n reprompt: CipherRepromptType = CipherRepromptType.None;\n\n constructor(c?: Cipher) {\n if (!c) {\n return;\n }\n\n this.id = c.id;\n this.organizationId = c.organizationId;\n this.folderId = c.folderId;\n this.favorite = c.favorite;\n this.organizationUseTotp = c.organizationUseTotp;\n this.edit = c.edit;\n this.viewPassword = c.viewPassword;\n this.type = c.type;\n this.localData = c.localData;\n this.collectionIds = c.collectionIds;\n this.revisionDate = c.revisionDate;\n this.creationDate = c.creationDate;\n this.deletedDate = c.deletedDate;\n // Old locally stored ciphers might have reprompt == null. If so set it to None.\n this.reprompt = c.reprompt ?? CipherRepromptType.None;\n }\n\n private get item() {\n switch (this.type) {\n case CipherType.Login:\n return this.login;\n case CipherType.SecureNote:\n return this.secureNote;\n case CipherType.Card:\n return this.card;\n case CipherType.Identity:\n return this.identity;\n default:\n break;\n }\n\n return null;\n }\n\n get subTitle(): string {\n return this.item.subTitle;\n }\n\n get hasPasswordHistory(): boolean {\n return this.passwordHistory && this.passwordHistory.length > 0;\n }\n\n get hasAttachments(): boolean {\n return this.attachments && this.attachments.length > 0;\n }\n\n get hasOldAttachments(): boolean {\n if (this.hasAttachments) {\n for (let i = 0; i < this.attachments.length; i++) {\n if (this.attachments[i].key == null) {\n return true;\n }\n }\n }\n return false;\n }\n\n get hasFields(): boolean {\n return this.fields && this.fields.length > 0;\n }\n\n get passwordRevisionDisplayDate(): Date {\n if (this.type !== CipherType.Login || this.login == null) {\n return null;\n } else if (this.login.password == null || this.login.password === \"\") {\n return null;\n }\n return this.login.passwordRevisionDate;\n }\n\n get isDeleted(): boolean {\n return this.deletedDate != null;\n }\n\n get linkedFieldOptions() {\n return this.item.linkedFieldOptions;\n }\n\n linkedFieldValue(id: LinkedIdType) {\n const linkedFieldOption = this.linkedFieldOptions?.get(id);\n if (linkedFieldOption == null) {\n return null;\n }\n\n const item = this.item;\n return this.item[linkedFieldOption.propertyKey as keyof typeof item];\n }\n\n linkedFieldI18nKey(id: LinkedIdType): string {\n return this.linkedFieldOptions.get(id)?.i18nKey;\n }\n\n static fromJSON(obj: Partial>): CipherView {\n const view = new CipherView();\n const revisionDate = obj.revisionDate == null ? null : new Date(obj.revisionDate);\n const deletedDate = obj.deletedDate == null ? null : new Date(obj.deletedDate);\n const attachments = obj.attachments?.map((a: any) => AttachmentView.fromJSON(a));\n const fields = obj.fields?.map((f: any) => FieldView.fromJSON(f));\n const passwordHistory = obj.passwordHistory?.map((ph: any) => PasswordHistoryView.fromJSON(ph));\n\n Object.assign(view, obj, {\n revisionDate: revisionDate,\n deletedDate: deletedDate,\n attachments: attachments,\n fields: fields,\n passwordHistory: passwordHistory,\n });\n\n switch (obj.type) {\n case CipherType.Card:\n view.card = CardView.fromJSON(obj.card);\n break;\n case CipherType.Identity:\n view.identity = IdentityView.fromJSON(obj.identity);\n break;\n case CipherType.Login:\n view.login = LoginView.fromJSON(obj.login);\n break;\n case CipherType.SecureNote:\n view.secureNote = SecureNoteView.fromJSON(obj.secureNote);\n break;\n default:\n break;\n }\n\n return view;\n }\n}\n","import { Collection } from \"../domain/collection\";\nimport { ITreeNodeObject } from \"../domain/tree-node\";\nimport { CollectionGroupDetailsResponse } from \"../response/collection.response\";\n\nimport { View } from \"./view\";\n\nexport class CollectionView implements View, ITreeNodeObject {\n id: string = null;\n organizationId: string = null;\n name: string = null;\n externalId: string = null;\n readOnly: boolean = null;\n hidePasswords: boolean = null;\n\n constructor(c?: Collection | CollectionGroupDetailsResponse) {\n if (!c) {\n return;\n }\n\n this.id = c.id;\n this.organizationId = c.organizationId;\n this.externalId = c.externalId;\n if (c instanceof Collection) {\n this.readOnly = c.readOnly;\n this.hidePasswords = c.hidePasswords;\n }\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { Field } from \"../domain/field\";\n\nimport { View } from \"./view\";\n\nexport class FieldView implements View {\n name: string = null;\n value: string = null;\n type: FieldType = null;\n newField = false; // Marks if the field is new and hasn't been saved\n showValue = false;\n showCount = false;\n linkedId: LinkedIdType = null;\n\n constructor(f?: Field) {\n if (!f) {\n return;\n }\n\n this.type = f.type;\n this.linkedId = f.linkedId;\n }\n\n get maskedValue(): string {\n return this.value != null ? \"••••••••\" : null;\n }\n\n static fromJSON(obj: Partial>): FieldView {\n return Object.assign(new FieldView(), obj);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { Folder } from \"../domain/folder\";\nimport { ITreeNodeObject } from \"../domain/tree-node\";\n\nimport { View } from \"./view\";\n\nexport class FolderView implements View, ITreeNodeObject {\n id: string = null;\n name: string = null;\n revisionDate: Date = null;\n\n constructor(f?: Folder) {\n if (!f) {\n return;\n }\n\n this.id = f.id;\n this.revisionDate = f.revisionDate;\n }\n\n static fromJSON(obj: Jsonify) {\n const revisionDate = obj.revisionDate == null ? null : new Date(obj.revisionDate);\n return Object.assign(new FolderView(), obj, { revisionDate });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { IdentityLinkedId as LinkedId } from \"../../enums/linkedIdType\";\nimport { linkedFieldOption } from \"../../misc/linkedFieldOption.decorator\";\nimport { Utils } from \"../../misc/utils\";\n\nimport { ItemView } from \"./item.view\";\n\nexport class IdentityView extends ItemView {\n @linkedFieldOption(LinkedId.Title)\n title: string = null;\n @linkedFieldOption(LinkedId.MiddleName)\n middleName: string = null;\n @linkedFieldOption(LinkedId.Address1)\n address1: string = null;\n @linkedFieldOption(LinkedId.Address2)\n address2: string = null;\n @linkedFieldOption(LinkedId.Address3)\n address3: string = null;\n @linkedFieldOption(LinkedId.City, \"cityTown\")\n city: string = null;\n @linkedFieldOption(LinkedId.State, \"stateProvince\")\n state: string = null;\n @linkedFieldOption(LinkedId.PostalCode, \"zipPostalCode\")\n postalCode: string = null;\n @linkedFieldOption(LinkedId.Country)\n country: string = null;\n @linkedFieldOption(LinkedId.Company)\n company: string = null;\n @linkedFieldOption(LinkedId.Email)\n email: string = null;\n @linkedFieldOption(LinkedId.Phone)\n phone: string = null;\n @linkedFieldOption(LinkedId.Ssn)\n ssn: string = null;\n @linkedFieldOption(LinkedId.Username)\n username: string = null;\n @linkedFieldOption(LinkedId.PassportNumber)\n passportNumber: string = null;\n @linkedFieldOption(LinkedId.LicenseNumber)\n licenseNumber: string = null;\n\n private _firstName: string = null;\n private _lastName: string = null;\n private _subTitle: string = null;\n\n constructor() {\n super();\n }\n\n @linkedFieldOption(LinkedId.FirstName)\n get firstName(): string {\n return this._firstName;\n }\n set firstName(value: string) {\n this._firstName = value;\n this._subTitle = null;\n }\n\n @linkedFieldOption(LinkedId.LastName)\n get lastName(): string {\n return this._lastName;\n }\n set lastName(value: string) {\n this._lastName = value;\n this._subTitle = null;\n }\n\n get subTitle(): string {\n if (this._subTitle == null && (this.firstName != null || this.lastName != null)) {\n this._subTitle = \"\";\n if (this.firstName != null) {\n this._subTitle = this.firstName;\n }\n if (this.lastName != null) {\n if (this._subTitle !== \"\") {\n this._subTitle += \" \";\n }\n this._subTitle += this.lastName;\n }\n }\n\n return this._subTitle;\n }\n\n @linkedFieldOption(LinkedId.FullName)\n get fullName(): string {\n if (\n this.title != null ||\n this.firstName != null ||\n this.middleName != null ||\n this.lastName != null\n ) {\n let name = \"\";\n if (this.title != null) {\n name += this.title + \" \";\n }\n if (this.firstName != null) {\n name += this.firstName + \" \";\n }\n if (this.middleName != null) {\n name += this.middleName + \" \";\n }\n if (this.lastName != null) {\n name += this.lastName;\n }\n return name.trim();\n }\n\n return null;\n }\n\n get fullAddress(): string {\n let address = this.address1;\n if (!Utils.isNullOrWhitespace(this.address2)) {\n if (!Utils.isNullOrWhitespace(address)) {\n address += \", \";\n }\n address += this.address2;\n }\n if (!Utils.isNullOrWhitespace(this.address3)) {\n if (!Utils.isNullOrWhitespace(address)) {\n address += \", \";\n }\n address += this.address3;\n }\n return address;\n }\n\n get fullAddressPart2(): string {\n if (this.city == null && this.state == null && this.postalCode == null) {\n return null;\n }\n const city = this.city || \"-\";\n const state = this.state;\n const postalCode = this.postalCode || \"-\";\n let addressPart2 = city;\n if (!Utils.isNullOrWhitespace(state)) {\n addressPart2 += \", \" + state;\n }\n addressPart2 += \", \" + postalCode;\n return addressPart2;\n }\n\n static fromJSON(obj: Partial>): IdentityView {\n return Object.assign(new IdentityView(), obj);\n }\n}\n","import { LinkedMetadata } from \"../../misc/linkedFieldOption.decorator\";\n\nimport { View } from \"./view\";\n\nexport abstract class ItemView implements View {\n linkedFieldOptions: Map;\n abstract get subTitle(): string;\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { UriMatchType } from \"../../enums/uriMatchType\";\nimport { Utils } from \"../../misc/utils\";\nimport { LoginUri } from \"../domain/login-uri\";\n\nimport { View } from \"./view\";\n\nconst CanLaunchWhitelist = [\n \"https://\",\n \"http://\",\n \"ssh://\",\n \"ftp://\",\n \"sftp://\",\n \"irc://\",\n \"vnc://\",\n // https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-uri\n \"rdp://\", // Legacy RDP URI scheme\n \"ms-rd:\", // Preferred RDP URI scheme\n \"chrome://\",\n \"iosapp://\",\n \"androidapp://\",\n];\n\nexport class LoginUriView implements View {\n match: UriMatchType = null;\n\n private _uri: string = null;\n private _domain: string = null;\n private _hostname: string = null;\n private _host: string = null;\n private _canLaunch: boolean = null;\n\n constructor(u?: LoginUri) {\n if (!u) {\n return;\n }\n\n this.match = u.match;\n }\n\n get uri(): string {\n return this._uri;\n }\n set uri(value: string) {\n this._uri = value;\n this._domain = null;\n this._canLaunch = null;\n }\n\n get domain(): string {\n if (this._domain == null && this.uri != null) {\n this._domain = Utils.getDomain(this.uri);\n if (this._domain === \"\") {\n this._domain = null;\n }\n }\n\n return this._domain;\n }\n\n get hostname(): string {\n if (this.match === UriMatchType.RegularExpression) {\n return null;\n }\n if (this._hostname == null && this.uri != null) {\n this._hostname = Utils.getHostname(this.uri);\n if (this._hostname === \"\") {\n this._hostname = null;\n }\n }\n\n return this._hostname;\n }\n\n get host(): string {\n if (this.match === UriMatchType.RegularExpression) {\n return null;\n }\n if (this._host == null && this.uri != null) {\n this._host = Utils.getHost(this.uri);\n if (this._host === \"\") {\n this._host = null;\n }\n }\n\n return this._host;\n }\n\n get hostnameOrUri(): string {\n return this.hostname != null ? this.hostname : this.uri;\n }\n\n get hostOrUri(): string {\n return this.host != null ? this.host : this.uri;\n }\n\n get isWebsite(): boolean {\n return (\n this.uri != null &&\n (this.uri.indexOf(\"http://\") === 0 ||\n this.uri.indexOf(\"https://\") === 0 ||\n (this.uri.indexOf(\"://\") < 0 && !Utils.isNullOrWhitespace(Utils.getDomain(this.uri))))\n );\n }\n\n get canLaunch(): boolean {\n if (this._canLaunch != null) {\n return this._canLaunch;\n }\n if (this.uri != null && this.match !== UriMatchType.RegularExpression) {\n const uri = this.launchUri;\n for (let i = 0; i < CanLaunchWhitelist.length; i++) {\n if (uri.indexOf(CanLaunchWhitelist[i]) === 0) {\n this._canLaunch = true;\n return this._canLaunch;\n }\n }\n }\n this._canLaunch = false;\n return this._canLaunch;\n }\n\n get launchUri(): string {\n return this.uri.indexOf(\"://\") < 0 && !Utils.isNullOrWhitespace(Utils.getDomain(this.uri))\n ? \"http://\" + this.uri\n : this.uri;\n }\n\n static fromJSON(obj: Partial>): LoginUriView {\n return Object.assign(new LoginUriView(), obj);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { LoginLinkedId as LinkedId } from \"../../enums/linkedIdType\";\nimport { linkedFieldOption } from \"../../misc/linkedFieldOption.decorator\";\nimport { Utils } from \"../../misc/utils\";\nimport { Login } from \"../domain/login\";\n\nimport { ItemView } from \"./item.view\";\nimport { LoginUriView } from \"./login-uri.view\";\n\nexport class LoginView extends ItemView {\n @linkedFieldOption(LinkedId.Username)\n username: string = null;\n @linkedFieldOption(LinkedId.Password)\n password: string = null;\n\n passwordRevisionDate?: Date = null;\n totp: string = null;\n uris: LoginUriView[] = null;\n autofillOnPageLoad: boolean = null;\n\n constructor(l?: Login) {\n super();\n if (!l) {\n return;\n }\n\n this.passwordRevisionDate = l.passwordRevisionDate;\n this.autofillOnPageLoad = l.autofillOnPageLoad;\n }\n\n get uri(): string {\n return this.hasUris ? this.uris[0].uri : null;\n }\n\n get maskedPassword(): string {\n return this.password != null ? \"••••••••\" : null;\n }\n\n get subTitle(): string {\n return this.username;\n }\n\n get canLaunch(): boolean {\n return this.hasUris && this.uris.some((u) => u.canLaunch);\n }\n\n get hasTotp(): boolean {\n return !Utils.isNullOrWhitespace(this.totp);\n }\n\n get launchUri(): string {\n if (this.hasUris) {\n const uri = this.uris.find((u) => u.canLaunch);\n if (uri != null) {\n return uri.launchUri;\n }\n }\n return null;\n }\n\n get hasUris(): boolean {\n return this.uris != null && this.uris.length > 0;\n }\n\n static fromJSON(obj: Partial>): LoginView {\n const passwordRevisionDate =\n obj.passwordRevisionDate == null ? null : new Date(obj.passwordRevisionDate);\n const uris = obj.uris?.map((uri: any) => LoginUriView.fromJSON(uri));\n\n return Object.assign(new LoginView(), obj, {\n passwordRevisionDate: passwordRevisionDate,\n uris: uris,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { Password } from \"../domain/password\";\n\nimport { View } from \"./view\";\n\nexport class PasswordHistoryView implements View {\n password: string = null;\n lastUsedDate: Date = null;\n\n constructor(ph?: Password) {\n if (!ph) {\n return;\n }\n\n this.lastUsedDate = ph.lastUsedDate;\n }\n\n static fromJSON(obj: Partial>): PasswordHistoryView {\n const lastUsedDate = obj.lastUsedDate == null ? null : new Date(obj.lastUsedDate);\n\n return Object.assign(new PasswordHistoryView(), obj, {\n lastUsedDate: lastUsedDate,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNote } from \"../domain/secure-note\";\n\nimport { ItemView } from \"./item.view\";\n\nexport class SecureNoteView extends ItemView {\n type: SecureNoteType = null;\n\n constructor(n?: SecureNote) {\n super();\n if (!n) {\n return;\n }\n\n this.type = n.type;\n }\n\n get subTitle(): string {\n return null;\n }\n\n static fromJSON(obj: Partial>): SecureNoteView {\n return Object.assign(new SecureNoteView(), obj);\n }\n}\n","import { DeepJsonify } from \"../../types/deep-jsonify\";\nimport { SendFile } from \"../domain/send-file\";\n\nimport { View } from \"./view\";\n\nexport class SendFileView implements View {\n id: string = null;\n size: string = null;\n sizeName: string = null;\n fileName: string = null;\n\n constructor(f?: SendFile) {\n if (!f) {\n return;\n }\n\n this.id = f.id;\n this.size = f.size;\n this.sizeName = f.sizeName;\n }\n\n get fileSize(): number {\n try {\n if (this.size != null) {\n return parseInt(this.size, null);\n }\n } catch {\n // Invalid file size.\n }\n return 0;\n }\n\n static fromJSON(json: DeepJsonify) {\n if (json == null) {\n return null;\n }\n\n return Object.assign(new SendFileView(), json);\n }\n}\n","import { DeepJsonify } from \"../../types/deep-jsonify\";\nimport { SendText } from \"../domain/send-text\";\n\nimport { View } from \"./view\";\n\nexport class SendTextView implements View {\n text: string = null;\n hidden: boolean;\n\n constructor(t?: SendText) {\n if (!t) {\n return;\n }\n\n this.hidden = t.hidden;\n }\n\n get maskedText(): string {\n return this.text != null ? \"••••••••\" : null;\n }\n\n static fromJSON(json: DeepJsonify) {\n if (json == null) {\n return null;\n }\n\n return Object.assign(new SendTextView(), json);\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { Utils } from \"../../misc/utils\";\nimport { DeepJsonify } from \"../../types/deep-jsonify\";\nimport { Send } from \"../domain/send\";\nimport { SymmetricCryptoKey } from \"../domain/symmetric-crypto-key\";\n\nimport { SendFileView } from \"./send-file.view\";\nimport { SendTextView } from \"./send-text.view\";\nimport { View } from \"./view\";\n\nexport class SendView implements View {\n id: string = null;\n accessId: string = null;\n name: string = null;\n notes: string = null;\n key: ArrayBuffer;\n cryptoKey: SymmetricCryptoKey;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n maxAccessCount?: number = null;\n accessCount = 0;\n revisionDate: Date = null;\n deletionDate: Date = null;\n expirationDate: Date = null;\n password: string = null;\n disabled = false;\n hideEmail = false;\n\n constructor(s?: Send) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.accessId = s.accessId;\n this.type = s.type;\n this.maxAccessCount = s.maxAccessCount;\n this.accessCount = s.accessCount;\n this.revisionDate = s.revisionDate;\n this.deletionDate = s.deletionDate;\n this.expirationDate = s.expirationDate;\n this.disabled = s.disabled;\n this.password = s.password;\n this.hideEmail = s.hideEmail;\n }\n\n get urlB64Key(): string {\n return Utils.fromBufferToUrlB64(this.key);\n }\n\n get maxAccessCountReached(): boolean {\n if (this.maxAccessCount == null) {\n return false;\n }\n return this.accessCount >= this.maxAccessCount;\n }\n\n get expired(): boolean {\n if (this.expirationDate == null) {\n return false;\n }\n return this.expirationDate <= new Date();\n }\n\n get pendingDelete(): boolean {\n return this.deletionDate <= new Date();\n }\n\n toJSON() {\n return Utils.merge(this, {\n key: Utils.fromBufferToB64(this.key),\n });\n }\n\n static fromJSON(json: DeepJsonify) {\n if (json == null) {\n return null;\n }\n\n return Object.assign(new SendView(), json, {\n key: Utils.fromB64ToArray(json.key)?.buffer,\n cryptoKey: SymmetricCryptoKey.fromJSON(json.cryptoKey),\n text: SendTextView.fromJSON(json.text),\n file: SendFileView.fromJSON(json.file),\n revisionDate: json.revisionDate == null ? null : new Date(json.revisionDate),\n deletionDate: json.deletionDate == null ? null : new Date(json.deletionDate),\n expirationDate: json.expirationDate == null ? null : new Date(json.expirationDate),\n });\n }\n}\n","import { LogService as LogServiceAbstraction } from \"../abstractions/log.service\";\nimport { LogLevelType } from \"../enums/logLevelType\";\n\nexport class ConsoleLogService implements LogServiceAbstraction {\n protected timersMap: Map = new Map();\n\n constructor(\n protected isDev: boolean,\n protected filter: (level: LogLevelType) => boolean = null\n ) {}\n\n debug(message: string) {\n if (!this.isDev) {\n return;\n }\n this.write(LogLevelType.Debug, message);\n }\n\n info(message: string) {\n this.write(LogLevelType.Info, message);\n }\n\n warning(message: string) {\n this.write(LogLevelType.Warning, message);\n }\n\n error(message: string) {\n this.write(LogLevelType.Error, message);\n }\n\n write(level: LogLevelType, message: string) {\n if (this.filter != null && this.filter(level)) {\n return;\n }\n\n switch (level) {\n case LogLevelType.Debug:\n // eslint-disable-next-line\n console.log(message);\n break;\n case LogLevelType.Info:\n // eslint-disable-next-line\n console.log(message);\n break;\n case LogLevelType.Warning:\n // eslint-disable-next-line\n console.warn(message);\n break;\n case LogLevelType.Error:\n // eslint-disable-next-line\n console.error(message);\n break;\n default:\n break;\n }\n }\n}\n","export enum InitializerKey {\n Cipher = 0,\n CipherView = 1,\n}\n","export enum StorageLocation {\n Both = \"both\",\n Disk = \"disk\",\n Memory = \"memory\",\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { Account } from \"./account\";\nimport { GlobalState } from \"./global-state\";\n\nexport class State<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n accounts: { [userId: string]: TAccount } = {};\n globals: TGlobalState;\n activeUserId: string;\n authenticatedAccounts: string[] = [];\n accountActivity: { [userId: string]: number } = {};\n\n constructor(globals: TGlobalState) {\n this.globals = globals;\n }\n\n // TODO, make Jsonify work. It currently doesn't because Globals doesn't implement Jsonify.\n static fromJSON(\n obj: any,\n accountDeserializer: (json: Jsonify) => TAccount\n ): State {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new State(null), obj, {\n accounts: State.buildAccountMapFromJSON(obj?.accounts, accountDeserializer),\n });\n }\n\n private static buildAccountMapFromJSON(\n jsonAccounts: { [userId: string]: Jsonify },\n accountDeserializer: (json: Jsonify) => TAccount\n ) {\n if (!jsonAccounts) {\n return {};\n }\n const accounts: { [userId: string]: TAccount } = {};\n for (const userId in jsonAccounts) {\n accounts[userId] = accountDeserializer(jsonAccounts[userId]);\n }\n return accounts;\n }\n}\n","import { BehaviorSubject, concatMap } from \"rxjs\";\nimport { Jsonify } from \"type-fest\";\n\nimport { LogService } from \"../abstractions/log.service\";\nimport { StateService as StateServiceAbstraction } from \"../abstractions/state.service\";\nimport { StateMigrationService } from \"../abstractions/stateMigration.service\";\nimport {\n MemoryStorageServiceInterface,\n AbstractStorageService,\n} from \"../abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"../enums/htmlStorageLocation\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { StorageLocation } from \"../enums/storageLocation\";\nimport { ThemeType } from \"../enums/themeType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { StateFactory } from \"../factories/stateFactory\";\nimport { Utils } from \"../misc/utils\";\nimport { CipherData } from \"../models/data/cipher.data\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { EncryptedOrganizationKeyData } from \"../models/data/encrypted-organization-key.data\";\nimport { EventData } from \"../models/data/event.data\";\nimport { FolderData } from \"../models/data/folder.data\";\nimport { LocalData } from \"../models/data/local.data\";\nimport { OrganizationData } from \"../models/data/organization.data\";\nimport { PolicyData } from \"../models/data/policy.data\";\nimport { ProviderData } from \"../models/data/provider.data\";\nimport { SendData } from \"../models/data/send.data\";\nimport { ServerConfigData } from \"../models/data/server-config.data\";\nimport {\n Account,\n AccountData,\n AccountSettings,\n AccountSettingsSettings,\n} from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { EnvironmentUrls } from \"../models/domain/environment-urls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generated-password-history\";\nimport { GlobalState } from \"../models/domain/global-state\";\nimport { Policy } from \"../models/domain/policy\";\nimport { State } from \"../models/domain/state\";\nimport { StorageOptions } from \"../models/domain/storage-options\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { WindowState } from \"../models/domain/window-state\";\nimport { CipherView } from \"../models/view/cipher.view\";\nimport { CollectionView } from \"../models/view/collection.view\";\nimport { SendView } from \"../models/view/send.view\";\n\nconst keys = {\n state: \"state\",\n global: \"global\",\n authenticatedAccounts: \"authenticatedAccounts\",\n activeUserId: \"activeUserId\",\n tempAccountSettings: \"tempAccountSettings\", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication\n accountActivity: \"accountActivity\",\n};\n\nconst partialKeys = {\n autoKey: \"_masterkey_auto\",\n biometricKey: \"_masterkey_biometric\",\n masterKey: \"_masterkey\",\n};\n\nconst DDG_SHARED_KEY = \"DuckDuckGoSharedKey\";\n\nexport class StateService<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> implements StateServiceAbstraction\n{\n accounts = new BehaviorSubject<{ [userId: string]: TAccount }>({});\n protected activeAccountSubject = new BehaviorSubject(null);\n activeAccount$ = this.activeAccountSubject.asObservable();\n\n protected activeAccountUnlockedSubject = new BehaviorSubject(false);\n activeAccountUnlocked$ = this.activeAccountUnlockedSubject.asObservable();\n\n private hasBeenInited = false;\n private isRecoveredSession = false;\n\n protected accountDiskCache = new BehaviorSubject>({});\n\n // default account serializer, must be overridden by child class\n protected accountDeserializer = Account.fromJSON as (json: Jsonify) => TAccount;\n\n constructor(\n protected storageService: AbstractStorageService,\n protected secureStorageService: AbstractStorageService,\n protected memoryStorageService: AbstractStorageService & MemoryStorageServiceInterface,\n protected logService: LogService,\n protected stateMigrationService: StateMigrationService,\n protected stateFactory: StateFactory,\n protected useAccountCache: boolean = true\n ) {\n // If the account gets changed, verify the new account is unlocked\n this.activeAccountSubject\n .pipe(\n concatMap(async (userId) => {\n if (userId == null && this.activeAccountUnlockedSubject.getValue() == false) {\n return;\n } else if (userId == null) {\n this.activeAccountUnlockedSubject.next(false);\n }\n\n // FIXME: This should be refactored into AuthService or a similar service,\n // as checking for the existance of the crypto key is a low level\n // implementation detail.\n this.activeAccountUnlockedSubject.next((await this.getCryptoMasterKey()) != null);\n })\n )\n .subscribe();\n }\n\n async init(): Promise {\n if (this.hasBeenInited) {\n return;\n }\n\n if (await this.stateMigrationService.needsMigration()) {\n await this.stateMigrationService.migrate();\n }\n\n await this.state().then(async (state) => {\n if (state == null) {\n await this.setState(new State(this.createGlobals()));\n } else {\n this.isRecoveredSession = true;\n }\n });\n await this.initAccountState();\n this.hasBeenInited = true;\n }\n\n async initAccountState() {\n if (this.isRecoveredSession) {\n return;\n }\n\n await this.updateState(async (state) => {\n state.authenticatedAccounts =\n (await this.storageService.get(keys.authenticatedAccounts)) ?? [];\n for (const i in state.authenticatedAccounts) {\n if (i != null) {\n await this.syncAccountFromDisk(state.authenticatedAccounts[i]);\n }\n }\n const storedActiveUser = await this.storageService.get(keys.activeUserId);\n if (storedActiveUser != null) {\n state.activeUserId = storedActiveUser;\n }\n await this.pushAccounts();\n this.activeAccountSubject.next(state.activeUserId);\n\n return state;\n });\n }\n\n async syncAccountFromDisk(userId: string) {\n if (userId == null) {\n return;\n }\n await this.updateState(async (state) => {\n if (state.accounts == null) {\n state.accounts = {};\n }\n state.accounts[userId] = this.createAccount();\n const diskAccount = await this.getAccountFromDisk({ userId: userId });\n state.accounts[userId].profile = diskAccount.profile;\n return state;\n });\n }\n\n async addAccount(account: TAccount) {\n account = await this.setAccountEnvironmentUrls(account);\n await this.updateState(async (state) => {\n state.authenticatedAccounts.push(account.profile.userId);\n await this.storageService.save(keys.authenticatedAccounts, state.authenticatedAccounts);\n state.accounts[account.profile.userId] = account;\n return state;\n });\n await this.scaffoldNewAccountStorage(account);\n await this.setLastActive(new Date().getTime(), { userId: account.profile.userId });\n await this.setActiveUser(account.profile.userId);\n this.activeAccountSubject.next(account.profile.userId);\n }\n\n async setActiveUser(userId: string): Promise {\n this.clearDecryptedDataForActiveUser();\n await this.updateState(async (state) => {\n state.activeUserId = userId;\n await this.storageService.save(keys.activeUserId, userId);\n this.activeAccountSubject.next(state.activeUserId);\n return state;\n });\n\n await this.pushAccounts();\n }\n\n async clean(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n await this.deAuthenticateAccount(options.userId);\n if (options.userId === (await this.state())?.activeUserId) {\n await this.dynamicallySetActiveUser();\n }\n\n await this.removeAccountFromDisk(options?.userId);\n this.removeAccountFromMemory(options?.userId);\n await this.pushAccounts();\n }\n\n async getAccessToken(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.tokens?.accessToken;\n }\n\n async setAccessToken(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.tokens.accessToken = value;\n await this.saveAccount(account, options);\n }\n\n async getAddEditCipherInfo(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.data?.addEditCipherInfo;\n }\n\n async setAddEditCipherInfo(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.data.addEditCipherInfo = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getAlwaysShowDock(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.alwaysShowDock ?? false\n );\n }\n\n async setAlwaysShowDock(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.alwaysShowDock = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getApiKeyClientId(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.profile?.apiKeyClientId;\n }\n\n async setApiKeyClientId(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.profile.apiKeyClientId = value;\n await this.saveAccount(account, options);\n }\n\n async getApiKeyClientSecret(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.keys?.apiKeyClientSecret;\n }\n\n async setApiKeyClientSecret(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.keys.apiKeyClientSecret = value;\n await this.saveAccount(account, options);\n }\n\n async getAutoConfirmFingerPrints(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.autoConfirmFingerPrints ?? false\n );\n }\n\n async setAutoConfirmFingerprints(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.autoConfirmFingerPrints = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getAutoFillOnPageLoadDefault(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.autoFillOnPageLoadDefault ?? true\n );\n }\n\n async setAutoFillOnPageLoadDefault(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.autoFillOnPageLoadDefault = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getBiometricAwaitingAcceptance(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.biometricAwaitingAcceptance ?? false\n );\n }\n\n async setBiometricAwaitingAcceptance(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.biometricAwaitingAcceptance = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getBiometricFingerprintValidated(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.biometricFingerprintValidated ?? false\n );\n }\n\n async setBiometricFingerprintValidated(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.biometricFingerprintValidated = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getBiometricText(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.biometricText;\n }\n\n async setBiometricText(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.biometricText = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getBiometricUnlock(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.biometricUnlock ?? false\n );\n }\n\n async setBiometricUnlock(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.biometricUnlock = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getCanAccessPremium(options?: StorageOptions): Promise {\n if (!(await this.getIsAuthenticated(options))) {\n return false;\n }\n\n return (\n (await this.getHasPremiumPersonally(options)) ||\n (await this.getHasPremiumFromOrganization(options))\n );\n }\n\n async getHasPremiumPersonally(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n return account?.profile?.hasPremiumPersonally;\n }\n\n async setHasPremiumPersonally(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.hasPremiumPersonally = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getHasPremiumFromOrganization(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n\n if (account.profile?.hasPremiumFromOrganization) {\n return true;\n }\n\n // TODO: older server versions won't send the hasPremiumFromOrganization flag, so we're keeping the old logic\n // for backwards compatibility. It can be removed after everyone has upgraded.\n const organizations = await this.getOrganizations(options);\n if (organizations == null) {\n return false;\n }\n\n for (const id of Object.keys(organizations)) {\n const o = organizations[id];\n if (o.enabled && o.usersGetPremium && !o.isProviderUser) {\n return true;\n }\n }\n\n return false;\n }\n\n async setHasPremiumFromOrganization(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.hasPremiumFromOrganization = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getClearClipboard(options?: StorageOptions): Promise {\n return (\n (\n await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n )\n )?.settings?.clearClipboard ?? null\n );\n }\n\n async setClearClipboard(value: number, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.clearClipboard = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getCollapsedGroupings(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.collapsedGroupings;\n }\n\n async setCollapsedGroupings(value: string[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.collapsedGroupings = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getConvertAccountToKeyConnector(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.convertAccountToKeyConnector;\n }\n\n async setConvertAccountToKeyConnector(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.convertAccountToKeyConnector = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getCryptoMasterKey(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return account?.keys?.cryptoMasterKey;\n }\n\n async setCryptoMasterKey(value: SymmetricCryptoKey, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.cryptoMasterKey = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n\n if (options.userId == this.activeAccountSubject.getValue()) {\n const nextValue = value != null;\n\n // Avoid emitting if we are already unlocked\n if (this.activeAccountUnlockedSubject.getValue() != nextValue) {\n this.activeAccountUnlockedSubject.next(nextValue);\n }\n }\n }\n\n async getCryptoMasterKeyAuto(options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"auto\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return null;\n }\n return await this.secureStorageService.get(\n `${options.userId}${partialKeys.autoKey}`,\n options\n );\n }\n\n async setCryptoMasterKeyAuto(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"auto\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return;\n }\n await this.saveSecureStorageKey(partialKeys.autoKey, value, options);\n }\n\n async getCryptoMasterKeyB64(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultSecureStorageOptions());\n if (options?.userId == null) {\n return null;\n }\n return await this.secureStorageService.get(\n `${options?.userId}${partialKeys.masterKey}`,\n options\n );\n }\n\n async setCryptoMasterKeyB64(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultSecureStorageOptions());\n if (options?.userId == null) {\n return;\n }\n await this.saveSecureStorageKey(partialKeys.masterKey, value, options);\n }\n\n async getCryptoMasterKeyBiometric(options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"biometric\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return null;\n }\n return await this.secureStorageService.get(\n `${options.userId}${partialKeys.biometricKey}`,\n options\n );\n }\n\n async hasCryptoMasterKeyBiometric(options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"biometric\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return false;\n }\n return await this.secureStorageService.has(\n `${options.userId}${partialKeys.biometricKey}`,\n options\n );\n }\n\n async setCryptoMasterKeyBiometric(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"biometric\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return;\n }\n await this.saveSecureStorageKey(partialKeys.biometricKey, value, options);\n }\n\n @withPrototypeForArrayMembers(CipherView, CipherView.fromJSON)\n async getDecryptedCiphers(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.data?.ciphers?.decrypted;\n }\n\n async setDecryptedCiphers(value: CipherView[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.data.ciphers.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n @withPrototypeForArrayMembers(CollectionView)\n async getDecryptedCollections(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.data?.collections?.decrypted;\n }\n\n async setDecryptedCollections(value: CollectionView[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.data.collections.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedCryptoSymmetricKey(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return account?.keys?.cryptoSymmetricKey?.decrypted;\n }\n\n async setDecryptedCryptoSymmetricKey(\n value: SymmetricCryptoKey,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.cryptoSymmetricKey.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedOrganizationKeys(\n options?: StorageOptions\n ): Promise> {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return Utils.recordToMap(account?.keys?.organizationKeys?.decrypted);\n }\n\n async setDecryptedOrganizationKeys(\n value: Map,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.organizationKeys.decrypted = Utils.mapToRecord(value);\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n @withPrototypeForArrayMembers(GeneratedPasswordHistory)\n async getDecryptedPasswordGenerationHistory(\n options?: StorageOptions\n ): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.data?.passwordGenerationHistory?.decrypted;\n }\n\n async setDecryptedPasswordGenerationHistory(\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.data.passwordGenerationHistory.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedPinProtected(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.settings?.pinProtected?.decrypted;\n }\n\n async setDecryptedPinProtected(value: EncString, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.settings.pinProtected.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n @withPrototypeForArrayMembers(Policy)\n async getDecryptedPolicies(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.data?.policies?.decrypted;\n }\n\n async setDecryptedPolicies(value: Policy[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.data.policies.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedPrivateKey(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.keys?.privateKey.decrypted;\n }\n\n async setDecryptedPrivateKey(value: ArrayBuffer, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.privateKey.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedProviderKeys(\n options?: StorageOptions\n ): Promise> {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return Utils.recordToMap(account?.keys?.providerKeys?.decrypted);\n }\n\n async setDecryptedProviderKeys(\n value: Map,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.providerKeys.decrypted = Utils.mapToRecord(value);\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n @withPrototypeForArrayMembers(SendView)\n async getDecryptedSends(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.data?.sends?.decrypted;\n }\n\n async setDecryptedSends(value: SendView[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.data.sends.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDefaultUriMatch(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.defaultUriMatch;\n }\n\n async setDefaultUriMatch(value: UriMatchType, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.defaultUriMatch = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableAddLoginNotification(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableAddLoginNotification ?? false\n );\n }\n\n async setDisableAddLoginNotification(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableAddLoginNotification = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableAutoBiometricsPrompt(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableAutoBiometricsPrompt ?? false\n );\n }\n\n async setDisableAutoBiometricsPrompt(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableAutoBiometricsPrompt = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableAutoTotpCopy(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableAutoTotpCopy ?? false\n );\n }\n\n async setDisableAutoTotpCopy(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableAutoTotpCopy = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableBadgeCounter(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableBadgeCounter ?? false\n );\n }\n\n async setDisableBadgeCounter(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableBadgeCounter = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableChangedPasswordNotification(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableChangedPasswordNotification ?? false\n );\n }\n\n async setDisableChangedPasswordNotification(\n value: boolean,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableChangedPasswordNotification = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableContextMenuItem(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableContextMenuItem ?? false\n );\n }\n\n async setDisableContextMenuItem(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableContextMenuItem = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableFavicon(options?: StorageOptions): Promise {\n return (\n (\n await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n )\n )?.disableFavicon ?? false\n );\n }\n\n async setDisableFavicon(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.disableFavicon = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getDisableGa(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableGa ?? false\n );\n }\n\n async setDisableGa(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableGa = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDontShowCardsCurrentTab(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.dontShowCardsCurrentTab ?? false\n );\n }\n\n async setDontShowCardsCurrentTab(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.dontShowCardsCurrentTab = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDontShowIdentitiesCurrentTab(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.dontShowIdentitiesCurrentTab ?? false\n );\n }\n\n async setDontShowIdentitiesCurrentTab(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.dontShowIdentitiesCurrentTab = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDuckDuckGoSharedKey(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultSecureStorageOptions());\n if (options?.userId == null) {\n return null;\n }\n return await this.secureStorageService.get(DDG_SHARED_KEY, options);\n }\n\n async setDuckDuckGoSharedKey(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultSecureStorageOptions());\n if (options?.userId == null) {\n return;\n }\n value == null\n ? await this.secureStorageService.remove(DDG_SHARED_KEY, options)\n : await this.secureStorageService.save(DDG_SHARED_KEY, value, options);\n }\n\n async getEmail(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.profile?.email;\n }\n\n async setEmail(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.profile.email = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getEmailVerified(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.profile.emailVerified ?? false\n );\n }\n\n async setEmailVerified(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.emailVerified = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableAlwaysOnTop(options?: StorageOptions): Promise {\n const accountPreference = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.enableAlwaysOnTop;\n const globalPreference = (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.enableAlwaysOnTop;\n return accountPreference ?? globalPreference ?? false;\n }\n\n async setEnableAlwaysOnTop(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.enableAlwaysOnTop = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableAlwaysOnTop = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableAutoFillOnPageLoad(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.enableAutoFillOnPageLoad ?? false\n );\n }\n\n async setEnableAutoFillOnPageLoad(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.enableAutoFillOnPageLoad = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableBiometric(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableBiometrics ?? false\n );\n }\n\n async setEnableBiometric(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableBiometrics = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableBrowserIntegration(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableBrowserIntegration ?? false\n );\n }\n\n async setEnableBrowserIntegration(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableBrowserIntegration = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableBrowserIntegrationFingerprint(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableBrowserIntegrationFingerprint ?? false\n );\n }\n\n async setEnableBrowserIntegrationFingerprint(\n value: boolean,\n options?: StorageOptions\n ): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableBrowserIntegrationFingerprint = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableCloseToTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableCloseToTray ?? false\n );\n }\n\n async setEnableCloseToTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableCloseToTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableDuckDuckGoBrowserIntegration(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableDuckDuckGoBrowserIntegration ?? false\n );\n }\n\n async setEnableDuckDuckGoBrowserIntegration(\n value: boolean,\n options?: StorageOptions\n ): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableDuckDuckGoBrowserIntegration = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableFullWidth(options?: StorageOptions): Promise {\n return (\n (\n await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n )\n )?.settings?.enableFullWidth ?? false\n );\n }\n\n async setEnableFullWidth(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.enableFullWidth = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEnableMinimizeToTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableMinimizeToTray ?? false\n );\n }\n\n async setEnableMinimizeToTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableMinimizeToTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableStartToTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableStartToTray ?? false\n );\n }\n\n async setEnableStartToTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableStartToTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableTray ?? false\n );\n }\n\n async setEnableTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n @withPrototypeForObjectValues(CipherData)\n async getEncryptedCiphers(options?: StorageOptions): Promise<{ [id: string]: CipherData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.ciphers?.encrypted;\n }\n\n async setEncryptedCiphers(\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.ciphers.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n @withPrototypeForObjectValues(CollectionData)\n async getEncryptedCollections(\n options?: StorageOptions\n ): Promise<{ [id: string]: CollectionData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.collections?.encrypted;\n }\n\n async setEncryptedCollections(\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.collections.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getEncryptedCryptoSymmetricKey(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys.cryptoSymmetricKey.encrypted;\n }\n\n async setEncryptedCryptoSymmetricKey(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.cryptoSymmetricKey.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n @withPrototypeForObjectValues(FolderData)\n async getEncryptedFolders(options?: StorageOptions): Promise<{ [id: string]: FolderData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.folders?.encrypted;\n }\n\n async setEncryptedFolders(\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.folders.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getEncryptedOrganizationKeys(\n options?: StorageOptions\n ): Promise<{ [orgId: string]: EncryptedOrganizationKeyData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys?.organizationKeys.encrypted;\n }\n\n async setEncryptedOrganizationKeys(\n value: { [orgId: string]: EncryptedOrganizationKeyData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.organizationKeys.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n @withPrototypeForArrayMembers(GeneratedPasswordHistory)\n async getEncryptedPasswordGenerationHistory(\n options?: StorageOptions\n ): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.passwordGenerationHistory?.encrypted;\n }\n\n async setEncryptedPasswordGenerationHistory(\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.passwordGenerationHistory.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedPinProtected(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.pinProtected?.encrypted;\n }\n\n async setEncryptedPinProtected(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.pinProtected.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n @withPrototypeForObjectValues(PolicyData)\n async getEncryptedPolicies(options?: StorageOptions): Promise<{ [id: string]: PolicyData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.policies?.encrypted;\n }\n\n async setEncryptedPolicies(\n value: { [id: string]: PolicyData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.policies.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedPrivateKey(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n return account?.keys?.privateKey?.encrypted;\n }\n\n async setEncryptedPrivateKey(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.privateKey.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedProviderKeys(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys?.providerKeys?.encrypted;\n }\n\n async setEncryptedProviderKeys(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.providerKeys.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n @withPrototypeForObjectValues(SendData)\n async getEncryptedSends(options?: StorageOptions): Promise<{ [id: string]: SendData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.sends.encrypted;\n }\n\n async setEncryptedSends(\n value: { [id: string]: SendData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.sends.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getEntityId(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.profile?.entityId;\n }\n\n async setEntityId(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.profile.entityId = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEntityType(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.profile?.entityType;\n }\n\n async setEntityType(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.profile.entityType = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEnvironmentUrls(options?: StorageOptions): Promise {\n if ((await this.state())?.activeUserId == null) {\n return await this.getGlobalEnvironmentUrls(options);\n }\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n return (await this.getAccount(options))?.settings?.environmentUrls ?? new EnvironmentUrls();\n }\n\n async setEnvironmentUrls(value: EnvironmentUrls, options?: StorageOptions): Promise {\n // Global values are set on each change and the current global settings are passed to any newly authed accounts.\n // This is to allow setting environement values before an account is active, while still allowing individual accounts to have their own environments.\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.environmentUrls = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEquivalentDomains(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.equivalentDomains;\n }\n\n async setEquivalentDomains(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.equivalentDomains = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n @withPrototypeForArrayMembers(EventData)\n async getEventCollection(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.eventCollection;\n }\n\n async setEventCollection(value: EventData[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.eventCollection = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEverBeenUnlocked(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())))\n ?.profile?.everBeenUnlocked ?? false\n );\n }\n\n async setEverBeenUnlocked(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.profile.everBeenUnlocked = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getForcePasswordReset(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())))\n ?.profile?.forcePasswordReset ?? false\n );\n }\n\n async setForcePasswordReset(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.profile.forcePasswordReset = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getInstalledVersion(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.installedVersion;\n }\n\n async setInstalledVersion(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.installedVersion = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getIsAuthenticated(options?: StorageOptions): Promise {\n return (await this.getAccessToken(options)) != null && (await this.getUserId(options)) != null;\n }\n\n async getKdfIterations(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.kdfIterations;\n }\n\n async setKdfIterations(value: number, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.kdfIterations = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getKdfType(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.kdfType;\n }\n\n async setKdfType(value: KdfType, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.kdfType = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getKeyHash(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.keyHash;\n }\n\n async setKeyHash(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.keyHash = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getLastActive(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n\n const accountActivity = await this.storageService.get<{ [userId: string]: number }>(\n keys.accountActivity,\n options\n );\n\n if (accountActivity == null || Object.keys(accountActivity).length < 1) {\n return null;\n }\n\n return accountActivity[options.userId];\n }\n\n async setLastActive(value: number, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n if (options.userId == null) {\n return;\n }\n const accountActivity =\n (await this.storageService.get<{ [userId: string]: number }>(\n keys.accountActivity,\n options\n )) ?? {};\n accountActivity[options.userId] = value;\n await this.storageService.save(keys.accountActivity, accountActivity, options);\n }\n\n async getLastSync(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.profile?.lastSync;\n }\n\n async setLastSync(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.profile.lastSync = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getLocalData(options?: StorageOptions): Promise<{ [cipherId: string]: LocalData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.data?.localData;\n }\n\n async setLocalData(\n value: { [cipherId: string]: LocalData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.data.localData = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getLocale(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.locale;\n }\n\n async setLocale(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.locale = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getMainWindowSize(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.mainWindowSize;\n }\n\n async setMainWindowSize(value: number, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n globals.mainWindowSize = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getMinimizeOnCopyToClipboard(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.minimizeOnCopyToClipboard ?? false\n );\n }\n\n async setMinimizeOnCopyToClipboard(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.minimizeOnCopyToClipboard = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getNeverDomains(options?: StorageOptions): Promise<{ [id: string]: any }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.neverDomains;\n }\n\n async setNeverDomains(value: { [id: string]: any }, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.neverDomains = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getNoAutoPromptBiometrics(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.noAutoPromptBiometrics ?? false\n );\n }\n\n async setNoAutoPromptBiometrics(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.noAutoPromptBiometrics = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getNoAutoPromptBiometricsText(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.noAutoPromptBiometricsText;\n }\n\n async setNoAutoPromptBiometricsText(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.noAutoPromptBiometricsText = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getOpenAtLogin(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.openAtLogin ?? false\n );\n }\n\n async setOpenAtLogin(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.openAtLogin = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getOrganizationInvitation(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.organizationInvitation;\n }\n\n async setOrganizationInvitation(value: any, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n globals.organizationInvitation = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n /**\n * @deprecated Do not call this directly, use OrganizationService\n */\n async getOrganizations(options?: StorageOptions): Promise<{ [id: string]: OrganizationData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.organizations;\n }\n\n /**\n * @deprecated Do not call this directly, use OrganizationService\n */\n async setOrganizations(\n value: { [id: string]: OrganizationData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.organizations = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getPasswordGenerationOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.passwordGenerationOptions;\n }\n\n async setPasswordGenerationOptions(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.passwordGenerationOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getUsernameGenerationOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.usernameGenerationOptions;\n }\n\n async setUsernameGenerationOptions(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.usernameGenerationOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getGeneratorOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.generatorOptions;\n }\n\n async setGeneratorOptions(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.generatorOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getProtectedPin(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.protectedPin;\n }\n\n async setProtectedPin(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.protectedPin = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n @withPrototypeForObjectValues(ProviderData)\n async getProviders(options?: StorageOptions): Promise<{ [id: string]: ProviderData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.providers;\n }\n\n async setProviders(\n value: { [id: string]: ProviderData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.providers = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getPublicKey(options?: StorageOptions): Promise {\n const keys = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.keys;\n return keys?.publicKey;\n }\n\n async setPublicKey(value: ArrayBuffer, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.publicKey = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getRefreshToken(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.tokens?.refreshToken;\n }\n\n async setRefreshToken(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.tokens.refreshToken = value;\n await this.saveAccount(account, options);\n }\n\n async getRememberedEmail(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.rememberedEmail;\n }\n\n async setRememberedEmail(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.rememberedEmail = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getSecurityStamp(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.tokens?.securityStamp;\n }\n\n async setSecurityStamp(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.tokens.securityStamp = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getSettings(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.settings?.settings;\n }\n\n async setSettings(value: AccountSettingsSettings, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.settings.settings = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getSsoCodeVerifier(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.ssoCodeVerifier;\n }\n\n async setSsoCodeVerifier(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.ssoCodeVerifier = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getSsoOrgIdentifier(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.ssoOrganizationIdentifier;\n }\n\n async setSsoOrganizationIdentifier(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.ssoOrganizationIdentifier = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getSsoState(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.ssoState;\n }\n\n async setSsoState(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.ssoState = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getTheme(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.theme;\n }\n\n async setTheme(value: ThemeType, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.theme = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getTwoFactorToken(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.twoFactorToken;\n }\n\n async setTwoFactorToken(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.twoFactorToken = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getUserId(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.userId;\n }\n\n async getUsesKeyConnector(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.usesKeyConnector;\n }\n\n async setUsesKeyConnector(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.usesKeyConnector = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getVaultTimeout(options?: StorageOptions): Promise {\n const accountVaultTimeout = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.vaultTimeout;\n return accountVaultTimeout;\n }\n\n async setVaultTimeout(value: number, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.vaultTimeout = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getVaultTimeoutAction(options?: StorageOptions): Promise {\n const accountVaultTimeoutAction = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.vaultTimeoutAction;\n const globalVaultTimeoutAction = (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.vaultTimeoutAction;\n return accountVaultTimeoutAction ?? globalVaultTimeoutAction;\n }\n\n async setVaultTimeoutAction(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.vaultTimeoutAction = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getStateVersion(): Promise {\n return (await this.getGlobals(await this.defaultOnDiskLocalOptions())).stateVersion ?? 1;\n }\n\n async setStateVersion(value: number): Promise {\n const globals = await this.getGlobals(await this.defaultOnDiskOptions());\n globals.stateVersion = value;\n await this.saveGlobals(globals, await this.defaultOnDiskOptions());\n }\n\n async getWindow(): Promise {\n const globals = await this.getGlobals(await this.defaultOnDiskOptions());\n return globals?.window != null && Object.keys(globals.window).length > 0\n ? globals.window\n : new WindowState();\n }\n\n async setWindow(value: WindowState, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.window = value;\n return await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async setServerConfig(value: ServerConfigData, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.serverConfig = value;\n return await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getServerConfig(options: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.serverConfig;\n }\n\n protected async getGlobals(options: StorageOptions): Promise {\n let globals: TGlobalState;\n if (this.useMemory(options.storageLocation)) {\n globals = await this.getGlobalsFromMemory();\n }\n\n if (this.useDisk && globals == null) {\n globals = await this.getGlobalsFromDisk(options);\n }\n\n return globals ?? this.createGlobals();\n }\n\n protected async saveGlobals(globals: TGlobalState, options: StorageOptions) {\n return this.useMemory(options.storageLocation)\n ? this.saveGlobalsToMemory(globals)\n : await this.saveGlobalsToDisk(globals, options);\n }\n\n protected async getGlobalsFromMemory(): Promise {\n return (await this.state()).globals;\n }\n\n protected async getGlobalsFromDisk(options: StorageOptions): Promise {\n return await this.storageService.get(keys.global, options);\n }\n\n protected async saveGlobalsToMemory(globals: TGlobalState): Promise {\n await this.updateState(async (state) => {\n state.globals = globals;\n return state;\n });\n }\n\n protected async saveGlobalsToDisk(globals: TGlobalState, options: StorageOptions): Promise {\n if (options.useSecureStorage) {\n await this.secureStorageService.save(keys.global, globals, options);\n } else {\n await this.storageService.save(keys.global, globals, options);\n }\n }\n\n protected async getAccount(options: StorageOptions): Promise {\n try {\n let account: TAccount;\n if (this.useMemory(options.storageLocation)) {\n account = await this.getAccountFromMemory(options);\n }\n\n if (this.useDisk(options.storageLocation) && account == null) {\n account = await this.getAccountFromDisk(options);\n }\n\n return account;\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected async getAccountFromMemory(options: StorageOptions): Promise {\n return await this.state().then(async (state) => {\n if (state.accounts == null) {\n return null;\n }\n return state.accounts[await this.getUserIdFromMemory(options)];\n });\n }\n\n protected async getUserIdFromMemory(options: StorageOptions): Promise {\n return await this.state().then((state) => {\n return options?.userId != null\n ? state.accounts[options.userId]?.profile?.userId\n : state.activeUserId;\n });\n }\n\n protected async getAccountFromDisk(options: StorageOptions): Promise {\n if (options?.userId == null && (await this.state())?.activeUserId == null) {\n return null;\n }\n\n if (this.useAccountCache) {\n const cachedAccount = this.accountDiskCache.value[options.userId];\n if (cachedAccount != null) {\n return cachedAccount;\n }\n }\n\n const account = options?.useSecureStorage\n ? (await this.secureStorageService.get(options.userId, options)) ??\n (await this.storageService.get(\n options.userId,\n this.reconcileOptions(options, { htmlStorageLocation: HtmlStorageLocation.Local })\n ))\n : await this.storageService.get(options.userId, options);\n\n this.setDiskCache(options.userId, account);\n return account;\n }\n\n protected useMemory(storageLocation: StorageLocation) {\n return storageLocation === StorageLocation.Memory || storageLocation === StorageLocation.Both;\n }\n\n protected useDisk(storageLocation: StorageLocation) {\n return storageLocation === StorageLocation.Disk || storageLocation === StorageLocation.Both;\n }\n\n protected async saveAccount(\n account: TAccount,\n options: StorageOptions = {\n storageLocation: StorageLocation.Both,\n useSecureStorage: false,\n }\n ) {\n return this.useMemory(options.storageLocation)\n ? await this.saveAccountToMemory(account)\n : await this.saveAccountToDisk(account, options);\n }\n\n protected async saveAccountToDisk(account: TAccount, options: StorageOptions): Promise {\n const storageLocation = options.useSecureStorage\n ? this.secureStorageService\n : this.storageService;\n\n await storageLocation.save(`${options.userId}`, account, options);\n\n this.deleteDiskCache(options.userId);\n }\n\n protected async saveAccountToMemory(account: TAccount): Promise {\n if (this.getAccountFromMemory({ userId: account.profile.userId }) !== null) {\n await this.updateState((state) => {\n return new Promise((resolve) => {\n state.accounts[account.profile.userId] = account;\n resolve(state);\n });\n });\n }\n await this.pushAccounts();\n }\n\n protected async scaffoldNewAccountStorage(account: TAccount): Promise {\n // We don't want to manipulate the referenced in memory account\n const deepClone = JSON.parse(JSON.stringify(account));\n await this.scaffoldNewAccountLocalStorage(deepClone);\n await this.scaffoldNewAccountSessionStorage(deepClone);\n await this.scaffoldNewAccountMemoryStorage(deepClone);\n }\n\n // TODO: There is a tech debt item for splitting up these methods - only Web uses multiple storage locations in its storageService.\n // For now these methods exist with some redundancy to facilitate this special web requirement.\n protected async scaffoldNewAccountLocalStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskLocalOptions()\n )\n );\n // EnvironmentUrls are set before authenticating and should override whatever is stored from any previous session\n const environmentUrls = account.settings.environmentUrls;\n if (storedAccount?.settings != null) {\n account.settings = storedAccount.settings;\n } else if (await this.storageService.has(keys.tempAccountSettings)) {\n account.settings = await this.storageService.get(keys.tempAccountSettings);\n await this.storageService.remove(keys.tempAccountSettings);\n }\n account.settings.environmentUrls = environmentUrls;\n if (account.settings.vaultTimeoutAction === \"logOut\" && account.settings.vaultTimeout != null) {\n account.tokens.accessToken = null;\n account.tokens.refreshToken = null;\n account.profile.apiKeyClientId = null;\n account.keys.apiKeyClientSecret = null;\n }\n await this.saveAccount(\n account,\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskLocalOptions()\n )\n );\n }\n\n protected async scaffoldNewAccountMemoryStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskMemoryOptions()\n )\n );\n if (storedAccount?.settings != null) {\n storedAccount.settings.environmentUrls = account.settings.environmentUrls;\n account.settings = storedAccount.settings;\n }\n await this.storageService.save(\n account.profile.userId,\n account,\n await this.defaultOnDiskMemoryOptions()\n );\n await this.saveAccount(\n account,\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskMemoryOptions()\n )\n );\n }\n\n protected async scaffoldNewAccountSessionStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: account.profile.userId }, await this.defaultOnDiskOptions())\n );\n if (storedAccount?.settings != null) {\n storedAccount.settings.environmentUrls = account.settings.environmentUrls;\n account.settings = storedAccount.settings;\n }\n await this.storageService.save(\n account.profile.userId,\n account,\n await this.defaultOnDiskMemoryOptions()\n );\n await this.saveAccount(\n account,\n this.reconcileOptions({ userId: account.profile.userId }, await this.defaultOnDiskOptions())\n );\n }\n //\n\n protected async pushAccounts(): Promise {\n await this.pruneInMemoryAccounts();\n await this.state().then((state) => {\n if (state.accounts == null || Object.keys(state.accounts).length < 1) {\n this.accounts.next(null);\n return;\n }\n\n this.accounts.next(state.accounts);\n });\n }\n\n protected reconcileOptions(\n requestedOptions: StorageOptions,\n defaultOptions: StorageOptions\n ): StorageOptions {\n if (requestedOptions == null) {\n return defaultOptions;\n }\n requestedOptions.userId = requestedOptions?.userId ?? defaultOptions.userId;\n requestedOptions.storageLocation =\n requestedOptions?.storageLocation ?? defaultOptions.storageLocation;\n requestedOptions.useSecureStorage =\n requestedOptions?.useSecureStorage ?? defaultOptions.useSecureStorage;\n requestedOptions.htmlStorageLocation =\n requestedOptions?.htmlStorageLocation ?? defaultOptions.htmlStorageLocation;\n requestedOptions.keySuffix = requestedOptions?.keySuffix ?? defaultOptions.keySuffix;\n return requestedOptions;\n }\n\n protected async defaultInMemoryOptions(): Promise {\n return {\n storageLocation: StorageLocation.Memory,\n userId: (await this.state()).activeUserId,\n };\n }\n\n protected async defaultOnDiskOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Session,\n userId: (await this.state())?.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultOnDiskLocalOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Local,\n userId: (await this.state())?.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultOnDiskMemoryOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Memory,\n userId: (await this.state())?.activeUserId ?? (await this.getUserId()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultSecureStorageOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n useSecureStorage: true,\n userId: (await this.state())?.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n };\n }\n\n protected async getActiveUserIdFromStorage(): Promise {\n return await this.storageService.get(keys.activeUserId);\n }\n\n protected async removeAccountFromLocalStorage(userId: string = null): Promise {\n userId = userId ?? (await this.state())?.activeUserId;\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskLocalOptions())\n );\n await this.saveAccount(\n this.resetAccount(storedAccount),\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskLocalOptions())\n );\n }\n\n protected async removeAccountFromSessionStorage(userId: string = null): Promise {\n userId = userId ?? (await this.state())?.activeUserId;\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskOptions())\n );\n await this.saveAccount(\n this.resetAccount(storedAccount),\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskOptions())\n );\n }\n\n protected async removeAccountFromSecureStorage(userId: string = null): Promise {\n userId = userId ?? (await this.state())?.activeUserId;\n await this.setCryptoMasterKeyAuto(null, { userId: userId });\n await this.setCryptoMasterKeyBiometric(null, { userId: userId });\n await this.setCryptoMasterKeyB64(null, { userId: userId });\n }\n\n protected async removeAccountFromMemory(userId: string = null): Promise {\n await this.updateState(async (state) => {\n userId = userId ?? state.activeUserId;\n delete state.accounts[userId];\n\n this.deleteDiskCache(userId);\n\n return state;\n });\n }\n\n protected async pruneInMemoryAccounts() {\n // We preserve settings for logged out accounts, but we don't want to consider them when thinking about active account state\n for (const userId in (await this.state())?.accounts) {\n if (!(await this.getIsAuthenticated({ userId: userId }))) {\n await this.removeAccountFromMemory(userId);\n }\n }\n }\n\n // settings persist even on reset, and are not effected by this method\n protected resetAccount(account: TAccount) {\n const persistentAccountInformation = { settings: account.settings };\n return Object.assign(this.createAccount(), persistentAccountInformation);\n }\n\n protected async setAccountEnvironmentUrls(account: TAccount): Promise {\n account.settings.environmentUrls = await this.getGlobalEnvironmentUrls();\n return account;\n }\n\n protected async getGlobalEnvironmentUrls(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n return (await this.getGlobals(options)).environmentUrls ?? new EnvironmentUrls();\n }\n\n protected async clearDecryptedDataForActiveUser(): Promise {\n await this.updateState(async (state) => {\n const userId = state?.activeUserId;\n if (userId != null && state?.accounts[userId]?.data != null) {\n state.accounts[userId].data = new AccountData();\n }\n\n return state;\n });\n }\n\n protected createAccount(init: Partial = null): TAccount {\n return this.stateFactory.createAccount(init);\n }\n\n protected createGlobals(init: Partial = null): TGlobalState {\n return this.stateFactory.createGlobal(init);\n }\n\n protected async deAuthenticateAccount(userId: string): Promise {\n await this.setAccessToken(null, { userId: userId });\n await this.setLastActive(null, { userId: userId });\n await this.updateState(async (state) => {\n state.authenticatedAccounts = state.authenticatedAccounts.filter((id) => id !== userId);\n\n await this.storageService.save(keys.authenticatedAccounts, state.authenticatedAccounts);\n\n return state;\n });\n }\n\n protected async removeAccountFromDisk(userId: string) {\n await this.removeAccountFromSessionStorage(userId);\n await this.removeAccountFromLocalStorage(userId);\n await this.removeAccountFromSecureStorage(userId);\n }\n\n protected async dynamicallySetActiveUser() {\n const accounts = (await this.state())?.accounts;\n if (accounts == null || Object.keys(accounts).length < 1) {\n await this.setActiveUser(null);\n return;\n }\n for (const userId in accounts) {\n if (userId == null) {\n continue;\n }\n if (await this.getIsAuthenticated({ userId: userId })) {\n await this.setActiveUser(userId);\n break;\n }\n await this.setActiveUser(null);\n }\n }\n\n private async getTimeoutBasedStorageOptions(options?: StorageOptions): Promise {\n const timeoutAction = await this.getVaultTimeoutAction({ userId: options?.userId });\n const timeout = await this.getVaultTimeout({ userId: options?.userId });\n const defaultOptions =\n timeoutAction === \"logOut\" && timeout != null\n ? await this.defaultInMemoryOptions()\n : await this.defaultOnDiskOptions();\n return this.reconcileOptions(options, defaultOptions);\n }\n\n private async saveSecureStorageKey(key: string, value: string, options?: StorageOptions) {\n return value == null\n ? await this.secureStorageService.remove(`${options.userId}${key}`, options)\n : await this.secureStorageService.save(`${options.userId}${key}`, value, options);\n }\n\n protected async state(): Promise> {\n const state = await this.memoryStorageService.get>(keys.state, {\n deserializer: (s) => State.fromJSON(s, this.accountDeserializer),\n });\n return state;\n }\n\n private async setState(state: State): Promise {\n await this.memoryStorageService.save(keys.state, state);\n }\n\n protected async updateState(\n stateUpdater: (state: State) => Promise>\n ) {\n await this.state().then(async (state) => {\n const updatedState = await stateUpdater(state);\n if (updatedState == null) {\n throw new Error(\"Attempted to update state to null value\");\n }\n\n await this.setState(updatedState);\n });\n }\n\n private setDiskCache(key: string, value: TAccount, options?: StorageOptions) {\n if (this.useAccountCache) {\n this.accountDiskCache.value[key] = value;\n this.accountDiskCache.next(this.accountDiskCache.value);\n }\n }\n\n private deleteDiskCache(key: string) {\n if (this.useAccountCache) {\n delete this.accountDiskCache.value[key];\n this.accountDiskCache.next(this.accountDiskCache.value);\n }\n }\n}\n\nfunction withPrototypeForArrayMembers(\n memberConstructor: new (...args: any[]) => T,\n memberConverter: (input: any) => T = (i) => i\n): (\n target: any,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n) => { value: (...args: any[]) => Promise } {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod = descriptor.value;\n\n return {\n value: function (...args: any[]) {\n const originalResult: Promise = originalMethod.apply(this, args);\n\n if (!(originalResult instanceof Promise)) {\n throw new Error(\n `Error applying prototype to stored value -- result is not a promise for method ${String(\n propertyKey\n )}`\n );\n }\n\n return originalResult.then((result) => {\n if (result == null) {\n return null;\n } else if (!(result instanceof Array)) {\n throw new Error(\n `Attempted to retrieve non array type from state as an array for method ${String(\n propertyKey\n )}`\n );\n } else {\n return result.map((r) => {\n return r == null ||\n r.constructor.name === memberConstructor.prototype.constructor.name\n ? r\n : memberConverter(\n Object.create(memberConstructor.prototype, Object.getOwnPropertyDescriptors(r))\n );\n });\n }\n });\n },\n };\n };\n}\n\nfunction withPrototypeForObjectValues(\n valuesConstructor: new (...args: any[]) => T,\n valuesConverter: (input: any) => T = (i) => i\n): (\n target: any,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n) => { value: (...args: any[]) => Promise<{ [key: string]: T }> } {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod = descriptor.value;\n\n return {\n value: function (...args: any[]) {\n const originalResult: Promise<{ [key: string]: T }> = originalMethod.apply(this, args);\n\n if (!(originalResult instanceof Promise)) {\n throw new Error(\n `Error applying prototype to stored value -- result is not a promise for method ${String(\n propertyKey\n )}`\n );\n }\n\n return originalResult.then((result) => {\n if (result == null) {\n return null;\n } else {\n for (const [key, val] of Object.entries(result)) {\n result[key] =\n val == null || val.constructor.name === valuesConstructor.prototype.constructor.name\n ? valuesConverter(val)\n : valuesConverter(\n Object.create(\n valuesConstructor.prototype,\n Object.getOwnPropertyDescriptors(val)\n )\n );\n }\n\n return result as { [key: string]: T };\n }\n });\n },\n };\n };\n}\n","import { I18nService } from \"../abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport {\n TwoFactorProviderDetails,\n TwoFactorService as TwoFactorServiceAbstraction,\n} from \"../abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"../enums/twoFactorProviderType\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identity-two-factor.response\";\n\nexport const TwoFactorProviders: Partial> =\n {\n [TwoFactorProviderType.Authenticator]: {\n type: TwoFactorProviderType.Authenticator,\n name: null as string,\n description: null as string,\n priority: 1,\n sort: 1,\n premium: false,\n },\n [TwoFactorProviderType.Yubikey]: {\n type: TwoFactorProviderType.Yubikey,\n name: null as string,\n description: null as string,\n priority: 3,\n sort: 2,\n premium: true,\n },\n [TwoFactorProviderType.Duo]: {\n type: TwoFactorProviderType.Duo,\n name: \"Duo\",\n description: null as string,\n priority: 2,\n sort: 3,\n premium: true,\n },\n [TwoFactorProviderType.OrganizationDuo]: {\n type: TwoFactorProviderType.OrganizationDuo,\n name: \"Duo (Organization)\",\n description: null as string,\n priority: 10,\n sort: 4,\n premium: false,\n },\n [TwoFactorProviderType.Email]: {\n type: TwoFactorProviderType.Email,\n name: null as string,\n description: null as string,\n priority: 0,\n sort: 6,\n premium: false,\n },\n [TwoFactorProviderType.WebAuthn]: {\n type: TwoFactorProviderType.WebAuthn,\n name: null as string,\n description: null as string,\n priority: 4,\n sort: 5,\n premium: true,\n },\n };\n\nexport class TwoFactorService implements TwoFactorServiceAbstraction {\n private twoFactorProvidersData: Map;\n private selectedTwoFactorProviderType: TwoFactorProviderType = null;\n\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n init() {\n TwoFactorProviders[TwoFactorProviderType.Email].name = this.i18nService.t(\"emailTitle\");\n TwoFactorProviders[TwoFactorProviderType.Email].description = this.i18nService.t(\"emailDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Authenticator].name =\n this.i18nService.t(\"authenticatorAppTitle\");\n TwoFactorProviders[TwoFactorProviderType.Authenticator].description =\n this.i18nService.t(\"authenticatorAppDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Duo].description = this.i18nService.t(\"duoDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].name =\n \"Duo (\" + this.i18nService.t(\"organization\") + \")\";\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].description =\n this.i18nService.t(\"duoOrganizationDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].name = this.i18nService.t(\"webAuthnTitle\");\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].description =\n this.i18nService.t(\"webAuthnDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Yubikey].name = this.i18nService.t(\"yubiKeyTitle\");\n TwoFactorProviders[TwoFactorProviderType.Yubikey].description =\n this.i18nService.t(\"yubiKeyDesc\");\n }\n\n getSupportedProviders(win: Window): TwoFactorProviderDetails[] {\n const providers: any[] = [];\n if (this.twoFactorProvidersData == null) {\n return providers;\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.OrganizationDuo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.OrganizationDuo]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Authenticator)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Authenticator]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Yubikey)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Yubikey]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.Duo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Duo]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.WebAuthn) &&\n this.platformUtilsService.supportsWebAuthn(win)\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.WebAuthn]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Email)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Email]);\n }\n\n return providers;\n }\n\n getDefaultProvider(webAuthnSupported: boolean): TwoFactorProviderType {\n if (this.twoFactorProvidersData == null) {\n return null;\n }\n\n if (\n this.selectedTwoFactorProviderType != null &&\n this.twoFactorProvidersData.has(this.selectedTwoFactorProviderType)\n ) {\n return this.selectedTwoFactorProviderType;\n }\n\n let providerType: TwoFactorProviderType = null;\n let providerPriority = -1;\n this.twoFactorProvidersData.forEach((_value, type) => {\n const provider = (TwoFactorProviders as any)[type];\n if (provider != null && provider.priority > providerPriority) {\n if (type === TwoFactorProviderType.WebAuthn && !webAuthnSupported) {\n return;\n }\n\n providerType = type;\n providerPriority = provider.priority;\n }\n });\n\n return providerType;\n }\n\n setSelectedProvider(type: TwoFactorProviderType) {\n this.selectedTwoFactorProviderType = type;\n }\n\n clearSelectedProvider() {\n this.selectedTwoFactorProviderType = null;\n }\n\n setProviders(response: IdentityTwoFactorResponse) {\n this.twoFactorProvidersData = response.twoFactorProviders2;\n }\n\n clearProviders() {\n this.twoFactorProvidersData = null;\n }\n\n getProviders() {\n return this.twoFactorProvidersData;\n }\n}\n","import { Component, Input, OnChanges } from \"@angular/core\";\nimport { DomSanitizer, SafeResourceUrl } from \"@angular/platform-browser\";\n\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\ntype SizeTypes = \"large\" | \"default\" | \"small\";\n\nconst SizeClasses: Record = {\n large: [\"tw-h-16\", \"tw-w-16\"],\n default: [\"tw-h-12\", \"tw-w-12\"],\n small: [\"tw-h-7\", \"tw-w-7\"],\n};\n\n@Component({\n selector: \"bit-avatar\",\n template: ``,\n})\nexport class AvatarComponent implements OnChanges {\n @Input() border = false;\n @Input() color?: string;\n @Input() id?: string;\n @Input() text?: string;\n @Input() size: SizeTypes = \"default\";\n\n private svgCharCount = 2;\n private svgFontSize = 20;\n private svgFontWeight = 300;\n private svgSize = 48;\n src: SafeResourceUrl;\n\n constructor(public sanitizer: DomSanitizer) {}\n\n ngOnChanges() {\n this.generate();\n }\n\n get classList() {\n return [\"tw-rounded-full\"]\n .concat(SizeClasses[this.size] ?? [])\n .concat(this.border ? [\"tw-border\", \"tw-border-solid\", \"tw-border-secondary-500\"] : []);\n }\n\n private generate() {\n let chars: string = null;\n const upperCaseText = this.text?.toUpperCase() ?? \"\";\n\n chars = this.getFirstLetters(upperCaseText, this.svgCharCount);\n\n if (chars == null) {\n chars = this.unicodeSafeSubstring(upperCaseText, this.svgCharCount);\n }\n\n // If the chars contain an emoji, only show it.\n if (chars.match(Utils.regexpEmojiPresentation)) {\n chars = chars.match(Utils.regexpEmojiPresentation)[0];\n }\n\n let svg: HTMLElement;\n let hexColor = this.color;\n\n if (!Utils.isNullOrWhitespace(this.color)) {\n svg = this.createSvgElement(this.svgSize, hexColor);\n } else if (!Utils.isNullOrWhitespace(this.id)) {\n hexColor = Utils.stringToColor(this.id.toString());\n svg = this.createSvgElement(this.svgSize, hexColor);\n } else {\n hexColor = Utils.stringToColor(upperCaseText);\n svg = this.createSvgElement(this.svgSize, hexColor);\n }\n\n const charObj = this.createTextElement(chars, hexColor);\n svg.appendChild(charObj);\n const html = window.document.createElement(\"div\").appendChild(svg).outerHTML;\n const svgHtml = window.btoa(unescape(encodeURIComponent(html)));\n this.src = this.sanitizer.bypassSecurityTrustResourceUrl(\n \"data:image/svg+xml;base64,\" + svgHtml\n );\n }\n\n private getFirstLetters(data: string, count: number): string {\n const parts = data.split(\" \");\n if (parts.length > 1) {\n let text = \"\";\n for (let i = 0; i < count; i++) {\n text += this.unicodeSafeSubstring(parts[i], 1);\n }\n return text;\n }\n return null;\n }\n\n private createSvgElement(size: number, color: string): HTMLElement {\n const svgTag = window.document.createElement(\"svg\");\n svgTag.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n svgTag.setAttribute(\"pointer-events\", \"none\");\n svgTag.setAttribute(\"width\", size.toString());\n svgTag.setAttribute(\"height\", size.toString());\n svgTag.style.backgroundColor = color;\n svgTag.style.width = size + \"px\";\n svgTag.style.height = size + \"px\";\n return svgTag;\n }\n\n private createTextElement(character: string, color: string): HTMLElement {\n const textTag = window.document.createElement(\"text\");\n textTag.setAttribute(\"text-anchor\", \"middle\");\n textTag.setAttribute(\"y\", \"50%\");\n textTag.setAttribute(\"x\", \"50%\");\n textTag.setAttribute(\"dy\", \"0.35em\");\n textTag.setAttribute(\"pointer-events\", \"auto\");\n textTag.setAttribute(\"fill\", Utils.pickTextColorBasedOnBgColor(color, 135, true));\n textTag.setAttribute(\n \"font-family\",\n '\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,' +\n 'sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\"'\n );\n textTag.textContent = character;\n textTag.style.fontWeight = this.svgFontWeight.toString();\n textTag.style.fontSize = this.svgFontSize + \"px\";\n return textTag;\n }\n\n private unicodeSafeSubstring(str: string, count: number) {\n const characters = str.match(/./gu);\n return characters != null ? characters.slice(0, count).join(\"\") : \"\";\n }\n}\n","import { Directive, ElementRef, HostBinding, Input } from \"@angular/core\";\n\ntype BadgeTypes = \"primary\" | \"secondary\" | \"success\" | \"danger\" | \"warning\" | \"info\";\n\nconst styles: Record = {\n primary: [\"tw-bg-primary-500\"],\n secondary: [\"tw-bg-text-muted\"],\n success: [\"tw-bg-success-500\"],\n danger: [\"tw-bg-danger-500\"],\n warning: [\"tw-bg-warning-500\"],\n info: [\"tw-bg-info-500\"],\n};\n\nconst hoverStyles: Record = {\n primary: [\"hover:tw-bg-primary-700\"],\n secondary: [\"hover:tw-bg-secondary-700\"],\n success: [\"hover:tw-bg-success-700\"],\n danger: [\"hover:tw-bg-danger-700\"],\n warning: [\"hover:tw-bg-warning-700\"],\n info: [\"hover:tw-bg-info-700\"],\n};\n\n@Directive({\n selector: \"span[bitBadge], a[bitBadge], button[bitBadge]\",\n})\nexport class BadgeDirective {\n @HostBinding(\"class\") get classList() {\n return [\n \"tw-inline\",\n \"tw-py-0.5\",\n \"tw-px-1.5\",\n \"tw-font-bold\",\n \"tw-text-center\",\n \"!tw-text-contrast\",\n \"tw-rounded\",\n \"tw-border-none\",\n \"tw-box-border\",\n \"tw-whitespace-no-wrap\",\n \"tw-text-xs\",\n \"hover:tw-no-underline\",\n \"focus:tw-outline-none\",\n \"focus:tw-ring\",\n \"focus:tw-ring-offset-2\",\n \"focus:tw-ring-primary-700\",\n ]\n .concat(styles[this.badgeType])\n .concat(this.hasHoverEffects ? hoverStyles[this.badgeType] : []);\n }\n\n @Input() badgeType: BadgeTypes = \"primary\";\n\n private hasHoverEffects = false;\n\n constructor(el: ElementRef) {\n this.hasHoverEffects = el?.nativeElement?.nodeName != \"SPAN\";\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BadgeDirective } from \"./badge.directive\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [BadgeDirective],\n declarations: [BadgeDirective],\n})\nexport class BadgeModule {}\n","import { Input, HostBinding, Component } from \"@angular/core\";\n\nimport { ButtonLikeAbstraction } from \"../shared/button-like.abstraction\";\n\nexport type ButtonTypes = \"primary\" | \"secondary\" | \"danger\";\n\nconst buttonStyles: Record = {\n primary: [\n \"tw-border-primary-500\",\n \"tw-bg-primary-500\",\n \"!tw-text-contrast\",\n \"hover:tw-bg-primary-700\",\n \"hover:tw-border-primary-700\",\n \"disabled:tw-bg-primary-500/60\",\n \"disabled:tw-border-primary-500/60\",\n \"disabled:!tw-text-contrast/60\",\n \"disabled:tw-bg-clip-padding\",\n ],\n secondary: [\n \"tw-bg-transparent\",\n \"tw-border-text-muted\",\n \"!tw-text-muted\",\n \"hover:tw-bg-secondary-500\",\n \"hover:tw-border-secondary-500\",\n \"hover:!tw-text-contrast\",\n \"disabled:tw-bg-transparent\",\n \"disabled:tw-border-text-muted/60\",\n \"disabled:!tw-text-muted/60\",\n ],\n danger: [\n \"tw-bg-transparent\",\n \"tw-border-danger-500\",\n \"!tw-text-danger\",\n \"hover:tw-bg-danger-500\",\n \"hover:tw-border-danger-500\",\n \"hover:!tw-text-contrast\",\n \"disabled:tw-bg-transparent\",\n \"disabled:tw-border-danger-500/60\",\n \"disabled:!tw-text-danger/60\",\n ],\n};\n\n@Component({\n selector: \"button[bitButton], a[bitButton]\",\n templateUrl: \"button.component.html\",\n providers: [{ provide: ButtonLikeAbstraction, useExisting: ButtonComponent }],\n})\nexport class ButtonComponent implements ButtonLikeAbstraction {\n @HostBinding(\"class\") get classList() {\n return [\n \"tw-font-semibold\",\n \"tw-py-1.5\",\n \"tw-px-3\",\n \"tw-rounded\",\n \"tw-transition\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-text-center\",\n \"hover:tw-no-underline\",\n \"focus:tw-outline-none\",\n \"focus-visible:tw-ring\",\n \"focus-visible:tw-ring-offset-2\",\n \"focus-visible:tw-ring-primary-700\",\n \"focus-visible:tw-z-10\",\n ]\n .concat(\n this.block == null || this.block === false ? [\"tw-inline-block\"] : [\"tw-w-full\", \"tw-block\"]\n )\n .concat(buttonStyles[this.buttonType ?? \"secondary\"]);\n }\n\n @HostBinding(\"attr.disabled\")\n get disabledAttr() {\n const disabled = this.disabled != null && this.disabled !== false;\n return disabled || this.loading ? true : null;\n }\n\n @Input() buttonType: ButtonTypes = null;\n @Input() block?: boolean;\n @Input() loading = false;\n @Input() disabled = false;\n}\n","\n \n \n \n \n \n \n\n","\n \n \n {{ title }}\n \n \n\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\ntype CalloutTypes = \"success\" | \"info\" | \"warning\" | \"danger\";\n\nconst defaultIcon: Record = {\n success: \"bwi-check\",\n info: \"bwi-info-circle\",\n warning: \"bwi-exclamation-triangle\",\n danger: \"bwi-error\",\n};\n\nconst defaultI18n: Partial> = {\n warning: \"warning\",\n danger: \"error\",\n};\n\n@Component({\n selector: \"bit-callout\",\n templateUrl: \"callout.component.html\",\n})\nexport class CalloutComponent implements OnInit {\n @Input() type: CalloutTypes = \"info\";\n @Input() icon: string;\n @Input() title: string;\n @Input() useAlertRole = false;\n\n constructor(private i18nService: I18nService) {}\n\n ngOnInit() {\n this.icon ??= defaultIcon[this.type];\n if (this.title == null && defaultI18n[this.type] != null) {\n this.title = this.i18nService.t(defaultI18n[this.type]);\n }\n }\n\n get calloutClass() {\n switch (this.type) {\n case \"danger\":\n return \"tw-border-l-danger-500\";\n case \"info\":\n return \"tw-border-l-info-500\";\n case \"success\":\n return \"tw-border-l-success-500\";\n case \"warning\":\n return \"tw-border-l-warning-500\";\n }\n }\n\n get headerClass() {\n switch (this.type) {\n case \"danger\":\n return \"!tw-text-danger\";\n case \"info\":\n return \"!tw-text-info\";\n case \"success\":\n return \"!tw-text-success\";\n case \"warning\":\n return \"!tw-text-warning\";\n }\n }\n}\n","export abstract class BitFormFieldControl {\n ariaDescribedBy: string;\n id: string;\n labelForId: string;\n required: boolean;\n hasError: boolean;\n error: [string, any];\n}\n","import { Component, HostBinding, Input } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Component({\n selector: \"bit-error\",\n template: ` {{ displayError }}`,\n host: {\n class: \"tw-block tw-mt-1 tw-text-danger\",\n \"aria-live\": \"assertive\",\n },\n})\nexport class BitErrorComponent {\n @HostBinding() id = `bit-error-${nextId++}`;\n\n @Input() error: [string, any];\n\n constructor(private i18nService: I18nService) {}\n\n get displayError() {\n switch (this.error[0]) {\n case \"required\":\n return this.i18nService.t(\"inputRequired\");\n case \"email\":\n return this.i18nService.t(\"inputEmail\");\n case \"minlength\":\n return this.i18nService.t(\"inputMinLength\", this.error[1]?.requiredLength);\n case \"maxlength\":\n return this.i18nService.t(\"inputMaxLength\", this.error[1]?.requiredLength);\n default:\n // Attempt to show a custom error message.\n if (this.error[1]?.message) {\n return this.error[1]?.message;\n }\n\n return this.error;\n }\n }\n}\n","\n
\n
\n \n
\n \n
\n \n
\n
\n\n \n \n\n","import {\n AfterContentChecked,\n Component,\n ContentChild,\n ContentChildren,\n QueryList,\n ViewChild,\n} from \"@angular/core\";\n\nimport { BitErrorComponent } from \"./error.component\";\nimport { BitFormFieldControl } from \"./form-field-control\";\nimport { BitHintComponent } from \"./hint.component\";\nimport { BitPrefixDirective } from \"./prefix.directive\";\nimport { BitSuffixDirective } from \"./suffix.directive\";\n\n@Component({\n selector: \"bit-form-field\",\n templateUrl: \"./form-field.component.html\",\n host: {\n class: \"tw-mb-6 tw-block\",\n },\n})\nexport class BitFormFieldComponent implements AfterContentChecked {\n @ContentChild(BitFormFieldControl) input: BitFormFieldControl;\n @ContentChild(BitHintComponent) hint: BitHintComponent;\n\n @ViewChild(BitErrorComponent) error: BitErrorComponent;\n\n @ContentChildren(BitPrefixDirective) prefixChildren: QueryList;\n @ContentChildren(BitSuffixDirective) suffixChildren: QueryList;\n\n ngAfterContentChecked(): void {\n if (this.error) {\n this.input.ariaDescribedBy = this.error.id;\n } else if (this.hint) {\n this.input.ariaDescribedBy = this.hint.id;\n } else {\n this.input.ariaDescribedBy = undefined;\n }\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BitInputDirective } from \"./input.directive\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitInputDirective],\n exports: [BitInputDirective],\n})\nexport class InputModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { NgSelectModule } from \"@ng-select/ng-select\";\n\nimport { BadgeModule } from \"../badge\";\nimport { SharedModule } from \"../shared\";\n\nimport { MultiSelectComponent } from \"./multi-select.component\";\n\n@NgModule({\n imports: [CommonModule, FormsModule, NgSelectModule, BadgeModule, SharedModule],\n exports: [MultiSelectComponent],\n declarations: [MultiSelectComponent],\n})\nexport class MultiSelectModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { BitInputDirective } from \"../input/input.directive\";\nimport { InputModule } from \"../input/input.module\";\nimport { MultiSelectComponent } from \"../multi-select/multi-select.component\";\nimport { MultiSelectModule } from \"../multi-select/multi-select.module\";\nimport { SharedModule } from \"../shared\";\n\nimport { BitErrorSummary } from \"./error-summary.component\";\nimport { BitErrorComponent } from \"./error.component\";\nimport { BitFormFieldComponent } from \"./form-field.component\";\nimport { BitHintComponent } from \"./hint.component\";\nimport { BitLabel } from \"./label.directive\";\nimport { BitPrefixDirective } from \"./prefix.directive\";\nimport { BitSuffixDirective } from \"./suffix.directive\";\n\n@NgModule({\n imports: [SharedModule, InputModule, MultiSelectModule],\n exports: [\n BitErrorComponent,\n BitErrorSummary,\n BitFormFieldComponent,\n BitHintComponent,\n BitLabel,\n BitPrefixDirective,\n BitSuffixDirective,\n BitInputDirective,\n MultiSelectComponent,\n ],\n declarations: [\n BitErrorComponent,\n BitErrorSummary,\n BitFormFieldComponent,\n BitHintComponent,\n BitLabel,\n BitPrefixDirective,\n BitSuffixDirective,\n ],\n})\nexport class FormFieldModule {}\n","import { Directive, HostBinding } from \"@angular/core\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Directive({\n selector: \"bit-hint\",\n host: {\n class: \"tw-text-muted tw-inline-block tw-mt-1\",\n },\n})\nexport class BitHintComponent {\n @HostBinding() id = `bit-hint-${nextId++}`;\n}\n","import { Directive } from \"@angular/core\";\n\n@Directive({\n selector: \"bit-label\",\n})\nexport class BitLabel {}\n","import { Directive, HostBinding, Input } from \"@angular/core\";\n\nexport const PrefixClasses = [\n \"tw-block\",\n \"tw-px-3\",\n \"tw-py-1.5\",\n \"tw-bg-background-alt\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-border-secondary-500\",\n \"tw-text-muted\",\n \"tw-rounded-none\",\n \"disabled:!tw-text-muted\",\n \"disabled:tw-border-secondary-500\",\n];\n\n@Directive({\n selector: \"[bitPrefix]\",\n})\nexport class BitPrefixDirective {\n @HostBinding(\"class\") @Input() get classList() {\n return PrefixClasses.concat([\"tw-border-r-0\", \"first:tw-rounded-l\"]);\n }\n}\n","import { Directive, HostBinding, Input } from \"@angular/core\";\n\nimport { PrefixClasses } from \"./prefix.directive\";\n\n@Directive({\n selector: \"[bitSuffix]\",\n})\nexport class BitSuffixDirective {\n @HostBinding(\"class\") @Input() get classList() {\n return PrefixClasses.concat([\"tw-border-l-0\", \"last:tw-rounded-r\"]);\n }\n}\n","import { Component, HostBinding, Input } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\n\nimport { Icon, isIcon } from \"./icon\";\n\n@Component({\n selector: \"bit-icon\",\n template: ``,\n})\nexport class BitIconComponent {\n @Input() icon: Icon;\n\n @HostBinding()\n protected get innerHtml() {\n if (!isIcon(this.icon)) {\n return \"\";\n }\n\n const svg = this.icon.svg;\n return this.domSanitizer.bypassSecurityTrustHtml(svg);\n }\n\n constructor(private domSanitizer: DomSanitizer) {}\n}\n","class Icon {\n constructor(readonly svg: string) {}\n}\n\n// We only export the type to prohibit the creation of Icons without using\n// the `svgIcon` template literal tag.\nexport type { Icon };\n\nexport function isIcon(icon: unknown): icon is Icon {\n return icon instanceof Icon;\n}\n\nexport class DynamicContentNotAllowedError extends Error {\n constructor() {\n super(\"Dynamic content in icons is not allowed due to risk of user-injected XSS.\");\n }\n}\n\nexport function svgIcon(strings: TemplateStringsArray, ...values: unknown[]): Icon {\n if (values.length > 0) {\n throw new DynamicContentNotAllowedError();\n }\n\n return new Icon(strings[0]);\n}\n","import { Directive, HostBinding, Input, Optional, Self } from \"@angular/core\";\nimport { NgControl, Validators } from \"@angular/forms\";\n\nimport { BitFormFieldControl } from \"../form-field/form-field-control\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Directive({\n selector: \"input[bitInput], select[bitInput], textarea[bitInput]\",\n providers: [{ provide: BitFormFieldControl, useExisting: BitInputDirective }],\n})\nexport class BitInputDirective implements BitFormFieldControl {\n @HostBinding(\"class\") @Input() get classList() {\n return [\n \"tw-block\",\n \"tw-w-full\",\n \"tw-px-3\",\n \"tw-py-1.5\",\n \"tw-bg-background-alt\",\n \"tw-border\",\n \"tw-border-solid\",\n this.hasError ? \"tw-border-danger-500\" : \"tw-border-secondary-500\",\n \"tw-text-main\",\n \"tw-placeholder-text-muted\",\n // Rounded\n \"tw-rounded-none\",\n \"first:tw-rounded-l\",\n \"last:tw-rounded-r\",\n // Focus\n \"focus:tw-outline-none\",\n \"focus:tw-border-primary-700\",\n \"focus:tw-ring-1\",\n \"focus:tw-ring-primary-700\",\n \"focus:tw-z-10\",\n \"disabled:tw-bg-secondary-100\",\n ].filter((s) => s != \"\");\n }\n\n @HostBinding() @Input() id = `bit-input-${nextId++}`;\n\n @HostBinding(\"attr.aria-describedby\") ariaDescribedBy: string;\n\n get labelForId(): string {\n return this.id;\n }\n\n @HostBinding(\"attr.aria-invalid\") get ariaInvalid() {\n return this.hasError ? true : undefined;\n }\n\n @HostBinding()\n @Input()\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value: any) {\n this._required = value != null && value !== false;\n }\n private _required: boolean;\n\n @Input() hasPrefix = false;\n @Input() hasSuffix = false;\n\n get hasError() {\n return this.ngControl?.status === \"INVALID\" && this.ngControl?.touched;\n }\n\n get error(): [string, any] {\n const key = Object.keys(this.ngControl.errors)[0];\n return [key, this.ngControl.errors[key]];\n }\n constructor(@Optional() @Self() private ngControl: NgControl) {}\n}\n","export abstract class ButtonLikeAbstraction {\n loading: boolean;\n disabled: boolean;\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\n/**\n * Temporarily duplicate this pipe\n */\n@Pipe({\n name: \"i18n\",\n})\nexport class I18nPipe implements PipeTransform {\n constructor(private i18nService: I18nService) {}\n\n transform(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.i18nService.t(id, p1, p2, p3);\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { I18nPipe } from \"./i18n.pipe\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [I18nPipe],\n exports: [CommonModule, I18nPipe],\n})\nexport class SharedModule {}\n","import { HostBinding, Directive } from \"@angular/core\";\n\n@Directive({\n selector: \"th[bitCell], td[bitCell]\",\n})\nexport class CellDirective {\n @HostBinding(\"class\") get classList() {\n return [\"tw-p-3\"];\n }\n}\n","import { Directive, HostBinding, Input } from \"@angular/core\";\n\n@Directive({\n selector: \"tr[bitRow]\",\n})\nexport class RowDirective {\n @Input() alignContent: \"top\" | \"middle\" | \"bottom\" | \"baseline\" = \"baseline\";\n\n get alignmentClass(): string {\n switch (this.alignContent) {\n case \"top\":\n return \"tw-align-top\";\n case \"middle\":\n return \"tw-align-middle\";\n case \"bottom\":\n return \"tw-align-bottom\";\n default:\n return \"tw-align-baseline\";\n }\n }\n\n @HostBinding(\"class\") get classList() {\n return [\n \"tw-border-0\",\n \"tw-border-b\",\n \"tw-border-secondary-300\",\n \"tw-border-solid\",\n \"hover:tw-bg-background-alt\",\n \"last:tw-border-0\",\n this.alignmentClass,\n ];\n }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"bit-table\",\n templateUrl: \"./table.component.html\",\n})\nexport class TableComponent {}\n","\n \n \n \n \n \n \n
\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + (chunkId === 768 ? \"encrypt-worker\" : chunkId) + \".\" + {\"182\":\"ef118a836aae4f655003\",\"271\":\"39ae6d0ff7e8a6c5992a\",\"477\":\"e882d21429c04bcbe47c\",\"584\":\"238f402a694e2a33f299\",\"612\":\"00cdd7af93366f72f73b\",\"754\":\"1655b970c4e9dab5fc90\",\"768\":\"fec52db855ae6d6aca09\",\"977\":\"30cfdbe38986b8ddb470\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl + \"../\";","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t148: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_bitwarden_web_vault\"] = self[\"webpackChunk_bitwarden_web_vault\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [734], () => (__webpack_require__(10924)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","RegisterFormModule","EventView","constructor","data","this","message","humanReadableMessage","appIcon","appName","userId","userName","userEmail","date","ip","type","installationId","systemUser","BaseEventsComponent","eventService","i18nService","exportService","platformUtilsService","logService","fileDownloadService","loading","loaded","dirtyDates","defaultDates","getDefaultDateFilters","start","end","exportEvents","appApiPromiseUnfulfilled","dates","parseDates","exportPromise","export","e","error","loadEvents","clearExisting","events","promise","loadAndParseEvents","continuationToken","refreshPromise","morePromise","result","length","concat","startDate","endDate","response","requestEvents","Promise","all","map","r","actingUserId","eventInfo","getEventInfo","user","getUserName","name","t","email","ipAddress","formatDateFilters","showToast","getEventExport","fileName","getFileName","exportFileName","download","blobData","blobOptions","NotPremiumDirective","templateRef","viewContainer","stateService","ngOnInit","getCanAccessPremium","clear","createEmbeddedView","premiumRequired","PremiumBadgeComponent","messagingService","send","EventService","policyService","policies$","subscribe","policies","d","Date","getFullYear","getMonth","getDate","setDate","toDateTimeLocalString","filterStart","filterEnd","isNaN","getTime","Error","toISOString","ev","options","EventOptions","appInfo","getAppInfo","deviceType","getEventMessage","msg","humanReadableMsg","formatCipherId","getShortId","cipherId","formatCollectionId","collectionId","formatGroupId","groupId","formatOrgUserId","organizationUserId","formatPolicyId","policy","filter","p","id","policyId","p1","formatProviderUserId","providerUserId","formatProviderOrganizationId","providerOrganizationId","shortId","organizationId","cipherInfo","a","makeAnchor","setAttribute","outerHTML","providerId","document","createElement","title","innerHTML","substring","pad","getHours","getMinutes","num","norm","Math","floor","abs","PolicyListService","addPolicies","push","getPolicies","RouterService","router","activatedRoute","titleService","previousUrl","undefined","currentUrl","url","pipe","event","child","firstChild","titleId","snapshot","rawTitle","updateUrl","doNotSaveUrl","newTitle","setTitle","setPreviousUrl","getPreviousUrl","AccountSettings","vaultTimeout","Account","init","super","settings","Object","assign","StateService","storageService","secureStorageService","memoryStorageService","stateMigrationService","stateFactory","useAccountCache","addAccount","account","getRememberEmail","getGlobals","reconcileOptions","defaultOnDiskLocalOptions","rememberEmail","setRememberEmail","value","globals","saveGlobals","getEncryptedCiphers","defaultInMemoryOptions","setEncryptedCiphers","getEncryptedCollections","setEncryptedCollections","getEncryptedFolders","setEncryptedFolders","getEncryptedSends","setEncryptedSends","getLastSync","setLastSync","OrganizationCreateModule","changedBusinessOwned","OrganizationInformationComponent","nameOnly","createOrganization","isProvider","acceptingSponsorship","OrganizationPermissionsGuard","organizationService","syncService","canActivate","route","state","fullSync","org","get","params","createUrlTree","isOwner","enabled","permissionsCallback","organizationPermissions","root","queryParamMap","queryParams","itemId","OrganizationRedirectGuard","customRedirect","autoRedirectCallback","redirectPath","PolicyRequest","BasePolicy","display","organization","BasePolicyComponent","setValue","policyResponse","loadData","patchValue","buildRequestData","buildRequest","policiesEnabledMap","request","resolve","PoliciesModule","DisableSendPolicy","description","component","DisableSendPolicyComponent","MasterPasswordPolicy","MasterPasswordPolicyComponent","formBuilder","group","minComplexity","minLength","requireUpper","requireLower","requireNumbers","requireSpecial","showKeyConnectorInfo","passwordScores","keyConnectorEnabled","PasswordGeneratorPolicy","PasswordGeneratorPolicyComponent","defaultType","useUpper","useLower","useNumbers","useSpecial","minNumbers","minSpecial","minNumberWords","capitalize","includeNumber","defaultTypes","PersonalOwnershipPolicy","PersonalOwnershipPolicyComponent","RequireSsoPolicy","RequireSsoPolicyComponent","useSso","singleOrgEnabled","ResetPasswordPolicy","ResetPasswordPolicyComponent","useResetPassword","autoEnrollEnabled","SendOptionsPolicy","SendOptionsPolicyComponent","disableHideEmail","SingleOrgPolicy","SingleOrgPolicyComponent","TwoFactorAuthenticationPolicy","TwoFactorAuthenticationPolicyComponent","PolicyEditComponent","policyApiService","componentFactoryResolver","cdr","Map","onSavedPolicy","policyType","ngAfterViewInit","load","factory","resolveComponentFactory","policyComponent","policyFormRef","createComponent","instance","detectChanges","getPolicy","statusCode","Enabled","submit","formPromise","putPolicy","emit","edit","PoliciesComponent","modalService","policyListService","parent","first","qParams","policyIdFromEvents","orgPolicy","orgPolicies","i","forEach","op","set","modal","openViewRef","editModalRef","comp","close","OrganizationUpdateRequest","CountBasedLocalizationKey","singular","plural","getKey","count","OrganizationContentSummaryItem","localizationKeyOptions","localizationKey","OrganizationContentSummary","totalItemCount","itemCountByType","DeleteOrganizationComponent","userVerificationService","cipherService","organizationApiService","deleteOrganizationRequestType","organizationContentSummary","onSuccess","masterPassword","then","delete","organizationName","buildOrganizationContentSummary","organizationItems","getAllFromApiForOrganization","item","deletedDate","cipherType","getOrganizationItemCountByType","getOrganizationItemLocalizationKeysByType","items","viewApiKey","rotateApiKey","AccountComponent","cryptoService","selfHosted","canManageBilling","canUseApi","isSelfHost","useApi","businessName","billingEmail","identifier","hasPublicAndPrivateKeys","orgShareKey","getOrgKey","orgKeys","makeKeyPair","keys","encryptedString","save","deleteOrganization","deleteModalRef","navigate","purgeVault","purgeModalRef","apiKeyModalRef","keyType","entityId","postKey","getOrCreateApiKey","bind","scope","grantType","apiKeyTitle","apiKeyWarning","apiKeyDescription","rotateApiKeyModalRef","isRotation","recoveryCode","manage","TwoFactorSetupComponent","apiService","duoComp","openModal","duoModalRef","onUpdated","updateStatus","getTwoFactorProviders","getTwoFactorOrganizationProviders","filterProvider","routes","path","children","pathMatch","canManagePolicies","canAccessImportExport","canManageSso","canManageScim","loadChildren","m","OrganizationImportExportModule","OrganizationSettingsRoutingModule","OrganizationSettingsModule","SettingsComponent","destroy$","ngOnDestroy","next","complete","cipher","copy","generatePassword","checkPassword","upgradeOrganization","removeUri","launch","loginUriMatchChanged","addUri","togglePassword","toggleCardNumber","toggleCardCode","organizationChanged","viewHistory","repromptChanged","toggleFavorite","AddEditComponent","folderService","auditService","collectionService","totpService","passwordGenerationService","passwordRepromptService","originalCipher","allowOwnershipAssignment","ownershipOptions","allowPersonal","cloneMode","canEditAnyCollection","editMode","loadCollections","collections","loadCipher","getCipherAdmin","encryptCipher","encrypt","saveCipher","putCipherAdmin","postCipherAdmin","deleteCipher","isDeleted","deleteCipherAdmin","putDeleteCipherAdmin","HasPremiumGuard","routerState","userHasPremium","BreachReportComponent","breachedAccounts","username","getEmail","toLowerCase","checkedUsername","ReportBreach","ReportExposedPasswords","ReportInactiveTwoFactor","ReportReusedPasswords","ReportUnsecuredWebsites","ReportWeakPasswords","ReportType","reports","ExposedPasswords","icon","ReusedPasswords","WeakPasswords","UnsecuredWebsites","Inactive2fa","DataBreach","ReportsSharedModule","ReportsHomeComponent","reportRequiresPremium","variant","ReportsLayoutComponent","homepage","subscription","unsubscribe","ReportsRoutingModule","ReportsModule","CipherReportComponent","requiresPaid","hasLoaded","ciphers","setCiphers","selectCipher","repromptCipher","childComponent","cipherAddEditModalRef","onSavedCipher","onDeletedCipher","onRestoredCipher","checkAccess","useTotp","c","reprompt","showPasswordPrompt","ExposedPasswordsReportComponent","exposedPasswordMap","allCiphers","getAllCiphers","exposedPasswordCiphers","promises","login","password","passwordLeaked","exposedCount","getAllDecrypted","canManageCipher","InactiveTwoFactorReportComponent","services","cipherDocs","load2fa","size","inactive2faCiphers","docs","totp","hasUris","uris","u","uri","replace","domain","has","fetch","Request","status","responseJson","json","service","serviceData","documentation","additionalDomain","ReusedPasswordsReportComponent","ciphersWithPasswords","passwordUseMap","reusedPasswordCiphers","UnsecuredWebsitesReportComponent","unsecuredCiphers","some","indexOf","WeakPasswordsReportComponent","passwordStrengthMap","passwordStrengthCache","weakPasswordCiphers","isUserNameNotEmpty","trim","getCacheKey","hasUserName","cacheKey","userInput","atPosition","substr","split","passwordStrength","score","scoreKey","sort","b","ReportVariant","ReportCardComponent","disabled","requiresPremium","ReportListComponent","StorageRequest","AdjustStorageComponent","storageGbPrice","add","interval","onAdjusted","onCanceled","storageAdjustment","storageGbAdjustment","paymentFailed","action","postAccountStorage","updateStorage","paymentIntentClientSecret","paymentComponent","handleStripeCardPayment","timeout","relativeTo","toString","cancel","adjustedStorageTotal","ApiKeyComponent","clientSecret","apiKey","clientId","TransactionType","BillingHistoryComponent","paymentMethodType","transactionType","invoices","billing","transactions","paymentMethodClasses","OrganizationCreateRequest","OrganizationUpgradeRequest","ProviderOrganizationCreateRequest","clientOwnerEmail","organizationCreateRequest","changedProduct","changedCountry","changedOwnedBusiness","OrganizationPlansComponent","showFree","showCancel","product","plan","onTrialBillingSuccess","productTypes","singleOrgPolicyBlock","isInTrialFlow","discount","formGroup","businessOwned","premiumAccessAddon","additionalStorage","additionalSeats","Subject","plans","getPlans","controls","addValidators","policyAppliesToActiveUser$","takeUntil","policyAppliesToActiveUser","selectedPlan","find","selectedPlanInterval","isAnnual","selectableProducts","validPlans","canBeUsedByBusiness","legacyYear","Free","familyPlan","basePrice","selectablePlans","additionalStoragePriceMonthly","additionalStoragePricePerGb","seatPriceMonthly","seatPrice","additionalStorageTotal","hasAdditionalStorageOption","seatTotal","hasAdditionalSeatsOption","subtotal","subTotal","hasPremiumAccessOption","premiumAccessOptionPrice","freeTrial","trialPeriodDays","taxCharges","taxComponent","taxRate","total","paymentDesc","baseSeats","hideBank","taxInfo","country","method","changeMethod","doSubmit","orgId","shareKey","makeShareKey","key","collectionCt","createSelfHosted","createCloudHosted","updateOrganization","refreshIdentityToken","subLabelText","billingSubLabelText","additionalStorageGb","planType","billingAddressCountry","billingAddressPostalCode","postalCode","upgrade","success","orgKey","collectionName","tokenResult","createPaymentToken","paymentToken","includeTaxId","taxIdNumber","taxId","billingAddressLine1","line1","billingAddressLine2","line2","billingAddressCity","city","billingAddressState","providerRequest","providerKey","getProviderKey","postProviderCreateOrganization","create","files","getElementById","fd","FormData","append","createLicense","updateKeys","price","text","VerifyBankRequest","BitPayInvoiceRequest","AddCreditComponent","showOptions","onAdded","ppLoading","payPalConfig","ppButtonFormAction","ppButtonBusinessId","creditAmount","ppButtonCustomField","subject","getUserId","returnUrl","window","location","href","ppButtonFormRef","nativeElement","req","credit","amount","creditAmountNumber","postBitPayInvoice","bitPayUrl","launchUri","formatAmount","floatAmount","parseFloat","round","toFixed","PaymentRequest","AdjustPaymentComponent","taxInfoComponent","postAccountPayment","updatePayment","changeCountry","addCredit","closeAddCredit","verifyBank","changePayment","closePayment","submitTaxInfo","PaymentMethodComponent","firstLoaded","showAdjustPayment","showAddCredit","verifyBankForm","amount1","amount2","forOrganization","billingPromise","getBilling","orgPromise","getUserBillingPayment","paymentSourceInApp","showDialog","verifyBankPromise","taxFormPromise","isCreditBalance","balance","creditOrBalance","paymentSource","headerClass","paymentSourceClasses","bank","PaymentComponent","themingService","showMethods","hidePaypal","hideCredit","trialFlow","routing_number","account_number","account_holder_name","account_holder_type","currency","btInstance","stripe","stripeElements","stripeCardNumberElement","stripeCardExpiryElement","stripeCardCvcElement","stripeScript","src","async","onload","Stripe","elements","setStripeElement","btScript","StripeElementStyle","base","color","fontFamily","fontSize","fontSmoothing","invalid","StripeElementClasses","focus","empty","subscribeToTheme","head","appendChild","removeChild","setTimeout","Array","from","querySelectorAll","el","body","btStylesheet","querySelector","braintree","dropin","authorization","container","paymentOptionPriority","paypal","flow","buttonStyle","label","shape","tagline","createErr","console","reject","requestPaymentMethod","payload","nonce","catch","err","postSetupPayment","handleCardSetup","setupIntent","payment_method","createToken","token","successCallback","handleCardPayment","paymentIntent","style","classes","placeholder","mount","theme$","getComputedStyle","documentElement","getPropertyValue","borderColor","PurgeVaultComponent","postPurgeCiphers","TaxInfoComponent","onCountryChanged","pristine","getTaxInfo","taxRates","getTaxRates","localTaxRate","x","rate","getTaxInfoRequest","hasChanged","updateTaxInfo","putTaxInfo","hasOwnProperty","TwoFactorProviderRequest","TwoFactorBaseComponent","twoFactorProviderType","authed","auth","authResponse","hashedSecret","secret","verificationType","enable","enableFunction","disable","buildRequestModel","putTwoFactorOrganizationDisable","putTwoFactorDisable","requestClass","UpdateTwoFactorDuoRequest","TwoFactorDuoComponent","processResponse","integrationKey","ikey","secretKey","skey","host","putTwoFactorOrganizationDuo","putTwoFactorDuo","UpdateTwoFactorAuthenticatorRequest","TwoFactorAuthenticatorComponent","qrScript","putTwoFactorAuthenticator","QRious","element","encodeURIComponent","UpdateTwoFactorEmailRequest","sendEmail","TwoFactorEmailComponent","emailPromise","postTwoFactorEmailSetup","sentEmail","putTwoFactorEmail","print","TwoFactorRecoveryComponent","w","open","write","code","onafterprint","formatString","s","toUpperCase","UpdateTwoFactorWebAuthnDeleteRequest","UpdateTwoFactorWebAuthnRequest","remove","readKey","TwoFactorWebAuthnComponent","ngZone","keyIdAvailable","keysConfiguredCount","webAuthnResponse","deviceResponse","putTwoFactorWebAuthn","removePromise","deleteTwoFactorWebAuthn","challengePromise","getTwoFactorWebAuthnChallenge","challenge","readDevice","webAuthnChallenge","log","resetWebAuthn","navigator","credentials","publicKey","run","webAuthnListening","webAuthnError","listening","k","configured","migrated","UpdateTwoFactorYubioOtpRequest","TwoFactorYubiKeyComponent","nfc","key1","key2","key3","key4","key5","putTwoFactorYubiKey","disablePromise","existingKey","padRight","str","character","max","providers","showPolicyWarning","canAccessPremium","premium","twoFactorAuthPolicyAppliesToActiveUser","p2","evaluatePolicies","authenticatorModalRef","yubikeyModalRef","emailModalRef","webAuthnModalRef","recoveryModalRef","ref","TwoFactorVerifyComponent","onAuthed","masterPasswordHash","otp","apiCall","getTwoFactorRecover","getTwoFactorOrganizationDuo","getTwoFactorDuo","getTwoFactorEmail","getTwoFactorWebAuthn","getTwoFactorAuthenticator","getTwoFactorYubiKey","UpdateLicenseComponent","updatePromise","postAccountLicense","updateLicense","LooseComponentsModule","ButtonModule","CalloutModule","MenuModule","IconModule","TabsModule","TableModule","AvatarModule","IconButtonModule","AsyncActionsModule","SharedModule","addFieldType","linkedFieldOptions","fieldType","eventType","addFieldTypeOptions","addFieldLinkedTypeOption","ngOnChanges","changes","thisCipherType","setLinkedFieldOptions","firstChange","resetCipherLinkedFields","addField","fields","f","newField","linkedId","removeField","field","splice","toggleFieldValue","showValue","collect","trackByFunction","index","drop","previousIndex","currentIndex","linkedFieldOption","i18nKey","TrueFalseValueDirective","elementRef","renderer","trueValue","falseValue","propagateChange","_","onHostChange","target","checked","writeValue","obj","setProperty","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","provide","useExisting","multi","AddEditCustomFieldsComponent","folderId","onCancelled","onEditAttachments","onShareCipher","onEditCollections","onGeneratePassword","onGenerateUsername","showPassword","showCardNumber","showCardCode","currentDate","canUseReprompt","typeOptions","cardBrandOptions","cardExpMonthOptions","identityTitleOptions","uriMatchOptions","autofillOnPageLoadOptions","concatMap","personalOwnershipPolicyAppliesToActiveUser","myEmail","getAll","o","writeableCollections","addEditCipherInfo","getAddEditCipherInfo","collectionIds","setAddEditCipherInfo","decrypt","card","identity","secureNote","folders$","folderViews$","previousCipherId","restore","getCardExpMonthDisplay","expMonth","attachments","share","editCollections","deletePromise","restorePromise","restoreCipher","generateUsername","toggleUriOptions","match","organizationUseTotp","checkPasswordPromise","matches","readOnly","createWithServer","updateWithServer","deleteWithServer","softDeleteWithServer","restoreWithServer","showRevisionDate","hasPasswordHistory","viewingPasswordHistory","viewOnly","passwordRevisionDisplayDate","cleanUp","totpUpdateCode","getTimeInterval","totpTick","totpInterval","setInterval","favorite","canLaunch","typeI18nKey","aType","copyToClipboard","confirmed","getOptions","showGetPremium","clearInterval","totpCode","getCode","half","totpCodeFormatted","intervalSeconds","mod","totpSec","totpDash","totpLow","OrganizationBadgeModule","VaultFilterSharedModule","VaultFilterService","_collapsedFilterNodes","collapsedFilterNodes$","asObservable","buildCollapsedFilterNodes","nodes","storeCollapsedFilterNodes","collapsedFilterNodes","ensureVaultFiltersAreExpanded","buildAdminCollections","collectionResponse","getCollections","collectionDomains","decryptMany","noneCollection","nestedCollections","getAllNested","fullList","nestedList","VaultFilterModule","AccountApiService","AccountService","InternalAccountService","AnonymousHubService","AppIdService","BroadcasterService","ConfigApiServiceAbstraction","CryptoFunctionService","EncryptService","FileUploadService","FolderApiServiceAbstraction","FormValidationErrorsService","LoginService","NotificationsService","SearchService","indexedEntityId","SendService","SettingsService","SyncNotifierService","TokenService","TwoFactorService","UserVerificationApiServiceAbstraction","UsernameGenerationService","VaultTimeoutService","VaultTimeoutSettingsService","AccountFactory","accountConstructor","args","GlobalStateFactory","globalStateConstructor","StateFactory","globalStateFactory","accountFactory","createGlobal","createAccount","getFlags","envFlags","JSON","parse","flagEnabled","flag","flags","StateVersion","ThemeType","theme","System","stateVersion","One","environmentUrls","NotificationType","NotificationResponse","contextId","getResponseProperty","SyncCipherCreate","SyncCipherDelete","SyncCipherUpdate","SyncLoginDelete","SyncCipherNotification","SyncFolderCreate","SyncFolderDelete","SyncFolderUpdate","SyncFolderNotification","SyncVault","SyncCiphers","SyncOrgKeys","SyncSettings","LogOut","UserNotification","SyncSendCreate","SyncSendUpdate","SyncSendDelete","SyncSendNotification","AuthRequest","AuthRequestResponse","AuthRequestPushNotification","revisionDate","environmentService","authService","createHubConnection","getNotificationsUrl","anonHubConnection","HubConnectionBuilder","withUrl","skipNegotiation","transport","withHubProtocol","MessagePackHubProtocol","build","on","ProcessNotification","stopHubConnection","stop","notification","authResponsePushNotifiction","DeviceRequest","appId","getDevice","getDeviceString","pushToken","TokenRequest","twoFactor","device","alterIdentityTokenHeaders","headers","setTwoFactor","setPasswordlessAccessCode","accessCode","passwordlessAuthRequest","toIdentityToken","client_id","deviceIdentifier","deviceName","authRequest","provider","twoFactorToken","twoFactorProvider","twoFactorRemember","remember","ApiTokenRequest","startsWith","grant_type","client_secret","TokenTwoFactorRequest","ApiKeyResponse","AttachmentResponse","sizeName","PasswordHistoryResponse","lastUsedDate","CipherResponse","notes","viewPassword","creationDate","passwordHistory","h","AttachmentUploadDataResponse","attachmentId","fileUploadType","cipherResponse","cipherMiniResponse","requestDeviceType","requestIpAddress","requestApproved","RegisterResponse","captchaBypassToken","BillingResponse","BillingSourceResponse","BillingTransactionResponse","BillingInvoiceResponse","hasNoHistory","cardBrand","needsVerification","pdfUrl","number","paid","createdDate","refunded","partiallyRefunded","refundedAmount","details","BillingHistoryResponse","BillingPaymentResponse","BreachAccountResponse","addedDate","breachDate","dataClasses","isActive","isVerified","logoPath","modifiedDate","pwnCount","SelectionReadOnlyResponse","hidePasswords","CollectionResponse","externalId","CollectionDetailsResponse","CollectionGroupDetailsResponse","groups","g","DeviceVerificationResponse","isDeviceVerificationSectionEnabled","unknownDeviceVerificationEnabled","GlobalDomainResponse","domains","excluded","DomainsResponse","globalEquivalentDomains","equivalentDomains","EmergencyAccessGranteeDetailsResponse","granteeId","waitTimeDays","EmergencyAccessGrantorDetailsResponse","grantorId","EmergencyAccessTakeoverResponse","keyEncrypted","kdf","kdfIterations","EmergencyAccessViewResponse","EventResponse","GroupResponse","accessAll","GroupDetailsResponse","IdentityCaptchaResponse","siteKey","IdentityTokenResponse","accessToken","access_token","expiresIn","expires_in","refreshToken","refresh_token","tokenType","token_type","resetMasterPassword","privateKey","forcePasswordReset","apiUseKeyConnector","keyConnectorUrl","IdentityTwoFactorResponse","twoFactorProviders2","captchaToken","twoFactorProviders","prop","parseInt","KeyConnectorUserKeyResponse","ListResponse","dr","OrganizationConnectionResponse","configType","rawConfig","config","OrganizationExportResponse","OrganizationSponsorshipSyncStatusResponse","lastSyncDate","OrganizationUserBulkPublicKeyResponse","OrganizationUserBulkResponse","PermissionsApi","accessEventLogs","accessImportExport","accessReports","manageAllCollections","manageAssignedCollections","createNewCollections","editAnyCollection","deleteAnyCollection","editAssignedCollections","deleteAssignedCollections","manageCiphers","manageGroups","manageSso","managePolicies","manageUsers","manageResetPassword","manageScim","OrganizationUserResponse","permissions","resetPasswordEnrolled","OrganizationUserUserDetailsResponse","twoFactorEnabled","usesKeyConnector","OrganizationUserDetailsResponse","OrganizationUserResetPasswordDetailsReponse","resetPasswordKey","encryptedPrivateKey","ProfileOrganizationResponse","usePolicies","useGroups","useDirectory","useEvents","use2fa","useKeyConnector","useScim","useCustomPermissions","selfHost","usersGetPremium","seats","maxCollections","maxStorageGb","ssoBound","providerName","familySponsorshipFriendlyName","familySponsorshipAvailable","planProductType","familySponsorshipLastSyncDateString","familySponsorshipLastSyncDate","familySponsorshipValidUntilString","familySponsorshipValidUntil","familySponsorshipToDelete","ProfileProviderOrganizationResponse","ProfileProviderResponse","ProfileResponse","organizations","providerOrganizations","emailVerified","masterPasswordHint","premiumPersonally","premiumFromOrganization","culture","securityStamp","PaymentResponse","userProfile","PlanResponse","nameLocalizationKey","descriptionLocalizationKey","baseStorageGb","maxUsers","maxAdditionalSeats","maxAdditionalStorage","hasSelfHost","hasPolicies","hasGroups","hasDirectory","hasEvents","hasTotp","has2fa","hasApi","hasSso","hasResetPassword","upgradeSortOrder","displaySortOrder","stripePlanId","stripeSeatPlanId","stripeStoragePlanId","stripePremiumAccessPlanId","PreloginResponse","ProviderOrganizationResponse","userCount","ProviderOrganizationOrganizationDetailsResponse","ProviderUserBulkPublicKeyResponse","ProviderUserBulkResponse","ProviderUserResponse","ProviderUserUserDetailsResponse","ProviderResponse","SendFileApi","SendTextApi","hidden","SendAccessResponse","file","expirationDate","creatorIdentifier","SendFileDownloadDataResponse","SendResponse","accessId","maxAccessCount","accessCount","deletionDate","hideEmail","SendFileUploadDataResponse","sendResponse","SsoPreValidateResponse","SubscriptionResponse","storageName","storageGb","license","expiration","usingInAppPurchase","upcomingInvoice","BillingSubscriptionResponse","BillingSubscriptionUpcomingInvoiceResponse","trialEndDate","periodStartDate","periodEndDate","cancelledDate","cancelAtEndDate","cancelled","BillingSubscriptionItemResponse","quantity","sponsoredSubscriptionItem","FolderResponse","SyncResponse","folders","sends","profile","TaxInfoResponse","taxIdType","TaxRateResponse","TwoFactorAuthenticatorResponse","TwoFactorDuoResponse","TwoFactorEmailResponse","TwoFactorProviderResponse","TwoFactorRecoverResponse","TwoFactorWebAuthnResponse","KeyResponse","ChallengeResponse","attestation","authenticatorSelection","excludeCredentials","buffer","extensions","pubKeyCredParams","rp","TwoFactorYubiKeyResponse","UserKeyResponse","AuditService","cryptoFunctionService","hashBytes","hash","hashStart","hashEnding","nativeFetch","v","getHibpBreach","limit","throttleKey","propertyKey","descriptor","originalMethod","allThrottles","throttles","getThrottles","argsThrottleKey","queue","exec","onFinally","apply","val","KeySuffixOptions","AuthenticationType","AuthResult","captchaSiteKey","requiresCaptcha","requiresTwoFactor","LogInStrategy","tokenService","appIdService","twoFactorService","logInTwoFactor","captchaResponse","tokenRequest","startLogIn","clearSelectedProvider","postIdentityToken","processTwoFactorResponse","processCaptchaResponse","processTokenResponse","onSuccessfulLogin","buildDeviceRequest","getAppId","buildTwoFactor","userProvidedTwoFactor","storedTwoFactorToken","getTwoFactorToken","saveAccountInformation","tokenResponse","accountInformation","decodeToken","sub","hasPremiumPersonally","kdfType","tokens","setTwoFactorToken","setEncKey","setEncPrivateKey","createKeyPairForOldAccount","setProviders","postAccountKeys","HashPurpose","ApiLogInStrategy","keyConnectorService","getKeyConnectorUrl","getAndSetKey","logIn","setApiKeyClientId","setApiKeyClientSecret","PasswordTokenRequest","PasswordLogInStrategy","setKey","setKeyHash","localHashedPassword","makePreloginKey","hashPassword","LocalAuthorization","hashedPassword","PasswordlessLogInStrategy","passwordlessCredentials","authRequestId","decKey","localPasswordHash","SsoTokenRequest","codeVerifier","redirectUri","code_verifier","redirect_uri","SsoLogInStrategy","newSsoUser","convertNewSsoUserToKeyConnector","redirectUrl","PreloginRequest","sequentialize","caches","cache","getCache","argsCacheKey","EncArrayBuffer","encryptionType","dataBytes","ivBytes","macBytes","encBytes","Uint8Array","encType","minimumLength","ENC_TYPE_LENGTH","throwDecryptionError","slice","static","arrayBuffer","b64","SortedCiphersCache","comparator","sortedCiphersByUrl","timeouts","isCached","addCiphers","Ciphers","resetTimer","getLastUsed","getLastLaunched","getNext","updateLastUsedIndex","clearTimeout","lastUsedIndex","localData","lastLaunched","y","valueOf","getNextIndex","CipherBulkDeleteRequest","ids","CipherBulkMoveRequest","CipherBulkRestoreRequest","CipherWithIdRequest","CipherBulkShareRequest","CipherCollectionsRequest","CipherPartialRequest","CipherShareRequest","DomainMatchBlacklist","Set","CipherService","settingsService","fileUploadService","searchService","encryptService","sortedCiphersCache","sortCiphersByLastUsed","getDecryptedCipherCache","getDecryptedCiphers","setDecryptedCipherCache","setDecryptedCiphers","clearIndex","indexCiphers","clearCache","clearDecryptedCiphersState","model","existingCipher","ph","passwordRevisionDate","hasFields","existingHiddenFields","hiddenFields","ef","matchedField","encryptObjProperty","encryptCipherData","encryptFields","encryptPasswordHistories","encryptAttachments","attachmentsModel","encAttachments","attachment","fieldsModel","self","encFields","reduce","encField","encryptField","fieldModel","phModels","encPhs","encPh","encryptPasswordHistory","phModel","getLocalData","reindexCiphers","hasKey","getOrgKeys","userKey","getKeyForUserEncryption","grouped","agg","decCiphers","entries","groupedCiphers","decryptItems","flat","getLocaleSortingFunction","getAllDecryptedForGrouping","groupingId","folder","getAllDecryptedForUrl","includeOtherTypes","defaultMatch","eqDomainsPromise","firstValueFrom","settings$","eqDomain","matchingDomains","getDefaultUriMatch","domainUrlHost","urlHost","RegExp","test","getCiphersOrganization","cr","getLastUsedForUrl","autofillOnPageLoad","getCipherForUrl","getLastLaunchedForUrl","getNextCipherForUrl","updateLastUsedIndexForUrl","updateLastUsedDate","ciphersLocalData","setLocalData","decryptedCipherCache","cached","updateLastLaunchedDate","saveNeverDomain","getNeverDomains","setNeverDomains","postCipherCreate","postCipher","upsert","putCipher","putPartialCipher","shareWithServer","attachmentPromises","shareAttachmentWithServer","encCipher","putShareCipher","shareManyWithServer","encCiphers","putShareCiphers","toCipherData","saveAttachmentWithServer","unencryptedFile","admin","reader","FileReader","readAsArrayBuffer","evt","cData","saveAttachmentRawWithServer","onerror","filename","encFileName","dataEncKey","makeEncKey","encData","encryptToBytes","fileSize","byteLength","adminRequest","uploadDataResponse","postCipherAttachment","uploadCipherAttachment","getSingleMessage","legacyServerAttachmentFileUpload","blob","Blob","Buffer","filepath","contentType","postCipherAttachmentAdminLegacy","postCipherAttachmentLegacy","saveCollectionsWithServer","putCipherCollections","clearEncryptedCiphersState","moveManyWithServer","putMoveCiphers","deleteManyWithServer","deleteManyCiphers","deleteAttachment","deleteAttachmentWithServer","deleteCipherAttachment","aLastUsed","bLastUsed","bothNotNull","sortCiphersByLastUsedThenName","aName","bName","collator","compare","localeCompare","softDelete","setDeletedDate","putDeleteCipher","softDeleteManyWithServer","putDeleteManyCiphers","clearDeletedDate","putRestoreCipher","restoreManyWithServer","putRestoreManyCiphers","restores","attachmentView","attachmentResponse","encBuf","fromResponse","decBuf","decryptFromBytes","postShareCipherAttachment","theProp","theObj","modelProp","loginUri","cardholderName","brand","expYear","firstName","middleName","lastName","address1","address2","address3","company","phone","ssn","passportNumber","licenseNumber","lastUsed","autofillOnPageLoadDefault","getAutoFillOnPageLoadDefault","clearSortedCiphers","ServerConfigResponse","version","gitHash","server","ThirdPartyServerConfigResponse","environment","EnvironmentServerConfigResponse","vault","api","notifications","sso","ServerConfig","serverConfigData","utcDate","getAgeInMilliseconds","isValid","expiresSoon","EFFLongWordList","BaseEncryptedOrganizationKey","EncryptedOrganizationKey","ProviderEncryptedOrganizationKey","decValue","rsaDecrypt","toData","decryptToBytes","CryptoService","platformUtilService","setCryptoMasterKey","storeKey","keyHash","encKey","setDecryptedCryptoSymmetricKey","setEncryptedCryptoSymmetricKey","encPrivateKey","setDecryptedPrivateKey","setEncryptedPrivateKey","setOrgKeys","orgs","providerOrgs","encOrgKeyData","setDecryptedOrganizationKeys","setEncryptedOrganizationKeys","setProviderKeys","providerKeys","setDecryptedProviderKeys","setEncryptedProviderKeys","keySuffix","inMemoryKey","getCryptoMasterKey","Auto","symmetricKey","getKeyFromStorage","retrieveKeyFromStorage","validateKey","warning","clearSecretKeyStore","getKeyHash","compareAndUpdateKeyHash","storedKeyHash","localKeyHash","serverKeyHash","ServerAuthorization","getEncKey","getEncKeyHelper","getPublicKey","inMemoryPublicKey","getPrivateKey","rsaExtractPublicKey","setPublicKey","decryptedPrivateKey","getDecryptedPrivateKey","getEncryptedPrivateKey","getFingerprint","keyFingerprint","userFingerprint","hkdfExpand","hashPhrase","decryptedOrganizationKeys","getDecryptedOrganizationKeys","getEncryptedOrganizationKeys","encOrgKey","fromData","decOrgKey","getProviderKeys","decryptedProviderKeys","getDecryptedProviderKeys","encProviderKeys","getEncryptedProviderKeys","hasKeyInMemory","hasKeyStored","Biometric","getCryptoMasterKeyAuto","hasCryptoMasterKeyBiometric","hasEncKey","getEncryptedCryptoSymmetricKey","clearKey","clearSecretStorage","clearStoredKey","setCryptoMasterKeyAuto","setCryptoMasterKeyBiometric","clearKeyHash","clearEncKey","memoryOnly","clearKeyPair","keysToClear","clearOrgKeys","clearProviderKeys","clearPinProtectedKey","setEncryptedPinProtected","clearKeys","toggleKey","makeKey","salt","pbkdf2","makeKeyFromPin","pin","protectedKeyCs","pinProtectedKey","getEncryptedPinProtected","pinKey","makePinKey","randomBytes","rsaEncrypt","keyPair","rsaGenerateKeyPair","stretchKey","makeSendKey","keyMaterial","sendKey","hkdf","hashPurpose","iterations","theKey","buildEncKey","remakeEncKey","plainValue","encValue","privateKeyValue","headerPieces","encPieces","alg","encString","keyForEnc","decryptToUtf8","encBuffer","randomNumber","min","rval","range","bitsNeeded","ceil","log2","bytesNeeded","mask","pow","byteArray","shouldStoreKey","keyB64","getVaultTimeout","getBiometricUnlock","supportsSecureStorage","getCryptoMasterKeyBiometric","newKey","macKey","minimumEntropy","entropyPerWord","numWords","hashArr","phrase","hashNumber","remainder","divide","encKeyEnc","getDecryptedCryptoSymmetricKey","decEncKey","encKeyCipher","symmetricCryptoKey","EncryptedObject","EncryptServiceImplementation","logMacFailures","plainBuf","encObj","aesEncrypt","iv","mac","macLen","resolveLegacyKey","fastParams","aesDecryptFastParameters","computedMac","hmacFast","macData","compareFast","logMacFailed","aesDecryptFast","encThing","hmac","aesDecrypt","classInitializers","MultithreadEncryptServiceImplementation","clear$","info","worker","Worker","URL","restartTimeout","postMessage","stringify","fromEvent","jsonItem","className","initializerKey","defaultIfEmpty","terminate","EventRequest","EventExport","FileUploadType","AzureFileUploadService","upload","renewalCallback","azureUploadBlob","azureUploadBlocks","urlObject","Headers","toUTCString","searchParams","blobResponse","baseUrl","blockSize","getMaxBlockSize","blockIndex","numBlocks","blocksStaged","renewUrlIfNecessary","blockUrl","blockId","encodedBlockId","blockData","blockHeaders","blockRequest","blockResponse","blockListUrl","blockListXml","expiry","setTime","now","utfBlockId","blockIdList","xml","Version","year","month","day","parts","Number","compareTo","BitwardenFileUploadService","encryptedFileName","encryptedFileData","OrganizationUserType","SetKeyConnectorKeyRequest","orgIdentifier","KeyConnectorUserKeyRequest","_email","_rememberEmail","setEmail","clearValues","SsoType","OpenIdConnectRedirectBehavior","Saml2BindingType","Saml2NameIdFormat","Saml2SigningBehavior","OrganizationApiKeyInformationResponse","OrganizationAutoEnrollStatusResponse","resetPasswordEnabled","KeysResponse","OrganizationKeysResponse","OrganizationResponse","businessAddress1","businessAddress2","businessAddress3","businessCountry","businessTaxNumber","maxAutoscaleSeats","OrganizationSubscriptionResponse","SsoConfigApi","authority","metadataAddress","redirectBehavior","getClaimsFromUserInfoEndpoint","additionalScopes","additionalUserIdClaimTypes","additionalEmailClaimTypes","additionalNameClaimTypes","acrValues","expectedReturnAcrValue","spNameIdFormat","spOutboundSigningAlgorithm","spSigningBehavior","spMinIncomingSigningAlgorithm","spWantAssertionsSigned","spValidateCertificates","idpEntityId","idpBindingType","idpSingleSignOnServiceUrl","idpSingleLogoutServiceUrl","idpX509PublicCert","idpOutboundSigningAlgorithm","idpAllowUnsolicitedAuthnResponse","idpDisableOutboundLogoutRequests","idpWantAuthnRequestsSigned","view","OpenIdConnect","openId","Saml2","saml","idpAllowOutboundLogoutRequests","OrganizationSsoResponse","urls","SsoUrls","callbackPath","signedOutCallbackPath","spEntityId","spMetadataUrl","spAcsUrl","Organization","isProviderUser","canAccess","Owner","isManager","Manager","Admin","isAdmin","canAccessEventLogs","canAccessReports","canCreateNewCollections","canDeleteAnyCollection","canViewAllCollections","canEditAssignedCollections","canDeleteAssignedCollections","canViewAssignedCollections","canManageGroups","canManageUsers","canManageUsersPassword","isExemptFromPolicies","hasProvider","PasswordGeneratorPolicyOptions","useUppercase","useLowercase","numberCount","specialCount","inEffect","DefaultOptions","ambiguous","minNumber","uppercase","minUppercase","lowercase","minLowercase","special","wordSeparator","ResetPasswordPolicyOptions","ProviderUserStatusType","ProviderUserType","Provider","isProviderAdmin","Confirmed","canCreateOrganizations","ProviderAdmin","indexing","immediateSearchLocales","defaultSearchableMinLength","searchableMinLength","locale$","locale","registeredPipeline","lunr","Pipeline","registerFunction","normalizeAccentsPipelineFunction","isSearchable","query","normalizeSearchQuery","builder","Builder","pipeline","boost","extractor","subTitle","uriExtractor","fieldExtractor","attachmentExtractor","searchCiphers","results","isArray","every","getIndexForSearch","searchCiphersBasic","ciphersMap","searchResults","search","soWild","Query","wildcard","LEADING","TRAILING","q","tokenizer","term","deleted","searchSends","toLocaleLowerCase","sendsMatched","lowPriorityMatched","joined","join","hasAttachments","lastIndexOf","hostname","protocolIndex","queryIndex","searchableFields","metadata","includes","normalize","SendFile","buildDomainModel","decryptObj","SendText","Send","getCryptoService","cryptoKey","SendRequest","fileLength","decoded","setTokens","clientIdClientSecret","setToken","setRefreshToken","setClientId","setClientSecret","getClientId","getApiKeyClientId","getClientSecret","getApiKeyClientSecret","setAccessToken","getToken","getAccessToken","getRefreshToken","clearTwoFactorToken","clearToken","getTokenExpirationDate","exp","setUTCSeconds","tokenSecondsRemaining","offsetSeconds","msRemaining","tokenNeedsRefresh","minutes","getEmailVerified","email_verified","getName","getIssuer","iss","getIsExternal","amr","v1Keys","alwaysShowDock","autoConfirmFingerprints","autoFillOnPageLoadDefault","biometricAwaitingAcceptance","biometricFingerprintValidated","biometricText","biometricUnlock","clearClipboard","collapsedGroupings","convertAccountToKeyConnector","defaultUriMatch","disableAddLoginNotification","disableAutoBiometricsPrompt","disableAutoTotpCopy","disableBadgeCounter","disableChangedPasswordNotification","disableContextMenuItem","disableFavicon","disableGa","dontShowCardsCurrentTab","dontShowIdentitiesCurrentTab","enableAlwaysOnTop","enableAutoFillOnPageLoad","enableBiometric","enableBrowserIntegration","enableBrowserIntegrationFingerprint","enableCloseToTray","enableFullWidth","enableMinimizeToTray","enableStartToTray","enableTray","encOrgKeys","encPrivate","entityType","eventCollection","history","installedVersion","lastActive","mainWindowSize","minimizeOnCopyToClipboard","neverDomains","noAutoPromptBiometricsText","openAtLogin","passwordGenerationOptions","pinProtected","protectedPin","ssoCodeVerifier","ssoIdentifier","ssoState","stamp","usesConnector","vaultTimeoutAction","rememberedEmail","v1KeyPrefixes","lastSync","partialKeys","needsMigration","currentStateVersion","getCurrentStateVersion","Latest","migrate","migrateStateFrom1To2","Two","migrateStateFrom2To3","Three","migrateStateFrom3To4","Four","authenticatedAccounts","getAuthenticatedAccounts","migratedAccount","migrateAccountFrom4To5","setCurrentStateVersion","Five","migrateAccountFrom5To6","Six","clearV1Keys","clearingUserId","keyPrefix","noAutoPromptBiometrics","ssoOrganizationIdentifier","defaultAccount","accountSettings","autoConfirmFingerPrints","decrypted","encrypted","passwordGenerationHistory","apiKeyClientSecret","cryptoMasterKey","cryptoMasterKeyAuto","cryptoMasterKeyB64","cryptoMasterKeyBiometric","cryptoSymmetricKey","legacyEtmKey","organizationKeys","apiKeyClientId","authenticationStatus","everBeenUnlocked","decodedToken","accountActivity","authenticatedUserIds","encryptedOrgKeys","htmlStorageLocation","newVersion","OrganizationData","SyncService","sendService","providerService","folderApiService","logoutCallback","syncInProgress","toJSON","forceSync","allowThrowOnError","syncStarted","getIsAuthenticated","syncCompleted","needsSync","needsSyncing","getSync","syncProfile","syncFolders","syncCollections","syncCiphers","syncSends","syncSettings","syncPolicies","syncUpsertFolder","isEdit","localFolder","remoteFolder","syncDeleteFolder","syncUpsertCipher","shouldUpdate","localCipher","checkCollections","remoteCipher","getFullCipherDetails","syncDeleteCipher","syncUpsertSend","localSend","remoteSend","getSend","sendId","syncDeleteSend","successfully","getAccountRevisionDate","getSecurityStamp","setSecurityStamp","setEmailVerified","setHasPremiumPersonally","setHasPremiumFromOrganization","setForcePasswordReset","setUsesKeyConnector","userNeedsMigration","setConvertAccountRequired","removeConvertAccountRequired","eqDomains","global","setEquivalentDomains","B32Chars","SteamChars","VerifyOTPRequest","OTP","AnonAddyForwarder","generate","anonaddy","requestInit","redirect","Authorization","website","DuckDuckGoForwarder","address","FastmailForwarder","accountId","getAccountId","using","methodCalls","emailPrefix","fastmail","prefix","methodResponses","created","notCreated","primaryAccounts","FirefoxRelayForwarder","generated_for","full_address","ForwarderOptions","FastmailForwarderOptions","AnonAddyForwarderOptions","SimpleLoginForwarder","Authentication","note","alias","wordCapitalize","wordIncludeNumber","subaddressType","catchallType","forwardedService","forwardedAnonAddyDomain","DecryptParameters","LockGuard","loginpage","authStatus","getAuthStatus","UnauthGuard","subscribers","messageCallback","modalRef","protectedFields","allowMultipleModals","onClosedPromise","getUsesKeyConnector","ThemeBuilder","configuredTheme","systemTheme","effectiveTheme","updateSystemTheme","updateConfiguredTheme","ThemingService","_theme","BehaviorSubject","monitorThemeChanges","getTheme","getSystemTheme","monitorConfiguredThemeChanges","monitorSystemThemeChanges","getValue","setTheme","classList","Light","Dark","Nord","SolarizedDark","matchMedia","JslibServicesModule","useValue","useFactory","translationLocale","deps","language","expired","useClass","makeAndGetAppId","getAnonymousAppId","existingId","guid","pushNotificationSubject","logInStrategy","strategy","clearState","saveState","logOut","callback","authingWithApiKey","authingWithSso","authingWithPassword","authingWithPasswordless","getEverBeenUnlocked","preloginResponse","postPrelogin","getPushNotifcationObs$","startSessionTimeout","clearSessionTimeout","sessionTimeout","P","injector","_folders","_folderViews","activeAccountUnlocked$","unlocked","updateObservables","getAllDecryptedFromState","values","decryptFolders","updates","cId","foldersMap","decryptFolderPromises","decryptedFolders","noneFolder","postFolder","putFolder","deleteFolder","accountService","deleteAccount","verification","verificationRequest","setDecryptedCollections","collection","decCollections","decryptedCollections","getDecryptedCollections","collectionCopy","getNested","urlsSubject","scimUrl","activeAccount$","setUrlsFromStorage","hasBaseUrl","notificationsUrl","getWebVaultUrl","webVaultUrl","getSendUrl","getIconsUrl","iconsUrl","getApiUrl","apiUrl","getIdentityUrl","identityUrl","getEventsUrl","eventsUrl","getScimUrl","getEnvironmentUrls","envUrls","webVault","icons","keyConnector","setUrls","formatUrl","scim","setEnvironmentUrls","getUrls","isCloud","period","digits","keyB32","isOtpAuth","isSteamAuth","digitParams","periodParam","algParam","epoch","timeHex","leftPad","decToHex","timeBytes","keyBytes","b32ToBytes","sign","offset","binary","fullCode","trunc","l","b32ToHex","cleanedInput","bits","hex","byteIndex","charAt","chunk","signature","generatePassphrase","sanitizePasswordLength","positions","shuffleArray","allCharSet","lowercaseCharSet","uppercaseCharSet","numberCharSet","specialCharSet","positionChars","randomCharIndex","listLength","wordList","wordIndex","appendRandomNumberToRandomWord","getPasswordGenerationOptions","setPasswordGenerationOptions","enforcedOptions","enforcePasswordGeneratorPoliciesOnOptions","enforcedPolicyOptions","getPasswordGeneratorPolicyOptions","currentPolicy","saveOptions","getHistory","getDecryptedPasswordGenerationHistory","getEncryptedPasswordGenerationHistory","decryptHistory","setDecryptedPasswordGenerationHistory","addHistory","currentHistory","matchesPrevious","unshift","pop","newHistory","encryptHistory","setEncryptedPasswordGenerationHistory","userInputs","globalUserInputs","finalUserInputs","normalizeOptions","array","j","forGeneration","minUppercaseCalc","minLowercaseCalc","minNumberCalc","minSpecialCalc","generateCatchall","generateSubaddress","generateForwarded","generateWord","word","zeroPad","subaddressEmail","atIndex","emailBeginning","emailEnding","subaddressString","randomString","catchallDomain","startString","forwarder","forwarderOptions","forwardedSimpleLoginApiKey","forwardedAnonAddyApiToken","forwardedFirefoxApiToken","forwardedFastmailApiToken","forwardedDuckDuckGoToken","getUsernameGenerationOptions","setUsernameGenerationOptions","charSet","width","customUserAgent","isWebClient","isDesktopClient","Accept","identityToken","getClientType","qsStringify","getCredentials","isJsonResponse","TwoFactorProviders2","HCaptcha_SiteKey","doAuthRefresh","postAuthRequest","getAuthResponse","getProfile","getUserSubscription","putProfile","postEmailToken","postEmail","postPassword","setPassword","postSetKeyConnectorKey","postSecurityStamp","postPasswordHint","postRegister","postPremium","postIapCheck","postReinstatePremium","postCancelPremium","postAccountKey","postAccountVerifyEmail","postAccountVerifyEmailToken","postAccountVerifyPassword","postAccountRecoverDelete","postAccountRecoverDeleteToken","postAccountKdf","deleteSsoUser","getSsoUserIdentifier","postUserApiKey","postUserRotateApiKey","putUpdateTempPassword","postConvertToKeyConnector","getUserBillingHistory","postSendAccess","getSendFileDownloadData","getSends","postSend","postFileTypeSend","renewSendFileUploadUrl","fileId","postSendFile","postSendFileLegacy","putSend","putSendRemovePassword","deleteSend","getCipher","deleteManyCiphersAdmin","putCipherCollectionsAdmin","postImportCiphers","postImportOrganizationCiphers","putDeleteManyCiphersAdmin","putRestoreCipherAdmin","getAttachmentData","emergencyAccessId","deleteCipherAttachmentAdmin","renewAttachmentUploadUrl","postAttachmentFile","getCollectionDetails","getUserCollections","getCollectionUsers","postCollection","putCollection","putCollectionUsers","deleteCollection","deleteCollectionUser","getGroupDetails","getGroups","getGroupUsers","postGroup","putGroup","putGroupUsers","deleteGroup","deleteGroupUser","getOrganizationUser","getOrganizationUserGroups","getOrganizationUsers","getOrganizationUserResetPasswordDetails","postOrganizationUserInvite","postOrganizationUserReinvite","postManyOrganizationUserReinvite","postOrganizationUserAccept","postOrganizationUserConfirm","postOrganizationUsersPublicKey","postOrganizationUserBulkConfirm","putOrganizationUser","putOrganizationUserGroups","putOrganizationUserResetPasswordEnrollment","putOrganizationUserResetPassword","deleteOrganizationUser","deleteManyOrganizationUsers","revokeOrganizationUser","revokeManyOrganizationUsers","restoreOrganizationUser","restoreManyOrganizationUsers","postPublicImportDirectory","getSettingsDomains","putSettingsDomains","rawId","btoa","getClientExtensionResults","AttestationObject","attestationObject","clientDataJson","clientDataJSON","postTwoFactorRecover","postTwoFactorEmail","getDeviceVerificationSettings","putDeviceVerificationSettings","getKnownDevice","getEmergencyAccessTrusted","getEmergencyAccessGranted","getEmergencyAccess","getEmergencyGrantorPolicies","putEmergencyAccess","deleteEmergencyAccess","postEmergencyAccessInvite","postEmergencyAccessReinvite","postEmergencyAccessAccept","postEmergencyAccessConfirm","postEmergencyAccessInitiate","postEmergencyAccessApprove","postEmergencyAccessReject","postEmergencyAccessTakeover","postEmergencyAccessPassword","postEmergencyAccessView","getCloudCommunicationsEnabled","getOrganizationConnection","createOrganizationConnection","updateOrganizationConnection","organizationConnectionId","deleteOrganizationConnection","postProviderSetup","getProvider","putProvider","getProviderUsers","getProviderUser","postProviderUserInvite","postProviderUserReinvite","postManyProviderUserReinvite","postProviderUserBulkConfirm","deleteManyProviderUsers","postProviderUserAccept","postProviderUserConfirm","postProviderUsersPublicKey","putProviderUser","deleteProviderUser","getProviderClients","postProviderAddOrganization","deleteProviderOrganization","getEvents","addEventParameters","getEventsCipher","getEventsOrganization","getEventsOrganizationUser","getEventsProvider","getEventsProviderUser","postEventsCollect","authHeader","getActiveBearerToken","getUserPublicKey","getUserKeyFromKeyConnector","handleError","postUserKeyToKeyConnector","getKeyConnectorAlive","getOrganizationExport","getApplicationVersionNumber","preValidateSso","postCreateSponsorship","sponsoredOrgId","getSponsorshipSyncStatus","deleteRevokeSponsorship","sponsoringOrganizationId","deleteRemoveSponsorship","sponsoringOrgId","postPreValidateSponsorshipToken","sponsorshipToken","postRedeemSponsorship","postResendSponsorshipOffer","doRefreshToken","doApiTokenRefresh","deviceRequest","hasResponse","alterHeaders","requestUrl","responseType","responseIsJson","tokenError","isTextResponse","Message","typeHeader","azureFileUploadService","bitwardenFileUploadService","uploadSendFile","uploadData","Direct","Azure","_settings","getSettings","setSettings","setVaultTimeoutOptions","setVaultTimeout","currentAction","getVaultTimeoutAction","setVaultTimeoutAction","isPinLockSet","getProtectedPin","isBiometricLockSet","policyAppliesToUser","setEverBeenUnlocked","setDecryptedPinProtected","setProtectedPin","vaultTimeoutSettingsService","lockedCallback","loggedOutCallback","inited","checkOnInterval","startCheck","checkVaultTimeout","isViewOpen","accounts","shouldLock","executeTimeoutAction","lock","pinSet","getDecryptedPinProtected","getLastActive","vaultTimeoutSeconds","getExport","format","getEncryptedExport","getDecryptedExport","getPasswordProtectedExport","clearText","encKeyValidation","encText","jsonDoc","passwordProtected","encKeyValidation_DO_NOT_EDIT","getOrganizationEncryptedExport","getOrganizationDecryptedExport","extension","padNumber","getSeconds","decFolders","exportCiphers","buildCommonCipher","exportData","exportPromises","decCol","decCipher","collectionsMap","padCharacter","numString","login_uri","login_username","login_password","login_totp","connected","inactive","reconnectTimer","signalrConnection","off","accessTokenFactory","processNotification","onclose","reconnect","isAuthedAndUnlocked","updateConnection","sync","reconnectFromActivity","disconnectFromInactivity","isAuthenticated","payloadUserId","UserId","myUserId","random","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","bytes","getBytes","rand","Uint32Array","putInt32","meta","encKeyByteString","macKeyByteString","encKeyB64","macKeyB64","parameters","dataBuffer","decipher","finish","output","rsaParams","impPrivateKey","jwkPrivateKey","exportKey","jwkPublicKeyParams","kty","ext","impPublicKey","modulusLength","publicExponent","generateKey","arr","getRandomValues","buf","cryptoFunctionservice","uploadEvents","uploadImmediately","orgIds","getEventCollection","setEventCollection","clearEvents","_policies","getEncryptedPolicies","decryptedPolicies","getDecryptedPolicies","diskPolicies","prototype","call","setDecryptedPolicies","masterPasswordPolicyOptions$","of","obsPolicies","filteredPolicies","policyFilter","checkPoliciesThatApplyToUser","evaluateMasterPassword","newPassword","toLocaleUpperCase","getResetPasswordPolicyOptions","resetPasswordPolicyOptions","mapPoliciesFromToken","policiesResponse","setEncryptedPolicies","isExcemptFromPolicies","policiesMap","policySet","getPoliciesByToken","getPoliciesByInvitedUser","getMasterPasswordPoliciesForInvitedUsers","setDecryptedSends","fileData","passwordHash","ArrayBuffer","encryptFileData","parseFile","decSends","getDecryptedSends","saveWithServer","sendData","legacyServerSendFileUpload","removePasswordWithServer","loggedInUsingSso","requiredByOrganization","getManagingOrganization","userIsNotUsingKeyConnector","migrateUser","keyConnectorRequest","handleKeyConnectorError","userKeyResponse","keyArr","pubKey","privKey","setPasswordRequest","setConvertAccountToKeyConnector","getConvertAccountRequired","getConvertAccountToKeyConnector","userVerificationApiService","alreadyHashed","validateInput","verifyUser","postAccountVerifyOTP","requestOTP","postAccountRequestOTP","_organizations","organizations$","getOrganizations","organizationsMap","canManageSponsorships","hasOrganizations","getFromState","getByIdentifier","setOrganizations","getProviders","getFormValidationErrors","errors","control","controlErrors","keyError","controlName","errorName","getSubscription","getLicense","getAutoEnrollStatus","updateSubscription","updateSeats","reinstate","leave","importDirectory","getApiKeyInformation","organizationApiKeyType","getKeys","getSso","updateSso","_sync","sync$","configApiService","_serverConfig","serverConfig$","switchMap","timer","E","buildServerConfig","serverConfig","getServerConfig","fetchServerConfig","setServerConfig","showError","defaultErrorMessage","validationErrors","getAllMessages","MemoryStorageService","store","BroadcasterMessagingService","broadcasterService","subscriber","arg","command","HtmlStorageService","defaultOptions","localStorage","getItem","sessionStorage","setItem","removeItem","ContainerService","attachToGlobal","bitwardenContainerService","getEncryptService","InitService","notificationsService","vaultTimeoutService","eventLoggingService","origin","getLocale","ModalService","applicationRef","modalOpen","setupHandlers","onCreated","modals","show","shown","closed","onClose","PasswordRepromptComponent","PasswordRepromptService","FileDownloadBuilder","_request","fileType","downloadMethod","fileNameLower","endsWith","WebFileDownloadService","isSafari","createObjectURL","position","click","ClientType","WebPlatformUtilsService","browserCache","userAgent","chrome","Web","isFirefox","isChrome","isEdge","isOpera","isVivaldi","isMacAppStore","sameWindow","rel","getApplicationVersion","supportsWebAuthn","PublicKeyCredential","supportsDuo","confirmText","cancelText","bodyIsHtml","iconClasses","bootstrapModal","removeAttribute","iconHtmlStr","heightAuto","buttonsStyling","iconHtml","html","titleText","showCancelButton","cancelButtonText","showConfirmButton","confirmButtonText","isDev","doc","clipboardData","setData","queryCommandSupported","textarea","textContent","copyEl","contains","select","execCommand","debug","warn","readFromClipboard","supportsBiometric","authenticateBiometric","CoreModule","parentModule","initService","systemLanguage","localesDirectory","getLocalesJson","_locale","ReplaySubject","supportedTranslationLocales","localeNames","defaultMessages","localeMessages","Intl","Collator","numeric","sensitivity","loadMessages","p3","translate","messagesObj","formattedLocale","locales","placeholders","placeProp","content","replaceToken","replaceContent","filePath","localesResult","migrationStateFrom1To2","EmergencyAccessAcceptRequest","BaseAcceptComponent","requiredParameters","failedShortMessage","failedMessage","errorMessage","authedHandler","unauthedHandler","AcceptEmergencyComponent","actionPromise","OrganizationUserAcceptRequest","AcceptOrganizationComponent","prepareAcceptRequest","setOrganizationInvitation","orgName","performResetPasswordAutoEnroll","encryptedKey","policyList","PasswordHintRequest","loginService","successRoute","onSuccessfulSubmit","HintComponent","pinLock","webVaultHostname","invalidPinAttempts","handlePinRequiredUnlock","handleMasterPasswordRequiredUnlock","unlockBiometric","biometricLock","doContinue","input","isStable","onStable","take","doUnlockWithPin","failed","getKdfType","getKdfIterations","setKeyAndContinue","doUnlockWithMasterPassword","passwordValid","decPin","getDisableFavicon","setDisableFavicon","getBiometricText","hideInput","vaultUrl","LockComponent","routerService","navigateByUrl","CaptchaIFrame","iframeId","errorCallback","infoCallback","parseFunction","parseMessage","connectorLink","sendMessage","iframe","contentWindow","base64Encode","String","fromCharCode","cleanup","removeEventListener","createParams","URLSearchParams","initComponent","addEventListener","validMessage","parsedMessage","height","AuthRequestType","CaptchaProtectedComponent","setupCaptcha","captcha","showCaptcha","handleCaptchaRequired","PasswordLogInCredentials","SsoLogInCredentials","PasswordlessLogInCredentials","PasswordlessCreateAuthRequest","fingerprintPhrase","startPasswordlessLogin","LoginWithDeviceComponent","anonymousHubService","validationService","showResendNotification","twoFactorRoute","forcePasswordResetRoute","navigation","getCurrentNavigation","extras","confirmResponse","buildAuthRequest","reqResponse","passwordlessRequest","requestId","buildLoginCredntials","loginResponse","onSuccessfulLoginTwoFactorNavigate","onSuccessfulLoginForceResetNavigate","onSuccessfulLoginNavigate","authRequestKeyPair","fingerprint","AuthenticateAndUnlock","decMasterPasswordHash","formValidationErrorService","validatedEmail","paramEmailSet","alwaysRememberEmail","skipRememberEmail","loggedEmail","selfHostedDomain","queryParamsEmail","getRememberedEmail","validateEmail","markAllAsTouched","errorText","getErrorToastMessage","setFormValues","setRememberedEmail","launchSsoBrowser","ssoRedirectUri","passwordOptions","numbers","codeVerifierHash","codeChallenge","setSsoState","setSsoCodeVerifier","webUrl","markAsTouched","toggleValidateEmail","getLoginWithDevice","reset","shift","errorTag","res","showLoginWithDevice","goToHint","LoginComponent","showResetPasswordAutoEnrollWarning","showPasswordless","goAfterLogIn","invite","getOrganizationInvitation","resetPasswordPolicy","enforcedPasswordPolicyOptions","strengthResult","getPasswordStrengthUserInput","masterPasswordScore","policiesData","clearValidators","updateValueAndValidity","valid","DeleteRecoverRequest","RecoverDeleteComponent","TwoFactorRecoveryRequest","RecoverTwoFactorComponent","RegisterRequest","referenceData","InputsFieldMatch","matchTo","inputsMatchError","inputsDoesntMatchError","fieldMatchTo","fieldCtrl","fieldMatchToCtrl","setErrors","createdAccount","showTerms","showErrorSummary","confirmMasterPassword","hint","validateInputsDoesntMatch","acceptPolicies","acceptPoliciesValidation","validator","validateFormInputsMatch","accountCreated","registerResponse","registerAccount","buildRegisterRequest","successful","captchaRequired","getStrengthResult","passwordStrengthResult","getPasswordScoreText","required","validateRegistration","hasError","orgInvite","ReferenceEventRequest","PasswordStrengthComponent","showText","passwordScoreColor","scoreWidth","updatePasswordStrength","masterPasswordScoreColor","masterPasswordScoreText","masterPasswordStrengthTimeout","setPasswordScoreText","BitErrorSummary","errorCount","getErrorCount","errorString","form","acc","dirty","untouched","RegisterFormComponent","referenceDataValue","queryParamEmail","RegisterComponent","showCreateOrgMessage","layout","reference","cookie","continuing","leaving","convert","RemovePasswordComponent","OrganizationUserResetPasswordEnrollmentRequest","SetPasswordRequest","strongPassword","setupSubmitActions","performSubmitActions","masterPasswordRetype","syncLoading","resetPasswordAutoEnroll","onSetPasswordSuccess","userEncKey","resetRequest","onSuccessfulChangePassword","confirmField","setKdfType","setKdfIterations","SetPasswordComponent","loggingIn","changePasswordRoute","getSsoCodeVerifier","getSsoState","checkState","getOrgIdentifierFromState","returnUri","includeUserIdentifier","initiateSsoFormPromise","authorizeUrl","buildAuthorizeUrl","userIdentifier","orgIdFromState","onSuccessfulLoginChangePasswordNavigate","stateSplit","checkStateSplit","SsoComponent","storedIdentifier","getSsoOrgIdentifier","setSsoOrganizationIdentifier","VerticalStep","subLabel","applyBorder","VerticalStepContentComponent","onSelectStep","selected","selectStep","selectStepByIndex","VerticalStepperComponent","activeClass","isNextButtonHidden","steps","selectedIndex","isStepDisabled","completed","LogoForbesComponent","LogoUSNewsComponent","EnterpriseContentComponent","TeamsContentComponent","ConfirmationDetailsComponent","BillingComponent","previousStep","orgInfoForm","stepBack","DefaultContentComponent","Enterprise1ContentComponent","Enterprise2ContentComponent","Teams1ContentComponent","Teams2ContentComponent","LogoCnetComponent","CnetEnterpriseContentComponent","CnetIndividualContentComponent","CnetTeamsContentComponent","AbmEnterpriseContentComponent","AbmTeamsContentComponent","billingSuccess","stepSelectionChange","navigateToOrgVault","navigateToOrgInvite","TrialInitiationComponent","titleCasePipe","orgInfoSubLabel","orgLabel","billingSubLabel","accountCreateOnly","validOrgs","orgInfoFormGroup","referenceDataId","referenceId","setupFamilySponsorship","transform","previouslySelectedIndex","verticalStepper","previous","WebAuthnIFrame","webAuthnNewTab","btnText","allow","webAuthnReady","providerType","selectedProviderType","webAuthnSupported","webAuthn","twoFactorEmail","loginRoute","webAuthnAllow","authing","needsLock","getDefaultProvider","cleanupWebAuthn","providerData","authWebAuthn","Host","sig_request","Signature","submit_callback","sig","Email","doToast","authRequestAccessCode","Window","onProviderSelected","onRecoverSelected","getSupportedProviders","choose","recover","TwoFactorOptionsComponent","TwoFactorComponent","anotherMethod","twoFactorOptionsModal","PasswordRequest","currentMasterPassword","newMasterPasswordHash","UpdatePasswordComponent","OrganizationUserResetPasswordRequest","UpdateTempPasswordRequest","newPasswordHash","newEncKey","UpdateTempPasswordComponent","VerifyEmailRequest","VerifyEmailTokenComponent","VerifyDeleteRecoverRequest","VerifyRecoverDeleteComponent","HomeGuard","FrontendLayoutComponent","FooterComponent","MenuItemDirective","role","tabIndex","MenuComponent","ngAfterContentInit","keyManager","menuItems","withWrap","MenuTriggerForDirective","viewContainerRef","overlay","isOpen","hasPopup","defaultMenuConfig","panelClass","hasBackdrop","backdropClass","scrollStrategy","scrollStrategies","reposition","positionStrategy","flexibleConnectedTo","withPositions","originX","originY","overlayX","overlayY","withLockedPosition","withFlexibleDimensions","withPush","toggleMenu","destroyMenu","openMenu","disposeAll","menu","overlayRef","templatePortal","attach","closedEventsSub","getClosedEvents","keyDownEventsSub","keydownEvents","onKeydown","detachments","escKey","backdrop","backdropClick","menuClosed","mergeWith","dispose","MenuDividerComponent","NavbarComponent","UserLayoutComponent","CollectionPermission","AccessItemType","findSortedIndex","sortedArray","compareFn","low","high","mid","FormSelectionList","controlFactory","allItems","selectedItems","deselectedItems","formArray","selectItems","initialValue","selectItem","deselectItems","deselectItem","deselectAll","findIndex","selectedOption","sortedInsertIndex","newControl","insert","deselectedOption","removeAt","populateItems","selectedItem","nextId","MultiSelectComponent","ngControl","removeSelectedItems","searchInputId","onItemsConfirmed","valueAccessor","loadingText","isSelected","onDropdownClosed","updatedBaseItems","baseItems","notifyOnChange","notifyOnTouched","onChange","onBlur","ariaDescribedBy","_ariaDescribedBy","searchInput","labelForId","_required","hasValidator","touched","styles","contrast","main","muted","primary","secondary","danger","sizes","default","small","BitIconButtonComponent","buttonType","iconClass","disabledAttr","UserTypePipe","unknownText","User","Custom","handleBlur","selectionList","PermissionMode","AccessSelectorComponent","permissionControl","initialPermission","fg","permission","readonly","accessAllItems","permissionMode","Edit","_itemComparator","itemType","permissionList","perm","View","labelId","ViewExceptPass","EditExceptPass","_permissionMode","Hidden","getRawValue","itemIcon","notifyOnTouch","pauseChangeNotification","valueChanges","Collection","Group","Member","permissionLabelId","accessAllLabelId","canEditItemPermission","listName","labelName","AccessSelectorModule","TabListItemDirective","baseClassList","active","activeClassList","disabledClassList","textColorClassList","TabLinkComponent","_tabNavBar","routerLinkMatchOptions","matrixParams","paths","fragment","onKeyDown","tabItem","routerLinkActive","isActiveChange","updateActiveLink","TabListContainerDirective","TabHeaderComponent","TabNavBarComponent","tabLabels","withHorizontalOrientation","withHomeAndEnd","toArray","updateActiveItem","OrganizationSwitcherComponent","activeOrganization","OrganizationLayoutComponent","_destroy","organization$","mergeMap","canShowSettingsTab","canShowManageTab","canShowMembersTab","canShowGroupsTab","canShowReportsTab","canShowBillingTab","getReportTabLabel","selectAll","check","CollectionAddEditComponent","onSavedCollection","onDeletedCollection","accessGroups","groupsResponse","selectedChanged","filterSelected","EntityUsersComponent","onEditedUsers","organizationUserType","organizationUserStatusType","showSelected","selectedCount","allUsers","loadUsers","users","searchedUsers","searchText","scrollViewportStyle","entity","selections","loadMore","CollectionsComponent","canCreate","didScroll","pageSize","pagedCollectionsCount","decryptCollections","assignedCollections","resetPaging","pagedLength","pagedCollections","pagedSize","canEdit","canDelete","addEditModalRef","canSave","removeCollection","usersModalRef","entityName","isSearching","isPaging","searching","GroupRequest","GroupAddEditComponent","onSavedGroup","onDeletedGroup","access","GroupsComponent","pagedGroupsCount","pagedGroups","removeGroup","ManageComponent","OrganizationUserBulkRequest","OrganizationUserConfirmRequest","UserConfirmComponent","onConfirmedUser","dontAskAgain","setAutoConfirmFingerprints","BasePeopleComponent","searchPipe","userNamePipe","statusMap","pagedUsers","activeUsers","pagedUsersCount","allCount","invitedCount","userStatusType","Invited","acceptedCount","Accepted","confirmedCount","revokedCount","Revoked","showConfirmUsers","showBulkConfirmUsers","getUsers","checkUser","filteredUsers","selectCount","removeUserConfirmationDialog","deleteUser","removeUser","revoke","revokeWarningMessage","revokeUser","restoreUser","reinvite","reinviteUser","confirm","confirmUser","mapIndex","updateUser","publicKeyResponse","autoConfirm","getAutoConfirmFingerPrints","confirmModalRef","getCheckedUsers","OrganizationUserBulkConfirmRequest","publicKeys","fingerprints","statuses","done","excludedUsers","isAccepted","getPublicKeys","entry","getCryptoKey","userIdsWithKeys","postConfirmRequest","deleteUsers","removeUsersWarning","BulkRestoreRevokeComponent","isRevoking","bulkTitle","titleKey","performBulkUserAction","bulkMessage","BulkStatusComponent","EntityEventsComponent","showUser","orgUsersUserIdMap","orgUsersIdMap","ResetPasswordComponent","onPasswordReset","loggedOutWarningName","passwordStrengthComponent","orgSymKey","decPrivateKey","OrganizationUserInviteRequest","emails","OrganizationUserUpdateRequest","NestedCheckboxComponent","onSavedUser","onDeletedUser","parentIndeterminate","parentChecked","checkboxes","pascalize","handleDependentPermissions","UserAddEditComponent","onRevokedUser","onRestoredUser","isRevoked","showCustom","manageAllCollectionsCheckboxes","manageAssignedCollectionsCheckboxes","customUserTypeSelected","canUseCustomPermissions","setRequestPermissions","clearPermissions","inviteUser","OrganizationUserUpdateGroupsRequest","groupIds","UserGroupsComponent","userGroups","ug","bulkConfirm","resetPassword","PeopleComponent","userType","accessEvents","canResetPassword","orgUseResetPassword","orgHasKeys","orgResetPasswordPolicyEnabled","callingUserType","combineLatest","viewEvents","allowResetPassword","orgUser","callingUserHasPermission","showEnrolledStatus","groupsModalRef","bulkRemove","bulkRemoveModalRef","bulkRevoke","bulkRevokeOrRestore","bulkRestore","bulkReinvite","showBulkStatus","bulkConfirmModalRef","eventsModalRef","resetPasswordModalRef","warningMessage","successfullMessage","bulkStatusModalRef","onShown","keyedErrors","keyedFilteredUsers","PipesModule","VaultService","calculateSearchBarLocalizationString","vaultFilter","selectedFolderId","selectedCollection","selectedOrganizationId","myVaultOnly","VaultSharedModule","VaultFilter","selectedFolder","refreshCollectionsAndFolders","resetFilter","selectedCollectionId","resetOrganization","buildFilter","cipherPassesFilter","onUploadedAttachment","onDeletedAttachment","onReuploadedAttachment","deletePromises","reuploadPromises","hasUpdatedKey","fileEl","saveCipherAttachment","cipherDomain","downloading","canAccessAttachments","reuploadCipherAttachment","foundAttachment","a2","reupload","showFixOldAttachments","AttachmentsComponent","activeCipherId","onCipherClicked","onCipherRightClicked","onAddCipher","onAddCipherOptions","searchPlaceholder","searchPending","searchTimeout","deletedFilter","applyFilter","reload","refresh","indexedCiphers","doSearch","rightClickCipher","addCipher","addCipherOptions","Search","EllipsisPipe","completeWords","ellipsis","OrganizationNameBadgeComponent","onOrganizationClicked","profileName","textColor","emitOnOrganizationClicked","GetOrgNameFromIdPipe","clone","checkCipher","showAddNew","onAttachmentsClicked","onShareClicked","onCollectionsClicked","onCloneClicked","onOrganzationBadgeClicked","pagedCiphers","userHasPremiumAccess","noItemIcon","pagedCiphersCount","refreshing","permanent","displayTotpCopyButton","getSelected","getSelectedIds","hasOldAttachments","CiphersComponent","onEventsClicked","allowSelectNone","onSavedCollections","loadCipherCollections","selectedCollectionIds","saveCollections","vaultFilterService","activeFilter","hideFolders","hideCollections","hideFavorites","hideTrash","hideOrganizations","onFilterChange","onAddFolder","onEditFolder","isLoaded","displayCollections","buildOrganizations","activePersonalOwnershipPolicy","checkForPersonalOwnershipPolicy","activeSingleOrganizationPolicy","checkForSingleOrganizationPolicy","buildNestedFolders","initCollections","buildCollections","toggleFilterNodeCollapseState","node","reloadCollectionsAndFolders","pruneInvalidatedFilterSelections","reloadOrganizations","addFolder","editFolder","pruneInvalidFolderSelection","pruneInvalidCollectionSelection","hasId","hide","onNodeCollapseStateChange","collectionsGrouping","collectionNodes","isCollapsed","toggleCollapse","CollectionFilterComponent","foldersGrouping","folderNodes","nestedFolders","FolderFilterComponent","cipherStatus","StatusFilterComponent","selectedCipherType","typesNode","cipherTypeEnum","TypeFilterComponent","organizationGrouping","displayMode","hasActiveFilter","applyOrganizationFilter","applyMyVaultFilter","clearFilter","EnrollMasterPasswordReset","toastStringRef","keyString","LinkSsoComponent","toggleResetPasswordEnrollment","unlinkSso","OrganizationOptionsComponent","allowEnrollmentChanges","OrganizationFilterComponent","displayText","searchTextChanged","onSearchTextChanged","VaultFilterComponent","BulkDeleteComponent","cipherIds","onDeleted","deleteCiphersAdmin","deleteCiphers","deleteRequest","BulkMoveComponent","onMoved","BulkRestoreComponent","onRestored","isChecked","BulkShareComponent","onShared","nonShareableCount","shareableCiphers","allCollections","filterCollections","checkedCollectionIds","bulkMove","bulkShare","BulkActionsComponent","bulkDelete","promptPassword","selectedIds","ciphersComponent","bulkDeleteModalRef","bulkRestoreModalRef","selectedCiphers","bulkShareModalRef","bulkMoveModalRef","BroadcasterSubscriptionId","VaultComponent","changeDetectorRef","vaultService","trashCleanupWarning","vaultFilterComponent","getCipherIdFromParams","editCipherId","queryParamsHandling","applyVaultFilter","go","filterSearchText","editCipherAttachments","madeAttachmentChanges","attachmentsModalRef","onClosed","editCipherCollections","collectionsModalRef","editCipher","cloneCipher","replaceUrl","VaultRoutingModule","VaultModule","redirectTo","OrganizationReportingModule","OrganizationBillingModule","OrganizationsRoutingModule","OrganizationModule","PlanSponsorshipType","AcceptFamilySponsorshipComponent","register","OrganizationSponsorshipRedeemRequest","FamiliesForEnterpriseSetupComponent","badToken","showNewOrganization","_selectedFamilyOrganizationId","organizationPlansComponent","onOrganizationCreateSuccess","existingFamilyOrganizations$","selectedFamilyOrganizationId","planSponsorshipType","FamiliesForEnterprise","sponsoredOrganizationId","SendAccessView","SendAccess","SendAccessRequest","toggleText","copyText","AccessComponent","sendType","passwordRequired","unavailable","sendText","maskedText","downloadData","accessRequest","keyArray","sendAccess","disableSend","filteredSends","hasSearched","onSuccessfulLoad","applyTextSearch","removePassword","onSuccessfulRemovePassword","onSuccessfulDelete","link","urlB64Key","clearSelections","selectedAll","selectType","selectedType","BrowserPath","DateField","DatePreset","datePipe","onSavedSend","onDeletedSend","copyLink","alertShown","sendLinkBaseUrl","isDateTimeLocalSupported","setDates","loadSend","hasPassword","encryptSend","encSend","uploadPromise","copySuccess","copyLinkToClipboard","typeChanged","toggleOptions","togglePasswordVisible","datesChanged","datesForm","selectedDeletionDatePreset","selectedExpirationDatePreset","defaultDeletionDateTime","defaultExpirationDateTime","fallbackDeletionDate","fallbackDeletionTime","fallbackExpirationDate","fallbackExpirationTime","deletionDatePresets","OneHour","OneDay","TwoDays","ThreeDays","SevenDays","ThirtyDays","expirationDatePresets","Never","browserPath","Firefox","Safari","Default","formattedDeletionDate","miliseconds","formattedExpirationDate","safariDeletionTimePresetOptions","safariTimePresetOptions","DeletionDate","safariExpirationTimePresetOptions","ExpriationDate","nextWeek","setInitialFormValues","emitDates","onDeletionDatePresetSelect","clearExpiration","initialDeletionDate","toTimeString","initialExpirationDate","twentyFourHour","noon","midnight","ams","pms","hour","midnightOption","twelveHour","noonOption","amOption","pmOption","validTimes","EffluxDatesComponent","editSend","addSend","SendComponent","sendAddEditModalRef","DeauthorizeSessionsComponent","DeleteAccountComponent","accountApiService","deleteForm","EmailTokenRequest","EmailRequest","ChangeEmailComponent","tokenSent","showTwoFactorEmailWarning","newEmail","UpdateProfileRequest","ProfileComponent","showChangeEmail","deauthorizeSessions","deauthModalRef","CreateOrganizationComponent","orgPlansComponent","UpdateDomainsRequest","toggleExcluded","customize","DomainRulesComponent","custom","globalDomain","excludedGlobalEquivalentDomains","d2","indexTrackBy","EmergencyAccessAttachmentsComponent","EmergencyAddEditComponent","viewAttachments","EmergencyAccessViewComponent","oldKeyBuffer","oldEncKey","cipherData","EmergencyAccessStatusType","EmergencyAccessType","EmergencyAccessConfirmRequest","EmergencyAccessInviteRequest","EmergencyAccessUpdateRequest","EmergencyAccessAddEditComponent","onSaved","emergencyAccessType","waitTimes","emergencyAccess","waitTime","EmergencyAccessConfirmComponent","onConfirmed","EmergencyAccessPasswordRequest","EmergencyAccessTakeoverComponent","onDone","takeoverResponse","approve","requestAccess","takeover","EmergencyAccessComponent","emergencyAccessStatusType","isOrganizationOwner","trustedContacts","grantedContacts","contact","doConfirmation","removeGrantee","removeGrantor","RecoveryInitiated","RecoveryApproved","takeoverModalRef","hours","CUSTOM_VALUE","exceedsMinimumTimout","customTimeInMinutes","MIN_CUSTOM_MINUTES","combineLatestWith","vaultTimeoutPolicy","applyVaultTimeoutPolicy","current","vaultTimeouts","onTouched","validate","policyError","minTimeoutError","registerOnValidatorChange","validatorChange","vaultTimeoutPolicyHours","vaultTimeoutPolicyMinutes","VaultTimeoutInputComponent","PreferencesComponent","localeOptions","themeOptions","enableFavicons","getEnableFullWidth","startingLocale","startingTheme","setEnableFullWidth","setLocale","vaultTimeoutActionChanged","newValue","FolderWithIdRequest","SendWithIdRequest","UpdateKeyRequest","ChangePasswordComponent","rotateEncKey","rotateEncKeyClicked","updateKey","updateEmergencyAccesses","updateAllResetPasswordKeys","allowedStatuses","filteredAccesses","updateRequest","KdfRequest","ChangeKdfComponent","kdfOptions","recommendedKdfIterations","SecurityKeysComponent","showChangeKdf","viewUserApiKey","viewUserApiKeyModalRef","rotateUserApiKey","rotateUserApiKeyModalRef","SecurityComponent","showChangePassword","SecurityRoutingModule","getHasPremiumPersonally","hasFamilySponsorshipAvailable","hasPremiumFromOrg","getHasPremiumFromOrganization","hideSubscription","notAllowedValueAsync","valueGetter","caseInsensitive","notAllowedValue","controlValue","resendEmail","SponsoringOrgRowComponent","sponsoringOrg","isSelfHosted","sponsorshipRemoved","statusMessage","statusClass","setStatus","revokeSponsorship","revokeSponsorshipPromise","doRevokeSponsorship","resendEmailPromise","isSentAwaitingSync","toDelete","validUntil","forceReload","SponsoredFamiliesComponent","sponsorshipForm","selectedSponsorshipOrgId","validators","sponsorshipEmail","asyncValidators","updateOn","availableSponsorshipOrgs$","anyOrgsAvailable$","activeSponsorshipOrgs$","anyActiveSponsorships$","sponsoredEmail","friendlyName","resetForm","sponsorshipEmailControl","BillingHistoryViewComponent","PremiumComponent","premiumPrice","finalizePremium","paymentResponse","SubscriptionComponent","hasPremium","subscriptionRoute","closeUpdateLicense","downloadLicense","adjustStorage","closeStorage","UserSubscriptionComponent","adjustStorageAdd","showAdjustStorage","showUpdateLicense","reinstatePromise","cancelPromise","licenseString","subscriptionMarkedForCancel","nextInvoice","storagePercentage","storageProgressWidth","SubscriptionRoutingModule","usernameGenerationService","comingFromAddEdit","onSelected","usernameOptions","avoidAmbiguous","usernameWebsite","passTypeOptions","usernameTypeOptions","desc","subaddressOptions","catchallOptions","forwardOptions","passwordOptionsResponse","websiteOption","generatorOptions","getGeneratorOptions","regenerateWithoutButtonPress","regenerate","setGeneratorOptions","regeneratePassword","regenerateUsername","sliderChanged","savePasswordOptions","sliderInput","normalizePasswordOptions","saveUsernameOptions","usernameGeneratingPromise","copyOptions","SelectCopyDirective","onCopy","selection","getSelection","rangeCount","getRangeAt","stringEndPos","newLinePos","ColorPasswordPipe","generateTemplate","templateGenerator","passwordArray","colorizedPassword","isSpecial","PasswordGeneratorHistoryComponent","lengthChanged","minNumberChanged","minSpecialChanged","GeneratorComponent","historyModalRef","ToolsComponent","UpdateKeyComponent","makeRequest","onSavedFolder","onDeletedFolder","FolderAddEditComponent","onSharedCipher","cipherView","ShareComponent","VerifyEmailComponent","onVerified","verifyEmail","showVerifyEmail","showBrowserOutdated","showUpdateKey","showPremiumCallout","filterComponent","isShowingCards","verified","shareCipher","shareModalRef","folderAddEditModalRef","updateKeyModalRef","favorites","flagName","ImportExportModule","OssRoutingModule","useHash","paramsInheritanceStrategy","LoginModule","VerticalStepperModule","TrialInitiationModule","OrganizationManageModule","OrganizationUserModule","OssModule","WildcardRoutingModule","ProviderAddOrganizationRequest","WebProviderService","addOrganizationToProvider","encryptedOrgKey","detachOrganizastion","AddOrganizationComponent","webProviderService","onAddedOrganization","ProviderPermissionsGuard","providerPermissions","ProvidersComponent","addExistingOrganization","DisallowedPlanTypes","ClientsComponent","manageOrganizations","showAddExisting","pagedClientsCount","clients","candidateOrgs","allowedOrgsIds","addableOrganizations","pagedClients","addModalRef","ProviderUserAcceptRequest","AcceptProviderComponent","EventsComponent","providerUsersUserIdMap","providerUsersIdMap","ProviderUserBulkRequest","ProviderUserConfirmRequest","ProviderUserBulkConfirmRequest","BulkConfirmComponent","BulkRemoveComponent","ProviderUserInviteRequest","ProviderUserUpdateRequest","ServiceUser","ProvidersLayoutComponent","showMenuBar","showManageTab","showSettingsTab","manageRoute","ProviderUpdateRequest","SetupProviderComponent","ProviderSetupRequest","SetupComponent","ProvidersRoutingModule","ProvidersModule","registerComponentFactoryResolver","SecretsManagerModule","AppRoutingModule","toastrService","sanitizer","lastActivity","idleTimer","isIdle","lang","runOutsideAngular","onmousemove","recordActivity","onmousedown","ontouchstart","onclick","onscroll","onkeypress","setFullWidth","clean","setLastActive","idleStateChanged","sanitize","enableHtml","trustedHtml","timeOut","DisablePersonalVaultExportPolicy","DisablePersonalVaultExportPolicyComponent","MaximumVaultTimeoutPolicy","MaximumVaultTimeoutPolicyComponent","AppComponent","ScimConfigApi","scimProvider","ScimConfigRequest","copyScimUrl","toggleScimKey","rotateScimKey","copyScimKey","ScimComponent","showScimSettings","showScimKey","formData","endpointUrl","connection","setConnectionFormValues","loadApiKey","apiKeyRequest","apiKeyResponse","getScimEndpointUrl","rotatePromise","existingConnectionId","OrganizationSsoRequest","SsoConfigView","InputStripSpacesDirective","onInput","CopyClickDirective","valueToCopy","onClick","LaunchClickDirective","uriToLaunch","BaseCvaComponent","controlDir","internalControl","onValueChangesInternal","describedById","showDescribedBy","controlId","helperText","isRequired","onBlurInternal","InputCheckboxComponent","validateKeyConnectorUrl","toggleOpenIdCustomizations","defaultSigningAlgorithm","ssoType","ssoTypeOptions","None","samlSigningAlgorithms","saml2SigningBehaviourOptions","IfIdpWantAuthnRequestsSigned","Always","saml2BindingTypeOptions","HttpRedirect","HttpPost","saml2NameIdFormatOptions","NotConfigured","Unspecified","EmailAddress","X509SubjectName","WindowsDomainQualifiedName","KerberosPrincipalName","EntityIdentifier","Persistent","Transient","connectRedirectOptions","RedirectGet","FormPost","destory$","showOpenIdCustomizations","haveTestedKeyConnector","openIdForm","samlForm","ssoConfigForm","newType","ssoSettings","populateForm","validateForm","readOutErrors","fromView","markAsPending","invalidUrl","enableTestKeyConnector","samlSigningAlgorithmOptions","markAsDirty","ssoConfigView","errorCountText","div","innerText","existing","OrganizationsModule","AppModule","bootstrapModule","preserveWhitespaces","CalloutComponent","useAlertRole","calloutStyle","enforcedPolicyMessage","getPasswordScoreAlertDisplay","FallbackSrcDirective","onError","appFallbackSrc","cardIcons","Visa","Mastercard","Amex","Discover","JCB","Maestro","UnionPay","RuPay","Mir","IconComponent","image","fallbackImage","imageEnabled","setLoginIcon","setCardIcon","hostnameUri","isWebsite","ModalRef","_onCreated","_onClose","_onClosed","_onShow","_onShown","onShow","lastResult","toPromise","UserVerificationComponent","disableRequestOTP","sentCode","processChanges","opacity","A11yTitleDirective","appA11yTitle","hasAttribute","ApiActionDirective","appApiAction","AutofocusDirective","appAutofocus","condition","autofocus","InputVerbatimDirective","appInputVerbatim","disableComplete","StopClickDirective","$event","preventDefault","StopPropDirective","stopPropagation","AuthGuard","promptBiometric","BitwardenToast","toastPackage","BitwardenToastGlobalConfig","toastComponent","BitwardenToastModule","ngModule","numberFormats","cardLength","blocks","Other","CreditCardNumberPipe","creditCardNumber","rules","matchingRule","chunks","JslibModule","forRoot","maxOpened","autoDismiss","closeButton","I18nPipe","SearchPipe","prop1","prop2","prop3","UserNamePipe","WINDOW","MEMORY_STORAGE","SECURE_STORAGE","STATE_FACTORY","STATE_SERVICE_USE_CACHE","LOGOUT_CALLBACK","LOCKED_CALLBACK","LOCALES_DIRECTORY","SYSTEM_LANGUAGE","LOG_MAC_FAILURES","DynamicModalComponent","cd","focusTrapFactory","loadChildComponent","childComponentType","setComponentParameters","componentRef","focusTrap","focusFirstTabbableElementWhenReady","componentType","componentFactory","modalContentRef","destroy","getFocus","autoFocusEl","ModalInjector","_parentInjector","_additionalTokens","notFoundValue","ModalConfig","modalList","factoryResolvers","modalCount","topModal","modalComponentRef","openInternal","hostView","replaceTopModal","closeAll","attachToDom","createModalComponent","attachView","domElem","rootNodes","detachView","modalEl","dialogEl","zIndex","prepend","closeElement","WeakMap","AbstractThemingService","DynamicTreeNode","setCollapsedGroupings","getCollapsedGroupings","transformation","storedFolders","orgCiphers","oc","getAllFoldersNested","storedCollections","folderCopy","getFolderNested","ApiService","AuthService","CollectionService","EnvironmentService","ExportService","FileDownloadService","FolderService","InternalFolderService","I18nService","KeyConnectorService","LogService","MessagingService","OrganizationApiServiceAbstraction","canAccessSettingsTab","canAccessMembersTab","canAccessGroupsTab","canAccessReportingTab","canAccessBillingTab","canManageCollections","canAccessManageTab","canAccessOrgAdmin","canAccessVaultTab","getOrganizationById","canAccessAdmin","isNotProviderUser","OrganizationService","InternalOrganizationService","PasswordGenerationService","PlatformUtilsService","PolicyApiServiceAbstraction","PolicyService","InternalPolicyService","ProviderService","StateMigrationService","AbstractStorageService","TotpService","UserVerificationService","ValidationService","AuthenticationStatus","CipherRepromptType","CipherType","DeviceType","EncryptionType","EventType","FieldType","HtmlStorageLocation","KdfType","DEFAULT_KDF_TYPE","PBKDF2_SHA256","DEFAULT_KDF_ITERATIONS","SEND_KDF_ITERATIONS","LoginLinkedId","CardLinkedId","IdentityLinkedId","LogLevelType","OrganizationApiKeyType","OrganizationConnectionType","OrganizationUserStatusType","PaymentMethodType","PlanType","PolicyType","ProductType","SecureNoteType","SendType","TwoFactorProviderType","UriMatchType","VerificationType","LinkedMetadata","_i18nKey","TreeNode","ServiceUtils","nodeTree","partIndex","delimiter","partName","nestedTraverse","newPartName","getTreeNodeObject","nodeURL","Utils","isNode","process","release","isBrowser","isMobileBrowser","isMobile","isAppleMobileBrowser","isAppleMobile","binaryString","atob","charCodeAt","fromB64ToArray","fromUrlB64ToB64","strUtf8","unescape","fromB64toUrlB64","fromBufferToB64","b64Str","encodedString","decodeURIComponent","escape","urlB64Str","fromB64ToUtf8","utfStr","fromBufferToUrlB64","fromUtf8ToArray","uriString","isNullOrWhitespace","validHosts","getUrl","parseResult","isIp","pair","source","getUrlObject","bgColor","threshold","svgTextFill","bgColorHexNums","fromEntries","record","destination","mobile","vendor","opera","hasProtocol","anchor","regexpEmojiPresentation","CardApi","FieldApi","IdentityApi","LoginUriApi","LoginApi","SecureNoteApi","AttachmentData","CardData","CipherData","CollectionData","EventData","FieldData","FolderData","IdentityData","LoginUriData","LoginData","PasswordHistoryData","PolicyData","ProviderData","SecureNoteData","SendFileData","SendTextData","SendData","ServerConfigData","serverConfigResponse","ThirdPartyServerConfigData","EnvironmentServerConfigData","fromJSON","EncryptionPair","decryptedFromJson","encryptedFromJson","DataEncryptionPair","TemporaryDataEncryption","AccountData","AccountKeys","initRecordEncryptionPairsFromJSON","decObj","AccountProfile","AccountTokens","Attachment","decryptAttachmentKey","getKeyForDecryption","toAttachmentData","buildDataModel","Card","toCardData","Cipher","decAttachment","decField","decPh","toLoginData","toSecureNoteData","toIdentityData","toFieldData","toPasswordHistoryData","Domain","dataObj","notEncList","objProp","notEncStringList","viewModel","mapProp","EncString","encryptedStringOrType","initFromData","initFromEncryptedString","parseEncryptedString","decryptedValue","EnvironmentUrls","Field","Folder","GeneratedPasswordHistory","Identity","LoginUri","toLoginUriData","Login","MasterPasswordPolicyOptions","Password","Policy","SecureNote","SymmetricCryptoKey","WindowState","CardExport","FieldExport","IdentityExport","LoginUriExport","LoginExport","toView","toDomain","SecureNoteExport","CipherExport","CipherWithIdExport","CollectionExport","CollectionWithIdExport","FolderExport","FolderWithIdExport","CipherCreateRequest","AttachmentRequest","CipherRequest","lastKnownRevisionDate","attachments2","attachmentRequest","CollectionRequest","FolderRequest","KeysRequest","OrganizationApiKeyRequest","OrganizationConnectionRequest","OrganizationKeysRequest","OrganizationTaxInfoUpdateRequest","SecretVerificationRequest","TaxInfoUpdateRequest","TwoFactorEmailRequest","BaseResponse","propertyName","exactName","otherCasePropertyName","ErrorResponse","identityResponse","errorModel","responseErrorModel","messages","lastSep","PolicyResponse","AttachmentView","CardView","_brand","_number","_subTitle","maskedCode","repeat","maskedNumber","formatYear","CipherView","linkedFieldValue","linkedFieldI18nKey","CollectionView","FieldView","showCount","maskedValue","FolderView","IdentityView","_firstName","_lastName","fullName","fullAddress","fullAddressPart2","addressPart2","ItemView","CanLaunchWhitelist","LoginUriView","_uri","_domain","_hostname","_host","_canLaunch","hostnameOrUri","hostOrUri","LoginView","maskedPassword","PasswordHistoryView","SecureNoteView","SendFileView","SendTextView","SendView","maxAccessCountReached","pendingDelete","ConsoleLogService","timersMap","level","InitializerKey","StorageLocation","State","accountDeserializer","buildAccountMapFromJSON","jsonAccounts","DDG_SHARED_KEY","activeAccountSubject","activeAccountUnlockedSubject","hasBeenInited","isRecoveredSession","accountDiskCache","setState","createGlobals","initAccountState","updateState","syncAccountFromDisk","storedActiveUser","activeUserId","pushAccounts","diskAccount","getAccountFromDisk","setAccountEnvironmentUrls","scaffoldNewAccountStorage","setActiveUser","clearDecryptedDataForActiveUser","deAuthenticateAccount","dynamicallySetActiveUser","removeAccountFromDisk","removeAccountFromMemory","getTimeoutBasedStorageOptions","getAccount","saveAccount","getAlwaysShowDock","defaultOnDiskOptions","setAlwaysShowDock","setAutoFillOnPageLoadDefault","getBiometricAwaitingAcceptance","setBiometricAwaitingAcceptance","getBiometricFingerprintValidated","setBiometricFingerprintValidated","setBiometricText","setBiometricUnlock","hasPremiumFromOrganization","getClearClipboard","setClearClipboard","nextValue","defaultSecureStorageOptions","saveSecureStorageKey","getCryptoMasterKeyB64","setCryptoMasterKeyB64","setDefaultUriMatch","getDisableAddLoginNotification","setDisableAddLoginNotification","getDisableAutoBiometricsPrompt","setDisableAutoBiometricsPrompt","getDisableAutoTotpCopy","setDisableAutoTotpCopy","getDisableBadgeCounter","setDisableBadgeCounter","getDisableChangedPasswordNotification","setDisableChangedPasswordNotification","getDisableContextMenuItem","setDisableContextMenuItem","getDisableGa","setDisableGa","getDontShowCardsCurrentTab","setDontShowCardsCurrentTab","getDontShowIdentitiesCurrentTab","setDontShowIdentitiesCurrentTab","getDuckDuckGoSharedKey","setDuckDuckGoSharedKey","getEnableAlwaysOnTop","accountPreference","globalPreference","setEnableAlwaysOnTop","getEnableAutoFillOnPageLoad","setEnableAutoFillOnPageLoad","getEnableBiometric","enableBiometrics","setEnableBiometric","getEnableBrowserIntegration","setEnableBrowserIntegration","getEnableBrowserIntegrationFingerprint","setEnableBrowserIntegrationFingerprint","getEnableCloseToTray","setEnableCloseToTray","getEnableDuckDuckGoBrowserIntegration","enableDuckDuckGoBrowserIntegration","setEnableDuckDuckGoBrowserIntegration","getEnableMinimizeToTray","setEnableMinimizeToTray","getEnableStartToTray","setEnableStartToTray","getEnableTray","setEnableTray","defaultOnDiskMemoryOptions","getEntityId","setEntityId","getEntityType","setEntityType","getGlobalEnvironmentUrls","getEquivalentDomains","getForcePasswordReset","getInstalledVersion","setInstalledVersion","getMainWindowSize","setMainWindowSize","getMinimizeOnCopyToClipboard","setMinimizeOnCopyToClipboard","getNoAutoPromptBiometrics","setNoAutoPromptBiometrics","getNoAutoPromptBiometricsText","setNoAutoPromptBiometricsText","getOpenAtLogin","setOpenAtLogin","organizationInvitation","usernameGenerationOptions","accountVaultTimeoutAction","globalVaultTimeoutAction","getStateVersion","setStateVersion","getWindow","setWindow","useMemory","storageLocation","getGlobalsFromMemory","useDisk","getGlobalsFromDisk","saveGlobalsToMemory","saveGlobalsToDisk","useSecureStorage","getAccountFromMemory","getUserIdFromMemory","cachedAccount","setDiskCache","Memory","Both","Disk","saveAccountToMemory","saveAccountToDisk","deleteDiskCache","deepClone","scaffoldNewAccountLocalStorage","scaffoldNewAccountSessionStorage","scaffoldNewAccountMemoryStorage","storedAccount","pruneInMemoryAccounts","requestedOptions","getActiveUserIdFromStorage","removeAccountFromLocalStorage","resetAccount","removeAccountFromSessionStorage","removeAccountFromSecureStorage","persistentAccountInformation","timeoutAction","deserializer","stateUpdater","updatedState","withPrototypeForArrayMembers","memberConstructor","memberConverter","originalResult","getOwnPropertyDescriptors","withPrototypeForObjectValues","valuesConstructor","valuesConverter","TwoFactorProviders","priority","selectedTwoFactorProviderType","twoFactorProvidersData","providerPriority","_value","setSelectedProvider","clearProviders","SizeClasses","large","AvatarComponent","border","svgCharCount","svgFontSize","svgFontWeight","svgSize","chars","upperCaseText","svg","getFirstLetters","unicodeSafeSubstring","hexColor","createSvgElement","charObj","createTextElement","svgHtml","bypassSecurityTrustResourceUrl","svgTag","backgroundColor","textTag","fontWeight","characters","hoverStyles","BadgeDirective","badgeType","hasHoverEffects","nodeName","BadgeModule","buttonStyles","ButtonComponent","block","defaultIcon","defaultI18n","calloutClass","BitFormFieldControl","BitErrorComponent","displayError","requiredLength","BitFormFieldComponent","ngAfterContentChecked","InputModule","MultiSelectModule","FormFieldModule","BitHintComponent","BitLabel","PrefixClasses","BitPrefixDirective","BitSuffixDirective","BitIconComponent","domSanitizer","innerHtml","bypassSecurityTrustHtml","Icon","isIcon","DynamicContentNotAllowedError","svgIcon","strings","BitInputDirective","hasPrefix","hasSuffix","ariaInvalid","ButtonLikeAbstraction","CellDirective","RowDirective","alignContent","alignmentClass","TableComponent","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","O","chunkIds","notFulfilled","Infinity","fulfilled","getter","__esModule","definition","defineProperty","enumerable","chunkId","miniCssF","globalThis","Function","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","onScriptComplete","prev","doneFns","parentNode","Symbol","toStringTag","nmd","scriptUrl","importScripts","currentScript","baseURI","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}