{"version":3,"file":"app/main.83c78a01bee272ba69f1.js","mappings":"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A,UACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,WACA,WACA,UACA,OACA,UACA,YACA,WACA,WACA,UACA,YACA,OACA,SACA,WACA,YACA,YACA,YACA,YACA,SACA,QACA,YACA,WACA,SACA,UACA,SACA,SACA,WACA,QACA,SACA,YACA,YACA,YACA,YACA,YACA,OACA,UACA,SACA,SACA,QACA,YACA,SACA,QACA,UACA,QACA,WACA,UACA,YACA,QACA,YACA,YACA,SACA,WACA,YACA,UACA,QACA,OACA,OACA,OACA,MACA,OACA,YACA,QACA,YACA,QACA,UACA,UACA,YACA,QACA,QACA,YACA,WACA,SACA,QACA,QACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,QACA,QACA,YACA,QACA,WACA,UACA,WACA,WACA,OACA,WACA,SACA,SACA,WACA,QACA,YACA,QACA,WACA,YACA,YACA,WACA,YACA,YACA,SACA,YACA,YACA,SACA,UACA,UACA,WACA,OACA,QACA,QACA,QACA,UACA,WACA,UACA,WACA,QACA,SACA,WACA,QACA,YACA,UACA,QACA,QACA,SACA,WACA,SACA,YACA,SACA,UACA,WACA,YACA,UACA,YACA,UACA,SACA,UACA,UACA,UACA,SACA,SACA,WACA,OACA,YACA,UACA,QACA,SACA,SACA,SACA,UACA,UACA,YACA,YACA,UACA,SACA,UACA,YACA,YACA,WACA,QACA,YACA,QACA,QACA,WACA,YACA,WACA,WACA,UACA,WACA,UACA,YACA,UACA,YACA,WACA,WACA,WACA,SACA,UACA,YACA,WACA,SACA,WACA,WACA,YACA,WACA,YACA,WACA,YACA,YACA,YACA,YACA,SACA,UACA,QACA,QACA,UACA,SACA,UACA,SACA,WACA,WACA,UACA,SACA,WACA,QACA,SACA,UACA,YACA,SACA,UACA,YACA,YACA,WACA,WACA,YACA,UACA,WACA,QACA,YACA,YACA,UACA,QACA,YACA,YACA,YACA,YACA,WACA,WACA,UACA,UACA,QACA,QACA,WACA,QACA,OACA,WACA,YACA,YACA,WACA,OACA,QACA,WACA,WACA,QACA,QACA,YACA,UACA,WACA,QACA,SACA,UACA,SACA,UACA,UACA,UACA,SACA,UACA,OACA,QACA,QACA,SACA,UACA,UACA,QACA,SACA,UACA,SACA,YACA,WACA,QACA,MACA,SACA,YACA,SACA,YACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,YACA,SACA,WACA,SACA,UACA,WACA,UACA,UACA,YACA,YACA,YACA,SACA,WACA,QACA,OACA,WACA,OACA,SACA,YACA,UACA,SACA,SACA,UACA,YACA,WACA,YACA,YACA,SACA,QACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,WACA,UACA,UACA,WACA,QACA,WACA,YACA,SACA,YACA,SACA,SACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,SACA,SACA,WACA,SACA,UACA,WACA,QACA,WACA,UACA,OACA,QACA,QACA,SACA,QACA,QACA,SACA,UACA,SACA,QACA,OACA,OACA,SACA,WACA,SACA,SACA,WACA,YACA,YACA,WACA,SACA,SACA,YACA,WACA,WACA,UACA,YACA,WACA,WACA,YACA,UACA,UACA,WACA,YACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,YACA,SACA,WACA,WACA,YACA,WACA,QACA,WACA,YACA,SACA,QACA,UACA,QACA,UACA,SACA,WACA,QACA,SACA,UACA,SACA,SACA,YACA,UACA,QACA,UACA,WACA,QACA,SACA,WACA,SACA,UACA,YACA,UACA,QACA,WACA,SACA,SACA,SACA,WACA,QACA,WACA,WACA,SACA,SACA,UACA,WACA,WACA,SACA,YACA,UACA,SACA,WACA,SACA,UACA,SACA,UACA,QACA,WACA,UACA,WACA,SACA,UACA,SACA,OACA,YACA,UACA,YACA,SACA,WACA,YACA,UACA,WACA,YACA,WACA,OACA,YACA,SACA,QACA,QACA,QACA,SACA,SACA,QACA,OACA,QACA,OACA,YACA,WACA,YACA,UACA,UACA,SACA,SACA,UACA,UACA,UACA,QACA,OACA,QACA,UACA,YACA,YACA,QACA,YACA,YACA,QACA,WACA,YACA,SACA,UACA,SACA,QACA,QACA,UACA,QACA,QACA,WACA,QACA,QACA,UACA,UACA,WACA,SACA,OACA,WACA,QACA,WACA,UACA,WACA,OACA,OACA,WACA,WACA,UACA,OACA,SACA,UACA,QACA,SACA,YACA,QACA,QACA,UACA,SACA,QACA,QACA,WACA,UACA,WACA,WACA,OACA,SACA,UACA,SACA,SACA,UACA,UACA,YACA,OACA,SACA,SACA,QACA,OACA,MACA,UACA,OACA,UACA,SACA,UACA,WACA,QACA,WACA,WACA,WACA,QACA,UACA,SACA,SACA,QACA,OACA,YACA,YACA,OACA,YACA,SACA,QACA,SACA,UACA,WACA,UACA,QACA,QACA,QACA,SACA,UACA,WACA,YACA,OACA,YACA,WACA,SACA,QACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,YACA,YACA,SACA,SACA,QACA,SACA,UACA,OACA,SACA,SACA,WACA,YACA,UACA,WACA,SACA,SACA,WACA,UACA,UACA,QACA,QACA,QACA,QACA,UACA,UACA,SACA,YACA,OACA,QACA,QACA,UACA,UACA,YACA,UACA,UACA,YACA,YACA,UACA,UACA,YACA,YACA,YACA,UACA,WACA,SACA,SACA,YACA,SACA,SACA,WACA,QACA,QACA,UACA,WACA,YACA,SACA,WACA,WACA,SACA,WACA,QACA,QACA,WACA,QACA,YACA,SACA,WACA,SACA,YACA,SACA,SACA,SACA,WACA,WACA,YACA,YACA,WACA,WACA,UACA,QACA,SACA,UACA,SACA,SACA,UACA,UACA,QACA,OACA,QACA,YACA,SACA,OACA,UACA,YACA,YACA,WACA,WACA,UACA,UACA,UACA,WACA,WACA,WACA,QACA,QACA,SACA,SACA,SACA,UACA,YACA,WACA,QACA,OACA,SACA,OACA,SACA,UACA,OACA,WACA,OACA,SACA,UACA,SACA,YACA,QACA,UACA,QACA,SACA,QACA,SACA,SACA,QACA,QACA,WACA,UACA,OACA,UACA,OACA,WACA,WACA,UACA,YACA,WACA,UACA,YACA,OACA,UACA,UACA,UACA,YACA,QACA,SACA,WACA,SACA,WACA,UACA,WACA,SACA,QACA,SACA,SACA,UACA,SACA,QACA,OACA,SACA,WACA,WACA,SACA,UACA,SACA,SACA,SACA,QACA,YACA,SACA,UACA,SACA,UACA,UACA,WACA,OACA,YACA,UACA,UACA,SACA,YACA,UACA,UACA,UACA,YACA,UACA,YACA,UACA,UACA,QACA,UACA,SACA,YACA,SACA,UACA,WACA,WACA,YACA,YACA,YACA,WACA,SACA,YACA,QACA,SACA,UACA,UACA,WACA,UACA,YACA,WACA,YACA,QACA,YACA,YACA,UACA,UACA,UACA,SACA,YACA,QACA,SACA,WACA,SACA,UACA,YACA,YACA,QACA,UACA,UACA,UACA,OACA,OACA,SACA,SACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,WACA,SACA,UACA,WACA,WACA,UACA,YACA,WACA,UACA,SACA,SACA,SACA,UACA,YACA,SACA,QACA,UACA,YACA,SACA,SACA,YACA,QACA,UACA,YACA,UACA,WACA,WACA,UACA,SACA,SACA,QACA,SACA,YACA,WACA,WACA,SACA,SACA,SACA,WACA,WACA,YACA,YACA,YACA,UACA,WACA,WACA,QACA,WACA,QACA,QACA,UACA,YACA,UACA,YACA,WACA,SACA,SACA,UACA,QACA,QACA,YACA,WACA,UACA,QACA,UACA,YACA,YACA,WACA,UACA,WACA,UACA,UACA,QACA,UACA,UACA,WACA,QACA,UACA,SACA,WACA,WACA,WACA,UACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,SACA,OACA,YACA,UACA,QACA,YACA,SACA,QACA,QACA,UACA,QACA,WACA,SACA,UACA,QACA,QACA,YACA,YACA,YACA,WACA,YACA,YACA,QACA,QACA,QACA,OACA,WACA,SACA,WACA,WACA,QACA,WACA,WACA,SACA,YACA,UACA,QACA,UACA,WACA,SACA,OACA,SACA,UACA,WACA,SACA,SACA,QACA,OACA,SACA,QACA,QACA,QACA,QACA,QACA,WACA,QACA,SACA,WACA,SACA,WACA,WACA,YACA,SACA,UACA,UACA,WACA,UACA,SACA,SACA,OACA,QACA,QACA,OACA,QACA,WACA,SACA,SACA,QACA,YACA,QACA,WACA,UACA,UACA,WACA,UACA,WACA,UACA,QACA,QACA,QACA,UACA,SACA,WACA,OACA,OACA,QACA,QACA,QACA,UACA,QACA,SACA,YACA,WACA,QACA,SACA,UACA,SACA,UACA,WACA,QACA,SACA,WACA,OACA,SACA,QACA,UACA,QACA,QACA,UACA,WACA,UACA,UACA,WACA,QACA,SACA,UACA,WACA,YACA,QACA,WACA,SACA,SACA,YACA,SACA,UACA,QACA,YACA,UACA,UACA,WACA,YACA,YACA,OACA,WACA,SACA,UACA,SACA,QACA,UACA,MACA,WACA,SACA,UACA,SACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,OACA,OACA,OACA,OACA,WACA,WACA,UACA,WACA,SACA,YACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,SACA,WACA,OACA,OACA,OACA,UACA,QACA,QACA,SACA,QACA,WACA,UACA,UACA,WACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,SACA,UACA,SACA,YACA,WACA,WACA,YACA,UACA,YACA,WACA,WACA,YACA,WACA,YACA,UACA,UACA,UACA,WACA,UACA,YACA,UACA,QACA,YACA,UACA,WACA,WACA,SACA,WACA,YACA,YACA,UACA,YACA,YACA,UACA,OACA,UACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,YACA,UACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,WACA,WACA,UACA,YACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,UACA,YACA,YACA,WACA,UACA,UACA,UACA,UACA,WACA,UACA,YACA,UACA,UACA,YACA,OACA,SACA,SACA,UACA,SACA,UACA,SACA,OACA,QACA,OACA,WACA,YACA,UACA,SACA,SACA,SACA,YACA,YACA,WACA,WACA,YACA,QACA,WACA,UACA,WACA,YACA,SACA,UACA,WACA,UACA,YACA,YACA,UACA,SACA,SACA,WACA,YACA,SACA,SACA,YACA,OACA,UACA,SACA,QACA,QACA,QACA,YACA,YACA,WACA,YACA,UACA,SACA,UACA,WACA,QACA,UACA,WACA,UACA,SACA,WACA,OACA,WACA,YACA,WACA,WACA,SACA,WACA,UACA,WACA,YACA,YACA,SACA,QACA,YACA,QACA,UACA,UACA,QACA,QACA,QACA,UACA,WACA,WACA,WACA,WACA,SACA,SACA,UACA,YACA,QACA,UACA,UACA,YACA,SACA,WACA,YACA,SACA,WACA,WACA,WACA,WACA,WACA,SACA,QACA,QACA,SACA,QACA,QACA,WACA,UACA,WACA,YACA,UACA,WACA,UACA,WACA,OACA,UACA,QACA,QACA,QACA,UACA,SACA,WACA,UACA,UACA,UACA,WACA,UACA,YACA,SACA,WACA,UACA,QACA,QACA,QACA,QACA,OACA,QACA,SACA,UACA,UACA,QACA,QACA,UACA,UACA,YACA,UACA,YACA,UACA,QACA,YACA,SACA,UACA,WACA,WACA,YACA,UACA,WACA,YACA,UACA,UACA,WACA,QACA,OACA,SACA,UACA,UACA,YACA,OACA,UACA,UACA,WACA,SACA,SACA,WACA,WACA,YACA,WACA,UACA,YACA,WACA,UACA,YACA,UACA,QACA,SACA,UACA,UACA,UACA,SACA,OACA,SACA,SACA,SACA,SACA,YACA,UACA,QACA,QACA,QACA,UACA,SACA,UACA,SACA,SACA,YACA,QACA,QACA,QACA,OACA,SACA,UACA,YACA,UACA,YACA,WACA,YACA,UACA,MACA,QACA,SACA,UACA,UACA,WACA,SACA,YACA,YACA,MACA,MACA,WACA,SACA,QACA,WACA,SACA,QACA,QACA,WACA,QACA,UACA,YACA,SACA,WACA,QACA,SACA,SACA,WACA,YACA,QACA,WACA,WACA,YACA,UACA,WACA,WACA,UACA,OACA,OACA,YACA,OACA,YACA,OACA,WACA,SACA,WACA,WACA,UACA,OACA,SACA,WACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,WACA,SACA,YACA,WACA,SACA,UACA,YACA,QACA,OACA,YACA,SACA,WACA,QACA,UACA,WACA,SACA,QACA,SACA,SACA,QACA,QACA,YACA,QACA,WACA,SACA,WACA,YACA,WACA,UACA,SACA,YACA,YACA,UACA,YACA,UACA,YACA,WACA,OACA,WACA,UACA,SACA,YACA,YACA,YACA,QACA,WACA,SACA,WACA,YACA,SACA,SACA,OACA,OACA,SACA,SACA,WACA,SACA,WACA,SACA,UACA,SACA,YACA,YACA,YACA,WACA,UACA,YACA,WACA,WACA,WACA,UACA,SACA,WACA,SACA,WACA,UACA,YACA,WACA,YACA,YACA,QACA,WACA,UACA,UACA,SACA,SACA,OACA,WACA,YACA,WACA,SACA,YACA,QACA,WACA,QACA,WACA,YACA,SACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,UACA,QACA,SACA,WACA,SACA,YACA,YACA,WACA,SACA,YACA,WACA,SACA,WACA,YACA,YACA,WACA,SACA,QACA,SACA,QACA,UACA,SACA,UACA,UACA,OACA,YACA,YACA,WACA,YACA,SACA,UACA,YACA,WACA,SACA,SACA,SACA,WACA,YACA,YACA,UACA,UACA,QACA,WACA,SACA,SACA,WACA,QACA,UACA,YACA,UACA,YACA,YACA,WACA,WACA,YACA,YACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,YACA,WACA,WACA,SACA,YACA,YACA,WACA,YACA,YACA,SACA,WACA,YACA,WACA,UACA,QACA,UACA,WACA,UACA,UACA,YACA,WACA,SACA,UACA,YACA,UACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,YACA,YACA,UACA,OACA,WACA,SACA,YACA,QACA,OACA,SACA,UACA,YACA,WACA,YACA,WACA,WACA,YACA,YACA,MACA,WACA,YACA,WACA,OACA,SACA,OACA,WACA,QACA,SACA,SACA,UACA,SACA,QACA,UACA,SACA,YACA,QACA,QACA,SACA,SACA,UACA,UACA,UACA,SACA,SACA,UACA,WACA,YACA,YACA,WACA,YACA,WACA,YACA,WACA,WACA,WACA,SACA,WACA,WACA,UACA,YACA,WACA,UACA,UACA,YACA,WACA,WACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,WACA,OACA,YACA,UACA,OACA,UACA,YACA,YACA,WACA,WACA,YACA,SACA,UACA,WACA,UACA,WACA,SACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,YACA,WACA,UACA,WACA,UACA,YACA,UACA,WACA,WACA,UACA,WACA,UACA,WACA,UACA,WACA,WACA,WACA,WACA,QACA,QACA,QACA,YACA,UACA,WACA,WACA,WACA,WACA,SACA,WACA,YACA,YACA,WACA,WACA,WACA,YACA,QACA,SACA,SACA,OACA,WACA,WACA,QACA,QACA,QACA,QACA,OACA,SACA,YACA,SACA,QACA,UACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,UACA,QACA,QACA,SACA,WACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,WACA,UACA,QACA,OACA,YACA,SACA,SACA,OACA,SACA,WACA,SACA,OACA,OACA,QACA,OACA,OACA,WACA,YACA,YACA,WACA,YACA,WACA,UACA,UACA,YACA,WACA,YACA,QACA,UACA,UACA,OACA,UACA,WACA,YACA,YACA,WACA,YACA,YACA,YACA,SACA,SACA,WACA,SACA,SACA,QACA,OACA,UACA,QACA,QACA,QACA,UACA,WACA,YACA,WACA,WACA,SACA,WACA,SACA,SACA,WACA,UACA,UACA,UACA,QACA,QACA,QACA,YACA,UACA,WACA,UACA,UACA,UACA,QACA,QACA,WACA,SACA,OACA,MACA,SACA,YACA,UACA,WACA,UACA,WACA,WACA,QACA,OACA,OACA,SACA,SACA,MACA,OACA,SACA,WACA,OACA,UACA,WACA,WACA,MACA,OACA,SACA,YACA,YACA,UACA,UACA,WACA,SACA,SACA,OACA,OACA,UACA,OACA,QACA,QACA,QACA,UACA,UACA,WACA,UACA,YACA,UACA,WACA,UACA,WACA,WACA,OACA,QACA,UACA,UACA,UACA,SACA,UACA,QACA,UACA,UACA,WACA,WACA,WACA,UACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,SACA,UACA,QACA,UACA,SACA,WACA,SACA,YACA,YACA,SACA,WACA,UACA,QACA,SACA,SACA,OACA,OACA,QACA,QACA,QACA,YACA,OACA,SACA,UACA,YACA,UACA,WACA,YACA,UACA,YACA,YACA,OACA,WACA,SACA,OACA,UACA,SACA,WACA,YACA,WACA,MACA,YACA,UACA,YACA,SACA,YACA,SACA,SACA,WACA,WACA,YACA,UACA,YACA,SACA,QACA,YACA,UACA,SACA,QACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,UACA,YACA,YACA,WACA,SACA,MACA,WACA,WACA,YACA,QACA,UACA,SACA,MACA,UACA,WACA,MACA,YACA,QACA,YACA,WACA,YACA,QACA,UACA,QACA,QACA,UACA,SACA,UACA,YACA,YACA,QACA,WACA,UACA,SACA,SACA,WACA,SACA,YACA,QACA,UACA,YACA,WACA,OACA,QACA,WACA,UACA,WACA,UACA,UACA,WACA,WACA,YACA,WACA,YACA,WACA,WACA,WACA,WACA,UACA,UACA,YACA,QACA,MACA,SACA,YACA,SACA,YACA,YACA,WACA,UACA,YACA,SACA,SACA,YACA,YACA,WACA,UACA,UACA,WACA,WACA,YACA,QACA,SACA,UACA,UACA,YACA,YACA,UACA,YACA,WACA,YACA,YACA,WACA,YACA,WACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,WACA,WACA,YACA,UACA,SACA,UACA,YACA,YACA,YACA,UACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,SACA,SACA,SACA,UACA,UACA,SACA,SACA,YACA,WACA,YACA,WACA,SACA,UACA,SACA,SACA,YACA,SACA,SACA,WACA,UACA,WACA,UACA,YACA,WACA,WACA,WACA,UACA,WACA,QACA,OACA,SACA,OACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,WACA,UACA,QACA,SACA,WACA,UACA,UACA,YACA,SACA,YACA,YACA,WACA,SACA,SACA,UACA,YACA,SACA,SACA,UACA,QACA,QACA,WACA,YACA,YACA,WACA,WACA,WACA,SACA,YACA,YACA,WACA,UACA,QACA,UACA,YACA,YACA,SACA,WACA,WACA,YACA,YACA,WACA,UACA,UACA,WACA,UACA,QACA,YACA,SACA,YACA,WACA,UACA,QACA,WACA,YACA,YACA,UACA,UACA,OACA,YACA,YACA,YACA,WACA,WACA,QACA,WACA,UACA,OACA,QACA,YACA,SACA,QACA,UACA,UACA,WACA,YACA,YACA,YACA,SACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,SACA,YACA,YACA,YACA,YACA,QACA,OACA,YACA,SACA,UACA,SACA,QACA,WACA,OACA,SACA,YACA,WACA,WACA,SACA,UACA,YACA,YACA,YACA,YACA,YACA,QACA,SACA,WACA,YACA,SACA,SACA,WACA,UACA,YACA,WACA,UACA,UACA,UACA,YACA,WACA,WACA,YACA,SACA,WACA,UACA,YACA,YACA,WACA,YACA,SACA,YACA,WACA,WACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,WACA,YACA,UACA,SACA,WACA,SACA,YACA,UACA,UACA,SACA,YACA,UACA,UACA,OACA,SACA,UACA,SACA,OACA,QACA,UACA,OACA,WACA,SACA,SACA,WACA,UACA,UACA,YACA,QACA,UACA,OACA,UACA,YACA,YACA,UACA,UACA,WACA,SACA,UACA,WACA,SACA,YACA,YACA,UACA,WACA,WACA,MACA,QACA,UACA,SACA,SACA,OACA,OACA,SACA,SACA,WACA,WACA,WACA,WACA,WACA,QACA,QACA,UACA,SACA,UACA,WACA,YACA,WACA,SACA,SACA,QACA,SACA,SACA,WACA,UACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,WACA,WACA,YACA,UACA,UACA,QACA,WACA,QACA,UACA,SACA,WACA,SACA,SACA,SACA,UACA,OACA,SACA,QACA,WACA,SACA,WACA,WACA,UACA,UACA,YACA,QACA,WACA,QACA,UACA,WACA,WACA,YACA,SACA,UACA,UACA,WACA,MACA,OACA,UACA,UACA,WACA,WACA,YACA,YACA,QACA,UACA,QACA,QACA,YACA,UACA,WACA,WACA,OACA,UACA,YACA,YACA,YACA,WACA,WACA,SACA,QACA,UACA,WACA,SACA,WACA,UACA,YACA,YACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,OACA,UACA,SACA,QACA,QACA,SACA,SACA,QACA,QACA,OACA,QACA,QACA,QACA,WACA,OACA,SACA,UACA,QACA,WACA,UACA,UACA,QACA,SACA,UACA,WACA,OACA,MACA,MACA,OACA,QACA,OACA,WACA,SACA,WACA,SACA,WACA,SACA,OACA,OACA,OACA,UACA,WACA,WACA,YACA,SACA,WACA,WACA,WACA,UACA,WACA,UACA,WACA,UACA,WACA,YACA,WACA,UACA,WACA,WACA,WACA,SACA,SACA,UACA,WACA,WACA,MACA,QACA,WACA,WACA,UACA,YACA,WACA,YACA,WACA,QACA,QACA,UACA,UACA,YACA,SACA,UACA,QACA,WACA,WACA,WACA,UACA,UACA,UACA,WACA,WACA,UACA,WACA,SACA,YACA,WACA,YACA,WACA,UACA,WACA,YACA,WACA,UACA,SACA,WACA,SACA,YACA,WACA,QACA,UACA,UACA,WACA,SACA,SACA,QACA,SACA,WACA,YACA,YACA,WACA,QACA,SACA,UACA,QACA,UACA,YACA,SACA,OACA,QACA,YACA,UACA,WACA,WACA,YACA,SACA,QACA,QACA,SACA,WACA,YACA,WACA,QACA,YACA,SACA,MACA,QACA,MACA,YACA,UACA,QACA,OACA,YACA,WACA,UACA,SACA,SACA,UACA,YACA,SACA,YACA,WACA,OACA,SACA,QACA,SACA,SACA,WACA,UACA,MACA,SACA,UACA,SACA,SACA,UACA,SACA,UACA,SACA,UACA,SACA,MACA,WACA,YACA,SACA,UACA,WACA,QACA,OACA,OACA,SACA,OACA,QACA,OACA,SACA,MACA,SACA,UACA,WACA,WACA,QACA,UACA,YACA,SACA,QACA,YACA,WACA,YACA,UACA,YACA,WACA,WACA,SACA,YACA,YACA,YACA,WACA,YACA,UACA,YACA,UACA,UACA,UACA,QACA,QACA,YACA,SACA,UACA,YACA,QACA,OACA,WACA,YACA,WACA,SACA,WACA,SACA,SACA,SACA,QACA,UACA,SACA,WACA,QACA,QACA,SACA,QACA,UACA,UACA,UACA,QACA,YACA,SACA,YACA,UACA,SACA,WACA,YACA,QACA,UACA,QACA,WACA,UACA,WACA,UACA,SACA,UACA,UACA,UACA,UACA,SACA,UACA,SACA,UACA,WACA,WACA,SACA,YACA,YACA,UACA,WACA,QACA,QACA,QACA,UACA,WACA,UACA,OACA,SACA,YACA,UACA,SACA,OACA,OACA,WACA,OACA,UACA,QACA,WACA,WACA,YACA,OACA,UACA,QACA,UACA,OACA,OACA,OACA,QACA,WACA,YACA,QACA,SACA,OACA,SACA,OACA,SACA,WACA,OACA,UACA,SACA,SACA,SACA,OACA,OACA,OACA,WACA,YACA,WACA,YACA,SACA,SACA,WACA,UACA,YACA,WACA,WACA,UACA,WACA,QACA,WACA,WACA,UACA,UACA,UACA,WACA,UACA,SACA,UACA,QACA,WACA,QACA,QACA,UACA,YACA,QACA,QACA,YACA,UACA,UACA,YACA,WACA,SACA,YACA,SACA,YACA,YACA,UACA,QACA,OACA,UACA,WACA,WACA,YACA,SACA,QACA,UACA,WACA,OACA,YACA,OACA,QACA,YACA,WACA,WACA,QACA,UACA,YACA,QACA,YACA,QACA,SACA,WACA,OACA,UACA,OACA,WACA,SACA,QACA,QACA,SACA,WACA,SACA,QACA,SACA,UACA,QACA,QACA,SACA,UACA,QACA,OACA,SACA,WACA,WACA,UACA,UACA,YACA,UACA,WACA,SACA,QACA,YACA,WACA,WACA,QACA,UACA,YACA,QACA,OACA,WACA,QACA,OACA,UACA,UACA,YACA,UACA,QACA,SACA,WACA,OACA,OACA,QACA,QACA,UACA,OACA,SACA,MACA,UACA,WACA,YACA,WACA,UACA,WACA,SACA,SACA,UACA,UACA,MACA,UACA,QACA,OACA,UACA,OACA,SACA,SACA,YACA,SACA,UACA,SACA,UACA,YACA,UACA,WACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,SACA,UACA,WACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,SACA,YACA,SACA,QACA,YACA,YACA,UACA,WACA,UACA,YACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,WACA,YACA,UACA,WACA,YACA,SACA,WACA,WACA,WACA,YACA,WACA,QACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,UACA,QACA,UACA,OACA,SACA,QACA,UACA,YACA,QACA,SACA,YACA,WACA,UACA,WACA,YACA,OACA,UACA,SACA,QACA,QACA,SACA,WACA,SACA,WACA,SACA,OACA,WACA,WACA,YACA,YACA,YACA,SACA,SACA,YACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,UACA,WACA,YACA,YACA,UACA,WACA,OACA,OACA,QACA,UACA,YACA,UACA,QACA,UACA,YACA,QACA,SACA,SACA,SACA,UACA,UACA,WACA,WACA,UACA,YACA,QACA,WACA,QACA,SACA,SACA,YACA,QACA,WACA,SACA,UACA,UACA,UACA,UACA,QACA,YACA,WACA,WACA,UACA,WACA,SACA,SACA,WACA,OACA,MACA,OACA,OACA,OACA,QACA,SACA,WACA,SACA,QACA,YACA,WACA,UACA,SACA,YACA,WACA,YACA,WACA,WACA,SACA,SACA,YACA,YACA,SACA,WACA,SACA,OACA,SACA,UACA,WACA,WACA,SACA,SACA,SACA,UACA,SACA,YACA,UACA,QACA,OACA,UACA,OACA,SACA,YACA,MACA,SACA,UACA,WACA,YACA,WACA,YACA,YACA,YACA,SACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,MACA,UACA,QACA,OACA,OACA,MACA,WACA,WACA,WACA,UACA,YACA,YACA,WACA,WACA,WACA,SACA,QACA,OACA,QACA,WACA,SACA,SACA,YACA,WACA,WACA,QACA,YACA,WACA,UACA,WACA,UACA,YACA,WACA,UACA,YACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,SACA,SACA,YACA,UACA,WACA,YACA,YACA,WACA,SACA,UACA,YACA,YACA,WACA,UACA,YACA,YACA,QACA,WACA,YACA,WACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,UACA,WACA,YACA,WACA,UACA,YACA,YACA,YACA,UACA,YACA,SACA,WACA,SACA,SACA,MACA,OACA,SACA,OACA,QACA,MACA,OACA,YACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,WACA,YACA,YACA,UACA,QACA,UACA,YACA,UACA,OACA,YACA,SACA,QACA,MACA,MACA,SACA,SACA,YACA,UACA,WACA,YACA,SACA,YACA,WACA,MACA,UACA,UACA,SACA,UACA,UACA,WACA,QACA,OACA,QACA,UACA,UACA,OACA,UACA,YACA,OACA,OACA,YACA,UACA,QACA,SACA,SACA,MACA,QACA,SACA,QACA,SACA,WACA,OACA,UACA,UACA,MACA,SACA,YACA,SACA,UACA,OACA,UACA,WACA,WACA,YACA,QACA,OACA,MACA,SACA,WACA,YACA,SACA,UACA,WACA,YACA,WACA,QACA,YACA,WACA,YACA,OACA,SACA,WACA,UACA,QACA,YACA,QACA,UACA,UACA,OACA,SACA,QACA,OACA,WACA,WACA,OACA,SACA,UACA,SACA,UACA,WACA,SACA,QACA,OACA,UACA,YACA,UACA,SACA,WACA,WACA,QACA,WACA,UACA,SACA,QACA,QACA,SACA,WACA,OACA,MACA,OACA,SACA,OACA,WACA,WACA,SACA,OACA,OACA,WACA,WACA,YACA,WACA,OACA,SACA,SACA,WACA,SACA,WACA,UACA,UACA,UACA,OACA,UACA,UACA,YACA,WACA,SACA,UACA,UACA,OACA,SACA,QACA,OACA,UACA,WACA,OACA,QACA,WACA,QACA,QACA,QACA,SACA,UACA,QACA,OACA,UACA,UACA,WACA,YACA,WACA,SACA,SACA,QACA,UACA,WACA,SACA,UACA,SACA,OACA,OACA,QACA,SACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,YACA,WACA,YACA,WACA,YACA,QACA,UACA,SACA,QACA,SACA,UACA,SACA,OACA,QACA,OACA,OACA,QACA,OACA,QACA,OACA,SACA,WACA,UACA,SACA,WACA,SACA,UACA,UACA,SACA,WACA,SACA,WACA,SACA,WACA,OACA,WACA,OACA,SACA,QACA,SACA,SACA,WACA,UACA,UACA,YACA,OACA,UACA,SACA,YACA,UACA,QACA,OACA,SACA,OACA,OACA,UACA,SACA,UACA,YACA,WACA,SACA,UACA,QACA,WACA,SACA,WACA,YACA,YACA,SACA,UACA,YACA,UACA,UACA,WACA,MACA,OACA,SACA,UACA,UACA,WACA,SACA,WACA,WACA,SACA,QACA,QACA,OACA,OACA,UACA,YACA,QACA,QACA,UACA,WACA,OACA,QACA,WACA,WACA,SACA,SACA,WACA,UACA,OACA,OACA,MACA,UACA,UACA,SACA,OACA,OACA,WACA,YACA,SACA,SACA,SACA,UACA,QACA,SACA,QACA,YACA,UACA,SACA,SACA,YACA,YACA,QACA,UACA,YACA,WACA,YACA,YACA,SACA,WACA,UACA,SACA,YACA,WACA,YACA,UACA,UACA,SACA,QACA,WACA,WACA,YACA,YACA,OACA,QACA,OACA,YACA,OACA,SACA,WACA,SACA,YACA,UACA,YACA,WACA,QACA,YACA,SACA,QACA,YACA,WACA,WACA,SACA,WACA,WACA,QACA,OACA,UACA,YACA,WACA,UACA,SACA,UACA,WACA,QACA,YACA,WACA,YACA,YACA,YACA,UACA,YACA,WACA,WACA,SACA,WACA,UACA,YACA,WACA,WACA,QACA,YACA,SACA,YACA,OACA,OACA,SACA,UACA,YACA,UACA,WACA,UACA,WACA,UACA,YACA,WACA,SACA,SACA,QACA,QACA,YACA,UACA,UACA,UACA,YACA,WACA,YACA,SACA,UACA,UACA,YACA,QACA,UACA,SACA,UACA,QACA,WACA,SACA,SACA,SACA,OACA,MACA,WACA,YACA,UACA,UACA,WACA,QACA,QACA,YACA,YACA,SACA,WACA,SACA,SACA,UACA,WACA,SACA,YACA,SACA,UACA,SACA,QACA,YACA,SACA,YACA,YACA,UACA,SACA,YACA,SACA,UACA,WACA,SACA,UACA,UACA,UACA,YACA,WACA,UACA,WACA,YACA,WACA,WACA,YACA,OACA,SACA,YACA,YACA,SACA,SACA,SACA,SACA,WACA,WACA,WACA,QACA,WACA,WACA,UACA,QACA,SACA,YACA,SACA,UACA,SACA,WACA,WACA,UACA,QACA,SACA,SACA,WACA,SACA,UACA,YACA,SACA,UACA,YACA,WACA,QACA,WACA,OACA,YACA,WACA,WACA,UACA,MACA,YACA,SACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,YACA,UACA,WACA,UACA,YACA,QACA,SACA,WACA,SACA,YACA,WACA,UACA,WACA,YACA,YACA,YACA,WACA,MACA,SACA,WACA,UACA,YACA,WACA,WACA,WACA,QACA,YACA,WACA,YACA,YACA,UACA,WACA,SACA,QACA,OACA,WACA,YACA,SACA,WACA,YACA,SACA,YACA,QACA,QACA,YACA,WACA,UACA,WACA,UACA,WACA,QACA,YACA,YACA,QACA,QACA,UACA,OACA,QACA,SACA,QACA,SACA,OACA,OACA,MACA,MACA,WACA,QACA,OACA,SACA,UACA,WACA,WACA,YACA,YACA,SACA,WACA,QACA,YACA,UACA,QACA,QACA,WACA,UACA,YACA,SACA,QACA,YACA,QACA,YACA,WACA,SACA,UACA,YACA,WACA,QACA,QACA,SACA,YACA,QACA,UACA,UACA,SACA,YACA,QACA,UACA,SACA,WACA,OACA,YACA,YACA,SACA,OACA,SACA,SACA,SACA,UACA,YACA,UACA,OACA,QACA,MACA,OACA,OACA,SACA,QACA,YACA,OACA,SACA,SACA,UACA,QACA,SACA,UACA,YACA,WACA,SACA,WACA,UACA,SACA,WACA,WACA,WACA,YACA,OACA,SACA,UACA,SACA,WACA,SACA,WACA,SACA,YACA,SACA,SACA,WACA,WACA,YACA,WACA,YACA,YACA,UACA,UACA,OACA,SACA,OACA,UACA,QACA,OACA,MACA,YACA,SACA,WACA,WACA,SACA,UACA,QACA,OACA,SACA,WACA,WACA,QACA,QACA,SACA,SACA,WACA,YACA,QACA,WACA,QACA,UACA,SACA,UACA,SACA,UACA,SACA,UACA,SACA,WACA,UACA,WACA,YACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,SACA,WACA,WACA,YACA,QACA,SACA,QACA,MACA,MACA,QACA,MACA,YACA,WACA,WACA,SACA,WACA,UACA,WACA,YACA,SACA,YACA,OACA,UACA,YACA,YACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,SACA,YACA,SACA,UACA,YACA,YACA,WACA,WACA,SACA,QACA,SACA,UACA,SACA,UACA,UACA,OACA,MACA,OACA,WACA,OACA,MACA,QACA,WACA,QACA,OACA,UACA,WACA,OACA,WACA,UACA,WACA,UACA,QACA,SACA,WACA,OACA,WACA,QACA,UACA,YACA,UACA,OACA,SACA,OACA,OACA,OACA,OACA,UACA,OACA,OACA,WACA,UACA,YACA,YACA,YACA,WACA,QACA,UACA,WACA,SACA,WACA,WACA,YACA,YACA,MACA,YACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,UACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,UACA,WACA,WACA,QACA,WACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,SACA,UACA,UACA,WACA,WACA,UACA,YACA,YACA,UACA,UACA,SACA,UACA,UACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,OACA,UACA,UACA,WACA,UACA,WACA,WACA,YACA,YACA,WACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,UACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,WACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,UACA,YACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,UACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,UACA,WACA,WACA,WACA,UACA,YACA,WACA,YACA,MACA,SACA,UACA,YACA,UACA,YACA,SACA,WACA,SACA,QACA,QACA,YACA,UACA,WACA,WACA,WACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,SACA,YACA,OACA,WACA,YACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,WACA,QACA,WACA,OACA,YACA,QACA,UACA,WACA,YACA,UACA,YACA,SACA,QACA,YACA,YACA,SACA,QACA,UACA,UACA,WACA,YACA,SACA,UACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,WACA,WACA,YACA,SACA,UACA,YACA,SACA,SACA,QACA,UACA,UACA,SACA,WACA,SACA,SACA,UACA,UACA,UACA,SACA,UACA,YACA,SACA,UACA,YACA,QACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,UACA,UACA,YACA,WACA,WACA,WACA,QACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,YACA,SACA,WACA,YACA,OACA,WACA,UACA,QACA,YACA,UACA,SACA,YACA,YACA,SACA,WACA,QACA,YACA,WACA,SACA,SACA,UACA,UACA,WACA,SACA,QACA,QACA,SACA,UACA,WACA,UACA,SACA,SACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,UACA,SACA,OACA,SACA,WACA,UACA,SACA,UACA,UACA,YACA,WACA,UACA,YACA,QACA,SACA,UACA,WACA,YACA,MACA,WACA,UACA,QACA,YACA,YACA,YACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,QACA,OACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,QACA,OACA,YACA,YACA,SACA,YACA,QACA,SACA,WACA,QACA,YACA,SACA,YACA,YACA,QACA,UACA,UACA,SACA,UACA,YACA,SACA,UACA,YACA,QACA,YACA,QACA,SACA,WACA,UACA,UACA,WACA,QACA,UACA,QACA,SACA,UACA,UACA,SACA,WACA,UACA,WACA,WACA,UACA,WACA,YACA,YACA,WACA,WACA,SACA,UACA,YACA,YACA,UACA,WACA,YACA,WACA,UACA,UACA,WACA,UACA,YACA,WACA,QACA,WACA,QACA,SACA,YACA,SACA,WACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,UACA,WACA,SACA,OACA,YACA,UACA,QACA,MACA,OACA,OACA,OACA,UACA,UACA,WACA,YACA,SACA,QACA,SACA,QACA,SACA,QACA,SACA,SACA,QACA,SACA,WACA,QACA,OACA,YACA,UACA,YACA,UACA,SACA,OACA,OACA,UACA,OACA,SACA,SACA,QACA,WACA,WACA,UACA,WACA,YACA,OACA,SACA,WACA,WACA,SACA,YACA,WACA,UACA,SACA,WACA,QACA,OACA,SACA,WACA,WACA,SACA,UACA,SACA,UACA,WACA,SACA,SACA,UACA,YACA,UACA,UACA,QACA,SACA,WACA,QACA,UACA,OACA,WACA,YACA,UACA,QACA,SACA,MACA,WACA,SACA,WACA,UACA,WACA,YACA,SACA,UACA,WACA,YACA,UACA,WACA,WACA,UACA,YACA,UACA,SACA,WACA,YACA,UACA,UACA,SACA,YACA,YACA,UACA,YACA,WACA,YACA,YACA,SACA,UACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,SACA,UACA,SACA,YACA,YACA,YACA,SACA,UACA,YACA,UACA,QACA,UACA,YACA,UACA,YACA,YACA,WACA,UACA,SACA,UACA,UACA,YACA,UACA,UACA,WACA,SACA,YACA,WACA,QACA,SACA,YACA,UACA,UACA,SACA,QACA,WACA,QACA,QACA,QACA,SACA,SACA,WACA,UACA,UACA,YACA,QACA,YACA,WACA,WACA,YACA,QACA,UACA,YACA,UACA,YACA,UACA,WACA,YACA,WACA,WACA,UACA,UACA,UACA,UACA,YACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,UACA,WACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,QACA,QACA,YACA,SACA,WACA,YACA,SACA,YACA,WACA,WACA,YACA,WACA,UACA,QACA,UACA,YACA,WACA,SACA,YACA,YACA,WACA,WACA,QACA,WACA,SACA,SACA,WACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,UACA,UACA,WACA,YACA,QACA,SACA,QACA,YACA,QACA,UACA,MACA,UACA,SACA,YACA,SACA,SACA,MACA,OACA,YACA,OACA,UACA,QACA,YACA,OACA,SACA,SACA,QACA,WACA,YACA,YACA,UACA,WACA,OACA,QACA,SACA,QACA,WACA,YACA,WACA,SACA,WACA,YACA,QACA,UACA,WACA,SACA,SACA,UACA,SACA,SACA,WACA,YACA,OACA,QACA,YACA,WACA,UACA,WACA,WACA,YACA,SACA,YACA,UACA,WACA,UACA,SACA,QACA,UACA,OACA,SACA,WACA,UACA,YACA,SACA,QACA,WACA,QACA,WACA,QACA,UACA,YACA,YACA,UACA,UACA,QACA,UACA,UACA,SACA,YACA,YACA,WACA,UACA,SACA,QACA,UACA,UACA,YACA,YACA,YACA,QACA,QACA,QACA,UACA,YACA,QACA,OACA,SACA,YACA,WACA,YACA,QACA,QACA,OACA,SACA,SACA,OACA,SACA,QACA,SACA,WACA,YACA,WACA,YACA,WACA,QACA,SACA,SACA,OACA,OACA,SACA,SACA,UACA,SACA,UACA,UACA,WACA,UACA,SACA,OACA,SACA,QACA,SACA,WACA,OACA,SACA,QACA,YACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,QACA,OACA,SACA,SACA,OACA,UACA,SACA,QACA,SACA,SACA,UACA,YACA,WACA,QACA,YACA,WACA,WACA,UACA,WACA,OACA,YACA,WACA,UACA,YACA,YACA,YACA,WACA,SACA,WACA,WACA,WACA,UACA,YACA,SACA,QACA,UACA,SACA,SACA,UACA,SACA,UACA,UACA,WACA,WACA,SACA,SACA,YACA,SACA,SACA,SACA,SACA,YACA,YACA,UACA,SACA,WACA,UACA,WACA,YACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,YACA,SACA,SACA,UACA,SACA,WACA,WACA,SACA,YACA,YACA,UACA,WACA,WACA,YACA,WACA,UACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,YACA,UACA,WACA,WACA,WACA,YACA,YACA,SACA,SACA,UACA,SACA,WACA,WACA,WACA,WACA,YACA,UACA,UACA,WACA,UACA,UACA,YACA,SACA,YACA,YACA,UACA,SACA,WACA,YACA,SACA,SACA,UACA,UACA,SACA,SACA,SACA,WACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,YACA,QACA,SACA,SACA,YACA,YACA,UACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,YACA,UACA,WACA,WACA,QACA,QACA,UACA,UACA,YACA,WACA,WACA,WACA,UACA,QACA,UACA,YACA,UACA,SACA,SACA,SACA,WACA,SACA,YACA,OACA,SACA,SACA,UACA,UACA,WACA,SACA,WACA,WACA,YACA,YACA,QACA,UACA,YACA,SACA,UACA,SACA,YACA,UACA,UACA,UACA,WACA,SACA,WACA,YACA,YACA,WACA,YACA,YACA,UACA,UACA,WACA,WACA,YACA,WACA,SACA,SACA,SACA,WACA,UACA,SACA,UACA,YACA,YACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,WACA,SACA,WACA,UACA,SACA,UACA,QACA,WACA,SACA,YACA,SACA,YACA,YACA,UACA,UACA,WACA,YACA,YACA,YACA,OACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,YACA,UACA,QACA,SACA,WACA,UACA,SACA,WACA,WACA,WACA,WACA,SACA,SACA,QACA,UACA,UACA,YACA,YACA,YACA,WACA,WACA,UACA,WACA,YACA,YACA,YACA,SACA,WACA,WACA,WACA,WACA,SACA,WACA,UACA,WACA,SACA,SACA,WACA,YACA,YACA,SACA,WACA,YACA,SACA,YACA,YACA,UACA,UACA,UACA,UACA,WACA,SACA,SACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,YACA,YACA,QACA,SACA,UACA,SACA,UACA,UACA,WACA,QACA,SACA,UACA,UACA,UACA,SACA,UACA,YACA,WACA,WACA,UACA,YACA,YACA,SACA,YACA,SACA,WACA,UACA,YACA,UACA,UACA,WACA,YACA,SACA,SACA,WACA,YACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,QACA,SACA,UACA,OACA,SACA,SACA,WACA,UACA,UACA,WACA,SACA,OACA,SACA,UACA,OACA,UACA,QACA,QACA,UACA,SACA,OACA,OACA,QACA,UACA,OACA,UACA,WACA,WACA,UACA,SACA,WACA,UACA,OACA,SACA,OACA,UACA,UACA,QACA,QACA,YACA,WACA,YACA,YACA,UACA,WACA,SACA,UACA,QACA,UACA,OACA,QACA,WACA,SACA,WACA,SACA,SACA,WACA,YACA,UACA,WACA,YACA,WACA,QACA,QACA,QACA,OACA,OACA,SACA,SACA,OACA,SACA,UACA,UACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,UACA,QACA,SACA,QACA,SACA,SACA,UACA,SACA,UACA,OACA,SACA,SACA,MACA,SACA,OACA,SACA,WACA,UACA,QACA,YACA,UACA,SACA,UACA,QACA,OACA,SACA,UACA,QACA,OACA,OACA,OACA,MACA,UACA,WACA,YACA,SACA,YACA,SACA,YACA,UACA,WACA,QACA,UACA,SACA,YACA,YACA,SACA,WACA,UACA,OACA,OACA,UACA,QACA,OACA,QACA,OACA,QACA,SACA,WACA,SACA,SACA,QACA,SACA,QACA,OACA,WACA,SACA,UACA,YACA,YACA,OACA,SACA,WACA,WACA,WACA,YACA,SACA,UACA,WACA,UACA,YACA,UACA,SACA,WACA,UACA,UACA,YACA,UACA,YACA,YACA,WACA,QACA,WACA,YACA,OACA,QACA,UACA,YACA,QACA,UACA,YACA,UACA,OACA,YACA,QACA,UACA,WACA,QACA,YACA,YACA,UACA,WACA,WACA,YACA,QACA,QACA,SACA,UACA,QACA,UACA,SACA,QACA,YACA,MACA,UACA,SACA,UACA,WACA,QACA,UACA,WACA,UACA,WACA,OACA,UACA,UACA,WACA,QACA,YACA,SACA,WACA,YACA,SACA,QACA,UACA,YACA,WACA,QACA,YACA,SACA,WACA,YACA,SACA,WACA,YACA,WACA,UACA,UACA,YACA,QACA,QACA,WACA,QACA,QACA,UACA,QACA,SACA,YACA,YACA,SACA,YACA,SACA,UACA,QACA,WACA,SACA,YACA,UACA,WACA,WACA,SACA,WACA,WACA,WACA,YACA,YACA,QACA,UACA,UACA,SACA,WACA,SACA,WACA,YACA,SACA,SACA,UACA,YACA,WACA,WACA,UACA,UACA,WACA,QACA,QACA,WACA,YACA,SACA,UACA,WACA,YACA,YACA,SACA,UACA,SACA,YACA,SACA,UACA,WACA,WACA,QACA,SACA,WACA,WACA,WACA,SACA,WACA,UACA,UACA,UACA,SACA,WACA,YACA,YACA,WACA,OACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,SACA,UACA,OACA,SACA,WACA,YACA,YACA,YACA,YACA,WACA,QACA,YACA,SACA,SACA,SACA,WACA,YACA,SACA,SACA,YACA,UACA,WACA,QACA,UACA,UACA,SACA,WACA,UACA,UACA,SACA,WACA,QACA,YACA,YACA,UACA,UACA,WACA,SACA,QACA,SACA,UACA,YACA,UACA,SACA,QACA,QACA,WACA,UACA,YACA,UACA,QACA,QACA,UACA,UACA,QACA,UACA,WACA,QACA,SACA,QACA,UACA,QACA,YACA,UACA,UACA,UACA,YACA,QACA,SACA,OACA,QACA,QACA,QACA,QACA,UACA,SACA,WACA,SACA,SACA,UACA,WACA,YACA,SACA,UACA,SACA,UACA,QACA,UACA,YACA,UACA,QACA,OACA,QACA,YACA,QACA,QACA,WACA,UACA,WACA,WACA,QACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,YACA,SACA,QACA,QACA,UACA,WACA,WACA,SACA,WACA,UACA,UACA,QACA,UACA,YACA,YACA,WACA,QACA,SACA,WACA,WACA,YACA,WACA,SACA,SACA,SACA,SACA,SACA,UACA,WACA,YACA,SACA,QACA,SACA,WACA,UACA,UACA,YACA,OACA,QACA,OACA,MACA,UACA,WACA,UACA,SACA,SACA,SACA,OACA,UACA,WACA,WACA,SACA,SACA,UACA,OACA,YACA,QACA,OACA,OACA,SACA,YACA,SACA,YACA,SACA,WACA,SACA,UACA,YACA,SACA,UACA,SACA,WACA,WACA,UACA,SACA,UACA,MACA,QACA,SACA,SACA,SACA,UACA,WACA,YACA,UACA,UACA,QACA,UACA,WACA,YACA,UACA,UACA,OACA,SACA,SACA,WACA,SACA,UACA,YACA,WACA,WACA,UACA,SACA,SACA,SACA,OACA,QACA,QACA,QACA,SACA,UACA,UACA,WACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,SACA,YACA,UACA,WACA,WACA,QACA,UACA,WACA,WACA,UACA,QACA,YACA,UACA,OACA,UACA,UACA,WACA,YACA,SACA,QACA,OACA,UACA,QACA,WACA,YACA,UACA,WACA,QACA,UACA,OACA,OACA,QACA,QACA,QACA,SACA,QACA,YACA,SACA,SACA,UACA,QACA,SACA,YACA,UACA,WACA,YACA,WACA,WACA,QACA,WACA,YACA,SACA,OACA,OACA,SACA,WACA,SACA,SACA,UACA,WACA,SACA,OACA,YACA,UACA,SACA,OACA,OACA,QACA,QACA,MACA,QACA,UACA,YACA,UACA,WACA,UACA,QACA,WACA,QACA,YACA,QACA,QACA,QACA,UACA,QACA,OACA,SACA,YACA,YACA,UACA,QACA,UACA,SACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,QACA,UACA,UACA,OACA,QACA,QACA,SACA,QACA,QACA,SACA,WACA,QACA,QACA,UACA,WACA,SACA,UACA,SACA,QACA,UACA,UACA,QACA,QACA,WACA,YACA,YACA,UACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,WACA,WACA,YACA,WACA,QACA,OACA,QACA,UACA,SACA,WACA,QACA,YACA,YACA,WACA,YACA,UACA,WACA,UACA,WACA,SACA,YACA,YACA,WACA,YACA,SACA,QACA,YACA,UACA,WACA,YACA,UACA,WACA,QACA,OACA,SACA,YACA,SACA,SACA,QACA,SACA,QACA,QACA,UACA,SACA,UACA,UACA,WACA,UACA,WACA,QACA,SACA,WACA,YACA,UACA,YACA,WACA,YACA,UACA,WACA,SACA,WACA,WACA,SACA,WACA,WACA,WACA,UACA,WACA,UACA,UACA,WACA,SACA,SACA,YACA,SACA,SACA,UACA,QACA,WACA,SACA,QACA,QACA,QACA,WACA,SACA,SACA,WACA,YACA,UACA,UACA,WACA,SACA,UACA,SACA,QACA,SACA,SACA,SACA,QACA,QACA,QACA,SACA,YACA,YACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,OACA,UACA,WACA,WACA,QACA,SACA,WACA,SACA,WACA,WACA,YACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,QACA,WACA,WACA,SACA,SACA,SACA,YACA,UACA,YACA,YACA,SACA,QACA,UACA,QACA,QACA,UACA,WACA,WACA,YACA,UACA,WACA,YACA,YACA,YACA,WACA,WACA,UACA,UACA,QACA,QACA,QACA,SACA,WACA,YACA,SACA,UACA,WACA,WACA,YACA,UACA,QACA,WACA,UACA,YACA,UACA,WACA,SACA,WACA,UACA,WACA,UACA,YACA,UACA,UACA,WACA,QACA,QACA,SACA,YACA,SACA,UACA,SACA,UACA,YACA,UACA,QACA,YACA,WACA,WACA,YACA,QACA,QACA,QACA,YACA,WACA,YACA,YACA,UACA,OACA,SACA,UACA,OACA,SACA,UACA,YACA,YACA,WACA,YACA,UACA,OACA,QACA,UACA,UACA,YACA,SACA,WACA,YACA,QACA,YACA,YACA,UACA,WACA,UACA,WACA,WACA,WACA,SACA,WACA,SACA,UACA,YACA,OACA,SACA,QACA,QACA,QACA,QACA,QACA,YACA,YACA,YACA,UACA,QACA,QACA,SACA,QACA,QACA,YACA,YACA,WACA,UACA,UACA,WACA,YACA,WACA,UACA,YACA,YACA,QACA,QACA,QACA,WACA,UACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,UACA,QACA,QACA,SACA,SACA,SACA,WACA,YACA,QACA,SACA,UACA,SACA,WACA,SACA,SACA,SACA,SACA,WACA,SACA,WACA,SACA,SACA,WACA,YACA,WACA,YACA,SACA,YACA,UACA,WACA,QACA,SACA,QACA,UACA,UACA,UACA,WACA,SACA,QACA,UACA,UACA,SACA,QACA,UACA,WACA,SACA,UACA,YACA,QACA,QACA,UACA,UACA,WACA,QACA,SACA,WACA,SACA,UACA,YACA,UACA,WACA,SACA,QACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,YACA,UACA,WACA,SACA,WACA,UACA,YACA,WACA,YACA,YACA,WACA,SACA,UACA,WACA,YACA,YACA,YACA,UACA,YACA,YACA,UACA,UACA,WACA,YACA,YACA,UACA,WACA,SACA,WACA,WACA,UACA,SACA,SACA,YACA,UACA,YACA,OACA,UACA,SACA,SACA,OACA,WACA,YACA,UACA,SACA,YACA,WACA,QACA,UACA,QACA,WACA,WACA,WACA,SACA,UACA,UACA,UACA,SACA,OACA,SACA,WACA,YACA,SACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,SACA,WACA,SACA,UACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,YACA,SACA,UACA,WACA,UACA,UACA,UACA,UACA,WACA,UACA,YACA,YACA,WACA,SACA,WACA,UACA,YACA,WACA,QACA,UACA,UACA,WACA,YACA,YACA,OACA,YACA,UACA,YACA,OACA,WACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,SACA,UACA,UACA,YACA,YACA,UACA,WACA,WACA,WACA,UACA,WACA,QACA,QACA,SACA,SACA,UACA,UACA,QACA,SACA,QACA,QACA,QACA,WACA,WACA,YACA,WACA,UACA,UACA,WACA,UACA,WACA,WACA,YACA,YACA,QACA,SACA,UACA,UACA,QACA,WACA,SACA,SACA,YACA,UACA,YACA,UACA,SACA,WACA,QACA,OACA,UACA,WACA,UACA,UACA,WACA,UACA,YACA,MACA,UACA,OACA,SACA,SACA,WACA,OACA,QACA,SACA,WACA,QACA,SACA,OACA,SACA,UACA,UACA,UACA,WACA,UACA,WACA,WACA,UACA,UACA,OACA,YACA,SACA,SACA,UACA,QACA,SACA,SACA,WACA,OACA,SACA,QACA,YACA,UACA,QACA,WACA,SACA,WACA,SACA,QACA,SACA,QACA,OACA,OACA,UACA,YACA,OACA,QACA,QACA,WACA,WACA,UACA,UACA,YACA,QACA,SACA,WACA,UACA,UACA,YACA,WACA,WACA,QACA,UACA,QACA,QACA,SACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,SACA,QACA,QACA,QACA,WACA,SACA,SACA,WACA,YACA,SACA,SACA,SACA,WACA,SACA,YACA,SACA,WACA,YACA,YACA,UACA,WACA,OACA,QACA,WACA,WACA,OACA,YACA,UACA,QACA,QACA,QACA,SACA,WACA,UACA,OACA,QACA,UACA,UACA,YACA,YACA,WACA,UACA,OACA,SACA,OACA,OACA,QACA,SACA,UACA,YACA,UACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,OACA,UACA,OACA,SACA,SACA,SACA,UACA,YACA,SACA,SACA,SACA,QACA,UACA,QACA,WACA,UACA,QACA,UACA,YACA,UACA,UACA,WACA,YACA,QACA,UACA,SACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,QACA,QACA,SACA,WACA,WACA,OACA,YACA,WACA,YACA,UACA,QACA,SACA,OACA,UACA,UACA,YACA,SACA,SACA,QACA,WACA,SACA,QACA,WACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,WACA,WACA,UACA,YACA,SACA,WACA,WACA,UACA,QACA,SACA,YACA,WACA,UACA,YACA,UACA,WACA,WACA,UACA,OACA,SACA,WACA,UACA,UACA,UACA,WACA,WACA,SACA,WACA,UACA,UACA,YACA,SACA,WACA,QACA,SACA,QACA,QACA,UACA,QACA,SACA,YACA,UACA,WACA,WACA,YACA,QACA,MACA,QACA,WACA,UACA,UACA,UACA,MACA,UACA,QACA,SACA,WACA,QACA,SACA,UACA,WACA,WACA,YACA,OACA,SACA,UACA,SACA,SACA,OACA,QACA,OACA,MACA,QACA,QACA,QACA,WACA,SACA,YACA,SACA,QACA,QACA,UACA,YACA,OACA,WACA,QACA,QACA,QACA,YACA,UACA,UACA,WACA,SACA,SACA,UACA,SACA,QACA,OACA,QACA,WACA,YACA,QACA,YACA,WACA,SACA,YACA,SACA,YACA,YACA,WACA,UACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,UACA,YACA,WACA,SACA,SACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,UACA,WACA,WACA,YACA,UACA,YACA,YACA,UACA,UACA,SACA,YACA,YACA,UACA,QACA,SACA,UACA,SACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,SACA,YACA,YACA,WACA,UACA,UACA,UACA,UACA,YACA,UACA,YACA,WACA,QACA,YACA,UACA,YACA,SACA,YACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,YACA,YACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,UACA,SACA,YACA,UACA,YACA,WACA,UACA,WACA,UACA,SACA,WACA,SACA,YACA,UACA,WACA,YACA,WACA,YACA,WACA,UACA,YACA,SACA,YACA,YACA,YACA,SACA,WACA,UACA,YACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,SACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,SACA,UACA,WACA,YACA,YACA,WACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,YACA,WACA,UACA,YACA,SACA,SACA,UACA,WACA,UACA,UACA,YACA,YACA,QACA,YACA,YACA,YACA,YACA,YACA,QACA,WACA,YACA,SACA,WACA,OACA,YACA,WACA,WACA,UACA,SACA,YACA,YACA,UACA,UACA,UACA,WACA,WACA,YACA,UACA,SACA,YACA,YACA,YACA,YACA,UACA,WACA,WACA,QACA,YACA,WACA,WACA,WACA,YACA,YACA,UACA,WACA,WACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,UACA,WACA,UACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,UACA,YACA,YACA,WACA,YACA,SACA,WACA,SACA,YACA,WACA,UACA,WACA,WACA,YACA,WACA,YACA,YACA,YACA,YACA,WACA,SACA,YACA,WACA,UACA,WACA,UACA,YACA,YACA,SACA,SACA,YACA,YACA,YACA,WACA,SACA,YACA,YACA,WACA,SACA,YACA,YACA,UACA,SACA,YACA,SACA,WACA,WACA,SACA,SACA,WACA,UACA,WACA,YACA,YACA,UACA,WACA,WACA,YACA,WACA,WACA,SACA,WACA,YACA,SACA,YACA,YACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,SACA,WACA,WACA,SACA,WACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,YACA,UACA,YACA,YACA,WACA,WACA,WACA,SACA,UACA,WACA,YACA,UACA,UACA,YACA,WACA,UACA,WACA,WACA,SACA,QACA,QACA,UACA,WACA,WACA,YACA,SACA,YACA,YACA,YACA,YACA,UACA,YACA,SACA,UACA,WACA,UACA,UACA,WACA,SACA,UACA,WACA,WACA,YACA,WACA,YACA,WACA,WACA,YACA,UACA,WACA,YACA,SACA,WACA,YACA,UACA,QACA,YACA,SACA,WACA,YACA,SACA,UACA,YACA,YACA,YACA,SACA,YACA,WACA,UACA,UACA,YACA,YACA,QACA,SACA,UACA,WACA,YACA,SACA,UACA,UACA,WACA,SACA,SACA,SACA,WACA,YACA,SACA,OACA,QACA,UACA,WACA,UACA,SACA,SACA,UACA,SACA,UACA,WACA,UACA,UACA,WACA,WACA,UACA,SACA,UACA,SACA,WACA,SACA,SACA,UACA,QACA,SACA,WACA,UACA,SACA,SACA,YACA,UACA,SACA,QACA,UACA,OACA,YACA,OACA,QACA,QACA,UACA,UACA,UACA,SACA,SACA,QACA,UACA,SACA,SACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,QACA,SACA,SACA,YACA,QACA,UACA,SACA,SACA,WACA,UACA,YACA,WACA,WACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,SACA,WACA,OACA,QACA,SACA,YACA,SACA,WACA,SACA,WACA,UACA,SACA,YACA,WACA,WACA,YACA,UACA,QACA,QACA,YACA,WACA,UACA,UACA,SACA,QACA,UACA,SACA,YACA,WACA,UACA,OACA,SACA,OACA,UACA,OACA,WACA,YACA,SACA,QACA,OACA,WACA,UACA,QACA,WACA,SACA,UACA,WACA,YACA,WACA,UACA,UACA,YACA,WACA,UACA,UACA,YACA,WACA,SACA,SACA,QACA,QACA,UACA,WACA,QACA,OACA,YACA,UACA,WACA,UACA,UACA,SACA,WACA,UACA,QACA,QACA,WACA,WACA,UACA,WACA,YACA,UACA,YACA,QACA,WACA,WACA,UACA,WACA,QACA,UACA,OACA,WACA,SACA,UACA,UACA,QACA,SACA,UACA,QACA,QACA,SACA,YACA,MACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,OACA,SACA,OACA,UACA,SACA,SACA,QACA,OACA,UACA,SACA,UACA,SACA,WACA,YACA,YACA,WACA,YACA,UACA,SACA,SACA,YACA,UACA,UACA,WACA,YACA,UACA,OACA,UACA,QACA,QACA,WACA,SACA,OACA,WACA,SACA,OACA,QACA,QACA,WACA,QACA,YACA,SACA,QACA,WACA,UACA,QACA,WACA,UACA,WACA,SACA,MACA,OACA,SACA,QACA,SACA,QACA,QACA,YACA,UACA,OACA,OACA,YACA,WACA,UACA,SACA,WACA,WACA,WACA,WACA,SACA,WACA,SACA,YACA,UACA,SACA,YACA,OACA,OACA,QACA,UACA,OACA,OACA,UACA,SACA,WACA,SACA,OACA,QACA,WACA,SACA,OACA,SACA,OACA,OACA,WACA,QACA,UACA,SACA,SACA,WACA,SACA,MACA,OACA,YACA,YACA,YACA,YACA,YACA,UACA,OACA,OACA,SACA,OACA,QACA,OACA,OACA,UACA,UACA,YACA,QACA,YACA,YACA,QACA,QACA,QACA,MACA,UACA,QACA,SACA,WACA,UACA,WACA,SACA,UACA,UACA,UACA,UACA,QACA,UACA,UACA,YAC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","sources":["webpack://@bitwarden/web-vault/webpack/runtime/chunk loaded","webpack://@bitwarden/web-vault/webpack/runtime/create fake namespace object","webpack://@bitwarden/web-vault/webpack/runtime/load script","webpack://@bitwarden/web-vault/./src/app/accounts/register-form/register-form.module.ts","webpack://@bitwarden/web-vault/./src/app/common/base.accept.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/event.view.ts","webpack://@bitwarden/web-vault/./src/app/common/base.events.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/common/base.people.component.ts","webpack://@bitwarden/web-vault/./src/app/components/dynamic-avatar.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/user-verification.component.ts","webpack://@bitwarden/web-vault/./src/app/components/user-verification.component.html","webpack://@bitwarden/web-vault/./src/app/components/user-verification.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/account/account.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/config/config-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/fileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/userVerification/userVerification-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/factories/accountFactory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/factories/globalStateFactory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/factories/stateFactory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/stateVersion.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/global-state.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-avatar.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/notificationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/notification.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/anonymousHub.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/device.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/user-api-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/api-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/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/collection.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/device-verification.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/global-domain.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/domains.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/event.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identity-captcha.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identity-token.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identity-two-factor.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/key-connector-user-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-connection.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-export.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization-sponsorship-sync-status.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profile-organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profile-provider-organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profile-provider.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profile.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/payment.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/plan.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/prelogin.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider-organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/responses/organization-user-bulk-public-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider-user-bulk-public-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider-user-bulk.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider-user.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/provider.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/send-access.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/send-file-download-data.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/send.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/send-file-upload-data.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/sso-pre-validate.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/subscription.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/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/vault/models/response/attachment-upload-data.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/response/folder.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/response/sync.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/audit.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/throttle.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/password-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/auth-result.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/logIn.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/passwordLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/passwordlessLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/sso-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/ssoLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/user-api-login.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/passwordless-auth.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/prelogin.request.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/sequentialize.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/wordlist.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/encrypted-organization-key.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/crypto.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/encrypted-object.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cryptography/encrypt.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cryptography/get-class-initializer.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cryptography/multithread-encrypt.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/event.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/event.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/fileUploadType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/azureFileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/bitwardenFileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/account/set-key-connector-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/key-connector-user-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/login.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/responses/organization-user.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/responses/organization-user-bulk.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization-user/requests/organization-user-bulk.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/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/response/organization/organization-sso.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/password-generator-policy-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/passwordGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/reset-password-policy-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/provider.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/search.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/token.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/stateMigration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/totp.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/account/verify-otp.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/email-forwarders/anon-addy-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/email-forwarders/duck-duck-go-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/email-forwarders/fastmail-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/email-forwarders/firefox-relay-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/email-forwarders/forwarder-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/email-forwarders/simple-login-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/usernameGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/decrypt-parameters.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/abstractions/sync/sync-notifier.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/sorted-ciphers-cache.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-bulk-move.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-bulk-restore.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-bulk-share.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-partial.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-share.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/services/cipher.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/organization.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/services/sync/sync.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/components/password-reprompt.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/services/password-reprompt.service.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/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/vault/services/folder/folder.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/services/folder/folder-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/account/account-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/account/account.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/account/avatar-update.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/collection.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/environment.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/fileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/settings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/vaultTimeout/vaultTimeoutSettings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/vaultTimeout/vaultTimeout.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/export.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/notifications.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/webCryptoFunction.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/event/event-upload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/event/event-collection.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/policy/policy.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/policy/policy-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/send.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/keyConnector.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/userVerification/userVerification.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization/organization.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization-user/organization-user.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/provider.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/formValidationErrors.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/userVerification/userVerification-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization/organization-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/services/sync/sync-notifier.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/vault/app/components/password-reprompt.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/components/password-reprompt.component.html","webpack://@bitwarden/web-vault/./src/vault/app/core/password-reprompt.service.ts","webpack://@bitwarden/web-vault/./src/app/core/broadcaster-messaging.service.ts","webpack://@bitwarden/web-vault/./src/app/core/event.service.ts","webpack://@bitwarden/web-vault/./src/app/core/html-storage.service.ts","webpack://@bitwarden/web-vault/./src/translation-constants.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/core/policy-list.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/./src/app/core/core.module.ts","webpack://@bitwarden/web-vault/./src/app/core/state/global-state.ts","webpack://@bitwarden/web-vault/./src/app/core/i18n.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/i18n.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/translation.service.ts","webpack://@bitwarden/web-vault/./src/app/core/state-migration.service.ts","webpack://@bitwarden/web-vault/./src/app/core/router.service.ts","webpack://@bitwarden/web-vault/./src/app/core/state/account.ts","webpack://@bitwarden/web-vault/./src/app/core/state/state.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/clientType.ts","webpack://@bitwarden/web-vault/./src/app/core/web-platform-utils.service.ts","webpack://@bitwarden/web-vault/./src/app/layouts/footer.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/footer.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/frontend-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/frontend-layout.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/navbar.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/navbar.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/product-switcher/product-switcher-content.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/product-switcher/product-switcher-content.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/product-switcher/product-switcher.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/product-switcher/product-switcher.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/product-switcher/product-switcher.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/core/core-organization.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-update.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-invite.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/core/views/organization-user-admin-view.ts","webpack://@bitwarden/web-vault/./src/app/organizations/core/services/user-admin.service.ts","webpack://@bitwarden/web-vault/./src/app/organizations/core/services/collection-admin.service.ts","webpack://@bitwarden/web-vault/./src/app/organizations/core/services/group/requests/group.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/core/services/group/requests/organization-group-bulk.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/core/services/group/group.service.ts","webpack://@bitwarden/web-vault/./src/app/organizations/core/services/group/responses/group.response.ts","webpack://@bitwarden/web-vault/./src/app/organizations/core/views/collection-access-selection.view.ts","webpack://@bitwarden/web-vault/./src/app/organizations/core/views/collection-admin.view.ts","webpack://@bitwarden/web-vault/./src/app/organizations/core/views/group.view.ts","webpack://@bitwarden/web-vault/./src/app/organizations/create/organization-create.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/create/organization-information.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/create/organization-information.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/guards/org-permissions.guard.ts","webpack://@bitwarden/web-vault/./src/app/organizations/guards/org-redirect.guard.ts","webpack://@bitwarden/web-vault/./src/app/components/organization-switcher.component.html","webpack://@bitwarden/web-vault/./src/app/components/organization-switcher.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/layouts/organization-layout.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/layouts/organization-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-events.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-events.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-bulk-confirm.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/members/components/bulk/bulk-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/members/components/bulk/bulk-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/members/components/bulk/bulk-remove.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/members/components/bulk/bulk-remove.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/members/components/bulk/bulk-status.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/members/components/bulk/bulk-status.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/policy.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/base-policy.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policies.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/disable-send.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/disable-send.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/master-password.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/master-password.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/password-generator.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/password-generator.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/personal-ownership.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/personal-ownership.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/require-sso.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/require-sso.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/reset-password.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/reset-password.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/send-options.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/send-options.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/single-org.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/single-org.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/two-factor-authentication.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/two-factor-authentication.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policy-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policy-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policies.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/policies.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-update.request.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/delete-organization.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/delete-organization.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/account.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/account.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-setup.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/two-factor-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-settings-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-settings.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/settings.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/settings.component.ts","webpack://@bitwarden/web-vault/../../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/./src/app/organizations/shared/components/access-selector/user-type.pipe.ts","webpack://@bitwarden/web-vault/./src/app/organizations/shared/components/access-selector/access-selector.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/shared/components/access-selector/access-selector.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/shared/components/access-selector/access-selector.models.ts","webpack://@bitwarden/web-vault/./src/app/organizations/shared/components/access-selector/access-selector.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/select/option.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/select/select.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/select/select.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/shared/components/collection-dialog/collection-dialog.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/shared/components/collection-dialog/collection-dialog.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/bit-validators/forbidden-characters.validator.ts","webpack://@bitwarden/web-vault/../../libs/components/src/select/select.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/shared/components/collection-dialog/collection-dialog.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/shared/shared-organization.module.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/pipes/pipes.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/collection-badge/collection-badge.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/group-badge/group-badge.module.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/bulk-action-dialogs/bulk-dialogs.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/folder-with-id.request.ts","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/vault/components/attachments.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/attachments.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/attachments.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/collections.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/collections.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/collections.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/components/folder-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/folder-add-edit.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/folder-add-edit.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/types/checkable.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/share.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/share.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/share.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-filter/shared/models/vault-filter.model.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-reset-password-enrollment.request.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/vault/app/vault/vault-filter/shared/components/vault-filter-section.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-filter/shared/components/vault-filter-section.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/log-in-credentials.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/sso.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-filter/components/link-sso.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-filter/components/link-sso.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-filter/components/organization-options.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-filter/components/organization-options.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-filter/components/vault-filter.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-filter/components/vault-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/components/vault-items.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/collection-bulk-delete.request.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/bulk-action-dialogs/bulk-restore-dialog/bulk-restore-dialog.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/bulk-action-dialogs/bulk-restore-dialog/bulk-restore-dialog.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/bulk-action-dialogs/bulk-share-dialog/bulk-share-dialog.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/bulk-action-dialogs/bulk-share-dialog/bulk-share-dialog.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/ellipsis.pipe.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/organization-badge/organization-name-badge.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/organization-badge/organization-name-badge.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/group-badge/group-name-badge.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/group-badge/group-name-badge.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/pipes/get-collection-name.pipe.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/collection-badge/collection-name-badge.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/collection-badge/collection-name.badge.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/pipes/get-organization-name.pipe.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-items.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-items.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/settings/low-kdf.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/low-kdf.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-header/vault-header.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-header/vault-header.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-routing.module.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-accept.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/accept-emergency.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/accept-emergency.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-accept.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/accept-organization.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/accept-organization.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/password-hint.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/hint.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/hint.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/hint.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/lock.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/lock.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/authRequestType.ts","webpack://@bitwarden/web-vault/./src/app/accounts/lock.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/passwordless-create-auth.request.ts","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/angular/src/components/captchaProtected.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/login-with-device.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/login/login-with-device.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/login/login-with-device.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/login.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/login/login.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/login/login.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/delete-recover.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-delete.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-delete.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/two-factor-recovery.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-two-factor.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-two-factor.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/remove-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/remove-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/remove-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/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/./src/app/accounts/sso.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/sso.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/reference-event.request.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-step.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-step.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-step-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-step-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-stepper.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/vertical-stepper/vertical-stepper.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/register.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/validators/inputsFieldMatch.validator.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/register.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/register-form/register-form.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/register-form/register-form.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-forbes.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-forbes.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-us-news.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-us-news.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/confirmation-details.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/confirmation-details.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/billing.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/billing.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/default-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/default-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise1-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise1-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise2-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/enterprise2-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams1-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams1-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams2-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/teams2-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-cnet.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/logo-cnet.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-enterprise-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-enterprise-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-individual-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-individual-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-teams-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/cnet-teams-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/abm-enterprise-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/abm-enterprise-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/abm-teams-content.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/content/abm-teams-content.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/trial-initiation.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/trial-initiation/trial-initiation.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/webauthn_iframe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/two-factor.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/two-factor-options.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor-options.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor-options.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/password.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/update-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/update-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/update-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/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/user-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/user-layout.component.html","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/./src/app/organizations/manage/group-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/group-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/groups.component.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/./src/app/organizations/vault/vault-filter/vault-filter.service.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault-filter/vault-filter.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/collections.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault-filter/vault-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault-items.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault-header/vault-header.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/vault-header/vault-header.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/components/selectable-avatar.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-avatar.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-avatar.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/profile.component.html","webpack://@bitwarden/web-vault/./src/app/settings/profile.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/account.component.html","webpack://@bitwarden/web-vault/./src/app/settings/account.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/create-organization.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/create-organization.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-domains.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/domain-rules.component.html","webpack://@bitwarden/web-vault/./src/app/settings/domain-rules.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-view.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-view.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/emergencyAccessStatusType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/emergencyAccessType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-confirm.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-invite.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-update.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-confirm.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergency-access-password.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-takeover.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-takeover.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/settings/vault-timeout-input.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/vault-timeout-input.component.html","webpack://@bitwarden/web-vault/./src/app/settings/vault-timeout-input.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/preferences.component.html","webpack://@bitwarden/web-vault/./src/app/settings/preferences.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/send-with-id.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-password.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/kdf.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/security-keys.component.html","webpack://@bitwarden/web-vault/./src/app/settings/security-keys.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/security.component.html","webpack://@bitwarden/web-vault/./src/app/settings/security.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/security-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/settings/settings.component.html","webpack://@bitwarden/web-vault/./src/app/settings/settings.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/validators/notAllowedValueAsync.validator.ts","webpack://@bitwarden/web-vault/./src/app/settings/sponsoring-org-row.component.html","webpack://@bitwarden/web-vault/./src/app/settings/sponsoring-org-row.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/sponsored-families.component.html","webpack://@bitwarden/web-vault/./src/app/settings/sponsored-families.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/billing-history-view.component.html","webpack://@bitwarden/web-vault/./src/app/settings/billing-history-view.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/premium.component.html","webpack://@bitwarden/web-vault/./src/app/settings/premium.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/subscription.component.html","webpack://@bitwarden/web-vault/./src/app/settings/subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/user-subscription.component.html","webpack://@bitwarden/web-vault/./src/app/settings/user-subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/subscription-routing.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/generator.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/password-generator-history.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/select-copy.directive.ts","webpack://@bitwarden/web-vault/./src/app/tools/password-generator-history.component.html","webpack://@bitwarden/web-vault/./src/app/tools/password-generator-history.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/generator.component.html","webpack://@bitwarden/web-vault/./src/app/tools/generator.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/tools.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/tools.component.html","webpack://@bitwarden/web-vault/./src/app/oss-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/shared/guards/has-premium.guard.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/breach-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/breach-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-breach.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-exposed-passwords.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-inactive-two-factor.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-reused-passwords.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-unsecured-websites.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/icons/report-weak-passwords.icon.ts","webpack://@bitwarden/web-vault/./src/app/reports/reports.ts","webpack://@bitwarden/web-vault/./src/app/reports/shared/reports-shared.module.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/reports-home.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/reports-home.component.html","webpack://@bitwarden/web-vault/./src/app/reports/reports-layout.component.html","webpack://@bitwarden/web-vault/./src/app/reports/reports-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/reports-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/reports/reports.module.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/cipher-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/exposed-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/exposed-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/inactive-two-factor-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/inactive-two-factor-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/reused-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/reused-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/unsecured-websites-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/unsecured-websites-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/pages/weak-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/pages/weak-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/shared/models/report-variant.ts","webpack://@bitwarden/web-vault/./src/app/reports/shared/report-card/report-card.component.html","webpack://@bitwarden/web-vault/./src/app/reports/shared/report-card/report-card.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/shared/report-list/report-list.component.html","webpack://@bitwarden/web-vault/./src/app/reports/shared/report-list/report-list.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/storage.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/adjust-storage.component.html","webpack://@bitwarden/web-vault/./src/app/settings/adjust-storage.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/api-key.component.html","webpack://@bitwarden/web-vault/./src/app/settings/api-key.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/transactionType.ts","webpack://@bitwarden/web-vault/./src/app/settings/billing-history.component.html","webpack://@bitwarden/web-vault/./src/app/settings/billing-history.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-create.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-upgrade.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/provider-organization-create.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/organization-plans.component.html","webpack://@bitwarden/web-vault/./src/app/settings/organization-plans.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/verify-bank.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/bit-pay-invoice.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/add-credit.component.html","webpack://@bitwarden/web-vault/./src/app/settings/add-credit.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/payment.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/adjust-payment.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/adjust-payment.component.html","webpack://@bitwarden/web-vault/./src/app/settings/payment-method.component.html","webpack://@bitwarden/web-vault/./src/app/settings/payment-method.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/payment.component.html","webpack://@bitwarden/web-vault/./src/app/settings/payment.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/purge-vault.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/purge-vault.component.html","webpack://@bitwarden/web-vault/./src/app/settings/tax-info.component.html","webpack://@bitwarden/web-vault/./src/app/settings/tax-info.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/two-factor-provider.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-base.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-duo.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-duo.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-duo.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-authenticator.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-authenticator.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-authenticator.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-email.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-email.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-email.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-recovery.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-recovery.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-web-authn-delete.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-web-authn.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-webauthn.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-webauthn.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-two-factor-yubio-otp.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-yubikey.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-yubikey.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-verify.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-verify.component.html","webpack://@bitwarden/web-vault/./src/app/settings/update-license.component.html","webpack://@bitwarden/web-vault/./src/app/settings/update-license.component.ts","webpack://@bitwarden/web-vault/./src/app/shared/loose-components.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/async-actions/async-actions.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/avatar/avatar.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/badge-list/badge-list.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/color-password/color-password.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/dialog.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon/icon.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/table/table.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tabs.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/toggle-group/toggle-group.module.ts","webpack://@bitwarden/web-vault/./src/app/shared/locales.ts","webpack://@bitwarden/web-vault/./src/app/shared/shared.module.ts","webpack://@bitwarden/web-vault/./src/utils/flags.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/not-premium.directive.ts","webpack://@bitwarden/web-vault/./src/vault/app/components/premium-badge.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/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/vault/app/vault/add-edit-custom-fields.component.html","webpack://@bitwarden/web-vault/./src/vault/app/vault/add-edit-custom-fields.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/components/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/organization-badge/organization-badge.module.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-filter/services/abstractions/vault-filter.service.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-filter/services/vault-filter.service.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-filter/shared/vault-filter-shared.module.ts","webpack://@bitwarden/web-vault/./src/vault/app/vault/vault-filter/vault-filter.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/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/components/modal/modal.ref.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/a11y-title.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/api-action.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/autofocus.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/input-verbatim.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/stop-click.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/stop-prop.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/auth.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/lock.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/unauth.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/toastr.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/credit-card-number.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/jslib.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/i18n.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/search.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/user-name.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/user-type.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/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/angular/src/directives/fallback-src.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/components/icon.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/components/icon.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/account/account-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/account/avatar-update.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/anonymousHub.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/appId.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/audit.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/auth.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/broadcaster.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/collection.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/crypto.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/cryptoFunction.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/encrypt.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/environment.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/event/event-collection.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/event/event-upload.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/formValidationErrors.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/i18n.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/translation.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/keyConnector.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/log.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/login.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/messaging.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/notifications.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/organization-user.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-reset-password.request.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/platformUtils.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/policy/policy-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/policy/policy.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/provider.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/search.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/send.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/settings.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/token.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/totp.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/twoFactor.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/userVerification/userVerification.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/usernameGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/validation.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/vaultTimeout/vaultTimeout.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/vaultTimeout/vaultTimeoutSettings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/authenticationStatus.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/authenticationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/deviceType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/encryptionType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/eventType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/fieldType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/hashPurpose.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/htmlStorageLocation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/kdfType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/keySuffixOptions.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/linkedIdType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/logLevelType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationApiKeyType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationConnectionType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationUserStatusType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationUserType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/paymentMethodType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/planType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/policyType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/productType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/providerUserStatusType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/providerUserType.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/ssoEnums.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/themeType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/twoFactorProviderType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/uriMatchType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/verificationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/flags.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/linkedFieldOption.decorator.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/serviceUtils.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/utils.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/card.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/field.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/identity.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/login-uri.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/login.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/permissions.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/secure-note.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/send-file.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/send-text.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/sso-config.api.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/policy.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/provider.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/collection.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/domain-base.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/enc-array-buffer.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/enc-string.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/environment-urls.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/generated-password-history.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/kdf-config.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/master-password-policy-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/organization.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/policy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send-file.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send-text.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/symmetric-crypto-key.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/tree-node.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/collection.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identity-token/token-two-factor.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/keys.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-api-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-connection.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-keys.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization-tax-info-update.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/secret-verification.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/selection-read-only.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/send.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/tax-info-update.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/two-factor-email.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/base.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/emergency-access.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/error.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/list.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/policy.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/selection-read-only.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/collection.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/models/view/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/common/src/vault/abstractions/cipher.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/abstractions/folder/folder-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/abstractions/folder/folder.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/abstractions/password-reprompt.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/abstractions/sync/sync.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/enums/cipher-reprompt-type.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/enums/cipher-type.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/attachment.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/card.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/cipher.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/field.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/folder.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/identity.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/login-uri.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/login.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/password-history.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/secure-note.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/attachment.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/card.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/cipher.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/field.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/folder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/identity.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/login-uri.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/login.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/password.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/secure-note.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-bulk-delete.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-collections.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-create.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-with-id.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/attachment.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/folder.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/response/attachment.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/response/password-history.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/response/cipher.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/attachment.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/card.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/cipher.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/field.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/folder.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/identity.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/item.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/login-uri.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/login.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/password-history.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/secure-note.view.ts","webpack://@bitwarden/web-vault/../../libs/components/src/async-actions/bit-action.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/async-actions/bit-submit.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/async-actions/form-button.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/avatar/avatar.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/badge-list/badge-list.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/badge-list/badge-list.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/breadcrumbs/breadcrumb.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/breadcrumbs/breadcrumb.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/breadcrumbs/breadcrumbs.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/breadcrumbs/breadcrumbs.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/breadcrumbs/breadcrumbs.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/checkbox/checkbox.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/checkbox/checkbox.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/color-password/color-password.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/animations.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/simple-configurable-dialog/simple-configurable-dialog.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/simple-configurable-dialog/simple-configurable-dialog.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/dialog.service.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/dialog/dialog.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/dialog/dialog.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/directives/dialog-close.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/directives/dialog-title-container.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/simple-configurable-dialog/models/simple-dialog-close-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/simple-configurable-dialog/models/simple-dialog-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/simple-dialog/simple-dialog.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/simple-dialog/simple-dialog.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-control/form-control.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-control/form-control.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/form-control/form-control.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-control/form-control.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-control/hint.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-control/label.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/error-summary.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field-control.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/error.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/input/input.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/password-input-toggle.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/prefix.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/suffix.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon-button/icon-button.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon-button/icon-button.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/icon-button/icon-button.module.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/icon/icons/search.ts","webpack://@bitwarden/web-vault/../../libs/components/src/input/input.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/link/link.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/link/link.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-divider.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-divider.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-item.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-trigger-for.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/multi-select/multi-select.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/radio-button/radio-button.module.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.html","webpack://@bitwarden/web-vault/../../libs/components/src/table/table.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/shared/tab-header.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/shared/tab-list-container.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/shared/tab-list-item.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-group/tab-body.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-group/tab-group.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-group/tab-body.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-group/tab-group.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-group/tab-label.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-group/tab.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-group/tab.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-nav-bar/tab-link.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-nav-bar/tab-link.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-nav-bar/tab-nav-bar.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tab-nav-bar/tab-nav-bar.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/utils/function-to-observable.ts","webpack://@bitwarden/web-vault/webpack/bootstrap","webpack://@bitwarden/web-vault/webpack/runtime/compat get default export","webpack://@bitwarden/web-vault/webpack/runtime/define property getters","webpack://@bitwarden/web-vault/webpack/runtime/ensure chunk","webpack://@bitwarden/web-vault/webpack/runtime/get javascript chunk filename","webpack://@bitwarden/web-vault/webpack/runtime/get mini-css chunk filename","webpack://@bitwarden/web-vault/webpack/runtime/global","webpack://@bitwarden/web-vault/webpack/runtime/hasOwnProperty shorthand","webpack://@bitwarden/web-vault/webpack/runtime/make namespace object","webpack://@bitwarden/web-vault/webpack/runtime/node module decorator","webpack://@bitwarden/web-vault/webpack/runtime/publicPath","webpack://@bitwarden/web-vault/webpack/runtime/jsonp chunk loading","webpack://@bitwarden/web-vault/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"@bitwarden/web-vault:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { RegisterFormComponent } from \"./register-form.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [RegisterFormComponent],\n exports: [RegisterFormComponent],\n})\nexport class RegisterFormModule {}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Directive()\nexport abstract class BaseAcceptComponent implements OnInit {\n loading = true;\n authed = false;\n email: string;\n actionPromise: Promise;\n\n protected requiredParameters: string[] = [];\n protected failedShortMessage = \"inviteAcceptFailedShort\";\n protected failedMessage = \"inviteAcceptFailed\";\n\n constructor(\n protected router: Router,\n protected platformUtilService: PlatformUtilsService,\n protected i18nService: I18nService,\n protected route: ActivatedRoute,\n protected stateService: StateService\n ) {}\n\n abstract authedHandler(qParams: Params): Promise;\n abstract unauthedHandler(qParams: Params): Promise;\n\n ngOnInit() {\n // eslint-disable-next-line rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n let error = this.requiredParameters.some((e) => qParams?.[e] == null || qParams[e] === \"\");\n let errorMessage: string = null;\n if (!error) {\n this.authed = await this.stateService.getIsAuthenticated();\n this.email = qParams.email;\n\n if (this.authed) {\n try {\n await this.authedHandler(qParams);\n } catch (e) {\n error = true;\n errorMessage = e.message;\n }\n } else {\n await this.unauthedHandler(qParams);\n }\n }\n\n if (error) {\n const message =\n errorMessage != null\n ? this.i18nService.t(this.failedShortMessage, errorMessage)\n : this.i18nService.t(this.failedMessage);\n this.platformUtilService.showToast(\"error\", null, message, { timeout: 10000 });\n this.router.navigate([\"/\"]);\n }\n\n this.loading = false;\n });\n }\n}\n","import { EventSystemUser } from \"../../enums/event-system-user\";\nimport { EventType } from \"../../enums/eventType\";\n\nexport class EventView {\n message: string;\n humanReadableMessage: string;\n appIcon: string;\n appName: string;\n userId: string;\n userName: string;\n userEmail: string;\n date: string;\n ip: string;\n type: EventType;\n installationId: string;\n systemUser: EventSystemUser;\n\n constructor(data: Required) {\n this.message = data.message;\n this.humanReadableMessage = data.humanReadableMessage;\n this.appIcon = data.appIcon;\n this.appName = data.appName;\n this.userId = data.userId;\n this.userName = data.userName;\n this.userEmail = data.userEmail;\n this.date = data.date;\n this.ip = data.ip;\n this.type = data.type;\n this.installationId = data.installationId;\n this.systemUser = data.systemUser;\n }\n}\n","import { Directive } from \"@angular/core\";\n\nimport { ExportService } from \"@bitwarden/common/abstractions/export.service\";\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { EventResponse } from \"@bitwarden/common/models/response/event.response\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { EventView } from \"@bitwarden/common/models/view/event.view\";\n\nimport { EventService } from \"../core\";\n\n@Directive()\nexport abstract class BaseEventsComponent {\n loading = true;\n loaded = false;\n events: EventView[];\n start: string;\n end: string;\n dirtyDates = true;\n continuationToken: string;\n refreshPromise: Promise;\n exportPromise: Promise;\n morePromise: Promise;\n\n abstract readonly exportFileName: string;\n\n constructor(\n protected eventService: EventService,\n protected i18nService: I18nService,\n protected exportService: ExportService,\n protected platformUtilsService: PlatformUtilsService,\n protected logService: LogService,\n protected fileDownloadService: FileDownloadService\n ) {\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n }\n\n async exportEvents() {\n if (this.appApiPromiseUnfulfilled() || this.dirtyDates) {\n return;\n }\n\n this.loading = true;\n\n const dates = this.parseDates();\n if (dates == null) {\n return;\n }\n\n try {\n this.exportPromise = this.export(dates[0], dates[1]);\n\n await this.exportPromise;\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n\n this.exportPromise = null;\n this.loading = false;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.appApiPromiseUnfulfilled()) {\n return;\n }\n\n const dates = this.parseDates();\n if (dates == null) {\n return;\n }\n\n this.loading = true;\n let events: EventView[] = [];\n try {\n const promise = this.loadAndParseEvents(\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n const result = await promise;\n this.continuationToken = result.continuationToken;\n events = result.events;\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.dirtyDates = false;\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n\n protected abstract requestEvents(\n startDate: string,\n endDate: string,\n continuationToken: string\n ): Promise>;\n protected abstract getUserName(r: EventResponse, userId: string): { name: string; email: string };\n\n protected async loadAndParseEvents(\n startDate: string,\n endDate: string,\n continuationToken: string\n ) {\n const response = await this.requestEvents(startDate, endDate, continuationToken);\n\n const events = await Promise.all(\n response.data.map(async (r) => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = await this.eventService.getEventInfo(r);\n const user = this.getUserName(r, userId);\n const userName = user != null ? user.name : this.i18nService.t(\"unknown\");\n\n return new EventView({\n message: eventInfo.message,\n humanReadableMessage: eventInfo.humanReadableMessage,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: userName,\n userEmail: user != null ? user.email : \"\",\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n installationId: r.installationId,\n systemUser: r.systemUser,\n });\n })\n );\n return { continuationToken: response.continuationToken, events: events };\n }\n\n protected parseDates() {\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidDateRange\")\n );\n return null;\n }\n return dates;\n }\n\n protected appApiPromiseUnfulfilled() {\n return this.refreshPromise != null || this.morePromise != null || this.exportPromise != null;\n }\n\n private async export(start: string, end: string) {\n let continuationToken = this.continuationToken;\n let events = [].concat(this.events);\n\n while (continuationToken != null) {\n const result = await this.loadAndParseEvents(start, end, continuationToken);\n continuationToken = result.continuationToken;\n events = events.concat(result.events);\n }\n\n const data = await this.exportService.getEventExport(events);\n const fileName = this.exportService.getFileName(this.exportFileName, \"csv\");\n this.fileDownloadService.download({\n fileName,\n blobData: data,\n blobOptions: { type: \"text/plain\" },\n });\n }\n}\n","
\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Component({\n selector: \"app-user-confirm\",\n templateUrl: \"user-confirm.component.html\",\n})\nexport class UserConfirmComponent implements OnInit {\n @Input() name: string;\n @Input() userId: string;\n @Input() publicKey: Uint8Array;\n @Output() onConfirmedUser = new EventEmitter();\n\n dontAskAgain = false;\n loading = true;\n fingerprint: string;\n formPromise: Promise;\n\n constructor(\n private cryptoService: CryptoService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n try {\n if (this.publicKey != null) {\n const fingerprint = await this.cryptoService.getFingerprint(\n this.userId,\n this.publicKey.buffer\n );\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join(\"-\");\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.loading = false;\n }\n\n async submit() {\n if (this.loading) {\n return;\n }\n\n if (this.dontAskAgain) {\n await this.stateService.setAutoConfirmFingerprints(true);\n }\n\n this.onConfirmedUser.emit();\n }\n}\n","import { Directive, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\nimport { ProviderUserStatusType } from \"@bitwarden/common/enums/providerUserStatusType\";\nimport { ProviderUserType } from \"@bitwarden/common/enums/providerUserType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { ProviderUserUserDetailsResponse } from \"@bitwarden/common/models/response/provider/provider-user.response\";\n\nimport { OrganizationUserView } from \"../organizations/core/views/organization-user.view\";\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 | OrganizationUserView\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 | UserType[]>;\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 if (response instanceof ListResponse) {\n this.allUsers = response.data != null && response.data.length > 0 ? response.data : [];\n } else if (Array.isArray(response)) {\n this.allUsers = response;\n }\n\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: UserType, select?: boolean) {\n (user as any).checked = select == null ? !(user as any).checked : select;\n }\n\n selectAll(select: boolean) {\n if (select) {\n this.selectAll(false);\n }\n\n const filteredUsers = this.searchPipe.transform(\n this.users,\n this.searchText,\n \"name\",\n \"email\",\n \"id\"\n );\n\n const selectCount =\n select && filteredUsers.length > MaxCheckedCount ? MaxCheckedCount : filteredUsers.length;\n for (let i = 0; i < selectCount; i++) {\n this.checkUser(filteredUsers[i], select);\n }\n }\n\n async resetPaging() {\n this.pagedUsers = [];\n this.loadMore();\n }\n\n invite() {\n this.edit(null);\n }\n\n protected async removeUserConfirmationDialog(user: UserType) {\n return this.platformUtilsService.showDialog(\n this.i18nService.t(\"removeUserConfirmation\"),\n this.userNamePipe.transform(user),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n }\n\n async remove(user: UserType) {\n const confirmed = await this.removeUserConfirmationDialog(user);\n if (!confirmed) {\n return false;\n }\n\n this.actionPromise = this.deleteUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedUserId\", this.userNamePipe.transform(user))\n );\n this.removeUser(user);\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async revoke(user: UserType) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.revokeWarningMessage(),\n this.i18nService.t(\"revokeUserId\", this.userNamePipe.transform(user)),\n this.i18nService.t(\"revokeAccess\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n this.actionPromise = this.revokeUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"revokedUserId\", this.userNamePipe.transform(user))\n );\n await this.load();\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async restore(user: UserType) {\n this.actionPromise = this.restoreUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"restoredUserId\", this.userNamePipe.transform(user))\n );\n await this.load();\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async reinvite(user: UserType) {\n if (this.actionPromise != null) {\n return;\n }\n\n this.actionPromise = this.reinviteUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenReinvited\", this.userNamePipe.transform(user))\n );\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async confirm(user: UserType) {\n function updateUser(self: BasePeopleComponent) {\n user.status = self.userStatusType.Confirmed;\n const mapIndex = self.statusMap.get(self.userStatusType.Accepted).indexOf(user);\n if (mapIndex > -1) {\n self.statusMap.get(self.userStatusType.Accepted).splice(mapIndex, 1);\n self.statusMap.get(self.userStatusType.Confirmed).push(user);\n }\n }\n\n const confirmUser = async (publicKey: Uint8Array) => {\n try {\n this.actionPromise = this.confirmUser(user, publicKey);\n await this.actionPromise;\n updateUser(this);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenConfirmed\", this.userNamePipe.transform(user))\n );\n } catch (e) {\n this.validationService.showError(e);\n throw e;\n } finally {\n this.actionPromise = null;\n }\n };\n\n if (this.actionPromise != null) {\n return;\n }\n\n try {\n const publicKeyResponse = await this.apiService.getUserPublicKey(user.userId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n const autoConfirm = await this.stateService.getAutoConfirmFingerPrints();\n if (autoConfirm == null || !autoConfirm) {\n const [modal] = await this.modalService.openViewRef(\n UserConfirmComponent,\n this.confirmModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.userId = user != null ? user.userId : null;\n comp.publicKey = publicKey;\n // eslint-disable-next-line rxjs/no-async-subscribe\n comp.onConfirmedUser.subscribe(async () => {\n try {\n comp.formPromise = confirmUser(publicKey);\n await comp.formPromise;\n modal.close();\n } catch (e) {\n this.logService.error(e);\n }\n });\n }\n );\n return;\n }\n\n try {\n const fingerprint = await this.cryptoService.getFingerprint(user.userId, publicKey.buffer);\n this.logService.info(`User's fingerprint: ${fingerprint.join(\"-\")}`);\n } catch (e) {\n this.logService.error(e);\n }\n await confirmUser(publicKey);\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.users && this.users.length > this.pageSize;\n }\n\n protected revokeWarningMessage(): string {\n return this.i18nService.t(\"revokeUserConfirmation\");\n }\n\n protected getCheckedUsers() {\n return this.users.filter((u) => (u as any).checked);\n }\n\n protected removeUser(user: UserType) {\n let index = this.users.indexOf(user);\n if (index > -1) {\n this.users.splice(index, 1);\n this.resetPaging();\n }\n\n index = this.allUsers.indexOf(user);\n if (index > -1) {\n this.allUsers.splice(index, 1);\n }\n\n if (this.statusMap.has(user.status)) {\n index = this.statusMap.get(user.status).indexOf(user);\n if (index > -1) {\n this.statusMap.get(user.status).splice(index, 1);\n }\n }\n }\n}\n","import { Component, Input, OnDestroy } from \"@angular/core\";\nimport { Observable, Subject } from \"rxjs\";\n\nimport { AvatarUpdateService } from \"@bitwarden/common/abstractions/account/avatar-update.service\";\ntype SizeTypes = \"xlarge\" | \"large\" | \"default\" | \"small\" | \"xsmall\";\n@Component({\n selector: \"dynamic-avatar\",\n template: `\n \n \n `,\n})\nexport class DynamicAvatarComponent implements OnDestroy {\n @Input() border = false;\n @Input() id: string;\n @Input() text: string;\n @Input() title: string;\n @Input() size: SizeTypes = \"default\";\n color$: Observable;\n private destroy$ = new Subject();\n\n constructor(private accountUpdateService: AvatarUpdateService) {\n if (this.text) {\n this.text = this.text.toUpperCase();\n }\n this.color$ = this.accountUpdateService.avatarUpdate$;\n }\n\n async ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { ControlValueAccessor, FormControl } from \"@angular/forms\";\n\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { VerificationType } from \"@bitwarden/common/enums/verificationType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\n/**\n * Used for general-purpose user verification throughout the app.\n * Collects the user's master password, or if they are using Key Connector, prompts for an OTP via email.\n * This is exposed to the parent component via the ControlValueAccessor interface (e.g. bind it to a FormControl).\n * Use UserVerificationService to verify the user's input.\n */\n@Directive({\n selector: \"app-user-verification\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class UserVerificationComponent implements ControlValueAccessor, OnInit {\n usesKeyConnector = false;\n disableRequestOTP = false;\n sentCode = false;\n\n secret = new FormControl(\"\");\n\n private onChange: (value: Verification) => void;\n\n constructor(\n private keyConnectorService: KeyConnectorService,\n private userVerificationService: UserVerificationService\n ) {}\n\n async ngOnInit() {\n this.usesKeyConnector = await this.keyConnectorService.getUsesKeyConnector();\n this.processChanges(this.secret.value);\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n this.secret.valueChanges.subscribe((secret: string) => this.processChanges(secret));\n }\n\n async requestOTP() {\n if (this.usesKeyConnector) {\n this.disableRequestOTP = true;\n try {\n await this.userVerificationService.requestOTP();\n this.sentCode = true;\n } finally {\n this.disableRequestOTP = false;\n }\n }\n }\n\n writeValue(obj: any): void {\n this.secret.setValue(obj);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n // Not implemented\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disableRequestOTP = isDisabled;\n if (isDisabled) {\n this.secret.disable();\n } else {\n this.secret.enable();\n }\n }\n\n private processChanges(secret: string) {\n if (this.onChange == null) {\n return;\n }\n\n this.onChange({\n type: this.usesKeyConnector ? VerificationType.OTP : VerificationType.MasterPassword,\n secret: Utils.isNullOrWhitespace(secret) ? null : secret,\n });\n }\n}\n","\n \n \n {{ \"confirmIdentity\" | i18n }}\n\n\n
\n \n \n {{ \"sendCode\" | i18n }}\n \n \n \n {{ \"codeSent\" | i18n }}\n \n
\n\n
\n \n \n {{ \"confirmIdentity\" | i18n }}\n
\n
\n","import { animate, style, transition, trigger } from \"@angular/animations\";\nimport { Component } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\nimport { UserVerificationComponent as BaseComponent } from \"@bitwarden/angular/components/user-verification.component\";\n\n@Component({\n selector: \"app-user-verification\",\n templateUrl: \"user-verification.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: UserVerificationComponent,\n },\n ],\n animations: [\n trigger(\"sent\", [\n transition(\":enter\", [style({ opacity: 0 }), animate(\"100ms\", style({ opacity: 1 }))]),\n ]),\n ],\n})\nexport class UserVerificationComponent extends BaseComponent {}\n","export abstract class AccountService {}\n\nexport abstract class InternalAccountService extends AccountService {\n abstract delete(): void;\n}\n","import { ServerConfigResponse } from \"../../models/response/server-config.response\";\n\nexport abstract class ConfigApiServiceAbstraction {\n get: () => Promise;\n}\n","import { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { SendFileUploadDataResponse } from \"../models/response/send-file-upload-data.response\";\nimport { AttachmentUploadDataResponse } from \"../vault/models/response/attachment-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 { VerifyOTPRequest } from \"../../models/request/account/verify-otp.request\";\n\nexport abstract class UserVerificationApiServiceAbstraction {\n postAccountVerifyOTP: (request: VerifyOTPRequest) => Promise;\n postAccountRequestOTP: () => Promise;\n}\n","import { Account } from \"../models/domain/account\";\n\nexport class AccountFactory {\n private accountConstructor: new (init: Partial) => T;\n\n constructor(accountConstructor: new (init: Partial) => T) {\n this.accountConstructor = accountConstructor;\n }\n\n create(args: Partial) {\n return new this.accountConstructor(args);\n }\n}\n","import { GlobalState } from \"../models/domain/global-state\";\n\nexport class GlobalStateFactory {\n private globalStateConstructor: new (init: Partial) => T;\n\n constructor(globalStateConstructor: new (init: Partial) => T) {\n this.globalStateConstructor = globalStateConstructor;\n }\n\n create(args?: Partial) {\n return new this.globalStateConstructor(args);\n }\n}\n","import { Account } from \"../models/domain/account\";\nimport { GlobalState } from \"../models/domain/global-state\";\n\nimport { AccountFactory } from \"./accountFactory\";\nimport { GlobalStateFactory } from \"./globalStateFactory\";\n\nexport class StateFactory<\n TGlobal extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n private globalStateFactory: GlobalStateFactory;\n private accountFactory: AccountFactory;\n\n constructor(\n globalStateConstructor: new (init: Partial) => TGlobal,\n accountConstructor: new (init: Partial) => TAccount\n ) {\n this.globalStateFactory = new GlobalStateFactory(globalStateConstructor);\n this.accountFactory = new AccountFactory(accountConstructor);\n }\n\n createGlobal(args: Partial): TGlobal {\n return this.globalStateFactory.create(args);\n }\n\n createAccount(args: Partial): TAccount {\n return this.accountFactory.create(args);\n }\n}\n","export enum StateVersion {\n One = 1, // Original flat key/value pair store\n Two = 2, // Move to a typed State object\n Three = 3, // Fix migration of users' premium status\n Four = 4, // Fix 'Never Lock' option by removing stale data\n Five = 5, // Migrate to new storage of encrypted organization keys\n Six = 6, // Delete account.keys.legacyEtmKey property\n Latest = Six,\n}\n","import { StateVersion } from \"../../enums/stateVersion\";\nimport { ThemeType } from \"../../enums/themeType\";\n\nimport { EnvironmentUrls } from \"./environment-urls\";\nimport { WindowState } from \"./window-state\";\n\nexport class GlobalState {\n enableAlwaysOnTop?: boolean;\n installedVersion?: string;\n locale?: string;\n organizationInvitation?: any;\n ssoCodeVerifier?: string;\n ssoOrganizationIdentifier?: string;\n ssoState?: string;\n rememberedEmail?: string;\n theme?: ThemeType = ThemeType.System;\n window?: WindowState = new WindowState();\n twoFactorToken?: string;\n disableFavicon?: boolean;\n biometricAwaitingAcceptance?: boolean;\n biometricFingerprintValidated?: boolean;\n vaultTimeout?: number;\n vaultTimeoutAction?: string;\n loginRedirect?: any;\n mainWindowSize?: number;\n enableBiometrics?: boolean;\n biometricText?: string;\n noAutoPromptBiometrics?: boolean;\n noAutoPromptBiometricsText?: string;\n stateVersion: StateVersion = StateVersion.One;\n environmentUrls: EnvironmentUrls = new EnvironmentUrls();\n enableTray?: boolean;\n enableMinimizeToTray?: boolean;\n enableCloseToTray?: boolean;\n enableStartToTray?: boolean;\n openAtLogin?: boolean;\n alwaysShowDock?: boolean;\n enableBrowserIntegration?: boolean;\n enableBrowserIntegrationFingerprint?: boolean;\n enableDuckDuckGoBrowserIntegration?: boolean;\n}\n","export class UpdateAvatarRequest {\n avatarColor: string;\n\n constructor(avatarColor: string) {\n this.avatarColor = avatarColor;\n }\n}\n","export enum NotificationType {\n SyncCipherUpdate = 0,\n SyncCipherCreate = 1,\n SyncLoginDelete = 2,\n SyncFolderDelete = 3,\n SyncCiphers = 4,\n\n SyncVault = 5,\n SyncOrgKeys = 6,\n SyncFolderCreate = 7,\n SyncFolderUpdate = 8,\n SyncCipherDelete = 9,\n SyncSettings = 10,\n\n LogOut = 11,\n\n SyncSendCreate = 12,\n SyncSendUpdate = 13,\n SyncSendDelete = 14,\n\n AuthRequest = 15,\n AuthRequestResponse = 16,\n}\n","import { NotificationType } from \"../../enums/notificationType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class NotificationResponse extends BaseResponse {\n contextId: string;\n type: NotificationType;\n payload: any;\n\n constructor(response: any) {\n super(response);\n this.contextId = this.getResponseProperty(\"ContextId\");\n this.type = this.getResponseProperty(\"Type\");\n\n const payload = this.getResponseProperty(\"Payload\");\n switch (this.type) {\n case NotificationType.SyncCipherCreate:\n case NotificationType.SyncCipherDelete:\n case NotificationType.SyncCipherUpdate:\n case NotificationType.SyncLoginDelete:\n this.payload = new SyncCipherNotification(payload);\n break;\n case NotificationType.SyncFolderCreate:\n case NotificationType.SyncFolderDelete:\n case NotificationType.SyncFolderUpdate:\n this.payload = new SyncFolderNotification(payload);\n break;\n case NotificationType.SyncVault:\n case NotificationType.SyncCiphers:\n case NotificationType.SyncOrgKeys:\n case NotificationType.SyncSettings:\n case NotificationType.LogOut:\n this.payload = new UserNotification(payload);\n break;\n case NotificationType.SyncSendCreate:\n case NotificationType.SyncSendUpdate:\n case NotificationType.SyncSendDelete:\n this.payload = new SyncSendNotification(payload);\n break;\n case NotificationType.AuthRequest:\n case NotificationType.AuthRequestResponse:\n this.payload = new AuthRequestPushNotification(payload);\n break;\n default:\n break;\n }\n }\n}\n\nexport class SyncCipherNotification extends BaseResponse {\n id: string;\n userId: string;\n organizationId: string;\n collectionIds: string[];\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.collectionIds = this.getResponseProperty(\"CollectionIds\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n\nexport class SyncFolderNotification extends BaseResponse {\n id: string;\n userId: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n\nexport class UserNotification extends BaseResponse {\n userId: string;\n date: Date;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty(\"UserId\");\n this.date = new Date(this.getResponseProperty(\"Date\"));\n }\n}\n\nexport class SyncSendNotification extends BaseResponse {\n id: string;\n userId: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n\nexport class AuthRequestPushNotification extends BaseResponse {\n id: string;\n userId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport {\n HttpTransportType,\n HubConnection,\n HubConnectionBuilder,\n IHubProtocol,\n} from \"@microsoft/signalr\";\nimport { MessagePackHubProtocol } from \"@microsoft/signalr-protocol-msgpack\";\n\nimport { AnonymousHubService as AnonymousHubServiceAbstraction } from \"../abstractions/anonymousHub.service\";\nimport { AuthService } from \"../abstractions/auth.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { LogService } from \"../abstractions/log.service\";\n\nimport {\n AuthRequestPushNotification,\n NotificationResponse,\n} from \"./../models/response/notification.response\";\n\n@Injectable()\nexport class AnonymousHubService implements AnonymousHubServiceAbstraction {\n private anonHubConnection: HubConnection;\n private url: string;\n\n constructor(\n private environmentService: EnvironmentService,\n private authService: AuthService,\n private logService: LogService\n ) {}\n\n async createHubConnection(token: string) {\n this.url = this.environmentService.getNotificationsUrl();\n\n this.anonHubConnection = new HubConnectionBuilder()\n .withUrl(this.url + \"/anonymous-hub?Token=\" + token, {\n skipNegotiation: true,\n transport: HttpTransportType.WebSockets,\n })\n .withHubProtocol(new MessagePackHubProtocol() as IHubProtocol)\n .build();\n\n this.anonHubConnection.start().catch((error) => this.logService.error(error));\n\n this.anonHubConnection.on(\"AuthRequestResponseRecieved\", (data: any) => {\n this.ProcessNotification(new NotificationResponse(data));\n });\n }\n\n stopHubConnection() {\n if (this.anonHubConnection) {\n this.anonHubConnection.stop();\n }\n }\n\n private async ProcessNotification(notification: NotificationResponse) {\n await this.authService.authResponsePushNotifiction(\n notification.payload as AuthRequestPushNotification\n );\n }\n}\n","import { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { DeviceType } from \"../../enums/deviceType\";\n\nexport class DeviceRequest {\n type: DeviceType;\n name: string;\n identifier: string;\n pushToken?: string;\n\n constructor(appId: string, platformUtilsService: PlatformUtilsService) {\n this.type = platformUtilsService.getDevice();\n this.name = platformUtilsService.getDeviceString();\n this.identifier = appId;\n this.pushToken = null;\n }\n}\n","import { DeviceRequest } from \"../device.request\";\n\nimport { TokenTwoFactorRequest } from \"./token-two-factor.request\";\n\nexport abstract class TokenRequest {\n protected device?: DeviceRequest;\n protected passwordlessAuthRequest: string;\n\n constructor(protected twoFactor: TokenTwoFactorRequest, device?: DeviceRequest) {\n this.device = device != null ? device : null;\n }\n\n // eslint-disable-next-line\n alterIdentityTokenHeaders(headers: Headers) {\n // Implemented in subclass if required\n }\n\n setTwoFactor(twoFactor: TokenTwoFactorRequest) {\n this.twoFactor = twoFactor;\n }\n\n setPasswordlessAccessCode(accessCode: string) {\n this.passwordlessAuthRequest = accessCode;\n }\n\n protected toIdentityToken(clientId: string) {\n const obj: any = {\n scope: \"api offline_access\",\n client_id: clientId,\n };\n\n if (this.device) {\n obj.deviceType = this.device.type;\n obj.deviceIdentifier = this.device.identifier;\n obj.deviceName = this.device.name;\n // no push tokens for browser apps yet\n // obj.devicePushToken = this.device.pushToken;\n }\n\n //passswordless login\n if (this.passwordlessAuthRequest) {\n obj.authRequest = this.passwordlessAuthRequest;\n }\n\n if (this.twoFactor) {\n if (this.twoFactor.token && this.twoFactor.provider != null) {\n obj.twoFactorToken = this.twoFactor.token;\n obj.twoFactorProvider = this.twoFactor.provider;\n obj.twoFactorRemember = this.twoFactor.remember ? \"1\" : \"0\";\n }\n }\n\n return obj;\n }\n}\n","import { DeviceRequest } from \"../device.request\";\n\nimport { TokenTwoFactorRequest } from \"./token-two-factor.request\";\nimport { TokenRequest } from \"./token.request\";\n\nexport class UserApiTokenRequest extends TokenRequest {\n constructor(\n public clientId: string,\n public clientSecret: string,\n protected twoFactor: TokenTwoFactorRequest,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken() {\n const obj = super.toIdentityToken(this.clientId);\n\n obj.scope = this.clientId.startsWith(\"organization\") ? \"api.organization\" : \"api\";\n obj.grant_type = \"client_credentials\";\n obj.client_secret = this.clientSecret;\n\n return obj;\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class ApiKeyResponse extends BaseResponse {\n apiKey: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.apiKey = this.getResponseProperty(\"ApiKey\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n","import { DeviceType } from \"../../enums/deviceType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nconst RequestTimeOut = 60000 * 15; //15 Minutes\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 requestFingerprint?: string;\n responseDate?: string;\n isAnswered: boolean;\n isExpired: 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 this.requestFingerprint = this.getResponseProperty(\"RequestFingerprint\");\n this.responseDate = this.getResponseProperty(\"ResponseDate\");\n\n const requestDate = new Date(this.creationDate);\n const requestDateUTC = Date.UTC(\n requestDate.getUTCFullYear(),\n requestDate.getUTCMonth(),\n requestDate.getDate(),\n requestDate.getUTCHours(),\n requestDate.getUTCMinutes(),\n requestDate.getUTCSeconds(),\n requestDate.getUTCMilliseconds()\n );\n\n const dateNow = new Date(Date.now());\n const dateNowUTC = Date.UTC(\n dateNow.getUTCFullYear(),\n dateNow.getUTCMonth(),\n dateNow.getDate(),\n dateNow.getUTCHours(),\n dateNow.getUTCMinutes(),\n dateNow.getUTCSeconds(),\n dateNow.getUTCMilliseconds()\n );\n\n this.isExpired = dateNowUTC - requestDateUTC >= RequestTimeOut;\n this.isAnswered = this.requestApproved != null && this.responseDate != null;\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\";\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 CollectionAccessDetailsResponse extends CollectionResponse {\n groups: SelectionReadOnlyResponse[] = [];\n users: SelectionReadOnlyResponse[] = [];\n\n /**\n * Flag indicating the user has been explicitly assigned to this Collection\n */\n assigned: boolean;\n\n constructor(response: any) {\n super(response);\n this.assigned = this.getResponseProperty(\"Assigned\") || false;\n\n const groups = this.getResponseProperty(\"Groups\");\n if (groups != null) {\n this.groups = groups.map((g: any) => new SelectionReadOnlyResponse(g));\n }\n\n const users = this.getResponseProperty(\"Users\");\n if (users != null) {\n this.users = users.map((g: any) => new SelectionReadOnlyResponse(g));\n }\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class DeviceVerificationResponse extends BaseResponse {\n isDeviceVerificationSectionEnabled: boolean;\n unknownDeviceVerificationEnabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.isDeviceVerificationSectionEnabled = this.getResponseProperty(\n \"IsDeviceVerificationSectionEnabled\"\n );\n this.unknownDeviceVerificationEnabled = this.getResponseProperty(\n \"UnknownDeviceVerificationEnabled\"\n );\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class GlobalDomainResponse extends BaseResponse {\n type: number;\n domains: string[];\n excluded: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.domains = this.getResponseProperty(\"Domains\");\n this.excluded = this.getResponseProperty(\"Excluded\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { GlobalDomainResponse } from \"./global-domain.response\";\n\nexport class DomainsResponse extends BaseResponse {\n equivalentDomains: string[][];\n globalEquivalentDomains: GlobalDomainResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.equivalentDomains = this.getResponseProperty(\"EquivalentDomains\");\n const globalEquivalentDomains = this.getResponseProperty(\"GlobalEquivalentDomains\");\n if (globalEquivalentDomains != null) {\n this.globalEquivalentDomains = globalEquivalentDomains.map(\n (d: any) => new GlobalDomainResponse(d)\n );\n } else {\n this.globalEquivalentDomains = [];\n }\n }\n}\n","import { DeviceType } from \"../../enums/deviceType\";\nimport { EventSystemUser } from \"../../enums/event-system-user\";\nimport { EventType } from \"../../enums/eventType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class EventResponse extends BaseResponse {\n type: EventType;\n userId: string;\n organizationId: string;\n providerId: string;\n cipherId: string;\n collectionId: string;\n groupId: string;\n policyId: string;\n organizationUserId: string;\n providerUserId: string;\n providerOrganizationId: string;\n actingUserId: string;\n date: string;\n deviceType: DeviceType;\n ipAddress: string;\n installationId: string;\n systemUser: EventSystemUser;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.cipherId = this.getResponseProperty(\"CipherId\");\n this.collectionId = this.getResponseProperty(\"CollectionId\");\n this.groupId = this.getResponseProperty(\"GroupId\");\n this.policyId = this.getResponseProperty(\"PolicyId\");\n this.organizationUserId = this.getResponseProperty(\"OrganizationUserId\");\n this.providerUserId = this.getResponseProperty(\"ProviderUserId\");\n this.providerOrganizationId = this.getResponseProperty(\"ProviderOrganizationId\");\n this.actingUserId = this.getResponseProperty(\"ActingUserId\");\n this.date = this.getResponseProperty(\"Date\");\n this.deviceType = this.getResponseProperty(\"DeviceType\");\n this.ipAddress = this.getResponseProperty(\"IpAddress\");\n this.installationId = this.getResponseProperty(\"InstallationId\");\n this.systemUser = this.getResponseProperty(\"SystemUser\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\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 kdfMemory?: number;\n kdfParallelism?: 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.kdfMemory = this.getResponseProperty(\"KdfMemory\");\n this.kdfParallelism = this.getResponseProperty(\"KdfParallelism\");\n this.forcePasswordReset = this.getResponseProperty(\"ForcePasswordReset\");\n this.apiUseKeyConnector = this.getResponseProperty(\"ApiUseKeyConnector\");\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n }\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class IdentityTwoFactorResponse extends BaseResponse {\n twoFactorProviders: TwoFactorProviderType[];\n twoFactorProviders2 = new Map();\n captchaToken: string;\n\n constructor(response: any) {\n super(response);\n this.captchaToken = this.getResponseProperty(\"CaptchaBypassToken\");\n this.twoFactorProviders = this.getResponseProperty(\"TwoFactorProviders\");\n const twoFactorProviders2 = this.getResponseProperty(\"TwoFactorProviders2\");\n if (twoFactorProviders2 != null) {\n for (const prop in twoFactorProviders2) {\n // eslint-disable-next-line\n if (twoFactorProviders2.hasOwnProperty(prop)) {\n this.twoFactorProviders2.set(parseInt(prop, null), twoFactorProviders2[prop]);\n }\n }\n }\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class KeyConnectorUserKeyResponse extends BaseResponse {\n key: string;\n\n constructor(response: any) {\n super(response);\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { OrganizationConnectionType } from \"../../enums/organizationConnectionType\";\nimport { BillingSyncConfigApi } from \"../api/billing-sync-config.api\";\nimport { ScimConfigApi } from \"../api/scim-config.api\";\n\nimport { BaseResponse } from \"./base.response\";\n\n/**API response config types for OrganizationConnectionResponse */\nexport type OrganizationConnectionConfigApis = BillingSyncConfigApi | ScimConfigApi;\n\nexport class OrganizationConnectionResponse<\n TConfig extends OrganizationConnectionConfigApis\n> extends BaseResponse {\n id: string;\n type: OrganizationConnectionType;\n organizationId: string;\n enabled: boolean;\n config: TConfig;\n\n constructor(response: any, configType: { new (response: any): TConfig }) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.type = this.getResponseProperty(\"Type\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n const rawConfig = this.getResponseProperty(\"Config\");\n this.config = rawConfig == null ? null : new configType(rawConfig);\n }\n}\n","import { CipherResponse } from \"../../vault/models/response/cipher.response\";\n\nimport { BaseResponse } from \"./base.response\";\nimport { CollectionResponse } from \"./collection.response\";\n\nexport class OrganizationExportResponse extends BaseResponse {\n collections: CollectionResponse[];\n ciphers: CipherResponse[];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new CollectionResponse(c));\n }\n const ciphers = this.getResponseProperty(\"Ciphers\");\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class OrganizationSponsorshipSyncStatusResponse extends BaseResponse {\n lastSyncDate?: Date;\n\n constructor(response: any) {\n super(response);\n const lastSyncDate = this.getResponseProperty(\"LastSyncDate\");\n if (lastSyncDate) {\n this.lastSyncDate = new Date(lastSyncDate);\n }\n }\n}\n","import { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class ProfileOrganizationResponse extends BaseResponse {\n id: string;\n name: string;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useScim: boolean;\n useCustomPermissions: boolean;\n useResetPassword: boolean;\n useSecretsManager: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n key: string;\n hasPublicAndPrivateKeys: boolean;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n providerId: string;\n providerName: string;\n familySponsorshipFriendlyName: string;\n familySponsorshipAvailable: boolean;\n planProductType: ProductType;\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n familySponsorshipLastSyncDate?: Date;\n familySponsorshipValidUntil?: Date;\n familySponsorshipToDelete?: boolean;\n accessSecretsManager: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.usePolicies = this.getResponseProperty(\"UsePolicies\");\n this.useGroups = this.getResponseProperty(\"UseGroups\");\n this.useDirectory = this.getResponseProperty(\"UseDirectory\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n this.useTotp = this.getResponseProperty(\"UseTotp\");\n this.use2fa = this.getResponseProperty(\"Use2fa\");\n this.useApi = this.getResponseProperty(\"UseApi\");\n this.useSso = this.getResponseProperty(\"UseSso\");\n this.useKeyConnector = this.getResponseProperty(\"UseKeyConnector\") ?? false;\n this.useScim = this.getResponseProperty(\"UseScim\") ?? false;\n this.useCustomPermissions = this.getResponseProperty(\"UseCustomPermissions\") ?? false;\n this.useResetPassword = this.getResponseProperty(\"UseResetPassword\");\n this.useSecretsManager = this.getResponseProperty(\"UseSecretsManager\");\n this.selfHost = this.getResponseProperty(\"SelfHost\");\n this.usersGetPremium = this.getResponseProperty(\"UsersGetPremium\");\n this.seats = this.getResponseProperty(\"Seats\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.key = this.getResponseProperty(\"Key\");\n this.hasPublicAndPrivateKeys = this.getResponseProperty(\"HasPublicAndPrivateKeys\");\n this.status = this.getResponseProperty(\"Status\");\n this.type = this.getResponseProperty(\"Type\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.ssoBound = this.getResponseProperty(\"SsoBound\");\n this.identifier = this.getResponseProperty(\"Identifier\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"permissions\"));\n this.resetPasswordEnrolled = this.getResponseProperty(\"ResetPasswordEnrolled\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.providerName = this.getResponseProperty(\"ProviderName\");\n this.familySponsorshipFriendlyName = this.getResponseProperty(\"FamilySponsorshipFriendlyName\");\n this.familySponsorshipAvailable = this.getResponseProperty(\"FamilySponsorshipAvailable\");\n this.planProductType = this.getResponseProperty(\"PlanProductType\");\n this.keyConnectorEnabled = this.getResponseProperty(\"KeyConnectorEnabled\") ?? false;\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n const familySponsorshipLastSyncDateString = this.getResponseProperty(\n \"FamilySponsorshipLastSyncDate\"\n );\n if (familySponsorshipLastSyncDateString) {\n this.familySponsorshipLastSyncDate = new Date(familySponsorshipLastSyncDateString);\n }\n const familySponsorshipValidUntilString = this.getResponseProperty(\n \"FamilySponsorshipValidUntil\"\n );\n if (familySponsorshipValidUntilString) {\n this.familySponsorshipValidUntil = new Date(familySponsorshipValidUntilString);\n }\n this.familySponsorshipToDelete = this.getResponseProperty(\"FamilySponsorshipToDelete\");\n this.accessSecretsManager = this.getResponseProperty(\"AccessSecretsManager\");\n }\n}\n","import { ProfileOrganizationResponse } from \"./profile-organization.response\";\n\nexport class ProfileProviderOrganizationResponse extends ProfileOrganizationResponse {\n constructor(response: any) {\n super(response);\n this.keyConnectorEnabled = false;\n }\n}\n","import { ProviderUserStatusType } from \"../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../enums/providerUserType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class ProfileProviderResponse extends BaseResponse {\n id: string;\n name: string;\n key: string;\n status: ProviderUserStatusType;\n type: ProviderUserType;\n enabled: boolean;\n permissions: PermissionsApi;\n userId: string;\n useEvents: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.key = this.getResponseProperty(\"Key\");\n this.status = this.getResponseProperty(\"Status\");\n this.type = this.getResponseProperty(\"Type\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"permissions\"));\n this.userId = this.getResponseProperty(\"UserId\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { ProfileOrganizationResponse } from \"./profile-organization.response\";\nimport { ProfileProviderOrganizationResponse } from \"./profile-provider-organization.response\";\nimport { ProfileProviderResponse } from \"./profile-provider.response\";\n\nexport class ProfileResponse extends BaseResponse {\n id: string;\n name: string;\n email: string;\n emailVerified: boolean;\n masterPasswordHint: string;\n premiumPersonally: boolean;\n premiumFromOrganization: boolean;\n culture: string;\n twoFactorEnabled: boolean;\n key: string;\n avatarColor: string;\n privateKey: string;\n securityStamp: string;\n forcePasswordReset: boolean;\n usesKeyConnector: boolean;\n organizations: ProfileOrganizationResponse[] = [];\n providers: ProfileProviderResponse[] = [];\n providerOrganizations: ProfileProviderOrganizationResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.emailVerified = this.getResponseProperty(\"EmailVerified\");\n this.masterPasswordHint = this.getResponseProperty(\"MasterPasswordHint\");\n this.premiumPersonally = this.getResponseProperty(\"Premium\");\n this.premiumFromOrganization = this.getResponseProperty(\"PremiumFromOrganization\");\n this.culture = this.getResponseProperty(\"Culture\");\n this.twoFactorEnabled = this.getResponseProperty(\"TwoFactorEnabled\");\n this.key = this.getResponseProperty(\"Key\");\n this.avatarColor = this.getResponseProperty(\"AvatarColor\");\n this.privateKey = this.getResponseProperty(\"PrivateKey\");\n this.securityStamp = this.getResponseProperty(\"SecurityStamp\");\n this.forcePasswordReset = this.getResponseProperty(\"ForcePasswordReset\") ?? false;\n this.usesKeyConnector = this.getResponseProperty(\"UsesKeyConnector\") ?? false;\n\n const organizations = this.getResponseProperty(\"Organizations\");\n if (organizations != null) {\n this.organizations = organizations.map((o: any) => new ProfileOrganizationResponse(o));\n }\n const providers = this.getResponseProperty(\"Providers\");\n if (providers != null) {\n this.providers = providers.map((o: any) => new ProfileProviderResponse(o));\n }\n const providerOrganizations = this.getResponseProperty(\"ProviderOrganizations\");\n if (providerOrganizations != null) {\n this.providerOrganizations = providerOrganizations.map(\n (o: any) => new ProfileProviderOrganizationResponse(o)\n );\n }\n }\n}\n","import { BaseResponse } from \"./base.response\";\nimport { ProfileResponse } from \"./profile.response\";\n\nexport class PaymentResponse extends BaseResponse {\n userProfile: ProfileResponse;\n paymentIntentClientSecret: string;\n success: boolean;\n\n constructor(response: any) {\n super(response);\n const userProfile = this.getResponseProperty(\"UserProfile\");\n if (userProfile != null) {\n this.userProfile = new ProfileResponse(userProfile);\n }\n this.paymentIntentClientSecret = this.getResponseProperty(\"PaymentIntentClientSecret\");\n this.success = this.getResponseProperty(\"Success\");\n }\n}\n","import { PlanType } from \"../../enums/planType\";\nimport { ProductType } from \"../../enums/productType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class PlanResponse extends BaseResponse {\n type: PlanType;\n product: ProductType;\n name: string;\n isAnnual: boolean;\n nameLocalizationKey: string;\n descriptionLocalizationKey: string;\n canBeUsedByBusiness: boolean;\n baseSeats: number;\n baseStorageGb: number;\n maxCollections: number;\n maxUsers: number;\n\n hasAdditionalSeatsOption: boolean;\n maxAdditionalSeats: number;\n hasAdditionalStorageOption: boolean;\n maxAdditionalStorage: number;\n hasPremiumAccessOption: boolean;\n trialPeriodDays: number;\n\n hasSelfHost: boolean;\n hasPolicies: boolean;\n hasGroups: boolean;\n hasDirectory: boolean;\n hasEvents: boolean;\n hasTotp: boolean;\n has2fa: boolean;\n hasApi: boolean;\n hasSso: boolean;\n hasResetPassword: boolean;\n usersGetPremium: boolean;\n\n upgradeSortOrder: number;\n displaySortOrder: number;\n legacyYear: number;\n disabled: boolean;\n\n stripePlanId: string;\n stripeSeatPlanId: string;\n stripeStoragePlanId: string;\n stripePremiumAccessPlanId: string;\n basePrice: number;\n seatPrice: number;\n additionalStoragePricePerGb: number;\n premiumAccessOptionPrice: number;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.product = this.getResponseProperty(\"Product\");\n this.name = this.getResponseProperty(\"Name\");\n this.isAnnual = this.getResponseProperty(\"IsAnnual\");\n this.nameLocalizationKey = this.getResponseProperty(\"NameLocalizationKey\");\n this.descriptionLocalizationKey = this.getResponseProperty(\"DescriptionLocalizationKey\");\n this.canBeUsedByBusiness = this.getResponseProperty(\"CanBeUsedByBusiness\");\n this.baseSeats = this.getResponseProperty(\"BaseSeats\");\n this.baseStorageGb = this.getResponseProperty(\"BaseStorageGb\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxUsers = this.getResponseProperty(\"MaxUsers\");\n this.hasAdditionalSeatsOption = this.getResponseProperty(\"HasAdditionalSeatsOption\");\n this.maxAdditionalSeats = this.getResponseProperty(\"MaxAdditionalSeats\");\n this.hasAdditionalStorageOption = this.getResponseProperty(\"HasAdditionalStorageOption\");\n this.maxAdditionalStorage = this.getResponseProperty(\"MaxAdditionalStorage\");\n this.hasPremiumAccessOption = this.getResponseProperty(\"HasPremiumAccessOption\");\n this.trialPeriodDays = this.getResponseProperty(\"TrialPeriodDays\");\n this.hasSelfHost = this.getResponseProperty(\"HasSelfHost\");\n this.hasPolicies = this.getResponseProperty(\"HasPolicies\");\n this.hasGroups = this.getResponseProperty(\"HasGroups\");\n this.hasDirectory = this.getResponseProperty(\"HasDirectory\");\n this.hasEvents = this.getResponseProperty(\"HasEvents\");\n this.hasTotp = this.getResponseProperty(\"HasTotp\");\n this.has2fa = this.getResponseProperty(\"Has2fa\");\n this.hasApi = this.getResponseProperty(\"HasApi\");\n this.hasSso = this.getResponseProperty(\"HasSso\");\n this.hasResetPassword = this.getResponseProperty(\"HasResetPassword\");\n this.usersGetPremium = this.getResponseProperty(\"UsersGetPremium\");\n this.upgradeSortOrder = this.getResponseProperty(\"UpgradeSortOrder\");\n this.displaySortOrder = this.getResponseProperty(\"SortOrder\");\n this.legacyYear = this.getResponseProperty(\"LegacyYear\");\n this.disabled = this.getResponseProperty(\"Disabled\");\n this.stripePlanId = this.getResponseProperty(\"StripePlanId\");\n this.stripeSeatPlanId = this.getResponseProperty(\"StripeSeatPlanId\");\n this.stripeStoragePlanId = this.getResponseProperty(\"StripeStoragePlanId\");\n this.stripePremiumAccessPlanId = this.getResponseProperty(\"StripePremiumAccessPlanId\");\n this.basePrice = this.getResponseProperty(\"BasePrice\");\n this.seatPrice = this.getResponseProperty(\"SeatPrice\");\n this.additionalStoragePricePerGb = this.getResponseProperty(\"AdditionalStoragePricePerGb\");\n this.premiumAccessOptionPrice = this.getResponseProperty(\"PremiumAccessOptionPrice\");\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class PreloginResponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n kdfMemory?: number;\n kdfParallelism?: number;\n\n constructor(response: any) {\n super(response);\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n this.kdfMemory = this.getResponseProperty(\"KdfMemory\");\n this.kdfParallelism = this.getResponseProperty(\"KdfParallelism\");\n }\n}\n","import { BaseResponse } from \"../base.response\";\n\nexport class ProviderOrganizationResponse extends BaseResponse {\n id: string;\n providerId: string;\n organizationId: string;\n key: string;\n settings: string;\n creationDate: string;\n revisionDate: string;\n userCount: number;\n seats?: number;\n plan?: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.key = this.getResponseProperty(\"Key\");\n this.settings = this.getResponseProperty(\"Settings\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n this.userCount = this.getResponseProperty(\"UserCount\");\n this.seats = this.getResponseProperty(\"Seats\");\n this.plan = this.getResponseProperty(\"Plan\");\n }\n}\n\nexport class ProviderOrganizationOrganizationDetailsResponse extends ProviderOrganizationResponse {\n organizationName: string;\n\n constructor(response: any) {\n super(response);\n this.organizationName = this.getResponseProperty(\"OrganizationName\");\n }\n}\n","import { BaseResponse } from \"../../../models/response/base.response\";\n\nexport class OrganizationUserBulkPublicKeyResponse extends BaseResponse {\n id: string;\n userId: string;\n key: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { OrganizationUserBulkPublicKeyResponse } from \"../../../abstractions/organization-user/responses\";\n\nexport class ProviderUserBulkPublicKeyResponse extends OrganizationUserBulkPublicKeyResponse {}\n","import { BaseResponse } from \"../base.response\";\n\nexport class ProviderUserBulkResponse extends BaseResponse {\n id: string;\n error: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.error = this.getResponseProperty(\"Error\");\n }\n}\n","import { ProviderUserStatusType } from \"../../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../../enums/providerUserType\";\nimport { PermissionsApi } from \"../../api/permissions.api\";\nimport { BaseResponse } from \"../base.response\";\n\nexport class ProviderUserResponse extends BaseResponse {\n id: string;\n userId: string;\n type: ProviderUserType;\n status: ProviderUserStatusType;\n permissions: PermissionsApi;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"Permissions\"));\n }\n}\n\nexport class ProviderUserUserDetailsResponse extends ProviderUserResponse {\n name: string;\n email: string;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n }\n}\n","import { BaseResponse } from \"../base.response\";\n\nexport class ProviderResponse extends BaseResponse {\n id: string;\n name: string;\n businessName: string;\n billingEmail: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.businessName = this.getResponseProperty(\"BusinessName\");\n this.billingEmail = this.getResponseProperty(\"BillingEmail\");\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/send-file.api\";\nimport { SendTextApi } from \"../api/send-text.api\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class SendAccessResponse extends BaseResponse {\n id: string;\n type: SendType;\n name: string;\n file: SendFileApi;\n text: SendTextApi;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n\n const text = this.getResponseProperty(\"Text\");\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty(\"File\");\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n\n this.expirationDate = this.getResponseProperty(\"ExpirationDate\");\n this.creatorIdentifier = this.getResponseProperty(\"CreatorIdentifier\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class SendFileDownloadDataResponse extends BaseResponse {\n id: string = null;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/send-file.api\";\nimport { SendTextApi } from \"../api/send-text.api\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class SendResponse extends BaseResponse {\n id: string;\n accessId: string;\n type: SendType;\n name: string;\n notes: string;\n file: SendFileApi;\n text: SendTextApi;\n key: string;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: string;\n expirationDate: string;\n deletionDate: string;\n password: string;\n disable: boolean;\n hideEmail: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.accessId = this.getResponseProperty(\"AccessId\");\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.notes = this.getResponseProperty(\"Notes\");\n this.key = this.getResponseProperty(\"Key\");\n this.maxAccessCount = this.getResponseProperty(\"MaxAccessCount\");\n this.accessCount = this.getResponseProperty(\"AccessCount\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n this.expirationDate = this.getResponseProperty(\"ExpirationDate\");\n this.deletionDate = this.getResponseProperty(\"DeletionDate\");\n this.password = this.getResponseProperty(\"Password\");\n this.disable = this.getResponseProperty(\"Disabled\") || false;\n this.hideEmail = this.getResponseProperty(\"HideEmail\") || false;\n\n const text = this.getResponseProperty(\"Text\");\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty(\"File\");\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n }\n}\n","import { FileUploadType } from \"../../enums/fileUploadType\";\n\nimport { BaseResponse } from \"./base.response\";\nimport { SendResponse } from \"./send.response\";\n\nexport class SendFileUploadDataResponse extends BaseResponse {\n fileUploadType: FileUploadType;\n sendResponse: SendResponse;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.fileUploadType = this.getResponseProperty(\"FileUploadType\");\n const sendResponse = this.getResponseProperty(\"SendResponse\");\n this.sendResponse = sendResponse == null ? null : new SendResponse(sendResponse);\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class SsoPreValidateResponse extends BaseResponse {\n token: string;\n\n constructor(response: any) {\n super(response);\n this.token = this.getResponseProperty(\"Token\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class SubscriptionResponse extends BaseResponse {\n storageName: string;\n storageGb: number;\n maxStorageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n license: any;\n expiration: string;\n usingInAppPurchase: boolean;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty(\"StorageName\");\n this.storageGb = this.getResponseProperty(\"StorageGb\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.license = this.getResponseProperty(\"License\");\n this.expiration = this.getResponseProperty(\"Expiration\");\n this.usingInAppPurchase = this.getResponseProperty(\"UsingInAppPurchase\");\n const subscription = this.getResponseProperty(\"Subscription\");\n const upcomingInvoice = this.getResponseProperty(\"UpcomingInvoice\");\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n this.upcomingInvoice =\n upcomingInvoice == null\n ? null\n : new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n }\n}\n\nexport class BillingSubscriptionResponse extends BaseResponse {\n trialStartDate: string;\n trialEndDate: string;\n periodStartDate: string;\n periodEndDate: string;\n cancelledDate: string;\n cancelAtEndDate: boolean;\n status: string;\n cancelled: boolean;\n items: BillingSubscriptionItemResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.trialEndDate = this.getResponseProperty(\"TrialStartDate\");\n this.trialEndDate = this.getResponseProperty(\"TrialEndDate\");\n this.periodStartDate = this.getResponseProperty(\"PeriodStartDate\");\n this.periodEndDate = this.getResponseProperty(\"PeriodEndDate\");\n this.cancelledDate = this.getResponseProperty(\"CancelledDate\");\n this.cancelAtEndDate = this.getResponseProperty(\"CancelAtEndDate\");\n this.status = this.getResponseProperty(\"Status\");\n this.cancelled = this.getResponseProperty(\"Cancelled\");\n const items = this.getResponseProperty(\"Items\");\n if (items != null) {\n this.items = items.map((i: any) => new BillingSubscriptionItemResponse(i));\n }\n }\n}\n\nexport class BillingSubscriptionItemResponse extends BaseResponse {\n name: string;\n amount: number;\n quantity: number;\n interval: string;\n sponsoredSubscriptionItem: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.amount = this.getResponseProperty(\"Amount\");\n this.quantity = this.getResponseProperty(\"Quantity\");\n this.interval = this.getResponseProperty(\"Interval\");\n this.sponsoredSubscriptionItem = this.getResponseProperty(\"SponsoredSubscriptionItem\");\n }\n}\n\nexport class BillingSubscriptionUpcomingInvoiceResponse extends BaseResponse {\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.date = this.getResponseProperty(\"Date\");\n this.amount = this.getResponseProperty(\"Amount\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class 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 { FileUploadType } from \"../../../enums/fileUploadType\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\n\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 { BaseResponse } from \"../../../models/response/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 \"../../../models/response/base.response\";\nimport { CollectionDetailsResponse } from \"../../../models/response/collection.response\";\nimport { DomainsResponse } from \"../../../models/response/domains.response\";\nimport { PolicyResponse } from \"../../../models/response/policy.response\";\nimport { ProfileResponse } from \"../../../models/response/profile.response\";\nimport { SendResponse } from \"../../../models/response/send.response\";\n\nimport { CipherResponse } from \"./cipher.response\";\nimport { FolderResponse } from \"./folder.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 { ApiService } from \"../abstractions/api.service\";\nimport { AuditService as AuditServiceAbstraction } from \"../abstractions/audit.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { throttle } from \"../misc/throttle\";\nimport { Utils } from \"../misc/utils\";\nimport { BreachAccountResponse } from \"../models/response/breach-account.response\";\nimport { ErrorResponse } from \"../models/response/error.response\";\n\nconst PwnedPasswordsApi = \"https://api.pwnedpasswords.com/range/\";\n\nexport class AuditService implements AuditServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService\n ) {}\n\n @throttle(100, () => \"passwordLeaked\")\n async passwordLeaked(password: string): Promise {\n const hashBytes = await this.cryptoFunctionService.hash(password, \"sha1\");\n const hash = Utils.fromBufferToHex(hashBytes).toUpperCase();\n const hashStart = hash.substr(0, 5);\n const hashEnding = hash.substr(5);\n\n const response = await this.apiService.nativeFetch(new Request(PwnedPasswordsApi + hashStart));\n const leakedHashes = await response.text();\n const match = leakedHashes.split(/\\r?\\n/).find((v) => {\n return v.split(\":\")[0] === hashEnding;\n });\n\n return match != null ? parseInt(match.split(\":\")[1], 10) : 0;\n }\n\n async breachedAccounts(username: string): Promise {\n try {\n return await this.apiService.getHibpBreach(username);\n } catch (e) {\n const error = e as ErrorResponse;\n if (error.statusCode === 404) {\n return [];\n }\n throw new Error();\n }\n }\n}\n","/**\n * Use as a Decorator on async functions, it will limit how many times the function can be\n * in-flight at a time.\n *\n * Calls beyond the limit will be queued, and run when one of the active calls finishes\n */\nexport function throttle(limit: number, throttleKey: (args: any[]) => string) {\n return (\n target: any,\n propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise>\n ) => {\n const originalMethod: () => Promise = descriptor.value;\n const allThrottles = new Map void)[]>>();\n\n const getThrottles = (obj: any) => {\n let throttles = allThrottles.get(obj);\n if (throttles != null) {\n return throttles;\n }\n throttles = new Map void)[]>();\n allThrottles.set(obj, throttles);\n return throttles;\n };\n\n return {\n value: function (...args: any[]) {\n const throttles = getThrottles(this);\n const argsThrottleKey = throttleKey(args);\n let queue = throttles.get(argsThrottleKey);\n if (queue == null) {\n queue = [];\n throttles.set(argsThrottleKey, queue);\n }\n\n return new Promise((resolve, reject) => {\n const exec = () => {\n const onFinally = () => {\n queue.splice(queue.indexOf(exec), 1);\n if (queue.length >= limit) {\n queue[limit - 1]();\n } else if (queue.length === 0) {\n throttles.delete(argsThrottleKey);\n if (throttles.size === 0) {\n allThrottles.delete(this);\n }\n }\n };\n originalMethod\n .apply(this, args)\n .then((val: any) => {\n onFinally();\n return val;\n })\n .catch((err: any) => {\n onFinally();\n throw err;\n })\n .then(resolve, reject);\n };\n queue.push(exec);\n if (queue.length <= limit) {\n exec();\n }\n });\n },\n };\n };\n}\n","import { ClientType } from \"../../../enums/clientType\";\nimport { Utils } from \"../../../misc/utils\";\nimport { CaptchaProtectedRequest } from \"../captcha-protected.request\";\nimport { DeviceRequest } from \"../device.request\";\n\nimport { TokenTwoFactorRequest } from \"./token-two-factor.request\";\nimport { TokenRequest } from \"./token.request\";\n\nexport class PasswordTokenRequest extends TokenRequest implements CaptchaProtectedRequest {\n constructor(\n public email: string,\n public masterPasswordHash: string,\n public captchaResponse: string,\n protected twoFactor: TokenTwoFactorRequest,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken(clientId: ClientType) {\n const obj = super.toIdentityToken(clientId);\n\n obj.grant_type = \"password\";\n obj.username = this.email;\n obj.password = this.masterPasswordHash;\n\n if (this.captchaResponse != null) {\n obj.captchaResponse = this.captchaResponse;\n }\n\n return obj;\n }\n\n alterIdentityTokenHeaders(headers: Headers) {\n headers.set(\"Auth-Email\", Utils.fromUtf8ToUrlB64(this.email));\n }\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\nimport { Utils } from \"../../misc/utils\";\n\nexport class AuthResult {\n captchaSiteKey = \"\";\n resetMasterPassword = false;\n forcePasswordReset = false;\n twoFactorProviders: Map = null;\n\n get requiresCaptcha() {\n return !Utils.isNullOrWhitespace(this.captchaSiteKey);\n }\n\n get requiresTwoFactor() {\n return this.twoFactorProviders != null;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\nimport { Account, AccountProfile, AccountTokens } from \"../../models/domain/account\";\nimport { AuthResult } from \"../../models/domain/auth-result\";\nimport {\n UserApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../../models/domain/log-in-credentials\";\nimport { DeviceRequest } from \"../../models/request/device.request\";\nimport { PasswordTokenRequest } from \"../../models/request/identity-token/password-token.request\";\nimport { SsoTokenRequest } from \"../../models/request/identity-token/sso-token.request\";\nimport { TokenTwoFactorRequest } from \"../../models/request/identity-token/token-two-factor.request\";\nimport { UserApiTokenRequest } from \"../../models/request/identity-token/user-api-token.request\";\nimport { KeysRequest } from \"../../models/request/keys.request\";\nimport { IdentityCaptchaResponse } from \"../../models/response/identity-captcha.response\";\nimport { IdentityTokenResponse } from \"../../models/response/identity-token.response\";\nimport { IdentityTwoFactorResponse } from \"../../models/response/identity-two-factor.response\";\n\nexport abstract class LogInStrategy {\n protected abstract tokenRequest: UserApiTokenRequest | PasswordTokenRequest | SsoTokenRequest;\n protected captchaBypassToken: string = null;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n protected tokenService: TokenService,\n protected appIdService: AppIdService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected logService: LogService,\n protected stateService: StateService,\n protected twoFactorService: TwoFactorService\n ) {}\n\n abstract logIn(\n credentials:\n | UserApiLogInCredentials\n | PasswordLogInCredentials\n | SsoLogInCredentials\n | PasswordlessLogInCredentials\n ): Promise;\n\n // The user key comes from different sources depending on the login strategy\n protected abstract setUserKey(response: IdentityTokenResponse): Promise;\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string = null\n ): Promise {\n this.tokenRequest.setTwoFactor(twoFactor);\n return this.startLogIn();\n }\n\n protected async startLogIn(): Promise {\n this.twoFactorService.clearSelectedProvider();\n\n const response = await this.apiService.postIdentityToken(this.tokenRequest);\n\n if (response instanceof IdentityTwoFactorResponse) {\n return this.processTwoFactorResponse(response);\n } else if (response instanceof IdentityCaptchaResponse) {\n return this.processCaptchaResponse(response);\n } else if (response instanceof IdentityTokenResponse) {\n return this.processTokenResponse(response);\n }\n\n throw new Error(\"Invalid response object.\");\n }\n\n protected async buildDeviceRequest() {\n const appId = await this.appIdService.getAppId();\n return new DeviceRequest(appId, this.platformUtilsService);\n }\n\n protected async buildTwoFactor(userProvidedTwoFactor?: TokenTwoFactorRequest) {\n if (userProvidedTwoFactor != null) {\n return userProvidedTwoFactor;\n }\n\n const storedTwoFactorToken = await this.tokenService.getTwoFactorToken();\n if (storedTwoFactorToken != null) {\n return new TokenTwoFactorRequest(TwoFactorProviderType.Remember, storedTwoFactorToken, false);\n }\n\n return new TokenTwoFactorRequest();\n }\n\n protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) {\n const accountInformation = await this.tokenService.decodeToken(tokenResponse.accessToken);\n await this.stateService.addAccount(\n new Account({\n profile: {\n ...new AccountProfile(),\n ...{\n userId: accountInformation.sub,\n name: accountInformation.name,\n email: accountInformation.email,\n hasPremiumPersonally: accountInformation.premium,\n kdfIterations: tokenResponse.kdfIterations,\n kdfMemory: tokenResponse.kdfMemory,\n kdfParallelism: tokenResponse.kdfParallelism,\n kdfType: tokenResponse.kdf,\n },\n },\n tokens: {\n ...new AccountTokens(),\n ...{\n accessToken: tokenResponse.accessToken,\n refreshToken: tokenResponse.refreshToken,\n },\n },\n })\n );\n }\n\n protected async processTokenResponse(response: IdentityTokenResponse): Promise {\n const result = new AuthResult();\n result.resetMasterPassword = response.resetMasterPassword;\n result.forcePasswordReset = response.forcePasswordReset;\n\n await this.saveAccountInformation(response);\n\n if (response.twoFactorToken != null) {\n await this.tokenService.setTwoFactorToken(response);\n }\n\n await this.setUserKey(response);\n\n // Must come after the user Key is set, otherwise createKeyPairForOldAccount will fail\n const newSsoUser = response.key == null;\n if (!newSsoUser) {\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(\n response.privateKey ?? (await this.createKeyPairForOldAccount())\n );\n }\n\n this.messagingService.send(\"loggedIn\");\n\n return result;\n }\n\n private async processTwoFactorResponse(response: IdentityTwoFactorResponse): Promise {\n const result = new AuthResult();\n result.twoFactorProviders = response.twoFactorProviders2;\n this.twoFactorService.setProviders(response);\n this.captchaBypassToken = response.captchaToken ?? null;\n return result;\n }\n\n private async processCaptchaResponse(response: IdentityCaptchaResponse): Promise {\n const result = new AuthResult();\n result.captchaSiteKey = response.siteKey;\n return result;\n }\n\n private async createKeyPairForOldAccount() {\n try {\n const [publicKey, privateKey] = await this.cryptoService.makeKeyPair();\n await this.apiService.postAccountKeys(new KeysRequest(publicKey, privateKey.encryptedString));\n return privateKey.encryptedString;\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { AuthService } from \"../../abstractions/auth.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { HashPurpose } from \"../../enums/hashPurpose\";\nimport { AuthResult } from \"../../models/domain/auth-result\";\nimport { PasswordLogInCredentials } from \"../../models/domain/log-in-credentials\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\nimport { PasswordTokenRequest } from \"../../models/request/identity-token/password-token.request\";\nimport { TokenTwoFactorRequest } from \"../../models/request/identity-token/token-two-factor.request\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class PasswordLogInStrategy extends LogInStrategy {\n get email() {\n return this.tokenRequest.email;\n }\n\n get masterPasswordHash() {\n return this.tokenRequest.masterPasswordHash;\n }\n\n tokenRequest: PasswordTokenRequest;\n\n private localHashedPassword: string;\n private key: SymmetricCryptoKey;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private authService: AuthService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async setUserKey() {\n await this.cryptoService.setKey(this.key);\n await this.cryptoService.setKeyHash(this.localHashedPassword);\n }\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ): Promise {\n this.tokenRequest.captchaResponse = captchaResponse ?? this.captchaBypassToken;\n return super.logInTwoFactor(twoFactor);\n }\n\n async logIn(credentials: PasswordLogInCredentials) {\n const { email, masterPassword, captchaToken, twoFactor } = credentials;\n\n this.key = await this.authService.makePreloginKey(masterPassword, email);\n\n // Hash the password early (before authentication) so we don't persist it in memory in plaintext\n this.localHashedPassword = await this.cryptoService.hashPassword(\n masterPassword,\n this.key,\n HashPurpose.LocalAuthorization\n );\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, this.key);\n\n this.tokenRequest = new PasswordTokenRequest(\n email,\n hashedPassword,\n captchaToken,\n await this.buildTwoFactor(twoFactor),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { AuthService } from \"../../abstractions/auth.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { AuthResult } from \"../../models/domain/auth-result\";\nimport { PasswordlessLogInCredentials } from \"../../models/domain/log-in-credentials\";\nimport { PasswordTokenRequest } from \"../../models/request/identity-token/password-token.request\";\nimport { TokenTwoFactorRequest } from \"../../models/request/identity-token/token-two-factor.request\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class PasswordlessLogInStrategy extends LogInStrategy {\n get email() {\n return this.tokenRequest.email;\n }\n\n get accessCode() {\n return this.passwordlessCredentials.accessCode;\n }\n\n get authRequestId() {\n return this.passwordlessCredentials.authRequestId;\n }\n\n tokenRequest: PasswordTokenRequest;\n private passwordlessCredentials: PasswordlessLogInCredentials;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private authService: AuthService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async setUserKey() {\n await this.cryptoService.setKey(this.passwordlessCredentials.decKey);\n await this.cryptoService.setKeyHash(this.passwordlessCredentials.localPasswordHash);\n }\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ): Promise {\n this.tokenRequest.captchaResponse = captchaResponse ?? this.captchaBypassToken;\n return super.logInTwoFactor(twoFactor);\n }\n\n async logIn(credentials: PasswordlessLogInCredentials) {\n this.passwordlessCredentials = credentials;\n\n this.tokenRequest = new PasswordTokenRequest(\n credentials.email,\n credentials.accessCode,\n null,\n await this.buildTwoFactor(credentials.twoFactor),\n await this.buildDeviceRequest()\n );\n\n this.tokenRequest.setPasswordlessAccessCode(credentials.authRequestId);\n return this.startLogIn();\n }\n}\n","import { DeviceRequest } from \"../device.request\";\n\nimport { TokenTwoFactorRequest } from \"./token-two-factor.request\";\nimport { TokenRequest } from \"./token.request\";\n\nexport class SsoTokenRequest extends TokenRequest {\n constructor(\n public code: string,\n public codeVerifier: string,\n public redirectUri: string,\n protected twoFactor: TokenTwoFactorRequest,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken(clientId: string) {\n const obj = super.toIdentityToken(clientId);\n\n obj.grant_type = \"authorization_code\";\n obj.code = this.code;\n obj.code_verifier = this.codeVerifier;\n obj.redirect_uri = this.redirectUri;\n\n return obj;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { SsoLogInCredentials } from \"../../models/domain/log-in-credentials\";\nimport { SsoTokenRequest } from \"../../models/request/identity-token/sso-token.request\";\nimport { IdentityTokenResponse } from \"../../models/response/identity-token.response\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class SsoLogInStrategy extends LogInStrategy {\n tokenRequest: SsoTokenRequest;\n orgId: string;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private keyConnectorService: KeyConnectorService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async setUserKey(tokenResponse: IdentityTokenResponse) {\n const newSsoUser = tokenResponse.key == null;\n\n if (tokenResponse.keyConnectorUrl != null) {\n if (!newSsoUser) {\n await this.keyConnectorService.getAndSetKey(tokenResponse.keyConnectorUrl);\n } else {\n await this.keyConnectorService.convertNewSsoUserToKeyConnector(tokenResponse, this.orgId);\n }\n }\n }\n\n async logIn(credentials: SsoLogInCredentials) {\n this.orgId = credentials.orgId;\n this.tokenRequest = new SsoTokenRequest(\n credentials.code,\n credentials.codeVerifier,\n credentials.redirectUrl,\n await this.buildTwoFactor(credentials.twoFactor),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { EnvironmentService } from \"../../abstractions/environment.service\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { UserApiLogInCredentials } from \"../../models/domain/log-in-credentials\";\nimport { UserApiTokenRequest } from \"../../models/request/identity-token/user-api-token.request\";\nimport { IdentityTokenResponse } from \"../../models/response/identity-token.response\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class UserApiLogInStrategy extends LogInStrategy {\n tokenRequest: UserApiTokenRequest;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private environmentService: EnvironmentService,\n private keyConnectorService: KeyConnectorService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async setUserKey(tokenResponse: IdentityTokenResponse) {\n if (tokenResponse.apiUseKeyConnector) {\n const keyConnectorUrl = this.environmentService.getKeyConnectorUrl();\n await this.keyConnectorService.getAndSetKey(keyConnectorUrl);\n }\n }\n\n async logIn(credentials: UserApiLogInCredentials) {\n this.tokenRequest = new UserApiTokenRequest(\n credentials.clientId,\n credentials.clientSecret,\n await this.buildTwoFactor(),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n\n protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) {\n await super.saveAccountInformation(tokenResponse);\n await this.stateService.setApiKeyClientId(this.tokenRequest.clientId);\n await this.stateService.setApiKeyClientSecret(this.tokenRequest.clientSecret);\n }\n}\n","export class PasswordlessAuthRequest {\n constructor(\n readonly key: string,\n readonly masterPasswordHash: string,\n readonly deviceIdentifier: string,\n readonly requestApproved: boolean\n ) {}\n}\n","export class PreloginRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\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 { Jsonify } from \"type-fest\";\n\nimport {\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 static fromJSON(obj: Jsonify): ServerConfig {\n if (obj == null) {\n return null;\n }\n\n return new ServerConfig(obj);\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","// 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 {\n DEFAULT_ARGON2_ITERATIONS,\n DEFAULT_ARGON2_MEMORY,\n DEFAULT_ARGON2_PARALLELISM,\n KdfType,\n} 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 { KdfConfig } from \"../models/domain/kdf-config\";\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 kdfConfig: KdfConfig\n ): Promise {\n let key: ArrayBuffer = null;\n if (kdf == null || kdf === KdfType.PBKDF2_SHA256) {\n if (kdfConfig.iterations == null) {\n kdfConfig.iterations = 5000;\n } else if (kdfConfig.iterations < 5000) {\n throw new Error(\"PBKDF2 iteration minimum is 5000.\");\n }\n key = await this.cryptoFunctionService.pbkdf2(password, salt, \"sha256\", kdfConfig.iterations);\n } else if (kdf == KdfType.Argon2id) {\n if (kdfConfig.iterations == null) {\n kdfConfig.iterations = DEFAULT_ARGON2_ITERATIONS;\n } else if (kdfConfig.iterations < 2) {\n throw new Error(\"Argon2 iteration minimum is 2.\");\n }\n\n if (kdfConfig.memory == null) {\n kdfConfig.memory = DEFAULT_ARGON2_MEMORY;\n } else if (kdfConfig.memory < 16) {\n throw new Error(\"Argon2 memory minimum is 16 MB\");\n } else if (kdfConfig.memory > 1024) {\n throw new Error(\"Argon2 memory maximum is 1024 MB\");\n }\n\n if (kdfConfig.parallelism == null) {\n kdfConfig.parallelism = DEFAULT_ARGON2_PARALLELISM;\n } else if (kdfConfig.parallelism < 1) {\n throw new Error(\"Argon2 parallelism minimum is 1.\");\n }\n\n const saltHash = await this.cryptoFunctionService.hash(salt, \"sha256\");\n key = await this.cryptoFunctionService.argon2(\n password,\n saltHash,\n kdfConfig.iterations,\n kdfConfig.memory * 1024, // convert to KiB from MiB\n kdfConfig.parallelism\n );\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 kdfConfig: KdfConfig,\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, kdfConfig);\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 kdfConfig: KdfConfig\n ): Promise {\n const pinKey = await this.makeKey(pin, salt, kdf, kdfConfig);\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 \"../../vault/models/domain/cipher\";\nimport { CipherView } from \"../../vault/models/view/cipher.view\";\n\nimport { InitializerKey } from \"./initializer-key\";\n\n/**\n * Internal reference of classes so we can reconstruct objects properly.\n * Each entry should be keyed using the Decryptable.initializerKey property\n */\nconst classInitializers: Record any> = {\n [InitializerKey.Cipher]: Cipher.fromJSON,\n [InitializerKey.CipherView]: CipherView.fromJSON,\n};\n\nexport function getClassInitializer(\n className: InitializerKey\n): (obj: Jsonify) => T {\n return classInitializers[className];\n}\n","import { defaultIfEmpty, filter, firstValueFrom, fromEvent, map, Subject, takeUntil } from \"rxjs\";\nimport { Jsonify } from \"type-fest\";\n\nimport { Decryptable } from \"../../interfaces/decryptable.interface\";\nimport { InitializerMetadata } from \"../../interfaces/initializer-metadata.interface\";\nimport { Utils } from \"../../misc/utils\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\n\nimport { EncryptServiceImplementation } from \"./encrypt.service.implementation\";\nimport { getClassInitializer } from \"./get-class-initializer\";\n\n// TTL (time to live) is not strictly required but avoids tying up memory resources if inactive\nconst workerTTL = 3 * 60000; // 3 minutes\n\nexport class MultithreadEncryptServiceImplementation extends EncryptServiceImplementation {\n private worker: Worker;\n private timeout: any;\n\n private clear$ = new Subject();\n\n /**\n * Sends items to a web worker to decrypt them.\n * This utilises multithreading to decrypt items faster without interrupting other operations (e.g. updating UI).\n */\n async decryptItems(\n items: Decryptable[],\n key: SymmetricCryptoKey\n ): Promise {\n if (items == null || items.length < 1) {\n return [];\n }\n\n this.logService.info(\"Starting decryption using multithreading\");\n\n this.worker ??= new Worker(\n new URL(\n /* webpackChunkName: 'encrypt-worker' */\n \"@bitwarden/common/services/cryptography/encrypt.worker.ts\",\n import.meta.url\n )\n );\n\n this.restartTimeout();\n\n const request = {\n id: Utils.newGuid(),\n items: items,\n key: key,\n };\n\n this.worker.postMessage(JSON.stringify(request));\n\n return await firstValueFrom(\n fromEvent(this.worker, \"message\").pipe(\n filter((response: MessageEvent) => response.data?.id === request.id),\n map((response) => JSON.parse(response.data.items)),\n map((items) =>\n items.map((jsonItem: Jsonify) => {\n const initializer = getClassInitializer(jsonItem.initializerKey);\n return initializer(jsonItem);\n })\n ),\n takeUntil(this.clear$),\n defaultIfEmpty([])\n )\n );\n }\n\n private clear() {\n this.clear$.next();\n this.worker?.terminate();\n this.worker = null;\n this.clearTimeout();\n }\n\n private restartTimeout() {\n this.clearTimeout();\n this.timeout = setTimeout(() => this.clear(), workerTTL);\n }\n\n private clearTimeout() {\n if (this.timeout != null) {\n clearTimeout(this.timeout);\n }\n }\n}\n","import { EventType } from \"../../enums/eventType\";\n\nexport class EventRequest {\n type: EventType;\n cipherId: string;\n date: string;\n organizationId: string;\n}\n","import { EventType } from \"../../enums/eventType\";\nimport { EventView } from \"../view/event.view\";\n\nexport class EventExport {\n message: string;\n appIcon: string;\n appName: string;\n userId: string;\n userName: string;\n userEmail: string;\n date: string;\n ip: string;\n type: string;\n installationId: string;\n\n constructor(event: EventView) {\n this.message = event.humanReadableMessage;\n this.appIcon = event.appIcon;\n this.appName = event.appName;\n this.userId = event.userId;\n this.userName = event.userName;\n this.userEmail = event.userEmail;\n this.date = event.date;\n this.ip = event.ip;\n this.type = EventType[event.type];\n this.installationId = event.installationId;\n }\n}\n","export enum FileUploadType {\n Direct = 0,\n Azure = 1,\n}\n","import { LogService } from \"../abstractions/log.service\";\nimport { Utils } from \"../misc/utils\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\n\nconst MAX_SINGLE_BLOB_UPLOAD_SIZE = 256 * 1024 * 1024; // 256 MiB\nconst MAX_BLOCKS_PER_BLOB = 50000;\n\nexport class AzureFileUploadService {\n constructor(private logService: LogService) {}\n\n async upload(url: string, data: EncArrayBuffer, renewalCallback: () => Promise) {\n if (data.buffer.byteLength <= MAX_SINGLE_BLOB_UPLOAD_SIZE) {\n return await this.azureUploadBlob(url, data);\n } else {\n return await this.azureUploadBlocks(url, data, renewalCallback);\n }\n }\n private async azureUploadBlob(url: string, data: EncArrayBuffer) {\n const urlObject = Utils.getUrl(url);\n const headers = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": urlObject.searchParams.get(\"sv\"),\n \"Content-Length\": data.buffer.byteLength.toString(),\n \"x-ms-blob-type\": \"BlockBlob\",\n });\n\n const request = new Request(url, {\n body: data.buffer,\n cache: \"no-store\",\n method: \"PUT\",\n headers: headers,\n });\n\n const blobResponse = await fetch(request);\n\n if (blobResponse.status !== 201) {\n throw new Error(`Failed to create Azure blob: ${blobResponse.status}`);\n }\n }\n private async azureUploadBlocks(\n url: string,\n data: EncArrayBuffer,\n renewalCallback: () => Promise\n ) {\n const baseUrl = Utils.getUrl(url);\n const blockSize = this.getMaxBlockSize(baseUrl.searchParams.get(\"sv\"));\n let blockIndex = 0;\n const numBlocks = Math.ceil(data.buffer.byteLength / blockSize);\n const blocksStaged: string[] = [];\n\n if (numBlocks > MAX_BLOCKS_PER_BLOB) {\n throw new Error(\n `Cannot upload file, exceeds maximum size of ${blockSize * MAX_BLOCKS_PER_BLOB}`\n );\n }\n\n // eslint-disable-next-line\n try {\n while (blockIndex < numBlocks) {\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockUrl = Utils.getUrl(url);\n const blockId = this.encodedBlockId(blockIndex);\n blockUrl.searchParams.append(\"comp\", \"block\");\n blockUrl.searchParams.append(\"blockid\", blockId);\n const start = blockIndex * blockSize;\n const blockData = data.buffer.slice(start, start + blockSize);\n const blockHeaders = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": blockUrl.searchParams.get(\"sv\"),\n \"Content-Length\": blockData.byteLength.toString(),\n });\n\n const blockRequest = new Request(blockUrl.toString(), {\n body: blockData,\n cache: \"no-store\",\n method: \"PUT\",\n headers: blockHeaders,\n });\n\n const blockResponse = await fetch(blockRequest);\n\n if (blockResponse.status !== 201) {\n const message = `Unsuccessful block PUT. Received status ${blockResponse.status}`;\n this.logService.error(message + \"\\n\" + (await blockResponse.json()));\n throw new Error(message);\n }\n\n blocksStaged.push(blockId);\n blockIndex++;\n }\n\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockListUrl = Utils.getUrl(url);\n const blockListXml = this.blockListXml(blocksStaged);\n blockListUrl.searchParams.append(\"comp\", \"blocklist\");\n const headers = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": blockListUrl.searchParams.get(\"sv\"),\n \"Content-Length\": blockListXml.length.toString(),\n });\n\n const request = new Request(blockListUrl.toString(), {\n body: blockListXml,\n cache: \"no-store\",\n method: \"PUT\",\n headers: headers,\n });\n\n const response = await fetch(request);\n\n if (response.status !== 201) {\n const message = `Unsuccessful block list PUT. Received status ${response.status}`;\n this.logService.error(message + \"\\n\" + (await response.json()));\n throw new Error(message);\n }\n } catch (e) {\n throw e;\n }\n }\n\n private async renewUrlIfNecessary(\n url: string,\n renewalCallback: () => Promise\n ): Promise {\n const urlObject = Utils.getUrl(url);\n const expiry = new Date(urlObject.searchParams.get(\"se\") ?? \"\");\n\n if (isNaN(expiry.getTime())) {\n expiry.setTime(Date.now() + 3600000);\n }\n\n if (expiry.getTime() < Date.now() + 1000) {\n return await renewalCallback();\n }\n return url;\n }\n\n private encodedBlockId(blockIndex: number) {\n // Encoded blockId max size is 64, so pre-encoding max size is 48\n const utfBlockId = (\n \"000000000000000000000000000000000000000000000000\" + blockIndex.toString()\n ).slice(-48);\n return Utils.fromUtf8ToB64(utfBlockId);\n }\n\n private blockListXml(blockIdList: string[]) {\n let xml = '';\n blockIdList.forEach((blockId) => {\n xml += `${blockId}`;\n });\n xml += \"\";\n return xml;\n }\n\n private getMaxBlockSize(version: string) {\n if (Version.compare(version, \"2019-12-12\") >= 0) {\n return 4000 * 1024 * 1024; // 4000 MiB\n } else if (Version.compare(version, \"2016-05-31\") >= 0) {\n return 100 * 1024 * 1024; // 100 MiB\n } else {\n return 4 * 1024 * 1024; // 4 MiB\n }\n }\n}\n\nclass Version {\n /**\n * Compares two Azure Versions against each other\n * @param a Version to compare\n * @param b Version to compare\n * @returns a number less than zero if b is newer than a, 0 if equal,\n * and greater than zero if a is newer than b\n */\n static compare(a: Required | string, b: Required | string) {\n if (typeof a === \"string\") {\n a = new Version(a);\n }\n\n if (typeof b === \"string\") {\n b = new Version(b);\n }\n\n return a.year !== b.year\n ? a.year - b.year\n : a.month !== b.month\n ? a.month - b.month\n : a.day !== b.day\n ? a.day - b.day\n : 0;\n }\n year = 0;\n month = 0;\n day = 0;\n\n constructor(version: string) {\n try {\n const parts = version.split(\"-\").map((v) => Number.parseInt(v, 10));\n this.year = parts[0];\n this.month = parts[1];\n this.day = parts[2];\n } catch {\n // Ignore error\n }\n }\n /**\n * Compares two Azure Versions against each other\n * @param compareTo Version to compare against\n * @returns a number less than zero if compareTo is newer, 0 if equal,\n * and greater than zero if this is greater than compareTo\n */\n compare(compareTo: Required | string) {\n return Version.compare(this, compareTo);\n }\n}\n","import { Utils } from \"../misc/utils\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\n\nexport class BitwardenFileUploadService {\n async upload(\n encryptedFileName: string,\n encryptedFileData: EncArrayBuffer,\n apiCall: (fd: FormData) => Promise\n ) {\n const fd = new FormData();\n try {\n const blob = new Blob([encryptedFileData.buffer], { type: \"application/octet-stream\" });\n fd.append(\"data\", blob, encryptedFileName);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\n \"data\",\n Buffer.from(encryptedFileData.buffer) as any,\n {\n filepath: encryptedFileName,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n\n await apiCall(fd);\n }\n}\n","import { KdfType } from \"../../../enums/kdfType\";\nimport { KdfConfig } from \"../../domain/kdf-config\";\nimport { KeysRequest } from \"../keys.request\";\n\nexport class SetKeyConnectorKeyRequest {\n key: string;\n keys: KeysRequest;\n kdf: KdfType;\n kdfIterations: number;\n kdfMemory?: number;\n kdfParallelism?: number;\n orgIdentifier: string;\n\n constructor(\n key: string,\n kdf: KdfType,\n kdfConfig: KdfConfig,\n orgIdentifier: string,\n keys: KeysRequest\n ) {\n this.key = key;\n this.kdf = kdf;\n this.kdfIterations = kdfConfig.iterations;\n this.kdfMemory = kdfConfig.memory;\n this.kdfParallelism = kdfConfig.parallelism;\n this.orgIdentifier = orgIdentifier;\n this.keys = keys;\n }\n}\n","export class KeyConnectorUserKeyRequest {\n key: string;\n\n constructor(key: string) {\n this.key = key;\n }\n}\n","import { LoginService as LoginServiceAbstraction } from \"../abstractions/login.service\";\nimport { StateService } from \"../abstractions/state.service\";\n\nexport class LoginService implements LoginServiceAbstraction {\n private _email: string;\n private _rememberEmail: boolean;\n\n constructor(private stateService: StateService) {}\n\n getEmail() {\n return this._email;\n }\n\n getRememberEmail() {\n return this._rememberEmail;\n }\n\n setEmail(value: string) {\n this._email = value;\n }\n\n setRememberEmail(value: boolean) {\n this._rememberEmail = value;\n }\n\n clearValues() {\n this._email = null;\n this._rememberEmail = null;\n }\n\n async saveEmailSettings() {\n await this.stateService.setRememberedEmail(this._rememberEmail ? this._email : null);\n this.clearValues();\n }\n}\n","import { KdfType } from \"../../../enums/kdfType\";\nimport { OrganizationUserStatusType } from \"../../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../../../models/api/permissions.api\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\nimport { SelectionReadOnlyResponse } from \"../../../models/response/selection-read-only.response\";\n\nexport class OrganizationUserResponse extends BaseResponse {\n id: string;\n userId: string;\n type: OrganizationUserType;\n status: OrganizationUserStatusType;\n externalId: string;\n accessAll: boolean;\n accessSecretsManager: boolean;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n collections: SelectionReadOnlyResponse[] = [];\n groups: string[] = [];\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.externalId = this.getResponseProperty(\"ExternalId\");\n this.accessAll = this.getResponseProperty(\"AccessAll\");\n this.accessSecretsManager = this.getResponseProperty(\"AccessSecretsManager\");\n this.resetPasswordEnrolled = this.getResponseProperty(\"ResetPasswordEnrolled\");\n\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n const groups = this.getResponseProperty(\"Groups\");\n if (groups != null) {\n this.groups = groups;\n }\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 constructor(response: any) {\n super(response);\n }\n}\n\nexport class OrganizationUserResetPasswordDetailsReponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n kdfMemory?: number;\n kdfParallelism?: 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.kdfMemory = this.getResponseProperty(\"KdfMemory\");\n this.kdfParallelism = this.getResponseProperty(\"KdfParallelism\");\n this.resetPasswordKey = this.getResponseProperty(\"ResetPasswordKey\");\n this.encryptedPrivateKey = this.getResponseProperty(\"EncryptedPrivateKey\");\n }\n}\n","import { BaseResponse } from \"../../../models/response/base.response\";\n\nexport class OrganizationUserBulkResponse extends BaseResponse {\n id: string;\n error: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.error = this.getResponseProperty(\"Error\");\n }\n}\n","export class OrganizationUserBulkRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","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 { SsoConfigApi } from \"../../api/sso-config.api\";\nimport { BaseResponse } from \"../base.response\";\n\nexport class OrganizationSsoResponse extends BaseResponse {\n enabled: boolean;\n identifier: string;\n data: SsoConfigApi;\n urls: SsoUrls;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.identifier = this.getResponseProperty(\"Identifier\");\n this.data =\n this.getResponseProperty(\"Data\") != null\n ? new SsoConfigApi(this.getResponseProperty(\"Data\"))\n : null;\n this.urls = new SsoUrls(this.getResponseProperty(\"Urls\"));\n }\n}\n\nclass SsoUrls extends BaseResponse {\n callbackPath: string;\n signedOutCallbackPath: string;\n spEntityId: string;\n spMetadataUrl: string;\n spAcsUrl: string;\n\n constructor(response: any) {\n super(response);\n this.callbackPath = this.getResponseProperty(\"CallbackPath\");\n this.signedOutCallbackPath = this.getResponseProperty(\"SignedOutCallbackPath\");\n this.spEntityId = this.getResponseProperty(\"SpEntityId\");\n this.spMetadataUrl = this.getResponseProperty(\"SpMetadataUrl\");\n this.spAcsUrl = this.getResponseProperty(\"SpAcsUrl\");\n }\n}\n","import Domain from \"./domain-base\";\n\nexport class PasswordGeneratorPolicyOptions extends Domain {\n defaultType = \"\";\n minLength = 0;\n useUppercase = false;\n useLowercase = false;\n useNumbers = false;\n numberCount = 0;\n useSpecial = false;\n specialCount = 0;\n minNumberWords = 0;\n capitalize = false;\n includeNumber = false;\n\n inEffect() {\n return (\n this.defaultType !== \"\" ||\n this.minLength > 0 ||\n this.numberCount > 0 ||\n this.specialCount > 0 ||\n this.useUppercase ||\n this.useLowercase ||\n this.useNumbers ||\n this.useSpecial ||\n this.minNumberWords > 0 ||\n this.capitalize ||\n this.includeNumber\n );\n }\n}\n","import * as zxcvbn from \"zxcvbn\";\n\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { PasswordGenerationService as PasswordGenerationServiceAbstraction } from \"../abstractions/passwordGeneration.service\";\nimport { PolicyService } from \"../abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { PolicyType } from \"../enums/policyType\";\nimport { EFFLongWordList } from \"../misc/wordlist\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generated-password-history\";\nimport { PasswordGeneratorOptions } from \"../models/domain/password-generator-options\";\nimport { PasswordGeneratorPolicyOptions } from \"../models/domain/password-generator-policy-options\";\n\nconst DefaultOptions: PasswordGeneratorOptions = {\n length: 14,\n ambiguous: false,\n number: true,\n minNumber: 1,\n uppercase: true,\n minUppercase: 0,\n lowercase: true,\n minLowercase: 0,\n special: false,\n minSpecial: 1,\n type: \"password\",\n numWords: 3,\n wordSeparator: \"-\",\n capitalize: false,\n includeNumber: false,\n};\n\nconst MaxPasswordsInHistory = 100;\n\nexport class PasswordGenerationService implements PasswordGenerationServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private policyService: PolicyService,\n private stateService: StateService\n ) {}\n\n async generatePassword(options: PasswordGeneratorOptions): Promise {\n // overload defaults with given options\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.type === \"passphrase\") {\n return this.generatePassphrase(options);\n }\n\n // sanitize\n this.sanitizePasswordLength(o, true);\n\n const minLength: number = o.minUppercase + o.minLowercase + o.minNumber + o.minSpecial;\n if (o.length < minLength) {\n o.length = minLength;\n }\n\n const positions: string[] = [];\n if (o.lowercase && o.minLowercase > 0) {\n for (let i = 0; i < o.minLowercase; i++) {\n positions.push(\"l\");\n }\n }\n if (o.uppercase && o.minUppercase > 0) {\n for (let i = 0; i < o.minUppercase; i++) {\n positions.push(\"u\");\n }\n }\n if (o.number && o.minNumber > 0) {\n for (let i = 0; i < o.minNumber; i++) {\n positions.push(\"n\");\n }\n }\n if (o.special && o.minSpecial > 0) {\n for (let i = 0; i < o.minSpecial; i++) {\n positions.push(\"s\");\n }\n }\n while (positions.length < o.length) {\n positions.push(\"a\");\n }\n\n // shuffle\n await this.shuffleArray(positions);\n\n // build out the char sets\n let allCharSet = \"\";\n\n let lowercaseCharSet = \"abcdefghijkmnopqrstuvwxyz\";\n if (o.ambiguous) {\n lowercaseCharSet += \"l\";\n }\n if (o.lowercase) {\n allCharSet += lowercaseCharSet;\n }\n\n let uppercaseCharSet = \"ABCDEFGHJKLMNPQRSTUVWXYZ\";\n if (o.ambiguous) {\n uppercaseCharSet += \"IO\";\n }\n if (o.uppercase) {\n allCharSet += uppercaseCharSet;\n }\n\n let numberCharSet = \"23456789\";\n if (o.ambiguous) {\n numberCharSet += \"01\";\n }\n if (o.number) {\n allCharSet += numberCharSet;\n }\n\n const specialCharSet = \"!@#$%^&*\";\n if (o.special) {\n allCharSet += specialCharSet;\n }\n\n let password = \"\";\n for (let i = 0; i < o.length; i++) {\n let positionChars: string;\n switch (positions[i]) {\n case \"l\":\n positionChars = lowercaseCharSet;\n break;\n case \"u\":\n positionChars = uppercaseCharSet;\n break;\n case \"n\":\n positionChars = numberCharSet;\n break;\n case \"s\":\n positionChars = specialCharSet;\n break;\n case \"a\":\n positionChars = allCharSet;\n break;\n default:\n break;\n }\n\n const randomCharIndex = await this.cryptoService.randomNumber(0, positionChars.length - 1);\n password += positionChars.charAt(randomCharIndex);\n }\n\n return password;\n }\n\n async generatePassphrase(options: PasswordGeneratorOptions): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.numWords == null || o.numWords <= 2) {\n o.numWords = DefaultOptions.numWords;\n }\n if (o.wordSeparator == null || o.wordSeparator.length === 0 || o.wordSeparator.length > 1) {\n o.wordSeparator = \" \";\n }\n if (o.capitalize == null) {\n o.capitalize = false;\n }\n if (o.includeNumber == null) {\n o.includeNumber = false;\n }\n\n const listLength = EFFLongWordList.length - 1;\n const wordList = new Array(o.numWords);\n for (let i = 0; i < o.numWords; i++) {\n const wordIndex = await this.cryptoService.randomNumber(0, listLength);\n if (o.capitalize) {\n wordList[i] = this.capitalize(EFFLongWordList[wordIndex]);\n } else {\n wordList[i] = EFFLongWordList[wordIndex];\n }\n }\n\n if (o.includeNumber) {\n await this.appendRandomNumberToRandomWord(wordList);\n }\n return wordList.join(o.wordSeparator);\n }\n\n async getOptions(): Promise<[PasswordGeneratorOptions, PasswordGeneratorPolicyOptions]> {\n let options = await this.stateService.getPasswordGenerationOptions();\n if (options == null) {\n options = Object.assign({}, DefaultOptions);\n } else {\n options = Object.assign({}, DefaultOptions, options);\n }\n await this.stateService.setPasswordGenerationOptions(options);\n const enforcedOptions = await this.enforcePasswordGeneratorPoliciesOnOptions(options);\n options = enforcedOptions[0];\n return [options, enforcedOptions[1]];\n }\n\n async enforcePasswordGeneratorPoliciesOnOptions(\n options: PasswordGeneratorOptions\n ): Promise<[PasswordGeneratorOptions, PasswordGeneratorPolicyOptions]> {\n let enforcedPolicyOptions = await this.getPasswordGeneratorPolicyOptions();\n if (enforcedPolicyOptions != null) {\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (enforcedPolicyOptions.useUppercase) {\n options.uppercase = true;\n }\n\n if (enforcedPolicyOptions.useLowercase) {\n options.lowercase = true;\n }\n\n if (enforcedPolicyOptions.useNumbers) {\n options.number = true;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (enforcedPolicyOptions.useSpecial) {\n options.special = true;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n // Must normalize these fields because the receiving call expects all options to pass the current rules\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (enforcedPolicyOptions.capitalize) {\n options.capitalize = true;\n }\n\n if (enforcedPolicyOptions.includeNumber) {\n options.includeNumber = true;\n }\n\n // Force default type if password/passphrase selected via policy\n if (\n enforcedPolicyOptions.defaultType === \"password\" ||\n enforcedPolicyOptions.defaultType === \"passphrase\"\n ) {\n options.type = enforcedPolicyOptions.defaultType;\n }\n } else {\n // UI layer expects an instantiated object to prevent more explicit null checks\n enforcedPolicyOptions = new PasswordGeneratorPolicyOptions();\n }\n return [options, enforcedPolicyOptions];\n }\n\n async getPasswordGeneratorPolicyOptions(): Promise {\n const policies = await this.policyService?.getAll(PolicyType.PasswordGenerator);\n let enforcedOptions: PasswordGeneratorPolicyOptions = null;\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach((currentPolicy) => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new PasswordGeneratorPolicyOptions();\n }\n\n // Password wins in multi-org collisions\n if (currentPolicy.data.defaultType != null && enforcedOptions.defaultType !== \"password\") {\n enforcedOptions.defaultType = currentPolicy.data.defaultType;\n }\n\n if (\n currentPolicy.data.minLength != null &&\n currentPolicy.data.minLength > enforcedOptions.minLength\n ) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.useUpper) {\n enforcedOptions.useUppercase = true;\n }\n\n if (currentPolicy.data.useLower) {\n enforcedOptions.useLowercase = true;\n }\n\n if (currentPolicy.data.useNumbers) {\n enforcedOptions.useNumbers = true;\n }\n\n if (\n currentPolicy.data.minNumbers != null &&\n currentPolicy.data.minNumbers > enforcedOptions.numberCount\n ) {\n enforcedOptions.numberCount = currentPolicy.data.minNumbers;\n }\n\n if (currentPolicy.data.useSpecial) {\n enforcedOptions.useSpecial = true;\n }\n\n if (\n currentPolicy.data.minSpecial != null &&\n currentPolicy.data.minSpecial > enforcedOptions.specialCount\n ) {\n enforcedOptions.specialCount = currentPolicy.data.minSpecial;\n }\n\n if (\n currentPolicy.data.minNumberWords != null &&\n currentPolicy.data.minNumberWords > enforcedOptions.minNumberWords\n ) {\n enforcedOptions.minNumberWords = currentPolicy.data.minNumberWords;\n }\n\n if (currentPolicy.data.capitalize) {\n enforcedOptions.capitalize = true;\n }\n\n if (currentPolicy.data.includeNumber) {\n enforcedOptions.includeNumber = true;\n }\n });\n\n return enforcedOptions;\n }\n\n async saveOptions(options: PasswordGeneratorOptions) {\n await this.stateService.setPasswordGenerationOptions(options);\n }\n\n async getHistory(): Promise {\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return new Array();\n }\n\n if ((await this.stateService.getDecryptedPasswordGenerationHistory()) == null) {\n const encrypted = await this.stateService.getEncryptedPasswordGenerationHistory();\n const decrypted = await this.decryptHistory(encrypted);\n await this.stateService.setDecryptedPasswordGenerationHistory(decrypted);\n }\n\n const passwordGenerationHistory =\n await this.stateService.getDecryptedPasswordGenerationHistory();\n return passwordGenerationHistory != null\n ? passwordGenerationHistory\n : new Array();\n }\n\n async addHistory(password: string): Promise {\n // Cannot add new history if no key is available\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return;\n }\n\n const currentHistory = await this.getHistory();\n\n // Prevent duplicates\n if (this.matchesPrevious(password, currentHistory)) {\n return;\n }\n\n currentHistory.unshift(new GeneratedPasswordHistory(password, Date.now()));\n\n // Remove old items.\n if (currentHistory.length > MaxPasswordsInHistory) {\n currentHistory.pop();\n }\n\n const newHistory = await this.encryptHistory(currentHistory);\n await this.stateService.setDecryptedPasswordGenerationHistory(currentHistory);\n return await this.stateService.setEncryptedPasswordGenerationHistory(newHistory);\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setEncryptedPasswordGenerationHistory(null, { userId: userId });\n await this.stateService.setDecryptedPasswordGenerationHistory(null, { userId: userId });\n }\n\n passwordStrength(password: string, userInputs: string[] = null): zxcvbn.ZXCVBNResult {\n if (password == null || password.length === 0) {\n return null;\n }\n let globalUserInputs = [\"bitwarden\", \"bit\", \"warden\"];\n if (userInputs != null && userInputs.length > 0) {\n globalUserInputs = globalUserInputs.concat(userInputs);\n }\n // Use a hash set to get rid of any duplicate user inputs\n const finalUserInputs = Array.from(new Set(globalUserInputs));\n const result = zxcvbn(password, finalUserInputs);\n return result;\n }\n\n normalizeOptions(\n options: PasswordGeneratorOptions,\n enforcedPolicyOptions: PasswordGeneratorPolicyOptions\n ) {\n options.minLowercase = 0;\n options.minUppercase = 0;\n\n if (!options.length || options.length < 5) {\n options.length = 5;\n } else if (options.length > 128) {\n options.length = 128;\n }\n\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (!options.minNumber) {\n options.minNumber = 0;\n } else if (options.minNumber > options.length) {\n options.minNumber = options.length;\n } else if (options.minNumber > 9) {\n options.minNumber = 9;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (!options.minSpecial) {\n options.minSpecial = 0;\n } else if (options.minSpecial > options.length) {\n options.minSpecial = options.length;\n } else if (options.minSpecial > 9) {\n options.minSpecial = 9;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords == null || options.length < 3) {\n options.numWords = 3;\n } else if (options.numWords > 20) {\n options.numWords = 20;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (options.wordSeparator != null && options.wordSeparator.length > 1) {\n options.wordSeparator = options.wordSeparator[0];\n }\n\n this.sanitizePasswordLength(options, false);\n }\n\n private capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n private async appendRandomNumberToRandomWord(wordList: string[]) {\n if (wordList == null || wordList.length <= 0) {\n return;\n }\n const index = await this.cryptoService.randomNumber(0, wordList.length - 1);\n const num = await this.cryptoService.randomNumber(0, 9);\n wordList[index] = wordList[index] + num;\n }\n\n private async encryptHistory(\n history: GeneratedPasswordHistory[]\n ): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async (item) => {\n const encrypted = await this.cryptoService.encrypt(item.password);\n return new GeneratedPasswordHistory(encrypted.encryptedString, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private async decryptHistory(\n history: GeneratedPasswordHistory[]\n ): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async (item) => {\n const decrypted = await this.cryptoService.decryptToUtf8(new EncString(item.password));\n return new GeneratedPasswordHistory(decrypted, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private matchesPrevious(password: string, history: GeneratedPasswordHistory[]): boolean {\n if (history == null || history.length === 0) {\n return false;\n }\n\n return history[history.length - 1].password === password;\n }\n\n // ref: https://stackoverflow.com/a/12646864/1090359\n private async shuffleArray(array: string[]) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = await this.cryptoService.randomNumber(0, i);\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n\n private sanitizePasswordLength(options: any, forGeneration: boolean) {\n let minUppercaseCalc = 0;\n let minLowercaseCalc = 0;\n let minNumberCalc: number = options.minNumber;\n let minSpecialCalc: number = options.minSpecial;\n\n if (options.uppercase && options.minUppercase <= 0) {\n minUppercaseCalc = 1;\n } else if (!options.uppercase) {\n minUppercaseCalc = 0;\n }\n\n if (options.lowercase && options.minLowercase <= 0) {\n minLowercaseCalc = 1;\n } else if (!options.lowercase) {\n minLowercaseCalc = 0;\n }\n\n if (options.number && options.minNumber <= 0) {\n minNumberCalc = 1;\n } else if (!options.number) {\n minNumberCalc = 0;\n }\n\n if (options.special && options.minSpecial <= 0) {\n minSpecialCalc = 1;\n } else if (!options.special) {\n minSpecialCalc = 0;\n }\n\n // This should never happen but is a final safety net\n if (!options.length || options.length < 1) {\n options.length = 10;\n }\n\n const minLength: number = minUppercaseCalc + minLowercaseCalc + minNumberCalc + minSpecialCalc;\n // Normalize and Generation both require this modification\n if (options.length < minLength) {\n options.length = minLength;\n }\n\n // Apply other changes if the options object passed in is for generation\n if (forGeneration) {\n options.minUppercase = minUppercaseCalc;\n options.minLowercase = minLowercaseCalc;\n options.minNumber = minNumberCalc;\n options.minSpecial = minSpecialCalc;\n }\n }\n}\n","import Domain from \"./domain-base\";\n\nexport class ResetPasswordPolicyOptions extends Domain {\n autoEnrollEnabled = false;\n}\n","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 { I18nService } from \"../abstractions/i18n.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { SearchService as SearchServiceAbstraction } from \"../abstractions/search.service\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { SendView } from \"../models/view/send.view\";\nimport { CipherService } from \"../vault/abstractions/cipher.service\";\nimport { CipherType } from \"../vault/enums/cipher-type\";\nimport { CipherView } from \"../vault/models/view/cipher.view\";\n\nexport class SearchService implements SearchServiceAbstraction {\n private static registeredPipeline = false;\n\n indexedEntityId?: string = null;\n private indexing = false;\n private index: lunr.Index = null;\n private readonly immediateSearchLocales: string[] = [\"zh-CN\", \"zh-TW\", \"ja\", \"ko\", \"vi\"];\n private readonly defaultSearchableMinLength: number = 2;\n private searchableMinLength: number = this.defaultSearchableMinLength;\n\n constructor(\n private cipherService: CipherService,\n private logService: LogService,\n private i18nService: I18nService\n ) {\n this.i18nService.locale$.subscribe((locale) => {\n if (this.immediateSearchLocales.indexOf(locale) !== -1) {\n this.searchableMinLength = 1;\n } else {\n this.searchableMinLength = this.defaultSearchableMinLength;\n }\n });\n\n // Currently have to ensure this is only done a single time. Lunr allows you to register a function\n // multiple times but they will add a warning message to the console. The way they do that breaks when ran on a service worker.\n if (!SearchService.registeredPipeline) {\n SearchService.registeredPipeline = true;\n //register lunr pipeline function\n lunr.Pipeline.registerFunction(this.normalizeAccentsPipelineFunction, \"normalizeAccents\");\n }\n }\n\n clearIndex(): void {\n this.indexedEntityId = null;\n this.index = null;\n }\n\n isSearchable(query: string): boolean {\n query = SearchService.normalizeSearchQuery(query);\n const notSearchable =\n query == null ||\n (this.index == null && query.length < this.searchableMinLength) ||\n (this.index != null && query.length < this.searchableMinLength && query.indexOf(\">\") !== 0);\n return !notSearchable;\n }\n\n async indexCiphers(indexedEntityId?: string, ciphers?: CipherView[]): Promise {\n if (this.indexing) {\n return;\n }\n\n this.indexing = true;\n this.indexedEntityId = indexedEntityId;\n this.index = null;\n const builder = new lunr.Builder();\n builder.pipeline.add(this.normalizeAccentsPipelineFunction);\n builder.ref(\"id\");\n builder.field(\"shortid\", { boost: 100, extractor: (c: CipherView) => c.id.substr(0, 8) });\n builder.field(\"name\", {\n boost: 10,\n });\n builder.field(\"subtitle\", {\n boost: 5,\n extractor: (c: CipherView) => {\n if (c.subTitle != null && c.type === CipherType.Card) {\n return c.subTitle.replace(/\\*/g, \"\");\n }\n return c.subTitle;\n },\n });\n builder.field(\"notes\");\n builder.field(\"login.username\", {\n extractor: (c: CipherView) =>\n c.type === CipherType.Login && c.login != null ? c.login.username : null,\n });\n builder.field(\"login.uris\", { boost: 2, extractor: (c: CipherView) => this.uriExtractor(c) });\n builder.field(\"fields\", { extractor: (c: CipherView) => this.fieldExtractor(c, false) });\n builder.field(\"fields_joined\", { extractor: (c: CipherView) => this.fieldExtractor(c, true) });\n builder.field(\"attachments\", {\n extractor: (c: CipherView) => this.attachmentExtractor(c, false),\n });\n builder.field(\"attachments_joined\", {\n extractor: (c: CipherView) => this.attachmentExtractor(c, true),\n });\n builder.field(\"organizationid\", { extractor: (c: CipherView) => c.organizationId });\n ciphers = ciphers || (await this.cipherService.getAllDecrypted());\n ciphers.forEach((c) => builder.add(c));\n this.index = builder.build();\n\n this.indexing = false;\n\n this.logService.info(\"Finished search indexing\");\n }\n\n async searchCiphers(\n query: string,\n filter: ((cipher: CipherView) => boolean) | ((cipher: CipherView) => boolean)[] = null,\n ciphers: CipherView[] = null\n ): Promise {\n const results: CipherView[] = [];\n if (query != null) {\n query = SearchService.normalizeSearchQuery(query.trim().toLowerCase());\n }\n if (query === \"\") {\n query = null;\n }\n\n if (ciphers == null) {\n ciphers = await this.cipherService.getAllDecrypted();\n }\n\n if (filter != null && Array.isArray(filter) && filter.length > 0) {\n ciphers = ciphers.filter((c) => filter.every((f) => f == null || f(c)));\n } else if (filter != null) {\n ciphers = ciphers.filter(filter as (cipher: CipherView) => boolean);\n }\n\n if (!this.isSearchable(query)) {\n return ciphers;\n }\n\n if (this.indexing) {\n await new Promise((r) => setTimeout(r, 250));\n if (this.indexing) {\n await new Promise((r) => setTimeout(r, 500));\n }\n }\n\n const index = this.getIndexForSearch();\n if (index == null) {\n // Fall back to basic search if index is not available\n return this.searchCiphersBasic(ciphers, query);\n }\n\n const ciphersMap = new Map();\n ciphers.forEach((c) => ciphersMap.set(c.id, c));\n\n let searchResults: lunr.Index.Result[] = null;\n const isQueryString = query != null && query.length > 1 && query.indexOf(\">\") === 0;\n if (isQueryString) {\n try {\n searchResults = index.search(query.substr(1).trim());\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n const soWild = lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING;\n searchResults = index.query((q) => {\n lunr.tokenizer(query).forEach((token) => {\n const t = token.toString();\n q.term(t, { fields: [\"name\"], wildcard: soWild });\n q.term(t, { fields: [\"subtitle\"], wildcard: soWild });\n q.term(t, { fields: [\"login.uris\"], wildcard: soWild });\n q.term(t, {});\n });\n });\n }\n\n if (searchResults != null) {\n searchResults.forEach((r) => {\n if (ciphersMap.has(r.ref)) {\n results.push(ciphersMap.get(r.ref));\n }\n });\n }\n return results;\n }\n\n searchCiphersBasic(ciphers: CipherView[], query: string, deleted = false) {\n query = SearchService.normalizeSearchQuery(query.trim().toLowerCase());\n return ciphers.filter((c) => {\n if (deleted !== c.isDeleted) {\n return false;\n }\n if (c.name != null && c.name.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (query.length >= 8 && c.id.startsWith(query)) {\n return true;\n }\n if (c.subTitle != null && c.subTitle.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (\n c.login &&\n c.login.hasUris &&\n c.login.uris.some((loginUri) => loginUri?.uri?.toLowerCase().indexOf(query) > -1)\n ) {\n return true;\n }\n return false;\n });\n }\n\n searchSends(sends: SendView[], query: string) {\n query = SearchService.normalizeSearchQuery(query.trim().toLocaleLowerCase());\n if (query === null) {\n return sends;\n }\n const sendsMatched: SendView[] = [];\n const lowPriorityMatched: SendView[] = [];\n sends.forEach((s) => {\n if (s.name != null && s.name.toLowerCase().indexOf(query) > -1) {\n sendsMatched.push(s);\n } else if (\n query.length >= 8 &&\n (s.id.startsWith(query) ||\n s.accessId.toLocaleLowerCase().startsWith(query) ||\n (s.file?.id != null && s.file.id.startsWith(query)))\n ) {\n lowPriorityMatched.push(s);\n } else if (s.notes != null && s.notes.toLowerCase().indexOf(query) > -1) {\n lowPriorityMatched.push(s);\n } else if (s.text?.text != null && s.text.text.toLowerCase().indexOf(query) > -1) {\n lowPriorityMatched.push(s);\n } else if (s.file?.fileName != null && s.file.fileName.toLowerCase().indexOf(query) > -1) {\n lowPriorityMatched.push(s);\n }\n });\n return sendsMatched.concat(lowPriorityMatched);\n }\n\n getIndexForSearch(): lunr.Index {\n return this.index;\n }\n\n private fieldExtractor(c: CipherView, joined: boolean) {\n if (!c.hasFields) {\n return null;\n }\n let fields: string[] = [];\n c.fields.forEach((f) => {\n if (f.name != null) {\n fields.push(f.name);\n }\n if (f.type === FieldType.Text && f.value != null) {\n fields.push(f.value);\n }\n });\n fields = fields.filter((f) => f.trim() !== \"\");\n if (fields.length === 0) {\n return null;\n }\n return joined ? fields.join(\" \") : fields;\n }\n\n private attachmentExtractor(c: CipherView, joined: boolean) {\n if (!c.hasAttachments) {\n return null;\n }\n let attachments: string[] = [];\n c.attachments.forEach((a) => {\n if (a != null && a.fileName != null) {\n if (joined && a.fileName.indexOf(\".\") > -1) {\n attachments.push(a.fileName.substr(0, a.fileName.lastIndexOf(\".\")));\n } else {\n attachments.push(a.fileName);\n }\n }\n });\n attachments = attachments.filter((f) => f.trim() !== \"\");\n if (attachments.length === 0) {\n return null;\n }\n return joined ? attachments.join(\" \") : attachments;\n }\n\n private uriExtractor(c: CipherView) {\n if (c.type !== CipherType.Login || c.login == null || !c.login.hasUris) {\n return null;\n }\n const uris: string[] = [];\n c.login.uris.forEach((u) => {\n if (u.uri == null || u.uri === \"\") {\n return;\n }\n if (u.hostname != null) {\n uris.push(u.hostname);\n return;\n }\n let uri = u.uri;\n if (u.match !== UriMatchType.RegularExpression) {\n const protocolIndex = uri.indexOf(\"://\");\n if (protocolIndex > -1) {\n uri = uri.substr(protocolIndex + 3);\n }\n const queryIndex = uri.search(/\\?|&|#/);\n if (queryIndex > -1) {\n uri = uri.substring(0, queryIndex);\n }\n }\n uris.push(uri);\n });\n return uris.length > 0 ? uris : null;\n }\n\n private normalizeAccentsPipelineFunction(token: lunr.Token): any {\n const searchableFields = [\"name\", \"login.username\", \"subtitle\", \"notes\"];\n const fields = (token as any).metadata[\"fields\"];\n const checkFields = fields.every((i: any) => searchableFields.includes(i));\n\n if (checkFields) {\n return SearchService.normalizeSearchQuery(token.toString());\n }\n\n return token;\n }\n\n // Remove accents/diacritics characters from text. This regex is equivalent to the Diacritic unicode property escape, i.e. it will match all diacritic characters.\n static normalizeSearchQuery(query: string): string {\n return query?.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { Utils } from \"../../misc/utils\";\nimport { SendData } from \"../data/send.data\";\nimport { SendView } from \"../view/send.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SendFile } from \"./send-file\";\nimport { SendText } from \"./send-text\";\n\nexport class Send extends Domain {\n id: string;\n accessId: string;\n type: SendType;\n name: EncString;\n notes: EncString;\n file: SendFile;\n text: SendText;\n key: EncString;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: Date;\n expirationDate: Date;\n deletionDate: Date;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(obj?: SendData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n accessId: null,\n name: null,\n notes: null,\n key: null,\n },\n [\"id\", \"accessId\"]\n );\n\n this.type = obj.type;\n this.maxAccessCount = obj.maxAccessCount;\n this.accessCount = obj.accessCount;\n this.password = obj.password;\n this.disabled = obj.disabled;\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n this.deletionDate = obj.deletionDate != null ? new Date(obj.deletionDate) : null;\n this.expirationDate = obj.expirationDate != null ? new Date(obj.expirationDate) : null;\n this.hideEmail = obj.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendText(obj.text);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file);\n break;\n default:\n break;\n }\n }\n\n async decrypt(): Promise {\n const model = new SendView(this);\n\n const cryptoService = Utils.getContainerService().getCryptoService();\n\n try {\n model.key = await cryptoService.decryptToBytes(this.key, null);\n model.cryptoKey = await cryptoService.makeSendKey(model.key);\n } catch (e) {\n // TODO: error?\n }\n\n await this.decryptObj(\n model,\n {\n name: null,\n notes: null,\n },\n null,\n model.cryptoKey\n );\n\n switch (this.type) {\n case SendType.File:\n model.file = await this.file.decrypt(model.cryptoKey);\n break;\n case SendType.Text:\n model.text = await this.text.decrypt(model.cryptoKey);\n break;\n default:\n break;\n }\n\n return model;\n }\n}\n","import { StateService } from \"../abstractions/state.service\";\nimport { TokenService as TokenServiceAbstraction } from \"../abstractions/token.service\";\nimport { Utils } from \"../misc/utils\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\n\nexport class TokenService implements TokenServiceAbstraction {\n static decodeToken(token: string): Promise {\n if (token == null) {\n throw new Error(\"Token not provided.\");\n }\n\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n throw new Error(\"JWT must have 3 parts\");\n }\n\n const decoded = Utils.fromUrlB64ToUtf8(parts[1]);\n if (decoded == null) {\n throw new Error(\"Cannot decode the token\");\n }\n\n const decodedToken = JSON.parse(decoded);\n return decodedToken;\n }\n\n constructor(private stateService: StateService) {}\n\n async setTokens(\n accessToken: string,\n refreshToken: string,\n clientIdClientSecret: [string, string]\n ): Promise {\n await this.setToken(accessToken);\n await this.setRefreshToken(refreshToken);\n if (clientIdClientSecret != null) {\n await this.setClientId(clientIdClientSecret[0]);\n await this.setClientSecret(clientIdClientSecret[1]);\n }\n }\n\n async setClientId(clientId: string): Promise {\n return await this.stateService.setApiKeyClientId(clientId);\n }\n\n async getClientId(): Promise {\n return await this.stateService.getApiKeyClientId();\n }\n\n async setClientSecret(clientSecret: string): Promise {\n return await this.stateService.setApiKeyClientSecret(clientSecret);\n }\n\n async getClientSecret(): Promise {\n return await this.stateService.getApiKeyClientSecret();\n }\n\n async setToken(token: string): Promise {\n await this.stateService.setAccessToken(token);\n }\n\n async getToken(): Promise {\n return await this.stateService.getAccessToken();\n }\n\n async setRefreshToken(refreshToken: string): Promise {\n return await this.stateService.setRefreshToken(refreshToken);\n }\n\n async getRefreshToken(): Promise {\n return await this.stateService.getRefreshToken();\n }\n\n async setTwoFactorToken(tokenResponse: IdentityTokenResponse): Promise {\n return await this.stateService.setTwoFactorToken(tokenResponse.twoFactorToken);\n }\n\n async getTwoFactorToken(): Promise {\n return await this.stateService.getTwoFactorToken();\n }\n\n async clearTwoFactorToken(): Promise {\n return await this.stateService.setTwoFactorToken(null);\n }\n\n async clearToken(userId?: string): Promise {\n await this.stateService.setAccessToken(null, { userId: userId });\n await this.stateService.setRefreshToken(null, { userId: userId });\n await this.stateService.setApiKeyClientId(null, { userId: userId });\n await this.stateService.setApiKeyClientSecret(null, { userId: userId });\n }\n\n // jwthelper methods\n // ref https://github.com/auth0/angular-jwt/blob/master/src/angularJwt/services/jwt.js\n\n async decodeToken(token?: string): Promise {\n token = token ?? (await this.stateService.getAccessToken());\n\n if (token == null) {\n throw new Error(\"Token not found.\");\n }\n\n return TokenService.decodeToken(token);\n }\n\n async getTokenExpirationDate(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.exp === \"undefined\") {\n return null;\n }\n\n const d = new Date(0); // The 0 here is the key, which sets the date to the epoch\n d.setUTCSeconds(decoded.exp);\n return d;\n }\n\n async tokenSecondsRemaining(offsetSeconds = 0): Promise {\n const d = await this.getTokenExpirationDate();\n if (d == null) {\n return 0;\n }\n\n const msRemaining = d.valueOf() - (new Date().valueOf() + offsetSeconds * 1000);\n return Math.round(msRemaining / 1000);\n }\n\n async tokenNeedsRefresh(minutes = 5): Promise {\n const sRemaining = await this.tokenSecondsRemaining();\n return sRemaining < 60 * minutes;\n }\n\n async getUserId(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.sub === \"undefined\") {\n throw new Error(\"No user id found\");\n }\n\n return decoded.sub as string;\n }\n\n async getEmail(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.email === \"undefined\") {\n throw new Error(\"No email found\");\n }\n\n return decoded.email as string;\n }\n\n async getEmailVerified(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.email_verified === \"undefined\") {\n throw new Error(\"No email verification found\");\n }\n\n return decoded.email_verified as boolean;\n }\n\n async getName(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.name === \"undefined\") {\n return null;\n }\n\n return decoded.name as string;\n }\n\n async getIssuer(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.iss === \"undefined\") {\n throw new Error(\"No issuer found\");\n }\n\n return decoded.iss as string;\n }\n\n async getIsExternal(): Promise {\n const decoded = await this.decodeToken();\n\n return Array.isArray(decoded.amr) && decoded.amr.includes(\"external\");\n }\n}\n","import { AbstractStorageService } from \"../abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"../enums/htmlStorageLocation\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { StateVersion } from \"../enums/stateVersion\";\nimport { ThemeType } from \"../enums/themeType\";\nimport { StateFactory } from \"../factories/stateFactory\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { EventData } from \"../models/data/event.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\";\nimport { CipherData } from \"../vault/models/data/cipher.data\";\nimport { FolderData } from \"../vault/models/data/folder.data\";\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 { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { TotpService as TotpServiceAbstraction } from \"../abstractions/totp.service\";\nimport { Utils } from \"../misc/utils\";\n\nconst B32Chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\nconst SteamChars = \"23456789BCDFGHJKMNPQRTVWXY\";\n\nexport class TotpService implements TotpServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private logService: LogService\n ) {}\n\n async getCode(key: string): Promise {\n if (key == null) {\n return null;\n }\n let period = 30;\n let alg: \"sha1\" | \"sha256\" | \"sha512\" = \"sha1\";\n let digits = 6;\n let keyB32 = key;\n const isOtpAuth = key.toLowerCase().indexOf(\"otpauth://\") === 0;\n const isSteamAuth = !isOtpAuth && key.toLowerCase().indexOf(\"steam://\") === 0;\n if (isOtpAuth) {\n const params = Utils.getQueryParams(key);\n if (params.has(\"digits\") && params.get(\"digits\") != null) {\n try {\n const digitParams = parseInt(params.get(\"digits\").trim(), null);\n if (digitParams > 10) {\n digits = 10;\n } else if (digitParams > 0) {\n digits = digitParams;\n }\n } catch {\n this.logService.error(\"Invalid digits param.\");\n }\n }\n if (params.has(\"period\") && params.get(\"period\") != null) {\n try {\n const periodParam = parseInt(params.get(\"period\").trim(), null);\n if (periodParam > 0) {\n period = periodParam;\n }\n } catch {\n this.logService.error(\"Invalid period param.\");\n }\n }\n if (params.has(\"secret\") && params.get(\"secret\") != null) {\n keyB32 = params.get(\"secret\");\n }\n if (params.has(\"algorithm\") && params.get(\"algorithm\") != null) {\n const algParam = params.get(\"algorithm\").toLowerCase();\n if (algParam === \"sha1\" || algParam === \"sha256\" || algParam === \"sha512\") {\n alg = algParam;\n }\n }\n } else if (isSteamAuth) {\n keyB32 = key.substr(\"steam://\".length);\n digits = 5;\n }\n\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const timeHex = this.leftPad(this.decToHex(Math.floor(epoch / period)), 16, \"0\");\n const timeBytes = Utils.fromHexToArray(timeHex);\n const keyBytes = this.b32ToBytes(keyB32);\n\n if (!keyBytes.length || !timeBytes.length) {\n return null;\n }\n\n const hash = await this.sign(keyBytes, timeBytes, alg);\n if (hash.length === 0) {\n return null;\n }\n\n const offset = hash[hash.length - 1] & 0xf;\n const binary =\n ((hash[offset] & 0x7f) << 24) |\n ((hash[offset + 1] & 0xff) << 16) |\n ((hash[offset + 2] & 0xff) << 8) |\n (hash[offset + 3] & 0xff);\n\n let otp = \"\";\n if (isSteamAuth) {\n let fullCode = binary & 0x7fffffff;\n for (let i = 0; i < digits; i++) {\n otp += SteamChars[fullCode % SteamChars.length];\n fullCode = Math.trunc(fullCode / SteamChars.length);\n }\n } else {\n otp = (binary % Math.pow(10, digits)).toString();\n otp = this.leftPad(otp, digits, \"0\");\n }\n\n return otp;\n }\n\n getTimeInterval(key: string): number {\n let period = 30;\n if (key != null && key.toLowerCase().indexOf(\"otpauth://\") === 0) {\n const params = Utils.getQueryParams(key);\n if (params.has(\"period\") && params.get(\"period\") != null) {\n try {\n period = parseInt(params.get(\"period\").trim(), null);\n } catch {\n this.logService.error(\"Invalid period param.\");\n }\n }\n }\n return period;\n }\n\n // Helpers\n\n private leftPad(s: string, l: number, p: string): string {\n if (l + 1 >= s.length) {\n s = Array(l + 1 - s.length).join(p) + s;\n }\n return s;\n }\n\n private decToHex(d: number): string {\n return (d < 15.5 ? \"0\" : \"\") + Math.round(d).toString(16);\n }\n\n private b32ToHex(s: string): string {\n s = s.toUpperCase();\n let cleanedInput = \"\";\n\n for (let i = 0; i < s.length; i++) {\n if (B32Chars.indexOf(s[i]) < 0) {\n continue;\n }\n\n cleanedInput += s[i];\n }\n s = cleanedInput;\n\n let bits = \"\";\n let hex = \"\";\n for (let i = 0; i < s.length; i++) {\n const byteIndex = B32Chars.indexOf(s.charAt(i));\n if (byteIndex < 0) {\n continue;\n }\n bits += this.leftPad(byteIndex.toString(2), 5, \"0\");\n }\n for (let i = 0; i + 4 <= bits.length; i += 4) {\n const chunk = bits.substr(i, 4);\n hex = hex + parseInt(chunk, 2).toString(16);\n }\n return hex;\n }\n\n private b32ToBytes(s: string): Uint8Array {\n return Utils.fromHexToArray(this.b32ToHex(s));\n }\n\n private async sign(\n keyBytes: Uint8Array,\n timeBytes: Uint8Array,\n alg: \"sha1\" | \"sha256\" | \"sha512\"\n ) {\n const signature = await this.cryptoFunctionService.hmac(timeBytes.buffer, keyBytes.buffer, alg);\n return new Uint8Array(signature);\n }\n}\n","export class VerifyOTPRequest {\n OTP: string;\n\n constructor(OTP: string) {\n this.OTP = OTP;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class AnonAddyForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid AnonAddy API token.\";\n }\n if (options.anonaddy?.domain == null || options.anonaddy.domain === \"\") {\n throw \"Invalid AnonAddy domain.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://app.anonaddy.com/api/v1/aliases\";\n requestInit.body = JSON.stringify({\n domain: options.anonaddy.domain,\n description:\n (options.website != null ? \"Website: \" + options.website + \". \" : \"\") +\n \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json?.data?.email;\n }\n if (response.status === 401) {\n throw \"Invalid AnonAddy API token.\";\n }\n throw \"Unknown AnonAddy error occurred.\";\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class DuckDuckGoForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid DuckDuckGo API token.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://quack.duckduckgo.com/api/email/addresses\";\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n if (json.address) {\n return `${json.address}@duck.com`;\n }\n } else if (response.status === 401) {\n throw \"Invalid DuckDuckGo API token.\";\n }\n throw \"Unknown DuckDuckGo error occurred.\";\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class FastmailForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid Fastmail API token.\";\n }\n\n const accountId = await this.getAccountId(apiService, options);\n if (accountId == null || accountId === \"\") {\n throw \"Unable to obtain Fastmail masked email account ID.\";\n }\n\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://api.fastmail.com/jmap/api/\";\n requestInit.body = JSON.stringify({\n using: [\"https://www.fastmail.com/dev/maskedemail\", \"urn:ietf:params:jmap:core\"],\n methodCalls: [\n [\n \"MaskedEmail/set\",\n {\n accountId: accountId,\n create: {\n \"new-masked-email\": {\n state: \"enabled\",\n description: \"\",\n url: options.website,\n emailPrefix: options.fastmail.prefix,\n },\n },\n },\n \"0\",\n ],\n ],\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200) {\n const json = await response.json();\n if (\n json.methodResponses != null &&\n json.methodResponses.length > 0 &&\n json.methodResponses[0].length > 0\n ) {\n if (json.methodResponses[0][0] === \"MaskedEmail/set\") {\n if (json.methodResponses[0][1]?.created?.[\"new-masked-email\"] != null) {\n return json.methodResponses[0][1]?.created?.[\"new-masked-email\"]?.email;\n }\n if (json.methodResponses[0][1]?.notCreated?.[\"new-masked-email\"] != null) {\n throw (\n \"Fastmail error: \" +\n json.methodResponses[0][1]?.notCreated?.[\"new-masked-email\"]?.description\n );\n }\n } else if (json.methodResponses[0][0] === \"error\") {\n throw \"Fastmail error: \" + json.methodResponses[0][1]?.description;\n }\n }\n }\n if (response.status === 401 || response.status === 403) {\n throw \"Invalid Fastmail API token.\";\n }\n throw \"Unknown Fastmail error occurred.\";\n }\n\n private async getAccountId(apiService: ApiService, options: ForwarderOptions): Promise {\n const requestInit: RequestInit = {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n }),\n };\n const url = \"https://api.fastmail.com/.well-known/jmap\";\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200) {\n const json = await response.json();\n if (json.primaryAccounts != null) {\n return json.primaryAccounts[\"https://www.fastmail.com/dev/maskedemail\"];\n }\n }\n return null;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class FirefoxRelayForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid Firefox Relay API token.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Token \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://relay.firefox.com/api/v1/relayaddresses/\";\n requestInit.body = JSON.stringify({\n enabled: true,\n generated_for: options.website,\n description:\n (options.website != null ? options.website + \" - \" : \"\") + \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json?.full_address;\n }\n if (response.status === 401) {\n throw \"Invalid Firefox Relay API token.\";\n }\n throw \"Unknown Firefox Relay error occurred.\";\n }\n}\n","export class ForwarderOptions {\n apiKey: string;\n website: string;\n fastmail = new FastmailForwarderOptions();\n anonaddy = new AnonAddyForwarderOptions();\n}\n\nexport class FastmailForwarderOptions {\n prefix: string;\n}\n\nexport class AnonAddyForwarderOptions {\n domain: string;\n}\n","import { ApiService } from \"../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class SimpleLoginForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid SimpleLogin API key.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authentication: options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n let url = \"https://app.simplelogin.io/api/alias/random/new\";\n if (options.website != null) {\n url += \"?hostname=\" + options.website;\n }\n requestInit.body = JSON.stringify({\n note:\n (options.website != null ? \"Website: \" + options.website + \". \" : \"\") +\n \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json.alias;\n }\n if (response.status === 401) {\n throw \"Invalid SimpleLogin API key.\";\n }\n try {\n const json = await response.json();\n if (json?.error != null) {\n throw \"SimpleLogin error:\" + json.error;\n }\n } catch {\n // Do nothing...\n }\n throw \"Unknown SimpleLogin error occurred.\";\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { UsernameGenerationService as BaseUsernameGenerationService } from \"../abstractions/usernameGeneration.service\";\nimport { AnonAddyForwarder } from \"../email-forwarders/anon-addy-forwarder\";\nimport { DuckDuckGoForwarder } from \"../email-forwarders/duck-duck-go-forwarder\";\nimport { FastmailForwarder } from \"../email-forwarders/fastmail-forwarder\";\nimport { FirefoxRelayForwarder } from \"../email-forwarders/firefox-relay-forwarder\";\nimport { Forwarder } from \"../email-forwarders/forwarder\";\nimport { ForwarderOptions } from \"../email-forwarders/forwarder-options\";\nimport { SimpleLoginForwarder } from \"../email-forwarders/simple-login-forwarder\";\nimport { EFFLongWordList } from \"../misc/wordlist\";\n\nconst DefaultOptions = {\n type: \"word\",\n wordCapitalize: true,\n wordIncludeNumber: true,\n subaddressType: \"random\",\n catchallType: \"random\",\n forwardedService: \"\",\n forwardedAnonAddyDomain: \"anonaddy.me\",\n};\n\nexport class UsernameGenerationService implements BaseUsernameGenerationService {\n constructor(\n private cryptoService: CryptoService,\n private stateService: StateService,\n private apiService: ApiService\n ) {}\n\n generateUsername(options: any): Promise {\n if (options.type === \"catchall\") {\n return this.generateCatchall(options);\n } else if (options.type === \"subaddress\") {\n return this.generateSubaddress(options);\n } else if (options.type === \"forwarded\") {\n return this.generateForwarded(options);\n } else {\n return this.generateWord(options);\n }\n }\n\n async generateWord(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.wordCapitalize == null) {\n o.wordCapitalize = true;\n }\n if (o.wordIncludeNumber == null) {\n o.wordIncludeNumber = true;\n }\n\n const wordIndex = await this.cryptoService.randomNumber(0, EFFLongWordList.length - 1);\n let word = EFFLongWordList[wordIndex];\n if (o.wordCapitalize) {\n word = word.charAt(0).toUpperCase() + word.slice(1);\n }\n if (o.wordIncludeNumber) {\n const num = await this.cryptoService.randomNumber(1, 9999);\n word = word + this.zeroPad(num.toString(), 4);\n }\n return word;\n }\n\n async generateSubaddress(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n const subaddressEmail = o.subaddressEmail;\n if (subaddressEmail == null || subaddressEmail.length < 3) {\n return o.subaddressEmail;\n }\n const atIndex = subaddressEmail.indexOf(\"@\");\n if (atIndex < 1 || atIndex >= subaddressEmail.length - 1) {\n return subaddressEmail;\n }\n if (o.subaddressType == null) {\n o.subaddressType = \"random\";\n }\n\n const emailBeginning = subaddressEmail.substr(0, atIndex);\n const emailEnding = subaddressEmail.substr(atIndex + 1, subaddressEmail.length);\n\n let subaddressString = \"\";\n if (o.subaddressType === \"random\") {\n subaddressString = await this.randomString(8);\n } else if (o.subaddressType === \"website-name\") {\n subaddressString = o.website;\n }\n return emailBeginning + \"+\" + subaddressString + \"@\" + emailEnding;\n }\n\n async generateCatchall(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.catchallDomain == null || o.catchallDomain === \"\") {\n return null;\n }\n if (o.catchallType == null) {\n o.catchallType = \"random\";\n }\n\n let startString = \"\";\n if (o.catchallType === \"random\") {\n startString = await this.randomString(8);\n } else if (o.catchallType === \"website-name\") {\n startString = o.website;\n }\n return startString + \"@\" + o.catchallDomain;\n }\n\n async generateForwarded(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.forwardedService == null) {\n return null;\n }\n\n let forwarder: Forwarder = null;\n const forwarderOptions = new ForwarderOptions();\n forwarderOptions.website = o.website;\n if (o.forwardedService === \"simplelogin\") {\n forwarder = new SimpleLoginForwarder();\n forwarderOptions.apiKey = o.forwardedSimpleLoginApiKey;\n } else if (o.forwardedService === \"anonaddy\") {\n forwarder = new AnonAddyForwarder();\n forwarderOptions.apiKey = o.forwardedAnonAddyApiToken;\n forwarderOptions.anonaddy.domain = o.forwardedAnonAddyDomain;\n } else if (o.forwardedService === \"firefoxrelay\") {\n forwarder = new FirefoxRelayForwarder();\n forwarderOptions.apiKey = o.forwardedFirefoxApiToken;\n } else if (o.forwardedService === \"fastmail\") {\n forwarder = new FastmailForwarder();\n forwarderOptions.apiKey = o.forwardedFastmailApiToken;\n } else if (o.forwardedService === \"duckduckgo\") {\n forwarder = new DuckDuckGoForwarder();\n forwarderOptions.apiKey = o.forwardedDuckDuckGoToken;\n }\n\n if (forwarder == null) {\n return null;\n }\n\n return forwarder.generate(this.apiService, forwarderOptions);\n }\n\n async getOptions(): Promise {\n let options = await this.stateService.getUsernameGenerationOptions();\n if (options == null) {\n options = Object.assign({}, DefaultOptions);\n } else {\n options = Object.assign({}, DefaultOptions, options);\n }\n await this.stateService.setUsernameGenerationOptions(options);\n return options;\n }\n\n async saveOptions(options: any) {\n await this.stateService.setUsernameGenerationOptions(options);\n }\n\n private async randomString(length: number) {\n let str = \"\";\n const charSet = \"abcdefghijklmnopqrstuvwxyz1234567890\";\n for (let i = 0; i < length; i++) {\n const randomCharIndex = await this.cryptoService.randomNumber(0, charSet.length - 1);\n str += charSet.charAt(randomCharIndex);\n }\n return str;\n }\n\n // ref: https://stackoverflow.com/a/10073788\n private zeroPad(number: string, width: number) {\n return number.length >= width\n ? number\n : new Array(width - number.length + 1).join(\"0\") + number;\n }\n}\n","export class DecryptParameters {\n encKey: T;\n data: T;\n iv: T;\n macKey: T;\n mac: T;\n macData: T;\n}\n","import { Observable } from \"rxjs\";\n\nimport { SyncEventArgs } from \"../../types/sync-event-args\";\n\nexport abstract class SyncNotifierService {\n sync$: Observable;\n next: (event: SyncEventArgs) => void;\n}\n","import { CipherView } from \"../view/cipher.view\";\n\nconst CacheTTL = 3000;\n\nexport class SortedCiphersCache {\n private readonly sortedCiphersByUrl: Map = new Map();\n private readonly timeouts: Map = new Map();\n\n constructor(private readonly comparator: (a: CipherView, b: CipherView) => number) {}\n\n isCached(url: string) {\n return this.sortedCiphersByUrl.has(url);\n }\n\n addCiphers(url: string, ciphers: CipherView[]) {\n ciphers.sort(this.comparator);\n this.sortedCiphersByUrl.set(url, new Ciphers(ciphers));\n this.resetTimer(url);\n }\n\n getLastUsed(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastUsed() : null;\n }\n\n getLastLaunched(url: string) {\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastLaunched() : null;\n }\n\n getNext(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getNext() : null;\n }\n\n updateLastUsedIndex(url: string) {\n if (this.isCached(url)) {\n this.sortedCiphersByUrl.get(url).updateLastUsedIndex();\n }\n }\n\n clear() {\n this.sortedCiphersByUrl.clear();\n this.timeouts.clear();\n }\n\n private resetTimer(url: string) {\n clearTimeout(this.timeouts.get(url));\n this.timeouts.set(\n url,\n setTimeout(() => {\n this.sortedCiphersByUrl.delete(url);\n this.timeouts.delete(url);\n }, CacheTTL)\n );\n }\n}\n\nclass Ciphers {\n lastUsedIndex = -1;\n\n constructor(private readonly ciphers: CipherView[]) {}\n\n getLastUsed() {\n this.lastUsedIndex = Math.max(this.lastUsedIndex, 0);\n return this.ciphers[this.lastUsedIndex];\n }\n\n getLastLaunched() {\n const usedCiphers = this.ciphers.filter((cipher) => cipher.localData?.lastLaunched);\n const sortedCiphers = usedCiphers.sort(\n (x, y) => y.localData.lastLaunched.valueOf() - x.localData.lastLaunched.valueOf()\n );\n return sortedCiphers[0];\n }\n\n getNextIndex() {\n return (this.lastUsedIndex + 1) % this.ciphers.length;\n }\n\n getNext() {\n return this.ciphers[this.getNextIndex()];\n }\n\n updateLastUsedIndex() {\n this.lastUsedIndex = this.getNextIndex();\n }\n}\n","export class CipherBulkMoveRequest {\n ids: string[];\n folderId: string;\n\n constructor(ids: string[], folderId: string) {\n this.ids = ids == null ? [] : ids;\n this.folderId = folderId;\n }\n}\n","export class CipherBulkRestoreRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherWithIdRequest } from \"./cipher-with-id.request\";\n\nexport class CipherBulkShareRequest {\n ciphers: CipherWithIdRequest[];\n collectionIds: string[];\n\n constructor(ciphers: Cipher[], collectionIds: string[]) {\n if (ciphers != null) {\n this.ciphers = [];\n ciphers.forEach((c) => {\n this.ciphers.push(new CipherWithIdRequest(c));\n });\n }\n this.collectionIds = collectionIds;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nexport class CipherPartialRequest {\n folderId: string;\n favorite: boolean;\n\n constructor(cipher: Cipher) {\n this.folderId = cipher.folderId;\n this.favorite = cipher.favorite;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipher.request\";\n\nexport class CipherShareRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"../../abstractions/api.service\";\nimport { 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 { FieldType } from \"../../enums/fieldType\";\nimport { UriMatchType } from \"../../enums/uriMatchType\";\nimport { sequentialize } from \"../../misc/sequentialize\";\nimport { Utils } from \"../../misc/utils\";\nimport { AccountSettingsSettings } from \"../../models/domain/account\";\nimport Domain from \"../../models/domain/domain-base\";\nimport { EncArrayBuffer } from \"../../models/domain/enc-array-buffer\";\nimport { EncString } from \"../../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\nimport { ErrorResponse } from \"../../models/response/error.response\";\nimport { View } from \"../../models/view/view\";\nimport { CipherService as CipherServiceAbstraction } from \"../abstractions/cipher.service\";\nimport { CipherType } from \"../enums/cipher-type\";\nimport { CipherData } from \"../models/data/cipher.data\";\nimport { Attachment } from \"../models/domain/attachment\";\nimport { Card } from \"../models/domain/card\";\nimport { Cipher } from \"../models/domain/cipher\";\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 { 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 { 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\";\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 { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\nimport { ProfileOrganizationResponse } from \"../response/profile-organization.response\";\n\nexport class OrganizationData {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useScim: boolean;\n useCustomPermissions: boolean;\n useResetPassword: boolean;\n useSecretsManager: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n hasPublicAndPrivateKeys: boolean;\n providerId: string;\n providerName: string;\n isProviderUser: boolean;\n familySponsorshipFriendlyName: string;\n familySponsorshipAvailable: boolean;\n planProductType: ProductType;\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n familySponsorshipLastSyncDate?: Date;\n familySponsorshipValidUntil?: Date;\n familySponsorshipToDelete?: boolean;\n accessSecretsManager: boolean;\n\n constructor(response: ProfileOrganizationResponse) {\n this.id = response.id;\n this.name = response.name;\n this.status = response.status;\n this.type = response.type;\n this.enabled = response.enabled;\n this.usePolicies = response.usePolicies;\n this.useGroups = response.useGroups;\n this.useDirectory = response.useDirectory;\n this.useEvents = response.useEvents;\n this.useTotp = response.useTotp;\n this.use2fa = response.use2fa;\n this.useApi = response.useApi;\n this.useSso = response.useSso;\n this.useKeyConnector = response.useKeyConnector;\n this.useScim = response.useScim;\n this.useCustomPermissions = response.useCustomPermissions;\n this.useResetPassword = response.useResetPassword;\n this.useSecretsManager = response.useSecretsManager;\n this.selfHost = response.selfHost;\n this.usersGetPremium = response.usersGetPremium;\n this.seats = response.seats;\n this.maxCollections = response.maxCollections;\n this.maxStorageGb = response.maxStorageGb;\n this.ssoBound = response.ssoBound;\n this.identifier = response.identifier;\n this.permissions = response.permissions;\n this.resetPasswordEnrolled = response.resetPasswordEnrolled;\n this.userId = response.userId;\n this.hasPublicAndPrivateKeys = response.hasPublicAndPrivateKeys;\n this.providerId = response.providerId;\n this.providerName = response.providerName;\n this.familySponsorshipFriendlyName = response.familySponsorshipFriendlyName;\n this.familySponsorshipAvailable = response.familySponsorshipAvailable;\n this.planProductType = response.planProductType;\n this.keyConnectorEnabled = response.keyConnectorEnabled;\n this.keyConnectorUrl = response.keyConnectorUrl;\n this.familySponsorshipLastSyncDate = response.familySponsorshipLastSyncDate;\n this.familySponsorshipValidUntil = response.familySponsorshipValidUntil;\n this.familySponsorshipToDelete = response.familySponsorshipToDelete;\n this.accessSecretsManager = response.accessSecretsManager;\n }\n}\n","import { ApiService } from \"../../../abstractions/api.service\";\nimport { CollectionService } from \"../../../abstractions/collection.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 { 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 { sequentialize } from \"../../../misc/sequentialize\";\nimport { CollectionData } from \"../../../models/data/collection.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 { CollectionDetailsResponse } from \"../../../models/response/collection.response\";\nimport { DomainsResponse } from \"../../../models/response/domains.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\";\nimport { CipherService } from \"../../../vault/abstractions/cipher.service\";\nimport { FolderApiServiceAbstraction } from \"../../../vault/abstractions/folder/folder-api.service.abstraction\";\nimport { InternalFolderService } from \"../../../vault/abstractions/folder/folder.service.abstraction\";\nimport { SyncService as SyncServiceAbstraction } from \"../../../vault/abstractions/sync/sync.service.abstraction\";\nimport { CipherData } from \"../../../vault/models/data/cipher.data\";\nimport { FolderData } from \"../../../vault/models/data/folder.data\";\nimport { CipherResponse } from \"../../../vault/models/response/cipher.response\";\nimport { FolderResponse } from \"../../../vault/models/response/folder.response\";\n\nexport class SyncService implements SyncServiceAbstraction {\n syncInProgress = false;\n\n constructor(\n private apiService: ApiService,\n private settingsService: SettingsService,\n private folderService: InternalFolderService,\n private cipherService: CipherService,\n private cryptoService: CryptoService,\n private collectionService: CollectionService,\n private messagingService: MessagingService,\n private policyService: InternalPolicyService,\n private sendService: SendService,\n private logService: LogService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private providerService: ProviderService,\n private folderApiService: FolderApiServiceAbstraction,\n private organizationService: InternalOrganizationService,\n private logoutCallback: (expired: boolean) => Promise\n ) {}\n\n async getLastSync(): Promise {\n if ((await this.stateService.getUserId()) == null) {\n return null;\n }\n\n const lastSync = await this.stateService.getLastSync();\n if (lastSync) {\n return new Date(lastSync);\n }\n\n return null;\n }\n\n async setLastSync(date: Date, userId?: string): Promise {\n await this.stateService.setLastSync(date.toJSON(), { userId: userId });\n }\n\n @sequentialize(() => \"fullSync\")\n async fullSync(forceSync: boolean, allowThrowOnError = false): Promise {\n this.syncStarted();\n const isAuthenticated = await this.stateService.getIsAuthenticated();\n if (!isAuthenticated) {\n return this.syncCompleted(false);\n }\n\n const now = new Date();\n let needsSync = false;\n try {\n needsSync = await this.needsSyncing(forceSync);\n } catch (e) {\n if (allowThrowOnError) {\n throw e;\n }\n }\n\n if (!needsSync) {\n await this.setLastSync(now);\n return this.syncCompleted(false);\n }\n\n try {\n await this.apiService.refreshIdentityToken();\n const response = await this.apiService.getSync();\n\n await this.syncProfile(response.profile);\n await this.syncFolders(response.folders);\n await this.syncCollections(response.collections);\n await this.syncCiphers(response.ciphers);\n await this.syncSends(response.sends);\n await this.syncSettings(response.domains);\n await this.syncPolicies(response.policies);\n\n await this.setLastSync(now);\n return this.syncCompleted(true);\n } catch (e) {\n if (allowThrowOnError) {\n throw e;\n } else {\n return this.syncCompleted(false);\n }\n }\n }\n\n async syncUpsertFolder(notification: SyncFolderNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n try {\n const localFolder = await this.folderService.get(notification.id);\n if (\n (!isEdit && localFolder == null) ||\n (isEdit && localFolder != null && localFolder.revisionDate < notification.revisionDate)\n ) {\n const remoteFolder = await this.folderApiService.get(notification.id);\n if (remoteFolder != null) {\n await this.folderService.upsert(new FolderData(remoteFolder));\n this.messagingService.send(\"syncedUpsertedFolder\", { folderId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteFolder(notification: SyncFolderNotification): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n await this.folderService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedFolder\", { folderId: notification.id });\n this.syncCompleted(true);\n return true;\n }\n return this.syncCompleted(false);\n }\n\n async syncUpsertCipher(notification: SyncCipherNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n try {\n let shouldUpdate = true;\n const localCipher = await this.cipherService.get(notification.id);\n if (localCipher != null && localCipher.revisionDate >= notification.revisionDate) {\n shouldUpdate = false;\n }\n\n let checkCollections = false;\n if (shouldUpdate) {\n if (isEdit) {\n shouldUpdate = localCipher != null;\n checkCollections = true;\n } else {\n if (notification.collectionIds == null || notification.organizationId == null) {\n shouldUpdate = localCipher == null;\n } else {\n shouldUpdate = false;\n checkCollections = true;\n }\n }\n }\n\n if (\n !shouldUpdate &&\n checkCollections &&\n notification.organizationId != null &&\n notification.collectionIds != null &&\n notification.collectionIds.length > 0\n ) {\n const collections = await this.collectionService.getAll();\n if (collections != null) {\n for (let i = 0; i < collections.length; i++) {\n if (notification.collectionIds.indexOf(collections[i].id) > -1) {\n shouldUpdate = true;\n break;\n }\n }\n }\n }\n\n if (shouldUpdate) {\n const remoteCipher = await this.apiService.getFullCipherDetails(notification.id);\n if (remoteCipher != null) {\n await this.cipherService.upsert(new CipherData(remoteCipher));\n this.messagingService.send(\"syncedUpsertedCipher\", { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n if (e != null && e.statusCode === 404 && isEdit) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedCipher\", { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteCipher(notification: SyncCipherNotification): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedCipher\", { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n return this.syncCompleted(false);\n }\n\n async syncUpsertSend(notification: SyncSendNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n try {\n const localSend = await this.sendService.get(notification.id);\n if (\n (!isEdit && localSend == null) ||\n (isEdit && localSend != null && localSend.revisionDate < notification.revisionDate)\n ) {\n const remoteSend = await this.apiService.getSend(notification.id);\n if (remoteSend != null) {\n await this.sendService.upsert(new SendData(remoteSend));\n this.messagingService.send(\"syncedUpsertedSend\", { sendId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteSend(notification: SyncSendNotification): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n await this.sendService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedSend\", { sendId: notification.id });\n this.syncCompleted(true);\n return true;\n }\n return this.syncCompleted(false);\n }\n\n // Helpers\n\n private syncStarted() {\n this.syncInProgress = true;\n this.messagingService.send(\"syncStarted\");\n }\n\n private syncCompleted(successfully: boolean): boolean {\n this.syncInProgress = false;\n this.messagingService.send(\"syncCompleted\", { successfully: successfully });\n return successfully;\n }\n\n private async needsSyncing(forceSync: boolean) {\n if (forceSync) {\n return true;\n }\n\n const lastSync = await this.getLastSync();\n if (lastSync == null || lastSync.getTime() === 0) {\n return true;\n }\n\n const response = await this.apiService.getAccountRevisionDate();\n if (new Date(response) <= lastSync) {\n return false;\n }\n return true;\n }\n\n private async syncProfile(response: ProfileResponse) {\n const stamp = await this.stateService.getSecurityStamp();\n if (stamp != null && stamp !== response.securityStamp) {\n if (this.logoutCallback != null) {\n await this.logoutCallback(true);\n }\n\n throw new Error(\"Stamp has changed\");\n }\n\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(response.privateKey);\n await this.cryptoService.setProviderKeys(response.providers);\n await this.cryptoService.setOrgKeys(response.organizations, response.providerOrganizations);\n await this.stateService.setAvatarColor(response.avatarColor);\n await this.stateService.setSecurityStamp(response.securityStamp);\n await this.stateService.setEmailVerified(response.emailVerified);\n await this.stateService.setHasPremiumPersonally(response.premiumPersonally);\n await this.stateService.setHasPremiumFromOrganization(response.premiumFromOrganization);\n await this.stateService.setForcePasswordReset(response.forcePasswordReset);\n await this.keyConnectorService.setUsesKeyConnector(response.usesKeyConnector);\n\n const organizations: { [id: string]: OrganizationData } = {};\n response.organizations.forEach((o) => {\n organizations[o.id] = new OrganizationData(o);\n });\n\n const providers: { [id: string]: ProviderData } = {};\n response.providers.forEach((p) => {\n providers[p.id] = new ProviderData(p);\n });\n\n response.providerOrganizations.forEach((o) => {\n if (organizations[o.id] == null) {\n organizations[o.id] = new OrganizationData(o);\n organizations[o.id].isProviderUser = true;\n }\n });\n\n await this.organizationService.replace(organizations);\n await this.providerService.save(providers);\n\n if (await this.keyConnectorService.userNeedsMigration()) {\n await this.keyConnectorService.setConvertAccountRequired(true);\n this.messagingService.send(\"convertAccountToKeyConnector\");\n } else {\n this.keyConnectorService.removeConvertAccountRequired();\n }\n }\n\n private async syncFolders(response: FolderResponse[]) {\n const folders: { [id: string]: FolderData } = {};\n response.forEach((f) => {\n folders[f.id] = new FolderData(f);\n });\n return await this.folderService.replace(folders);\n }\n\n private async syncCollections(response: CollectionDetailsResponse[]) {\n const collections: { [id: string]: CollectionData } = {};\n response.forEach((c) => {\n collections[c.id] = new CollectionData(c);\n });\n return await this.collectionService.replace(collections);\n }\n\n private async syncCiphers(response: CipherResponse[]) {\n const ciphers: { [id: string]: CipherData } = {};\n response.forEach((c) => {\n ciphers[c.id] = new CipherData(c);\n });\n return await this.cipherService.replace(ciphers);\n }\n\n private async syncSends(response: SendResponse[]) {\n const sends: { [id: string]: SendData } = {};\n response.forEach((s) => {\n sends[s.id] = new SendData(s);\n });\n return await this.sendService.replace(sends);\n }\n\n private async syncSettings(response: DomainsResponse) {\n let eqDomains: string[][] = [];\n if (response != null && response.equivalentDomains != null) {\n eqDomains = eqDomains.concat(response.equivalentDomains);\n }\n\n if (response != null && response.globalEquivalentDomains != null) {\n response.globalEquivalentDomains.forEach((global) => {\n if (global.domains.length > 0) {\n eqDomains.push(global.domains);\n }\n });\n }\n\n return this.settingsService.setEquivalentDomains(eqDomains);\n }\n\n private async syncPolicies(response: PolicyResponse[]) {\n const policies: { [id: string]: PolicyData } = {};\n if (response != null) {\n response.forEach((p) => {\n policies[p.id] = new PolicyData(p);\n });\n }\n return await this.policyService.replace(policies);\n }\n}\n","import { 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 \"../../components/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/vault/abstractions/password-reprompt.service\";\n\nimport { ModalService } from \"../../services/modal.service\";\nimport { PasswordRepromptComponent } from \"../components/password-reprompt.component\";\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 { 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 { ThemeType } from \"@bitwarden/common/enums/themeType\";\n\nimport { Theme } from \"./theme\";\n\nexport class ThemeBuilder implements Theme {\n get effectiveTheme(): ThemeType {\n return this.configuredTheme != ThemeType.System ? this.configuredTheme : this.systemTheme;\n }\n\n constructor(readonly configuredTheme: ThemeType, readonly systemTheme: ThemeType) {}\n\n updateSystemTheme(systemTheme: ThemeType): ThemeBuilder {\n return new ThemeBuilder(this.configuredTheme, systemTheme);\n }\n\n updateConfiguredTheme(configuredTheme: ThemeType): ThemeBuilder {\n return new ThemeBuilder(configuredTheme, this.systemTheme);\n }\n}\n","import { DOCUMENT } from \"@angular/common\";\nimport { Inject, Injectable } from \"@angular/core\";\nimport { BehaviorSubject, filter, fromEvent, Observable } from \"rxjs\";\n\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { ThemeType } from \"@bitwarden/common/enums/themeType\";\n\nimport { WINDOW } from \"../injection-tokens\";\n\nimport { Theme } from \"./theme\";\nimport { ThemeBuilder } from \"./themeBuilder\";\nimport { AbstractThemingService } from \"./theming.service.abstraction\";\n\n@Injectable()\nexport class ThemingService implements AbstractThemingService {\n private _theme = new BehaviorSubject(null);\n theme$: Observable = this._theme.pipe(filter((x) => x !== null));\n\n constructor(\n private stateService: StateService,\n @Inject(WINDOW) private window: Window,\n @Inject(DOCUMENT) private document: Document\n ) {\n this.monitorThemeChanges();\n }\n\n async monitorThemeChanges(): Promise {\n this._theme.next(\n new ThemeBuilder(await this.stateService.getTheme(), await this.getSystemTheme())\n );\n this.monitorConfiguredThemeChanges();\n this.monitorSystemThemeChanges();\n }\n\n updateSystemTheme(systemTheme: ThemeType): void {\n this._theme.next(this._theme.getValue().updateSystemTheme(systemTheme));\n }\n\n async updateConfiguredTheme(theme: ThemeType): Promise {\n await this.stateService.setTheme(theme);\n this._theme.next(this._theme.getValue().updateConfiguredTheme(theme));\n }\n\n protected monitorConfiguredThemeChanges(): void {\n this.theme$.subscribe((theme: Theme) => {\n this.document.documentElement.classList.remove(\n \"theme_\" + ThemeType.Light,\n \"theme_\" + ThemeType.Dark,\n \"theme_\" + ThemeType.Nord,\n \"theme_\" + ThemeType.SolarizedDark\n );\n this.document.documentElement.classList.add(\"theme_\" + theme.effectiveTheme);\n });\n }\n\n // We use a media match query for monitoring the system theme on web and browser, but this doesn't work for electron apps on Linux.\n // In desktop we override these methods to track systemTheme with the electron renderer instead, which works for all OSs.\n protected async getSystemTheme(): Promise {\n return this.window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? ThemeType.Dark\n : ThemeType.Light;\n }\n\n protected monitorSystemThemeChanges(): void {\n fromEvent(\n this.window.matchMedia(\"(prefers-color-scheme: dark)\"),\n \"change\"\n ).subscribe((event) => {\n this.updateSystemTheme(event.matches ? ThemeType.Dark : ThemeType.Light);\n });\n }\n}\n","import { Injector, LOCALE_ID, NgModule } from \"@angular/core\";\n\nimport { AccountApiService as AccountApiServiceAbstraction } from \"@bitwarden/common/abstractions/account/account-api.service\";\nimport {\n AccountService as AccountServiceAbstraction,\n InternalAccountService,\n} from \"@bitwarden/common/abstractions/account/account.service\";\nimport { AvatarUpdateService as AccountUpdateServiceAbstraction } from \"@bitwarden/common/abstractions/account/avatar-update.service\";\nimport { AnonymousHubService as AnonymousHubServiceAbstraction } from \"@bitwarden/common/abstractions/anonymousHub.service\";\nimport { ApiService as ApiServiceAbstraction } from \"@bitwarden/common/abstractions/api.service\";\nimport { AppIdService as AppIdServiceAbstraction } from \"@bitwarden/common/abstractions/appId.service\";\nimport { AuditService as AuditServiceAbstraction } from \"@bitwarden/common/abstractions/audit.service\";\nimport { AuthService as AuthServiceAbstraction } from \"@bitwarden/common/abstractions/auth.service\";\nimport { BroadcasterService as BroadcasterServiceAbstraction } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { CollectionService as CollectionServiceAbstraction } from \"@bitwarden/common/abstractions/collection.service\";\nimport { ConfigApiServiceAbstraction } from \"@bitwarden/common/abstractions/config/config-api.service.abstraction\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/abstractions/config/config.service.abstraction\";\nimport { CryptoService as CryptoServiceAbstraction } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { CryptoFunctionService as CryptoFunctionServiceAbstraction } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EncryptService } from \"@bitwarden/common/abstractions/encrypt.service\";\nimport { EnvironmentService as EnvironmentServiceAbstraction } from \"@bitwarden/common/abstractions/environment.service\";\nimport { EventCollectionService as EventCollectionServiceAbstraction } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { EventUploadService as EventUploadServiceAbstraction } from \"@bitwarden/common/abstractions/event/event-upload.service\";\nimport { ExportService as ExportServiceAbstraction } from \"@bitwarden/common/abstractions/export.service\";\nimport { FileUploadService as FileUploadServiceAbstraction } from \"@bitwarden/common/abstractions/fileUpload.service\";\nimport { FormValidationErrorsService as FormValidationErrorsServiceAbstraction } from \"@bitwarden/common/abstractions/formValidationErrors.service\";\nimport { I18nService as I18nServiceAbstraction } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService as KeyConnectorServiceAbstraction } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService as LoginServiceAbstraction } from \"@bitwarden/common/abstractions/login.service\";\nimport { MessagingService as MessagingServiceAbstraction } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"@bitwarden/common/abstractions/notifications.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport {\n InternalOrganizationService,\n OrganizationService as OrganizationServiceAbstraction,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PasswordGenerationService as PasswordGenerationServiceAbstraction } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/abstractions/policy/policy-api.service.abstraction\";\nimport {\n InternalPolicyService,\n PolicyService as PolicyServiceAbstraction,\n} from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { ProviderService as ProviderServiceAbstraction } from \"@bitwarden/common/abstractions/provider.service\";\nimport { SearchService as SearchServiceAbstraction } from \"@bitwarden/common/abstractions/search.service\";\nimport { SendService as SendServiceAbstraction } from \"@bitwarden/common/abstractions/send.service\";\nimport { SettingsService as SettingsServiceAbstraction } from \"@bitwarden/common/abstractions/settings.service\";\nimport { StateService as StateServiceAbstraction } from \"@bitwarden/common/abstractions/state.service\";\nimport { StateMigrationService as StateMigrationServiceAbstraction } from \"@bitwarden/common/abstractions/stateMigration.service\";\nimport { AbstractStorageService } from \"@bitwarden/common/abstractions/storage.service\";\nimport { TokenService as TokenServiceAbstraction } from \"@bitwarden/common/abstractions/token.service\";\nimport { TotpService as TotpServiceAbstraction } from \"@bitwarden/common/abstractions/totp.service\";\nimport { TwoFactorService as TwoFactorServiceAbstraction } from \"@bitwarden/common/abstractions/twoFactor.service\";\nimport { UserVerificationApiServiceAbstraction } from \"@bitwarden/common/abstractions/userVerification/userVerification-api.service.abstraction\";\nimport { UserVerificationService as UserVerificationServiceAbstraction } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { UsernameGenerationService as UsernameGenerationServiceAbstraction } from \"@bitwarden/common/abstractions/usernameGeneration.service\";\nimport { ValidationService as ValidationServiceAbstraction } from \"@bitwarden/common/abstractions/validation.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { StateFactory } from \"@bitwarden/common/factories/stateFactory\";\nimport { flagEnabled } from \"@bitwarden/common/misc/flags\";\nimport { Account } from \"@bitwarden/common/models/domain/account\";\nimport { GlobalState } from \"@bitwarden/common/models/domain/global-state\";\nimport { AccountApiServiceImplementation } from \"@bitwarden/common/services/account/account-api.service\";\nimport { AccountServiceImplementation } from \"@bitwarden/common/services/account/account.service\";\nimport { AvatarUpdateService } from \"@bitwarden/common/services/account/avatar-update.service\";\nimport { AnonymousHubService } from \"@bitwarden/common/services/anonymousHub.service\";\nimport { ApiService } from \"@bitwarden/common/services/api.service\";\nimport { AppIdService } from \"@bitwarden/common/services/appId.service\";\nimport { AuditService } from \"@bitwarden/common/services/audit.service\";\nimport { AuthService } from \"@bitwarden/common/services/auth.service\";\nimport { CollectionService } from \"@bitwarden/common/services/collection.service\";\nimport { ConfigApiService } from \"@bitwarden/common/services/config/config-api.service\";\nimport { ConfigService } from \"@bitwarden/common/services/config/config.service\";\nimport { ConsoleLogService } from \"@bitwarden/common/services/consoleLog.service\";\nimport { CryptoService } from \"@bitwarden/common/services/crypto.service\";\nimport { EncryptServiceImplementation } from \"@bitwarden/common/services/cryptography/encrypt.service.implementation\";\nimport { MultithreadEncryptServiceImplementation } from \"@bitwarden/common/services/cryptography/multithread-encrypt.service.implementation\";\nimport { EnvironmentService } from \"@bitwarden/common/services/environment.service\";\nimport { EventCollectionService } from \"@bitwarden/common/services/event/event-collection.service\";\nimport { EventUploadService } from \"@bitwarden/common/services/event/event-upload.service\";\nimport { ExportService } from \"@bitwarden/common/services/export.service\";\nimport { FileUploadService } from \"@bitwarden/common/services/fileUpload.service\";\nimport { FormValidationErrorsService } from \"@bitwarden/common/services/formValidationErrors.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/services/keyConnector.service\";\nimport { LoginService } from \"@bitwarden/common/services/login.service\";\nimport { NotificationsService } from \"@bitwarden/common/services/notifications.service\";\nimport { OrganizationUserServiceImplementation } from \"@bitwarden/common/services/organization-user/organization-user.service.implementation\";\nimport { OrganizationApiService } from \"@bitwarden/common/services/organization/organization-api.service\";\nimport { OrganizationService } from \"@bitwarden/common/services/organization/organization.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/services/passwordGeneration.service\";\nimport { PolicyApiService } from \"@bitwarden/common/services/policy/policy-api.service\";\nimport { PolicyService } from \"@bitwarden/common/services/policy/policy.service\";\nimport { ProviderService } from \"@bitwarden/common/services/provider.service\";\nimport { SearchService } from \"@bitwarden/common/services/search.service\";\nimport { SendService } from \"@bitwarden/common/services/send.service\";\nimport { SettingsService } from \"@bitwarden/common/services/settings.service\";\nimport { StateService } from \"@bitwarden/common/services/state.service\";\nimport { StateMigrationService } from \"@bitwarden/common/services/stateMigration.service\";\nimport { 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\";\nimport { CipherService as CipherServiceAbstraction } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { FolderApiServiceAbstraction } from \"@bitwarden/common/vault/abstractions/folder/folder-api.service.abstraction\";\nimport {\n FolderService as FolderServiceAbstraction,\n InternalFolderService,\n} from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { SyncNotifierService as SyncNotifierServiceAbstraction } from \"@bitwarden/common/vault/abstractions/sync/sync-notifier.service.abstraction\";\nimport { SyncService as SyncServiceAbstraction } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { CipherService } from \"@bitwarden/common/vault/services/cipher.service\";\nimport { FolderApiService } from \"@bitwarden/common/vault/services/folder/folder-api.service\";\nimport { FolderService } from \"@bitwarden/common/vault/services/folder/folder.service\";\nimport { SyncNotifierService } from \"@bitwarden/common/vault/services/sync/sync-notifier.service\";\nimport { SyncService } from \"@bitwarden/common/vault/services/sync/sync.service\";\n\nimport { AuthGuard } from \"../guards/auth.guard\";\nimport { LockGuard } from \"../guards/lock.guard\";\nimport { UnauthGuard } from \"../guards/unauth.guard\";\nimport { PasswordRepromptService } from \"../vault/services/password-reprompt.service\";\n\nimport { BroadcasterService } from \"./broadcaster.service\";\nimport {\n LOCALES_DIRECTORY,\n LOCKED_CALLBACK,\n LOG_MAC_FAILURES,\n LOGOUT_CALLBACK,\n MEMORY_STORAGE,\n SECURE_STORAGE,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n SYSTEM_LANGUAGE,\n WINDOW,\n} from \"./injection-tokens\";\nimport { ModalService } from \"./modal.service\";\nimport { ThemingService } from \"./theming/theming.service\";\nimport { AbstractThemingService } from \"./theming/theming.service.abstraction\";\n\n@NgModule({\n declarations: [],\n providers: [\n AuthGuard,\n UnauthGuard,\n LockGuard,\n ModalService,\n { provide: WINDOW, useValue: window },\n {\n provide: LOCALE_ID,\n useFactory: (i18nService: I18nServiceAbstraction) => i18nService.translationLocale,\n deps: [I18nServiceAbstraction],\n },\n {\n provide: LOCALES_DIRECTORY,\n useValue: \"./locales\",\n },\n {\n provide: SYSTEM_LANGUAGE,\n useFactory: (window: Window) => window.navigator.language,\n deps: [WINDOW],\n },\n {\n provide: STATE_FACTORY,\n useValue: new StateFactory(GlobalState, Account),\n },\n {\n provide: STATE_SERVICE_USE_CACHE,\n useValue: true,\n },\n {\n provide: LOGOUT_CALLBACK,\n useFactory:\n (messagingService: MessagingServiceAbstraction) => (expired: boolean, userId?: string) =>\n messagingService.send(\"logout\", { expired: expired, userId: userId }),\n deps: [MessagingServiceAbstraction],\n },\n {\n provide: LOCKED_CALLBACK,\n useValue: null,\n },\n {\n provide: LOG_MAC_FAILURES,\n useValue: true,\n },\n {\n provide: AppIdServiceAbstraction,\n useClass: AppIdService,\n deps: [AbstractStorageService],\n },\n {\n provide: AuditServiceAbstraction,\n useClass: AuditService,\n deps: [CryptoFunctionServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: AuthServiceAbstraction,\n useClass: AuthService,\n deps: [\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n TokenServiceAbstraction,\n AppIdServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n MessagingServiceAbstraction,\n LogService,\n KeyConnectorServiceAbstraction,\n EnvironmentServiceAbstraction,\n StateServiceAbstraction,\n TwoFactorServiceAbstraction,\n I18nServiceAbstraction,\n ],\n },\n {\n provide: CipherServiceAbstraction,\n useFactory: (\n cryptoService: CryptoServiceAbstraction,\n settingsService: SettingsServiceAbstraction,\n apiService: ApiServiceAbstraction,\n fileUploadService: FileUploadServiceAbstraction,\n i18nService: I18nServiceAbstraction,\n injector: Injector,\n logService: LogService,\n stateService: StateServiceAbstraction,\n encryptService: EncryptService\n ) =>\n new CipherService(\n cryptoService,\n settingsService,\n apiService,\n fileUploadService,\n i18nService,\n () => injector.get(SearchServiceAbstraction),\n logService,\n stateService,\n encryptService\n ),\n deps: [\n CryptoServiceAbstraction,\n SettingsServiceAbstraction,\n ApiServiceAbstraction,\n FileUploadServiceAbstraction,\n I18nServiceAbstraction,\n Injector, // TODO: Get rid of this circular dependency!\n LogService,\n StateServiceAbstraction,\n EncryptService,\n ],\n },\n {\n provide: FolderServiceAbstraction,\n useClass: FolderService,\n deps: [\n CryptoServiceAbstraction,\n I18nServiceAbstraction,\n CipherServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n {\n provide: InternalFolderService,\n useExisting: FolderServiceAbstraction,\n },\n {\n provide: FolderApiServiceAbstraction,\n useClass: FolderApiService,\n deps: [FolderServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: AccountApiServiceAbstraction,\n useClass: AccountApiServiceImplementation,\n deps: [\n ApiServiceAbstraction,\n UserVerificationServiceAbstraction,\n LogService,\n InternalAccountService,\n ],\n },\n {\n provide: AccountServiceAbstraction,\n useClass: AccountServiceImplementation,\n deps: [MessagingServiceAbstraction, LogService],\n },\n {\n provide: InternalAccountService,\n useExisting: AccountServiceAbstraction,\n },\n {\n provide: AccountUpdateServiceAbstraction,\n useClass: AvatarUpdateService,\n deps: [ApiServiceAbstraction, StateServiceAbstraction],\n },\n { provide: LogService, useFactory: () => new ConsoleLogService(false) },\n {\n provide: CollectionServiceAbstraction,\n useClass: CollectionService,\n deps: [CryptoServiceAbstraction, I18nServiceAbstraction, StateServiceAbstraction],\n },\n {\n provide: EnvironmentServiceAbstraction,\n useClass: EnvironmentService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: TotpServiceAbstraction,\n useClass: TotpService,\n deps: [CryptoFunctionServiceAbstraction, LogService, StateServiceAbstraction],\n },\n { provide: TokenServiceAbstraction, useClass: TokenService, deps: [StateServiceAbstraction] },\n {\n provide: CryptoServiceAbstraction,\n useClass: CryptoService,\n deps: [\n CryptoFunctionServiceAbstraction,\n EncryptService,\n PlatformUtilsServiceAbstraction,\n LogService,\n StateServiceAbstraction,\n ],\n },\n {\n provide: PasswordGenerationServiceAbstraction,\n useClass: PasswordGenerationService,\n deps: [CryptoServiceAbstraction, PolicyServiceAbstraction, StateServiceAbstraction],\n },\n {\n provide: UsernameGenerationServiceAbstraction,\n useClass: UsernameGenerationService,\n deps: [CryptoServiceAbstraction, StateServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: ApiServiceAbstraction,\n useClass: ApiService,\n deps: [\n TokenServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n EnvironmentServiceAbstraction,\n AppIdServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: FileUploadServiceAbstraction,\n useClass: FileUploadService,\n deps: [LogService, ApiServiceAbstraction],\n },\n {\n provide: SyncServiceAbstraction,\n useClass: SyncService,\n deps: [\n ApiServiceAbstraction,\n SettingsServiceAbstraction,\n FolderServiceAbstraction,\n CipherServiceAbstraction,\n CryptoServiceAbstraction,\n CollectionServiceAbstraction,\n MessagingServiceAbstraction,\n PolicyServiceAbstraction,\n SendServiceAbstraction,\n LogService,\n KeyConnectorServiceAbstraction,\n StateServiceAbstraction,\n ProviderServiceAbstraction,\n FolderApiServiceAbstraction,\n OrganizationServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n { provide: BroadcasterServiceAbstraction, useClass: BroadcasterService },\n {\n provide: SettingsServiceAbstraction,\n useClass: SettingsService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: VaultTimeoutSettingsServiceAbstraction,\n useClass: VaultTimeoutSettingsService,\n deps: [\n CryptoServiceAbstraction,\n TokenServiceAbstraction,\n PolicyServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n {\n provide: VaultTimeoutServiceAbstraction,\n useClass: VaultTimeoutService,\n deps: [\n CipherServiceAbstraction,\n FolderServiceAbstraction,\n CollectionServiceAbstraction,\n CryptoServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n MessagingServiceAbstraction,\n SearchServiceAbstraction,\n KeyConnectorServiceAbstraction,\n StateServiceAbstraction,\n AuthServiceAbstraction,\n VaultTimeoutSettingsServiceAbstraction,\n LOCKED_CALLBACK,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: StateServiceAbstraction,\n useClass: StateService,\n deps: [\n AbstractStorageService,\n SECURE_STORAGE,\n MEMORY_STORAGE,\n LogService,\n StateMigrationServiceAbstraction,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n ],\n },\n {\n provide: StateMigrationServiceAbstraction,\n useClass: StateMigrationService,\n deps: [AbstractStorageService, SECURE_STORAGE, STATE_FACTORY],\n },\n {\n provide: ExportServiceAbstraction,\n useClass: ExportService,\n deps: [\n FolderServiceAbstraction,\n CipherServiceAbstraction,\n ApiServiceAbstraction,\n CryptoServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n ],\n },\n {\n provide: SearchServiceAbstraction,\n useClass: SearchService,\n deps: [CipherServiceAbstraction, LogService, I18nServiceAbstraction],\n },\n {\n provide: NotificationsServiceAbstraction,\n useClass: NotificationsService,\n deps: [\n SyncServiceAbstraction,\n AppIdServiceAbstraction,\n ApiServiceAbstraction,\n EnvironmentServiceAbstraction,\n LOGOUT_CALLBACK,\n LogService,\n StateServiceAbstraction,\n AuthServiceAbstraction,\n MessagingServiceAbstraction,\n ],\n },\n {\n provide: CryptoFunctionServiceAbstraction,\n useClass: WebCryptoFunctionService,\n deps: [WINDOW],\n },\n {\n provide: EncryptService,\n useFactory: encryptServiceFactory,\n deps: [CryptoFunctionServiceAbstraction, LogService, LOG_MAC_FAILURES],\n },\n {\n provide: EventUploadServiceAbstraction,\n useClass: EventUploadService,\n deps: [ApiServiceAbstraction, StateServiceAbstraction, LogService],\n },\n {\n provide: EventCollectionServiceAbstraction,\n useClass: EventCollectionService,\n deps: [\n CipherServiceAbstraction,\n StateServiceAbstraction,\n OrganizationServiceAbstraction,\n EventUploadServiceAbstraction,\n ],\n },\n {\n provide: PolicyServiceAbstraction,\n useClass: PolicyService,\n deps: [StateServiceAbstraction, OrganizationServiceAbstraction],\n },\n {\n provide: InternalPolicyService,\n useExisting: PolicyServiceAbstraction,\n },\n {\n provide: PolicyApiServiceAbstraction,\n useClass: PolicyApiService,\n deps: [PolicyServiceAbstraction, ApiServiceAbstraction, StateServiceAbstraction],\n },\n {\n provide: SendServiceAbstraction,\n useClass: SendService,\n deps: [\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n FileUploadServiceAbstraction,\n I18nServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n {\n provide: KeyConnectorServiceAbstraction,\n useClass: KeyConnectorService,\n deps: [\n StateServiceAbstraction,\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n TokenServiceAbstraction,\n LogService,\n OrganizationServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n SyncNotifierServiceAbstraction,\n MessagingServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: UserVerificationServiceAbstraction,\n useClass: UserVerificationService,\n deps: [\n CryptoServiceAbstraction,\n I18nServiceAbstraction,\n UserVerificationApiServiceAbstraction,\n ],\n },\n { provide: PasswordRepromptServiceAbstraction, useClass: PasswordRepromptService },\n {\n provide: OrganizationServiceAbstraction,\n useClass: OrganizationService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: InternalOrganizationService,\n useExisting: OrganizationServiceAbstraction,\n },\n {\n provide: OrganizationUserService,\n useClass: OrganizationUserServiceImplementation,\n deps: [ApiServiceAbstraction],\n },\n {\n provide: ProviderServiceAbstraction,\n useClass: ProviderService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: TwoFactorServiceAbstraction,\n useClass: TwoFactorService,\n deps: [I18nServiceAbstraction, PlatformUtilsServiceAbstraction],\n },\n {\n provide: AbstractThemingService,\n useClass: ThemingService,\n },\n {\n provide: FormValidationErrorsServiceAbstraction,\n useClass: FormValidationErrorsService,\n },\n {\n provide: UserVerificationApiServiceAbstraction,\n useClass: UserVerificationApiService,\n deps: [ApiServiceAbstraction],\n },\n {\n provide: OrganizationApiServiceAbstraction,\n useClass: OrganizationApiService,\n // This is a slightly odd dependency tree for a specialized api service\n // it depends on SyncService so that new data can be retrieved through the sync\n // rather than updating the OrganizationService directly. Instead OrganizationService\n // subscribes to sync notifications and will update itself based on that.\n deps: [ApiServiceAbstraction, SyncServiceAbstraction],\n },\n {\n provide: SyncNotifierServiceAbstraction,\n useClass: SyncNotifierService,\n },\n {\n provide: ConfigServiceAbstraction,\n useClass: ConfigService,\n deps: [StateServiceAbstraction, ConfigApiServiceAbstraction],\n },\n {\n provide: ConfigApiServiceAbstraction,\n useClass: ConfigApiService,\n deps: [ApiServiceAbstraction],\n },\n {\n provide: AnonymousHubServiceAbstraction,\n useClass: AnonymousHubService,\n deps: [EnvironmentServiceAbstraction, AuthServiceAbstraction, LogService],\n },\n {\n provide: ValidationServiceAbstraction,\n useClass: ValidationService,\n deps: [I18nServiceAbstraction, PlatformUtilsServiceAbstraction],\n },\n {\n provide: LoginServiceAbstraction,\n useClass: LoginService,\n deps: [StateServiceAbstraction],\n },\n ],\n})\nexport class JslibServicesModule {}\n\nfunction encryptServiceFactory(\n cryptoFunctionservice: CryptoFunctionServiceAbstraction,\n logService: LogService,\n logMacFailures: boolean\n): EncryptService {\n return flagEnabled(\"multithreadDecryption\")\n ? new MultithreadEncryptServiceImplementation(cryptoFunctionservice, logService, logMacFailures)\n : new EncryptServiceImplementation(cryptoFunctionservice, logService, logMacFailures);\n}\n","import { AppIdService as AppIdServiceAbstraction } from \"../abstractions/appId.service\";\nimport { AbstractStorageService } from \"../abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"../enums/htmlStorageLocation\";\nimport { Utils } from \"../misc/utils\";\n\nexport class AppIdService implements AppIdServiceAbstraction {\n constructor(private storageService: AbstractStorageService) {}\n\n getAppId(): Promise {\n return this.makeAndGetAppId(\"appId\");\n }\n\n getAnonymousAppId(): Promise {\n return this.makeAndGetAppId(\"anonymousAppId\");\n }\n\n private async makeAndGetAppId(key: string) {\n const existingId = await this.storageService.get(key, {\n htmlStorageLocation: HtmlStorageLocation.Local,\n });\n if (existingId != null) {\n return existingId;\n }\n\n const guid = Utils.newGuid();\n await this.storageService.save(key, guid, {\n htmlStorageLocation: HtmlStorageLocation.Local,\n });\n return guid;\n }\n}\n","import { Observable, Subject } from \"rxjs\";\n\nimport { ApiService } from \"../abstractions/api.service\";\nimport { AppIdService } from \"../abstractions/appId.service\";\nimport { AuthService as AuthServiceAbstraction } from \"../abstractions/auth.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { EncryptService } from \"../abstractions/encrypt.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { KeyConnectorService } from \"../abstractions/keyConnector.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { MessagingService } from \"../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { TwoFactorService } from \"../abstractions/twoFactor.service\";\nimport { AuthenticationStatus } from \"../enums/authenticationStatus\";\nimport { AuthenticationType } from \"../enums/authenticationType\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { KeySuffixOptions } from \"../enums/keySuffixOptions\";\nimport { PasswordLogInStrategy } from \"../misc/logInStrategies/passwordLogin.strategy\";\nimport { PasswordlessLogInStrategy } from \"../misc/logInStrategies/passwordlessLogin.strategy\";\nimport { SsoLogInStrategy } from \"../misc/logInStrategies/ssoLogin.strategy\";\nimport { UserApiLogInStrategy } from \"../misc/logInStrategies/user-api-login.strategy\";\nimport { Utils } from \"../misc/utils\";\nimport { AuthResult } from \"../models/domain/auth-result\";\nimport { KdfConfig } from \"../models/domain/kdf-config\";\nimport {\n UserApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../models/domain/log-in-credentials\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { TokenTwoFactorRequest } from \"../models/request/identity-token/token-two-factor.request\";\nimport { PasswordlessAuthRequest } from \"../models/request/passwordless-auth.request\";\nimport { PreloginRequest } from \"../models/request/prelogin.request\";\nimport { AuthRequestResponse } from \"../models/response/auth-request.response\";\nimport { ErrorResponse } from \"../models/response/error.response\";\nimport { AuthRequestPushNotification } from \"../models/response/notification.response\";\n\nconst sessionTimeoutLength = 2 * 60 * 1000; // 2 minutes\n\nexport class AuthService implements AuthServiceAbstraction {\n get email(): string {\n if (\n this.logInStrategy instanceof PasswordLogInStrategy ||\n this.logInStrategy instanceof PasswordlessLogInStrategy\n ) {\n return this.logInStrategy.email;\n }\n\n return null;\n }\n\n get masterPasswordHash(): string {\n return this.logInStrategy instanceof PasswordLogInStrategy\n ? this.logInStrategy.masterPasswordHash\n : null;\n }\n\n get accessCode(): string {\n return this.logInStrategy instanceof PasswordlessLogInStrategy\n ? this.logInStrategy.accessCode\n : null;\n }\n\n get authRequestId(): string {\n return this.logInStrategy instanceof PasswordlessLogInStrategy\n ? this.logInStrategy.authRequestId\n : null;\n }\n\n private logInStrategy:\n | UserApiLogInStrategy\n | PasswordLogInStrategy\n | SsoLogInStrategy\n | PasswordlessLogInStrategy;\n private sessionTimeout: any;\n\n private pushNotificationSubject = new Subject();\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n protected tokenService: TokenService,\n protected appIdService: AppIdService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected logService: LogService,\n protected keyConnectorService: KeyConnectorService,\n protected environmentService: EnvironmentService,\n protected stateService: StateService,\n protected twoFactorService: TwoFactorService,\n protected i18nService: I18nService,\n protected encryptService: EncryptService\n ) {}\n\n async logIn(\n credentials:\n | UserApiLogInCredentials\n | PasswordLogInCredentials\n | SsoLogInCredentials\n | PasswordlessLogInCredentials\n ): Promise {\n this.clearState();\n\n let strategy:\n | UserApiLogInStrategy\n | PasswordLogInStrategy\n | SsoLogInStrategy\n | PasswordlessLogInStrategy;\n\n switch (credentials.type) {\n case AuthenticationType.Password:\n strategy = new PasswordLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this\n );\n break;\n case AuthenticationType.Sso:\n strategy = new SsoLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this.keyConnectorService\n );\n break;\n case AuthenticationType.UserApi:\n strategy = new UserApiLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this.environmentService,\n this.keyConnectorService\n );\n break;\n case AuthenticationType.Passwordless:\n strategy = new PasswordlessLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this\n );\n break;\n }\n\n const result = await strategy.logIn(credentials as any);\n\n if (result?.requiresTwoFactor) {\n this.saveState(strategy);\n }\n return result;\n }\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ): Promise {\n if (this.logInStrategy == null) {\n throw new Error(this.i18nService.t(\"sessionTimeout\"));\n }\n\n try {\n const result = await this.logInStrategy.logInTwoFactor(twoFactor, captchaResponse);\n\n // Only clear state if 2FA token has been accepted, otherwise we need to be able to try again\n if (!result.requiresTwoFactor && !result.requiresCaptcha) {\n this.clearState();\n }\n return result;\n } catch (e) {\n // API exceptions are okay, but if there are any unhandled client-side errors then clear state to be safe\n if (!(e instanceof ErrorResponse)) {\n this.clearState();\n }\n throw e;\n }\n }\n\n logOut(callback: () => void) {\n callback();\n this.messagingService.send(\"loggedOut\");\n }\n\n authingWithUserApiKey(): boolean {\n return this.logInStrategy instanceof UserApiLogInStrategy;\n }\n\n authingWithSso(): boolean {\n return this.logInStrategy instanceof SsoLogInStrategy;\n }\n\n authingWithPassword(): boolean {\n return this.logInStrategy instanceof PasswordLogInStrategy;\n }\n\n authingWithPasswordless(): boolean {\n return this.logInStrategy instanceof PasswordlessLogInStrategy;\n }\n\n async getAuthStatus(userId?: string): Promise {\n const isAuthenticated = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!isAuthenticated) {\n return AuthenticationStatus.LoggedOut;\n }\n\n // Keys aren't stored for a device that is locked or logged out\n // Make sure we're logged in before checking this, otherwise we could mix up those states\n const neverLock =\n (await this.cryptoService.hasKeyStored(KeySuffixOptions.Auto, userId)) &&\n !(await this.stateService.getEverBeenUnlocked({ userId: userId }));\n if (neverLock) {\n // TODO: This also _sets_ the key so when we check memory in the next line it finds a key.\n // We should refactor here.\n await this.cryptoService.getKey(KeySuffixOptions.Auto, userId);\n }\n\n const hasKeyInMemory = await this.cryptoService.hasKeyInMemory(userId);\n if (!hasKeyInMemory) {\n return AuthenticationStatus.Locked;\n }\n\n return AuthenticationStatus.Unlocked;\n }\n\n async makePreloginKey(masterPassword: string, email: string): Promise {\n email = email.trim().toLowerCase();\n let kdf: KdfType = null;\n let kdfConfig: KdfConfig = null;\n try {\n const preloginResponse = await this.apiService.postPrelogin(new PreloginRequest(email));\n if (preloginResponse != null) {\n kdf = preloginResponse.kdf;\n kdfConfig = new KdfConfig(\n preloginResponse.kdfIterations,\n preloginResponse.kdfMemory,\n preloginResponse.kdfParallelism\n );\n }\n } catch (e) {\n if (e == null || e.statusCode !== 404) {\n throw e;\n }\n }\n return this.cryptoService.makeKey(masterPassword, email, kdf, kdfConfig);\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 async passwordlessLogin(\n id: string,\n key: string,\n requestApproved: boolean\n ): Promise {\n const pubKey = Utils.fromB64ToArray(key);\n const encryptedKey = await this.cryptoService.rsaEncrypt(\n (\n await this.cryptoService.getKey()\n ).encKey,\n pubKey.buffer\n );\n const encryptedMasterPassword = await this.cryptoService.rsaEncrypt(\n Utils.fromUtf8ToArray(await this.stateService.getKeyHash()),\n pubKey.buffer\n );\n const request = new PasswordlessAuthRequest(\n encryptedKey.encryptedString,\n encryptedMasterPassword.encryptedString,\n await this.appIdService.getAppId(),\n requestApproved\n );\n return await this.apiService.putAuthRequest(id, request);\n }\n\n private saveState(\n strategy:\n | UserApiLogInStrategy\n | PasswordLogInStrategy\n | SsoLogInStrategy\n | PasswordlessLogInStrategy\n ) {\n this.logInStrategy = strategy;\n this.startSessionTimeout();\n }\n\n private clearState() {\n this.logInStrategy = null;\n this.clearSessionTimeout();\n }\n\n private startSessionTimeout() {\n this.clearSessionTimeout();\n this.sessionTimeout = setTimeout(() => this.clearState(), sessionTimeoutLength);\n }\n\n private clearSessionTimeout() {\n if (this.sessionTimeout != null) {\n clearTimeout(this.sessionTimeout);\n }\n }\n}\n","import { BehaviorSubject, concatMap } from \"rxjs\";\n\nimport { CryptoService } from \"../../../abstractions/crypto.service\";\nimport { I18nService } from \"../../../abstractions/i18n.service\";\nimport { StateService } from \"../../../abstractions/state.service\";\nimport { Utils } from \"../../../misc/utils\";\nimport { SymmetricCryptoKey } from \"../../../models/domain/symmetric-crypto-key\";\nimport { CipherService } from \"../../../vault/abstractions/cipher.service\";\nimport { InternalFolderService as InternalFolderServiceAbstraction } from \"../../../vault/abstractions/folder/folder.service.abstraction\";\nimport { CipherData } from \"../../../vault/models/data/cipher.data\";\nimport { FolderData } from \"../../../vault/models/data/folder.data\";\nimport { Folder } from \"../../../vault/models/domain/folder\";\nimport { FolderView } from \"../../../vault/models/view/folder.view\";\n\nexport class FolderService implements InternalFolderServiceAbstraction {\n protected _folders: BehaviorSubject = new BehaviorSubject([]);\n protected _folderViews: BehaviorSubject = new BehaviorSubject([]);\n\n folders$ = this._folders.asObservable();\n folderViews$ = this._folderViews.asObservable();\n\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private cipherService: CipherService,\n private stateService: StateService\n ) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n concatMap(async (unlocked) => {\n if (Utils.global.bitwardenContainerService == null) {\n return;\n }\n\n if (!unlocked) {\n this._folders.next([]);\n this._folderViews.next([]);\n return;\n }\n\n const data = await this.stateService.getEncryptedFolders();\n\n await this.updateObservables(data);\n })\n )\n .subscribe();\n }\n\n async clearCache(): Promise {\n this._folderViews.next([]);\n }\n\n // TODO: This should be moved to EncryptService or something\n async encrypt(model: FolderView, key?: SymmetricCryptoKey): Promise {\n const folder = new Folder();\n folder.id = model.id;\n folder.name = await this.cryptoService.encrypt(model.name, key);\n return folder;\n }\n\n async get(id: string): Promise {\n const folders = this._folders.getValue();\n\n return folders.find((folder) => folder.id === id);\n }\n\n async getAllFromState(): Promise {\n const folders = await this.stateService.getEncryptedFolders();\n const response: Folder[] = [];\n for (const id in folders) {\n // eslint-disable-next-line\n if (folders.hasOwnProperty(id)) {\n response.push(new Folder(folders[id]));\n }\n }\n return response;\n }\n\n /**\n * @deprecated For the CLI only\n * @param id id of the folder\n */\n async getFromState(id: string): Promise {\n const foldersMap = await this.stateService.getEncryptedFolders();\n const folder = foldersMap[id];\n if (folder == null) {\n return null;\n }\n\n return new Folder(folder);\n }\n\n /**\n * @deprecated Only use in CLI!\n */\n async getAllDecryptedFromState(): Promise {\n const data = await this.stateService.getEncryptedFolders();\n const folders = Object.values(data || {}).map((f) => new Folder(f));\n\n return this.decryptFolders(folders);\n }\n\n async upsert(folder: FolderData | FolderData[]): Promise {\n let folders = await this.stateService.getEncryptedFolders();\n if (folders == null) {\n folders = {};\n }\n\n if (folder instanceof FolderData) {\n const f = folder as FolderData;\n folders[f.id] = f;\n } else {\n (folder as FolderData[]).forEach((f) => {\n folders[f.id] = f;\n });\n }\n\n await this.updateObservables(folders);\n await this.stateService.setEncryptedFolders(folders);\n }\n\n async replace(folders: { [id: string]: FolderData }): Promise {\n await this.updateObservables(folders);\n await this.stateService.setEncryptedFolders(folders);\n }\n\n async clear(userId?: string): Promise {\n if (userId == null || userId == (await this.stateService.getUserId())) {\n this._folders.next([]);\n this._folderViews.next([]);\n }\n await this.stateService.setEncryptedFolders(null, { userId: userId });\n }\n\n async delete(id: string | string[]): Promise {\n const folders = await this.stateService.getEncryptedFolders();\n if (folders == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n if (folders[id] == null) {\n return;\n }\n delete folders[id];\n } else {\n (id as string[]).forEach((i) => {\n delete folders[i];\n });\n }\n\n await this.updateObservables(folders);\n await this.stateService.setEncryptedFolders(folders);\n\n // Items in a deleted folder are re-assigned to \"No Folder\"\n const ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers != null) {\n const updates: CipherData[] = [];\n for (const cId in ciphers) {\n if (ciphers[cId].folderId === id) {\n ciphers[cId].folderId = null;\n updates.push(ciphers[cId]);\n }\n }\n if (updates.length > 0) {\n this.cipherService.upsert(updates);\n }\n }\n }\n\n private async updateObservables(foldersMap: { [id: string]: FolderData }) {\n const folders = Object.values(foldersMap || {}).map((f) => new Folder(f));\n\n this._folders.next(folders);\n\n if (await this.cryptoService.hasKey()) {\n this._folderViews.next(await this.decryptFolders(folders));\n }\n }\n\n private async decryptFolders(folders: Folder[]) {\n const decryptFolderPromises = folders.map((f) => f.decrypt());\n const decryptedFolders = await Promise.all(decryptFolderPromises);\n\n decryptedFolders.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n\n const noneFolder = new FolderView();\n noneFolder.name = this.i18nService.t(\"noneFolder\");\n decryptedFolders.push(noneFolder);\n\n return decryptedFolders;\n }\n}\n","import { ApiService } from \"../../../abstractions/api.service\";\nimport { FolderApiServiceAbstraction } from \"../../../vault/abstractions/folder/folder-api.service.abstraction\";\nimport { InternalFolderService } from \"../../../vault/abstractions/folder/folder.service.abstraction\";\nimport { FolderData } from \"../../../vault/models/data/folder.data\";\nimport { Folder } from \"../../../vault/models/domain/folder\";\nimport { FolderRequest } from \"../../../vault/models/request/folder.request\";\nimport { FolderResponse } from \"../../../vault/models/response/folder.response\";\n\nexport class FolderApiService implements FolderApiServiceAbstraction {\n constructor(private folderService: InternalFolderService, private apiService: ApiService) {}\n\n async save(folder: Folder): Promise {\n const request = new FolderRequest(folder);\n\n let response: FolderResponse;\n if (folder.id == null) {\n response = await this.postFolder(request);\n folder.id = response.id;\n } else {\n response = await this.putFolder(folder.id, request);\n }\n\n const data = new FolderData(response);\n await this.folderService.upsert(data);\n }\n\n async delete(id: string): Promise {\n await this.deleteFolder(id);\n await this.folderService.delete(id);\n }\n\n async get(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/folders/\" + id, null, true, true);\n return new FolderResponse(r);\n }\n\n private async postFolder(request: FolderRequest): Promise {\n const r = await this.apiService.send(\"POST\", \"/folders\", request, true, true);\n return new FolderResponse(r);\n }\n\n async putFolder(id: string, request: FolderRequest): Promise {\n const r = await this.apiService.send(\"PUT\", \"/folders/\" + id, request, true, true);\n return new FolderResponse(r);\n }\n\n private deleteFolder(id: string): Promise {\n return this.apiService.send(\"DELETE\", \"/folders/\" + id, null, true, false);\n }\n}\n","import { AccountApiService } from \"../../abstractions/account/account-api.service\";\nimport { InternalAccountService } from \"../../abstractions/account/account.service\";\nimport { ApiService } from \"../../abstractions/api.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { UserVerificationService } from \"../../abstractions/userVerification/userVerification.service.abstraction\";\nimport { Verification } from \"../../types/verification\";\n\nexport class AccountApiServiceImplementation implements AccountApiService {\n constructor(\n private apiService: ApiService,\n private userVerificationService: UserVerificationService,\n private logService: LogService,\n private accountService: InternalAccountService\n ) {}\n\n async deleteAccount(verification: Verification): Promise {\n try {\n const verificationRequest = await this.userVerificationService.buildRequest(verification);\n await this.apiService.send(\"DELETE\", \"/accounts\", verificationRequest, true, false);\n this.accountService.delete();\n } catch (e) {\n this.logService.error(e);\n throw e;\n }\n }\n}\n","import { InternalAccountService } from \"../../abstractions/account/account.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\n\nexport class AccountServiceImplementation implements InternalAccountService {\n constructor(private messagingService: MessagingService, private logService: LogService) {}\n\n async delete(): Promise {\n try {\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n throw e;\n }\n }\n}\n","import { BehaviorSubject, Observable } from \"rxjs\";\n\nimport { AvatarUpdateService as AvatarUpdateServiceAbstraction } from \"../../abstractions/account/avatar-update.service\";\nimport { ApiService } from \"../../abstractions/api.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { UpdateAvatarRequest } from \"../../models/request/update-avatar.request\";\nimport { ProfileResponse } from \"../../models/response/profile.response\";\n\nexport class AvatarUpdateService implements AvatarUpdateServiceAbstraction {\n private _avatarUpdate$ = new BehaviorSubject(null);\n avatarUpdate$: Observable = this._avatarUpdate$.asObservable();\n\n constructor(private apiService: ApiService, private stateService: StateService) {\n this.loadColorFromState();\n }\n\n loadColorFromState(): Promise {\n return this.stateService.getAvatarColor().then((color) => {\n this._avatarUpdate$.next(color);\n return color;\n });\n }\n\n pushUpdate(color: string | null): Promise {\n return this.apiService.putAvatar(new UpdateAvatarRequest(color)).then((response) => {\n this.stateService.setAvatarColor(response.avatarColor);\n this._avatarUpdate$.next(response.avatarColor);\n });\n }\n}\n","import { CollectionService as CollectionServiceAbstraction } from \"../abstractions/collection.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { ServiceUtils } from \"../misc/serviceUtils\";\nimport { Utils } from \"../misc/utils\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { Collection } from \"../models/domain/collection\";\nimport { TreeNode } from \"../models/domain/tree-node\";\nimport { CollectionView } from \"../models/view/collection.view\";\n\nconst NestingDelimiter = \"/\";\n\nexport class CollectionService implements CollectionServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private stateService: StateService\n ) {}\n\n async clearCache(userId?: string): Promise {\n await this.stateService.setDecryptedCollections(null, { userId: userId });\n }\n\n async encrypt(model: CollectionView): Promise {\n if (model.organizationId == null) {\n throw new Error(\"Collection has no organization id.\");\n }\n const key = await this.cryptoService.getOrgKey(model.organizationId);\n if (key == null) {\n throw new Error(\"No key for this collection's organization.\");\n }\n const collection = new Collection();\n collection.id = model.id;\n collection.organizationId = model.organizationId;\n collection.readOnly = model.readOnly;\n collection.name = await this.cryptoService.encrypt(model.name, key);\n return collection;\n }\n\n async decryptMany(collections: Collection[]): Promise {\n if (collections == null) {\n return [];\n }\n const decCollections: CollectionView[] = [];\n const promises: Promise[] = [];\n collections.forEach((collection) => {\n promises.push(collection.decrypt().then((c) => decCollections.push(c)));\n });\n await Promise.all(promises);\n return decCollections.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n\n async get(id: string): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n // eslint-disable-next-line\n if (collections == null || !collections.hasOwnProperty(id)) {\n return null;\n }\n\n return new Collection(collections[id]);\n }\n\n async getAll(): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n const response: Collection[] = [];\n for (const id in collections) {\n // eslint-disable-next-line\n if (collections.hasOwnProperty(id)) {\n response.push(new Collection(collections[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n let decryptedCollections = await this.stateService.getDecryptedCollections();\n if (decryptedCollections != null) {\n return decryptedCollections;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const collections = await this.getAll();\n decryptedCollections = await this.decryptMany(collections);\n\n await this.stateService.setDecryptedCollections(decryptedCollections);\n return decryptedCollections;\n }\n\n async getAllNested(collections: CollectionView[] = null): Promise[]> {\n if (collections == null) {\n collections = await this.getAllDecrypted();\n }\n const nodes: TreeNode[] = [];\n collections.forEach((c) => {\n const collectionCopy = new CollectionView();\n collectionCopy.id = c.id;\n collectionCopy.organizationId = c.organizationId;\n const parts = c.name != null ? c.name.replace(/^\\/+|\\/+$/g, \"\").split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, collectionCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n /**\n * @deprecated August 30 2022: Moved to new Vault Filter Service\n * Remove when Desktop and Browser are updated\n */\n async getNested(id: string): Promise> {\n const collections = await this.getAllNested();\n return ServiceUtils.getTreeNodeObjectFromList(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 isSelfHosted(): boolean {\n return ![\n \"http://vault.bitwarden.com\",\n \"https://vault.bitwarden.com\",\n \"http://vault.qa.bitwarden.pw\",\n \"https://vault.qa.bitwarden.pw\",\n ].includes(this.getWebVaultUrl());\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 { BitPayInvoiceRequest } from \"../models/request/bit-pay-invoice.request\";\nimport { CollectionBulkDeleteRequest } from \"../models/request/collection-bulk-delete.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 { IapCheckRequest } from \"../models/request/iap-check.request\";\nimport { PasswordTokenRequest } from \"../models/request/identity-token/password-token.request\";\nimport { SsoTokenRequest } from \"../models/request/identity-token/sso-token.request\";\nimport { TokenTwoFactorRequest } from \"../models/request/identity-token/token-two-factor.request\";\nimport { UserApiTokenRequest } from \"../models/request/identity-token/user-api-token.request\";\nimport { KdfRequest } from \"../models/request/kdf.request\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/key-connector-user-key.request\";\nimport { KeysRequest } from \"../models/request/keys.request\";\nimport { OrganizationConnectionRequest } from \"../models/request/organization-connection.request\";\nimport { OrganizationImportRequest } from \"../models/request/organization-import.request\";\nimport { OrganizationSponsorshipCreateRequest } from \"../models/request/organization/organization-sponsorship-create.request\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../models/request/organization/organization-sponsorship-redeem.request\";\nimport { PasswordHintRequest } from \"../models/request/password-hint.request\";\nimport { PasswordRequest } from \"../models/request/password.request\";\nimport { PasswordlessAuthRequest } from \"../models/request/passwordless-auth.request\";\nimport { PasswordlessCreateAuthRequest } from \"../models/request/passwordless-create-auth.request\";\nimport { PaymentRequest } from \"../models/request/payment.request\";\nimport { PreloginRequest } from \"../models/request/prelogin.request\";\nimport { ProviderAddOrganizationRequest } from \"../models/request/provider/provider-add-organization.request\";\nimport { ProviderOrganizationCreateRequest } from \"../models/request/provider/provider-organization-create.request\";\nimport { ProviderSetupRequest } from \"../models/request/provider/provider-setup.request\";\nimport { ProviderUpdateRequest } from \"../models/request/provider/provider-update.request\";\nimport { ProviderUserAcceptRequest } from \"../models/request/provider/provider-user-accept.request\";\nimport { ProviderUserBulkConfirmRequest } from \"../models/request/provider/provider-user-bulk-confirm.request\";\nimport { ProviderUserBulkRequest } from \"../models/request/provider/provider-user-bulk.request\";\nimport { ProviderUserConfirmRequest } from \"../models/request/provider/provider-user-confirm.request\";\nimport { ProviderUserInviteRequest } from \"../models/request/provider/provider-user-invite.request\";\nimport { ProviderUserUpdateRequest } from \"../models/request/provider/provider-user-update.request\";\nimport { RegisterRequest } from \"../models/request/register.request\";\nimport { SecretVerificationRequest } from \"../models/request/secret-verification.request\";\nimport { SelectionReadOnlyRequest } from \"../models/request/selection-read-only.request\";\nimport { SendAccessRequest } from \"../models/request/send-access.request\";\nimport { SendRequest } from \"../models/request/send.request\";\nimport { SetPasswordRequest } from \"../models/request/set-password.request\";\nimport { StorageRequest } from \"../models/request/storage.request\";\nimport { TaxInfoUpdateRequest } from \"../models/request/tax-info-update.request\";\nimport { TwoFactorEmailRequest } from \"../models/request/two-factor-email.request\";\nimport { TwoFactorProviderRequest } from \"../models/request/two-factor-provider.request\";\nimport { TwoFactorRecoveryRequest } from \"../models/request/two-factor-recovery.request\";\nimport { UpdateAvatarRequest } from \"../models/request/update-avatar.request\";\nimport { UpdateDomainsRequest } from \"../models/request/update-domains.request\";\nimport { UpdateKeyRequest } from \"../models/request/update-key.request\";\nimport { UpdateProfileRequest } from \"../models/request/update-profile.request\";\nimport { UpdateTempPasswordRequest } from \"../models/request/update-temp-password.request\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../models/request/update-two-factor-authenticator.request\";\nimport { UpdateTwoFactorDuoRequest } from \"../models/request/update-two-factor-duo.request\";\nimport { UpdateTwoFactorEmailRequest } from \"../models/request/update-two-factor-email.request\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../models/request/update-two-factor-web-authn-delete.request\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../models/request/update-two-factor-web-authn.request\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../models/request/update-two-factor-yubio-otp.request\";\nimport { VerifyDeleteRecoverRequest } from \"../models/request/verify-delete-recover.request\";\nimport { VerifyEmailRequest } from \"../models/request/verify-email.request\";\nimport { ApiKeyResponse } from \"../models/response/api-key.response\";\nimport { 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 {\n CollectionAccessDetailsResponse,\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 { IdentityCaptchaResponse } from \"../models/response/identity-captcha.response\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identity-two-factor.response\";\nimport { KeyConnectorUserKeyResponse } from \"../models/response/key-connector-user-key.response\";\nimport { ListResponse } from \"../models/response/list.response\";\nimport {\n OrganizationConnectionConfigApis,\n OrganizationConnectionResponse,\n} from \"../models/response/organization-connection.response\";\nimport { OrganizationExportResponse } from \"../models/response/organization-export.response\";\nimport { OrganizationSponsorshipSyncStatusResponse } from \"../models/response/organization-sponsorship-sync-status.response\";\nimport { PaymentResponse } from \"../models/response/payment.response\";\nimport { PlanResponse } from \"../models/response/plan.response\";\nimport { PolicyResponse } from \"../models/response/policy.response\";\nimport { PreloginResponse } from \"../models/response/prelogin.response\";\nimport { ProfileResponse } from \"../models/response/profile.response\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../models/response/provider/provider-organization.response\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../models/response/provider/provider-user-bulk-public-key.response\";\nimport { ProviderUserBulkResponse } from \"../models/response/provider/provider-user-bulk.response\";\nimport {\n ProviderUserResponse,\n ProviderUserUserDetailsResponse,\n} from \"../models/response/provider/provider-user.response\";\nimport { ProviderResponse } from \"../models/response/provider/provider.response\";\nimport { SelectionReadOnlyResponse } from \"../models/response/selection-read-only.response\";\nimport { SendAccessResponse } from \"../models/response/send-access.response\";\nimport { SendFileDownloadDataResponse } from \"../models/response/send-file-download-data.response\";\nimport { SendFileUploadDataResponse } from \"../models/response/send-file-upload-data.response\";\nimport { SendResponse } from \"../models/response/send.response\";\nimport { SsoPreValidateResponse } from \"../models/response/sso-pre-validate.response\";\nimport { SubscriptionResponse } from \"../models/response/subscription.response\";\nimport { TaxInfoResponse } from \"../models/response/tax-info.response\";\nimport { TaxRateResponse } from \"../models/response/tax-rate.response\";\nimport { TwoFactorAuthenticatorResponse } from \"../models/response/two-factor-authenticator.response\";\nimport { TwoFactorDuoResponse } from \"../models/response/two-factor-duo.response\";\nimport { TwoFactorEmailResponse } from \"../models/response/two-factor-email.response\";\nimport { TwoFactorProviderResponse } from \"../models/response/two-factor-provider.response\";\nimport { TwoFactorRecoverResponse } from \"../models/response/two-factor-recover.response\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"../models/response/two-factor-web-authn.response\";\nimport { TwoFactorYubiKeyResponse } from \"../models/response/two-factor-yubi-key.response\";\nimport { UserKeyResponse } from \"../models/response/user-key.response\";\nimport { SendAccessView } from \"../models/view/send-access.view\";\nimport { AttachmentRequest } from \"../vault/models/request/attachment.request\";\nimport { CipherBulkDeleteRequest } from \"../vault/models/request/cipher-bulk-delete.request\";\nimport { CipherBulkMoveRequest } from \"../vault/models/request/cipher-bulk-move.request\";\nimport { CipherBulkShareRequest } from \"../vault/models/request/cipher-bulk-share.request\";\nimport { CipherCollectionsRequest } from \"../vault/models/request/cipher-collections.request\";\nimport { CipherCreateRequest } from \"../vault/models/request/cipher-create.request\";\nimport { CipherPartialRequest } from \"../vault/models/request/cipher-partial.request\";\nimport { CipherShareRequest } from \"../vault/models/request/cipher-share.request\";\nimport { CipherRequest } from \"../vault/models/request/cipher.request\";\nimport { AttachmentUploadDataResponse } from \"../vault/models/response/attachment-upload-data.response\";\nimport { AttachmentResponse } from \"../vault/models/response/attachment.response\";\nimport { CipherResponse } from \"../vault/models/response/cipher.response\";\nimport { SyncResponse } from \"../vault/models/response/sync.response\";\n\n/**\n * @deprecated The `ApiService` class is deprecated and calls should be extracted into individual\n * api services. The `send` method is still allowed to be used within api services. For background\n * of this decision please read https://contributing.bitwarden.com/architecture/adr/refactor-api-service.\n */\nexport class ApiService implements ApiServiceAbstraction {\n private device: DeviceType;\n private deviceType: string;\n private isWebClient = false;\n private isDesktopClient = false;\n\n constructor(\n private tokenService: TokenService,\n private platformUtilsService: PlatformUtilsService,\n private environmentService: EnvironmentService,\n private appIdService: AppIdService,\n private logoutCallback: (expired: boolean) => Promise,\n private customUserAgent: string = null\n ) {\n this.device = platformUtilsService.getDevice();\n this.deviceType = this.device.toString();\n this.isWebClient =\n this.device === DeviceType.IEBrowser ||\n this.device === DeviceType.ChromeBrowser ||\n this.device === DeviceType.EdgeBrowser ||\n this.device === DeviceType.FirefoxBrowser ||\n this.device === DeviceType.OperaBrowser ||\n this.device === DeviceType.SafariBrowser ||\n this.device === DeviceType.UnknownBrowser ||\n this.device === DeviceType.VivaldiBrowser;\n this.isDesktopClient =\n this.device === DeviceType.WindowsDesktop ||\n this.device === DeviceType.MacOsDesktop ||\n this.device === DeviceType.LinuxDesktop;\n }\n\n // Auth APIs\n\n async postIdentityToken(\n request: UserApiTokenRequest | PasswordTokenRequest | SsoTokenRequest\n ): Promise {\n const headers = new Headers({\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n request.alterIdentityTokenHeaders(headers);\n\n const identityToken =\n request instanceof UserApiTokenRequest\n ? request.toIdentityToken()\n : request.toIdentityToken(this.platformUtilsService.getClientType());\n\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + \"/connect/token\", {\n body: this.qsStringify(identityToken),\n credentials: this.getCredentials(),\n cache: \"no-store\",\n headers: headers,\n method: \"POST\",\n })\n );\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n }\n\n if (responseJson != null) {\n if (response.status === 200) {\n return new IdentityTokenResponse(responseJson);\n } else if (\n response.status === 400 &&\n responseJson.TwoFactorProviders2 &&\n Object.keys(responseJson.TwoFactorProviders2).length\n ) {\n await this.tokenService.clearTwoFactorToken();\n return new IdentityTwoFactorResponse(responseJson);\n } else if (\n response.status === 400 &&\n responseJson.HCaptcha_SiteKey &&\n Object.keys(responseJson.HCaptcha_SiteKey).length\n ) {\n return new IdentityCaptchaResponse(responseJson);\n }\n }\n\n return Promise.reject(new ErrorResponse(responseJson, response.status, true));\n }\n\n async refreshIdentityToken(): Promise {\n try {\n await this.doAuthRefresh();\n } catch (e) {\n return Promise.reject(null);\n }\n }\n\n async postAuthRequest(request: PasswordlessCreateAuthRequest): Promise {\n const r = await this.send(\"POST\", \"/auth-requests/\", request, false, true);\n return new AuthRequestResponse(r);\n }\n\n async getAuthResponse(id: string, accessCode: string): Promise {\n const path = `/auth-requests/${id}/response?code=${accessCode}`;\n const r = await this.send(\"GET\", path, null, false, true);\n return new AuthRequestResponse(r);\n }\n\n async getAuthRequest(id: string): Promise {\n const path = `/auth-requests/${id}`;\n const r = await this.send(\"GET\", path, null, true, true);\n return new AuthRequestResponse(r);\n }\n\n async putAuthRequest(id: string, request: PasswordlessAuthRequest): Promise {\n const path = `/auth-requests/${id}`;\n const r = await this.send(\"PUT\", path, request, true, true);\n return new AuthRequestResponse(r);\n }\n\n async getAuthRequests(): Promise> {\n const path = `/auth-requests/`;\n const r = await this.send(\"GET\", path, null, true, true);\n return new ListResponse(r, AuthRequestResponse);\n }\n\n async getLastAuthRequest(): Promise {\n const requests = await this.getAuthRequests();\n const activeRequests = requests.data.filter((m) => !m.isAnswered && !m.isExpired);\n const lastRequest = activeRequests.sort((a: AuthRequestResponse, b: AuthRequestResponse) =>\n a.creationDate.localeCompare(b.creationDate)\n )[activeRequests.length - 1];\n return lastRequest;\n }\n\n // Account APIs\n\n async getProfile(): Promise {\n const r = await this.send(\"GET\", \"/accounts/profile\", null, true, true);\n return new ProfileResponse(r);\n }\n\n async getUserSubscription(): Promise {\n const r = await this.send(\"GET\", \"/accounts/subscription\", null, true, true);\n return new SubscriptionResponse(r);\n }\n\n async getTaxInfo(): Promise {\n const r = await this.send(\"GET\", \"/accounts/tax\", null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async putProfile(request: UpdateProfileRequest): Promise {\n const r = await this.send(\"PUT\", \"/accounts/profile\", request, true, true);\n return new ProfileResponse(r);\n }\n\n async putAvatar(request: UpdateAvatarRequest): Promise {\n const r = await this.send(\"PUT\", \"/accounts/avatar\", request, true, true);\n return new ProfileResponse(r);\n }\n\n putTaxInfo(request: TaxInfoUpdateRequest): Promise {\n return this.send(\"PUT\", \"/accounts/tax\", request, true, false);\n }\n\n async postPrelogin(request: PreloginRequest): Promise {\n const r = await this.send(\n \"POST\",\n \"/accounts/prelogin\",\n request,\n false,\n true,\n this.environmentService.getIdentityUrl()\n );\n return new PreloginResponse(r);\n }\n\n postEmailToken(request: EmailTokenRequest): Promise {\n return this.send(\"POST\", \"/accounts/email-token\", request, true, false);\n }\n\n postEmail(request: EmailRequest): Promise {\n return this.send(\"POST\", \"/accounts/email\", request, true, false);\n }\n\n postPassword(request: PasswordRequest): Promise {\n return this.send(\"POST\", \"/accounts/password\", request, true, false);\n }\n\n setPassword(request: SetPasswordRequest): Promise {\n return this.send(\"POST\", \"/accounts/set-password\", request, true, false);\n }\n\n postSetKeyConnectorKey(request: SetKeyConnectorKeyRequest): Promise {\n return this.send(\"POST\", \"/accounts/set-key-connector-key\", request, true, false);\n }\n\n postSecurityStamp(request: SecretVerificationRequest): Promise {\n return this.send(\"POST\", \"/accounts/security-stamp\", request, true, false);\n }\n\n async getAccountRevisionDate(): Promise {\n const r = await this.send(\"GET\", \"/accounts/revision-date\", null, true, true);\n return r as number;\n }\n\n postPasswordHint(request: PasswordHintRequest): Promise {\n return this.send(\"POST\", \"/accounts/password-hint\", request, false, false);\n }\n\n async postRegister(request: RegisterRequest): Promise {\n const r = await this.send(\n \"POST\",\n \"/accounts/register\",\n request,\n false,\n true,\n this.environmentService.getIdentityUrl()\n );\n return new RegisterResponse(r);\n }\n\n async postPremium(data: FormData): Promise {\n const r = await this.send(\"POST\", \"/accounts/premium\", data, true, true);\n return new PaymentResponse(r);\n }\n\n async postIapCheck(request: IapCheckRequest): Promise {\n return this.send(\"POST\", \"/accounts/iap-check\", request, true, false);\n }\n\n postReinstatePremium(): Promise {\n return this.send(\"POST\", \"/accounts/reinstate-premium\", null, true, false);\n }\n\n postCancelPremium(): Promise {\n return this.send(\"POST\", \"/accounts/cancel-premium\", null, true, false);\n }\n\n async postAccountStorage(request: StorageRequest): Promise {\n const r = await this.send(\"POST\", \"/accounts/storage\", request, true, true);\n return new PaymentResponse(r);\n }\n\n postAccountPayment(request: PaymentRequest): Promise {\n return this.send(\"POST\", \"/accounts/payment\", request, true, false);\n }\n\n postAccountLicense(data: FormData): Promise {\n return this.send(\"POST\", \"/accounts/license\", data, true, false);\n }\n\n postAccountKeys(request: KeysRequest): Promise {\n return this.send(\"POST\", \"/accounts/keys\", request, true, false);\n }\n\n postAccountKey(request: UpdateKeyRequest): Promise {\n return this.send(\"POST\", \"/accounts/key\", request, true, false);\n }\n\n postAccountVerifyEmail(): Promise {\n return this.send(\"POST\", \"/accounts/verify-email\", null, true, false);\n }\n\n postAccountVerifyEmailToken(request: VerifyEmailRequest): Promise {\n return this.send(\"POST\", \"/accounts/verify-email-token\", request, false, false);\n }\n\n postAccountVerifyPassword(request: SecretVerificationRequest): Promise {\n return this.send(\"POST\", \"/accounts/verify-password\", request, true, false);\n }\n\n postAccountRecoverDelete(request: DeleteRecoverRequest): Promise {\n return this.send(\"POST\", \"/accounts/delete-recover\", request, false, false);\n }\n\n postAccountRecoverDeleteToken(request: VerifyDeleteRecoverRequest): Promise {\n return this.send(\"POST\", \"/accounts/delete-recover-token\", request, false, false);\n }\n\n postAccountKdf(request: KdfRequest): Promise {\n return this.send(\"POST\", \"/accounts/kdf\", request, true, false);\n }\n\n async deleteSsoUser(organizationId: string): Promise {\n return this.send(\"DELETE\", \"/accounts/sso/\" + organizationId, null, true, false);\n }\n\n async getSsoUserIdentifier(): Promise {\n return this.send(\"GET\", \"/accounts/sso/user-identifier\", null, true, true);\n }\n\n async postUserApiKey(id: string, request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/accounts/api-key\", request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async postUserRotateApiKey(\n id: string,\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/accounts/rotate-api-key\", request, true, true);\n return new ApiKeyResponse(r);\n }\n\n putUpdateTempPassword(request: UpdateTempPasswordRequest): Promise {\n return this.send(\"PUT\", \"/accounts/update-temp-password\", request, true, false);\n }\n\n postConvertToKeyConnector(): Promise {\n return this.send(\"POST\", \"/accounts/convert-to-key-connector\", null, true, false);\n }\n\n // Account Billing APIs\n\n async getUserBillingHistory(): Promise {\n const r = await this.send(\"GET\", \"/accounts/billing/history\", null, true, true);\n return new BillingHistoryResponse(r);\n }\n\n async getUserBillingPayment(): Promise {\n const r = await this.send(\"GET\", \"/accounts/billing/payment-method\", null, true, true);\n return new BillingPaymentResponse(r);\n }\n\n // Send APIs\n\n async getSend(id: string): Promise {\n const r = await this.send(\"GET\", \"/sends/\" + id, null, true, true);\n return new SendResponse(r);\n }\n\n async postSendAccess(\n id: string,\n request: SendAccessRequest,\n apiUrl?: string\n ): Promise {\n const addSendIdHeader = (headers: Headers) => {\n headers.set(\"Send-Id\", id);\n };\n const r = await this.send(\n \"POST\",\n \"/sends/access/\" + id,\n request,\n false,\n true,\n apiUrl,\n addSendIdHeader\n );\n return new SendAccessResponse(r);\n }\n\n async getSendFileDownloadData(\n send: SendAccessView,\n request: SendAccessRequest,\n apiUrl?: string\n ): Promise {\n const addSendIdHeader = (headers: Headers) => {\n headers.set(\"Send-Id\", send.id);\n };\n const r = await this.send(\n \"POST\",\n \"/sends/\" + send.id + \"/access/file/\" + send.file.id,\n request,\n false,\n true,\n apiUrl,\n addSendIdHeader\n );\n return new SendFileDownloadDataResponse(r);\n }\n\n async getSends(): Promise> {\n const r = await this.send(\"GET\", \"/sends\", null, true, true);\n return new ListResponse(r, SendResponse);\n }\n\n async postSend(request: SendRequest): Promise {\n const r = await this.send(\"POST\", \"/sends\", request, true, true);\n return new SendResponse(r);\n }\n\n async postFileTypeSend(request: SendRequest): Promise {\n const r = await this.send(\"POST\", \"/sends/file/v2\", request, true, true);\n return new SendFileUploadDataResponse(r);\n }\n\n async renewSendFileUploadUrl(\n sendId: string,\n fileId: string\n ): Promise {\n const r = await this.send(\"GET\", \"/sends/\" + sendId + \"/file/\" + fileId, null, true, true);\n return new SendFileUploadDataResponse(r);\n }\n\n postSendFile(sendId: string, fileId: string, data: FormData): Promise {\n return this.send(\"POST\", \"/sends/\" + sendId + \"/file/\" + fileId, data, true, false);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postSendFileLegacy(data: FormData): Promise {\n const r = await this.send(\"POST\", \"/sends/file\", data, true, true);\n return new SendResponse(r);\n }\n\n async putSend(id: string, request: SendRequest): Promise {\n const r = await this.send(\"PUT\", \"/sends/\" + id, request, true, true);\n return new SendResponse(r);\n }\n\n async putSendRemovePassword(id: string): Promise {\n const r = await this.send(\"PUT\", \"/sends/\" + id + \"/remove-password\", null, true, true);\n return new SendResponse(r);\n }\n\n deleteSend(id: string): Promise {\n return this.send(\"DELETE\", \"/sends/\" + id, null, true, false);\n }\n\n // Cipher APIs\n\n async getCipher(id: string): Promise {\n const r = await this.send(\"GET\", \"/ciphers/\" + id, null, true, true);\n return new CipherResponse(r);\n }\n\n async getFullCipherDetails(id: string): Promise {\n const r = await this.send(\"GET\", \"/ciphers/\" + id + \"/details\", null, true, true);\n return new CipherResponse(r);\n }\n\n async getCipherAdmin(id: string): Promise {\n const r = await this.send(\"GET\", \"/ciphers/\" + id + \"/admin\", null, true, true);\n return new CipherResponse(r);\n }\n\n async getCiphersOrganization(organizationId: string): Promise> {\n const r = await this.send(\n \"GET\",\n \"/ciphers/organization-details?organizationId=\" + organizationId,\n null,\n true,\n true\n );\n return new ListResponse(r, CipherResponse);\n }\n\n async postCipher(request: CipherRequest): Promise {\n const r = await this.send(\"POST\", \"/ciphers\", request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherCreate(request: CipherCreateRequest): Promise {\n const r = await this.send(\"POST\", \"/ciphers/create\", request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherAdmin(request: CipherCreateRequest): Promise {\n const r = await this.send(\"POST\", \"/ciphers/admin\", request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipher(id: string, request: CipherRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id, request, true, true);\n return new CipherResponse(r);\n }\n\n async putPartialCipher(id: string, request: CipherPartialRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/partial\", request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipherAdmin(id: string, request: CipherRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/admin\", request, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipher(id: string): Promise {\n return this.send(\"DELETE\", \"/ciphers/\" + id, null, true, false);\n }\n\n deleteCipherAdmin(id: string): Promise {\n return this.send(\"DELETE\", \"/ciphers/\" + id + \"/admin\", null, true, false);\n }\n\n deleteManyCiphers(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"DELETE\", \"/ciphers\", request, true, false);\n }\n\n deleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"DELETE\", \"/ciphers/admin\", request, true, false);\n }\n\n putMoveCiphers(request: CipherBulkMoveRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/move\", request, true, false);\n }\n\n async putShareCipher(id: string, request: CipherShareRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/share\", request, true, true);\n return new CipherResponse(r);\n }\n\n putShareCiphers(request: CipherBulkShareRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/share\", request, true, false);\n }\n\n putCipherCollections(id: string, request: CipherCollectionsRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/collections\", request, true, false);\n }\n\n putCipherCollectionsAdmin(id: string, request: CipherCollectionsRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/collections-admin\", request, true, false);\n }\n\n postPurgeCiphers(\n request: SecretVerificationRequest,\n organizationId: string = null\n ): Promise {\n let path = \"/ciphers/purge\";\n if (organizationId != null) {\n path += \"?organizationId=\" + organizationId;\n }\n return this.send(\"POST\", path, request, true, false);\n }\n\n 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 getCollectionAccessDetails(\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 CollectionAccessDetailsResponse(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 getManyCollectionsWithAccessDetails(\n organizationId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections/details\",\n null,\n true,\n true\n );\n return new ListResponse(r, CollectionAccessDetailsResponse);\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 deleteManyCollections(request: CollectionBulkDeleteRequest): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + request.organizationId + \"/collections\",\n request,\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 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 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 deleteGroupUser(organizationId: string, id: string, organizationUserId: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/user/\" + organizationUserId,\n null,\n true,\n false\n );\n }\n\n // Plan APIs\n\n async getPlans(): Promise> {\n const r = await this.send(\"GET\", \"/plans/\", null, false, true);\n return new ListResponse(r, PlanResponse);\n }\n\n async postPublicImportDirectory(request: OrganizationImportRequest): Promise {\n return this.send(\"POST\", \"/public/organization/import\", request, true, false);\n }\n\n async getTaxRates(): Promise> {\n const r = await this.send(\"GET\", \"/plans/sales-tax-rates/\", null, true, true);\n return new ListResponse(r, TaxRateResponse);\n }\n\n // Settings APIs\n\n async getSettingsDomains(): Promise {\n const r = await this.send(\"GET\", \"/settings/domains\", null, true, true);\n return new DomainsResponse(r);\n }\n\n async putSettingsDomains(request: UpdateDomainsRequest): Promise {\n const r = await this.send(\"PUT\", \"/settings/domains\", request, true, true);\n return new DomainsResponse(r);\n }\n\n // Sync APIs\n\n async getSync(): Promise {\n const path = this.isDesktopClient || this.isWebClient ? \"/sync?excludeDomains=true\" : \"/sync\";\n const r = await this.send(\"GET\", path, null, true, true);\n return new SyncResponse(r);\n }\n\n // Two-factor APIs\n\n async getTwoFactorProviders(): Promise> {\n const r = await this.send(\"GET\", \"/two-factor\", null, true, true);\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorOrganizationProviders(\n organizationId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/two-factor\",\n null,\n true,\n true\n );\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorAuthenticator(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-authenticator\", request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async getTwoFactorEmail(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-email\", request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async getTwoFactorDuo(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-duo\", request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorOrganizationDuo(\n organizationId: string,\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/two-factor/get-duo\",\n request,\n true,\n true\n );\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorYubiKey(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-yubikey\", request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async getTwoFactorWebAuthn(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-webauthn\", request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async getTwoFactorWebAuthnChallenge(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-webauthn-challenge\", request, true, true);\n return new ChallengeResponse(r);\n }\n\n async getTwoFactorRecover(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-recover\", request, true, true);\n return new TwoFactorRecoverResponse(r);\n }\n\n async putTwoFactorAuthenticator(\n request: UpdateTwoFactorAuthenticatorRequest\n ): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/authenticator\", request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async putTwoFactorEmail(request: UpdateTwoFactorEmailRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/email\", request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async putTwoFactorDuo(request: UpdateTwoFactorDuoRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/duo\", request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorOrganizationDuo(\n organizationId: string,\n request: UpdateTwoFactorDuoRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/two-factor/duo\",\n request,\n true,\n true\n );\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorYubiKey(\n request: UpdateTwoFactorYubioOtpRequest\n ): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/yubikey\", request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async putTwoFactorWebAuthn(\n request: UpdateTwoFactorWebAuthnRequest\n ): Promise {\n const response = request.deviceResponse.response as AuthenticatorAttestationResponse;\n const data: any = Object.assign({}, request);\n\n data.deviceResponse = {\n id: request.deviceResponse.id,\n rawId: btoa(request.deviceResponse.id),\n type: request.deviceResponse.type,\n extensions: request.deviceResponse.getClientExtensionResults(),\n response: {\n AttestationObject: Utils.fromBufferToB64(response.attestationObject),\n clientDataJson: Utils.fromBufferToB64(response.clientDataJSON),\n },\n };\n\n const r = await this.send(\"PUT\", \"/two-factor/webauthn\", data, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async deleteTwoFactorWebAuthn(\n request: UpdateTwoFactorWebAuthnDeleteRequest\n ): Promise {\n const r = await this.send(\"DELETE\", \"/two-factor/webauthn\", request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async putTwoFactorDisable(request: TwoFactorProviderRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/disable\", request, true, true);\n return new TwoFactorProviderResponse(r);\n }\n\n async putTwoFactorOrganizationDisable(\n organizationId: string,\n request: TwoFactorProviderRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/two-factor/disable\",\n request,\n true,\n true\n );\n return new TwoFactorProviderResponse(r);\n }\n\n postTwoFactorRecover(request: TwoFactorRecoveryRequest): Promise {\n return this.send(\"POST\", \"/two-factor/recover\", request, false, false);\n }\n\n postTwoFactorEmailSetup(request: TwoFactorEmailRequest): Promise {\n return this.send(\"POST\", \"/two-factor/send-email\", request, true, false);\n }\n\n postTwoFactorEmail(request: TwoFactorEmailRequest): Promise {\n return this.send(\"POST\", \"/two-factor/send-email-login\", request, false, false);\n }\n\n async getDeviceVerificationSettings(): Promise {\n const r = await this.send(\n \"GET\",\n \"/two-factor/get-device-verification-settings\",\n null,\n true,\n true\n );\n return new DeviceVerificationResponse(r);\n }\n\n async putDeviceVerificationSettings(\n request: DeviceVerificationRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/two-factor/device-verification-settings\",\n request,\n true,\n true\n );\n return new DeviceVerificationResponse(r);\n }\n\n async getKnownDevice(email: string, deviceIdentifier: string): Promise {\n const path = `/devices/knowndevice/${email}/${deviceIdentifier}`;\n const r = await this.send(\"GET\", path, null, false, true);\n return r as boolean;\n }\n\n // Emergency Access APIs\n\n async getEmergencyAccessTrusted(): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/trusted\", null, true, true);\n return new ListResponse(r, EmergencyAccessGranteeDetailsResponse);\n }\n\n async getEmergencyAccessGranted(): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/granted\", null, true, true);\n return new ListResponse(r, EmergencyAccessGrantorDetailsResponse);\n }\n\n async getEmergencyAccess(id: string): Promise {\n const r = await this.send(\"GET\", \"/emergency-access/\" + id, null, true, true);\n return new EmergencyAccessGranteeDetailsResponse(r);\n }\n\n async getEmergencyGrantorPolicies(id: string): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/\" + id + \"/policies\", null, true, true);\n return new ListResponse(r, PolicyResponse);\n }\n\n putEmergencyAccess(id: string, request: EmergencyAccessUpdateRequest): Promise {\n return this.send(\"PUT\", \"/emergency-access/\" + id, request, true, false);\n }\n\n deleteEmergencyAccess(id: string): Promise {\n return this.send(\"DELETE\", \"/emergency-access/\" + id, null, true, false);\n }\n\n postEmergencyAccessInvite(request: EmergencyAccessInviteRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/invite\", request, true, false);\n }\n\n postEmergencyAccessReinvite(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/reinvite\", null, true, false);\n }\n\n postEmergencyAccessAccept(id: string, request: EmergencyAccessAcceptRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/accept\", request, true, false);\n }\n\n postEmergencyAccessConfirm(id: string, request: EmergencyAccessConfirmRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/confirm\", request, true, false);\n }\n\n postEmergencyAccessInitiate(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/initiate\", null, true, false);\n }\n\n postEmergencyAccessApprove(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/approve\", null, true, false);\n }\n\n postEmergencyAccessReject(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/reject\", null, true, false);\n }\n\n async postEmergencyAccessTakeover(id: string): Promise {\n const r = await this.send(\"POST\", \"/emergency-access/\" + id + \"/takeover\", null, true, true);\n return new EmergencyAccessTakeoverResponse(r);\n }\n\n async postEmergencyAccessPassword(\n id: string,\n request: EmergencyAccessPasswordRequest\n ): Promise {\n await this.send(\"POST\", \"/emergency-access/\" + id + \"/password\", request, true, true);\n }\n\n async postEmergencyAccessView(id: string): Promise {\n const r = await this.send(\"POST\", \"/emergency-access/\" + id + \"/view\", null, true, true);\n return new EmergencyAccessViewResponse(r);\n }\n\n // Organization APIs\n\n async getCloudCommunicationsEnabled(): Promise {\n const r = await this.send(\"GET\", \"/organizations/connections/enabled\", null, true, true);\n return r as boolean;\n }\n\n async getOrganizationConnection(\n id: string,\n type: OrganizationConnectionType,\n configType: { new (response: any): TConfig }\n ): Promise> {\n const r = await this.send(\"GET\", `/organizations/connections/${id}/${type}`, null, true, true);\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async createOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig }\n ): Promise> {\n const r = await this.send(\"POST\", \"/organizations/connections/\", request, true, true);\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async updateOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig },\n organizationConnectionId?: string\n ): Promise> {\n const r = await this.send(\n \"PUT\",\n \"/organizations/connections/\" + organizationConnectionId,\n request,\n true,\n true\n );\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async deleteOrganizationConnection(id: string): Promise {\n return this.send(\"DELETE\", \"/organizations/connections/\" + id, null, true, false);\n }\n\n // Provider APIs\n\n async postProviderSetup(id: string, request: ProviderSetupRequest) {\n const r = await this.send(\"POST\", \"/providers/\" + id + \"/setup\", request, true, true);\n return new ProviderResponse(r);\n }\n\n async getProvider(id: string) {\n const r = await this.send(\"GET\", \"/providers/\" + id, null, true, true);\n return new ProviderResponse(r);\n }\n\n async putProvider(id: string, request: ProviderUpdateRequest) {\n const r = await this.send(\"PUT\", \"/providers/\" + id, request, true, true);\n return new ProviderResponse(r);\n }\n\n // Provider User APIs\n\n async getProviderUsers(\n providerId: string\n ): Promise> {\n const r = await this.send(\"GET\", \"/providers/\" + providerId + \"/users\", null, true, true);\n return new ListResponse(r, ProviderUserUserDetailsResponse);\n }\n\n async getProviderUser(providerId: string, id: string): Promise {\n const r = await this.send(\"GET\", \"/providers/\" + providerId + \"/users/\" + id, null, true, true);\n return new ProviderUserResponse(r);\n }\n\n postProviderUserInvite(providerId: string, request: ProviderUserInviteRequest): Promise {\n return this.send(\"POST\", \"/providers/\" + providerId + \"/users/invite\", request, true, false);\n }\n\n postProviderUserReinvite(providerId: string, id: string): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/reinvite\",\n null,\n true,\n false\n );\n }\n\n async postManyProviderUserReinvite(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/reinvite\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n async postProviderUserBulkConfirm(\n providerId: string,\n request: ProviderUserBulkConfirmRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/confirm\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n async deleteManyProviderUsers(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\"DELETE\", \"/providers/\" + providerId + \"/users\", request, true, true);\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n postProviderUserAccept(\n providerId: string,\n id: string,\n request: ProviderUserAcceptRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/accept\",\n request,\n true,\n false\n );\n }\n\n postProviderUserConfirm(\n providerId: string,\n id: string,\n request: ProviderUserConfirmRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/confirm\",\n request,\n true,\n false\n );\n }\n\n async postProviderUsersPublicKey(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/public-keys\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkPublicKeyResponse);\n }\n\n putProviderUser(\n providerId: string,\n id: string,\n request: ProviderUserUpdateRequest\n ): Promise {\n return this.send(\"PUT\", \"/providers/\" + providerId + \"/users/\" + id, request, true, false);\n }\n\n deleteProviderUser(providerId: string, id: string): Promise {\n return this.send(\"DELETE\", \"/providers/\" + providerId + \"/users/\" + id, null, true, false);\n }\n\n // Provider Organization APIs\n\n async getProviderClients(\n providerId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/providers/\" + providerId + \"/organizations\",\n null,\n true,\n true\n );\n return new ListResponse(r, ProviderOrganizationOrganizationDetailsResponse);\n }\n\n postProviderAddOrganization(\n providerId: string,\n request: ProviderAddOrganizationRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/organizations/add\",\n request,\n true,\n false\n );\n }\n\n async postProviderCreateOrganization(\n providerId: string,\n request: ProviderOrganizationCreateRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/organizations\",\n request,\n true,\n true\n );\n return new ProviderOrganizationResponse(r);\n }\n\n deleteProviderOrganization(providerId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/providers/\" + providerId + \"/organizations/\" + id,\n null,\n true,\n false\n );\n }\n\n // Event APIs\n\n async getEvents(start: string, end: string, token: string): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsCipher(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/ciphers/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganization(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/organizations/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganizationUser(\n organizationId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/events\",\n start,\n end,\n token\n ),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsProvider(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/providers/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsProviderUser(\n providerId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\n \"/providers/\" + providerId + \"/users/\" + id + \"/events\",\n start,\n end,\n token\n ),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async postEventsCollect(request: EventRequest[]): Promise {\n const authHeader = await this.getActiveBearerToken();\n const headers = new Headers({\n \"Device-Type\": this.deviceType,\n Authorization: \"Bearer \" + authHeader,\n \"Content-Type\": \"application/json; charset=utf-8\",\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n const response = await this.fetch(\n new Request(this.environmentService.getEventsUrl() + \"/collect\", {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n method: \"POST\",\n body: JSON.stringify(request),\n headers: headers,\n })\n );\n if (response.status !== 200) {\n return Promise.reject(\"Event post failed.\");\n }\n }\n\n // User APIs\n\n async getUserPublicKey(id: string): Promise {\n const r = await this.send(\"GET\", \"/users/\" + id + \"/public-key\", null, true, true);\n return new UserKeyResponse(r);\n }\n\n // HIBP APIs\n\n async getHibpBreach(username: string): Promise {\n const r = await this.send(\"GET\", \"/hibp/breach?username=\" + username, null, true, true);\n return r.map((a: any) => new BreachAccountResponse(a));\n }\n\n // Misc\n\n async postBitPayInvoice(request: BitPayInvoiceRequest): Promise {\n const r = await this.send(\"POST\", \"/bitpay-invoice\", request, true, true);\n return r as string;\n }\n\n async postSetupPayment(): Promise {\n const r = await this.send(\"POST\", \"/setup-payment\", null, true, true);\n return r as string;\n }\n\n // Key Connector\n\n async getUserKeyFromKeyConnector(keyConnectorUrl: string): Promise {\n const authHeader = await this.getActiveBearerToken();\n\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/user-keys\", {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Accept: \"application/json\",\n Authorization: \"Bearer \" + authHeader,\n }),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n\n return new KeyConnectorUserKeyResponse(await response.json());\n }\n\n async postUserKeyToKeyConnector(\n keyConnectorUrl: string,\n request: KeyConnectorUserKeyRequest\n ): Promise {\n const authHeader = await this.getActiveBearerToken();\n\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/user-keys\", {\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Accept: \"application/json\",\n Authorization: \"Bearer \" + authHeader,\n \"Content-Type\": \"application/json; charset=utf-8\",\n }),\n body: JSON.stringify(request),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n async getKeyConnectorAlive(keyConnectorUrl: string) {\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/alive\", {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Accept: \"application/json\",\n \"Content-Type\": \"application/json; charset=utf-8\",\n }),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n async getOrganizationExport(organizationId: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/export\",\n null,\n true,\n true\n );\n return new OrganizationExportResponse(r);\n }\n\n // Helpers\n\n async getActiveBearerToken(): Promise {\n let accessToken = await this.tokenService.getToken();\n if (await this.tokenService.tokenNeedsRefresh()) {\n await this.doAuthRefresh();\n accessToken = await this.tokenService.getToken();\n }\n return accessToken;\n }\n\n async fetch(request: Request): Promise {\n if (request.method === \"GET\") {\n request.headers.set(\"Cache-Control\", \"no-store\");\n request.headers.set(\"Pragma\", \"no-cache\");\n }\n request.headers.set(\"Bitwarden-Client-Name\", this.platformUtilsService.getClientType());\n request.headers.set(\n \"Bitwarden-Client-Version\",\n await this.platformUtilsService.getApplicationVersionNumber()\n );\n return this.nativeFetch(request);\n }\n\n nativeFetch(request: Request): Promise {\n return fetch(request);\n }\n\n async preValidateSso(identifier: string): Promise {\n if (identifier == null || identifier === \"\") {\n throw new Error(\"Organization Identifier was not provided.\");\n }\n const headers = new Headers({\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const path = `/account/prevalidate?domainHint=${encodeURIComponent(identifier)}`;\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + path, {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n headers: headers,\n method: \"GET\",\n })\n );\n\n if (response.status === 200) {\n const body = await response.json();\n return new SsoPreValidateResponse(body);\n } else {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n async postCreateSponsorship(\n sponsoredOrgId: string,\n request: OrganizationSponsorshipCreateRequest\n ): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/\" +\n (this.platformUtilsService.isSelfHost() ? \"self-hosted/\" : \"\") +\n sponsoredOrgId +\n \"/families-for-enterprise\",\n request,\n true,\n false\n );\n }\n\n async getSponsorshipSyncStatus(\n sponsoredOrgId: string\n ): Promise {\n const response = await this.send(\n \"GET\",\n \"/organization/sponsorship/\" + sponsoredOrgId + \"/sync-status\",\n null,\n true,\n true\n );\n return new OrganizationSponsorshipSyncStatusResponse(response);\n }\n\n async deleteRevokeSponsorship(sponsoringOrganizationId: string): Promise {\n return await this.send(\n \"DELETE\",\n \"/organization/sponsorship/\" +\n (this.platformUtilsService.isSelfHost() ? \"self-hosted/\" : \"\") +\n sponsoringOrganizationId,\n null,\n true,\n false\n );\n }\n\n async deleteRemoveSponsorship(sponsoringOrgId: string): Promise {\n return await this.send(\n \"DELETE\",\n \"/organization/sponsorship/sponsored/\" + sponsoringOrgId,\n null,\n true,\n false\n );\n }\n\n async postPreValidateSponsorshipToken(sponsorshipToken: string): Promise {\n const r = await this.send(\n \"POST\",\n \"/organization/sponsorship/validate-token?sponsorshipToken=\" +\n encodeURIComponent(sponsorshipToken),\n null,\n true,\n true\n );\n return r as boolean;\n }\n\n async postRedeemSponsorship(\n sponsorshipToken: string,\n request: OrganizationSponsorshipRedeemRequest\n ): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/redeem?sponsorshipToken=\" + encodeURIComponent(sponsorshipToken),\n request,\n true,\n false\n );\n }\n\n async postResendSponsorshipOffer(sponsoringOrgId: string): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/\" + sponsoringOrgId + \"/families-for-enterprise/resend\",\n null,\n true,\n false\n );\n }\n\n protected async doAuthRefresh(): Promise {\n const refreshToken = await this.tokenService.getRefreshToken();\n if (refreshToken != null && refreshToken !== \"\") {\n return this.doRefreshToken();\n }\n\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n if (!Utils.isNullOrWhitespace(clientId) && !Utils.isNullOrWhitespace(clientSecret)) {\n return this.doApiTokenRefresh();\n }\n\n throw new Error(\"Cannot refresh token, no refresh token or api keys are stored\");\n }\n\n protected async doRefreshToken(): Promise {\n const refreshToken = await this.tokenService.getRefreshToken();\n if (refreshToken == null || refreshToken === \"\") {\n throw new Error();\n }\n const headers = new Headers({\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const decodedToken = await this.tokenService.decodeToken();\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + \"/connect/token\", {\n body: this.qsStringify({\n grant_type: \"refresh_token\",\n client_id: decodedToken.client_id,\n refresh_token: refreshToken,\n }),\n cache: \"no-store\",\n credentials: this.getCredentials(),\n headers: headers,\n method: \"POST\",\n })\n );\n\n if (response.status === 200) {\n const responseJson = await response.json();\n const tokenResponse = new IdentityTokenResponse(responseJson);\n await this.tokenService.setTokens(\n tokenResponse.accessToken,\n tokenResponse.refreshToken,\n null\n );\n } else {\n const error = await this.handleError(response, true, true);\n return Promise.reject(error);\n }\n }\n\n protected async doApiTokenRefresh(): Promise {\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n\n const appId = await this.appIdService.getAppId();\n const deviceRequest = new DeviceRequest(appId, this.platformUtilsService);\n const tokenRequest = new UserApiTokenRequest(\n clientId,\n clientSecret,\n new TokenTwoFactorRequest(),\n deviceRequest\n );\n\n const response = await this.postIdentityToken(tokenRequest);\n if (!(response instanceof IdentityTokenResponse)) {\n throw new Error(\"Invalid response received when refreshing api token\");\n }\n\n await this.tokenService.setToken(response.accessToken);\n }\n\n async send(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n path: string,\n body: any,\n authed: boolean,\n hasResponse: boolean,\n apiUrl?: string,\n alterHeaders?: (headers: Headers) => void\n ): Promise {\n apiUrl = Utils.isNullOrWhitespace(apiUrl) ? this.environmentService.getApiUrl() : apiUrl;\n\n // Prevent directory traversal from malicious paths\n const pathParts = path.split(\"?\");\n const requestUrl =\n apiUrl + Utils.normalizePath(pathParts[0]) + (pathParts.length > 1 ? `?${pathParts[1]}` : \"\");\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 { SendFileUploadDataResponse } from \"../models/response/send-file-upload-data.response\";\nimport { AttachmentUploadDataResponse } from \"../vault/models/response/attachment-upload-data.response\";\n\nimport { AzureFileUploadService } from \"./azureFileUpload.service\";\nimport { BitwardenFileUploadService } from \"./bitwardenFileUpload.service\";\n\nexport class FileUploadService implements FileUploadServiceAbstraction {\n private azureFileUploadService: AzureFileUploadService;\n private bitwardenFileUploadService: BitwardenFileUploadService;\n\n constructor(private logService: LogService, private apiService: ApiService) {\n this.azureFileUploadService = new AzureFileUploadService(logService);\n this.bitwardenFileUploadService = new BitwardenFileUploadService();\n }\n\n async uploadSendFile(\n uploadData: SendFileUploadDataResponse,\n fileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) {\n try {\n switch (uploadData.fileUploadType) {\n case FileUploadType.Direct:\n await this.bitwardenFileUploadService.upload(\n fileName.encryptedString,\n encryptedFileData,\n (fd) =>\n this.apiService.postSendFile(\n uploadData.sendResponse.id,\n uploadData.sendResponse.file.id,\n fd\n )\n );\n break;\n case FileUploadType.Azure: {\n const renewalCallback = async () => {\n const renewalResponse = await this.apiService.renewSendFileUploadUrl(\n uploadData.sendResponse.id,\n uploadData.sendResponse.file.id\n );\n return renewalResponse.url;\n };\n await this.azureFileUploadService.upload(\n uploadData.url,\n encryptedFileData,\n renewalCallback\n );\n break;\n }\n default:\n throw new Error(\"Unknown file upload type\");\n }\n } catch (e) {\n await this.apiService.deleteSend(uploadData.sendResponse.id);\n throw e;\n }\n }\n\n async uploadCipherAttachment(\n admin: boolean,\n uploadData: AttachmentUploadDataResponse,\n encryptedFileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) {\n const response = admin ? uploadData.cipherMiniResponse : uploadData.cipherResponse;\n try {\n switch (uploadData.fileUploadType) {\n case FileUploadType.Direct:\n await this.bitwardenFileUploadService.upload(\n encryptedFileName.encryptedString,\n encryptedFileData,\n (fd) => this.apiService.postAttachmentFile(response.id, uploadData.attachmentId, fd)\n );\n break;\n case FileUploadType.Azure: {\n const renewalCallback = async () => {\n const renewalResponse = await this.apiService.renewAttachmentUploadUrl(\n response.id,\n uploadData.attachmentId\n );\n return renewalResponse.url;\n };\n await this.azureFileUploadService.upload(\n uploadData.url,\n encryptedFileData,\n renewalCallback\n );\n break;\n }\n default:\n throw new Error(\"Unknown file upload type.\");\n }\n } catch (e) {\n if (admin) {\n await this.apiService.deleteCipherAttachmentAdmin(response.id, uploadData.attachmentId);\n } else {\n await this.apiService.deleteCipherAttachment(response.id, uploadData.attachmentId);\n }\n throw e;\n }\n }\n}\n","import { BehaviorSubject, concatMap } from \"rxjs\";\n\nimport { SettingsService as SettingsServiceAbstraction } from \"../abstractions/settings.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { Utils } from \"../misc/utils\";\nimport { AccountSettingsSettings } from \"../models/domain/account\";\n\nexport class SettingsService implements SettingsServiceAbstraction {\n protected _settings: BehaviorSubject = new BehaviorSubject({});\n\n settings$ = this._settings.asObservable();\n\n constructor(private stateService: StateService) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n concatMap(async (unlocked) => {\n if (Utils.global.bitwardenContainerService == null) {\n return;\n }\n\n if (!unlocked) {\n this._settings.next({});\n return;\n }\n\n const data = await this.stateService.getSettings();\n\n this._settings.next(data);\n })\n )\n .subscribe();\n }\n\n async setEquivalentDomains(equivalentDomains: string[][]): Promise {\n const settings = this._settings.getValue() ?? {};\n\n settings.equivalentDomains = equivalentDomains;\n\n this._settings.next(settings);\n await this.stateService.setSettings(settings);\n }\n\n async clear(userId?: string): Promise {\n if (userId == null || userId == (await this.stateService.getUserId())) {\n this._settings.next({});\n }\n\n await this.stateService.setSettings(null, { userId: userId });\n }\n}\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { PolicyService } from \"../../abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from \"../../abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { PolicyType } from \"../../enums/policyType\";\n\nexport class VaultTimeoutSettingsService implements VaultTimeoutSettingsServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private tokenService: TokenService,\n private policyService: PolicyService,\n private stateService: StateService\n ) {}\n\n async setVaultTimeoutOptions(timeout: number, action: string): Promise {\n await this.stateService.setVaultTimeout(timeout);\n\n // We swap these tokens from being on disk for lock actions, and in memory for logout actions\n // Get them here to set them to their new location after changing the timeout action and clearing if needed\n const token = await this.tokenService.getToken();\n const refreshToken = await this.tokenService.getRefreshToken();\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n\n const currentAction = await this.stateService.getVaultTimeoutAction();\n if ((timeout != null || timeout === 0) && action === \"logOut\" && action !== currentAction) {\n // if we have a vault timeout and the action is log out, reset tokens\n await this.tokenService.clearToken();\n }\n\n await this.stateService.setVaultTimeoutAction(action);\n\n await this.tokenService.setToken(token);\n await this.tokenService.setRefreshToken(refreshToken);\n await this.tokenService.setClientId(clientId);\n await this.tokenService.setClientSecret(clientSecret);\n\n await this.cryptoService.toggleKey();\n }\n\n async isPinLockSet(): Promise<[boolean, boolean]> {\n const protectedPin = await this.stateService.getProtectedPin();\n const pinProtectedKey = await this.stateService.getEncryptedPinProtected();\n return [protectedPin != null, pinProtectedKey != null];\n }\n\n async isBiometricLockSet(): Promise {\n return await this.stateService.getBiometricUnlock();\n }\n\n async getVaultTimeout(userId?: string): Promise {\n const vaultTimeout = await this.stateService.getVaultTimeout({ userId: userId });\n\n if (\n await this.policyService.policyAppliesToUser(PolicyType.MaximumVaultTimeout, null, userId)\n ) {\n const policy = await this.policyService.getAll(PolicyType.MaximumVaultTimeout, userId);\n // Remove negative values, and ensure it's smaller than maximum allowed value according to policy\n let timeout = Math.min(vaultTimeout, policy[0].data.minutes);\n\n if (vaultTimeout == null || timeout < 0) {\n timeout = policy[0].data.minutes;\n }\n\n // We really shouldn't need to set the value here, but multiple services relies on this value being correct.\n if (vaultTimeout !== timeout) {\n await this.stateService.setVaultTimeout(timeout, { userId: userId });\n }\n\n return timeout;\n }\n\n return vaultTimeout;\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setEverBeenUnlocked(false, { userId: userId });\n await this.stateService.setDecryptedPinProtected(null, { userId: userId });\n await this.stateService.setProtectedPin(null, { userId: userId });\n }\n}\n","import { firstValueFrom } from \"rxjs\";\n\nimport { AuthService } from \"../../abstractions/auth.service\";\nimport { CollectionService } from \"../../abstractions/collection.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\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\";\nimport { CipherService } from \"../../vault/abstractions/cipher.service\";\nimport { FolderService } from \"../../vault/abstractions/folder/folder.service.abstraction\";\n\nexport class VaultTimeoutService implements VaultTimeoutServiceAbstraction {\n private inited = false;\n\n constructor(\n private cipherService: CipherService,\n private folderService: FolderService,\n private collectionService: CollectionService,\n private cryptoService: CryptoService,\n protected platformUtilsService: PlatformUtilsService,\n private messagingService: MessagingService,\n private searchService: SearchService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private authService: AuthService,\n private vaultTimeoutSettingsService: VaultTimeoutSettingsService,\n private lockedCallback: (userId?: string) => Promise = null,\n private loggedOutCallback: (expired: boolean, userId?: string) => Promise = null\n ) {}\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.startCheck();\n }\n }\n\n startCheck() {\n this.checkVaultTimeout();\n setInterval(() => this.checkVaultTimeout(), 10 * 1000); // check every 10 seconds\n }\n\n async checkVaultTimeout(): Promise {\n if (await this.platformUtilsService.isViewOpen()) {\n return;\n }\n\n const accounts = await firstValueFrom(this.stateService.accounts$);\n for (const userId in accounts) {\n if (userId != null && (await this.shouldLock(userId))) {\n await this.executeTimeoutAction(userId);\n }\n }\n }\n\n async lock(userId?: string): Promise {\n const authed = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!authed) {\n return;\n }\n\n if (await this.keyConnectorService.getUsesKeyConnector()) {\n const pinSet = await this.vaultTimeoutSettingsService.isPinLockSet();\n const pinLock =\n (pinSet[0] && (await this.stateService.getDecryptedPinProtected()) != null) || pinSet[1];\n\n if (!pinLock && !(await this.vaultTimeoutSettingsService.isBiometricLockSet())) {\n await this.logOut(userId);\n }\n }\n\n if (userId == null || userId === (await this.stateService.getUserId())) {\n this.searchService.clearIndex();\n await this.folderService.clearCache();\n }\n\n await this.stateService.setEverBeenUnlocked(true, { userId: userId });\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n\n await this.cryptoService.clearKey(false, userId);\n await this.cryptoService.clearOrgKeys(true, userId);\n await this.cryptoService.clearKeyPair(true, userId);\n await this.cryptoService.clearEncKey(true, userId);\n\n await this.cipherService.clearCache(userId);\n await this.collectionService.clearCache(userId);\n\n this.messagingService.send(\"locked\", { userId: userId });\n\n if (this.lockedCallback != null) {\n await this.lockedCallback(userId);\n }\n }\n\n async logOut(userId?: string): Promise {\n if (this.loggedOutCallback != null) {\n await this.loggedOutCallback(false, userId);\n }\n }\n\n private async shouldLock(userId: string): Promise {\n const authStatus = await this.authService.getAuthStatus(userId);\n if (\n authStatus === AuthenticationStatus.Locked ||\n authStatus === AuthenticationStatus.LoggedOut\n ) {\n return false;\n }\n\n const vaultTimeout = await this.vaultTimeoutSettingsService.getVaultTimeout(userId);\n if (vaultTimeout == null || vaultTimeout < 0) {\n return false;\n }\n\n const lastActive = await this.stateService.getLastActive({ userId: userId });\n if (lastActive == null) {\n return false;\n }\n\n const vaultTimeoutSeconds = vaultTimeout * 60;\n const diffSeconds = (new Date().getTime() - lastActive) / 1000;\n return diffSeconds >= vaultTimeoutSeconds;\n }\n\n private async executeTimeoutAction(userId: string): Promise {\n const timeoutAction = await this.stateService.getVaultTimeoutAction({ userId: userId });\n timeoutAction === \"logOut\" ? await this.logOut(userId) : await this.lock(userId);\n }\n}\n","import * as papa from \"papaparse\";\n\nimport { ApiService } from \"../abstractions/api.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport {\n ExportFormat,\n ExportService as ExportServiceAbstraction,\n} from \"../abstractions/export.service\";\nimport { DEFAULT_PBKDF2_ITERATIONS, KdfType } from \"../enums/kdfType\";\nimport { Utils } from \"../misc/utils\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { Collection } from \"../models/domain/collection\";\nimport { KdfConfig } from \"../models/domain/kdf-config\";\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 { CollectionView } from \"../models/view/collection.view\";\nimport { EventView } from \"../models/view/event.view\";\nimport { CipherService } from \"../vault/abstractions/cipher.service\";\nimport { FolderService } from \"../vault/abstractions/folder/folder.service.abstraction\";\nimport { CipherType } from \"../vault/enums/cipher-type\";\nimport { CipherData } from \"../vault/models/data/cipher.data\";\nimport { Cipher } from \"../vault/models/domain/cipher\";\nimport { Folder } from \"../vault/models/domain/folder\";\nimport { CipherView } from \"../vault/models/view/cipher.view\";\nimport { FolderView } from \"../vault/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 kdfConfig = new KdfConfig(DEFAULT_PBKDF2_ITERATIONS);\n const key = await this.cryptoService.makePinKey(\n password,\n salt,\n KdfType.PBKDF2_SHA256,\n kdfConfig\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: kdfConfig.iterations,\n kdfType: KdfType.PBKDF2_SHA256,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n data: encText.encryptedString,\n };\n\n return JSON.stringify(jsonDoc, null, \" \");\n }\n\n async getOrganizationExport(\n organizationId: string,\n format: ExportFormat = \"csv\"\n ): Promise {\n if (format === \"encrypted_json\") {\n return this.getOrganizationEncryptedExport(organizationId);\n } else {\n return this.getOrganizationDecryptedExport(organizationId, format);\n }\n }\n\n async getEventExport(events: EventView[]): Promise {\n return papa.unparse(events.map((e) => new EventExport(e)));\n }\n\n getFileName(prefix: string = null, extension = \"csv\"): string {\n const now = new Date();\n const dateString =\n now.getFullYear() +\n \"\" +\n this.padNumber(now.getMonth() + 1, 2) +\n \"\" +\n this.padNumber(now.getDate(), 2) +\n this.padNumber(now.getHours(), 2) +\n \"\" +\n this.padNumber(now.getMinutes(), 2) +\n this.padNumber(now.getSeconds(), 2);\n\n return \"bitwarden\" + (prefix ? \"_\" + prefix : \"\") + \"_export_\" + dateString + \".\" + extension;\n }\n\n private async getDecryptedExport(format: \"json\" | \"csv\"): Promise {\n let decFolders: FolderView[] = [];\n let decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(\n this.folderService.getAllDecryptedFromState().then((folders) => {\n decFolders = folders;\n })\n );\n\n promises.push(\n this.cipherService.getAllDecrypted().then((ciphers) => {\n decCiphers = ciphers.filter((f) => f.deletedDate == null);\n })\n );\n\n await Promise.all(promises);\n\n if (format === \"csv\") {\n const foldersMap = new Map();\n decFolders.forEach((f) => {\n if (f.id != null) {\n foldersMap.set(f.id, f);\n }\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach((c) => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n if (c.organizationId != null) {\n return;\n }\n\n const cipher: any = {};\n cipher.folder =\n c.folderId != null && foldersMap.has(c.folderId) ? foldersMap.get(c.folderId).name : null;\n cipher.favorite = c.favorite ? 1 : null;\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n encrypted: false,\n folders: [],\n items: [],\n };\n\n decFolders.forEach((f) => {\n if (f.id == null) {\n return;\n }\n const folder = new FolderExport();\n folder.build(f);\n jsonDoc.folders.push(folder);\n });\n\n decCiphers.forEach((c) => {\n if (c.organizationId != null) {\n return;\n }\n const cipher = new CipherExport();\n cipher.build(c);\n cipher.collectionIds = null;\n jsonDoc.items.push(cipher);\n });\n\n return JSON.stringify(jsonDoc, null, \" \");\n }\n }\n\n private async getEncryptedExport(): Promise {\n let folders: Folder[] = [];\n let ciphers: Cipher[] = [];\n const promises = [];\n\n promises.push(\n this.folderService.getAllFromState().then((f) => {\n folders = f;\n })\n );\n\n promises.push(\n this.cipherService.getAll().then((c) => {\n ciphers = c.filter((f) => f.deletedDate == null);\n })\n );\n\n await Promise.all(promises);\n\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid());\n\n const jsonDoc: any = {\n encrypted: true,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n folders: [],\n items: [],\n };\n\n folders.forEach((f) => {\n if (f.id == null) {\n return;\n }\n const folder = new FolderExport();\n folder.build(f);\n jsonDoc.folders.push(folder);\n });\n\n ciphers.forEach((c) => {\n if (c.organizationId != null) {\n return;\n }\n const cipher = new CipherExport();\n cipher.build(c);\n cipher.collectionIds = null;\n jsonDoc.items.push(cipher);\n });\n\n return JSON.stringify(jsonDoc, null, \" \");\n }\n\n private async getOrganizationDecryptedExport(\n organizationId: string,\n format: \"json\" | \"csv\"\n ): Promise {\n const decCollections: CollectionView[] = [];\n const decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(\n this.apiService.getOrganizationExport(organizationId).then((exportData) => {\n const exportPromises: any = [];\n if (exportData != null) {\n if (exportData.collections != null && exportData.collections.length > 0) {\n exportData.collections.forEach((c) => {\n const collection = new Collection(new CollectionData(c as CollectionDetailsResponse));\n exportPromises.push(\n collection.decrypt().then((decCol) => {\n decCollections.push(decCol);\n })\n );\n });\n }\n if (exportData.ciphers != null && exportData.ciphers.length > 0) {\n exportData.ciphers\n .filter((c) => c.deletedDate === null)\n .forEach((c) => {\n const cipher = new Cipher(new CipherData(c));\n exportPromises.push(\n cipher.decrypt().then((decCipher) => {\n decCiphers.push(decCipher);\n })\n );\n });\n }\n }\n return Promise.all(exportPromises);\n })\n );\n\n await Promise.all(promises);\n\n if (format === \"csv\") {\n const collectionsMap = new Map();\n decCollections.forEach((c) => {\n collectionsMap.set(c.id, c);\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach((c) => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n\n const cipher: any = {};\n cipher.collections = [];\n if (c.collectionIds != null) {\n cipher.collections = c.collectionIds\n .filter((id) => collectionsMap.has(id))\n .map((id) => collectionsMap.get(id).name);\n }\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n encrypted: false,\n collections: [],\n items: [],\n };\n\n decCollections.forEach((c) => {\n const collection = new CollectionExport();\n collection.build(c);\n jsonDoc.collections.push(collection);\n });\n\n decCiphers.forEach((c) => {\n const cipher = new CipherExport();\n cipher.build(c);\n jsonDoc.items.push(cipher);\n });\n return JSON.stringify(jsonDoc, null, \" \");\n }\n }\n\n private async getOrganizationEncryptedExport(organizationId: string): Promise {\n const collections: Collection[] = [];\n const ciphers: Cipher[] = [];\n const promises = [];\n\n promises.push(\n this.apiService.getCollections(organizationId).then((c) => {\n const collectionPromises: any = [];\n if (c != null && c.data != null && c.data.length > 0) {\n c.data.forEach((r) => {\n const collection = new Collection(new CollectionData(r as CollectionDetailsResponse));\n collections.push(collection);\n });\n }\n return Promise.all(collectionPromises);\n })\n );\n\n promises.push(\n this.apiService.getCiphersOrganization(organizationId).then((c) => {\n const cipherPromises: any = [];\n if (c != null && c.data != null && c.data.length > 0) {\n c.data\n .filter((item) => item.deletedDate === null)\n .forEach((item) => {\n const cipher = new Cipher(new CipherData(item));\n ciphers.push(cipher);\n });\n }\n return Promise.all(cipherPromises);\n })\n );\n\n await Promise.all(promises);\n\n const orgKey = await this.cryptoService.getOrgKey(organizationId);\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid(), orgKey);\n\n const jsonDoc: any = {\n encrypted: true,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n collections: [],\n items: [],\n };\n\n collections.forEach((c) => {\n const collection = new CollectionExport();\n collection.build(c);\n jsonDoc.collections.push(collection);\n });\n\n ciphers.forEach((c) => {\n const cipher = new CipherExport();\n cipher.build(c);\n jsonDoc.items.push(cipher);\n });\n return JSON.stringify(jsonDoc, null, \" \");\n }\n\n private padNumber(num: number, width: number, padCharacter = \"0\"): string {\n const numString = num.toString();\n return numString.length >= width\n ? numString\n : new Array(width - numString.length + 1).join(padCharacter) + numString;\n }\n\n private buildCommonCipher(cipher: any, c: CipherView) {\n cipher.type = null;\n cipher.name = c.name;\n cipher.notes = c.notes;\n cipher.fields = null;\n cipher.reprompt = c.reprompt;\n // Login props\n cipher.login_uri = null;\n cipher.login_username = null;\n cipher.login_password = null;\n cipher.login_totp = null;\n\n if (c.fields) {\n c.fields.forEach((f: any) => {\n if (!cipher.fields) {\n cipher.fields = \"\";\n } else {\n cipher.fields += \"\\n\";\n }\n\n cipher.fields += (f.name || \"\") + \": \" + f.value;\n });\n }\n\n switch (c.type) {\n case CipherType.Login:\n cipher.type = \"login\";\n cipher.login_username = c.login.username;\n cipher.login_password = c.login.password;\n cipher.login_totp = c.login.totp;\n\n if (c.login.uris) {\n cipher.login_uri = [];\n c.login.uris.forEach((u) => {\n cipher.login_uri.push(u.uri);\n });\n }\n break;\n case CipherType.SecureNote:\n cipher.type = \"note\";\n break;\n default:\n return;\n }\n\n return cipher;\n }\n}\n","import * as signalR from \"@microsoft/signalr\";\nimport * as signalRMsgPack from \"@microsoft/signalr-protocol-msgpack\";\n\nimport { ApiService } from \"../abstractions/api.service\";\nimport { AppIdService } from \"../abstractions/appId.service\";\nimport { AuthService } from \"../abstractions/auth.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { MessagingService } from \"../abstractions/messaging.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"../abstractions/notifications.service\";\nimport { StateService } from \"../abstractions/state.service\";\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\";\nimport { SyncService } from \"../vault/abstractions/sync/sync.service.abstraction\";\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 private messagingService: MessagingService\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 case NotificationType.AuthRequest:\n if (await this.stateService.getApproveLoginRequests()) {\n this.messagingService.send(\"openLoginApproval\", {\n notificationId: notification.payload.id,\n });\n }\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 argon2 from \"argon2-browser\";\nimport * 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 private wasmSupported: boolean;\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 this.wasmSupported = this.checkIfWasmSupported();\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 argon2(\n password: string | ArrayBuffer,\n salt: string | ArrayBuffer,\n iterations: number,\n memory: number,\n parallelism: number\n ): Promise {\n if (!this.wasmSupported) {\n throw \"Webassembly support is required for the Argon2 KDF feature.\";\n }\n\n const passwordArr = new Uint8Array(this.toBuf(password));\n const saltArr = new Uint8Array(this.toBuf(salt));\n\n const result = await argon2.hash({\n pass: passwordArr,\n salt: saltArr,\n time: iterations,\n mem: memory,\n parallelism: parallelism,\n hashLen: 32,\n type: argon2.ArgonType.Argon2id,\n });\n return result.hash;\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 // ref: https://stackoverflow.com/a/47880734/1090359\n private checkIfWasmSupported(): boolean {\n try {\n if (typeof WebAssembly === \"object\" && typeof WebAssembly.instantiate === \"function\") {\n const module = new WebAssembly.Module(\n Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00)\n );\n if (module instanceof WebAssembly.Module) {\n return new WebAssembly.Instance(module) instanceof WebAssembly.Instance;\n }\n }\n } catch {\n return false;\n }\n return false;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { EventUploadService as EventUploadServiceAbstraction } from \"../../abstractions/event/event-upload.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { EventRequest } from \"../../models/request/event.request\";\n\nexport class EventUploadService implements EventUploadServiceAbstraction {\n private inited = false;\n constructor(\n private apiService: ApiService,\n private stateService: StateService,\n private logService: LogService\n ) {}\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.uploadEvents();\n setInterval(() => this.uploadEvents(), 60 * 1000); // check every 60 seconds\n }\n }\n\n async uploadEvents(userId?: string): Promise {\n const authed = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!authed) {\n return;\n }\n const eventCollection = await this.stateService.getEventCollection({ userId: userId });\n if (eventCollection == null || eventCollection.length === 0) {\n return;\n }\n const request = eventCollection.map((e) => {\n const req = new EventRequest();\n req.type = e.type;\n req.cipherId = e.cipherId;\n req.date = e.date;\n req.organizationId = e.organizationId;\n return req;\n });\n try {\n await this.apiService.postEventsCollect(request);\n this.clearEvents(userId);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private async clearEvents(userId?: string): Promise {\n await this.stateService.setEventCollection(null, { userId: userId });\n }\n}\n","import { EventCollectionService as EventCollectionServiceAbstraction } from \"../../abstractions/event/event-collection.service\";\nimport { EventUploadService } from \"../../abstractions/event/event-upload.service\";\nimport { OrganizationService } from \"../../abstractions/organization/organization.service.abstraction\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { EventType } from \"../../enums/eventType\";\nimport { EventData } from \"../../models/data/event.data\";\nimport { CipherService } from \"../../vault/abstractions/cipher.service\";\n\nexport class EventCollectionService implements EventCollectionServiceAbstraction {\n constructor(\n private cipherService: CipherService,\n private stateService: StateService,\n private organizationService: OrganizationService,\n private eventUploadService: EventUploadService\n ) {}\n\n async collect(\n eventType: EventType,\n cipherId: string = null,\n uploadImmediately = false,\n organizationId: string = null\n ): Promise {\n const authed = await this.stateService.getIsAuthenticated();\n if (!authed) {\n return;\n }\n const organizations = await this.organizationService.getAll();\n if (organizations == null) {\n return;\n }\n const orgIds = new Set(organizations.filter((o) => o.useEvents).map((o) => o.id));\n if (orgIds.size === 0) {\n return;\n }\n if (cipherId != null) {\n const cipher = await this.cipherService.get(cipherId);\n if (cipher == null || cipher.organizationId == null || !orgIds.has(cipher.organizationId)) {\n return;\n }\n }\n if (organizationId != null) {\n if (!orgIds.has(organizationId)) {\n return;\n }\n }\n let eventCollection = await this.stateService.getEventCollection();\n if (eventCollection == null) {\n eventCollection = [];\n }\n const event = new EventData();\n event.type = eventType;\n event.cipherId = cipherId;\n event.date = new Date().toISOString();\n event.organizationId = organizationId;\n eventCollection.push(event);\n await this.stateService.setEventCollection(eventCollection);\n if (uploadImmediately) {\n await this.eventUploadService.uploadEvents();\n }\n }\n}\n","import { of, concatMap, BehaviorSubject, Observable, map } from \"rxjs\";\n\nimport { OrganizationService } from \"../../abstractions/organization/organization.service.abstraction\";\nimport { InternalPolicyService as InternalPolicyServiceAbstraction } from \"../../abstractions/policy/policy.service.abstraction\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PolicyType } from \"../../enums/policyType\";\nimport { Utils } from \"../../misc/utils\";\nimport { PolicyData } from \"../../models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/master-password-policy-options\";\nimport { Organization } from \"../../models/domain/organization\";\nimport { Policy } from \"../../models/domain/policy\";\nimport { ResetPasswordPolicyOptions } from \"../../models/domain/reset-password-policy-options\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\n\nexport class PolicyService implements InternalPolicyServiceAbstraction {\n protected _policies: BehaviorSubject = new BehaviorSubject([]);\n\n policies$ = this._policies.asObservable();\n\n constructor(\n private stateService: StateService,\n private organizationService: OrganizationService\n ) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n concatMap(async (unlocked) => {\n if (Utils.global.bitwardenContainerService == null) {\n return;\n }\n\n if (!unlocked) {\n this._policies.next([]);\n return;\n }\n\n const data = await this.stateService.getEncryptedPolicies();\n\n await this.updateObservables(data);\n })\n )\n .subscribe();\n }\n\n /**\n * @deprecated Do not call this, use the policies$ observable collection\n */\n async getAll(type?: PolicyType, userId?: string): Promise {\n let response: Policy[] = [];\n const decryptedPolicies = await this.stateService.getDecryptedPolicies({ userId: userId });\n if (decryptedPolicies != null) {\n response = decryptedPolicies;\n } else {\n const diskPolicies = await this.stateService.getEncryptedPolicies({ userId: userId });\n for (const id in diskPolicies) {\n if (Object.prototype.hasOwnProperty.call(diskPolicies, id)) {\n response.push(new Policy(diskPolicies[id]));\n }\n }\n await this.stateService.setDecryptedPolicies(response, { userId: userId });\n }\n if (type != null) {\n return response.filter((policy) => policy.type === type);\n } else {\n return response;\n }\n }\n\n masterPasswordPolicyOptions$(policies?: Policy[]): Observable {\n const observable = policies ? of(policies) : this.policies$;\n return observable.pipe(\n map((obsPolicies) => {\n let enforcedOptions: MasterPasswordPolicyOptions = null;\n const filteredPolicies = obsPolicies.filter((p) => p.type === PolicyType.MasterPassword);\n\n if (filteredPolicies == null || filteredPolicies.length === 0) {\n return enforcedOptions;\n }\n\n filteredPolicies.forEach((currentPolicy) => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new MasterPasswordPolicyOptions();\n }\n\n if (\n currentPolicy.data.minComplexity != null &&\n currentPolicy.data.minComplexity > enforcedOptions.minComplexity\n ) {\n enforcedOptions.minComplexity = currentPolicy.data.minComplexity;\n }\n\n if (\n currentPolicy.data.minLength != null &&\n currentPolicy.data.minLength > enforcedOptions.minLength\n ) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.requireUpper) {\n enforcedOptions.requireUpper = true;\n }\n\n if (currentPolicy.data.requireLower) {\n enforcedOptions.requireLower = true;\n }\n\n if (currentPolicy.data.requireNumbers) {\n enforcedOptions.requireNumbers = true;\n }\n\n if (currentPolicy.data.requireSpecial) {\n enforcedOptions.requireSpecial = true;\n }\n });\n\n return enforcedOptions;\n })\n );\n }\n\n policyAppliesToActiveUser$(policyType: PolicyType, policyFilter?: (policy: Policy) => boolean) {\n return this.policies$.pipe(\n concatMap(async (policies) => {\n const userId = await this.stateService.getUserId();\n return await this.checkPoliciesThatApplyToUser(policies, policyType, policyFilter, userId);\n })\n );\n }\n\n evaluateMasterPassword(\n passwordStrength: number,\n newPassword: string,\n enforcedPolicyOptions: MasterPasswordPolicyOptions\n ): boolean {\n if (enforcedPolicyOptions == null) {\n return true;\n }\n\n if (\n enforcedPolicyOptions.minComplexity > 0 &&\n enforcedPolicyOptions.minComplexity > passwordStrength\n ) {\n return false;\n }\n\n if (\n enforcedPolicyOptions.minLength > 0 &&\n enforcedPolicyOptions.minLength > newPassword.length\n ) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireUpper && newPassword.toLocaleLowerCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireLower && newPassword.toLocaleUpperCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireNumbers && !/[0-9]/.test(newPassword)) {\n return false;\n }\n\n // eslint-disable-next-line\n if (enforcedPolicyOptions.requireSpecial && !/[!@#$%\\^&*]/g.test(newPassword)) {\n return false;\n }\n\n return true;\n }\n\n getResetPasswordPolicyOptions(\n policies: Policy[],\n orgId: string\n ): [ResetPasswordPolicyOptions, boolean] {\n const resetPasswordPolicyOptions = new ResetPasswordPolicyOptions();\n\n if (policies == null || orgId == null) {\n return [resetPasswordPolicyOptions, false];\n }\n\n const policy = policies.find(\n (p) => p.organizationId === orgId && p.type === PolicyType.ResetPassword && p.enabled\n );\n resetPasswordPolicyOptions.autoEnrollEnabled = policy?.data?.autoEnrollEnabled ?? false;\n\n return [resetPasswordPolicyOptions, policy?.enabled ?? false];\n }\n\n mapPoliciesFromToken(policiesResponse: ListResponse): Policy[] {\n if (policiesResponse == null || policiesResponse.data == null) {\n return null;\n }\n\n const policiesData = policiesResponse.data.map((p) => new PolicyData(p));\n return policiesData.map((p) => new Policy(p));\n }\n\n async policyAppliesToUser(\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean,\n userId?: string\n ) {\n const policies = await this.getAll(policyType, userId);\n\n return this.checkPoliciesThatApplyToUser(policies, policyType, policyFilter, userId);\n }\n\n async upsert(policy: PolicyData): Promise {\n let policies = await this.stateService.getEncryptedPolicies();\n if (policies == null) {\n policies = {};\n }\n\n policies[policy.id] = policy;\n\n await this.updateObservables(policies);\n await this.stateService.setDecryptedPolicies(null);\n await this.stateService.setEncryptedPolicies(policies);\n }\n\n async replace(policies: { [id: string]: PolicyData }): Promise {\n await this.updateObservables(policies);\n await this.stateService.setDecryptedPolicies(null);\n await this.stateService.setEncryptedPolicies(policies);\n }\n\n async clear(userId?: string): Promise {\n if (userId == null || userId == (await this.stateService.getUserId())) {\n this._policies.next([]);\n }\n await this.stateService.setDecryptedPolicies(null, { userId: userId });\n await this.stateService.setEncryptedPolicies(null, { userId: userId });\n }\n\n private isExcemptFromPolicies(organization: Organization, policyType: PolicyType) {\n if (policyType === PolicyType.MaximumVaultTimeout) {\n return organization.type === OrganizationUserType.Owner;\n }\n\n return organization.isExemptFromPolicies;\n }\n\n private async updateObservables(policiesMap: { [id: string]: PolicyData }) {\n const policies = Object.values(policiesMap || {}).map((f) => new Policy(f));\n\n this._policies.next(policies);\n }\n\n private async checkPoliciesThatApplyToUser(\n policies: Policy[],\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean,\n userId?: string\n ) {\n const organizations = await this.organizationService.getAll(userId);\n const filteredPolicies = policies.filter(\n (p) => p.type === policyType && p.enabled && (policyFilter == null || policyFilter(p))\n );\n const policySet = new Set(filteredPolicies.map((p) => p.organizationId));\n\n return organizations.some(\n (o) =>\n o.status >= OrganizationUserStatusType.Accepted &&\n o.usePolicies &&\n policySet.has(o.id) &&\n !this.isExcemptFromPolicies(o, policyType)\n );\n }\n}\n","import { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"../../abstractions/api.service\";\nimport { 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 { Utils } from \"../../misc/utils\";\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 ) {}\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 Utils.encodeRFC3986URIComponent(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 { KdfConfig } from \"../models/domain/kdf-config\";\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, kdfMemory, kdfParallelism, keyConnectorUrl } = tokenResponse;\n const password = await this.cryptoFunctionService.randomBytes(64);\n const kdfConfig = new KdfConfig(kdfIterations, kdfMemory, kdfParallelism);\n\n const k = await this.cryptoService.makeKey(\n Utils.fromBufferToB64(password),\n await this.tokenService.getEmail(),\n kdf,\n kdfConfig\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 kdfConfig,\n orgId,\n keys\n );\n await this.apiService.postSetKeyConnectorKey(setPasswordRequest);\n }\n\n async setConvertAccountRequired(status: boolean) {\n await this.stateService.setConvertAccountToKeyConnector(status);\n }\n\n async getConvertAccountRequired(): Promise {\n return await this.stateService.getConvertAccountToKeyConnector();\n }\n\n async removeConvertAccountRequired() {\n await this.stateService.setConvertAccountToKeyConnector(null);\n }\n\n async clear() {\n await this.removeConvertAccountRequired();\n }\n\n private handleKeyConnectorError(e: any) {\n this.logService.error(e);\n if (this.logoutCallback != null) {\n this.logoutCallback(false);\n }\n throw new Error(\"Key Connector error\");\n }\n}\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { I18nService } from \"../../abstractions/i18n.service\";\nimport { UserVerificationApiServiceAbstraction } from \"../../abstractions/userVerification/userVerification-api.service.abstraction\";\nimport { UserVerificationService as UserVerificationServiceAbstraction } from \"../../abstractions/userVerification/userVerification.service.abstraction\";\nimport { VerificationType } from \"../../enums/verificationType\";\nimport { VerifyOTPRequest } from \"../../models/request/account/verify-otp.request\";\nimport { SecretVerificationRequest } from \"../../models/request/secret-verification.request\";\nimport { Verification } from \"../../types/verification\";\n\n/**\n * Used for general-purpose user verification throughout the app.\n * Use it to verify the input collected by UserVerificationComponent.\n */\nexport class UserVerificationService implements UserVerificationServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private userVerificationApiService: UserVerificationApiServiceAbstraction\n ) {}\n\n /**\n * Create a new request model to be used for server-side verification\n * @param verification User-supplied verification data (Master Password or OTP)\n * @param requestClass The request model to create\n * @param alreadyHashed Whether the master password is already hashed\n */\n async buildRequest(\n verification: Verification,\n requestClass?: new () => T,\n alreadyHashed?: boolean\n ) {\n this.validateInput(verification);\n\n const request =\n requestClass != null ? new requestClass() : (new SecretVerificationRequest() as T);\n\n if (verification.type === VerificationType.OTP) {\n request.otp = verification.secret;\n } else {\n request.masterPasswordHash = alreadyHashed\n ? verification.secret\n : await this.cryptoService.hashPassword(verification.secret, null);\n }\n\n return request;\n }\n\n /**\n * Used to verify the Master Password client-side, or send the OTP to the server for verification (with no other data)\n * Generally used for client-side verification only.\n * @param verification User-supplied verification data (Master Password or OTP)\n */\n async verifyUser(verification: Verification): Promise {\n this.validateInput(verification);\n\n if (verification.type === VerificationType.OTP) {\n const request = new VerifyOTPRequest(verification.secret);\n try {\n await this.userVerificationApiService.postAccountVerifyOTP(request);\n } catch (e) {\n throw new Error(this.i18nService.t(\"invalidVerificationCode\"));\n }\n } else {\n const passwordValid = await this.cryptoService.compareAndUpdateKeyHash(\n verification.secret,\n null\n );\n if (!passwordValid) {\n throw new Error(this.i18nService.t(\"invalidMasterPassword\"));\n }\n }\n return true;\n }\n\n async requestOTP() {\n await this.userVerificationApiService.postAccountRequestOTP();\n }\n\n private validateInput(verification: Verification) {\n if (verification?.secret == null || verification.secret === \"\") {\n if (verification.type === VerificationType.OTP) {\n throw new Error(this.i18nService.t(\"verificationCodeRequired\"));\n } else {\n throw new Error(this.i18nService.t(\"masterPasswordRequired\"));\n }\n }\n }\n}\n","import { BehaviorSubject, concatMap } from \"rxjs\";\n\nimport { InternalOrganizationService as InternalOrganizationServiceAbstraction } from \"../../abstractions/organization/organization.service.abstraction\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { OrganizationData } from \"../../models/data/organization.data\";\nimport { Organization } from \"../../models/domain/organization\";\n\nexport class OrganizationService implements InternalOrganizationServiceAbstraction {\n protected _organizations = new BehaviorSubject([]);\n\n organizations$ = this._organizations.asObservable();\n\n constructor(private stateService: StateService) {\n this.stateService.activeAccountUnlocked$\n .pipe(\n concatMap(async (unlocked) => {\n if (!unlocked) {\n this._organizations.next([]);\n return;\n }\n\n const data = await this.stateService.getOrganizations();\n this.updateObservables(data);\n })\n )\n .subscribe();\n }\n\n async getAll(userId?: string): Promise {\n const organizationsMap = await this.stateService.getOrganizations({ userId: userId });\n return Object.values(organizationsMap || {}).map((o) => new Organization(o));\n }\n\n async canManageSponsorships(): Promise {\n const organizations = this._organizations.getValue();\n return organizations.some(\n (o) => o.familySponsorshipAvailable || o.familySponsorshipFriendlyName !== null\n );\n }\n\n hasOrganizations(): boolean {\n const organizations = this._organizations.getValue();\n return organizations.length > 0;\n }\n\n async upsert(organization: OrganizationData): Promise {\n let organizations = await this.stateService.getOrganizations();\n if (organizations == null) {\n organizations = {};\n }\n\n organizations[organization.id] = organization;\n\n await this.replace(organizations);\n }\n\n async delete(id: string): Promise {\n const organizations = await this.stateService.getOrganizations();\n if (organizations == null) {\n return;\n }\n\n if (organizations[id] == null) {\n return;\n }\n\n delete organizations[id];\n await this.replace(organizations);\n }\n\n get(id: string): Organization {\n const organizations = this._organizations.getValue();\n\n return organizations.find((organization) => organization.id === id);\n }\n\n /**\n * @deprecated For the CLI only\n * @param id id of the organization\n */\n async getFromState(id: string): Promise {\n const organizationsMap = await this.stateService.getOrganizations();\n const organization = organizationsMap[id];\n if (organization == null) {\n return null;\n }\n\n return new Organization(organization);\n }\n\n getByIdentifier(identifier: string): Organization {\n const organizations = this._organizations.getValue();\n\n return organizations.find((organization) => organization.identifier === identifier);\n }\n\n async replace(organizations: { [id: string]: OrganizationData }) {\n await this.stateService.setOrganizations(organizations);\n this.updateObservables(organizations);\n }\n\n private updateObservables(organizationsMap: { [id: string]: OrganizationData }) {\n const organizations = Object.values(organizationsMap || {}).map((o) => new Organization(o));\n this._organizations.next(organizations);\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { OrganizationUserService } from \"../../abstractions/organization-user/organization-user.service\";\nimport {\n OrganizationUserAcceptRequest,\n OrganizationUserBulkConfirmRequest,\n OrganizationUserConfirmRequest,\n OrganizationUserInviteRequest,\n OrganizationUserResetPasswordEnrollmentRequest,\n OrganizationUserResetPasswordRequest,\n OrganizationUserUpdateGroupsRequest,\n OrganizationUserUpdateRequest,\n} from \"../../abstractions/organization-user/requests\";\nimport {\n OrganizationUserBulkPublicKeyResponse,\n OrganizationUserBulkResponse,\n OrganizationUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n OrganizationUserUserDetailsResponse,\n} from \"../../abstractions/organization-user/responses\";\nimport { ListResponse } from \"../../models/response/list.response\";\n\nimport { OrganizationUserBulkRequest } from \"./requests\";\n\nexport class OrganizationUserServiceImplementation implements OrganizationUserService {\n constructor(private apiService: ApiService) {}\n\n async getOrganizationUser(\n organizationId: string,\n id: string,\n options?: {\n includeGroups?: boolean;\n }\n ): Promise {\n const params = new URLSearchParams();\n\n if (options?.includeGroups) {\n params.set(\"includeGroups\", \"true\");\n }\n\n const r = await this.apiService.send(\n \"GET\",\n `/organizations/${organizationId}/users/${id}?${params.toString()}`,\n null,\n true,\n true\n );\n return new OrganizationUserDetailsResponse(r);\n }\n\n async getOrganizationUserGroups(organizationId: string, id: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/groups\",\n null,\n true,\n true\n );\n return r;\n }\n\n async getAllUsers(\n organizationId: string,\n options?: {\n includeCollections?: boolean;\n includeGroups?: boolean;\n }\n ): Promise> {\n const params = new URLSearchParams();\n\n if (options?.includeCollections) {\n params.set(\"includeCollections\", \"true\");\n }\n if (options?.includeGroups) {\n params.set(\"includeGroups\", \"true\");\n }\n\n const r = await this.apiService.send(\n \"GET\",\n `/organizations/${organizationId}/users?${params.toString()}`,\n null,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserUserDetailsResponse);\n }\n\n async getOrganizationUserResetPasswordDetails(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reset-password-details\",\n null,\n true,\n true\n );\n return new OrganizationUserResetPasswordDetailsReponse(r);\n }\n\n postOrganizationUserInvite(\n organizationId: string,\n request: OrganizationUserInviteRequest\n ): Promise {\n return this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/invite\",\n request,\n true,\n false\n );\n }\n\n postOrganizationUserReinvite(organizationId: string, id: string): Promise {\n return this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reinvite\",\n null,\n true,\n false\n );\n }\n\n async postManyOrganizationUserReinvite(\n organizationId: string,\n ids: string[]\n ): Promise> {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/reinvite\",\n new OrganizationUserBulkRequest(ids),\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n postOrganizationUserAccept(\n organizationId: string,\n id: string,\n request: OrganizationUserAcceptRequest\n ): Promise {\n return this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/accept\",\n request,\n true,\n false\n );\n }\n\n postOrganizationUserConfirm(\n organizationId: string,\n id: string,\n request: OrganizationUserConfirmRequest\n ): Promise {\n return this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/confirm\",\n request,\n true,\n false\n );\n }\n\n async postOrganizationUsersPublicKey(\n organizationId: string,\n ids: string[]\n ): Promise> {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/public-keys\",\n new OrganizationUserBulkRequest(ids),\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkPublicKeyResponse);\n }\n\n async postOrganizationUserBulkConfirm(\n organizationId: string,\n request: OrganizationUserBulkConfirmRequest\n ): Promise> {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/confirm\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n putOrganizationUser(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateRequest\n ): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n request,\n true,\n false\n );\n }\n\n putOrganizationUserGroups(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateGroupsRequest\n ): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/groups\",\n request,\n true,\n false\n );\n }\n\n putOrganizationUserResetPasswordEnrollment(\n organizationId: string,\n userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest\n ): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + userId + \"/reset-password-enrollment\",\n request,\n true,\n false\n );\n }\n\n putOrganizationUserResetPassword(\n organizationId: string,\n id: string,\n request: OrganizationUserResetPasswordRequest\n ): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reset-password\",\n request,\n true,\n false\n );\n }\n\n deleteOrganizationUser(organizationId: string, id: string): Promise {\n return this.apiService.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n null,\n true,\n false\n );\n }\n\n async deleteManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise> {\n const r = await this.apiService.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users\",\n new OrganizationUserBulkRequest(ids),\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n revokeOrganizationUser(organizationId: string, id: string): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/revoke\",\n null,\n true,\n false\n );\n }\n\n async revokeManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise> {\n const r = await this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/revoke\",\n new OrganizationUserBulkRequest(ids),\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n restoreOrganizationUser(organizationId: string, id: string): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/restore\",\n null,\n true,\n false\n );\n }\n\n async restoreManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise> {\n const r = await this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/restore\",\n new OrganizationUserBulkRequest(ids),\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n}\n","import { ProviderService as ProviderServiceAbstraction } from \"../abstractions/provider.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { ProviderData } from \"../models/data/provider.data\";\nimport { Provider } from \"../models/domain/provider\";\n\nexport class ProviderService implements ProviderServiceAbstraction {\n constructor(private stateService: StateService) {}\n\n async get(id: string): Promise {\n const providers = await this.stateService.getProviders();\n // eslint-disable-next-line\n if (providers == null || !providers.hasOwnProperty(id)) {\n return null;\n }\n\n return new Provider(providers[id]);\n }\n\n async getAll(): Promise {\n const providers = await this.stateService.getProviders();\n const response: Provider[] = [];\n for (const id in providers) {\n // eslint-disable-next-line\n if (providers.hasOwnProperty(id)) {\n response.push(new Provider(providers[id]));\n }\n }\n return response;\n }\n\n async save(providers: { [id: string]: ProviderData }) {\n await this.stateService.setProviders(providers);\n }\n}\n","import { UntypedFormGroup, ValidationErrors } from \"@angular/forms\";\n\nimport {\n FormGroupControls,\n FormValidationErrorsService as FormValidationErrorsAbstraction,\n AllValidationErrors,\n} from \"../abstractions/formValidationErrors.service\";\n\nexport class FormValidationErrorsService implements FormValidationErrorsAbstraction {\n getFormValidationErrors(controls: FormGroupControls): AllValidationErrors[] {\n let errors: AllValidationErrors[] = [];\n Object.keys(controls).forEach((key) => {\n const control = controls[key];\n if (control instanceof UntypedFormGroup) {\n errors = errors.concat(this.getFormValidationErrors(control.controls));\n }\n\n const controlErrors: ValidationErrors = controls[key].errors;\n if (controlErrors !== null) {\n Object.keys(controlErrors).forEach((keyError) => {\n errors.push({\n controlName: key,\n errorName: keyError,\n });\n });\n }\n });\n\n return errors;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { UserVerificationApiServiceAbstraction } from \"../../abstractions/userVerification/userVerification-api.service.abstraction\";\nimport { VerifyOTPRequest } from \"../../models/request/account/verify-otp.request\";\n\nexport class UserVerificationApiService implements UserVerificationApiServiceAbstraction {\n constructor(private apiService: ApiService) {}\n\n postAccountVerifyOTP(request: VerifyOTPRequest): Promise {\n return this.apiService.send(\"POST\", \"/accounts/verify-otp\", request, true, false);\n }\n async postAccountRequestOTP(): Promise {\n return this.apiService.send(\"POST\", \"/accounts/request-otp\", null, true, false);\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { OrganizationApiServiceAbstraction } from \"../../abstractions/organization/organization-api.service.abstraction\";\nimport { 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\";\nimport { SyncService } from \"../../vault/abstractions/sync/sync.service.abstraction\";\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(\n \"POST\",\n \"/organizations/licenses/self-hosted\",\n data,\n true,\n true\n );\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(\n \"POST\",\n \"/organizations/licenses/self-hosted/\" + id,\n data,\n true,\n false\n );\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 async selfHostedSyncLicense(id: string) {\n await this.apiService.send(\n \"POST\",\n \"/organizations/licenses/self-hosted/\" + id + \"/sync/\",\n null,\n true,\n false\n );\n }\n}\n","import { Subject } from \"rxjs\";\n\nimport { SyncNotifierService as SyncNotifierServiceAbstraction } from \"../../abstractions/sync/sync-notifier.service.abstraction\";\nimport { SyncEventArgs } from \"../../types/sync-event-args\";\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 protected _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 { AbstractMemoryStorageService } from \"../abstractions/storage.service\";\n\nexport class MemoryStorageService extends AbstractMemoryStorageService {\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 getBypassCache(key: string): Promise {\n return this.get(key);\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { PasswordRepromptComponent as BasePasswordRepromptComponent } from \"@bitwarden/angular/vault/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/vault/services/password-reprompt.service\";\n\nimport { PasswordRepromptComponent } from \"../components/password-reprompt.component\";\n\n@Injectable()\nexport class PasswordRepromptService extends BasePasswordRepromptService {\n component = PasswordRepromptComponent;\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\n\n@Injectable()\nexport class BroadcasterMessagingService implements MessagingService {\n constructor(private broadcasterService: BroadcasterService) {}\n\n send(subscriber: string, arg: any = {}) {\n const message = Object.assign({}, { command: subscriber }, arg);\n this.broadcasterService.send(message);\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { DeviceType } from \"@bitwarden/common/enums/deviceType\";\nimport { EventType } from \"@bitwarden/common/enums/eventType\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { 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 { 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","// Please leave 'en' where it is, as it's our fallback language in case no translation can be found\nexport const SupportedTranslationLocales: string[] = [\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","import { CryptoService } from \"../abstractions/crypto.service\";\nimport { EncryptService } from \"../abstractions/encrypt.service\";\n\nexport class ContainerService {\n constructor(private cryptoService: CryptoService, private encryptService: EncryptService) {}\n\n attachToGlobal(global: any) {\n if (!global.bitwardenContainerService) {\n global.bitwardenContainerService = this;\n }\n }\n\n /**\n * @throws Will throw if CryptoService was not instantiated and provided to the ContainerService constructor\n */\n getCryptoService(): CryptoService {\n if (this.cryptoService == null) {\n throw new Error(\"ContainerService.cryptoService not initialized.\");\n }\n return this.cryptoService;\n }\n\n /**\n * @throws Will throw if EncryptService was not instantiated and provided to the ContainerService constructor\n */\n getEncryptService(): EncryptService {\n if (this.encryptService == null) {\n throw new Error(\"ContainerService.encryptService not initialized.\");\n }\n return this.encryptService;\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\n\nimport { WINDOW } from \"@bitwarden/angular/services/injection-tokens\";\nimport { AbstractThemingService } from \"@bitwarden/angular/services/theming/theming.service.abstraction\";\nimport { CryptoService as CryptoServiceAbstraction } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EncryptService } from \"@bitwarden/common/abstractions/encrypt.service\";\nimport {\n EnvironmentService as EnvironmentServiceAbstraction,\n Urls,\n} from \"@bitwarden/common/abstractions/environment.service\";\nimport { EventUploadService as EventUploadServiceAbstraction } from \"@bitwarden/common/abstractions/event/event-upload.service\";\nimport { I18nService as I18nServiceAbstraction } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"@bitwarden/common/abstractions/notifications.service\";\nimport { StateService as StateServiceAbstraction } from \"@bitwarden/common/abstractions/state.service\";\nimport { TwoFactorService as TwoFactorServiceAbstraction } from \"@bitwarden/common/abstractions/twoFactor.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { ContainerService } from \"@bitwarden/common/services/container.service\";\nimport { EventUploadService } from \"@bitwarden/common/services/event/event-upload.service\";\nimport { VaultTimeoutService as VaultTimeoutService } from \"@bitwarden/common/services/vaultTimeout/vaultTimeout.service\";\n\nimport { I18nService } from \"./i18n.service\";\n\n@Injectable()\nexport class InitService {\n constructor(\n @Inject(WINDOW) private win: Window,\n private environmentService: EnvironmentServiceAbstraction,\n private notificationsService: NotificationsServiceAbstraction,\n private vaultTimeoutService: VaultTimeoutServiceAbstraction,\n private i18nService: I18nServiceAbstraction,\n private eventUploadService: EventUploadServiceAbstraction,\n private twoFactorService: TwoFactorServiceAbstraction,\n private stateService: StateServiceAbstraction,\n private cryptoService: CryptoServiceAbstraction,\n private themingService: AbstractThemingService,\n private encryptService: EncryptService\n ) {}\n\n init() {\n return async () => {\n await this.stateService.init();\n\n const urls = process.env.URLS as Urls;\n urls.base ??= this.win.location.origin;\n this.environmentService.setUrls(urls);\n\n setTimeout(() => this.notificationsService.init(), 3000);\n (this.vaultTimeoutService as VaultTimeoutService).init(true);\n const locale = await this.stateService.getLocale();\n await (this.i18nService as I18nService).init(locale);\n (this.eventUploadService as EventUploadService).init(true);\n this.twoFactorService.init();\n const htmlEl = this.win.document.documentElement;\n htmlEl.classList.add(\"locale_\" + this.i18nService.translationLocale);\n await this.themingService.monitorThemeChanges();\n const containerService = new ContainerService(this.cryptoService, this.encryptService);\n containerService.attachToGlobal(this.win);\n };\n }\n}\n","import { ApplicationRef, ComponentFactoryResolver, Injectable, Injector } from \"@angular/core\";\nimport * as jq from \"jquery\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalRef } from \"@bitwarden/angular/components/modal/modal.ref\";\nimport { ModalService as BaseModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Injectable()\nexport class ModalService extends BaseModalService {\n el: any = null;\n modalOpen = false;\n\n constructor(\n componentFactoryResolver: ComponentFactoryResolver,\n applicationRef: ApplicationRef,\n injector: Injector,\n private messagingService: MessagingService\n ) {\n super(componentFactoryResolver, applicationRef, injector);\n }\n\n protected setupHandlers(modalRef: ModalRef) {\n modalRef.onCreated.pipe(first()).subscribe(() => {\n const modals = Array.from(document.querySelectorAll(\".modal\"));\n if (modals.length > 0) {\n this.el = jq(modals[0]);\n this.el.modal(\"show\");\n\n this.el.on(\"show.bs.modal\", () => {\n modalRef.show();\n this.messagingService.send(\"modalShow\");\n });\n this.el.on(\"shown.bs.modal\", () => {\n modalRef.shown();\n this.messagingService.send(\"modalShown\");\n if (!Utils.isMobileBrowser) {\n this.el.find(\"*[appAutoFocus]\").focus();\n }\n });\n this.el.on(\"hide.bs.modal\", () => {\n this.messagingService.send(\"modalClose\");\n });\n this.el.on(\"hidden.bs.modal\", () => {\n modalRef.closed();\n this.messagingService.send(\"modalClosed\");\n });\n }\n });\n\n modalRef.onClose.pipe(first()).subscribe(() => {\n if (this.el != null) {\n this.el.modal(\"hide\");\n }\n });\n }\n}\n","import { 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 { FileDownloadRequest } from \"./fileDownloadRequest\";\n\nexport class FileDownloadBuilder {\n get blobOptions(): any {\n const options = this._request.blobOptions ?? {};\n if (options.type == null) {\n options.type = this.fileType;\n }\n return options;\n }\n\n get blob(): Blob {\n if (this.blobOptions != null) {\n return new Blob([this._request.blobData], this.blobOptions);\n } else {\n return new Blob([this._request.blobData]);\n }\n }\n\n get downloadMethod(): \"save\" | \"open\" {\n if (this._request.downloadMethod != null) {\n return this._request.downloadMethod;\n }\n return this.fileType != \"application/pdf\" ? \"save\" : \"open\";\n }\n\n private get fileType() {\n const fileNameLower = this._request.fileName.toLowerCase();\n if (fileNameLower.endsWith(\".pdf\")) {\n return \"application/pdf\";\n } else if (fileNameLower.endsWith(\".xlsx\")) {\n return \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n } else if (fileNameLower.endsWith(\".docx\")) {\n return \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\n } else if (fileNameLower.endsWith(\".pptx\")) {\n return \"application/vnd.openxmlformats-officedocument.presentationml.presentation\";\n } else if (fileNameLower.endsWith(\".csv\")) {\n return \"text/csv\";\n } else if (fileNameLower.endsWith(\".png\")) {\n return \"image/png\";\n } else if (fileNameLower.endsWith(\".jpg\") || fileNameLower.endsWith(\".jpeg\")) {\n return \"image/jpeg\";\n } else if (fileNameLower.endsWith(\".gif\")) {\n return \"image/gif\";\n }\n return null;\n }\n\n constructor(private readonly _request: FileDownloadRequest) {}\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { FileDownloadService } from \"@bitwarden/common/abstractions/fileDownload/fileDownload.service\";\nimport { FileDownloadBuilder } from \"@bitwarden/common/abstractions/fileDownload/fileDownloadBuilder\";\nimport { FileDownloadRequest } from \"@bitwarden/common/abstractions/fileDownload/fileDownloadRequest\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Injectable()\nexport class WebFileDownloadService implements FileDownloadService {\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n download(request: FileDownloadRequest): void {\n const builder = new FileDownloadBuilder(request);\n const a = window.document.createElement(\"a\");\n if (builder.downloadMethod === \"save\") {\n a.download = request.fileName;\n } else if (!this.platformUtilsService.isSafari()) {\n a.target = \"_blank\";\n }\n a.href = URL.createObjectURL(builder.blob);\n a.style.position = \"fixed\";\n window.document.body.appendChild(a);\n a.click();\n window.document.body.removeChild(a);\n }\n}\n","import { 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 { 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\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\n\n// TODO refine elsint rule for **/app/core/*\n// eslint-disable-next-line no-restricted-imports\nimport { PasswordRepromptService } from \"../../vault/app/core/password-reprompt.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 { PolicyListService } from \"./policy-list.service\";\nimport { RouterService } from \"./router.service\";\nimport { Account, GlobalState, StateService } from \"./state\";\nimport { StateMigrationService } from \"./state-migration.service\";\nimport { WebFileDownloadService } from \"./web-file-download.service\";\nimport { WebPlatformUtilsService } from \"./web-platform-utils.service\";\n\n@NgModule({\n declarations: [],\n imports: [CommonModule, JslibServicesModule],\n providers: [\n InitService,\n RouterService,\n EventService,\n PolicyListService,\n {\n provide: APP_INITIALIZER,\n useFactory: (initService: InitService) => initService.init(),\n deps: [InitService],\n multi: true,\n },\n {\n provide: STATE_FACTORY,\n useValue: new StateFactory(GlobalState, Account),\n },\n {\n provide: STATE_SERVICE_USE_CACHE,\n useValue: false,\n },\n {\n provide: I18nServiceAbstraction,\n useClass: I18nService,\n deps: [SYSTEM_LANGUAGE, LOCALES_DIRECTORY],\n },\n { provide: AbstractStorageService, useClass: HtmlStorageService },\n {\n provide: SECURE_STORAGE,\n // TODO: platformUtilsService.isDev has a helper for this, but using that service here results in a circular dependency.\n // We have a tech debt item in the backlog to break up platformUtilsService, but in the meantime simply checking the environement here is less cumbersome.\n useClass: process.env.NODE_ENV === \"development\" ? HtmlStorageService : MemoryStorageService,\n },\n {\n provide: MEMORY_STORAGE,\n useClass: MemoryStorageService,\n },\n {\n provide: PlatformUtilsServiceAbstraction,\n useClass: WebPlatformUtilsService,\n },\n { provide: MessagingServiceAbstraction, useClass: BroadcasterMessagingService },\n { provide: ModalServiceAbstraction, useClass: ModalService },\n {\n provide: StateMigrationServiceAbstraction,\n useClass: StateMigrationService,\n deps: [AbstractStorageService, SECURE_STORAGE, STATE_FACTORY],\n },\n StateService,\n {\n provide: BaseStateServiceAbstraction,\n useExisting: StateService,\n },\n {\n provide: PasswordRepromptServiceAbstraction,\n useClass: PasswordRepromptService,\n },\n {\n provide: FileDownloadService,\n useClass: WebFileDownloadService,\n },\n {\n provide: LoginServiceAbstraction,\n useClass: LoginService,\n deps: [StateService],\n },\n ],\n})\nexport class CoreModule {\n constructor(@Optional() @SkipSelf() parentModule?: CoreModule) {\n if (parentModule) {\n throw new Error(\"CoreModule is already loaded. Import it in the AppModule only\");\n }\n }\n}\n","import { ThemeType } from \"@bitwarden/common/enums/themeType\";\nimport { GlobalState as BaseGlobalState } from \"@bitwarden/common/models/domain/global-state\";\n\nexport class GlobalState extends BaseGlobalState {\n theme?: ThemeType = ThemeType.Light;\n rememberEmail = true;\n}\n","import { I18nService as BaseI18nService } from \"@bitwarden/common/services/i18n.service\";\n\nimport { SupportedTranslationLocales } from \"../../translation-constants\";\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 this.supportedTranslationLocales = SupportedTranslationLocales;\n }\n}\n","import { Observable, ReplaySubject } from \"rxjs\";\n\nimport { I18nService as I18nServiceAbstraction } from \"../abstractions/i18n.service\";\n\nimport { TranslationService } from \"./translation.service\";\n\nexport class I18nService extends TranslationService implements I18nServiceAbstraction {\n protected _locale = new ReplaySubject(1);\n private _translationLocale: string;\n locale$: Observable = this._locale.asObservable();\n\n constructor(\n protected systemLanguage: string,\n protected localesDirectory: string,\n protected getLocalesJson: (formattedLocale: string) => Promise\n ) {\n super(systemLanguage, localesDirectory, getLocalesJson);\n }\n\n get translationLocale(): string {\n return this._translationLocale;\n }\n\n set translationLocale(locale: string) {\n this._translationLocale = locale;\n this._locale.next(locale);\n }\n}\n","import { TranslationService as TranslationServiceAbstraction } from \"../abstractions/translation.service\";\n\nexport abstract class TranslationService implements TranslationServiceAbstraction {\n // First locale is the default (English)\n supportedTranslationLocales: string[] = [\"en\"];\n defaultLocale = \"en\";\n abstract 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\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.defaultLocale;\n }\n }\n\n if (this.localesDirectory != null) {\n await this.loadMessages(this.translationLocale, this.localeMessages);\n if (this.translationLocale !== this.defaultLocale) {\n await this.loadMessages(this.defaultLocale, this.defaultMessages);\n }\n }\n }\n\n t(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.translate(id, p1, p2, p3);\n }\n\n translate(id: string, p1?: string | number, p2?: string | number, p3?: string | number): string {\n let result: string;\n // eslint-disable-next-line\n if (this.localeMessages.hasOwnProperty(id) && this.localeMessages[id]) {\n result = this.localeMessages[id];\n // eslint-disable-next-line\n } else if (this.defaultMessages.hasOwnProperty(id) && this.defaultMessages[id]) {\n result = this.defaultMessages[id];\n } else {\n result = \"\";\n }\n\n if (result !== \"\") {\n if (p1 != null) {\n result = result.split(\"__$1__\").join(p1.toString());\n }\n if (p2 != null) {\n result = result.split(\"__$2__\").join(p2.toString());\n }\n if (p3 != null) {\n result = result.split(\"__$3__\").join(p3.toString());\n }\n }\n\n return result;\n }\n\n protected async loadMessages(locale: string, messagesObj: any): Promise {\n const formattedLocale = locale.replace(\"-\", \"_\");\n const locales = await this.getLocalesJson(formattedLocale);\n for (const prop in locales) {\n // eslint-disable-next-line\n if (!locales.hasOwnProperty(prop)) {\n continue;\n }\n messagesObj[prop] = locales[prop].message;\n\n if (locales[prop].placeholders) {\n for (const placeProp in locales[prop].placeholders) {\n if (\n !locales[prop].placeholders.hasOwnProperty(placeProp) || // eslint-disable-line\n !locales[prop].placeholders[placeProp].content\n ) {\n continue;\n }\n\n const replaceToken = \"\\\\$\" + placeProp.toUpperCase() + \"\\\\$\";\n let replaceContent = locales[prop].placeholders[placeProp].content;\n if (replaceContent === \"$1\" || replaceContent === \"$2\" || replaceContent === \"$3\") {\n replaceContent = \"__$\" + replaceContent + \"__\";\n }\n messagesObj[prop] = messagesObj[prop].replace(\n new RegExp(replaceToken, \"g\"),\n replaceContent\n );\n }\n }\n }\n }\n}\n","import { StateMigrationService as BaseStateMigrationService } from \"@bitwarden/common/services/stateMigration.service\";\n\nimport { Account } from \"./state/account\";\nimport { GlobalState } from \"./state/global-state\";\n\nexport class StateMigrationService extends BaseStateMigrationService {\n protected async migrationStateFrom1To2(): Promise {\n await super.migrateStateFrom1To2();\n const globals = (await this.get(\"global\")) ?? this.stateFactory.createGlobal(null);\n globals.rememberEmail = (await this.get(\"rememberEmail\")) ?? globals.rememberEmail;\n await this.set(\"global\", globals);\n }\n}\n","import { 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 {\n AbstractMemoryStorageService,\n AbstractStorageService,\n} from \"@bitwarden/common/abstractions/storage.service\";\nimport { StateFactory } from \"@bitwarden/common/factories/stateFactory\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collection.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\";\nimport { CipherData } from \"@bitwarden/common/vault/models/data/cipher.data\";\nimport { FolderData } from \"@bitwarden/common/vault/models/data/folder.data\";\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: AbstractMemoryStorageService,\n logService: LogService,\n stateMigrationService: StateMigrationService,\n @Inject(STATE_FACTORY) stateFactory: StateFactory,\n @Inject(STATE_SERVICE_USE_CACHE) useAccountCache = true\n ) {\n super(\n storageService,\n secureStorageService,\n memoryStorageService,\n logService,\n stateMigrationService,\n stateFactory,\n useAccountCache\n );\n }\n\n async addAccount(account: Account) {\n // Apply web overrides to default account values\n account = new Account(account);\n await super.addAccount(account);\n }\n\n async getEncryptedCiphers(options?: StorageOptions): Promise<{ [id: string]: CipherData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedCiphers(options);\n }\n\n async setEncryptedCiphers(\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedCiphers(value, options);\n }\n\n async getEncryptedCollections(\n options?: StorageOptions\n ): Promise<{ [id: string]: CollectionData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedCollections(options);\n }\n\n async setEncryptedCollections(\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedCollections(value, options);\n }\n\n async getEncryptedFolders(options?: StorageOptions): Promise<{ [id: string]: FolderData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedFolders(options);\n }\n\n async setEncryptedFolders(\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedFolders(value, options);\n }\n\n async getEncryptedSends(options?: StorageOptions): Promise<{ [id: string]: SendData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedSends(options);\n }\n\n async setEncryptedSends(\n value: { [id: string]: SendData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedSends(value, options);\n }\n\n override async getLastSync(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getLastSync(options);\n }\n\n override async setLastSync(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setLastSync(value, options);\n }\n}\n","export enum ClientType {\n Web = \"web\",\n Browser = \"browser\",\n Desktop = \"desktop\",\n Mobile = \"mobile\",\n Cli = \"cli\",\n DirectoryConnector = \"connector\",\n}\n","import { Injectable } from \"@angular/core\";\nimport Swal, { SweetAlertIcon } from \"sweetalert2\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ClientType } from \"@bitwarden/common/enums/clientType\";\nimport { DeviceType } from \"@bitwarden/common/enums/deviceType\";\n\n@Injectable()\nexport class WebPlatformUtilsService implements PlatformUtilsService {\n private browserCache: DeviceType = null;\n\n constructor(\n private i18nService: I18nService,\n private messagingService: MessagingService,\n private logService: LogService\n ) {}\n\n getDevice(): DeviceType {\n if (this.browserCache != null) {\n return this.browserCache;\n }\n\n if (\n navigator.userAgent.indexOf(\" Firefox/\") !== -1 ||\n navigator.userAgent.indexOf(\" Gecko/\") !== -1\n ) {\n this.browserCache = DeviceType.FirefoxBrowser;\n } else if (navigator.userAgent.indexOf(\" OPR/\") >= 0) {\n this.browserCache = DeviceType.OperaBrowser;\n } else if (navigator.userAgent.indexOf(\" Edg/\") !== -1) {\n this.browserCache = DeviceType.EdgeBrowser;\n } else if (navigator.userAgent.indexOf(\" Vivaldi/\") !== -1) {\n this.browserCache = DeviceType.VivaldiBrowser;\n } else if (\n navigator.userAgent.indexOf(\" Safari/\") !== -1 &&\n navigator.userAgent.indexOf(\"Chrome\") === -1\n ) {\n this.browserCache = DeviceType.SafariBrowser;\n } else if ((window as any).chrome && navigator.userAgent.indexOf(\" Chrome/\") !== -1) {\n this.browserCache = DeviceType.ChromeBrowser;\n } else if (navigator.userAgent.indexOf(\" Trident/\") !== -1) {\n this.browserCache = DeviceType.IEBrowser;\n } else {\n this.browserCache = DeviceType.UnknownBrowser;\n }\n\n return this.browserCache;\n }\n\n getDeviceString(): string {\n const device = DeviceType[this.getDevice()].toLowerCase();\n return device.replace(\"browser\", \"\");\n }\n\n getClientType() {\n return ClientType.Web;\n }\n\n isFirefox(): boolean {\n return this.getDevice() === DeviceType.FirefoxBrowser;\n }\n\n isChrome(): boolean {\n return this.getDevice() === DeviceType.ChromeBrowser;\n }\n\n isEdge(): boolean {\n return this.getDevice() === DeviceType.EdgeBrowser;\n }\n\n isOpera(): boolean {\n return this.getDevice() === DeviceType.OperaBrowser;\n }\n\n isVivaldi(): boolean {\n return this.getDevice() === DeviceType.VivaldiBrowser;\n }\n\n isSafari(): boolean {\n return this.getDevice() === DeviceType.SafariBrowser;\n }\n\n isMacAppStore(): boolean {\n return false;\n }\n\n isViewOpen(): Promise {\n return Promise.resolve(false);\n }\n\n launchUri(uri: string, options?: any): void {\n const a = document.createElement(\"a\");\n a.href = uri;\n if (options == null || !options.sameWindow) {\n a.target = \"_blank\";\n a.rel = \"noreferrer noopener\";\n }\n a.classList.add(\"d-none\");\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n\n getApplicationVersion(): Promise {\n return Promise.resolve(process.env.APPLICATION_VERSION || \"-\");\n }\n\n async getApplicationVersionNumber(): Promise {\n return (await this.getApplicationVersion()).split(RegExp(\"[+|-]\"))[0].trim();\n }\n\n supportsWebAuthn(win: Window): boolean {\n return typeof PublicKeyCredential !== \"undefined\";\n }\n\n supportsDuo(): boolean {\n return true;\n }\n\n showToast(\n type: \"error\" | \"success\" | \"warning\" | \"info\",\n title: string,\n text: string | string[],\n options?: any\n ): void {\n this.messagingService.send(\"showToast\", {\n text: text,\n title: title,\n type: type,\n options: options,\n });\n }\n\n async showDialog(\n body: string,\n title?: string,\n confirmText?: string,\n cancelText?: string,\n type?: string,\n bodyIsHtml = false,\n target?: string\n ) {\n let iconClasses: string = null;\n if (type != null) {\n // If you add custom types to this part, the type to SweetAlertIcon cast below needs to be changed.\n switch (type) {\n case \"success\":\n iconClasses = \"bwi-check text-success\";\n break;\n case \"warning\":\n iconClasses = \"bwi-exclamation-triangle text-warning\";\n break;\n case \"error\":\n iconClasses = \"bwi-error text-danger\";\n break;\n case \"info\":\n iconClasses = \"bwi-info-circle text-info\";\n break;\n default:\n break;\n }\n }\n\n const bootstrapModal = document.querySelector(\"div.modal\");\n if (bootstrapModal != null) {\n bootstrapModal.removeAttribute(\"tabindex\");\n }\n\n const iconHtmlStr =\n iconClasses != null ? `` : undefined;\n const confirmed = await Swal.fire({\n heightAuto: false,\n buttonsStyling: false,\n icon: type as SweetAlertIcon, // required to be any of the SweetAlertIcons to output the iconHtml.\n iconHtml: iconHtmlStr,\n text: bodyIsHtml ? null : body,\n html: bodyIsHtml ? body : null,\n titleText: title,\n showCancelButton: cancelText != null,\n cancelButtonText: cancelText,\n showConfirmButton: true,\n confirmButtonText: confirmText == null ? this.i18nService.t(\"ok\") : confirmText,\n target: target != null ? target : \"body\",\n });\n\n if (bootstrapModal != null) {\n bootstrapModal.setAttribute(\"tabindex\", \"-1\");\n }\n\n return confirmed.value;\n }\n\n isDev(): boolean {\n return process.env.NODE_ENV === \"development\";\n }\n\n isSelfHost(): boolean {\n return WebPlatformUtilsService.isSelfHost();\n }\n\n static 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 { Component, OnInit } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-footer\",\n templateUrl: \"footer.component.html\",\n})\nexport class FooterComponent implements OnInit {\n version: string;\n year = \"2015\";\n\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n async ngOnInit() {\n this.year = new Date().getFullYear().toString();\n this.version = await this.platformUtilsService.getApplicationVersion();\n }\n}\n","
\n
\n
© {{ year }} Bitwarden Inc.
\n
\n
\n {{ \"versionNumber\" | i18n: version }}\n
\n
\n
\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-frontend-layout\",\n templateUrl: \"frontend-layout.component.html\",\n})\nexport class FrontendLayoutComponent implements OnInit, OnDestroy {\n version: string;\n year = \"2015\";\n\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n async ngOnInit() {\n this.year = new Date().getFullYear().toString();\n this.version = await this.platformUtilsService.getApplicationVersion();\n document.body.classList.add(\"layout_frontend\");\n }\n\n ngOnDestroy() {\n document.body.classList.remove(\"layout_frontend\");\n }\n}\n","\n
\n © {{ year }} Bitwarden Inc.
\n {{ \"versionNumber\" | i18n: version }}\n
\n","\n\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 { TokenService } from \"@bitwarden/common/abstractions/token.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\n\n@Component({\n selector: \"app-navbar\",\n templateUrl: \"navbar.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class NavbarComponent implements OnInit {\n selfHosted = false;\n name: string;\n email: string;\n providers: Provider[] = [];\n userId: string;\n organizations$: Observable;\n\n constructor(\n private messagingService: MessagingService,\n private platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService,\n private providerService: ProviderService,\n private syncService: SyncService,\n private organizationService: OrganizationService,\n private i18nService: I18nService\n ) {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.name = await this.tokenService.getName();\n this.email = await this.tokenService.getEmail();\n this.userId = await this.tokenService.getUserId();\n if (this.name == null || this.name.trim() === \"\") {\n this.name = this.email;\n }\n\n // Ensure providers and organizations are loaded\n if ((await this.syncService.getLastSync()) == null) {\n await this.syncService.fullSync(false);\n }\n this.providers = await this.providerService.getAll();\n\n this.organizations$ = this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter(isNotProviderUser)),\n canAccessAdmin(this.i18nService)\n );\n }\n\n lock() {\n this.messagingService.send(\"lockVault\");\n }\n\n logOut() {\n this.messagingService.send(\"logout\");\n }\n}\n","\n
\n \n \n \n \n \n {{\n product.name\n }}\n \n \n\n \n 0\"\n class=\"tw-mt-4 tw-flex tw-w-full tw-flex-col tw-border-0 tw-border-t tw-border-solid tw-border-t-text-muted tw-p-2 tw-pb-0\"\n >\n {{ \"moreFromBitwarden\" | i18n }}\n \n \n {{ product.name }}\n \n \n \n
\n
\n","import { Component, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { combineLatest, map } from \"rxjs\";\n\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { MenuComponent } from \"@bitwarden/components\";\n\ntype ProductSwitcherItem = {\n /**\n * Displayed name\n */\n name: string;\n\n /**\n * Displayed icon\n */\n icon: string;\n\n /**\n * Route for items in the `bentoProducts$` section\n */\n appRoute?: string | any[];\n\n /**\n * Route for items in the `otherProducts$` section\n */\n marketingRoute?: string | any[];\n};\n\n@Component({\n selector: \"product-switcher-content\",\n templateUrl: \"./product-switcher-content.component.html\",\n})\nexport class ProductSwitcherContentComponent {\n @ViewChild(\"menu\")\n menu: MenuComponent;\n\n protected products$ = combineLatest([\n this.organizationService.organizations$,\n this.route.paramMap,\n ]).pipe(\n map(([orgs, paramMap]) => {\n const routeOrg = orgs.find((o) => o.id === paramMap.get(\"organizationId\"));\n // If the active route org doesn't have access to SM, find the first org that does.\n const smOrg = routeOrg?.canAccessSecretsManager\n ? routeOrg\n : orgs.find((o) => o.canAccessSecretsManager);\n\n /**\n * We can update this to the \"satisfies\" type upon upgrading to TypeScript 4.9\n * https://devblogs.microsoft.com/typescript/announcing-typescript-4-9/#satisfies\n */\n const products: Record<\"pm\" | \"sm\" | \"orgs\", ProductSwitcherItem> = {\n pm: {\n name: \"Password Manager\",\n icon: \"bwi-lock\",\n appRoute: \"/vault\",\n marketingRoute: \"https://bitwarden.com/products/personal/\",\n },\n sm: {\n name: \"Secrets Manager Beta\",\n icon: \"bwi-cli\",\n appRoute: [\"/sm\", smOrg?.id],\n // TODO: update marketing link\n marketingRoute: \"#\",\n },\n orgs: {\n name: \"Organizations\",\n icon: \"bwi-business\",\n marketingRoute: \"https://bitwarden.com/products/business/\",\n },\n };\n\n const bento: ProductSwitcherItem[] = [products.pm];\n const other: ProductSwitcherItem[] = [];\n\n if (smOrg) {\n bento.push(products.sm);\n }\n\n if (orgs.length === 0) {\n other.push(products.orgs);\n }\n\n return {\n bento,\n other,\n };\n })\n );\n\n constructor(private organizationService: OrganizationService, private route: ActivatedRoute) {}\n}\n","\n\n\n \n \n\n","import { AfterViewInit, ChangeDetectorRef, Component, Input } from \"@angular/core\";\n\nimport { IconButtonType } from \"@bitwarden/components/src/icon-button/icon-button.component\";\n\nimport { flagEnabled } from \"../../../utils/flags\";\n\n@Component({\n selector: \"product-switcher\",\n templateUrl: \"./product-switcher.component.html\",\n})\nexport class ProductSwitcherComponent implements AfterViewInit {\n protected isEnabled = flagEnabled(\"secretsManager\");\n\n /**\n * Passed to the product switcher's `bitIconButton`\n */\n @Input()\n buttonType: IconButtonType = \"main\";\n\n ngAfterViewInit() {\n /**\n * Resolves https://angular.io/errors/NG0100 [SM-403]\n *\n * Caused by `[bitMenuTriggerFor]=\"content?.menu\"` in template\n */\n this.changeDetector.detectChanges();\n }\n\n constructor(private changeDetector: ChangeDetectorRef) {}\n}\n","import { A11yModule } from \"@angular/cdk/a11y\";\nimport { NgModule } from \"@angular/core\";\nimport { RouterModule } from \"@angular/router\";\n\nimport { I18nPipe } from \"@bitwarden/angular/pipes/i18n.pipe\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { ProductSwitcherContentComponent } from \"./product-switcher-content.component\";\nimport { ProductSwitcherComponent } from \"./product-switcher.component\";\n\n@NgModule({\n imports: [SharedModule, A11yModule, RouterModule],\n declarations: [ProductSwitcherComponent, ProductSwitcherContentComponent],\n exports: [ProductSwitcherComponent],\n providers: [I18nPipe],\n})\nexport class ProductSwitcherModule {}\n","import { NgModule } from \"@angular/core\";\n\n@NgModule({})\nexport class CoreOrganizationModule {}\n","import { OrganizationUserType } from \"../../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../../../models/api/permissions.api\";\nimport { SelectionReadOnlyRequest } from \"../../../models/request/selection-read-only.request\";\n\nexport class OrganizationUserUpdateRequest {\n type: OrganizationUserType;\n accessAll: boolean;\n accessSecretsManager: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n groups: string[] = [];\n permissions: PermissionsApi;\n}\n","import { OrganizationUserType } from \"../../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../../../models/api/permissions.api\";\nimport { SelectionReadOnlyRequest } from \"../../../models/request/selection-read-only.request\";\n\nexport class OrganizationUserInviteRequest {\n emails: string[] = [];\n type: OrganizationUserType;\n accessAll: boolean;\n accessSecretsManager: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n groups: string[];\n permissions: PermissionsApi;\n}\n","import { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\nimport { PermissionsApi } from \"@bitwarden/common/models/api/permissions.api\";\n\nimport { CollectionAccessSelectionView } from \"./collection-access-selection.view\";\n\nexport class OrganizationUserAdminView {\n id: string;\n userId: string;\n organizationId: string;\n type: OrganizationUserType;\n status: OrganizationUserStatusType;\n externalId: string;\n accessAll: boolean;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n\n collections: CollectionAccessSelectionView[] = [];\n groups: string[] = [];\n\n accessSecretsManager: boolean;\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport {\n OrganizationUserInviteRequest,\n OrganizationUserUpdateRequest,\n} from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationUserDetailsResponse } from \"@bitwarden/common/abstractions/organization-user/responses\";\n\nimport { CoreOrganizationModule } from \"../core-organization.module\";\nimport { OrganizationUserAdminView } from \"../views/organization-user-admin-view\";\n\n@Injectable({ providedIn: CoreOrganizationModule })\nexport class UserAdminService {\n constructor(private organizationUserService: OrganizationUserService) {}\n\n async get(\n organizationId: string,\n organizationUserId: string\n ): Promise {\n const userResponse = await this.organizationUserService.getOrganizationUser(\n organizationId,\n organizationUserId,\n {\n includeGroups: true,\n }\n );\n\n if (userResponse == null) {\n return undefined;\n }\n\n const [view] = await this.decryptMany(organizationId, [userResponse]);\n\n return view;\n }\n\n async save(user: OrganizationUserAdminView): Promise {\n const request = new OrganizationUserUpdateRequest();\n request.accessAll = user.accessAll;\n request.permissions = user.permissions;\n request.type = user.type;\n request.collections = user.collections;\n request.groups = user.groups;\n request.accessSecretsManager = user.accessSecretsManager;\n\n await this.organizationUserService.putOrganizationUser(user.organizationId, user.id, request);\n }\n\n async invite(emails: string[], user: OrganizationUserAdminView): Promise {\n const request = new OrganizationUserInviteRequest();\n request.emails = emails;\n request.accessAll = user.accessAll;\n request.permissions = user.permissions;\n request.type = user.type;\n request.collections = user.collections;\n request.groups = user.groups;\n request.accessSecretsManager = user.accessSecretsManager;\n\n await this.organizationUserService.postOrganizationUserInvite(user.organizationId, request);\n }\n\n private async decryptMany(\n organizationId: string,\n users: OrganizationUserDetailsResponse[]\n ): Promise {\n const promises = users.map(async (u) => {\n const view = new OrganizationUserAdminView();\n\n view.id = u.id;\n view.organizationId = organizationId;\n view.userId = u.userId;\n view.type = u.type;\n view.status = u.status;\n view.externalId = u.externalId;\n view.accessAll = u.accessAll;\n view.permissions = u.permissions;\n view.resetPasswordEnrolled = u.resetPasswordEnrolled;\n view.collections = u.collections.map((c) => ({\n id: c.id,\n hidePasswords: c.hidePasswords,\n readOnly: c.readOnly,\n }));\n view.groups = u.groups;\n view.accessSecretsManager = u.accessSecretsManager;\n\n return view;\n });\n\n return await Promise.all(promises);\n }\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 { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { CollectionRequest } from \"@bitwarden/common/models/request/collection.request\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selection-read-only.request\";\nimport {\n CollectionAccessDetailsResponse,\n CollectionResponse,\n} from \"@bitwarden/common/models/response/collection.response\";\n\nimport { CoreOrganizationModule } from \"../core-organization.module\";\nimport { CollectionAdminView } from \"../views/collection-admin.view\";\n\n@Injectable({ providedIn: CoreOrganizationModule })\nexport class CollectionAdminService {\n constructor(private apiService: ApiService, private cryptoService: CryptoService) {}\n\n async getAll(organizationId: string): Promise {\n const collectionResponse = await this.apiService.getManyCollectionsWithAccessDetails(\n organizationId\n );\n\n if (collectionResponse?.data == null || collectionResponse.data.length === 0) {\n return [];\n }\n\n return await this.decryptMany(organizationId, collectionResponse.data);\n }\n\n async get(\n organizationId: string,\n collectionId: string\n ): Promise {\n const collectionResponse = await this.apiService.getCollectionAccessDetails(\n organizationId,\n collectionId\n );\n\n if (collectionResponse == null) {\n return undefined;\n }\n\n const [view] = await this.decryptMany(organizationId, [collectionResponse]);\n\n return view;\n }\n\n async save(collection: CollectionAdminView): Promise {\n const request = await this.encrypt(collection);\n\n let response: CollectionResponse;\n if (collection.id == null) {\n response = await this.apiService.postCollection(collection.organizationId, request);\n collection.id = response.id;\n } else {\n response = await this.apiService.putCollection(\n collection.organizationId,\n collection.id,\n request\n );\n }\n\n // TODO: Implement upsert when in PS-1083: Collection Service refactors\n // await this.collectionService.upsert(data);\n return;\n }\n\n async delete(organizationId: string, collectionId: string): Promise {\n await this.apiService.deleteCollection(organizationId, collectionId);\n }\n\n private async decryptMany(\n organizationId: string,\n collections: CollectionResponse[] | CollectionAccessDetailsResponse[]\n ): Promise {\n const orgKey = await this.cryptoService.getOrgKey(organizationId);\n\n const promises = collections.map(async (c) => {\n const view = new CollectionAdminView();\n view.id = c.id;\n view.name = await this.cryptoService.decryptToUtf8(new EncString(c.name), orgKey);\n view.externalId = c.externalId;\n view.organizationId = c.organizationId;\n\n if (isCollectionAccessDetailsResponse(c)) {\n view.groups = c.groups;\n view.users = c.users;\n view.assigned = c.assigned;\n }\n\n return view;\n });\n\n return await Promise.all(promises);\n }\n\n private async encrypt(model: CollectionAdminView): 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 CollectionRequest();\n collection.externalId = model.externalId;\n collection.name = (await this.cryptoService.encrypt(model.name, key)).encryptedString;\n collection.groups = model.groups.map(\n (group) => new SelectionReadOnlyRequest(group.id, group.readOnly, group.hidePasswords)\n );\n collection.users = model.users.map(\n (user) => new SelectionReadOnlyRequest(user.id, user.readOnly, user.hidePasswords)\n );\n return collection;\n }\n}\n\nfunction isCollectionAccessDetailsResponse(\n response: CollectionResponse | CollectionAccessDetailsResponse\n): response is CollectionAccessDetailsResponse {\n const anyResponse = response as any;\n\n return anyResponse?.groups instanceof Array && anyResponse?.users instanceof Array;\n}\n","import { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selection-read-only.request\";\n\nexport class GroupRequest {\n name: string;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n users: string[] = [];\n}\n","export class OrganizationGroupBulkRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selection-read-only.request\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\n\nimport { CoreOrganizationModule } from \"../../core-organization.module\";\nimport { GroupView } from \"../../views/group.view\";\n\nimport { GroupRequest } from \"./requests/group.request\";\nimport { OrganizationGroupBulkRequest } from \"./requests/organization-group-bulk.request\";\nimport { GroupDetailsResponse, GroupResponse } from \"./responses/group.response\";\n\n@Injectable({ providedIn: CoreOrganizationModule })\nexport class GroupService {\n constructor(private apiService: ApiService) {}\n\n async delete(orgId: string, groupId: string): Promise {\n await this.apiService.send(\n \"DELETE\",\n \"/organizations/\" + orgId + \"/groups/\" + groupId,\n null,\n true,\n false\n );\n }\n\n async deleteMany(orgId: string, groupIds: string[]): Promise {\n await this.apiService.send(\n \"DELETE\",\n \"/organizations/\" + orgId + \"/groups\",\n new OrganizationGroupBulkRequest(groupIds),\n true,\n true\n );\n }\n\n async get(orgId: string, groupId: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + orgId + \"/groups/\" + groupId + \"/details\",\n null,\n true,\n true\n );\n\n return GroupView.fromResponse(new GroupDetailsResponse(r));\n }\n\n async getAll(orgId: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + orgId + \"/groups\",\n null,\n true,\n true\n );\n\n const listResponse = new ListResponse(r, GroupDetailsResponse);\n\n return listResponse.data?.map((gr) => GroupView.fromResponse(gr)) ?? [];\n }\n\n async save(group: GroupView): Promise {\n const request = new GroupRequest();\n request.name = group.name;\n request.accessAll = group.accessAll;\n request.users = group.members;\n request.collections = group.collections.map(\n (c) => new SelectionReadOnlyRequest(c.id, c.readOnly, c.hidePasswords)\n );\n\n if (group.id == undefined) {\n return await this.postGroup(group.organizationId, request);\n } else {\n return await this.putGroup(group.organizationId, group.id, request);\n }\n }\n\n private async postGroup(organizationId: string, request: GroupRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/groups\",\n request,\n true,\n true\n );\n return GroupView.fromResponse(new GroupResponse(r));\n }\n\n private async putGroup(\n organizationId: string,\n id: string,\n request: GroupRequest\n ): Promise {\n const r = await this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/groups/\" + id,\n request,\n true,\n true\n );\n return GroupView.fromResponse(new GroupResponse(r));\n }\n}\n","import { BaseResponse } from \"@bitwarden/common/models/response/base.response\";\nimport { SelectionReadOnlyResponse } from \"@bitwarden/common/models/response/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 { View } from \"@bitwarden/common/models/view/view\";\n\ninterface SelectionResponseLike {\n id: string;\n readOnly: boolean;\n hidePasswords: boolean;\n}\n\nexport class CollectionAccessSelectionView extends View {\n readonly id: string;\n readonly readOnly: boolean;\n readonly hidePasswords: boolean;\n\n constructor(response?: SelectionResponseLike) {\n super();\n\n if (!response) {\n return;\n }\n\n this.id = response.id;\n this.readOnly = response.readOnly;\n this.hidePasswords = response.hidePasswords;\n }\n}\n","import { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { CollectionAccessDetailsResponse } from \"@bitwarden/common/src/models/response/collection.response\";\n\nimport { CollectionAccessSelectionView } from \"./collection-access-selection.view\";\n\nexport class CollectionAdminView extends CollectionView {\n groups: CollectionAccessSelectionView[] = [];\n users: CollectionAccessSelectionView[] = [];\n\n /**\n * Flag indicating the user has been explicitly assigned to this Collection\n */\n assigned: boolean;\n\n constructor(response?: CollectionAccessDetailsResponse) {\n super(response);\n\n if (!response) {\n return;\n }\n\n this.groups = response.groups\n ? response.groups.map((g) => new CollectionAccessSelectionView(g))\n : [];\n\n this.users = response.users\n ? response.users.map((g) => new CollectionAccessSelectionView(g))\n : [];\n\n this.assigned = response.assigned;\n }\n}\n","import { View } from \"@bitwarden/common/src/models/view/view\";\n\nimport { GroupDetailsResponse, GroupResponse } from \"../services/group/responses/group.response\";\n\nimport { CollectionAccessSelectionView } from \"./collection-access-selection.view\";\n\nexport class GroupView implements View {\n id: string;\n organizationId: string;\n name: string;\n accessAll: boolean;\n externalId: string;\n collections: CollectionAccessSelectionView[] = [];\n members: string[] = [];\n\n static fromResponse(response: GroupResponse): GroupView {\n const view: GroupView = Object.assign(new GroupView(), response) as GroupView;\n\n if (response instanceof GroupDetailsResponse && response.collections != undefined) {\n view.collections = response.collections.map((c) => new CollectionAccessSelectionView(c));\n }\n\n return view;\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 { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class OrganizationPermissionsGuard implements CanActivate {\n constructor(\n private router: Router,\n private organizationService: OrganizationService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private syncService: SyncService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n // TODO: We need to fix this issue once and for all.\n if ((await this.syncService.getLastSync()) == null) {\n await this.syncService.fullSync(false);\n }\n\n const org = this.organizationService.get(route.params.organizationId);\n if (org == null) {\n return this.router.createUrlTree([\"/\"]);\n }\n\n if (!org.isOwner && !org.enabled) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"organizationIsDisabled\")\n );\n return this.router.createUrlTree([\"/\"]);\n }\n\n const permissionsCallback: (organization: Organization) => boolean =\n route.data?.organizationPermissions;\n const hasPermissions = permissionsCallback == null || permissionsCallback(org);\n\n if (!hasPermissions) {\n // Handle linkable ciphers for organizations the user only has view access to\n // https://bitwarden.atlassian.net/browse/EC-203\n const cipherId =\n state.root.queryParamMap.get(\"itemId\") || state.root.queryParamMap.get(\"cipherId\");\n if (cipherId) {\n return this.router.createUrlTree([\"/vault\"], {\n queryParams: {\n itemId: cipherId,\n },\n });\n }\n\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"accessDenied\"));\n return canAccessOrgAdmin(org)\n ? this.router.createUrlTree([\"/organizations\", org.id])\n : this.router.createUrlTree([\"/\"]);\n }\n\n return true;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport {\n canAccessOrgAdmin,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class OrganizationRedirectGuard implements CanActivate {\n constructor(private router: Router, private organizationService: OrganizationService) {}\n\n async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n const org = this.organizationService.get(route.params.organizationId);\n\n const customRedirect = route.data?.autoRedirectCallback;\n if (customRedirect) {\n let redirectPath = customRedirect(org);\n if (typeof redirectPath === \"string\") {\n redirectPath = [redirectPath];\n }\n return this.router.createUrlTree([state.url, ...redirectPath]);\n }\n\n if (canAccessOrgAdmin(org)) {\n return this.router.createUrlTree([\"/organizations\", org.id]);\n }\n return this.router.createUrlTree([\"/\"]);\n }\n}\n","
\n \n \n
\n
\n {{ activeOrganization.name }}\n {{ \"organization\" | i18n }}\n
\n
\n \n
\n
\n \n
\n \n
\n \n {{ \"organizationIsDisabled\" | i18n }}\n
\n
\n \n
\n \n {{ \"accessingUsingProvider\" | i18n: activeOrganization.providerName }}\n
\n
\n \n\n \n \n \n\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { map, Observable } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport {\n canAccessAdmin,\n isNotProviderUser,\n OrganizationService,\n} from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\n\n@Component({\n selector: \"app-organization-switcher\",\n templateUrl: \"organization-switcher.component.html\",\n})\nexport class OrganizationSwitcherComponent implements OnInit {\n constructor(private organizationService: OrganizationService, private i18nService: I18nService) {}\n\n @Input() activeOrganization: Organization = null;\n organizations$: Observable;\n\n loaded = false;\n\n async ngOnInit() {\n this.organizations$ = this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter(isNotProviderUser)),\n canAccessAdmin(this.i18nService),\n map((orgs) => orgs.sort(Utils.getSortFunction(this.i18nService, \"name\")))\n );\n\n this.loaded = true;\n }\n}\n","\n
\n
\n
\n \n \n {{\n \"vault\" | i18n\n }}\n {{\n \"members\" | i18n\n }}\n {{\n \"groups\" | 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 canAccessMembersTab,\n canAccessReportingTab,\n canAccessSettingsTab,\n canAccessVaultTab,\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 canShowVaultTab(organization: Organization): boolean {\n return canAccessVaultTab(organization);\n }\n\n canShowSettingsTab(organization: Organization): boolean {\n return canAccessSettingsTab(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","
\n
\n
\n
\n

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

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n
\n
\n \n \n -\n \n \n
\n \n \n {{ \"refresh\" | i18n }}\n \n
\n
\n
\n {{ \"noEventsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"timestamp\" | i18n }}\n {{ \"device\" | i18n }}\n {{ \"user\" | i18n }}{{ \"event\" | i18n }}
{{ e.date | date: \"medium\" }}\n \n {{ e.appName }}, {{ e.ip }}\n \n {{ e.userName }}\n
\n \n \n {{ \"loadMore\" | i18n }}\n \n
\n
\n \n
\n
\n
\n
\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { EventResponse } from \"@bitwarden/common/models/response/event.response\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\n\nimport { EventService } from \"../../core\";\n\n@Component({\n selector: \"app-entity-events\",\n templateUrl: \"entity-events.component.html\",\n})\nexport class EntityEventsComponent implements OnInit {\n @Input() name: string;\n @Input() entity: \"user\" | \"cipher\";\n @Input() entityId: string;\n @Input() organizationId: string;\n @Input() providerId: string;\n @Input() showUser = false;\n\n loading = true;\n loaded = false;\n events: any[];\n start: string;\n end: string;\n continuationToken: string;\n refreshPromise: Promise;\n morePromise: Promise;\n\n private orgUsersUserIdMap = new Map();\n private orgUsersIdMap = new Map();\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private eventService: EventService,\n private platformUtilsService: PlatformUtilsService,\n private userNamePipe: UserNamePipe,\n private logService: LogService,\n private organizationUserService: OrganizationUserService\n ) {}\n\n async ngOnInit() {\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n await this.load();\n }\n\n async load() {\n if (this.showUser) {\n const response = await this.organizationUserService.getAllUsers(this.organizationId);\n response.data.forEach((u) => {\n const name = this.userNamePipe.transform(u);\n this.orgUsersIdMap.set(u.id, { name: name, email: u.email });\n this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n });\n }\n await this.loadEvents(true);\n this.loaded = true;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.refreshPromise != null || this.morePromise != null) {\n return;\n }\n\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidDateRange\")\n );\n return;\n }\n\n this.loading = true;\n let response: ListResponse;\n try {\n let promise: Promise;\n if (this.entity === \"user\" && this.providerId) {\n promise = this.apiService.getEventsProviderUser(\n this.providerId,\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n } else if (this.entity === \"user\") {\n promise = this.apiService.getEventsOrganizationUser(\n this.organizationId,\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n } else {\n promise = this.apiService.getEventsCipher(\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n }\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n response = await promise;\n } catch (e) {\n this.logService.error(e);\n }\n\n this.continuationToken = response.continuationToken;\n const events = await Promise.all(\n response.data.map(async (r) => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = await this.eventService.getEventInfo(r);\n const user =\n this.showUser && userId != null && this.orgUsersUserIdMap.has(userId)\n ? this.orgUsersUserIdMap.get(userId)\n : null;\n return {\n message: eventInfo.message,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: user != null ? user.name : this.showUser ? this.i18nService.t(\"unknown\") : null,\n userEmail: user != null ? user.email : this.showUser ? \"\" : null,\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n };\n })\n );\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n}\n","type OrganizationUserBulkRequestEntry = {\n id: string;\n key: string;\n};\n\nexport class OrganizationUserBulkConfirmRequest {\n keys: OrganizationUserBulkRequestEntry[];\n\n constructor(keys: OrganizationUserBulkRequestEntry[]) {\n this.keys = keys;\n }\n}\n","
\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserBulkConfirmRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\nimport { BulkUserDetails } from \"./bulk-status.component\";\n\n@Component({\n selector: \"app-bulk-confirm\",\n templateUrl: \"bulk-confirm.component.html\",\n})\nexport class BulkConfirmComponent implements OnInit {\n @Input() organizationId: string;\n @Input() users: BulkUserDetails[];\n\n excludedUsers: BulkUserDetails[];\n filteredUsers: BulkUserDetails[];\n publicKeys: Map = new Map();\n fingerprints: Map = new Map();\n statuses: Map = new Map();\n\n loading = true;\n done = false;\n error: string;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n private organizationUserService: OrganizationUserService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n this.excludedUsers = this.users.filter((u) => !this.isAccepted(u));\n this.filteredUsers = this.users.filter((u) => this.isAccepted(u));\n\n if (this.filteredUsers.length <= 0) {\n this.done = true;\n }\n\n const response = await this.getPublicKeys();\n\n for (const entry of response.data) {\n const publicKey = Utils.fromB64ToArray(entry.key);\n const fingerprint = await this.cryptoService.getFingerprint(entry.userId, publicKey.buffer);\n if (fingerprint != null) {\n this.publicKeys.set(entry.id, publicKey);\n this.fingerprints.set(entry.id, fingerprint.join(\"-\"));\n }\n }\n\n this.loading = false;\n }\n\n async submit() {\n this.loading = true;\n try {\n const key = await this.getCryptoKey();\n const userIdsWithKeys: any[] = [];\n for (const user of this.filteredUsers) {\n const publicKey = this.publicKeys.get(user.id);\n if (publicKey == null) {\n continue;\n }\n const encryptedKey = await this.cryptoService.rsaEncrypt(key.key, publicKey.buffer);\n userIdsWithKeys.push({\n id: user.id,\n key: encryptedKey.encryptedString,\n });\n }\n const response = await this.postConfirmRequest(userIdsWithKeys);\n\n response.data.forEach((entry) => {\n const error = entry.error !== \"\" ? entry.error : this.i18nService.t(\"bulkConfirmMessage\");\n this.statuses.set(entry.id, error);\n });\n\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n this.loading = false;\n }\n\n protected isAccepted(user: BulkUserDetails) {\n return user.status === OrganizationUserStatusType.Accepted;\n }\n\n protected async getPublicKeys() {\n return await this.organizationUserService.postOrganizationUsersPublicKey(\n this.organizationId,\n this.filteredUsers.map((user) => user.id)\n );\n }\n\n protected getCryptoKey() {\n return this.cryptoService.getOrgKey(this.organizationId);\n }\n\n protected async postConfirmRequest(userIdsWithKeys: any[]) {\n const request = new OrganizationUserBulkConfirmRequest(userIdsWithKeys);\n return await this.organizationUserService.postOrganizationUserBulkConfirm(\n this.organizationId,\n request\n );\n }\n}\n","
\n
\n
\n
\n

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

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

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

\n \n ×\n \n
\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}{{ \"status\" | i18n }}
\n \n \n {{ item.user.email }}\n {{ item.user.name }}\n \n {{ item.message }}\n \n {{ item.message }}\n
\n
\n
\n \n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { ProviderUserStatusType } from \"@bitwarden/common/enums/providerUserStatusType\";\n\nexport interface BulkUserDetails {\n id: string;\n name: string;\n email: string;\n status: OrganizationUserStatusType | ProviderUserStatusType;\n}\n\ntype BulkStatusEntry = {\n user: BulkUserDetails;\n error: boolean;\n message: string;\n};\n\n@Component({\n selector: \"app-bulk-status\",\n templateUrl: \"bulk-status.component.html\",\n})\nexport class BulkStatusComponent {\n users: BulkStatusEntry[];\n loading = false;\n}\n","import { PolicyType } from \"../../enums/policyType\";\n\nexport class PolicyRequest {\n type: PolicyType;\n enabled: boolean;\n data: any;\n}\n","import { Directive, Input, OnInit } from \"@angular/core\";\nimport { UntypedFormControl, UntypedFormGroup } from \"@angular/forms\";\n\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { PolicyRequest } from \"@bitwarden/common/models/request/policy.request\";\nimport { PolicyResponse } from \"@bitwarden/common/models/response/policy.response\";\n\nexport abstract class BasePolicy {\n abstract name: string;\n abstract description: string;\n abstract type: PolicyType;\n abstract component: any;\n\n display(organization: Organization) {\n return true;\n }\n}\n\n@Directive()\nexport abstract class BasePolicyComponent implements OnInit {\n @Input() policyResponse: PolicyResponse;\n @Input() policy: BasePolicy;\n\n enabled = new UntypedFormControl(false);\n data: UntypedFormGroup = null;\n\n ngOnInit(): void {\n this.enabled.setValue(this.policyResponse.enabled);\n\n if (this.policyResponse.data != null) {\n this.loadData();\n }\n }\n\n loadData() {\n this.data.patchValue(this.policyResponse.data ?? {});\n }\n\n buildRequestData() {\n if (this.data != null) {\n return this.data.value;\n }\n\n return null;\n }\n\n buildRequest(policiesEnabledMap: Map) {\n const request = new PolicyRequest();\n request.enabled = this.enabled.value;\n request.type = this.policy.type;\n request.data = this.buildRequestData();\n\n return Promise.resolve(request);\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { LooseComponentsModule, SharedModule } from \"../../shared\";\n\nimport { DisableSendPolicyComponent } from \"./disable-send.component\";\nimport { MasterPasswordPolicyComponent } from \"./master-password.component\";\nimport { PasswordGeneratorPolicyComponent } from \"./password-generator.component\";\nimport { PersonalOwnershipPolicyComponent } from \"./personal-ownership.component\";\nimport { PoliciesComponent } from \"./policies.component\";\nimport { PolicyEditComponent } from \"./policy-edit.component\";\nimport { RequireSsoPolicyComponent } from \"./require-sso.component\";\nimport { ResetPasswordPolicyComponent } from \"./reset-password.component\";\nimport { SendOptionsPolicyComponent } from \"./send-options.component\";\nimport { SingleOrgPolicyComponent } from \"./single-org.component\";\nimport { TwoFactorAuthenticationPolicyComponent } from \"./two-factor-authentication.component\";\n\n@NgModule({\n imports: [SharedModule, LooseComponentsModule],\n declarations: [\n DisableSendPolicyComponent,\n MasterPasswordPolicyComponent,\n PasswordGeneratorPolicyComponent,\n PersonalOwnershipPolicyComponent,\n RequireSsoPolicyComponent,\n ResetPasswordPolicyComponent,\n SendOptionsPolicyComponent,\n SingleOrgPolicyComponent,\n TwoFactorAuthenticationPolicyComponent,\n PoliciesComponent,\n PolicyEditComponent,\n ],\n exports: [\n DisableSendPolicyComponent,\n MasterPasswordPolicyComponent,\n PasswordGeneratorPolicyComponent,\n PersonalOwnershipPolicyComponent,\n RequireSsoPolicyComponent,\n ResetPasswordPolicyComponent,\n SendOptionsPolicyComponent,\n SingleOrgPolicyComponent,\n TwoFactorAuthenticationPolicyComponent,\n PoliciesComponent,\n PolicyEditComponent,\n ],\n})\nexport class PoliciesModule {}\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class DisableSendPolicy extends BasePolicy {\n name = \"disableSend\";\n description = \"disableSendPolicyDesc\";\n type = PolicyType.DisableSend;\n component = DisableSendPolicyComponent;\n}\n\n@Component({\n selector: \"policy-disable-send\",\n templateUrl: \"disable-send.component.html\",\n})\nexport class DisableSendPolicyComponent extends BasePolicyComponent {}\n","\n {{ \"disableSendExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","\n {{ \"keyConnectorPolicyRestriction\" | i18n }}\n\n\n
\n
\n
\n \n \n
\n
\n\n
\n
\n \n \n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class MasterPasswordPolicy extends BasePolicy {\n name = \"masterPassPolicyTitle\";\n description = \"masterPassPolicyDesc\";\n type = PolicyType.MasterPassword;\n component = MasterPasswordPolicyComponent;\n}\n\n@Component({\n selector: \"policy-master-password\",\n templateUrl: \"master-password.component.html\",\n})\nexport class MasterPasswordPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n minComplexity: [null],\n minLength: [null],\n requireUpper: [null],\n requireLower: [null],\n requireNumbers: [null],\n requireSpecial: [null],\n });\n\n passwordScores: { name: string; value: number }[];\n showKeyConnectorInfo = false;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n i18nService: I18nService,\n private organizationService: OrganizationService\n ) {\n super();\n\n this.passwordScores = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: i18nService.t(\"weak\") + \" (0)\", value: 0 },\n { name: i18nService.t(\"weak\") + \" (1)\", value: 1 },\n { name: i18nService.t(\"weak\") + \" (2)\", value: 2 },\n { name: i18nService.t(\"good\") + \" (3)\", value: 3 },\n { name: i18nService.t(\"strong\") + \" (4)\", value: 4 },\n ];\n }\n\n async ngOnInit() {\n super.ngOnInit();\n const organization = await this.organizationService.get(this.policyResponse.organizationId);\n this.showKeyConnectorInfo = organization.keyConnectorEnabled;\n }\n}\n","
\n
\n
\n \n \n
\n
\n\n
\n
\n \n \n \n \n
\n
\n

{{ \"password\" | i18n }}

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

{{ \"passphrase\" | i18n }}

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

{{ \"resetPasswordPolicyAutoEnroll\" | i18n }}

\n

{{ \"resetPasswordPolicyAutoEnrollDescription\" | i18n }}

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

{{ \"options\" | i18n }}

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

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

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

{{ policy.description | i18n }}

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

{{ \"policies\" | i18n }}

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

{{ \"deleteOrganization\" | i18n }}

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

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

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

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

{{ \"organizationInfo\" | i18n }}

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

{{ \"apiKey\" | i18n }}

\n
\n

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

\n \n \n\n
\n

{{ \"dangerZone\" | i18n }}

\n
\n
\n
\n

{{ \"dangerZoneDesc\" | i18n }}

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

{{ \"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","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 { 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
\n \n {{ \"permission\" | i18n }}\n \n \n \n \n \n\n \n {{ selectorLabelText }}\n \n {{ selectorHelpText }}\n \n
\n\n\n \n \n {{ columnHeader }}\n \n
\n {{ \"permission\" | i18n }}\n
\n \n {{ \"role\" | i18n }}\n {{ \"group\" | i18n }}\n \n \n
\n \n \n \n
\n \n
\n
\n {{ item.labelName }}\n \n {{ \"invited\" | i18n }}\n \n
\n
\n {{ $any(item).email }}\n
\n
\n
\n\n
\n \n {{ item.labelName }}\n
\n \n\n \n \n \n\n \n \n {{ \"canEdit\" | i18n }}\n \n \n\n \n {{ permissionLabelId(item.readonlyPermission) | i18n }}\n \n \n \n\n \n {{ $any(item).role | userType: \"-\" }}\n \n\n \n {{ $any(item).viaGroupName ?? \"-\" }}\n \n\n \n \n \n \n \n {{ emptySelectionText }}\n \n
\n
\n","import { Component, forwardRef, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { ControlValueAccessor, FormBuilder, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { FormSelectionList } from \"@bitwarden/angular/utils/form-selection-list\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { SelectItemView } from \"@bitwarden/components/src/multi-select/models/select-item-view\";\n\nimport {\n AccessItemType,\n AccessItemValue,\n AccessItemView,\n CollectionPermission,\n} from \"./access-selector.models\";\n\nexport enum PermissionMode {\n /**\n * No permission controls or column present. No permission values are emitted.\n */\n Hidden = \"hidden\",\n\n /**\n * No permission controls. Column rendered an if available on an item. No permission values are emitted\n */\n Readonly = \"readonly\",\n\n /**\n * Permission Controls and column present. Permission values are emitted.\n */\n Edit = \"edit\",\n}\n\n@Component({\n selector: \"bit-access-selector\",\n templateUrl: \"access-selector.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AccessSelectorComponent),\n multi: true,\n },\n ],\n})\nexport class AccessSelectorComponent implements ControlValueAccessor, OnInit, OnDestroy {\n private destroy$ = new Subject();\n private notifyOnChange: (v: unknown) => void;\n private notifyOnTouch: () => void;\n private pauseChangeNotification: boolean;\n\n /**\n * The internal selection list that tracks the value of this form control / component.\n * It's responsible for keeping items sorted and synced with the rendered form controls\n * @protected\n */\n protected selectionList = new FormSelectionList((item) => {\n const permissionControl = this.formBuilder.control(this.initialPermission);\n\n const fg = this.formBuilder.group({\n id: item.id,\n type: item.type,\n permission: permissionControl,\n });\n\n // Disable entire row form group if readonly\n if (item.readonly) {\n fg.disable();\n }\n\n // Disable permission control if accessAllItems is enabled\n if (item.accessAllItems || this.permissionMode != PermissionMode.Edit) {\n permissionControl.disable();\n }\n\n return fg;\n }, this._itemComparator.bind(this));\n\n /**\n * Internal form group for this component.\n * @protected\n */\n protected formGroup = this.formBuilder.group({\n items: this.selectionList.formArray,\n });\n\n protected itemType = AccessItemType;\n protected permissionList = [\n { perm: CollectionPermission.View, labelId: \"canView\" },\n { perm: CollectionPermission.ViewExceptPass, labelId: \"canViewExceptPass\" },\n { perm: CollectionPermission.Edit, labelId: \"canEdit\" },\n { perm: CollectionPermission.EditExceptPass, labelId: \"canEditExceptPass\" },\n ];\n protected initialPermission = CollectionPermission.View;\n\n disabled: boolean;\n\n /**\n * List of all selectable items that. Sorted internally.\n */\n @Input()\n get items(): AccessItemView[] {\n return this.selectionList.allItems;\n }\n\n set items(val: AccessItemView[]) {\n const selected = (this.selectionList.formArray.getRawValue() ?? []).concat(\n val.filter((m) => m.readonly)\n );\n this.selectionList.populateItems(\n val.map((m) => {\n m.icon = m.icon ?? this.itemIcon(m); // Ensure an icon is set\n return m;\n }),\n selected\n );\n }\n\n /**\n * Permission mode that controls if the permission form controls and column should be present.\n */\n @Input()\n get permissionMode(): PermissionMode {\n return this._permissionMode;\n }\n\n set permissionMode(value: PermissionMode) {\n this._permissionMode = value;\n // Toggle any internal permission controls\n for (const control of this.selectionList.formArray.controls) {\n if (value == PermissionMode.Edit) {\n control.get(\"permission\").enable();\n } else {\n control.get(\"permission\").disable();\n }\n }\n }\n private _permissionMode: PermissionMode = PermissionMode.Hidden;\n\n /**\n * Column header for the selected items table\n */\n @Input() columnHeader: string;\n\n /**\n * Label used for the ng selector\n */\n @Input() selectorLabelText: string;\n\n /**\n * Helper text displayed under the ng selector\n */\n @Input() selectorHelpText: string;\n\n /**\n * Text that is shown in the table when no items are selected\n */\n @Input() emptySelectionText: string;\n\n /**\n * Flag for if the member roles column should be present\n */\n @Input() showMemberRoles: boolean;\n\n /**\n * Flag for if the group column should be present\n */\n @Input() showGroupColumn: boolean;\n\n constructor(\n private readonly formBuilder: FormBuilder,\n private readonly i18nService: I18nService\n ) {}\n\n /** Required for NG_VALUE_ACCESSOR */\n registerOnChange(fn: any): void {\n this.notifyOnChange = fn;\n }\n\n /** Required for NG_VALUE_ACCESSOR */\n registerOnTouched(fn: any): void {\n this.notifyOnTouch = fn;\n }\n\n /** Required for NG_VALUE_ACCESSOR */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n\n // Keep the internal FormGroup in sync\n if (this.disabled) {\n this.formGroup.disable();\n } else {\n this.formGroup.enable();\n }\n }\n\n /** Required for NG_VALUE_ACCESSOR */\n writeValue(selectedItems: AccessItemValue[]): void {\n // Modifying the selection list, mistakenly fires valueChanges in the\n // internal form array, so we need to know to pause external notification\n this.pauseChangeNotification = true;\n\n // Always clear the internal selection list on a new value\n this.selectionList.deselectAll();\n\n // We need to also select any read only items to appear in the table\n this.selectionList.selectItems(this.items.filter((m) => m.readonly).map((m) => m.id));\n\n // If the new value is null, then we're done\n if (selectedItems == null) {\n this.pauseChangeNotification = false;\n return;\n }\n\n // Unable to handle other value types, throw\n if (!Array.isArray(selectedItems)) {\n throw new Error(\"The access selector component only supports Array form values!\");\n }\n\n // Iterate and internally select each item\n for (const value of selectedItems) {\n this.selectionList.selectItem(value.id, value);\n }\n\n this.pauseChangeNotification = false;\n }\n\n ngOnInit() {\n // Watch the internal formArray for changes and propagate them\n this.selectionList.formArray.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((v) => {\n if (!this.notifyOnChange || this.pauseChangeNotification) {\n return;\n }\n // Disabled form arrays emit values for disabled controls, we override this to emit an empty array to avoid\n // emitting values for disabled controls that are \"readonly\" in the table\n if (this.selectionList.formArray.disabled) {\n this.notifyOnChange([]);\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 return (\n a.type - b.type ||\n this.i18nService.collator.compare(a.listName, b.listName) ||\n this.i18nService.collator.compare(a.labelName, b.labelName) ||\n Number(b.readonly) - Number(a.readonly)\n );\n }\n}\n","import { OrganizationUserStatusType } from \"@bitwarden/common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"@bitwarden/common/enums/organizationUserType\";\nimport { SelectItemView } from \"@bitwarden/components\";\n\nimport { CollectionAccessSelectionView } from \"../../../core\";\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 CollectionAccessSelectionView interface to one of the new CollectionPermission values\n * for the dropdown in the AccessSelectorComponent\n * @param value\n */\nexport const convertToPermission = (value: CollectionAccessSelectionView) => {\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 CollectionAccessView class using the CollectionPermission\n * to determine the values for `readOnly` and `hidePassword`\n * @param value\n */\nexport const convertToSelectionView = (value: AccessItemValue) => {\n return new CollectionAccessSelectionView({\n id: value.id,\n readOnly: readOnly(value.permission),\n hidePasswords: 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 { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../../shared/shared.module\";\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 { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { Component, Input } from \"@angular/core\";\n\nimport { Option } from \"./option\";\n\n@Component({\n selector: \"bit-option\",\n template: ``,\n})\nexport class OptionComponent implements Option {\n @Input()\n icon?: string;\n\n @Input()\n value?: T = undefined;\n\n @Input()\n label?: string;\n\n private _disabled = false;\n @Input()\n get disabled() {\n return this._disabled;\n }\n set disabled(value: boolean | \"\") {\n this._disabled = coerceBooleanProperty(value);\n }\n}\n","\n \n
\n
\n \n
\n
\n {{ item.label }}\n
\n
\n
\n\n","import {\n Component,\n ContentChildren,\n HostBinding,\n Input,\n Optional,\n QueryList,\n Self,\n ViewChild,\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\";\n\nimport { Option } from \"./option\";\nimport { OptionComponent } from \"./option.component\";\n\nlet nextId = 0;\n\n@Component({\n selector: \"bit-select\",\n templateUrl: \"select.component.html\",\n providers: [{ provide: BitFormFieldControl, useExisting: SelectComponent }],\n})\nexport class SelectComponent implements BitFormFieldControl, ControlValueAccessor {\n @ViewChild(NgSelectComponent) select: NgSelectComponent;\n\n /** Optional: Options can be provided using an array input or using `bit-option` */\n @Input() items: Option[] = [];\n @Input() placeholder = this.i18nService.t(\"selectPlaceholder\");\n\n protected selectedValue: T;\n protected selectedOption: Option;\n protected searchInputId = `bit-select-search-input-${nextId++}`;\n\n private notifyOnChange?: (value: T) => void;\n private notifyOnTouched?: () => void;\n\n constructor(private i18nService: I18nService, @Optional() @Self() private ngControl?: NgControl) {\n if (ngControl != null) {\n ngControl.valueAccessor = this;\n }\n }\n\n @ContentChildren(OptionComponent)\n protected set options(value: QueryList>) {\n this.items = value.toArray();\n this.selectedOption = this.findSelectedOption(this.items, this.selectedValue);\n }\n\n @HostBinding(\"class\") protected classes = [\"tw-block\", \"tw-w-full\"];\n\n @HostBinding()\n @Input()\n get disabled() {\n return this._disabled ?? this.ngControl?.disabled ?? false;\n }\n set disabled(value: any) {\n this._disabled = value != null && value !== false;\n }\n private _disabled: boolean;\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n writeValue(obj: T): void {\n this.selectedValue = obj;\n this.selectedOption = this.findSelectedOption(this.items, this.selectedValue);\n }\n\n /**Implemented as part of NG_VALUE_ACCESSOR */\n registerOnChange(fn: (value: T) => 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(option: Option | null) {\n if (!this.notifyOnChange) {\n return;\n }\n\n this.notifyOnChange(option?.value);\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 private findSelectedOption(items: Option[], value: T): Option | undefined {\n return items.find((item) => item.value === value);\n }\n}\n","import { DIALOG_DATA, DialogConfig, DialogRef } from \"@angular/cdk/dialog\";\nimport { Component, Inject, OnDestroy, OnInit } from \"@angular/core\";\nimport { FormBuilder, Validators } from \"@angular/forms\";\nimport { combineLatest, of, shareReplay, Subject, switchMap, takeUntil } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserUserDetailsResponse } from \"@bitwarden/common/abstractions/organization-user/responses\";\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 { CollectionView } from \"@bitwarden/common/src/models/view/collection.view\";\nimport { BitValidators, DialogService } from \"@bitwarden/components\";\n\nimport {\n CollectionAdminService,\n CollectionAdminView,\n GroupService,\n GroupView,\n} from \"../../../core\";\nimport {\n AccessItemType,\n AccessItemValue,\n AccessItemView,\n convertToPermission,\n convertToSelectionView,\n PermissionMode,\n} from \"../access-selector\";\n\nexport enum CollectionDialogTabType {\n Info = 0,\n Access = 1,\n}\n\nexport interface CollectionDialogParams {\n collectionId?: string;\n organizationId: string;\n initialTab?: CollectionDialogTabType;\n parentCollectionId?: string;\n}\n\nexport enum CollectionDialogResult {\n Saved = \"saved\",\n Canceled = \"canceled\",\n Deleted = \"deleted\",\n}\n\n@Component({\n selector: \"app-collection-dialog\",\n templateUrl: \"collection-dialog.component.html\",\n})\nexport class CollectionDialogComponent implements OnInit, OnDestroy {\n private destroy$ = new Subject();\n\n protected tabIndex: CollectionDialogTabType;\n protected loading = true;\n protected organization?: Organization;\n protected collection?: CollectionView;\n protected nestOptions: CollectionView[] = [];\n protected accessItems: AccessItemView[] = [];\n protected deletedParentName: string | undefined;\n protected formGroup = this.formBuilder.group({\n name: [\"\", [Validators.required, BitValidators.forbiddenCharacters([\"/\"])]],\n externalId: \"\",\n parent: undefined as string | undefined,\n access: [[] as AccessItemValue[]],\n });\n protected PermissionMode = PermissionMode;\n\n constructor(\n @Inject(DIALOG_DATA) private params: CollectionDialogParams,\n private formBuilder: FormBuilder,\n private dialogRef: DialogRef,\n private organizationService: OrganizationService,\n private groupService: GroupService,\n private collectionService: CollectionAdminService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private organizationUserService: OrganizationUserService\n ) {\n this.tabIndex = params.initialTab ?? CollectionDialogTabType.Info;\n }\n\n ngOnInit() {\n const organization$ = of(this.organizationService.get(this.params.organizationId)).pipe(\n shareReplay({ refCount: true, bufferSize: 1 })\n );\n const groups$ = organization$.pipe(\n switchMap((organization) => {\n if (!organization.useGroups) {\n return of([] as GroupView[]);\n }\n\n return this.groupService.getAll(this.params.organizationId);\n })\n );\n\n combineLatest({\n organization: organization$,\n collections: this.collectionService.getAll(this.params.organizationId),\n collectionDetails: this.params.collectionId\n ? this.collectionService.get(this.params.organizationId, this.params.collectionId)\n : of(null),\n groups: groups$,\n users: this.organizationUserService.getAllUsers(this.params.organizationId),\n })\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ organization, collections, collectionDetails, groups, users }) => {\n this.organization = organization;\n this.accessItems = [].concat(\n groups.map(mapGroupToAccessItemView),\n users.data.map(mapUserToAccessItemView)\n );\n\n if (this.params.collectionId) {\n this.collection = collections.find((c) => c.id === this.collectionId);\n this.nestOptions = collections.filter((c) => c.id !== this.collectionId);\n\n if (!this.collection) {\n throw new Error(\"Could not find collection to edit.\");\n }\n\n const { name, parent } = parseName(this.collection);\n if (parent !== undefined && !this.nestOptions.find((c) => c.name === parent)) {\n this.deletedParentName = parent;\n }\n\n const accessSelections = mapToAccessSelections(collectionDetails);\n this.formGroup.patchValue({\n name,\n externalId: this.collection.externalId,\n parent,\n access: accessSelections,\n });\n } else {\n this.nestOptions = collections;\n const parent = collections.find((c) => c.id === this.params.parentCollectionId);\n this.formGroup.patchValue({ parent: parent?.name ?? undefined });\n }\n\n this.loading = false;\n });\n }\n\n protected get collectionId() {\n return this.params.collectionId;\n }\n\n protected get editMode() {\n return this.params.collectionId != undefined;\n }\n\n protected async cancel() {\n this.close(CollectionDialogResult.Canceled);\n }\n\n protected submit = async () => {\n this.formGroup.markAllAsTouched();\n\n if (this.formGroup.invalid) {\n if (this.tabIndex === CollectionDialogTabType.Access) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"fieldOnTabRequiresAttention\", this.i18nService.t(\"collectionInfo\"))\n );\n }\n return;\n }\n\n const collectionView = new CollectionAdminView();\n collectionView.id = this.params.collectionId;\n collectionView.organizationId = this.params.organizationId;\n collectionView.externalId = this.formGroup.controls.externalId.value;\n collectionView.groups = this.formGroup.controls.access.value\n .filter((v) => v.type === AccessItemType.Group)\n .map(convertToSelectionView);\n collectionView.users = this.formGroup.controls.access.value\n .filter((v) => v.type === AccessItemType.Member)\n .map(convertToSelectionView);\n\n const parent = this.formGroup.controls.parent.value;\n if (parent) {\n collectionView.name = `${parent}/${this.formGroup.controls.name.value}`;\n } else {\n collectionView.name = this.formGroup.controls.name.value;\n }\n\n await this.collectionService.save(collectionView);\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\n this.editMode ? \"editedCollectionId\" : \"createdCollectionId\",\n collectionView.name\n )\n );\n\n this.close(CollectionDialogResult.Saved);\n };\n\n protected delete = async () => {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteCollectionConfirmation\"),\n this.collection?.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n\n if (!confirmed && this.params.collectionId) {\n return false;\n }\n\n await this.collectionService.delete(this.params.organizationId, this.params.collectionId);\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedCollectionId\", this.collection?.name)\n );\n\n this.close(CollectionDialogResult.Deleted);\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private close(result: CollectionDialogResult) {\n this.dialogRef.close(result);\n }\n}\n\nfunction parseName(collection: CollectionView) {\n const nameParts = collection.name?.split(\"/\");\n const name = nameParts[nameParts.length - 1];\n const parent = nameParts.length > 1 ? nameParts.slice(0, -1).join(\"/\") : undefined;\n\n return { name, parent };\n}\n\nfunction mapGroupToAccessItemView(group: GroupView): AccessItemView {\n return {\n id: group.id,\n type: AccessItemType.Group,\n listName: group.name,\n labelName: group.name,\n accessAllItems: group.accessAll,\n readonly: group.accessAll,\n };\n}\n\n// TODO: Use view when user apis are migrated to a service\nfunction mapUserToAccessItemView(user: OrganizationUserUserDetailsResponse): AccessItemView {\n return {\n id: user.id,\n type: AccessItemType.Member,\n email: user.email,\n role: user.type,\n listName: user.name?.length > 0 ? `${user.name} (${user.email})` : user.email,\n labelName: user.name ?? user.email,\n status: user.status,\n accessAllItems: user.accessAll,\n readonly: user.accessAll,\n };\n}\n\nfunction mapToAccessSelections(collectionDetails: CollectionAdminView): AccessItemValue[] {\n if (collectionDetails == undefined) {\n return [];\n }\n return [].concat(\n collectionDetails.groups.map((selection) => ({\n id: selection.id,\n type: AccessItemType.Group,\n permission: convertToPermission(selection),\n })),\n collectionDetails.users.map((selection) => ({\n id: selection.id,\n type: AccessItemType.Member,\n permission: convertToPermission(selection),\n }))\n );\n}\n\n/**\n * Strongly typed helper to open a CollectionDialog\n * @param dialogService Instance of the dialog service that will be used to open the dialog\n * @param config Configuration for the dialog\n */\nexport function openCollectionDialog(\n dialogService: DialogService,\n config: DialogConfig\n) {\n return dialogService.open(\n CollectionDialogComponent,\n config\n );\n}\n","
\n \n \n \n {{ \"editCollection\" | i18n }}\n {{\n collection.name\n }}\n \n \n {{ \"newCollection\" | i18n }}\n \n \n
\n \n \n \n \n \n \n {{ \"name\" | i18n }}\n \n \n\n \n {{ \"externalId\" | i18n }}\n \n {{ \"externalIdDesc\" | i18n }}\n \n\n \n {{ \"nestCollectionUnder\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n \n {{ \"cancel\" | i18n }}\n \n \n
\n
\n
\n","import { AbstractControl, FormControl, ValidationErrors, ValidatorFn } from \"@angular/forms\";\n\nexport function forbiddenCharacters(characters: string[]): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!(control instanceof FormControl)) {\n throw new Error(\"forbiddenCharacters only supports validating FormControls\");\n }\n\n if (control.value === null || control.value === undefined) {\n return null;\n }\n\n const value = String(control.value);\n\n for (const char of value) {\n if (characters.includes(char)) {\n return { forbiddenCharacters: { value: control.value, characters } };\n }\n }\n\n return null;\n };\n}\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 { OptionComponent } from \"./option.component\";\nimport { SelectComponent } from \"./select.component\";\n\n@NgModule({\n imports: [CommonModule, NgSelectModule, FormsModule],\n declarations: [SelectComponent, OptionComponent],\n exports: [SelectComponent, OptionComponent],\n})\nexport class SelectModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SelectModule } from \"@bitwarden/components\";\n\nimport { SharedModule } from \"../../../../shared/shared.module\";\nimport { AccessSelectorModule } from \"../access-selector\";\n\nimport { CollectionDialogComponent } from \"./collection-dialog.component\";\n\n@NgModule({\n imports: [SharedModule, AccessSelectorModule, SelectModule],\n declarations: [CollectionDialogComponent],\n exports: [CollectionDialogComponent],\n})\nexport class CollectionDialogModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared/shared.module\";\n\nimport { AccessSelectorModule } from \"./components/access-selector\";\nimport { CollectionDialogModule } from \"./components/collection-dialog\";\nimport { SearchInputComponent } from \"./components/search-input/search-input.component\";\n\n@NgModule({\n imports: [SharedModule, CollectionDialogModule, AccessSelectorModule],\n declarations: [SearchInputComponent],\n exports: [SharedModule, CollectionDialogModule, AccessSelectorModule, SearchInputComponent],\n})\nexport class SharedOrganizationModule {}\n","
\n
\n \n
\n

{{ title }}

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

{{ \"ownership\" | i18n }}

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

{{ \"collections\" | i18n }}

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

{{ \"options\" | i18n }}

\n
\n \n \n \n \n \n
\n
\n \n
\n \n \n {{ (cipher?.isDeleted ? \"restore\" : \"save\") | i18n }}\n \n \n
\n \n \n \n \n \n \n \n
\n
\n \n \n\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { 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 { 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 { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherData } from \"@bitwarden/common/vault/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\nimport { CipherCreateRequest } from \"@bitwarden/common/vault/models/request/cipher-create.request\";\nimport { CipherRequest } from \"@bitwarden/common/vault/models/request/cipher.request\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"../../../vault/app/vault/add-edit.component\";\n\n@Component({\n selector: \"app-org-vault-add-edit\",\n templateUrl: \"../../../vault/app/vault/add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n originalCipher: Cipher = null;\n protected override componentName = \"app-org-vault-add-edit\";\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n totpService: TotpService,\n passwordGenerationService: PasswordGenerationService,\n private apiService: ApiService,\n messagingService: MessagingService,\n eventCollectionService: EventCollectionService,\n policyService: PolicyService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService,\n organizationService: OrganizationService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n totpService,\n passwordGenerationService,\n messagingService,\n eventCollectionService,\n policyService,\n organizationService,\n logService,\n passwordRepromptService\n );\n }\n\n protected allowOwnershipAssignment() {\n if (\n this.ownershipOptions != null &&\n (this.ownershipOptions.length > 1 || !this.allowPersonal)\n ) {\n if (this.organization != null) {\n return this.cloneMode && this.organization.canEditAnyCollection;\n } else {\n return !this.editMode || this.cloneMode;\n }\n }\n return false;\n }\n\n protected loadCollections() {\n if (!this.organization.canEditAnyCollection) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected async loadCipher() {\n if (!this.organization.canEditAnyCollection) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n const data = new CipherData(response);\n\n data.edit = true;\n const cipher = new Cipher(data);\n this.originalCipher = cipher;\n return cipher;\n }\n\n protected encryptCipher() {\n if (!this.organization.canEditAnyCollection) {\n return super.encryptCipher();\n }\n return this.cipherService.encrypt(this.cipher, null, this.originalCipher);\n }\n\n protected async saveCipher(cipher: Cipher) {\n if (!this.organization.canEditAnyCollection || cipher.organizationId == null) {\n return super.saveCipher(cipher);\n }\n if (this.editMode && !this.cloneMode) {\n const request = new CipherRequest(cipher);\n return this.apiService.putCipherAdmin(this.cipherId, request);\n } else {\n const request = new CipherCreateRequest(cipher);\n return this.apiService.postCipherAdmin(request);\n }\n }\n\n protected async deleteCipher() {\n if (!this.organization.canEditAnyCollection) {\n return super.deleteCipher();\n }\n return this.cipher.isDeleted\n ? this.apiService.deleteCipherAdmin(this.cipherId)\n : this.apiService.putDeleteCipherAdmin(this.cipherId);\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { GetCollectionNameFromIdPipe } from \"./get-collection-name.pipe\";\nimport { GetGroupNameFromIdPipe } from \"./get-group-name.pipe\";\nimport { GetOrgNameFromIdPipe } from \"./get-organization-name.pipe\";\n\n@NgModule({\n declarations: [GetOrgNameFromIdPipe, GetCollectionNameFromIdPipe, GetGroupNameFromIdPipe],\n exports: [GetOrgNameFromIdPipe, GetCollectionNameFromIdPipe, GetGroupNameFromIdPipe],\n})\nexport class PipesModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { PipesModule } from \"../../../../vault/app/vault/pipes/pipes.module\";\nimport { SharedModule } from \"../../../shared\";\n\nimport { CollectionNameBadgeComponent } from \"./collection-name.badge.component\";\n\n@NgModule({\n imports: [SharedModule, PipesModule],\n declarations: [CollectionNameBadgeComponent],\n exports: [CollectionNameBadgeComponent],\n})\nexport class CollectionBadgeModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { PipesModule } from \"../../../../vault/app/vault/pipes/pipes.module\";\nimport { SharedModule } from \"../../../shared\";\n\nimport { GroupNameBadgeComponent } from \"./group-name-badge.component\";\n\n@NgModule({\n imports: [SharedModule, PipesModule],\n declarations: [GroupNameBadgeComponent],\n exports: [GroupNameBadgeComponent],\n})\nexport class GroupBadgeModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../../app/shared\";\n\nimport { BulkDeleteDialogComponent } from \"./bulk-delete-dialog/bulk-delete-dialog.component\";\nimport { BulkMoveDialogComponent } from \"./bulk-move-dialog/bulk-move-dialog.component\";\nimport { BulkRestoreDialogComponent } from \"./bulk-restore-dialog/bulk-restore-dialog.component\";\nimport { BulkShareDialogComponent } from \"./bulk-share-dialog/bulk-share-dialog.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [\n BulkDeleteDialogComponent,\n BulkMoveDialogComponent,\n BulkRestoreDialogComponent,\n BulkShareDialogComponent,\n ],\n exports: [\n BulkDeleteDialogComponent,\n BulkMoveDialogComponent,\n BulkRestoreDialogComponent,\n BulkShareDialogComponent,\n ],\n})\nexport class BulkDialogsModule {}\n","import { CipherWithIdRequest } from \"../../vault/models/request/cipher-with-id.request\";\nimport { FolderWithIdRequest } from \"../../vault/models/request/folder-with-id.request\";\n\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","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 { Component } from \"@angular/core\";\nimport { firstValueFrom } 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 { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { UpdateKeyRequest } from \"@bitwarden/common/models/request/update-key.request\";\nimport { CipherWithIdRequest } from \"@bitwarden/common/vault//models/request/cipher-with-id.request\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { FolderWithIdRequest } from \"@bitwarden/common/vault/models/request/folder-with-id.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 { ApiService } from \"@bitwarden/common/abstractions/api.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 { EncArrayBuffer } from \"@bitwarden/common/models/domain/enc-array-buffer\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\nimport { AttachmentView } from \"@bitwarden/common/vault/models/view/attachment.view\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\n\n@Directive()\nexport class AttachmentsComponent implements OnInit {\n @Input() cipherId: string;\n @Output() onUploadedAttachment = new EventEmitter();\n @Output() onDeletedAttachment = new EventEmitter();\n @Output() onReuploadedAttachment = new EventEmitter();\n\n cipher: CipherView;\n cipherDomain: Cipher;\n hasUpdatedKey: boolean;\n canAccessAttachments: boolean;\n formPromise: Promise;\n deletePromises: { [id: string]: Promise } = {};\n reuploadPromises: { [id: string]: Promise } = {};\n emergencyAccessId?: string = null;\n protected componentName = \"\";\n\n constructor(\n protected cipherService: CipherService,\n protected i18nService: I18nService,\n protected cryptoService: CryptoService,\n protected platformUtilsService: PlatformUtilsService,\n protected apiService: ApiService,\n protected win: Window,\n protected logService: LogService,\n protected stateService: StateService,\n protected fileDownloadService: FileDownloadService\n ) {}\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit() {\n if (!this.hasUpdatedKey) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"updateKey\")\n );\n return;\n }\n\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n if (files[0].size > 524288000) {\n // 500 MB\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"maxFileSize\")\n );\n return;\n }\n\n try {\n this.formPromise = this.saveCipherAttachment(files[0]);\n this.cipherDomain = await this.formPromise;\n this.cipher = await this.cipherDomain.decrypt();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"attachmentSaved\"));\n this.onUploadedAttachment.emit();\n } catch (e) {\n this.logService.error(e);\n }\n\n // reset file input\n // ref: https://stackoverflow.com/a/20552042\n fileEl.type = \"\";\n fileEl.type = \"file\";\n fileEl.value = \"\";\n }\n\n async delete(attachment: AttachmentView) {\n if (this.deletePromises[attachment.id] != null) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteAttachmentConfirmation\"),\n this.i18nService.t(\"deleteAttachment\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\",\n false,\n this.componentName != \"\" ? this.componentName + \" .modal-content\" : null\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n await this.deletePromises[attachment.id];\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedAttachment\"));\n const i = this.cipher.attachments.indexOf(attachment);\n if (i > -1) {\n this.cipher.attachments.splice(i, 1);\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n this.deletePromises[attachment.id] = null;\n this.onDeletedAttachment.emit();\n }\n\n async download(attachment: AttachmentView) {\n const a = attachment as any;\n if (a.downloading) {\n return;\n }\n\n if (!this.canAccessAttachments) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"premiumRequired\"),\n this.i18nService.t(\"premiumRequiredDesc\")\n );\n return;\n }\n\n let url: string;\n try {\n const attachmentDownloadResponse = await this.apiService.getAttachmentData(\n this.cipher.id,\n attachment.id,\n this.emergencyAccessId\n );\n url = attachmentDownloadResponse.url;\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n url = attachment.url;\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n\n a.downloading = true;\n const response = await fetch(new Request(url, { cache: \"no-store\" }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n a.downloading = false;\n return;\n }\n\n try {\n const encBuf = await EncArrayBuffer.fromResponse(response);\n const key =\n attachment.key != null\n ? attachment.key\n : await this.cryptoService.getOrgKey(this.cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(encBuf, key);\n this.fileDownloadService.download({\n fileName: attachment.fileName,\n blobData: decBuf,\n });\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n\n a.downloading = false;\n }\n\n protected async init() {\n this.cipherDomain = await this.loadCipher();\n this.cipher = await this.cipherDomain.decrypt();\n\n this.hasUpdatedKey = await this.cryptoService.hasEncKey();\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n this.canAccessAttachments = canAccessPremium || this.cipher.organizationId != null;\n\n if (!this.canAccessAttachments) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"premiumRequiredDesc\"),\n this.i18nService.t(\"premiumRequired\"),\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"cancel\")\n );\n if (confirmed) {\n this.platformUtilsService.launchUri(\"https://vault.bitwarden.com/#/?premium=purchase\");\n }\n } else if (!this.hasUpdatedKey) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"updateKey\"),\n this.i18nService.t(\"featureUnavailable\"),\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n if (confirmed) {\n this.platformUtilsService.launchUri(\n \"https://bitwarden.com/help/account-encryption-key/#rotate-your-encryption-key\"\n );\n }\n }\n }\n\n protected async reuploadCipherAttachment(attachment: AttachmentView, admin: boolean) {\n const a = attachment as any;\n if (attachment.key != null || a.downloading || this.reuploadPromises[attachment.id] != null) {\n return;\n }\n\n try {\n this.reuploadPromises[attachment.id] = Promise.resolve().then(async () => {\n // 1. Download\n a.downloading = true;\n const response = await fetch(new Request(attachment.url, { cache: \"no-store\" }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n a.downloading = false;\n return;\n }\n\n try {\n // 2. Resave\n const encBuf = await EncArrayBuffer.fromResponse(response);\n const key =\n attachment.key != null\n ? attachment.key\n : await this.cryptoService.getOrgKey(this.cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(encBuf, key);\n this.cipherDomain = await this.cipherService.saveAttachmentRawWithServer(\n this.cipherDomain,\n attachment.fileName,\n decBuf,\n admin\n );\n this.cipher = await this.cipherDomain.decrypt();\n\n // 3. Delete old\n this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n await this.deletePromises[attachment.id];\n const foundAttachment = this.cipher.attachments.filter((a2) => a2.id === attachment.id);\n if (foundAttachment.length > 0) {\n const i = this.cipher.attachments.indexOf(foundAttachment[0]);\n if (i > -1) {\n this.cipher.attachments.splice(i, 1);\n }\n }\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"attachmentSaved\")\n );\n this.onReuploadedAttachment.emit();\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n\n a.downloading = false;\n });\n await this.reuploadPromises[attachment.id];\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected saveCipherAttachment(file: File) {\n return this.cipherService.saveAttachmentWithServer(this.cipherDomain, file);\n }\n\n protected deleteCipherAttachment(attachmentId: string) {\n return this.cipherService.deleteAttachmentWithServer(this.cipher.id, attachmentId);\n }\n\n protected async reupload(attachment: AttachmentView) {\n // TODO: This should be removed but is needed since we re-use the same template\n }\n}\n","
\n
\n \n
\n

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

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

{{ \"newAttachment\" | i18n }}

\n \n \n {{ \"maxFileSize\" | i18n }}\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"@bitwarden/angular/vault/components/attachments.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.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 { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { AttachmentView } from \"@bitwarden/common/vault/models/view/attachment.view\";\n\n@Component({\n selector: \"app-vault-attachments\",\n templateUrl: \"attachments.component.html\",\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n protected override componentName = \"app-vault-attachments\";\n\n constructor(\n cipherService: CipherService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n logService: LogService,\n fileDownloadService: FileDownloadService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n platformUtilsService,\n apiService,\n window,\n logService,\n stateService,\n fileDownloadService\n );\n }\n\n protected async reupload(attachment: AttachmentView) {\n if (this.showFixOldAttachments(attachment)) {\n await this.reuploadCipherAttachment(attachment, false);\n }\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return attachment.key == null && this.cipher.organizationId == null;\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\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\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.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 { 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\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\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 { Directive, EventEmitter, Input, OnInit, Output } 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 { FolderApiServiceAbstraction } from \"@bitwarden/common/vault/abstractions/folder/folder-api.service.abstraction\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { FolderView } from \"@bitwarden/common/vault/models/view/folder.view\";\n\n@Directive()\nexport class FolderAddEditComponent implements OnInit {\n @Input() folderId: string;\n @Output() onSavedFolder = new EventEmitter();\n @Output() onDeletedFolder = new EventEmitter();\n\n editMode = false;\n folder: FolderView = new FolderView();\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n protected componentName = \"\";\n\n constructor(\n protected folderService: FolderService,\n protected folderApiService: FolderApiServiceAbstraction,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit(): Promise {\n if (this.folder.name == null || this.folder.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n try {\n const folder = await this.folderService.encrypt(this.folder);\n this.formPromise = this.folderApiService.save(folder);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedFolder\" : \"addedFolder\")\n );\n this.onSavedFolder.emit(this.folder);\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n async delete(): Promise {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteFolderConfirmation\"),\n this.i18nService.t(\"deleteFolder\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\",\n false,\n this.componentName != \"\" ? this.componentName + \" .modal-content\" : null\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.folderApiService.delete(this.folder.id);\n await this.deletePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedFolder\"));\n this.onDeletedFolder.emit(this.folder);\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n protected async init() {\n this.editMode = this.folderId != null;\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editFolder\");\n const folder = await this.folderService.get(this.folderId);\n this.folder = await folder.decrypt();\n } else {\n this.title = this.i18nService.t(\"addFolder\");\n }\n }\n}\n","
\n
\n \n
\n

{{ title }}

\n \n ×\n \n
\n
\n \n \n
\n
\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { FolderAddEditComponent as BaseFolderAddEditComponent } from \"@bitwarden/angular/vault/components/folder-add-edit.component\";\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 { FolderApiServiceAbstraction } from \"@bitwarden/common/vault/abstractions/folder/folder-api.service.abstraction\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\n\n@Component({\n selector: \"app-folder-add-edit\",\n templateUrl: \"folder-add-edit.component.html\",\n})\nexport class FolderAddEditComponent extends BaseFolderAddEditComponent {\n protected override componentName = \"app-folder-add-edit\";\n constructor(\n folderService: FolderService,\n folderApiService: FolderApiServiceAbstraction,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService\n ) {\n super(folderService, folderApiService, i18nService, platformUtilsService, logService);\n }\n}\n","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","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { firstValueFrom, map, Observable, Subject, takeUntil } from \"rxjs\";\n\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 { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { Checkable, isChecked } from \"@bitwarden/common/types/checkable\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\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 { 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\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\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 { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\n\nimport {\n CipherStatus,\n CipherTypeFilter,\n CollectionFilter,\n FolderFilter,\n OrganizationFilter,\n} from \"./vault-filter.type\";\n\nexport type VaultFilterFunction = (cipher: CipherView) => boolean;\n\n// TODO: Replace shared VaultFilter Model with this one and\n// refactor browser and desktop code to use this model.\nexport class VaultFilter {\n selectedOrganizationNode: TreeNode;\n selectedCipherTypeNode: TreeNode;\n selectedFolderNode: TreeNode;\n selectedCollectionNode: TreeNode;\n\n /**\n * A list of collection filters that form a chain from the organization root to currently selected collection.\n * To be used when rendering a breadcrumb UI for navigating the collection hierarchy.\n * Begins from the organization root and excludes the currently selected collection.\n */\n get collectionBreadcrumbs(): TreeNode[] {\n if (!this.isCollectionSelected) {\n return [];\n }\n\n const collections = [this.selectedCollectionNode];\n while (collections[collections.length - 1].parent != undefined) {\n collections.push(collections[collections.length - 1].parent);\n }\n\n return collections.slice(1).reverse();\n }\n\n /**\n * The vault is filtered by a specific collection\n */\n get isCollectionSelected(): boolean {\n return (\n this.selectedCollectionNode != null &&\n this.selectedCollectionNode.node.id !== \"AllCollections\"\n );\n }\n\n /**\n * The vault is filtered by the \"Unassigned\" collection\n */\n get isUnassignedCollectionSelected(): boolean {\n return this.selectedCollectionNode != null && this.selectedCollectionNode.node.id === null;\n }\n\n /**\n * The vault is filtered by the users individual vault\n */\n get isMyVaultSelected(): boolean {\n return this.selectedOrganizationNode?.node.id === \"MyVault\";\n }\n\n get isFavorites(): boolean {\n return this.selectedCipherTypeNode?.node.type === \"favorites\";\n }\n\n get isDeleted(): boolean {\n return this.selectedCipherTypeNode?.node.type === \"trash\" ? true : null;\n }\n\n get organizationId(): string {\n return this.selectedOrganizationNode?.node.id;\n }\n\n get cipherType(): CipherType {\n return this.selectedCipherTypeNode?.node.type in CipherType\n ? (this.selectedCipherTypeNode?.node.type as CipherType)\n : null;\n }\n\n get cipherStatus(): CipherStatus {\n return this.selectedCipherTypeNode?.node.type;\n }\n\n get cipherTypeId(): string {\n return this.selectedCipherTypeNode?.node.id;\n }\n\n get folderId(): string {\n return this.selectedFolderNode?.node.id;\n }\n\n get collectionId(): string {\n return this.selectedCollectionNode?.node.id;\n }\n\n constructor(init?: Partial) {\n Object.assign(this, init);\n }\n\n resetFilter() {\n this.selectedCipherTypeNode = null;\n this.selectedFolderNode = null;\n this.selectedCollectionNode = null;\n }\n\n resetOrganization() {\n this.selectedOrganizationNode = null;\n }\n\n buildFilter(): VaultFilterFunction {\n return (cipher) => {\n let cipherPassesFilter = true;\n if (this.isFavorites && cipherPassesFilter) {\n cipherPassesFilter = cipher.favorite;\n }\n if (this.isDeleted && cipherPassesFilter) {\n cipherPassesFilter = cipher.isDeleted;\n }\n if (this.cipherType && cipherPassesFilter) {\n cipherPassesFilter = cipher.type === this.cipherType;\n }\n if (this.selectedFolderNode) {\n // No folder\n if (this.folderId === null && cipherPassesFilter) {\n cipherPassesFilter = cipher.folderId === null;\n }\n // Folder\n if (this.folderId !== null && cipherPassesFilter) {\n cipherPassesFilter = cipher.folderId === this.folderId;\n }\n }\n if (this.selectedCollectionNode) {\n // All Collections\n if (this.collectionId === \"AllCollections\" && cipherPassesFilter) {\n cipherPassesFilter = false;\n }\n // Unassigned\n if (this.collectionId === null && cipherPassesFilter) {\n cipherPassesFilter =\n cipher.organizationId != null &&\n (cipher.collectionIds == null || cipher.collectionIds.length === 0);\n }\n // Collection\n if (\n this.collectionId !== null &&\n this.collectionId !== \"AllCollections\" &&\n cipherPassesFilter\n ) {\n cipherPassesFilter =\n cipher.collectionIds != null && cipher.collectionIds.includes(this.collectionId);\n }\n }\n if (this.selectedOrganizationNode) {\n // My Vault\n if (this.organizationId === \"MyVault\" && cipherPassesFilter) {\n cipherPassesFilter = cipher.organizationId === null;\n }\n // Organization\n else if (this.organizationId !== null && cipherPassesFilter) {\n cipherPassesFilter = cipher.organizationId === this.organizationId;\n }\n }\n return cipherPassesFilter;\n };\n }\n}\n","import { SecretVerificationRequest } from \"../../../models/request/secret-verification.request\";\n\nexport class OrganizationUserResetPasswordEnrollmentRequest extends SecretVerificationRequest {\n resetPasswordKey: string;\n}\n","import { Component } from \"@angular/core\";\n\nimport { ModalRef } from \"@bitwarden/angular/components/modal/modal.ref\";\nimport { ModalConfig } from \"@bitwarden/angular/services/modal.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\n\n@Component({\n selector: \"app-enroll-master-password-reset\",\n templateUrl: \"enroll-master-password-reset.component.html\",\n})\nexport class EnrollMasterPasswordReset {\n organization: Organization;\n\n verification: Verification;\n formPromise: Promise;\n\n constructor(\n private userVerificationService: UserVerificationService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private cryptoService: CryptoService,\n private syncService: SyncService,\n private logService: LogService,\n private modalRef: ModalRef,\n config: ModalConfig,\n private organizationApiService: OrganizationApiServiceAbstraction,\n private organizationUserService: OrganizationUserService\n ) {\n this.organization = config.data.organization;\n }\n\n async submit() {\n let toastStringRef = \"withdrawPasswordResetSuccess\";\n\n this.formPromise = this.userVerificationService\n .buildRequest(this.verification, OrganizationUserResetPasswordEnrollmentRequest)\n .then(async (request) => {\n // Set variables\n let keyString: string = null;\n\n // Retrieve Public Key\n const orgKeys = await this.organizationApiService.getKeys(this.organization.id);\n if (orgKeys == null) {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n\n const publicKey = Utils.fromB64ToArray(orgKeys.publicKey);\n\n // RSA Encrypt user's encKey.key with organization public key\n const encKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n keyString = encryptedKey.encryptedString;\n toastStringRef = \"enrollPasswordResetSuccess\";\n\n // Create request and execute enrollment\n request.resetPasswordKey = keyString;\n await this.organizationUserService.putOrganizationUserResetPasswordEnrollment(\n this.organization.id,\n this.organization.userId,\n request\n );\n\n await this.syncService.fullSync(true);\n });\n try {\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(toastStringRef));\n this.modalRef.close();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","\n
\n \n
\n

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

\n \n ×\n \n
\n
\n \n {{ \"resetPasswordEnrollmentWarning\" | i18n }}\n \n \n
\n
\n \n \n \n {{ \"cancel\" | i18n }}\n \n \n
\n \n
\n\n","\n\n\n
\n \n \n \n \n \n  {{ headerNode.node.name | i18n }}\n \n \n

\n  {{ headerNode.node.name | i18n }}\n

\n\n \n \n \n
\n \n \n \n \n \n \n \n \n \n  {{ f.node.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  {{ addInfo.text | i18n }}\n \n \n
  • \n \n
    \n\n","import { Component, InjectionToken, Injector, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { ITreeNodeObject, TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\n\nimport { VaultFilterService } from \"../../services/abstractions/vault-filter.service\";\nimport { VaultFilterSection, VaultFilterType } from \"../models/vault-filter-section.type\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\n\n@Component({\n selector: \"app-filter-section\",\n templateUrl: \"vault-filter-section.component.html\",\n})\nexport class VaultFilterSectionComponent implements OnInit, OnDestroy {\n private destroy$ = new Subject();\n\n @Input() activeFilter: VaultFilter;\n @Input() section: VaultFilterSection;\n\n data: TreeNode;\n collapsedFilterNodes: Set = new Set();\n\n private injectors = new Map();\n\n constructor(private vaultFilterService: VaultFilterService, private injector: Injector) {\n this.vaultFilterService.collapsedFilterNodes$\n .pipe(takeUntil(this.destroy$))\n .subscribe((nodes) => {\n this.collapsedFilterNodes = nodes;\n });\n }\n\n ngOnInit() {\n this.section?.data$?.pipe(takeUntil(this.destroy$)).subscribe((data) => {\n this.data = data;\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n get headerNode() {\n return this.data;\n }\n\n get headerInfo() {\n return this.section.header;\n }\n\n get filters() {\n return this.data?.children;\n }\n\n get isOrganizationFilter() {\n return this.data.node instanceof Organization;\n }\n\n get isAllVaultsSelected() {\n return this.isOrganizationFilter && !this.activeFilter.selectedOrganizationNode;\n }\n\n isNodeSelected(filterNode: TreeNode) {\n return (\n this.activeFilter.organizationId === filterNode?.node.id ||\n this.activeFilter.cipherTypeId === filterNode?.node.id ||\n this.activeFilter.folderId === filterNode?.node.id ||\n this.activeFilter.collectionId === filterNode?.node.id\n );\n }\n\n async onFilterSelect(filterNode: TreeNode) {\n await this.section?.action(filterNode);\n }\n\n get editInfo() {\n return this.section?.edit;\n }\n\n onEdit(filterNode: TreeNode) {\n this.section?.edit?.action(filterNode.node);\n }\n\n get addInfo() {\n return this.section.add;\n }\n\n get showAddButton() {\n return this.section.add && !this.section.add.route;\n }\n\n get showAddLink() {\n return this.section.add && this.section.add.route;\n }\n\n async onAdd() {\n this.section?.add?.action();\n }\n\n get optionsInfo() {\n return this.section?.options;\n }\n\n get divider() {\n return this.section?.divider;\n }\n\n isCollapsed(node: ITreeNodeObject) {\n return this.collapsedFilterNodes.has(node.id);\n }\n\n async toggleCollapse(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.setCollapsedFilterNodes(this.collapsedFilterNodes);\n }\n\n // an injector is necessary to pass data into a dynamic component\n // here we are creating a new injector for each filter that has options\n createInjector(data: VaultFilterType) {\n let inject = this.injectors.get(data.id);\n if (!inject) {\n inject = Injector.create({\n providers: [{ provide: OptionsInput, useValue: data }],\n parent: this.injector,\n });\n this.injectors.set(data.id, inject);\n }\n return inject;\n }\n}\nexport const OptionsInput = new InjectionToken(\"OptionsInput\");\n","import { AuthenticationType } from \"../../enums/authenticationType\";\nimport { TokenTwoFactorRequest } from \"../request/identity-token/token-two-factor.request\";\n\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class PasswordLogInCredentials {\n readonly type = AuthenticationType.Password;\n\n constructor(\n public email: string,\n public masterPassword: string,\n public captchaToken?: string,\n public twoFactor?: TokenTwoFactorRequest\n ) {}\n}\n\nexport class SsoLogInCredentials {\n readonly type = AuthenticationType.Sso;\n\n constructor(\n public code: string,\n public codeVerifier: string,\n public redirectUrl: string,\n public orgId: string,\n public twoFactor?: TokenTwoFactorRequest\n ) {}\n}\n\nexport class UserApiLogInCredentials {\n readonly type = AuthenticationType.UserApi;\n\n constructor(public clientId: string, public clientSecret: string) {}\n}\n\nexport class PasswordlessLogInCredentials {\n readonly type = AuthenticationType.Passwordless;\n\n constructor(\n public email: string,\n public accessCode: string,\n public authRequestId: string,\n public decKey: SymmetricCryptoKey,\n public localPasswordHash: string,\n public twoFactor?: TokenTwoFactorRequest\n ) {}\n}\n","import { 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","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\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, Inject, OnDestroy, OnInit } from \"@angular/core\";\nimport { map, Subject, takeUntil } from \"rxjs\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { Policy } from \"@bitwarden/common/models/domain/policy\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\n\nimport { EnrollMasterPasswordReset } from \"../../../../../app/organizations/users/enroll-master-password-reset.component\";\nimport { OptionsInput } from \"../shared/components/vault-filter-section.component\";\nimport { OrganizationFilter } from \"../shared/models/vault-filter.type\";\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 private destroy$ = new Subject();\n\n constructor(\n @Inject(OptionsInput) protected organization: OrganizationFilter,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private apiService: ApiService,\n private syncService: SyncService,\n private policyService: PolicyService,\n private modalService: ModalService,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction,\n private organizationUserService: OrganizationUserService\n ) {}\n\n async ngOnInit() {\n this.policyService.policies$\n .pipe(\n map((policies) => policies.filter((policy) => policy.type === PolicyType.ResetPassword)),\n takeUntil(this.destroy$)\n )\n .subscribe((policies) => {\n this.policies = policies;\n this.loaded = true;\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n allowEnrollmentChanges(org: OrganizationFilter): boolean {\n if (org.usePolicies && org.useResetPassword && org.hasPublicAndPrivateKeys) {\n const policy = this.policies.find((p) => p.organizationId === org.id);\n if (policy != null && policy.enabled) {\n return org.resetPasswordEnrolled && policy.data.autoEnrollEnabled ? false : true;\n }\n }\n\n return false;\n }\n\n showEnrolledStatus(org: Organization): boolean {\n return (\n org.useResetPassword &&\n org.resetPasswordEnrolled &&\n this.policies.some((p) => p.organizationId === org.id && p.enabled)\n );\n }\n\n async unlinkSso(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"unlinkSsoConfirmation\"),\n org.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.apiService.deleteSsoUser(org.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, \"Unlinked SSO\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async leave(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"leaveOrganizationConfirmation\"),\n org.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.organizationApiService.leave(org.id);\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"leftOrganization\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async toggleResetPasswordEnrollment(org: Organization) {\n if (!this.organization.resetPasswordEnrolled) {\n this.modalService.open(EnrollMasterPasswordReset, {\n allowMultipleModals: true,\n data: {\n organization: org,\n },\n });\n } else {\n // Remove reset password\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.masterPasswordHash = \"ignored\";\n request.resetPasswordKey = null;\n this.actionPromise = this.organizationUserService.putOrganizationUserResetPasswordEnrollment(\n this.organization.id,\n this.organization.userId,\n request\n );\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"withdrawPasswordResetSuccess\")\n );\n this.syncService.fullSync(true);\n } catch (e) {\n this.logService.error(e);\n }\n }\n }\n}\n","
    \n
    \n \n
    \n
    \n
    \n {{ \"filters\" | i18n }}\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 { firstValueFrom, Subject, switchMap, takeUntil } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/enums/policyType\";\nimport { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { FolderView } from \"@bitwarden/common/vault/models/view/folder.view\";\n\nimport { VaultFilterService } from \"../services/abstractions/vault-filter.service\";\nimport {\n VaultFilterList,\n VaultFilterSection,\n VaultFilterType,\n} from \"../shared/models/vault-filter-section.type\";\nimport { VaultFilter } from \"../shared/models/vault-filter.model\";\nimport {\n CipherStatus,\n CipherTypeFilter,\n CollectionFilter,\n FolderFilter,\n OrganizationFilter,\n} from \"../shared/models/vault-filter.type\";\n\nimport { OrganizationOptionsComponent } from \"./organization-options.component\";\n\n@Component({\n selector: \"app-vault-filter\",\n templateUrl: \"vault-filter.component.html\",\n})\nexport class VaultFilterComponent implements OnInit, OnDestroy {\n filters?: VaultFilterList;\n @Input() activeFilter: VaultFilter = new VaultFilter();\n @Output() activeFilterChanged = new EventEmitter();\n @Output() onSearchTextChanged = new EventEmitter();\n @Output() onAddFolder = new EventEmitter();\n @Output() onEditFolder = new EventEmitter();\n\n isLoaded = false;\n searchText = \"\";\n\n protected destroy$: Subject = new Subject();\n\n get filtersList() {\n return this.filters ? Object.values(this.filters) : [];\n }\n\n get searchPlaceholder() {\n if (this.activeFilter.isFavorites) {\n return \"searchFavorites\";\n }\n if (this.activeFilter.isDeleted) {\n return \"searchTrash\";\n }\n if (this.activeFilter.cipherType === CipherType.Login) {\n return \"searchLogin\";\n }\n if (this.activeFilter.cipherType === CipherType.Card) {\n return \"searchCard\";\n }\n if (this.activeFilter.cipherType === CipherType.Identity) {\n return \"searchIdentity\";\n }\n if (this.activeFilter.cipherType === CipherType.SecureNote) {\n return \"searchSecureNote\";\n }\n if (this.activeFilter.selectedFolderNode?.node) {\n return \"searchFolder\";\n }\n if (this.activeFilter.selectedCollectionNode?.node) {\n return \"searchCollection\";\n }\n if (this.activeFilter.organizationId === \"MyVault\") {\n return \"searchMyVault\";\n }\n if (this.activeFilter.organizationId) {\n return \"searchOrganization\";\n }\n\n return \"searchVault\";\n }\n\n constructor(\n protected vaultFilterService: VaultFilterService,\n protected policyService: PolicyService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService\n ) {\n this.loadSubscriptions();\n }\n\n async ngOnInit(): Promise {\n this.filters = await this.buildAllFilters();\n this.activeFilter.selectedCipherTypeNode =\n (await this.getDefaultFilter()) as TreeNode;\n this.isLoaded = true;\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected loadSubscriptions() {\n this.vaultFilterService.filteredFolders$\n .pipe(\n switchMap(async (folders) => {\n this.removeInvalidFolderSelection(folders);\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n\n this.vaultFilterService.filteredCollections$\n .pipe(\n switchMap(async (collections) => {\n this.removeInvalidCollectionSelection(collections);\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n searchTextChanged(t: string) {\n this.searchText = t;\n this.onSearchTextChanged.emit(t);\n }\n\n protected applyVaultFilter(filter: VaultFilter) {\n this.activeFilterChanged.emit(filter);\n }\n\n applyOrganizationFilter = async (orgNode: TreeNode): Promise => {\n if (!orgNode?.node.enabled) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"disabledOrganizationFilterError\")\n );\n return;\n }\n const filter = this.activeFilter;\n filter.resetOrganization();\n if (orgNode?.node.id !== \"AllVaults\") {\n filter.selectedOrganizationNode = orgNode;\n }\n this.vaultFilterService.setOrganizationFilter(orgNode.node);\n await this.vaultFilterService.expandOrgFilter();\n this.applyVaultFilter(filter);\n };\n\n applyTypeFilter = async (filterNode: TreeNode): Promise => {\n const filter = this.activeFilter;\n filter.resetFilter();\n filter.selectedCipherTypeNode = filterNode;\n this.applyVaultFilter(filter);\n };\n\n applyFolderFilter = async (folderNode: TreeNode): Promise => {\n const filter = this.activeFilter;\n filter.resetFilter();\n filter.selectedFolderNode = folderNode;\n this.applyVaultFilter(filter);\n };\n\n applyCollectionFilter = async (collectionNode: TreeNode): Promise => {\n const filter = this.activeFilter;\n filter.resetFilter();\n filter.selectedCollectionNode = collectionNode;\n this.applyVaultFilter(filter);\n };\n\n addFolder = async (): Promise => {\n this.onAddFolder.emit();\n };\n\n editFolder = async (folder: FolderFilter): Promise => {\n this.onEditFolder.emit(folder);\n };\n\n async getDefaultFilter(): Promise> {\n return await firstValueFrom(this.filters?.typeFilter.data$);\n }\n\n protected async removeInvalidFolderSelection(folders: FolderView[]) {\n if (this.activeFilter.selectedFolderNode) {\n if (!folders.some((f) => f.id === this.activeFilter.folderId)) {\n const filter = this.activeFilter;\n filter.resetFilter();\n filter.selectedCipherTypeNode =\n (await this.getDefaultFilter()) as TreeNode;\n this.applyVaultFilter(filter);\n }\n }\n }\n\n protected async removeInvalidCollectionSelection(collections: CollectionView[]) {\n if (this.activeFilter.selectedCollectionNode) {\n if (!collections.some((f) => f.id === this.activeFilter.collectionId)) {\n const filter = this.activeFilter;\n filter.resetFilter();\n filter.selectedCipherTypeNode =\n (await this.getDefaultFilter()) as TreeNode;\n this.applyVaultFilter(filter);\n }\n }\n }\n\n async buildAllFilters(): Promise {\n const builderFilter = {} as VaultFilterList;\n builderFilter.organizationFilter = await this.addOrganizationFilter();\n builderFilter.typeFilter = await this.addTypeFilter();\n builderFilter.folderFilter = await this.addFolderFilter();\n builderFilter.collectionFilter = await this.addCollectionFilter();\n builderFilter.trashFilter = await this.addTrashFilter();\n return builderFilter;\n }\n\n protected async addOrganizationFilter(): Promise {\n const singleOrgPolicy = await this.policyService.policyAppliesToUser(PolicyType.SingleOrg);\n const personalVaultPolicy = await this.policyService.policyAppliesToUser(\n PolicyType.PersonalOwnership\n );\n\n const addAction = !singleOrgPolicy\n ? { text: \"newOrganization\", route: \"/create-organization\" }\n : null;\n\n const orgFilterSection: VaultFilterSection = {\n data$: this.vaultFilterService.organizationTree$,\n header: {\n showHeader: !(singleOrgPolicy && personalVaultPolicy),\n isSelectable: true,\n },\n action: this.applyOrganizationFilter,\n options: { component: OrganizationOptionsComponent },\n add: addAction,\n divider: true,\n };\n\n return orgFilterSection;\n }\n\n protected async addTypeFilter(excludeTypes: CipherStatus[] = []): Promise {\n const allTypeFilters: CipherTypeFilter[] = [\n {\n id: \"favorites\",\n name: this.i18nService.t(\"favorites\"),\n type: \"favorites\",\n icon: \"bwi-star\",\n },\n {\n id: \"login\",\n name: this.i18nService.t(\"typeLogin\"),\n type: CipherType.Login,\n icon: \"bwi-globe\",\n },\n {\n id: \"card\",\n name: this.i18nService.t(\"typeCard\"),\n type: CipherType.Card,\n icon: \"bwi-credit-card\",\n },\n {\n id: \"identity\",\n name: this.i18nService.t(\"typeIdentity\"),\n type: CipherType.Identity,\n icon: \"bwi-id-card\",\n },\n {\n id: \"note\",\n name: this.i18nService.t(\"typeSecureNote\"),\n type: CipherType.SecureNote,\n icon: \"bwi-sticky-note\",\n },\n ];\n\n const typeFilterSection: VaultFilterSection = {\n data$: this.vaultFilterService.buildTypeTree(\n { id: \"AllItems\", name: \"allItems\", type: \"all\", icon: \"\" },\n allTypeFilters.filter((f) => !excludeTypes.includes(f.type))\n ),\n header: {\n showHeader: true,\n isSelectable: true,\n },\n action: this.applyTypeFilter,\n };\n return typeFilterSection;\n }\n\n protected async addFolderFilter(): Promise {\n const folderFilterSection: VaultFilterSection = {\n data$: this.vaultFilterService.folderTree$,\n header: {\n showHeader: true,\n isSelectable: false,\n },\n action: this.applyFolderFilter,\n edit: {\n text: \"editFolder\",\n action: this.editFolder,\n },\n add: {\n text: \"Add Folder\",\n action: this.addFolder,\n },\n };\n return folderFilterSection;\n }\n\n protected async addCollectionFilter(): Promise {\n const collectionFilterSection: VaultFilterSection = {\n data$: this.vaultFilterService.collectionTree$,\n header: {\n showHeader: true,\n isSelectable: true,\n },\n action: this.applyCollectionFilter,\n };\n return collectionFilterSection;\n }\n\n protected async addTrashFilter(): Promise {\n const trashFilterSection: VaultFilterSection = {\n data$: this.vaultFilterService.buildTypeTree(\n {\n id: \"headTrash\",\n name: \"HeadTrash\",\n type: \"trash\",\n icon: \"bwi-trash\",\n },\n [\n {\n id: \"trash\",\n name: this.i18nService.t(\"trash\"),\n type: \"trash\",\n icon: \"bwi-trash\",\n },\n ]\n ),\n header: {\n showHeader: false,\n isSelectable: true,\n },\n action: this.applyTypeFilter,\n };\n return trashFilterSection;\n }\n}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\n\n@Directive()\nexport class VaultItemsComponent {\n @Input() activeCipherId: string = null;\n @Output() onCipherClicked = new EventEmitter();\n @Output() onCipherRightClicked = new EventEmitter();\n @Output() onAddCipher = new EventEmitter();\n @Output() onAddCipherOptions = new EventEmitter();\n\n loaded = false;\n ciphers: CipherView[] = [];\n searchPlaceholder: string = null;\n filter: (cipher: CipherView) => boolean = null;\n deleted = false;\n organization: Organization;\n accessEvents = false;\n\n protected searchPending = false;\n\n private searchTimeout: any = null;\n private _searchText: string = null;\n get searchText() {\n return this._searchText;\n }\n set searchText(value: string) {\n this._searchText = value;\n }\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","export class CollectionBulkDeleteRequest {\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","import { DialogConfig, DialogRef, DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject } from \"@angular/core\";\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 { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CollectionBulkDeleteRequest } from \"@bitwarden/common/models/request/collection-bulk-delete.request\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CipherBulkDeleteRequest } from \"@bitwarden/common/vault/models/request/cipher-bulk-delete.request\";\nimport { DialogService } from \"@bitwarden/components\";\n\nexport interface BulkDeleteDialogParams {\n cipherIds?: string[];\n collectionIds?: string[];\n permanent?: boolean;\n organization?: Organization;\n}\n\nexport enum BulkDeleteDialogResult {\n Deleted = \"deleted\",\n Canceled = \"canceled\",\n}\n\n/**\n * Strongly typed helper to open a BulkDeleteDialog\n * @param dialogService Instance of the dialog service that will be used to open the dialog\n * @param config Configuration for the dialog\n */\nexport const openBulkDeleteDialog = (\n dialogService: DialogService,\n config: DialogConfig\n) => {\n return dialogService.open(\n BulkDeleteDialogComponent,\n config\n );\n};\n\n@Component({\n selector: \"vault-bulk-delete-dialog\",\n templateUrl: \"bulk-delete-dialog.component.html\",\n})\nexport class BulkDeleteDialogComponent {\n cipherIds: string[];\n collectionIds: string[];\n permanent = false;\n organization: Organization;\n\n constructor(\n @Inject(DIALOG_DATA) params: BulkDeleteDialogParams,\n private dialogRef: DialogRef,\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private apiService: ApiService\n ) {\n this.cipherIds = params.cipherIds ?? [];\n this.collectionIds = params.collectionIds ?? [];\n this.permanent = params.permanent;\n this.organization = params.organization;\n }\n\n protected async cancel() {\n this.close(BulkDeleteDialogResult.Canceled);\n }\n\n protected submit = async () => {\n const deletePromises: Promise[] = [];\n if (this.cipherIds.length) {\n if (!this.organization || !this.organization.canEditAnyCollection) {\n deletePromises.push(this.deleteCiphers());\n } else {\n deletePromises.push(this.deleteCiphersAdmin());\n }\n }\n\n if (this.collectionIds.length && this.organization) {\n deletePromises.push(this.deleteCollections());\n }\n\n await Promise.all(deletePromises);\n\n if (this.cipherIds.length) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.permanent ? \"permanentlyDeletedItems\" : \"deletedItems\")\n );\n }\n if (this.collectionIds.length) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedCollections\")\n );\n }\n this.close(BulkDeleteDialogResult.Deleted);\n };\n\n private async deleteCiphers(): Promise {\n if (this.permanent) {\n await this.cipherService.deleteManyWithServer(this.cipherIds);\n } else {\n await this.cipherService.softDeleteManyWithServer(this.cipherIds);\n }\n }\n\n private async deleteCiphersAdmin(): Promise {\n const deleteRequest = new CipherBulkDeleteRequest(this.cipherIds, this.organization.id);\n if (this.permanent) {\n return await this.apiService.deleteManyCiphersAdmin(deleteRequest);\n } else {\n return await this.apiService.putDeleteManyCiphersAdmin(deleteRequest);\n }\n }\n\n private async deleteCollections(): Promise {\n if (!this.organization.canDeleteAssignedCollections) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"missingPermissions\")\n );\n return;\n }\n const deleteRequest = new CollectionBulkDeleteRequest(this.collectionIds, this.organization.id);\n return await this.apiService.deleteManyCollections(deleteRequest);\n }\n\n private close(result: BulkDeleteDialogResult) {\n this.dialogRef.close(result);\n }\n}\n","\n \n {{ (permanent ? \"permanentlyDeleteSelected\" : \"deleteSelected\") | i18n }}\n \n \n \n \n {{ \"deleteSelectedItemsDesc\" | i18n: cipherIds.length }}\n \n \n {{ \"deleteSelectedCollectionsDesc\" | i18n: collectionIds.length }}\n \n {{ \"deleteSelectedConfirmation\" | i18n }}\n \n \n {{ \"permanentlyDeleteSelectedItemsDesc\" | i18n: cipherIds.length }}\n \n \n
    \n \n \n
    \n
    \n","import { DialogConfig, DialogRef, DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject, OnInit } from \"@angular/core\";\nimport { FormBuilder, Validators } from \"@angular/forms\";\nimport { firstValueFrom, Observable } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { FolderView } from \"@bitwarden/common/vault/models/view/folder.view\";\nimport { DialogService } from \"@bitwarden/components\";\n\nexport interface BulkMoveDialogParams {\n cipherIds?: string[];\n}\n\nexport enum BulkMoveDialogResult {\n Moved = \"moved\",\n Canceled = \"canceled\",\n}\n\n/**\n * Strongly typed helper to open a BulkMoveDialog\n * @param dialogService Instance of the dialog service that will be used to open the dialog\n * @param config Configuration for the dialog\n */\nexport const openBulkMoveDialog = (\n dialogService: DialogService,\n config: DialogConfig\n) => {\n return dialogService.open(\n BulkMoveDialogComponent,\n config\n );\n};\n\n@Component({\n selector: \"vault-bulk-move-dialog\",\n templateUrl: \"bulk-move-dialog.component.html\",\n})\nexport class BulkMoveDialogComponent implements OnInit {\n cipherIds: string[] = [];\n\n formGroup = this.formBuilder.group({\n folderId: [\"\", [Validators.required]],\n });\n folders$: Observable;\n\n constructor(\n @Inject(DIALOG_DATA) params: BulkMoveDialogParams,\n private dialogRef: DialogRef,\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private folderService: FolderService,\n private formBuilder: FormBuilder\n ) {\n this.cipherIds = params.cipherIds ?? [];\n }\n\n async ngOnInit() {\n this.folders$ = this.folderService.folderViews$;\n this.formGroup.patchValue({\n folderId: (await firstValueFrom(this.folders$))[0].id,\n });\n }\n\n protected cancel() {\n this.close(BulkMoveDialogResult.Canceled);\n }\n\n protected submit = async () => {\n if (this.formGroup.invalid) {\n return;\n }\n\n await this.cipherService.moveManyWithServer(this.cipherIds, this.formGroup.value.folderId);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"movedItems\"));\n this.close(BulkMoveDialogResult.Moved);\n };\n\n private close(result: BulkMoveDialogResult) {\n this.dialogRef.close(result);\n }\n}\n","
    \n \n \n {{ \"moveSelected\" | i18n }}\n \n \n

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

    \n \n {{ \"folder\" | i18n }}\n \n \n
    \n
    \n \n \n
    \n
    \n
    \n","import { DialogConfig, DialogRef, DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { DialogService } from \"@bitwarden/components\";\n\nexport interface BulkRestoreDialogParams {\n cipherIds: string[];\n}\n\nexport enum BulkRestoreDialogResult {\n Restored = \"restored\",\n Canceled = \"canceled\",\n}\n\n/**\n * Strongly typed helper to open a BulkRestoreDialog\n * @param dialogService Instance of the dialog service that will be used to open the dialog\n * @param config Configuration for the dialog\n */\nexport const openBulkRestoreDialog = (\n dialogService: DialogService,\n config: DialogConfig\n) => {\n return dialogService.open(\n BulkRestoreDialogComponent,\n config\n );\n};\n\n@Component({\n selector: \"vault-bulk-restore-dialog\",\n templateUrl: \"bulk-restore-dialog.component.html\",\n})\nexport class BulkRestoreDialogComponent {\n cipherIds: string[];\n\n constructor(\n @Inject(DIALOG_DATA) params: BulkRestoreDialogParams,\n private dialogRef: DialogRef,\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {\n this.cipherIds = params.cipherIds ?? [];\n }\n\n submit = async () => {\n await this.cipherService.restoreManyWithServer(this.cipherIds);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItems\"));\n this.close(BulkRestoreDialogResult.Restored);\n };\n\n protected cancel() {\n this.close(BulkRestoreDialogResult.Canceled);\n }\n\n private close(result: BulkRestoreDialogResult) {\n this.dialogRef.close(result);\n }\n}\n","\n \n {{ \"restoreSelected\" | i18n }}\n \n \n {{ \"restoreSelectedItemsDesc\" | i18n: cipherIds.length }}\n \n
    \n \n \n
    \n
    \n","import { DialogConfig, DialogRef, DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject, OnInit } from \"@angular/core\";\n\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 { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { Checkable, isChecked } from \"@bitwarden/common/types/checkable\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { DialogService } from \"@bitwarden/components\";\n\nexport interface BulkShareDialogParams {\n ciphers: CipherView[];\n organizationId?: string;\n}\n\nexport enum BulkShareDialogResult {\n Shared = \"shared\",\n Canceled = \"canceled\",\n}\n\n/**\n * Strongly typed helper to open a BulkShareDialog\n * @param dialogService Instance of the dialog service that will be used to open the dialog\n * @param config Configuration for the dialog\n */\nexport const openBulkShareDialog = (\n dialogService: DialogService,\n config: DialogConfig\n) => {\n return dialogService.open(\n BulkShareDialogComponent,\n config\n );\n};\n\n@Component({\n selector: \"vault-bulk-share-dialog\",\n templateUrl: \"bulk-share-dialog.component.html\",\n})\nexport class BulkShareDialogComponent implements OnInit {\n ciphers: CipherView[] = [];\n organizationId: string;\n\n nonShareableCount = 0;\n collections: Checkable[] = [];\n organizations: Organization[] = [];\n shareableCiphers: CipherView[] = [];\n\n private writeableCollections: CollectionView[] = [];\n\n constructor(\n @Inject(DIALOG_DATA) params: BulkShareDialogParams,\n private dialogRef: DialogRef,\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 this.ciphers = params.ciphers ?? [];\n this.organizationId = params.organizationId;\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 submit = async () => {\n const checkedCollectionIds = this.collections.filter(isChecked).map((c) => c.id);\n try {\n await this.cipherService.shareManyWithServer(\n this.shareableCiphers,\n this.organizationId,\n checkedCollectionIds\n );\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 this.close(BulkShareDialogResult.Shared);\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 protected cancel() {\n this.close(BulkShareDialogResult.Canceled);\n }\n\n private close(result: BulkShareDialogResult) {\n this.dialogRef.close(result);\n }\n}\n","\n \n {{ \"moveSelectedToOrg\" | i18n }}\n \n \n

    {{ \"moveManyToOrgDesc\" | i18n }}

    \n

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

    \n \n {{ \"organization\" | i18n }}\n \n \n \n \n\n
    \n \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
    \n
    \n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: \"ellipsis\",\n})\nexport class EllipsisPipe implements PipeTransform {\n transform(value: string, limit = 25, completeWords = false, ellipsis = \"...\") {\n if (value.length <= limit) {\n return value;\n }\n limit -= ellipsis.length;\n if (completeWords && value.length > limit && value.indexOf(\" \") > 0) {\n limit = value.substring(0, limit).lastIndexOf(\" \");\n }\n return value.substring(0, limit) + ellipsis;\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { AvatarUpdateService } from \"@bitwarden/common/abstractions/account/avatar-update.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Component({\n selector: \"app-org-badge\",\n templateUrl: \"organization-name-badge.component.html\",\n})\nexport class OrganizationNameBadgeComponent implements OnInit {\n @Input() organizationName: string;\n @Input() profileName: string;\n\n @Output() onOrganizationClicked = new EventEmitter();\n\n color: string;\n textColor: string;\n isMe: boolean;\n\n constructor(\n private i18nService: I18nService,\n private avatarService: AvatarUpdateService,\n private tokenService: TokenService\n ) {}\n\n async ngOnInit(): Promise {\n if (this.organizationName == null || this.organizationName === \"\") {\n this.organizationName = this.i18nService.t(\"me\");\n this.isMe = true;\n }\n if (this.isMe) {\n this.color = await this.avatarService.loadColorFromState();\n if (this.color == null) {\n const userName =\n (await this.tokenService.getName()) ?? (await this.tokenService.getEmail());\n this.color = Utils.stringToColor(userName.toUpperCase());\n }\n } else {\n this.color = Utils.stringToColor(this.organizationName.toUpperCase());\n }\n this.textColor = Utils.pickTextColorBasedOnBgColor(this.color, 135, true) + \"!important\";\n }\n\n emitOnOrganizationClicked() {\n this.onOrganizationClicked.emit();\n }\n}\n","\n\n\n {{ organizationName | ellipsis: 13 }}\n\n","import { Component, Input, OnChanges } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/models/request/selection-read-only.request\";\n\nimport { GroupView } from \"../../core\";\n\n@Component({\n selector: \"app-group-badge\",\n templateUrl: \"group-name-badge.component.html\",\n})\nexport class GroupNameBadgeComponent implements OnChanges {\n @Input() selectedGroups: SelectionReadOnlyRequest[];\n @Input() allGroups: GroupView[];\n\n protected groupNames: string[] = [];\n\n constructor(private i18nService: I18nService) {}\n\n ngOnChanges() {\n this.groupNames = this.selectedGroups\n .map((g) => {\n return this.allGroups.find((o) => o.id === g.id)?.name;\n })\n .sort(this.i18nService.collator.compare);\n }\n}\n","\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { CollectionView } from \"@bitwarden/common/src/models/view/collection.view\";\n\n@Pipe({\n name: \"collectionNameFromId\",\n pure: true,\n})\nexport class GetCollectionNameFromIdPipe implements PipeTransform {\n transform(value: string, collections: CollectionView[]) {\n return collections.find((o) => o.id === value)?.name;\n }\n}\n","\n {{ c | collectionNameFromId: collections }}\n\n\n + {{ xMoreCount }} more\n\n","import { Component, Input } from \"@angular/core\";\n\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\n\n@Component({\n selector: \"app-collection-badge\",\n templateUrl: \"collection-name-badge.component.html\",\n})\nexport class CollectionNameBadgeComponent {\n @Input() collectionIds: string[];\n @Input() collections: CollectionView[];\n\n get shownCollections(): string[] {\n return this.showXMore ? this.collectionIds.slice(0, 2) : this.collectionIds;\n }\n\n get showXMore(): boolean {\n return this.collectionIds.length > 3;\n }\n\n get xMoreCount(): number {\n return this.collectionIds.length - 2;\n }\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 {{ \"name\" | i18n }}\n \n {{ \"owner\" | i18n }}\n \n {{ (activeFilter.selectedCollectionNode ? \"groups\" : \"collections\") | i18n }}\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 \n
    \n \n
    \n \n \n \n {{ col.node.name }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ \"editInfo\" | i18n }}\n \n \n \n {{ \"access\" | i18n }}\n \n \n \n \n {{ \"delete\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ c.name }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n \n {{ \"attachmentsNeedFix\" | i18n }}\n \n \n
    \n {{ c.subTitle }}\n \n \n \n \n \n \n \n \n \n \n \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 {{ \"collections\" | i18n }}\n \n \n \n \n \n \n \n
    \n \n \n \n \n {{ \"loading\" | i18n }}\n \n \n \n \n

    {{ \"noPermissionToViewAllCollectionItems\" | i18n }}

    \n
    \n \n

    {{ \"noItemsInList\" | i18n }}

    \n \n \n {{ \"newItem\" | i18n }}\n \n
    \n
    \n \n
    \n","import { Component, EventEmitter, Input, OnDestroy, Output } from \"@angular/core\";\nimport { lastValueFrom } from \"rxjs\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\nimport { VaultItemsComponent as BaseVaultItemsComponent } from \"@bitwarden/angular/vault/components/vault-items.component\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { 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 { EventType } from \"@bitwarden/common/enums/eventType\";\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 { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/vault/enums/cipher-reprompt-type\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { DialogService, Icons } from \"@bitwarden/components\";\n\nimport { CollectionAdminView, GroupView } from \"../../../app/organizations/core\";\n\nimport {\n BulkDeleteDialogResult,\n openBulkDeleteDialog,\n} from \"./bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component\";\nimport {\n BulkMoveDialogResult,\n openBulkMoveDialog,\n} from \"./bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component\";\nimport {\n BulkRestoreDialogResult,\n openBulkRestoreDialog,\n} from \"./bulk-action-dialogs/bulk-restore-dialog/bulk-restore-dialog.component\";\nimport {\n BulkShareDialogResult,\n openBulkShareDialog,\n} from \"./bulk-action-dialogs/bulk-share-dialog/bulk-share-dialog.component\";\nimport { VaultFilterService } from \"./vault-filter/services/abstractions/vault-filter.service\";\nimport { VaultFilter } from \"./vault-filter/shared/models/vault-filter.model\";\nimport { CollectionFilter } from \"./vault-filter/shared/models/vault-filter.type\";\n\nconst MaxCheckedCount = 500;\n\nexport type VaultItemRow = (CipherView | TreeNode) & { checked?: boolean };\n\n@Component({\n selector: \"app-vault-items\",\n templateUrl: \"vault-items.component.html\",\n})\nexport class VaultItemsComponent extends BaseVaultItemsComponent implements OnDestroy {\n @Input() showAddNew = true;\n @Input() activeFilter: VaultFilter;\n @Output() activeFilterChanged = new EventEmitter();\n @Output() onAttachmentsClicked = new EventEmitter();\n @Output() onShareClicked = new EventEmitter();\n @Output() onEditCipherCollectionsClicked = new EventEmitter();\n @Output() onCloneClicked = new EventEmitter();\n @Output() onOrganzationBadgeClicked = new EventEmitter();\n\n cipherType = CipherType;\n actionPromise: Promise;\n userHasPremiumAccess = false;\n organizations: Organization[] = [];\n profileName: string;\n noItemIcon = Icons.Search;\n groups: GroupView[] = [];\n\n protected pageSizeLimit = 200;\n protected isAllChecked = false;\n protected didScroll = false;\n protected currentPagedCiphersCount = 0;\n protected currentPagedCollectionsCount = 0;\n protected refreshing = false;\n\n protected pagedCiphers: CipherView[] = [];\n protected pagedCollections: TreeNode[] = [];\n protected searchedCollections: TreeNode[] = [];\n\n get collections(): TreeNode[] {\n return this.activeFilter?.selectedCollectionNode?.children ?? [];\n }\n\n get filteredCollections(): TreeNode[] {\n if (this.isPaging()) {\n return this.pagedCollections;\n }\n\n if (this.searchService.isSearchable(this.searchText)) {\n return this.searchedCollections;\n }\n\n return this.collections;\n }\n\n get filteredCiphers(): CipherView[] {\n return this.isPaging() ? this.pagedCiphers : this.ciphers;\n }\n\n constructor(\n searchService: SearchService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected vaultFilterService: VaultFilterService,\n protected cipherService: CipherService,\n protected eventCollectionService: EventCollectionService,\n protected totpService: TotpService,\n protected stateService: StateService,\n protected passwordRepromptService: PasswordRepromptService,\n protected dialogService: DialogService,\n protected logService: LogService,\n private searchPipe: SearchPipe,\n private organizationService: OrganizationService,\n private tokenService: TokenService\n ) {\n super(searchService);\n }\n\n ngOnDestroy() {\n this.checkAll(false);\n }\n\n async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n this.checkAll(false);\n this.isAllChecked = false;\n this.pagedCollections = [];\n if (!this.refreshing && this.isPaging()) {\n this.currentPagedCollectionsCount = 0;\n this.currentPagedCiphersCount = 0;\n }\n await super.applyFilter(filter);\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.updateSearchedCollections(this.collections);\n this.profileName = await this.tokenService.getName();\n this.organizations = await this.organizationService.getAll();\n this.userHasPremiumAccess = await this.stateService.getCanAccessPremium();\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 loadMore() {\n // If we have less rows than the page size, we don't need to page anything\n if (this.ciphers.length + (this.collections?.length || 0) <= this.pageSizeLimit) {\n return;\n }\n\n let pageSpaceLeft = this.pageSizeLimit;\n if (\n this.refreshing &&\n this.pagedCiphers.length + this.pagedCollections.length === 0 &&\n this.currentPagedCiphersCount + this.currentPagedCollectionsCount > this.pageSizeLimit\n ) {\n // When we refresh, we want to load the previous amount of items, not restart the paging\n pageSpaceLeft = this.currentPagedCiphersCount + this.currentPagedCollectionsCount;\n }\n // if there are still collections to show\n if (this.collections?.length > this.pagedCollections.length) {\n const collectionsToAdd = this.collections.slice(\n this.pagedCollections.length,\n this.currentPagedCollectionsCount + pageSpaceLeft\n );\n this.pagedCollections = this.pagedCollections.concat(collectionsToAdd);\n // set the current count to the new count of paged collections\n this.currentPagedCollectionsCount = this.pagedCollections.length;\n // subtract the available page size by the amount of collections we just added, default to 0 if negative\n pageSpaceLeft =\n collectionsToAdd.length > pageSpaceLeft ? 0 : pageSpaceLeft - collectionsToAdd.length;\n }\n // if we have room left to show ciphers and we have ciphers to show\n if (pageSpaceLeft > 0 && this.ciphers.length > this.pagedCiphers.length) {\n this.pagedCiphers = this.pagedCiphers.concat(\n this.ciphers.slice(this.pagedCiphers.length, this.currentPagedCiphersCount + pageSpaceLeft)\n );\n // set the current count to the new count of paged ciphers\n this.currentPagedCiphersCount = this.pagedCiphers.length;\n }\n // set a flag if we actually loaded the second page while paging\n this.didScroll = this.pagedCiphers.length + this.pagedCollections.length > this.pageSizeLimit;\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n const totalRows =\n this.ciphers.length + (this.activeFilter?.selectedCollectionNode?.children.length || 0);\n return !searching && totalRows > this.pageSizeLimit;\n }\n\n async resetPaging() {\n this.pagedCollections = [];\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.updateSearchedCollections(this.collections);\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 editCipherCollections(c: CipherView) {\n this.onEditCipherCollectionsClicked.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 deleteCipher(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.deleteCipherWithServer(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 bulkDelete() {\n if (!(await this.repromptCipher())) {\n return;\n }\n\n const selectedIds = this.selectedCipherIds;\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 dialog = openBulkDeleteDialog(this.dialogService, {\n data: { permanent: this.deleted, cipherIds: selectedIds },\n });\n\n const result = await lastValueFrom(dialog.closed);\n if (result === BulkDeleteDialogResult.Deleted) {\n this.actionPromise = this.refresh();\n await this.actionPromise;\n this.actionPromise = null;\n }\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 bulkRestore() {\n if (!(await this.repromptCipher())) {\n return;\n }\n\n const selectedCipherIds = this.selectedCipherIds;\n if (selectedCipherIds.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 dialog = openBulkRestoreDialog(this.dialogService, {\n data: { cipherIds: selectedCipherIds },\n });\n\n const result = await lastValueFrom(dialog.closed);\n if (result === BulkRestoreDialogResult.Restored) {\n this.actionPromise = this.refresh();\n await this.actionPromise;\n this.actionPromise = null;\n }\n }\n\n async bulkShare() {\n if (!(await this.repromptCipher())) {\n return;\n }\n\n const selectedCiphers = this.selectedCiphers;\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 dialog = openBulkShareDialog(this.dialogService, { data: { ciphers: selectedCiphers } });\n\n const result = await lastValueFrom(dialog.closed);\n if (result === BulkShareDialogResult.Shared) {\n this.actionPromise = this.refresh();\n await this.actionPromise;\n this.actionPromise = null;\n }\n }\n\n async bulkMove() {\n if (!(await this.repromptCipher())) {\n return;\n }\n\n const selectedCipherIds = this.selectedCipherIds;\n if (selectedCipherIds.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 dialog = openBulkMoveDialog(this.dialogService, {\n data: { cipherIds: selectedCipherIds },\n });\n\n const result = await lastValueFrom(dialog.closed);\n if (result === BulkMoveDialogResult.Moved) {\n this.actionPromise = this.refresh();\n await this.actionPromise;\n this.actionPromise = null;\n }\n }\n\n async copy(cipher: CipherView, value: string, typeI18nKey: string, aType: string) {\n if (\n this.passwordRepromptService.protectedFields().includes(aType) &&\n !(await this.repromptCipher(cipher))\n ) {\n return;\n }\n\n if (value == null || (aType === \"TOTP\" && !this.displayTotpCopyButton(cipher))) {\n return;\n } else if (value === cipher.login.totp) {\n value = await this.totpService.getCode(value);\n }\n\n if (!cipher.viewPassword) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(typeI18nKey))\n );\n\n if (typeI18nKey === \"password\" || typeI18nKey === \"verificationCodeTotp\") {\n this.eventCollectionService.collect(\n EventType.Cipher_ClientToggledHiddenFieldVisible,\n cipher.id\n );\n } else if (typeI18nKey === \"securityCode\") {\n this.eventCollectionService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id);\n }\n }\n\n navigateCollection(node: TreeNode) {\n const filter = this.activeFilter;\n filter.selectedCollectionNode = node;\n this.activeFilterChanged.emit(filter);\n }\n\n checkAll(select: boolean) {\n if (select) {\n this.checkAll(false);\n }\n const items: VaultItemRow[] = this.ciphers;\n if (!items) {\n return;\n }\n\n const selectCount = select && items.length > MaxCheckedCount ? MaxCheckedCount : items.length;\n for (let i = 0; i < selectCount; i++) {\n this.checkRow(items[i], select);\n }\n }\n\n checkRow(item: VaultItemRow, select?: boolean) {\n // Collections can't be managed in end user vault\n if (!(item instanceof CipherView)) {\n return;\n }\n item.checked = select ?? !item.checked;\n }\n\n get selectedCiphers(): CipherView[] {\n if (!this.ciphers) {\n return [];\n }\n return this.ciphers.filter((c) => !!(c as VaultItemRow).checked);\n }\n\n get selectedCipherIds(): string[] {\n return this.selectedCiphers.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 onOrganizationClicked(organizationId: string) {\n this.onOrganzationBadgeClicked.emit(organizationId);\n }\n\n events(c: CipherView) {\n // TODO: This should be removed but is needed since we reuse the same template\n }\n\n canDeleteCollection(c: CollectionAdminView): boolean {\n // TODO: This should be removed but is needed since we reuse the same template\n return false; // Always return false for non org vault\n }\n\n async deleteCollection(collection: CollectionView): Promise {\n // TODO: This should be removed but is needed since we reuse the same template\n }\n\n canEditCollection(c: CollectionAdminView): boolean {\n // TODO: This should be removed but is needed since we reuse the same template\n return false; // Always return false for non org vault\n }\n\n async editCollection(c: CollectionView, tab: \"info\" | \"access\"): Promise {\n // TODO: This should be removed but is needed since we reuse the same template\n }\n\n get showMissingCollectionPermissionMessage(): boolean {\n // TODO: This should be removed but is needed since we reuse the same template\n return false; // Always return false for non org vault\n }\n\n protected updateSearchedCollections(collections: TreeNode[]) {\n if (this.searchService.isSearchable(this.searchText)) {\n this.searchedCollections = this.searchPipe.transform(\n collections,\n this.searchText,\n (collection) => collection.node.name,\n (collection) => collection.node.id\n );\n }\n }\n\n protected deleteCipherWithServer(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 if (c) {\n return (\n c.reprompt === CipherRepromptType.None ||\n (await this.passwordRepromptService.showPasswordPrompt())\n );\n } else {\n const selectedCiphers = this.selectedCiphers;\n const notProtected = !selectedCiphers.find(\n (cipher) => cipher.reprompt !== CipherRepromptType.None\n );\n\n return notProtected || (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 { 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 send = async () => {\n await this.verifyEmail();\n };\n}\n","
    \n
    \n {{ \"verifyEmail\" | i18n }}\n
    \n
    \n

    {{ \"verifyEmailDesc\" | i18n }}

    \n \n
    \n
    \n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-low-kdf\",\n templateUrl: \"low-kdf.component.html\",\n})\nexport class LowKdfComponent {}\n","
    \n
    \n \n {{ \"lowKdfIterations\" | i18n }}\n
    \n
    \n

    {{ \"lowKdfIterationsDesc\" | i18n }}

    \n \n {{ \"changeKdfSettings\" | i18n }}\n \n
    \n
    \n","
    \n
    \n 0\">\n \n \n \n {{ activeOrganizationId | orgNameFromId: (organizations$ | async) }}\n {{ \"vault\" | i18n | lowercase }}\n \n {{ collection.node.name }}\n \n \n

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

    \n
    \n\n
    \n \n
    \n
    \n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\n\nimport { VaultFilter } from \"../vault-filter/shared/models/vault-filter.model\";\nimport { CollectionFilter } from \"../vault-filter/shared/models/vault-filter.type\";\n\n@Component({\n selector: \"app-vault-header\",\n templateUrl: \"./vault-header.component.html\",\n})\nexport class VaultHeaderComponent {\n /**\n * Promise that is used to determine the loading state of the header via the ApiAction directive.\n * When the promise exists and is not resolved, the loading spinner will be shown.\n */\n @Input() actionPromise: Promise;\n\n /**\n * The filter being actively applied to the vault view\n */\n @Input() activeFilter: VaultFilter;\n\n /**\n * Emits when the active filter has been modified by the header\n */\n @Output() activeFilterChanged = new EventEmitter();\n\n /**\n * Emits an event when the new item button is clicked in the header\n */\n @Output() onAddCipher = new EventEmitter();\n\n organizations$ = this.organizationService.organizations$;\n\n constructor(private organizationService: OrganizationService, private i18nService: I18nService) {}\n\n /**\n * The id of the organization that is currently being filtered on.\n * This can come from a collection filter or organization filter, if applied.\n */\n get activeOrganizationId() {\n if (this.activeFilter.selectedCollectionNode != null) {\n return this.activeFilter.selectedCollectionNode.node.organizationId;\n }\n if (this.activeFilter.selectedOrganizationNode != null) {\n return this.activeFilter.selectedOrganizationNode.node.id;\n }\n return undefined;\n }\n\n get title() {\n if (this.activeFilter.isCollectionSelected) {\n if (this.activeFilter.isUnassignedCollectionSelected) {\n return this.i18nService.t(\"unassigned\");\n }\n return this.activeFilter.selectedCollectionNode.node.name;\n }\n\n if (this.activeFilter.isMyVaultSelected) {\n return this.i18nService.t(\"myVault\");\n }\n\n if (this.activeFilter?.selectedOrganizationNode != null) {\n return `${this.activeFilter.selectedOrganizationNode.node.name} ${this.i18nService\n .t(\"vault\")\n .toLowerCase()}`;\n }\n\n return this.i18nService.t(\"allVaults\");\n }\n\n applyCollectionFilter(collection: TreeNode) {\n const filter = this.activeFilter;\n filter.resetFilter();\n filter.selectedCollectionNode = collection;\n this.activeFilterChanged.emit(filter);\n }\n\n addCipher() {\n this.onAddCipher.emit();\n }\n}\n","
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \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
    \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 { firstValueFrom, Subject } from \"rxjs\";\nimport { first, switchMap, takeUntil } from \"rxjs/operators\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.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 { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { TokenService } from \"@bitwarden/common/abstractions/token.service\";\nimport { KdfType, DEFAULT_PBKDF2_ITERATIONS } from \"@bitwarden/common/enums/kdfType\";\nimport { ServiceUtils } from \"@bitwarden/common/misc/serviceUtils\";\nimport { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\n\nimport { UpdateKeyComponent } from \"../../../app/settings/update-key.component\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\nimport { AttachmentsComponent } from \"./attachments.component\";\nimport { CollectionsComponent } from \"./collections.component\";\nimport { FolderAddEditComponent } from \"./folder-add-edit.component\";\nimport { ShareComponent } from \"./share.component\";\nimport { VaultFilterComponent } from \"./vault-filter/components/vault-filter.component\";\nimport { VaultFilterService } from \"./vault-filter/services/abstractions/vault-filter.service\";\nimport { VaultFilter } from \"./vault-filter/shared/models/vault-filter.model\";\nimport { FolderFilter, OrganizationFilter } from \"./vault-filter/shared/models/vault-filter.type\";\nimport { VaultItemsComponent } from \"./vault-items.component\";\n\nconst BroadcasterSubscriptionId = \"VaultComponent\";\n\n@Component({\n selector: \"app-vault\",\n templateUrl: \"vault.component.html\",\n})\nexport class VaultComponent implements OnInit, OnDestroy {\n @ViewChild(\"vaultFilter\", { static: true }) filterComponent: VaultFilterComponent;\n @ViewChild(VaultItemsComponent, { static: true }) vaultItemsComponent: VaultItemsComponent;\n @ViewChild(\"attachments\", { read: ViewContainerRef, static: true })\n attachmentsModalRef: ViewContainerRef;\n @ViewChild(\"folderAddEdit\", { read: ViewContainerRef, static: true })\n folderAddEditModalRef: ViewContainerRef;\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n @ViewChild(\"share\", { read: ViewContainerRef, static: true }) shareModalRef: ViewContainerRef;\n @ViewChild(\"collections\", { read: ViewContainerRef, static: true })\n collectionsModalRef: ViewContainerRef;\n @ViewChild(\"updateKeyTemplate\", { read: ViewContainerRef, static: true })\n updateKeyModalRef: ViewContainerRef;\n\n showVerifyEmail = false;\n showBrowserOutdated = false;\n showUpdateKey = false;\n showPremiumCallout = false;\n showLowKdf = false;\n trashCleanupWarning: string = null;\n kdfIterations: number;\n activeFilter: VaultFilter = new VaultFilter();\n private destroy$ = new Subject();\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 vaultFilterService: VaultFilterService,\n private cipherService: CipherService,\n private passwordRepromptService: PasswordRepromptService\n ) {}\n\n async ngOnInit() {\n this.showVerifyEmail = !(await this.tokenService.getEmailVerified());\n this.showBrowserOutdated = window.navigator.userAgent.indexOf(\"MSIE\") !== -1;\n //disable warning for february release -> add await this.isLowKdfIteration(); when ready\n this.showLowKdf = false;\n this.trashCleanupWarning = this.i18nService.t(\n this.platformUtilsService.isSelfHost()\n ? \"trashCleanupWarningSelfHosted\"\n : \"trashCleanupWarning\"\n );\n\n this.route.queryParams\n .pipe(\n first(),\n switchMap(async (params: Params) => {\n await this.syncService.fullSync(false);\n await this.vaultFilterService.reloadCollections();\n await this.vaultItemsComponent.reload();\n\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n this.showPremiumCallout =\n !this.showVerifyEmail && !canAccessPremium && !this.platformUtilsService.isSelfHost();\n this.showUpdateKey = !(await this.cryptoService.hasEncKey());\n\n const cipherId = getCipherIdFromParams(params);\n if (!cipherId) {\n return;\n }\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 switchMap(() => this.route.queryParams),\n switchMap(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 takeUntil(this.destroy$)\n )\n .subscribe();\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.vaultFilterService.reloadCollections(),\n this.vaultItemsComponent.load(this.vaultItemsComponent.filter),\n ]);\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n }\n\n get isShowingCards() {\n return (\n this.showBrowserOutdated ||\n this.showPremiumCallout ||\n this.showUpdateKey ||\n this.showVerifyEmail ||\n this.showLowKdf\n );\n }\n\n emailVerified(verified: boolean) {\n this.showVerifyEmail = !verified;\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async applyVaultFilter(filter: VaultFilter) {\n this.activeFilter = filter;\n this.vaultItemsComponent.showAddNew = !this.activeFilter.isDeleted;\n await this.vaultItemsComponent.reload(\n this.activeFilter.buildFilter(),\n this.activeFilter.isDeleted\n );\n this.go();\n }\n\n async applyOrganizationFilter(orgId: string) {\n if (orgId == null) {\n orgId = \"MyVault\";\n }\n const orgs = await firstValueFrom(this.filterComponent.filters.organizationFilter.data$);\n const orgNode = ServiceUtils.getTreeNodeObject(orgs, orgId) as TreeNode;\n this.filterComponent.filters?.organizationFilter?.action(orgNode);\n }\n\n addFolder = async (): Promise => {\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 });\n }\n );\n };\n\n editFolder = async (folder: FolderFilter): Promise => {\n const [modal] = await this.modalService.openViewRef(\n FolderAddEditComponent,\n this.folderAddEditModalRef,\n (comp) => {\n comp.folderId = folder.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedFolder.subscribe(async () => {\n modal.close();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeletedFolder.subscribe(async () => {\n modal.close();\n });\n }\n );\n };\n\n filterSearchText(searchText: string) {\n this.vaultItemsComponent.searchText = searchText;\n this.vaultItemsComponent.search(200);\n }\n\n async editCipherAttachments(cipher: CipherView) {\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n if (cipher.organizationId == null && !canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n } else if (cipher.organizationId != null) {\n const org = this.organizationService.get(cipher.organizationId);\n if (org != null && (org.maxStorageGb == null || org.maxStorageGb === 0)) {\n this.messagingService.send(\"upgradeOrganization\", {\n organizationId: cipher.organizationId,\n });\n return;\n }\n }\n\n let madeAttachmentChanges = false;\n const [modal] = await this.modalService.openViewRef(\n AttachmentsComponent,\n this.attachmentsModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onUploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onDeletedAttachment.subscribe(() => (madeAttachmentChanges = true));\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onReuploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n }\n );\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n modal.onClosed.subscribe(async () => {\n if (madeAttachmentChanges) {\n await this.vaultItemsComponent.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n async shareCipher(cipher: CipherView) {\n const [modal] = await this.modalService.openViewRef(\n ShareComponent,\n this.shareModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSharedCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n }\n );\n }\n\n async editCipherCollections(cipher: CipherView) {\n const [modal] = await this.modalService.openViewRef(\n CollectionsComponent,\n this.collectionsModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedCollections.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n }\n );\n }\n\n async addCipher() {\n const component = await this.editCipher(null);\n component.type = this.activeFilter.cipherType;\n if (this.activeFilter.organizationId !== \"MyVault\") {\n component.organizationId = this.activeFilter.organizationId;\n component.collections = (\n await firstValueFrom(this.vaultFilterService.filteredCollections$)\n ).filter((c) => !c.readOnly && c.id != null);\n }\n const selectedColId = this.activeFilter.collectionId;\n if (selectedColId !== \"AllCollections\") {\n component.collectionIds = [selectedColId];\n }\n component.folderId = this.activeFilter.folderId;\n }\n\n async navigateToCipher(cipher: CipherView) {\n this.go({ itemId: cipher?.id });\n }\n\n async editCipher(cipher: CipherView) {\n return this.editCipherId(cipher?.id);\n }\n\n async editCipherId(id: string) {\n const cipher = await this.cipherService.get(id);\n if (cipher != null && cipher.reprompt != 0) {\n if (!(await this.passwordRepromptService.showPasswordPrompt())) {\n this.go({ cipherId: null, itemId: null });\n return;\n }\n }\n\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.cipherAddEditModalRef,\n (comp) => {\n comp.cipherId = id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeletedCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onRestoredCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n }\n );\n\n modal.onClosedPromise().then(() => {\n this.go({ cipherId: null, itemId: null });\n });\n\n return childComponent;\n }\n\n async cloneCipher(cipher: CipherView) {\n const component = await this.editCipher(cipher);\n component.cloneMode = true;\n }\n\n async updateKey() {\n await this.modalService.openViewRef(UpdateKeyComponent, this.updateKeyModalRef);\n }\n\n async isLowKdfIteration() {\n const kdfType = await this.stateService.getKdfType();\n const kdfOptions = await this.stateService.getKdfConfig();\n return kdfType === KdfType.PBKDF2_SHA256 && kdfOptions.iterations < DEFAULT_PBKDF2_ITERATIONS;\n }\n\n private go(queryParams: any = null) {\n if (queryParams == null) {\n queryParams = {\n favorites: this.activeFilter.isFavorites || null,\n type: this.activeFilter.cipherType,\n folderId: this.activeFilter.folderId,\n collectionId: this.activeFilter.collectionId,\n deleted: this.activeFilter.isDeleted || 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 { BreadcrumbsModule } from \"@bitwarden/components\";\n\nimport { CollectionBadgeModule } from \"../../../app/organizations/vault/collection-badge/collection-badge.module\";\nimport { GroupBadgeModule } from \"../../../app/organizations/vault/group-badge/group-badge.module\";\nimport { LooseComponentsModule, SharedModule } from \"../../../app/shared\";\n\nimport { BulkDialogsModule } from \"./bulk-action-dialogs/bulk-dialogs.module\";\nimport { OrganizationBadgeModule } from \"./organization-badge/organization-badge.module\";\nimport { PipesModule } from \"./pipes/pipes.module\";\nimport { VaultFilterModule } from \"./vault-filter/vault-filter.module\";\nimport { VaultHeaderComponent } from \"./vault-header/vault-header.component\";\nimport { VaultItemsComponent } from \"./vault-items.component\";\nimport { VaultRoutingModule } from \"./vault-routing.module\";\nimport { VaultComponent } from \"./vault.component\";\n\n@NgModule({\n imports: [\n VaultFilterModule,\n VaultRoutingModule,\n OrganizationBadgeModule,\n GroupBadgeModule,\n CollectionBadgeModule,\n PipesModule,\n SharedModule,\n LooseComponentsModule,\n BulkDialogsModule,\n BreadcrumbsModule,\n ],\n declarations: [VaultComponent, VaultItemsComponent, VaultHeaderComponent],\n exports: [VaultComponent],\n})\nexport class VaultModule {}\n","export class EmergencyAccessAcceptRequest {\n token: string;\n}\n","
    \n
    \n \"Bitwarden\"\n

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

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

    {{ \"emergencyAccess\" | i18n }}

    \n
    \n
    \n

    \n {{ name }}\n

    \n

    {{ \"acceptEmergencyAccess\" | i18n }}

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

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

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

    {{ \"joinOrganization\" | i18n }}

    \n
    \n
    \n

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

    \n

    {{ \"joinOrganizationDesc\" | i18n }}

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

    {{ \"passwordHint\" | i18n }}

    \n
    \n
    \n
    \n \n \n {{ \"enterEmailToGetHint\" | i18n }}\n
    \n
    \n
    \n \n {{ \"submit\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
    \n
    \n
    \n
    \n
    \n
    \n","import { Directive, NgZone, OnDestroy, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { Subject } from \"rxjs\";\nimport { concatMap, take, takeUntil } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { HashPurpose } from \"@bitwarden/common/enums/hashPurpose\";\nimport { KeySuffixOptions } from \"@bitwarden/common/enums/keySuffixOptions\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { EncString } from \"@bitwarden/common/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/models/request/secret-verification.request\";\n\n@Directive()\nexport class LockComponent implements OnInit, OnDestroy {\n masterPassword = \"\";\n pin = \"\";\n showPassword = false;\n email: string;\n pinLock = false;\n webVaultHostname = \"\";\n formPromise: Promise;\n supportsBiometric: boolean;\n biometricLock: boolean;\n biometricText: string;\n hideInput: boolean;\n\n protected successRoute = \"vault\";\n protected onSuccessfulSubmit: () => Promise;\n\n private invalidPinAttempts = 0;\n private pinSet: [boolean, boolean];\n\n private destroy$ = new Subject();\n\n constructor(\n protected router: Router,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected cryptoService: CryptoService,\n protected vaultTimeoutService: VaultTimeoutService,\n protected vaultTimeoutSettingsService: VaultTimeoutSettingsService,\n protected environmentService: EnvironmentService,\n protected stateService: StateService,\n protected apiService: ApiService,\n protected logService: LogService,\n private keyConnectorService: KeyConnectorService,\n protected ngZone: NgZone\n ) {}\n\n async ngOnInit() {\n this.stateService.activeAccount$\n .pipe(\n concatMap(async () => {\n await this.load();\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async submit() {\n if (this.pinLock) {\n return await this.handlePinRequiredUnlock();\n }\n\n await this.handleMasterPasswordRequiredUnlock();\n }\n\n async logOut() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"logOutConfirmation\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"cancel\")\n );\n if (confirmed) {\n this.messagingService.send(\"logout\");\n }\n }\n\n async unlockBiometric(): Promise {\n if (!this.biometricLock) {\n return;\n }\n\n const success = (await this.cryptoService.getKey(KeySuffixOptions.Biometric)) != null;\n\n if (success) {\n await this.doContinue();\n }\n\n return success;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n const input = document.getElementById(this.pinLock ? \"pin\" : \"masterPassword\");\n if (this.ngZone.isStable) {\n input.focus();\n } else {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => input.focus());\n }\n }\n\n private async handlePinRequiredUnlock() {\n if (this.pin == null || this.pin === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"pinRequired\")\n );\n return;\n }\n\n return await this.doUnlockWithPin();\n }\n\n private async doUnlockWithPin() {\n let failed = true;\n try {\n const kdf = await this.stateService.getKdfType();\n const kdfConfig = await this.stateService.getKdfConfig();\n if (this.pinSet[0]) {\n const key = await this.cryptoService.makeKeyFromPin(\n this.pin,\n this.email,\n kdf,\n kdfConfig,\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(this.pin, this.email, kdf, kdfConfig);\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 kdfConfig = await this.stateService.getKdfConfig();\n\n const key = await this.cryptoService.makeKey(this.masterPassword, this.email, kdf, kdfConfig);\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, kdfConfig);\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","export enum AuthRequestType {\n AuthenticateAndUnlock = 0,\n Unlock = 1,\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 { 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","import { I18nService } from \"../abstractions/i18n.service\";\n\nimport { IFrameComponent } from \"./iframe_component\";\n\nexport class CaptchaIFrame extends IFrameComponent {\n constructor(\n win: Window,\n webVaultUrl: string,\n private i18nService: I18nService,\n successCallback: (message: string) => any,\n errorCallback: (message: string) => any,\n infoCallback: (message: string) => any\n ) {\n super(\n win,\n webVaultUrl,\n \"captcha-connector.html\",\n \"hcaptcha_iframe\",\n successCallback,\n errorCallback,\n (message: string) => {\n const parsedMessage = JSON.parse(message);\n if (typeof parsedMessage !== \"string\") {\n this.iframe.height = parsedMessage.height.toString();\n this.iframe.width = parsedMessage.width.toString();\n } else {\n infoCallback(parsedMessage);\n }\n }\n );\n }\n\n init(siteKey: string): void {\n super.initComponent(\n this.createParams({ siteKey: siteKey, locale: this.i18nService.translationLocale }, 1)\n );\n }\n}\n","export abstract class IFrameComponent {\n iframe: HTMLIFrameElement;\n private connectorLink: HTMLAnchorElement;\n private parseFunction = this.parseMessage.bind(this);\n\n constructor(\n private win: Window,\n protected webVaultUrl: string,\n private path: string,\n private iframeId: string,\n public successCallback?: (message: string) => any,\n public errorCallback?: (message: string) => any,\n public infoCallback?: (message: string) => any\n ) {\n this.connectorLink = win.document.createElement(\"a\");\n }\n\n stop() {\n this.sendMessage(\"stop\");\n }\n\n start() {\n this.sendMessage(\"start\");\n }\n\n sendMessage(message: any) {\n if (!this.iframe || !this.iframe.src || !this.iframe.contentWindow) {\n return;\n }\n\n this.iframe.contentWindow.postMessage(message, this.iframe.src);\n }\n\n base64Encode(str: string): string {\n return btoa(\n encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode((\"0x\" + p1) as any);\n })\n );\n }\n\n cleanup() {\n this.win.removeEventListener(\"message\", this.parseFunction, false);\n }\n\n protected createParams(data: any, version: number) {\n return new URLSearchParams({\n data: this.base64Encode(JSON.stringify(data)),\n parent: encodeURIComponent(this.win.document.location.href),\n v: version.toString(),\n });\n }\n\n protected initComponent(params: URLSearchParams): void {\n this.connectorLink.href = `${this.webVaultUrl}/${this.path}?${params}`;\n this.iframe = this.win.document.getElementById(this.iframeId) as HTMLIFrameElement;\n this.iframe.src = this.connectorLink.href;\n\n this.win.addEventListener(\"message\", this.parseFunction, false);\n }\n\n private parseMessage(event: MessageEvent) {\n if (!this.validMessage(event)) {\n return;\n }\n\n const parts: string[] = event.data.split(\"|\");\n if (parts[0] === \"success\" && this.successCallback) {\n this.successCallback(parts[1]);\n } else if (parts[0] === \"error\" && this.errorCallback) {\n this.errorCallback(parts[1]);\n } else if (parts[0] === \"info\" && this.infoCallback) {\n this.infoCallback(parts[1]);\n }\n }\n\n private validMessage(event: MessageEvent) {\n if (\n event.origin == null ||\n event.origin === \"\" ||\n event.origin !== (this.connectorLink as any).origin ||\n event.data == null ||\n typeof event.data !== \"string\"\n ) {\n return false;\n }\n\n return (\n event.data.indexOf(\"success|\") === 0 ||\n event.data.indexOf(\"error|\") === 0 ||\n event.data.indexOf(\"info|\") === 0\n );\n }\n}\n","import { 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 { Directive, OnDestroy, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { AnonymousHubService } from \"@bitwarden/common/abstractions/anonymousHub.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AppIdService } from \"@bitwarden/common/abstractions/appId.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { AuthRequestType } from \"@bitwarden/common/enums/authRequestType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { PasswordlessLogInCredentials } from \"@bitwarden/common/models/domain/log-in-credentials\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { PasswordlessCreateAuthRequest } from \"@bitwarden/common/models/request/passwordless-create-auth.request\";\nimport { AuthRequestResponse } from \"@bitwarden/common/models/response/auth-request.response\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\n\nimport { CaptchaProtectedComponent } from \"./captchaProtected.component\";\n\n@Directive()\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 resendTimeout = 12000;\n private authRequestKeyPair: [publicKey: ArrayBuffer, privateKey: ArrayBuffer];\n\n constructor(\n protected router: Router,\n private cryptoService: CryptoService,\n private cryptoFunctionService: CryptoFunctionService,\n private appIdService: AppIdService,\n private passwordGenerationService: PasswordGenerationService,\n private apiService: ApiService,\n private authService: AuthService,\n private logService: LogService,\n environmentService: EnvironmentService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n private anonymousHubService: AnonymousHubService,\n private validationService: ValidationService,\n private stateService: StateService,\n private loginService: LoginService\n ) {\n super(environmentService, i18nService, platformUtilsService);\n\n const navigation = this.router.getCurrentNavigation();\n if (navigation) {\n this.email = this.loginService.getEmail();\n }\n\n //gets signalR push notification\n this.authService\n .getPushNotifcationObs$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((id) => {\n this.confirmResponse(id);\n });\n }\n\n async ngOnInit() {\n if (!this.email) {\n this.router.navigate([\"/login\"]);\n return;\n }\n\n this.startPasswordlessLogin();\n }\n\n async startPasswordlessLogin() {\n this.showResendNotification = false;\n\n try {\n await this.buildAuthRequest();\n const reqResponse = await this.apiService.postAuthRequest(this.passwordlessRequest);\n\n if (reqResponse.id) {\n this.anonymousHubService.createHubConnection(reqResponse.id);\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n setTimeout(() => {\n this.showResendNotification = true;\n }, this.resendTimeout);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.anonymousHubService.stopHubConnection();\n }\n\n private async confirmResponse(requestId: string) {\n try {\n const response = await this.apiService.getAuthResponse(\n requestId,\n this.passwordlessRequest.accessCode\n );\n\n if (!response.requestApproved) {\n return;\n }\n\n const credentials = await this.buildLoginCredntials(requestId, response);\n const loginResponse = await this.authService.logIn(credentials);\n\n if (loginResponse.requiresTwoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute]);\n }\n } else if (loginResponse.forcePasswordReset) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n await this.setRememberEmailValues();\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 async setRememberEmailValues() {\n const rememberEmail = this.loginService.getRememberEmail();\n const rememberedEmail = this.loginService.getEmail();\n await this.stateService.setRememberedEmail(rememberEmail ? rememberedEmail : null);\n this.loginService.clearValues();\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","\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\";\n\nimport { LoginWithDeviceComponent as BaseLoginWithDeviceComponent } from \"@bitwarden/angular/components/login-with-device.component\";\nimport { AnonymousHubService } from \"@bitwarden/common/abstractions/anonymousHub.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AppIdService } from \"@bitwarden/common/abstractions/appId.service\";\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { LoginService } from \"@bitwarden/common/abstractions/login.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\n\nimport { StateService } from \"../../core/state/state.service\";\n\n@Component({\n selector: \"app-login-with-device\",\n templateUrl: \"login-with-device.component.html\",\n})\nexport class LoginWithDeviceComponent\n extends BaseLoginWithDeviceComponent\n implements OnInit, OnDestroy\n{\n constructor(\n router: Router,\n cryptoService: CryptoService,\n cryptoFunctionService: CryptoFunctionService,\n appIdService: AppIdService,\n passwordGenerationService: PasswordGenerationService,\n apiService: ApiService,\n authService: AuthService,\n logService: LogService,\n environmentService: EnvironmentService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n anonymousHubService: AnonymousHubService,\n validationService: ValidationService,\n stateService: StateService,\n loginService: LoginService\n ) {\n super(\n router,\n cryptoService,\n cryptoFunctionService,\n appIdService,\n passwordGenerationService,\n apiService,\n authService,\n logService,\n environmentService,\n i18nService,\n platformUtilsService,\n anonymousHubService,\n validationService,\n stateService,\n loginService\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 selfHosted = false;\n showLoginWithDevice: boolean;\n validatedEmail = false;\n paramEmailSet = false;\n\n formGroup = this.formBuilder.group({\n email: [\"\", [Validators.required, Validators.email]],\n masterPassword: [\"\", [Validators.required, Validators.minLength(8)]],\n rememberEmail: [false],\n });\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"vault\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n\n get loggedEmail() {\n return this.formGroup.value.email;\n }\n\n constructor(\n protected apiService: ApiService,\n protected appIdService: AppIdService,\n protected authService: AuthService,\n protected router: Router,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n protected stateService: StateService,\n environmentService: EnvironmentService,\n protected passwordGenerationService: PasswordGenerationService,\n protected cryptoFunctionService: CryptoFunctionService,\n protected logService: LogService,\n protected ngZone: NgZone,\n protected formBuilder: FormBuilder,\n protected formValidationErrorService: FormValidationErrorsService,\n protected route: ActivatedRoute,\n protected loginService: LoginService\n ) {\n super(environmentService, i18nService, platformUtilsService);\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n get selfHostedDomain() {\n return this.environmentService.hasBaseUrl() ? this.environmentService.getWebVaultUrl() : null;\n }\n\n async ngOnInit() {\n this.route?.queryParams.subscribe((params) => {\n if (params != null) {\n const queryParamsEmail = params[\"email\"];\n if (queryParamsEmail != null && queryParamsEmail.indexOf(\"@\") > -1) {\n this.formGroup.get(\"email\").setValue(queryParamsEmail);\n this.loginService.setEmail(queryParamsEmail);\n this.paramEmailSet = true;\n }\n }\n });\n let email = this.loginService.getEmail();\n\n if (email == null || email === \"\") {\n email = await this.stateService.getRememberedEmail();\n }\n\n if (!this.paramEmailSet) {\n this.formGroup.get(\"email\")?.setValue(email ?? \"\");\n }\n let rememberEmail = this.loginService.getRememberEmail();\n if (rememberEmail == null) {\n rememberEmail = (await this.stateService.getRememberedEmail()) != null;\n }\n this.formGroup.get(\"rememberEmail\")?.setValue(rememberEmail);\n }\n\n async submit(showToast = true) {\n const data = this.formGroup.value;\n\n await this.setupCaptcha();\n\n this.formGroup.markAllAsTouched();\n\n //web\n if (this.formGroup.invalid && !showToast) {\n return;\n }\n\n //desktop, browser; This should be removed once all clients use reactive forms\n if (this.formGroup.invalid && showToast) {\n const errorText = this.getErrorToastMessage();\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), errorText);\n return;\n }\n\n try {\n const credentials = new PasswordLogInCredentials(\n data.email,\n data.masterPassword,\n this.captchaToken,\n null\n );\n this.formPromise = this.authService.logIn(credentials);\n const response = await this.formPromise;\n this.setFormValues();\n await this.loginService.saveEmailSettings();\n if (this.handleCaptchaRequired(response)) {\n return;\n } else if (response.requiresTwoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute]);\n }\n } else if (response.forcePasswordReset) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n if (this.ngZone.isStable) {\n document.getElementById(\"masterPassword\").focus();\n } else {\n this.ngZone.onStable\n .pipe(take(1))\n .subscribe(() => document.getElementById(\"masterPassword\").focus());\n }\n }\n\n async startPasswordlessLogin() {\n this.formGroup.get(\"masterPassword\")?.clearValidators();\n this.formGroup.get(\"masterPassword\")?.updateValueAndValidity();\n\n if (!this.formGroup.valid) {\n return;\n }\n\n this.setFormValues();\n this.router.navigate([\"/login-with-device\"]);\n }\n\n async launchSsoBrowser(clientId: string, ssoRedirectUri: string) {\n await this.saveEmailSettings();\n // Generate necessary sso params\n const passwordOptions: any = {\n type: \"password\",\n length: 64,\n uppercase: true,\n lowercase: true,\n numbers: true,\n special: false,\n };\n const state = await this.passwordGenerationService.generatePassword(passwordOptions);\n const ssoCodeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n const codeVerifierHash = await this.cryptoFunctionService.hash(ssoCodeVerifier, \"sha256\");\n const codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n\n // Save sso params\n await this.stateService.setSsoState(state);\n await this.stateService.setSsoCodeVerifier(ssoCodeVerifier);\n\n // Build URI\n const webUrl = this.environmentService.getWebVaultUrl();\n\n // Launch browser\n this.platformUtilsService.launchUri(\n webUrl +\n \"/#/sso?clientId=\" +\n clientId +\n \"&redirectUri=\" +\n encodeURIComponent(ssoRedirectUri) +\n \"&state=\" +\n state +\n \"&codeChallenge=\" +\n codeChallenge\n );\n }\n\n async validateEmail() {\n this.formGroup.controls.email.markAsTouched();\n const emailInvalid = this.formGroup.get(\"email\").invalid;\n if (!emailInvalid) {\n this.toggleValidateEmail(true);\n await this.getLoginWithDevice(this.loggedEmail);\n }\n }\n\n toggleValidateEmail(value: boolean) {\n this.validatedEmail = value;\n this.formGroup.controls.masterPassword.reset();\n }\n\n setFormValues() {\n this.loginService.setEmail(this.formGroup.value.email);\n this.loginService.setRememberEmail(this.formGroup.value.rememberEmail);\n }\n\n async saveEmailSettings() {\n this.setFormValues();\n await this.loginService.saveEmailSettings();\n }\n\n private getErrorToastMessage() {\n const error: AllValidationErrors = this.formValidationErrorService\n .getFormValidationErrors(this.formGroup.controls)\n .shift();\n\n if (error) {\n switch (error.errorName) {\n case \"email\":\n return this.i18nService.t(\"invalidEmail\");\n default:\n return this.i18nService.t(this.errorTag(error));\n }\n }\n\n return;\n }\n\n private errorTag(error: AllValidationErrors): string {\n const name = error.errorName.charAt(0).toUpperCase() + error.errorName.slice(1);\n return `${error.controlName}${name}`;\n }\n\n 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 {{ \"rememberEmail\" | i18n }}\n \n
    \n\n
    \n \n {{ \"continue\" | i18n }} \n \n
    \n\n
    \n\n

    \n {{ \"newAroundHere\" | i18n }}\n \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 goToRegister() {\n const email = this.formGroup.value.email;\n\n if (email) {\n this.router.navigate([\"/register\"], { queryParams: { email: email } });\n return;\n }\n\n this.router.navigate([\"/register\"]);\n }\n\n async submit() {\n const rememberEmail = this.formGroup.value.rememberEmail;\n\n if (!rememberEmail) {\n await this.stateService.setRememberedEmail(null);\n }\n await super.submit(false);\n }\n\n private getPasswordStrengthUserInput() {\n const email = this.formGroup.value.email;\n let userInput: string[] = [];\n const atPosition = email.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput.concat(\n email\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n );\n }\n return userInput;\n }\n}\n","export class DeleteRecoverRequest {\n email: string;\n}\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { DeleteRecoverRequest } from \"@bitwarden/common/models/request/delete-recover.request\";\n\n@Component({\n selector: \"app-recover-delete\",\n templateUrl: \"recover-delete.component.html\",\n})\nexport class RecoverDeleteComponent {\n email: string;\n formPromise: Promise;\n\n constructor(\n private router: Router,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const request = new DeleteRecoverRequest();\n request.email = this.email.trim().toLowerCase();\n this.formPromise = this.apiService.postAccountRecoverDelete(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deleteRecoverEmailSent\")\n );\n this.router.navigate([\"/\"]);\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
    \n
    \n
    \n

    {{ \"deleteAccount\" | i18n }}

    \n
    \n
    \n

    {{ \"deleteRecoverDesc\" | i18n }}

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

    {{ \"recoverAccountTwoStep\" | i18n }}

    \n
    \n
    \n

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

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

    {{ \"ssoLogInWithOrgIdentifier\" | i18n }}

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

    \n

    {{ step.subLabel }}

    \n
    \n \n\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { VerticalStep } from \"./vertical-step.component\";\n\n@Component({\n selector: \"app-vertical-step-content\",\n templateUrl: \"vertical-step-content.component.html\",\n})\nexport class VerticalStepContentComponent {\n @Output() onSelectStep = new EventEmitter();\n\n @Input() disabled = false;\n @Input() selected = false;\n @Input() step: VerticalStep;\n @Input() stepNumber: number;\n\n selectStep() {\n this.onSelectStep.emit();\n }\n}\n","
    \n
      \n
    • \n \n
    \n \n \n \n\n","import { CdkStepper } from \"@angular/cdk/stepper\";\nimport { Component, Input, QueryList } from \"@angular/core\";\n\nimport { VerticalStep } from \"./vertical-step.component\";\n\n@Component({\n selector: \"app-vertical-stepper\",\n templateUrl: \"vertical-stepper.component.html\",\n providers: [{ provide: CdkStepper, useExisting: VerticalStepperComponent }],\n})\nexport class VerticalStepperComponent extends CdkStepper {\n readonly steps: QueryList;\n\n @Input()\n activeClass = \"active\";\n\n isNextButtonHidden() {\n return !(this.steps.length === this.selectedIndex + 1);\n }\n\n isStepDisabled(index: number) {\n if (this.selectedIndex !== index) {\n return this.selectedIndex === index - 1\n ? !this.steps.find((_, i) => i == index - 1)?.completed\n : true;\n }\n return false;\n }\n\n selectStepByIndex(index: number): void {\n this.selectedIndex = index;\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { CaptchaProtectedRequest } from \"./captcha-protected.request\";\nimport { KeysRequest } from \"./keys.request\";\nimport { ReferenceEventRequest } from \"./reference-event.request\";\n\nexport class RegisterRequest implements CaptchaProtectedRequest {\n masterPasswordHint: string;\n keys: KeysRequest;\n token: string;\n organizationUserId: string;\n\n constructor(\n public email: string,\n public name: string,\n public masterPasswordHash: string,\n masterPasswordHint: string,\n public key: string,\n public referenceData: ReferenceEventRequest,\n public captchaResponse: string,\n public kdf: KdfType,\n public kdfIterations: number,\n public kdfMemory?: number,\n public kdfParallelism?: number\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 { AuditService } from \"@bitwarden/common/abstractions/audit.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_CONFIG, 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 characterMinimumMessage: string;\n minimumLength = 8;\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(this.minimumLength)]],\n confirmMasterPassword: [\"\", [Validators.required, Validators.minLength(this.minimumLength)]],\n hint: [\n null,\n [\n InputsFieldMatch.validateInputsDoesntMatch(\n \"masterPassword\",\n this.i18nService.t(\"hintEqualsPassword\")\n ),\n ],\n ],\n checkForBreaches: [true],\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 protected auditService: AuditService\n ) {\n super(environmentService, i18nService, platformUtilsService);\n this.showTerms = !platformUtilsService.isSelfHost();\n this.characterMinimumMessage = this.i18nService.t(\"characterMinimum\", this.minimumLength);\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 const passwordWeak =\n this.passwordStrengthResult != null && this.passwordStrengthResult.score < 3;\n const passwordLeak =\n this.formGroup.controls.checkForBreaches.value &&\n (await this.auditService.passwordLeaked(this.formGroup.controls.masterPassword.value)) > 0;\n\n if (passwordWeak && passwordLeak) {\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"weakAndBreachedMasterPasswordDesc\"),\n this.i18nService.t(\"weakAndExposedMasterPassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n return { isValid: false };\n }\n } else if (passwordWeak) {\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 } else if (passwordLeak) {\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"exposedMasterPasswordDesc\"),\n this.i18nService.t(\"exposedMasterPassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n return { isValid: false };\n }\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 kdfConfig = DEFAULT_KDF_CONFIG;\n const key = await this.cryptoService.makeKey(masterPassword, email, kdf, kdfConfig);\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 this.referenceData,\n this.captchaToken,\n kdf,\n kdfConfig.iterations,\n kdfConfig.memory,\n kdfConfig.parallelism\n );\n request.keys = new KeysRequest(keys[0], keys[1].encryptedString);\n const orgInvite = await this.stateService.getOrganizationInvitation();\n if (orgInvite != null && orgInvite.token != null && orgInvite.organizationUserId != null) {\n request.token = orgInvite.token;\n request.organizationUserId = orgInvite.organizationUserId;\n }\n return request;\n }\n\n private async registerAccount(\n request: RegisterRequest,\n showToast: boolean\n ): Promise<{ successful: boolean; captchaBypassToken?: string }> {\n if (!(await this.validateRegistration(showToast)).isValid) {\n return { successful: false };\n }\n this.formPromise = this.apiService.postRegister(request);\n try {\n const response = await this.formPromise;\n return { successful: true, captchaBypassToken: response.captchaBypassToken };\n } catch (e) {\n if (this.handleCaptchaRequired(e)) {\n return { successful: false };\n } else {\n throw e;\n }\n }\n }\n\n private async logIn(\n email: string,\n masterPassword: string,\n captchaBypassToken: string\n ): Promise<{ captchaRequired: boolean }> {\n const credentials = new PasswordLogInCredentials(\n email,\n masterPassword,\n captchaBypassToken,\n null\n );\n const loginResponse = await this.authService.logIn(credentials);\n if (this.handleCaptchaRequired(loginResponse)) {\n return { captchaRequired: true };\n }\n return { captchaRequired: false };\n }\n}\n","\n\n\n
    \n
    \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 {{ \"createAccount\" | i18n }}\n \n \n \n {{ \"logIn\" | i18n }}\n \n \n \n \n {{ \"logIn\" | i18n }}\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 { AuditService } from \"@bitwarden/common/abstractions/audit.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 auditService: AuditService\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 auditService\n );\n }\n\n async ngOnInit() {\n // TODO: Remove once breach checks are added for web\n this.formGroup.patchValue({ checkForBreaches: false });\n await super.ngOnInit();\n this.referenceData = this.referenceDataValue;\n\n if (this.queryParamEmail) {\n this.formGroup.get(\"email\")?.setValue(this.queryParamEmail);\n }\n }\n\n async submit() {\n if (\n this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n this.passwordStrengthResult.score,\n this.formGroup.value.masterPassword,\n this.enforcedPolicyOptions\n )\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordPolicyRequirementsNotMet\")\n );\n return;\n }\n\n await super.submit(false);\n }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-logo-forbes\",\n templateUrl: \"logo-forbes.component.html\",\n})\nexport class LogoForbesComponent {}\n","
    \n
    \n \n \n \n
    \n
    \n “Bitwarden boasts the backing of some of the world's best security experts and an attractive,\n easy-to-use interface”\n
    \n
    \n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-logo-us-news\",\n templateUrl: \"logo-us-news.component.html\",\n})\nexport class LogoUSNewsComponent {}\n","\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-enterprise-content\",\n templateUrl: \"enterprise-content.component.html\",\n})\nexport class EnterpriseContentComponent {}\n","

    The Bitwarden Password Manager

    \n
    \n

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

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

    The Bitwarden Password Manager

    \n
    \n

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

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

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

    \n
      \n
    • \n

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

      \n
    • \n
    • \n

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

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

    {{ \"billingPlanLabel\" | i18n }}

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

    {{ \"paymentType\" | i18n }}

    \n \n \n
    \n\n
    \n \n\n \n
    \n
    \n
    \n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { UntypedFormBuilder, FormGroup } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\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\n\n
    \n

    {{ \"createAccount\" | i18n }}

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

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

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

    {{ \"twoStepOptions\" | i18n }}

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

    {{ p.name }}

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

    {{ \"recoveryCodeTitle\" | i18n }}

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

    {{ title }}

    \n
    \n
    \n \n

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

    \n

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

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

    {{ \"insertYubiKey\" | i18n }}

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

    {{ \"noTwoStepProviders\" | i18n }}

    \n

    {{ \"noTwoStepProviders2\" | i18n }}

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

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

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

    {{ \"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 {{ \"edit\" | i18n }}\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, Router } from \"@angular/router\";\nimport { firstValueFrom, lastValueFrom } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collection.data\";\nimport { Collection } from \"@bitwarden/common/models/domain/collection\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport {\n CollectionDetailsResponse,\n CollectionResponse,\n} from \"@bitwarden/common/models/response/collection.response\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport {\n DialogService,\n SimpleDialogCloseType,\n SimpleDialogOptions,\n SimpleDialogType,\n} from \"@bitwarden/components\";\n\nimport { CollectionDialogResult, openCollectionDialog } from \"../shared\";\n\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 private dialogService: DialogService,\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 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 == undefined && this.canCreate;\n const canEdit = collection != undefined && this.canEdit(collection);\n const canDelete = collection != undefined && this.canDelete(collection);\n\n if (!(canCreate || canEdit || canDelete)) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"missingPermissions\"));\n return;\n }\n\n if (\n !collection &&\n this.organization.planProductType === ProductType.Free &&\n this.collections.length === this.organization.maxCollections\n ) {\n // Show org upgrade modal\n // It might be worth creating a simple\n // org upgrade dialog service to launch the dialog here and in the people.comp\n // once the enterprise pod is done w/ their organization module refactor.\n const orgUpgradeSimpleDialogOpts: SimpleDialogOptions = {\n title: this.i18nService.t(\"upgradeOrganization\"),\n content: this.i18nService.t(\n this.organization.canManageBilling\n ? \"freeOrgMaxCollectionReachedManageBilling\"\n : \"freeOrgMaxCollectionReachedNoManageBilling\",\n this.organization.maxCollections\n ),\n type: SimpleDialogType.PRIMARY,\n };\n\n if (this.organization.canManageBilling) {\n orgUpgradeSimpleDialogOpts.acceptButtonText = this.i18nService.t(\"upgrade\");\n } else {\n orgUpgradeSimpleDialogOpts.acceptButtonText = this.i18nService.t(\"ok\");\n orgUpgradeSimpleDialogOpts.cancelButtonText = null; // hide secondary btn\n }\n\n const simpleDialog = this.dialogService.openSimpleDialog(orgUpgradeSimpleDialogOpts);\n\n firstValueFrom(simpleDialog.closed).then((result: SimpleDialogCloseType | undefined) => {\n if (!result) {\n return;\n }\n\n if (result == SimpleDialogCloseType.ACCEPT && this.organization.canManageBilling) {\n this.router.navigate(\n [\"/organizations\", this.organization.id, \"billing\", \"subscription\"],\n { queryParams: { upgrade: true } }\n );\n }\n });\n\n return;\n }\n\n const dialog = openCollectionDialog(this.dialogService, {\n data: { collectionId: collection?.id, organizationId: this.organizationId },\n });\n\n const result = await lastValueFrom(dialog.closed);\n if (result === CollectionDialogResult.Saved || result === CollectionDialogResult.Deleted) {\n this.load();\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 { DIALOG_DATA, DialogConfig, DialogRef } from \"@angular/cdk/dialog\";\nimport { ChangeDetectorRef, Component, Inject, OnDestroy, OnInit } from \"@angular/core\";\nimport { FormBuilder, Validators } from \"@angular/forms\";\nimport { catchError, combineLatest, from, map, of, Subject, switchMap, takeUntil } from \"rxjs\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { 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 { CollectionDetailsResponse } from \"@bitwarden/common/models/response/collection.response\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { GroupService, GroupView } from \"../core\";\nimport {\n AccessItemType,\n AccessItemValue,\n AccessItemView,\n convertToPermission,\n convertToSelectionView,\n PermissionMode,\n} from \"../shared/components/access-selector\";\n\n/**\n * Indices for the available tabs in the dialog\n */\nexport enum GroupAddEditTabType {\n Info = 0,\n Members = 1,\n Collections = 2,\n}\n\nexport interface GroupAddEditDialogParams {\n /**\n * ID of the organization the group belongs to\n */\n organizationId: string;\n\n /**\n * Optional ID of the group being modified\n */\n groupId?: string;\n\n /**\n * Tab to open when the dialog is open.\n * Defaults to Group Info\n */\n initialTab?: GroupAddEditTabType;\n}\n\nexport enum GroupAddEditDialogResultType {\n Saved = \"saved\",\n Canceled = \"canceled\",\n Deleted = \"deleted\",\n}\n\n/**\n * Strongly typed helper to open a groupAddEditDialog\n * @param dialogService Instance of the dialog service that will be used to open the dialog\n * @param config Configuration for the dialog\n */\nexport const openGroupAddEditDialog = (\n dialogService: DialogService,\n config: DialogConfig\n) => {\n return dialogService.open(\n GroupAddEditComponent,\n config\n );\n};\n\n@Component({\n selector: \"app-group-add-edit\",\n templateUrl: \"group-add-edit.component.html\",\n})\nexport class GroupAddEditComponent implements OnInit, OnDestroy {\n protected PermissionMode = PermissionMode;\n protected ResultType = GroupAddEditDialogResultType;\n\n tabIndex: GroupAddEditTabType;\n loading = true;\n editMode = false;\n title: string;\n collections: AccessItemView[] = [];\n members: AccessItemView[] = [];\n group: GroupView;\n\n groupForm = this.formBuilder.group({\n accessAll: [false],\n name: [\"\", [Validators.required, Validators.maxLength(100)]],\n externalId: this.formBuilder.control({ value: \"\", disabled: true }),\n members: [[] as AccessItemValue[]],\n collections: [[] as AccessItemValue[]],\n });\n\n get groupId(): string | undefined {\n return this.params.groupId;\n }\n\n get organizationId(): string {\n return this.params.organizationId;\n }\n\n private destroy$ = new Subject();\n\n private get orgCollections$() {\n return from(this.apiService.getCollections(this.organizationId)).pipe(\n switchMap((response) => {\n return from(\n this.collectionService.decryptMany(\n response.data.map(\n (r) => new Collection(new CollectionData(r as CollectionDetailsResponse))\n )\n )\n );\n }),\n map((collections) =>\n collections.map((c) => ({\n id: c.id,\n type: AccessItemType.Collection,\n labelName: c.name,\n listName: c.name,\n }))\n )\n );\n }\n\n private get orgMembers$() {\n return from(this.organizationUserService.getAllUsers(this.organizationId)).pipe(\n map((response) =>\n response.data.map((m) => ({\n id: m.id,\n type: AccessItemType.Member,\n email: m.email,\n role: m.type,\n listName: m.name?.length > 0 ? `${m.name} (${m.email})` : m.email,\n labelName: m.name || m.email,\n status: m.status,\n }))\n )\n );\n }\n\n private get groupDetails$() {\n if (!this.editMode) {\n return of(undefined);\n }\n\n return combineLatest([\n this.groupService.get(this.organizationId, this.groupId),\n this.apiService.getGroupUsers(this.organizationId, this.groupId),\n ]).pipe(\n map(([groupView, users]) => {\n groupView.members = users;\n return groupView;\n }),\n catchError((e: unknown) => {\n if (e instanceof ErrorResponse) {\n this.logService.error(e.message);\n } else {\n this.logService.error(e.toString());\n }\n return of(undefined);\n })\n );\n }\n\n constructor(\n @Inject(DIALOG_DATA) private params: GroupAddEditDialogParams,\n private dialogRef: DialogRef,\n private apiService: ApiService,\n private organizationUserService: OrganizationUserService,\n private groupService: GroupService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService,\n private formBuilder: FormBuilder,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.tabIndex = params.initialTab ?? GroupAddEditTabType.Info;\n }\n\n ngOnInit() {\n this.editMode = this.loading = this.groupId != null;\n this.title = this.i18nService.t(this.editMode ? \"editGroup\" : \"newGroup\");\n\n combineLatest([this.orgCollections$, this.orgMembers$, this.groupDetails$])\n .pipe(takeUntil(this.destroy$))\n .subscribe(([collections, members, group]) => {\n this.collections = collections;\n this.members = members;\n this.group = group;\n\n if (this.group != undefined) {\n // Must detect changes so that AccessSelector @Inputs() are aware of the latest\n // collections/members set above, otherwise no selected values will be patched below\n this.changeDetectorRef.detectChanges();\n\n this.groupForm.patchValue({\n name: this.group.name,\n externalId: this.group.externalId,\n accessAll: this.group.accessAll,\n members: this.group.members.map((m) => ({\n id: m,\n type: AccessItemType.Member,\n })),\n collections: this.group.collections.map((gc) => ({\n id: gc.id,\n type: AccessItemType.Collection,\n permission: convertToPermission(gc),\n })),\n });\n }\n\n this.loading = false;\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n submit = async () => {\n this.groupForm.markAllAsTouched();\n\n if (this.groupForm.invalid) {\n if (this.tabIndex !== GroupAddEditTabType.Info) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"fieldOnTabRequiresAttention\", this.i18nService.t(\"groupInfo\"))\n );\n }\n return;\n }\n\n const groupView = new GroupView();\n groupView.id = this.groupId;\n groupView.organizationId = this.organizationId;\n\n const formValue = this.groupForm.value;\n groupView.name = formValue.name;\n groupView.accessAll = formValue.accessAll;\n groupView.members = formValue.members?.map((m) => m.id) ?? [];\n\n if (!groupView.accessAll) {\n groupView.collections = formValue.collections.map((c) => convertToSelectionView(c));\n }\n\n await this.groupService.save(groupView);\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedGroupId\" : \"createdGroupId\", formValue.name)\n );\n\n this.dialogRef.close(GroupAddEditDialogResultType.Saved);\n };\n\n delete = async () => {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteGroupConfirmation\"),\n this.group.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\",\n false,\n \"app-group-add-edit .modal-content\"\n );\n if (!confirmed) {\n return false;\n }\n\n await this.groupService.delete(this.organizationId, this.groupId);\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedGroupId\", this.group.name)\n );\n this.dialogRef.close(GroupAddEditDialogResultType.Deleted);\n };\n}\n","
    \n \n \n {{ title }}\n {{\n group?.name\n }}\n \n
    \n
    \n \n {{ \"loading\" | i18n }}\n
    \n\n \n \n \n {{ \"name\" | i18n }}\n \n {{ \"characterMaximum\" | i18n: 100 }}\n \n \n {{ \"externalId\" | i18n }}\n \n {{ \"externalIdDesc\" | i18n }}\n \n \n\n \n

    {{ \"editGroupMembersDesc\" | i18n }}

    \n \n
    \n\n \n

    {{ \"editGroupCollectionsDesc\" | i18n }}

    \n
    \n \n \n

    {{ \"accessAllCollectionsHelp\" | i18n }}

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

    {{ \"groups\" | i18n }}

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

    {{ \"noGroupsInList\" | i18n }}

    \n \n \n \n \n \n \n \n {{ \"name\" | i18n }}\n {{ \"collections\" | i18n }}\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ \"all\" | 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 {\n BehaviorSubject,\n combineLatest,\n concatMap,\n from,\n lastValueFrom,\n map,\n Subject,\n switchMap,\n takeUntil,\n tap,\n} from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\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 { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { CollectionData } from \"@bitwarden/common/models/data/collection.data\";\nimport { Collection } from \"@bitwarden/common/models/domain/collection\";\nimport {\n CollectionDetailsResponse,\n CollectionResponse,\n} from \"@bitwarden/common/models/response/collection.response\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { GroupService, GroupView } from \"../core\";\n\nimport {\n GroupAddEditDialogResultType,\n GroupAddEditTabType,\n openGroupAddEditDialog,\n} from \"./group-add-edit.component\";\n\ntype CollectionViewMap = {\n [id: string]: CollectionView;\n};\n\ntype GroupDetailsRow = {\n /**\n * Group Id (used for searching)\n */\n id: string;\n\n /**\n * Group name (used for searching)\n */\n name: string;\n\n /**\n * Details used for displaying group information\n */\n details: GroupView;\n\n /**\n * True if the group is selected in the table\n */\n checked?: boolean;\n\n /**\n * A list of collection names the group has access to\n */\n collectionNames?: string[];\n};\n\n@Component({\n selector: \"app-org-groups\",\n templateUrl: \"groups.component.html\",\n})\nexport class GroupsComponent implements OnInit, OnDestroy {\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: GroupDetailsRow[];\n\n protected didScroll = false;\n protected pageSize = 100;\n protected ModalTabType = GroupAddEditTabType;\n\n private pagedGroupsCount = 0;\n private pagedGroups: GroupDetailsRow[];\n private searchedGroups: GroupDetailsRow[];\n private _searchText: string;\n private destroy$ = new Subject();\n private refreshGroups$ = new BehaviorSubject(null);\n\n get searchText() {\n return this._searchText;\n }\n set searchText(value: string) {\n this._searchText = value;\n // Manually update as we are not using the search pipe in the template\n this.updateSearchedGroups();\n }\n\n /**\n * The list of groups that should be visible in the table.\n * This is needed as there are two modes (paging/searching) and\n * we need a reference to the currently visible groups for\n * the Select All checkbox\n */\n get visibleGroups(): GroupDetailsRow[] {\n if (this.isPaging()) {\n return this.pagedGroups;\n }\n if (this.isSearching()) {\n return this.searchedGroups;\n }\n return this.groups;\n }\n\n constructor(\n private apiService: ApiService,\n private groupService: GroupService,\n private route: ActivatedRoute,\n private i18nService: I18nService,\n private modalService: ModalService,\n private dialogService: DialogService,\n private platformUtilsService: PlatformUtilsService,\n private searchService: SearchService,\n private logService: LogService,\n private collectionService: CollectionService,\n private searchPipe: SearchPipe\n ) {}\n\n async ngOnInit() {\n this.route.params\n .pipe(\n tap((params) => (this.organizationId = params.organizationId)),\n switchMap(() =>\n combineLatest([\n // collectionMap\n from(this.apiService.getCollections(this.organizationId)).pipe(\n concatMap((response) => this.toCollectionMap(response))\n ),\n // groups\n this.refreshGroups$.pipe(\n switchMap(() => this.groupService.getAll(this.organizationId))\n ),\n ])\n ),\n map(([collectionMap, groups]) => {\n return groups\n .sort(Utils.getSortFunction(this.i18nService, \"name\"))\n .map((g) => ({\n id: g.id,\n name: g.name,\n details: g,\n checked: false,\n collectionNames: g.collections\n .map((c) => collectionMap[c.id]?.name)\n .sort(this.i18nService.collator?.compare),\n }));\n }),\n takeUntil(this.destroy$)\n )\n .subscribe((groups) => {\n this.groups = groups;\n this.resetPaging();\n this.updateSearchedGroups();\n this.loading = false;\n });\n\n this.route.queryParams\n .pipe(\n first(),\n concatMap(async (qParams) => {\n this.searchText = qParams.search;\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\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(\n group: GroupDetailsRow,\n startingTabIndex: GroupAddEditTabType = GroupAddEditTabType.Info\n ) {\n const dialogRef = openGroupAddEditDialog(this.dialogService, {\n data: {\n initialTab: startingTabIndex,\n organizationId: this.organizationId,\n groupId: group != null ? group.details.id : null,\n },\n });\n\n const result = await lastValueFrom(dialogRef.closed);\n\n if (result == GroupAddEditDialogResultType.Saved) {\n this.refreshGroups$.next();\n } else if (result == GroupAddEditDialogResultType.Deleted) {\n this.removeGroup(group.details.id);\n }\n }\n\n add() {\n this.edit(null);\n }\n\n async delete(groupRow: GroupDetailsRow) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteGroupConfirmation\"),\n groupRow.details.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.groupService.delete(this.organizationId, groupRow.details.id);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedGroupId\", groupRow.details.name)\n );\n this.removeGroup(groupRow.details.id);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async deleteAllSelected() {\n const groupsToDelete = this.groups.filter((g) => g.checked);\n\n if (groupsToDelete.length == 0) {\n return;\n }\n\n const deleteMessage = groupsToDelete.map((g) => g.details.name).join(\", \");\n const confirmed = await this.platformUtilsService.showDialog(\n deleteMessage,\n this.i18nService.t(\"deleteMultipleGroupsConfirmation\", groupsToDelete.length.toString()),\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.groupService.deleteMany(\n this.organizationId,\n groupsToDelete.map((g) => g.details.id)\n );\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedManyGroups\", groupsToDelete.length.toString())\n );\n\n groupsToDelete.forEach((g) => this.removeGroup(g.details.id));\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n resetPaging() {\n this.pagedGroups = [];\n this.loadMore();\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n check(groupRow: GroupDetailsRow) {\n groupRow.checked = !groupRow.checked;\n }\n\n toggleAllVisible(event: Event) {\n this.visibleGroups.forEach((g) => (g.checked = (event.target as HTMLInputElement).checked));\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(id: string) {\n const index = this.groups.findIndex((g) => g.details.id === id);\n if (index > -1) {\n this.groups.splice(index, 1);\n this.resetPaging();\n this.updateSearchedGroups();\n }\n }\n\n private async toCollectionMap(response: ListResponse) {\n const collections = response.data.map(\n (r) => new Collection(new CollectionData(r as CollectionDetailsResponse))\n );\n const decryptedCollections = await this.collectionService.decryptMany(collections);\n\n // Convert to an object using collection Ids as keys for faster name lookups\n const collectionMap: CollectionViewMap = {};\n decryptedCollections.forEach((c) => (collectionMap[c.id] = c));\n\n return collectionMap;\n }\n\n private updateSearchedGroups() {\n if (this.searchService.isSearchable(this.searchText)) {\n // Making use of the pipe in the component as we need know which groups where filtered\n this.searchedGroups = this.searchPipe.transform(\n this.groups,\n this.searchText,\n (group) => group.details.name,\n (group) => group.details.id\n );\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","import { Injectable, OnDestroy } from \"@angular/core\";\nimport { filter, map, Observable, ReplaySubject, Subject, switchMap, takeUntil } from \"rxjs\";\n\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport {\n canAccessVaultTab,\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 { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\n\nimport { VaultFilterService as BaseVaultFilterService } from \"../../../../vault/app/vault/vault-filter/services/vault-filter.service\";\nimport { CollectionFilter } from \"../../../../vault/app/vault/vault-filter/shared/models/vault-filter.type\";\nimport { CollectionAdminView } from \"../../core\";\nimport { CollectionAdminService } from \"../../core/services/collection-admin.service\";\n\n@Injectable()\nexport class VaultFilterService extends BaseVaultFilterService implements OnDestroy {\n private destroy$ = new Subject();\n private _collections = new ReplaySubject(1);\n\n filteredCollections$: Observable = this._collections.asObservable();\n\n collectionTree$: Observable> = this.filteredCollections$.pipe(\n map((collections) => this.buildCollectionTree(collections))\n );\n\n constructor(\n stateService: StateService,\n organizationService: OrganizationService,\n folderService: FolderService,\n cipherService: CipherService,\n collectionService: CollectionService,\n policyService: PolicyService,\n i18nService: I18nService,\n protected collectionAdminService: CollectionAdminService\n ) {\n super(\n stateService,\n organizationService,\n folderService,\n cipherService,\n collectionService,\n policyService,\n i18nService\n );\n this.loadSubscriptions();\n }\n\n protected loadSubscriptions() {\n this._organizationFilter\n .pipe(\n filter((org) => org != null),\n switchMap((org) => {\n return this.loadCollections(org);\n }),\n takeUntil(this.destroy$)\n )\n .subscribe((collections) => {\n this._collections.next(collections);\n });\n }\n\n async reloadCollections() {\n this._collections.next(await this.loadCollections(this._organizationFilter.getValue()));\n }\n\n protected async loadCollections(org: Organization): Promise {\n let collections: CollectionAdminView[] = [];\n if (canAccessVaultTab(org)) {\n collections = await this.collectionAdminService.getAll(org.id);\n\n const noneCollection = new CollectionAdminView();\n noneCollection.name = this.i18nService.t(\"unassigned\");\n noneCollection.organizationId = org.id;\n collections.push(noneCollection);\n }\n return collections;\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { VaultFilterService as VaultFilterServiceAbstraction } from \"../../../../vault/app/vault/vault-filter/services/abstractions/vault-filter.service\";\nimport { VaultFilterSharedModule } from \"../../../../vault/app/vault/vault-filter/shared/vault-filter-shared.module\";\n\nimport { VaultFilterComponent } from \"./vault-filter.component\";\nimport { VaultFilterService } from \"./vault-filter.service\";\n\n@NgModule({\n imports: [VaultFilterSharedModule],\n declarations: [VaultFilterComponent],\n exports: [VaultFilterComponent],\n providers: [\n {\n provide: VaultFilterServiceAbstraction,\n useClass: VaultFilterService,\n },\n ],\n})\nexport class VaultFilterModule {}\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.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 { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CipherData } from \"@bitwarden/common/vault/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\nimport { AttachmentView } from \"@bitwarden/common/vault/models/view/attachment.view\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"../../../vault/app/vault/attachments.component\";\n\n@Component({\n selector: \"app-org-vault-attachments\",\n templateUrl: \"../../../vault/app/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 { Component } 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 { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CipherData } from \"@bitwarden/common/vault/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\nimport { CipherCollectionsRequest } from \"@bitwarden/common/vault/models/request/cipher-collections.request\";\n\nimport { CollectionsComponent as BaseCollectionsComponent } from \"../../../vault/app/vault/collections.component\";\n\n@Component({\n selector: \"app-org-vault-collections\",\n templateUrl: \"../../../vault/app/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 { Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { firstValueFrom, Subject, switchMap, takeUntil } from \"rxjs\";\n\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\";\n\nimport { VaultFilterComponent as BaseVaultFilterComponent } from \"../../../../vault/app/vault/vault-filter/components/vault-filter.component\";\nimport {\n VaultFilterList,\n VaultFilterType,\n} from \"../../../../vault/app/vault/vault-filter/shared/models/vault-filter-section.type\";\nimport { CollectionFilter } from \"../../../../vault/app/vault/vault-filter/shared/models/vault-filter.type\";\n\n@Component({\n selector: \"app-organization-vault-filter\",\n templateUrl: \"../../../../vault/app/vault/vault-filter/components/vault-filter.component.html\",\n})\nexport class VaultFilterComponent extends BaseVaultFilterComponent implements OnInit, OnDestroy {\n @Input() set organization(value: Organization) {\n if (value && value !== this._organization) {\n this._organization = value;\n this.vaultFilterService.setOrganizationFilter(this._organization);\n }\n }\n _organization: Organization;\n protected destroy$: Subject;\n\n async ngOnInit() {\n this.filters = await this.buildAllFilters();\n if (!this.activeFilter.selectedCipherTypeNode) {\n this.activeFilter.resetFilter();\n this.activeFilter.selectedCollectionNode =\n (await this.getDefaultFilter()) as TreeNode;\n }\n this.isLoaded = true;\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected loadSubscriptions() {\n this.vaultFilterService.filteredCollections$\n .pipe(\n switchMap(async (collections) => {\n this.removeInvalidCollectionSelection(collections);\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n protected async removeInvalidCollectionSelection(collections: CollectionView[]) {\n if (this.activeFilter.selectedCollectionNode) {\n if (!collections.some((f) => f.id === this.activeFilter.collectionId)) {\n this.activeFilter.resetFilter();\n this.activeFilter.selectedCollectionNode =\n (await this.getDefaultFilter()) as TreeNode;\n this.applyVaultFilter(this.activeFilter);\n }\n }\n }\n\n async buildAllFilters(): Promise {\n const builderFilter = {} as VaultFilterList;\n builderFilter.typeFilter = await this.addTypeFilter([\"favorites\"]);\n builderFilter.collectionFilter = await this.addCollectionFilter();\n builderFilter.trashFilter = await this.addTrashFilter();\n return builderFilter;\n }\n\n async getDefaultFilter(): Promise> {\n return await firstValueFrom(this.filters?.collectionFilter.data$);\n }\n}\n","import { Component, EventEmitter, Input, OnDestroy, Output } from \"@angular/core\";\nimport { lastValueFrom } from \"rxjs\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { 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 { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport {\n BulkDeleteDialogResult,\n openBulkDeleteDialog,\n} from \"../../../vault/app/vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component\";\nimport { VaultFilterService } from \"../../../vault/app/vault/vault-filter/services/abstractions/vault-filter.service\";\nimport { CollectionFilter } from \"../../../vault/app/vault/vault-filter/shared/models/vault-filter.type\";\nimport {\n VaultItemRow,\n VaultItemsComponent as BaseVaultItemsComponent,\n} from \"../../../vault/app/vault/vault-items.component\";\nimport { CollectionAdminView } from \"../core\";\nimport { GroupService } from \"../core/services/group/group.service\";\nimport {\n CollectionDialogResult,\n CollectionDialogTabType,\n openCollectionDialog,\n} from \"../shared/components/collection-dialog/collection-dialog.component\";\n\nconst MaxCheckedCount = 500;\n\n@Component({\n selector: \"app-org-vault-items\",\n templateUrl: \"../../../vault/app/vault/vault-items.component.html\",\n})\nexport class VaultItemsComponent extends BaseVaultItemsComponent implements OnDestroy {\n @Input() set initOrganization(value: Organization) {\n this.organization = value;\n this.changeOrganization();\n }\n @Output() onEventsClicked = new EventEmitter();\n\n protected allCiphers: CipherView[] = [];\n\n constructor(\n searchService: SearchService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n cipherService: CipherService,\n vaultFilterService: VaultFilterService,\n eventCollectionService: EventCollectionService,\n totpService: TotpService,\n passwordRepromptService: PasswordRepromptService,\n dialogService: DialogService,\n logService: LogService,\n stateService: StateService,\n organizationService: OrganizationService,\n tokenService: TokenService,\n searchPipe: SearchPipe,\n protected groupService: GroupService,\n private apiService: ApiService\n ) {\n super(\n searchService,\n i18nService,\n platformUtilsService,\n vaultFilterService,\n cipherService,\n eventCollectionService,\n totpService,\n stateService,\n passwordRepromptService,\n dialogService,\n logService,\n searchPipe,\n organizationService,\n tokenService\n );\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n\n async changeOrganization() {\n this.groups = await this.groupService.getAll(this.organization?.id);\n await this.loadCiphers();\n await this.reload(this.activeFilter.buildFilter());\n }\n\n async loadCiphers() {\n if (this.organization?.canEditAnyCollection) {\n this.accessEvents = this.organization?.useEvents;\n this.allCiphers = await this.cipherService.getAllFromApiForOrganization(\n this.organization?.id\n );\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 }\n\n async refreshCollections(): Promise {\n await this.vaultFilterService.reloadCollections();\n if (this.activeFilter.selectedCollectionNode) {\n this.activeFilter.selectedCollectionNode =\n await this.vaultFilterService.getCollectionNodeFromTree(\n this.activeFilter.selectedCollectionNode.node.id\n );\n }\n }\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 refresh() {\n await this.loadCiphers();\n await this.refreshCollections();\n super.refresh();\n }\n\n async search(timeout: number = null) {\n await super.search(timeout, this.allCiphers);\n }\n\n events(c: CipherView) {\n this.onEventsClicked.emit(c);\n }\n\n protected showFixOldAttachments(c: CipherView) {\n return this.organization?.canEditAnyCollection && c.hasOldAttachments;\n }\n\n checkAll(select: boolean) {\n if (select) {\n this.checkAll(false);\n }\n\n const items: VaultItemRow[] = [...this.collections, ...this.ciphers];\n if (!items.length) {\n return;\n }\n\n const selectCount = select && items.length > MaxCheckedCount ? MaxCheckedCount : items.length;\n for (let i = 0; i < selectCount; i++) {\n this.checkRow(items[i], select);\n }\n }\n\n checkRow(item: VaultItemRow, select?: boolean) {\n if (item instanceof TreeNode && item.node.id == null) {\n return;\n }\n\n // Do not allow checking a collection we cannot delete\n if (item instanceof TreeNode && !this.canDeleteCollection(item.node)) {\n return;\n }\n\n item.checked = select ?? !item.checked;\n }\n\n get selectedCollections(): TreeNode[] {\n if (!this.collections) {\n return [];\n }\n return this.collections.filter((c) => !!(c as VaultItemRow).checked);\n }\n\n get selectedCollectionIds(): string[] {\n return this.selectedCollections.map((c) => c.node.id);\n }\n\n canEditCollection(c: CollectionAdminView): boolean {\n // Only edit collections if we're in the org vault and not editing \"Unassigned\"\n if (this.organization === undefined || c.id === null) {\n return false;\n }\n\n // Otherwise, check if we can edit the specified collection\n return (\n this.organization.canEditAnyCollection ||\n (this.organization.canEditAssignedCollections && c.assigned)\n );\n }\n\n async editCollection(c: CollectionView, tab: \"info\" | \"access\"): Promise {\n const tabType = tab == \"info\" ? CollectionDialogTabType.Info : CollectionDialogTabType.Access;\n\n const dialog = openCollectionDialog(this.dialogService, {\n data: { collectionId: c?.id, organizationId: this.organization?.id, initialTab: tabType },\n });\n\n const result = await lastValueFrom(dialog.closed);\n if (result === CollectionDialogResult.Saved || result === CollectionDialogResult.Deleted) {\n this.actionPromise = this.refresh();\n await this.actionPromise;\n this.actionPromise = null;\n }\n }\n\n get showMissingCollectionPermissionMessage(): boolean {\n // Not filtering by collections, so no need to show message\n if (this.activeFilter.selectedCollectionNode == null) {\n return false;\n }\n\n // Filtering by all collections, so no need to show message\n if (this.activeFilter.selectedCollectionNode.node.id == \"AllCollections\") {\n return false;\n }\n\n // Filtering by a collection, so show message if user is not assigned\n return !this.activeFilter.selectedCollectionNode.node.assigned && !this.organization.isAdmin;\n }\n\n canDeleteCollection(c: CollectionAdminView): boolean {\n // Only delete collections if we're in the org vault and not deleting \"Unassigned\"\n if (this.organization === undefined || c.id === null) {\n return false;\n }\n\n // Otherwise, check if we can delete the specified collection\n return (\n this.organization?.canDeleteAnyCollection ||\n (this.organization?.canDeleteAssignedCollections && c.assigned)\n );\n }\n\n async deleteCollection(collection: CollectionView): Promise {\n if (!this.organization.canDeleteAssignedCollections) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"missingPermissions\")\n );\n return;\n }\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;\n }\n try {\n this.actionPromise = this.apiService.deleteCollection(this.organization?.id, collection.id);\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedCollectionId\", collection.name)\n );\n await this.refresh();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async bulkDelete() {\n if (!(await this.repromptCipher())) {\n return;\n }\n\n const selectedCipherIds = this.selectedCipherIds;\n const selectedCollectionIds = this.deleted ? null : this.selectedCollectionIds;\n\n if (!selectedCipherIds?.length && !selectedCollectionIds?.length) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const dialog = openBulkDeleteDialog(this.dialogService, {\n data: {\n permanent: this.deleted,\n cipherIds: selectedCipherIds,\n collectionIds: selectedCollectionIds,\n organization: this.organization,\n },\n });\n\n const result = await lastValueFrom(dialog.closed);\n if (result === BulkDeleteDialogResult.Deleted) {\n this.actionPromise = this.refresh();\n await this.actionPromise;\n this.actionPromise = null;\n }\n }\n\n protected deleteCipherWithServer(id: string, permanent: boolean) {\n if (!this.organization?.canEditAnyCollection) {\n return super.deleteCipherWithServer(id, this.deleted);\n }\n return permanent\n ? this.apiService.deleteCipherAdmin(id)\n : this.apiService.putDeleteCipherAdmin(id);\n }\n}\n","
    \n
    \n 0\">\n \n \n \n {{ activeOrganizationId | orgNameFromId: (organizations$ | async) }}\n {{ \"vault\" | i18n | lowercase }}\n \n {{ collection.node.name }}\n \n \n

    \n \n {{ title }}\n \n \n \n \n \n {{ \"editInfo\" | i18n }}\n \n \n \n {{ \"access\" | i18n }}\n \n \n \n \n {{ \"delete\" | i18n }}\n \n \n \n \n \n \n \n {{ \"loading\" | i18n }}\n \n \n

    \n
    \n\n
    \n
    \n \n {{ \"new\" | i18n }}\n \n \n \n \n \n
    \n \n \n {{ \"newItem\" | i18n }}\n \n
    \n
    \n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { firstValueFrom, lastValueFrom } 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 { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProductType } from \"@bitwarden/common/enums/productType\";\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 {\n DialogService,\n SimpleDialogCloseType,\n SimpleDialogOptions,\n SimpleDialogType,\n} from \"@bitwarden/components\";\n\nimport { VaultFilterService } from \"../../../../vault/app/vault/vault-filter/services/abstractions/vault-filter.service\";\nimport { VaultFilter } from \"../../../../vault/app/vault/vault-filter/shared/models/vault-filter.model\";\nimport { CollectionFilter } from \"../../../../vault/app/vault/vault-filter/shared/models/vault-filter.type\";\nimport { CollectionAdminService, CollectionAdminView } from \"../../core\";\nimport {\n CollectionDialogResult,\n CollectionDialogTabType,\n openCollectionDialog,\n} from \"../../shared\";\n\n@Component({\n selector: \"app-org-vault-header\",\n templateUrl: \"./vault-header.component.html\",\n})\nexport class VaultHeaderComponent {\n /**\n * The organization currently being viewed\n */\n @Input() organization: Organization;\n\n /**\n * Promise that is used to determine the loading state of the header via the ApiAction directive.\n * When the promise exists and is not resolved, the loading spinner will be shown.\n */\n @Input() actionPromise: Promise;\n\n /**\n * The filter being actively applied to the vault view\n */\n @Input() activeFilter: VaultFilter;\n\n /**\n * Emits when the active filter has been modified by the header\n */\n @Output() activeFilterChanged = new EventEmitter();\n\n /**\n * Emits an event when a collection is modified or deleted via the header collection dropdown menu\n */\n @Output() onCollectionChanged = new EventEmitter();\n\n /**\n * Emits an event when the new item button is clicked in the header\n */\n @Output() onAddCipher = new EventEmitter();\n\n protected organizations$ = this.organizationService.organizations$;\n\n constructor(\n private organizationService: OrganizationService,\n private i18nService: I18nService,\n private dialogService: DialogService,\n private vaultFilterService: VaultFilterService,\n private platformUtilsService: PlatformUtilsService,\n private apiService: ApiService,\n private logService: LogService,\n private collectionAdminService: CollectionAdminService,\n private router: Router\n ) {}\n\n /**\n * The id of the organization that is currently being filtered on.\n * This can come from a collection filter, organization filter, or the current organization when viewed\n * in the organization admin console and no other filters are applied.\n */\n get activeOrganizationId() {\n if (this.activeFilter.selectedCollectionNode != null) {\n return this.activeFilter.selectedCollectionNode.node.organizationId;\n }\n if (this.activeFilter.selectedOrganizationNode != null) {\n return this.activeFilter.selectedOrganizationNode.node.id;\n }\n return this.organization.id;\n }\n\n get title() {\n if (this.activeFilter.isCollectionSelected) {\n return this.activeFilter.selectedCollectionNode.node.name;\n }\n if (this.activeFilter.isUnassignedCollectionSelected) {\n return this.i18nService.t(\"unassigned\");\n }\n return `${this.organization.name} ${this.i18nService.t(\"vault\").toLowerCase()}`;\n }\n\n private showFreeOrgUpgradeDialog(): void {\n const orgUpgradeSimpleDialogOpts: SimpleDialogOptions = {\n title: this.i18nService.t(\"upgradeOrganization\"),\n content: this.i18nService.t(\n this.organization.canManageBilling\n ? \"freeOrgMaxCollectionReachedManageBilling\"\n : \"freeOrgMaxCollectionReachedNoManageBilling\",\n this.organization.maxCollections\n ),\n type: SimpleDialogType.PRIMARY,\n };\n\n if (this.organization.canManageBilling) {\n orgUpgradeSimpleDialogOpts.acceptButtonText = this.i18nService.t(\"upgrade\");\n } else {\n orgUpgradeSimpleDialogOpts.acceptButtonText = this.i18nService.t(\"ok\");\n orgUpgradeSimpleDialogOpts.cancelButtonText = null; // hide secondary btn\n }\n\n const simpleDialog = this.dialogService.openSimpleDialog(orgUpgradeSimpleDialogOpts);\n\n firstValueFrom(simpleDialog.closed).then((result: SimpleDialogCloseType | undefined) => {\n if (!result) {\n return;\n }\n\n if (result == SimpleDialogCloseType.ACCEPT && this.organization.canManageBilling) {\n this.router.navigate([\"/organizations\", this.organization.id, \"billing\", \"subscription\"], {\n queryParams: { upgrade: true },\n });\n }\n });\n }\n\n applyCollectionFilter(collection: TreeNode) {\n const filter = this.activeFilter;\n filter.resetFilter();\n filter.selectedCollectionNode = collection;\n this.activeFilterChanged.emit(filter);\n }\n\n canEditCollection(c: CollectionAdminView): boolean {\n // Only edit collections if we're in the org vault and not editing \"Unassigned\"\n if (this.organization === undefined || c.id === null) {\n return false;\n }\n\n // Otherwise, check if we can edit the specified collection\n return (\n this.organization.canEditAnyCollection ||\n (this.organization.canEditAssignedCollections && c.assigned)\n );\n }\n\n addCipher() {\n this.onAddCipher.emit();\n }\n\n async addCollection() {\n if (this.organization.planProductType === ProductType.Free) {\n const collections = await this.collectionAdminService.getAll(this.organization.id);\n if (collections.length === this.organization.maxCollections) {\n this.showFreeOrgUpgradeDialog();\n return;\n }\n }\n\n const dialog = openCollectionDialog(this.dialogService, {\n data: {\n organizationId: this.organization?.id,\n parentCollectionId: this.activeFilter.collectionId,\n },\n });\n const result = await lastValueFrom(dialog.closed);\n if (result === CollectionDialogResult.Saved || result === CollectionDialogResult.Deleted) {\n this.onCollectionChanged.emit(null);\n }\n }\n\n async editCollection(c: CollectionView, tab: \"info\" | \"access\"): Promise {\n const tabType = tab == \"info\" ? CollectionDialogTabType.Info : CollectionDialogTabType.Access;\n\n const dialog = openCollectionDialog(this.dialogService, {\n data: { collectionId: c?.id, organizationId: this.organization?.id, initialTab: tabType },\n });\n\n const result = await lastValueFrom(dialog.closed);\n if (result === CollectionDialogResult.Saved || result === CollectionDialogResult.Deleted) {\n this.onCollectionChanged.emit(c);\n }\n }\n\n canDeleteCollection(c: CollectionAdminView): boolean {\n // Only delete collections if we're in the org vault and not deleting \"Unassigned\"\n if (this.organization === undefined || c.id === null) {\n return false;\n }\n\n // Otherwise, check if we can delete the specified collection\n return (\n this.organization?.canDeleteAnyCollection ||\n (this.organization?.canDeleteAssignedCollections && c.assigned)\n );\n }\n\n async deleteCollection(collection: CollectionView): Promise {\n if (!this.organization.canDeleteAssignedCollections) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"missingPermissions\")\n );\n return;\n }\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;\n }\n try {\n this.actionPromise = this.apiService.deleteCollection(this.organization?.id, collection.id);\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedCollectionId\", collection.name)\n );\n this.onCollectionChanged.emit(collection);\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","\n\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \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 { combineLatest, firstValueFrom, Subject } from \"rxjs\";\nimport { first, switchMap, takeUntil } from \"rxjs/operators\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { BroadcasterService } from \"@bitwarden/common/abstractions/broadcaster.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { VaultFilterService } from \"../../../vault/app/vault/vault-filter/services/abstractions/vault-filter.service\";\nimport { VaultFilter } from \"../../../vault/app/vault/vault-filter/shared/models/vault-filter.model\";\nimport { EntityEventsComponent } from \"../manage/entity-events.component\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\nimport { AttachmentsComponent } from \"./attachments.component\";\nimport { CollectionsComponent } from \"./collections.component\";\nimport { VaultFilterComponent } from \"./vault-filter/vault-filter.component\";\nimport { VaultItemsComponent } from \"./vault-items.component\";\n\nconst BroadcasterSubscriptionId = \"OrgVaultComponent\";\n\n@Component({\n selector: \"app-org-vault\",\n templateUrl: \"vault.component.html\",\n})\nexport class VaultComponent implements OnInit, OnDestroy {\n @ViewChild(\"vaultFilter\", { static: true })\n vaultFilterComponent: VaultFilterComponent;\n @ViewChild(VaultItemsComponent, { static: true }) vaultItemsComponent: VaultItemsComponent;\n @ViewChild(\"attachments\", { read: ViewContainerRef, static: true })\n attachmentsModalRef: ViewContainerRef;\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n @ViewChild(\"collections\", { read: ViewContainerRef, static: true })\n collectionsModalRef: ViewContainerRef;\n @ViewChild(\"eventsTemplate\", { read: ViewContainerRef, static: true })\n eventsModalRef: ViewContainerRef;\n\n organization: Organization;\n trashCleanupWarning: string = null;\n activeFilter: VaultFilter = new VaultFilter();\n private destroy$ = new Subject();\n\n constructor(\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n protected vaultFilterService: VaultFilterService,\n private router: Router,\n private changeDetectorRef: ChangeDetectorRef,\n private syncService: SyncService,\n private i18nService: I18nService,\n private modalService: ModalService,\n private dialogService: DialogService,\n private messagingService: MessagingService,\n private broadcasterService: BroadcasterService,\n private ngZone: NgZone,\n private platformUtilsService: PlatformUtilsService,\n private cipherService: CipherService,\n private passwordRepromptService: PasswordRepromptService\n ) {}\n\n async ngOnInit() {\n this.trashCleanupWarning = this.i18nService.t(\n this.platformUtilsService.isSelfHost()\n ? \"trashCleanupWarningSelfHosted\"\n : \"trashCleanupWarning\"\n );\n\n this.route.parent.params.pipe(takeUntil(this.destroy$)).subscribe((params) => {\n this.organization = this.organizationService.get(params.organizationId);\n });\n\n this.route.queryParams.pipe(first(), takeUntil(this.destroy$)).subscribe((qParams) => {\n this.vaultItemsComponent.searchText = this.vaultFilterComponent.searchText = qParams.search;\n });\n\n // verifies that the organization has been set\n combineLatest([this.route.queryParams, this.route.parent.params])\n .pipe(\n switchMap(async ([qParams]) => {\n const cipherId = getCipherIdFromParams(qParams);\n if (!cipherId) {\n return;\n }\n if (\n // Handle users with implicit collection access since they use the admin endpoint\n this.organization.canUseAdminCollections ||\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 takeUntil(this.destroy$)\n )\n .subscribe();\n\n if (!this.organization.canUseAdminCollections) {\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.vaultFilterService.reloadCollections(),\n this.vaultItemsComponent.refresh(),\n ]);\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n await this.syncService.fullSync(false);\n }\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async applyVaultFilter(filter: VaultFilter) {\n this.activeFilter = filter;\n this.vaultItemsComponent.showAddNew = !this.activeFilter.isDeleted;\n await this.vaultItemsComponent.reload(\n this.activeFilter.buildFilter(),\n this.activeFilter.isDeleted\n );\n this.go();\n }\n\n async refreshItems() {\n this.vaultItemsComponent.actionPromise = this.vaultItemsComponent.refresh();\n await this.vaultItemsComponent.actionPromise;\n this.vaultItemsComponent.actionPromise = null;\n }\n\n filterSearchText(searchText: string) {\n this.vaultItemsComponent.searchText = searchText;\n this.vaultItemsComponent.search(200);\n }\n\n async editCipherAttachments(cipher: CipherView) {\n if (this.organization.maxStorageGb == null || this.organization.maxStorageGb === 0) {\n this.messagingService.send(\"upgradeOrganization\", { organizationId: cipher.organizationId });\n return;\n }\n\n let madeAttachmentChanges = false;\n\n const [modal] = await this.modalService.openViewRef(\n AttachmentsComponent,\n this.attachmentsModalRef,\n (comp) => {\n comp.organization = this.organization;\n comp.cipherId = cipher.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onUploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onDeletedAttachment.subscribe(() => (madeAttachmentChanges = true));\n }\n );\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n modal.onClosed.subscribe(async () => {\n if (madeAttachmentChanges) {\n await this.vaultItemsComponent.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n async editCipherCollections(cipher: CipherView) {\n const currCollections = await firstValueFrom(this.vaultFilterService.filteredCollections$);\n const [modal] = await this.modalService.openViewRef(\n CollectionsComponent,\n this.collectionsModalRef,\n (comp) => {\n comp.collectionIds = cipher.collectionIds;\n comp.collections = currCollections.filter((c) => !c.readOnly && c.id != null);\n comp.organization = this.organization;\n comp.cipherId = cipher.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedCollections.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n }\n );\n }\n\n async addCipher() {\n const collections = (await firstValueFrom(this.vaultFilterService.filteredCollections$)).filter(\n (c) => !c.readOnly && c.id != null\n );\n\n await this.editCipher(null, (comp) => {\n comp.organizationId = this.organization.id;\n comp.type = this.activeFilter.cipherType;\n comp.collections = collections;\n if (this.activeFilter.collectionId) {\n comp.collectionIds = [this.activeFilter.collectionId];\n }\n });\n }\n\n async navigateToCipher(cipher: CipherView) {\n this.go({ itemId: cipher?.id });\n }\n\n async editCipher(\n cipher: CipherView,\n additionalComponentParameters?: (comp: AddEditComponent) => void\n ) {\n return this.editCipherId(cipher?.id, additionalComponentParameters);\n }\n\n async editCipherId(\n cipherId: string,\n additionalComponentParameters?: (comp: AddEditComponent) => void\n ) {\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 defaultComponentParameters = (comp: AddEditComponent) => {\n comp.organization = this.organization;\n comp.cipherId = cipherId;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeletedCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onRestoredCipher.subscribe(async () => {\n modal.close();\n await this.vaultItemsComponent.refresh();\n });\n };\n\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.cipherAddEditModalRef,\n additionalComponentParameters == null\n ? defaultComponentParameters\n : (comp) => {\n defaultComponentParameters(comp);\n additionalComponentParameters(comp);\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 collections = (await firstValueFrom(this.vaultFilterService.filteredCollections$)).filter(\n (c) => !c.readOnly && c.id != null\n );\n\n await this.editCipher(cipher, (comp) => {\n comp.cloneMode = true;\n comp.collections = collections;\n comp.organizationId = this.organization.id;\n comp.collectionIds = cipher.collectionIds;\n });\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.collectionId,\n deleted: this.activeFilter.isDeleted || 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 { canAccessVaultTab } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\n\nimport { OrganizationPermissionsGuard } from \"../guards/org-permissions.guard\";\n\nimport { VaultComponent } from \"./vault.component\";\nconst routes: Routes = [\n {\n path: \"\",\n component: VaultComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: { titleId: \"vaults\", organizationPermissions: canAccessVaultTab },\n },\n];\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class VaultRoutingModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { BreadcrumbsModule } from \"@bitwarden/components\";\n\nimport { OrganizationBadgeModule } from \"../../../vault/app/vault/organization-badge/organization-badge.module\";\nimport { PipesModule } from \"../../../vault/app/vault/pipes/pipes.module\";\nimport { LooseComponentsModule } from \"../../shared/loose-components.module\";\nimport { SharedModule } from \"../../shared/shared.module\";\n\nimport { CollectionBadgeModule } from \"./collection-badge/collection-badge.module\";\nimport { GroupBadgeModule } from \"./group-badge/group-badge.module\";\nimport { VaultFilterModule } from \"./vault-filter/vault-filter.module\";\nimport { VaultHeaderComponent } from \"./vault-header/vault-header.component\";\nimport { VaultItemsComponent } from \"./vault-items.component\";\nimport { VaultRoutingModule } from \"./vault-routing.module\";\nimport { VaultComponent } from \"./vault.component\";\n\n@NgModule({\n imports: [\n VaultRoutingModule,\n VaultFilterModule,\n SharedModule,\n LooseComponentsModule,\n GroupBadgeModule,\n CollectionBadgeModule,\n OrganizationBadgeModule,\n PipesModule,\n BreadcrumbsModule,\n ],\n declarations: [VaultComponent, VaultItemsComponent, VaultHeaderComponent],\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 canAccessOrgAdmin,\n canAccessGroupsTab,\n canAccessMembersTab,\n canAccessVaultTab,\n canAccessReportingTab,\n canAccessSettingsTab,\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 { 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 {\n path: \"\",\n pathMatch: \"full\",\n canActivate: [OrganizationRedirectGuard],\n data: {\n autoRedirectCallback: getOrganizationRoute,\n },\n children: [], // This is required to make the auto redirect work, },\n },\n {\n path: \"vault\",\n loadChildren: () => VaultModule,\n },\n {\n path: \"settings\",\n loadChildren: () => import(\"./settings\").then((m) => m.OrganizationSettingsModule),\n },\n {\n path: \"members\",\n loadChildren: () => import(\"./members\").then((m) => m.MembersModule),\n },\n {\n path: \"groups\",\n component: GroupsComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n titleId: \"groups\",\n organizationPermissions: canAccessGroupsTab,\n },\n },\n {\n path: \"manage\",\n component: ManageComponent,\n children: [\n {\n path: \"collections\",\n component: CollectionsComponent,\n data: {\n titleId: \"collections\",\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 getOrganizationRoute(organization: Organization): string {\n if (canAccessVaultTab(organization)) {\n return \"vault\";\n }\n if (canAccessMembersTab(organization)) {\n return \"members\";\n }\n if (canAccessGroupsTab(organization)) {\n return \"groups\";\n }\n if (canAccessReportingTab(organization)) {\n return \"reporting\";\n }\n if (canAccessSettingsTab(organization)) {\n return \"settings\";\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 { CoreOrganizationModule } from \"./core\";\nimport { GroupAddEditComponent } from \"./manage/group-add-edit.component\";\nimport { GroupsComponent } from \"./manage/groups.component\";\nimport { OrganizationsRoutingModule } from \"./organization-routing.module\";\nimport { SharedOrganizationModule } from \"./shared\";\nimport { AccessSelectorModule } from \"./shared/components/access-selector\";\n\n@NgModule({\n imports: [\n SharedOrganizationModule,\n AccessSelectorModule,\n CoreOrganizationModule,\n OrganizationsRoutingModule,\n ],\n declarations: [GroupsComponent, GroupAddEditComponent],\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 { 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\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\n\nimport { DeleteOrganizationComponent } from \"../../organizations/settings\";\nimport { OrganizationPlansComponent } from \"../../settings/organization-plans.component\";\n\n@Component({\n selector: \"families-for-enterprise-setup\",\n templateUrl: \"families-for-enterprise-setup.component.html\",\n})\nexport class FamiliesForEnterpriseSetupComponent implements OnInit, OnDestroy {\n @ViewChild(OrganizationPlansComponent, { static: false })\n set organizationPlansComponent(value: OrganizationPlansComponent) {\n if (!value) {\n return;\n }\n\n value.plan = PlanType.FamiliesAnnually;\n value.product = ProductType.Families;\n value.acceptingSponsorship = true;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n value.onSuccess.subscribe(this.onOrganizationCreateSuccess.bind(this));\n }\n\n @ViewChild(\"deleteOrganizationTemplate\", { read: ViewContainerRef, static: true })\n deleteModalRef: ViewContainerRef;\n\n loading = true;\n badToken = false;\n formPromise: Promise;\n\n token: string;\n existingFamilyOrganizations: Organization[];\n existingFamilyOrganizations$: Observable;\n\n showNewOrganization = false;\n _organizationPlansComponent: OrganizationPlansComponent;\n _selectedFamilyOrganizationId = \"\";\n\n private _destroy = new Subject();\n\n constructor(\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private apiService: ApiService,\n private syncService: SyncService,\n private validationService: ValidationService,\n private organizationService: OrganizationService,\n private modalService: ModalService\n ) {}\n\n async ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n const error = qParams.token == null;\n if (error) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"sponsoredFamiliesAcceptFailed\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"/\"]);\n return;\n }\n\n this.token = qParams.token;\n\n await this.syncService.fullSync(true);\n this.badToken = !(await this.apiService.postPreValidateSponsorshipToken(this.token));\n this.loading = false;\n });\n\n this.existingFamilyOrganizations$ = this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter((o) => o.planProductType === ProductType.Families))\n );\n\n this.existingFamilyOrganizations$.pipe(takeUntil(this._destroy)).subscribe((orgs) => {\n if (orgs.length === 0) {\n this.selectedFamilyOrganizationId = \"createNew\";\n }\n });\n }\n\n ngOnDestroy(): void {\n this._destroy.next();\n this._destroy.complete();\n }\n\n async submit() {\n this.formPromise = this.doSubmit(this._selectedFamilyOrganizationId);\n await this.formPromise;\n this.formPromise = null;\n }\n\n get selectedFamilyOrganizationId() {\n return this._selectedFamilyOrganizationId;\n }\n\n set selectedFamilyOrganizationId(value: string) {\n this._selectedFamilyOrganizationId = value;\n this.showNewOrganization = value === \"createNew\";\n }\n\n private async doSubmit(organizationId: string) {\n try {\n const request = new OrganizationSponsorshipRedeemRequest();\n request.planSponsorshipType = PlanSponsorshipType.FamiliesForEnterprise;\n request.sponsoredOrganizationId = organizationId;\n\n await this.apiService.postRedeemSponsorship(this.token, request);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"sponsoredFamiliesOfferRedeemed\")\n );\n await this.syncService.fullSync(true);\n\n this.router.navigate([\"/\"]);\n } catch (e) {\n if (this.showNewOrganization) {\n await this.modalService.openViewRef(\n DeleteOrganizationComponent,\n this.deleteModalRef,\n (comp) => {\n comp.organizationId = organizationId;\n comp.deleteOrganizationRequestType = \"InvalidFamiliesForEnterprise\";\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onSuccess.subscribe(() => {\n this.router.navigate([\"/\"]);\n });\n }\n );\n }\n this.validationService.showError(this.i18nService.t(\"sponsorshipTokenHasExpired\"));\n }\n }\n\n private async onOrganizationCreateSuccess(value: any) {\n // Use newly created organization id\n await this.doSubmit(value.organizationId);\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendAccess } from \"../domain/send-access\";\n\nimport { SendFileView } from \"./send-file.view\";\nimport { SendTextView } from \"./send-text.view\";\nimport { View } from \"./view\";\n\nexport class SendAccessView implements View {\n id: string = null;\n name: string = null;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n expirationDate: Date = null;\n creatorIdentifier: string = null;\n\n constructor(s?: SendAccess) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.type = s.type;\n this.expirationDate = s.expirationDate;\n this.creatorIdentifier = s.creatorIdentifier;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendAccessResponse } from \"../response/send-access.response\";\nimport { SendAccessView } from \"../view/send-access.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SendFile } from \"./send-file\";\nimport { SendText } from \"./send-text\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class SendAccess extends Domain {\n id: string;\n type: SendType;\n name: EncString;\n file: SendFile;\n text: SendText;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(obj?: SendAccessResponse) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n name: null,\n expirationDate: null,\n creatorIdentifier: null,\n },\n [\"id\", \"expirationDate\", \"creatorIdentifier\"]\n );\n\n this.type = obj.type;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendText(obj.text);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file);\n break;\n default:\n break;\n }\n }\n\n async decrypt(key: SymmetricCryptoKey): Promise {\n const model = new SendAccessView(this);\n\n await this.decryptObj(\n model,\n {\n name: null,\n },\n null,\n key\n );\n\n switch (this.type) {\n case SendType.File:\n model.file = await this.file.decrypt(key);\n break;\n case SendType.Text:\n model.text = await this.text.decrypt(key);\n break;\n default:\n break;\n }\n\n return model;\n }\n}\n","export class SendAccessRequest {\n password: string;\n}\n","
    \n
    \n
    \n

    Bitwarden Send

    \n
    \n
    \n

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

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

    {{ title }}

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

    {{ \"share\" | i18n }}

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

    \n \n

    \n
    \n
    \n \n \n
    \n
    \n \n \n
    {{ \"maxAccessCountDesc\" | i18n }}
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n \n
    \n \n \n \n
    \n
    \n
    {{ \"sendPasswordDesc\" | i18n }}
    \n
    \n
    \n
    \n \n \n
    {{ \"sendNotesDesc\" | i18n }}
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n \n \n {{ \"save\" | i18n }}\n \n \n
    \n \n \n \n \n
    \n
    \n \n
    \n\n","import { DatePipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"@bitwarden/angular/components/send/add-edit.component\";\nimport { EnvironmentService } from \"@bitwarden/common/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"@bitwarden/common/abstractions/policy/policy.service.abstraction\";\nimport { SendService } from \"@bitwarden/common/abstractions/send.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Component({\n selector: \"app-send-add-edit\",\n templateUrl: \"add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n override componentName = \"app-send-add-edit\";\n\n constructor(\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n datePipe: DatePipe,\n sendService: SendService,\n stateService: StateService,\n messagingService: MessagingService,\n policyService: PolicyService,\n logService: LogService\n ) {\n super(\n i18nService,\n platformUtilsService,\n environmentService,\n datePipe,\n sendService,\n messagingService,\n policyService,\n logService,\n stateService\n );\n }\n\n async copyLinkToClipboard(link: string): Promise {\n // Copy function on web depends on the modal being open or not. Since this event occurs during a transition\n // of the modal closing we need to add a small delay to make sure state of the DOM is consistent.\n return new Promise((resolve) => {\n window.setTimeout(() => resolve(super.copyLinkToClipboard(link)), 500);\n });\n }\n}\n","\n\n
    \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 kdfConfig = await this.stateService.getKdfConfig();\n const newKey = await this.cryptoService.makeKey(\n this.masterPassword,\n this.newEmail,\n kdf,\n kdfConfig\n );\n request.newMasterPasswordHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n newKey\n );\n const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n request.key = newEncKey[1].encryptedString;\n try {\n this.formPromise = this.apiService.postEmail(request);\n await this.formPromise;\n this.reset();\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"emailChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n }\n\n reset() {\n this.token = this.newEmail = this.masterPassword = null;\n this.tokenSent = false;\n }\n}\n","export class UpdateProfileRequest {\n name: string;\n masterPasswordHint: string;\n culture = \"en-US\"; // deprecated\n\n constructor(name: string, masterPasswordHint: string) {\n this.name = name;\n this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null;\n }\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\n@Component({\n selector: \"selectable-avatar\",\n template: `\n \n \n `,\n})\nexport class SelectableAvatarComponent {\n @Input() id: string;\n @Input() text: string;\n @Input() title: string;\n @Input() color: string;\n @Input() border = false;\n @Input() selected = false;\n @Output() select = new EventEmitter();\n\n onFire() {\n this.select.emit(this.color);\n }\n\n get classList() {\n return [\"tw-rounded-full tw-inline-block\"]\n .concat([\"tw-cursor-pointer\", \"tw-outline\", \"tw-outline-solid\", \"tw-outline-offset-1\"])\n .concat(\n this.selected\n ? [\"tw-outline-[3px]\", \"tw-outline-primary-500\"]\n : [\n \"tw-outline-0\",\n \"hover:tw-outline-1\",\n \"hover:tw-outline-primary-300\",\n \"focus:tw-outline-2\",\n \"focus:tw-outline-primary-500\",\n ]\n );\n }\n}\n","\n\n
    \n
    \n
    \n
    \n

    {{ \"customizeAvatar\" | i18n }}

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

    {{ \"pickAnAvatarColor\" | i18n }}

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

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

    \n
    \n
    \n \n\n\n","import { ViewChild, ViewContainerRef, Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UpdateProfileRequest } from \"@bitwarden/common/models/request/update-profile.request\";\nimport { ProfileResponse } from \"@bitwarden/common/models/response/profile.response\";\n\nimport { ChangeAvatarComponent } from \"./change-avatar.component\";\n\n@Component({\n selector: \"app-profile\",\n templateUrl: \"profile.component.html\",\n})\nexport class ProfileComponent implements OnInit, OnDestroy {\n loading = true;\n profile: ProfileResponse;\n fingerprint: string;\n\n formPromise: Promise;\n @ViewChild(\"avatarModalTemplate\", { read: ViewContainerRef, static: true })\n avatarModalRef: ViewContainerRef;\n private destroy$ = new Subject();\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private logService: LogService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private modalService: ModalService\n ) {}\n\n async ngOnInit() {\n this.profile = await this.apiService.getProfile();\n this.loading = false;\n const fingerprint = await this.cryptoService.getFingerprint(\n await this.stateService.getUserId()\n );\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join(\"-\");\n }\n }\n\n async ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async openChangeAvatar() {\n const modalOpened = await this.modalService.openViewRef(\n ChangeAvatarComponent,\n this.avatarModalRef,\n (modal) => {\n modal.profile = this.profile;\n modal.changeColor.pipe(takeUntil(this.destroy$)).subscribe(() => {\n modalOpened[0].close();\n });\n }\n );\n }\n\n async submit() {\n try {\n const request = new UpdateProfileRequest(this.profile.name, this.profile.masterPasswordHint);\n this.formPromise = this.apiService.putProfile(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"accountUpdated\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","\n\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/vault/components/attachments.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.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 { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { AttachmentView } from \"@bitwarden/common/vault/models/view/attachment.view\";\n\n@Component({\n selector: \"emergency-access-attachments\",\n templateUrl: \"../../vault/app/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 { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { 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 { 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 { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"../../vault/app/vault/add-edit.component\";\n\n@Component({\n selector: \"app-org-vault-add-edit\",\n templateUrl: \"../../vault/app/vault/add-edit.component.html\",\n})\nexport class EmergencyAddEditComponent extends BaseAddEditComponent {\n originalCipher: Cipher = null;\n viewOnly = true;\n protected override componentName = \"app-org-vault-add-edit\";\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n totpService: TotpService,\n passwordGenerationService: PasswordGenerationService,\n messagingService: MessagingService,\n eventCollectionService: EventCollectionService,\n policyService: PolicyService,\n passwordRepromptService: PasswordRepromptService,\n organizationService: OrganizationService,\n logService: LogService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n totpService,\n passwordGenerationService,\n messagingService,\n eventCollectionService,\n policyService,\n organizationService,\n logService,\n passwordRepromptService\n );\n }\n\n async load() {\n this.title = this.i18nService.t(\"viewItem\");\n }\n\n protected async loadCipher() {\n return Promise.resolve(this.originalCipher);\n }\n}\n","
    \n

    {{ \"vault\" | i18n }}

    \n
    \n
    \n \n \n \n \n \n \n \n \n \n
    \n \n \n {{\n c.name\n }}\n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
    \n {{ c.subTitle }}\n
    \n \n
    \n
    \n \n \n {{ \"loading\" | i18n }}\n \n
    \n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/models/domain/symmetric-crypto-key\";\nimport { EmergencyAccessViewResponse } from \"@bitwarden/common/models/response/emergency-access.response\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CipherData } from \"@bitwarden/common/vault/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\nimport { CipherView } from \"@bitwarden/common/vault/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 { KdfConfig } from \"@bitwarden/common/models/domain/kdf-config\";\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 new KdfConfig(\n takeoverResponse.kdfIterations,\n takeoverResponse.kdfMemory,\n takeoverResponse.kdfParallelism\n )\n );\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n const encKey = await this.cryptoService.remakeEncKey(key, oldEncKey);\n\n const request = new EmergencyAccessPasswordRequest();\n request.newMasterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n\n this.apiService.postEmergencyAccessPassword(this.emergencyAccessId, request);\n\n try {\n this.onDone.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","\n\n
    \n

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

    {{ \"encKeySettings\" | i18n }}

    \n
    \n{{ \"changeKdfLoggedOutWarning\" | 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 {{ \"kdfIterationsDesc\" | i18n: (recommendedPbkdf2Iterations | number) }}\n

    \n \n {{ \"kdfIterationsWarning\" | i18n: (100000 | number) }}\n \n
    \n \n

    {{ \"argon2Desc\" | i18n }}

    \n {{ \"argon2Warning\" | i18n }}\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 {\n DEFAULT_KDF_CONFIG,\n DEFAULT_PBKDF2_ITERATIONS,\n DEFAULT_ARGON2_ITERATIONS,\n DEFAULT_ARGON2_MEMORY,\n DEFAULT_ARGON2_PARALLELISM,\n KdfType,\n} from \"@bitwarden/common/enums/kdfType\";\nimport { KdfConfig } from \"@bitwarden/common/models/domain/kdf-config\";\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 kdf = KdfType.PBKDF2_SHA256;\n kdfConfig: KdfConfig = DEFAULT_KDF_CONFIG;\n kdfType = KdfType;\n kdfOptions: any[] = [];\n formPromise: Promise;\n recommendedPbkdf2Iterations = DEFAULT_PBKDF2_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 = [\n { name: \"PBKDF2 SHA-256\", value: KdfType.PBKDF2_SHA256 },\n { name: \"Argon2id\", value: KdfType.Argon2id },\n ];\n }\n\n async ngOnInit() {\n this.kdf = await this.stateService.getKdfType();\n this.kdfConfig = await this.stateService.getKdfConfig();\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 try {\n this.formPromise = this.makeKeyAndSaveAsync();\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 async onChangeKdf(newValue: KdfType) {\n if (newValue === KdfType.PBKDF2_SHA256) {\n this.kdfConfig = new KdfConfig(DEFAULT_PBKDF2_ITERATIONS);\n } else if (newValue === KdfType.Argon2id) {\n this.kdfConfig = new KdfConfig(\n DEFAULT_ARGON2_ITERATIONS,\n DEFAULT_ARGON2_MEMORY,\n DEFAULT_ARGON2_PARALLELISM\n );\n } else {\n throw new Error(\"Unknown KDF type.\");\n }\n }\n\n private async makeKeyAndSaveAsync() {\n const request = new KdfRequest();\n request.kdf = this.kdf;\n request.kdfIterations = this.kdfConfig.iterations;\n request.kdfMemory = this.kdfConfig.memory;\n request.kdfParallelism = this.kdfConfig.parallelism;\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.kdfConfig\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\n await this.apiService.postAccountKdf(request);\n }\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\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 { PlanSponsorshipType } from \"@bitwarden/common/enums/planSponsorshipType\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\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
    \n

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

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

    {{ \"subscription\" | i18n }}

    \n
    \n
    \n

    {{ \"goPremium\" | i18n }}

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

    {{ \"premiumUpgradeUnlockFeatures\" | i18n }}

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

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

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

    {{ \"uploadLicenseFilePremium\" | i18n }}

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

    {{ \"addons\" | i18n }}

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

    {{ \"summary\" | i18n }}

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

    {{ \"paymentInformation\" | i18n }}

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

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

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

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

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

    {{ \"subscriptionPendingCanceled\" | i18n }}

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

    {{ \"updateLicense\" | i18n }}

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

    {{ \"storage\" | i18n }}

    \n

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

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

    {{ \"passwordHistory\" | i18n }}

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

    {{ \"generator\" | i18n }}

    \n
    \n\n {{ \"passwordGeneratorPolicyInEffect\" | i18n }}\n\n
    \n
    \n \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n\n
    \n \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n\n
    \n
    \n \n \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n \n \n \n \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n \n \n {{ \"regenerateUsername\" | i18n }}\n \n \n
    \n
    \n\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { GeneratorComponent as BaseGeneratorComponent } from \"@bitwarden/angular/components/generator.component\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"@bitwarden/common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { UsernameGenerationService } from \"@bitwarden/common/abstractions/usernameGeneration.service\";\n\nimport { PasswordGeneratorHistoryComponent } from \"./password-generator-history.component\";\n\n@Component({\n selector: \"app-generator\",\n templateUrl: \"generator.component.html\",\n})\nexport class GeneratorComponent extends BaseGeneratorComponent {\n @ViewChild(\"historyTemplate\", { read: ViewContainerRef, static: true })\n historyModalRef: ViewContainerRef;\n\n constructor(\n passwordGenerationService: PasswordGenerationService,\n usernameGenerationService: UsernameGenerationService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n logService: LogService,\n route: ActivatedRoute,\n private modalService: ModalService\n ) {\n super(\n passwordGenerationService,\n usernameGenerationService,\n platformUtilsService,\n stateService,\n i18nService,\n logService,\n route,\n window\n );\n if (platformUtilsService.isSelfHost()) {\n // Cannot use Firefox Relay on self hosted web vaults due to CORS issues with Firefox Relay API\n this.forwardOptions.splice(\n this.forwardOptions.findIndex((o) => o.value === \"firefoxrelay\"),\n 1\n );\n // Also cannot use Duck Duck Go on self hosted web vaults due to CORS issues\n this.forwardOptions.splice(\n this.forwardOptions.findIndex((o) => o.value === \"duckduckgo\"),\n 1\n );\n }\n }\n\n async history() {\n await this.modalService.openViewRef(PasswordGeneratorHistoryComponent, this.historyModalRef);\n }\n\n lengthChanged() {\n document.getElementById(\"length\").focus();\n }\n\n minNumberChanged() {\n document.getElementById(\"min-number\").focus();\n }\n\n minSpecialChanged() {\n document.getElementById(\"min-special\").focus();\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Component({\n selector: \"app-tools\",\n templateUrl: \"tools.component.html\",\n})\nexport class ToolsComponent implements OnInit {\n canAccessPremium = false;\n\n constructor(private stateService: StateService, private messagingService: MessagingService) {}\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n}\n","
    \n \n
    \n","import { 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\";\nimport { VaultModule } from \"../vault/app/vault/vault.module\";\n\nimport { AcceptEmergencyComponent } from \"./accounts/accept-emergency.component\";\nimport { AcceptOrganizationComponent } from \"./accounts/accept-organization.component\";\nimport { HintComponent } from \"./accounts/hint.component\";\nimport { LockComponent } from \"./accounts/lock.component\";\nimport { LoginWithDeviceComponent } from \"./accounts/login/login-with-device.component\";\nimport { LoginComponent } from \"./accounts/login/login.component\";\nimport { RecoverDeleteComponent } from \"./accounts/recover-delete.component\";\nimport { RecoverTwoFactorComponent } from \"./accounts/recover-two-factor.component\";\nimport { RemovePasswordComponent } from \"./accounts/remove-password.component\";\nimport { SetPasswordComponent } from \"./accounts/set-password.component\";\nimport { SsoComponent } from \"./accounts/sso.component\";\nimport { TrialInitiationComponent } from \"./accounts/trial-initiation/trial-initiation.component\";\nimport { TwoFactorComponent } from \"./accounts/two-factor.component\";\nimport { UpdatePasswordComponent } from \"./accounts/update-password.component\";\nimport { UpdateTempPasswordComponent } from \"./accounts/update-temp-password.component\";\nimport { VerifyEmailTokenComponent } from \"./accounts/verify-email-token.component\";\nimport { VerifyRecoverDeleteComponent } from \"./accounts/verify-recover-delete.component\";\nimport { HomeGuard } from \"./guards/home.guard\";\nimport { FrontendLayoutComponent } from \"./layouts/frontend-layout.component\";\nimport { UserLayoutComponent } from \"./layouts/user-layout.component\";\nimport { OrganizationModule } from \"./organizations/organization.module\";\nimport { AcceptFamilySponsorshipComponent } from \"./organizations/sponsorships/accept-family-sponsorship.component\";\nimport { FamiliesForEnterpriseSetupComponent } from \"./organizations/sponsorships/families-for-enterprise-setup.component\";\nimport { ReportsModule } from \"./reports\";\nimport { AccessComponent } from \"./send/access.component\";\nimport { SendComponent } from \"./send/send.component\";\nimport { AccountComponent } from \"./settings/account.component\";\nimport { CreateOrganizationComponent } from \"./settings/create-organization.component\";\nimport { DomainRulesComponent } from \"./settings/domain-rules.component\";\nimport { EmergencyAccessViewComponent } from \"./settings/emergency-access-view.component\";\nimport { EmergencyAccessComponent } from \"./settings/emergency-access.component\";\nimport { PreferencesComponent } from \"./settings/preferences.component\";\nimport { SecurityRoutingModule } from \"./settings/security-routing.module\";\nimport { SettingsComponent } from \"./settings/settings.component\";\nimport { SponsoredFamiliesComponent } from \"./settings/sponsored-families.component\";\nimport { SubscriptionRoutingModule } from \"./settings/subscription-routing.module\";\nimport { GeneratorComponent } from \"./tools/generator.component\";\nimport { ToolsComponent } from \"./tools/tools.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: FrontendLayoutComponent,\n data: { doNotSaveUrl: true },\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n children: [], // Children lets us have an empty component.\n canActivate: [HomeGuard], // Redirects either to vault, login or lock page.\n },\n { path: \"login\", component: LoginComponent, canActivate: [UnauthGuard] },\n {\n path: \"login-with-device\",\n component: LoginWithDeviceComponent,\n data: { titleId: \"loginWithDevice\" },\n },\n { path: \"2fa\", component: TwoFactorComponent, canActivate: [UnauthGuard] },\n {\n path: \"register\",\n component: TrialInitiationComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"createAccount\" },\n },\n {\n path: \"trial\",\n redirectTo: \"register\",\n pathMatch: \"full\",\n },\n {\n path: \"sso\",\n component: SsoComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"enterpriseSingleSignOn\" },\n },\n {\n path: \"set-password\",\n component: SetPasswordComponent,\n data: { titleId: \"setMasterPassword\" },\n },\n {\n path: \"hint\",\n component: HintComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"passwordHint\" },\n },\n {\n path: \"lock\",\n component: LockComponent,\n canActivate: [LockGuard],\n },\n { path: \"verify-email\", component: VerifyEmailTokenComponent },\n {\n path: \"accept-organization\",\n component: AcceptOrganizationComponent,\n data: { titleId: \"joinOrganization\", doNotSaveUrl: false },\n },\n {\n path: \"accept-emergency\",\n component: AcceptEmergencyComponent,\n data: { titleId: \"acceptEmergency\", doNotSaveUrl: false },\n },\n {\n path: \"accept-families-for-enterprise\",\n component: AcceptFamilySponsorshipComponent,\n data: { titleId: \"acceptFamilySponsorship\", doNotSaveUrl: false },\n },\n { path: \"recover\", pathMatch: \"full\", redirectTo: \"recover-2fa\" },\n {\n path: \"recover-2fa\",\n component: RecoverTwoFactorComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"recoverAccountTwoStep\" },\n },\n {\n path: \"recover-delete\",\n component: RecoverDeleteComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"deleteAccount\" },\n },\n {\n path: \"verify-recover-delete\",\n component: VerifyRecoverDeleteComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"deleteAccount\" },\n },\n {\n path: \"send/:sendId/:key\",\n component: AccessComponent,\n data: { title: \"Bitwarden Send\" },\n },\n {\n path: \"update-temp-password\",\n component: UpdateTempPasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"updateTempPassword\" },\n },\n {\n path: \"update-password\",\n component: UpdatePasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"updatePassword\" },\n },\n {\n path: \"remove-password\",\n component: RemovePasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"removeMasterPassword\" },\n },\n ],\n },\n {\n path: \"\",\n component: UserLayoutComponent,\n canActivate: [AuthGuard],\n children: [\n {\n path: \"vault\",\n loadChildren: () => VaultModule,\n },\n { path: \"sends\", component: SendComponent, data: { title: \"Send\" } },\n {\n path: \"create-organization\",\n component: CreateOrganizationComponent,\n data: { titleId: \"newOrganization\" },\n },\n {\n path: \"settings\",\n component: SettingsComponent,\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"account\" },\n { path: \"account\", component: AccountComponent, data: { titleId: \"myAccount\" } },\n {\n path: \"preferences\",\n component: PreferencesComponent,\n data: { titleId: \"preferences\" },\n },\n {\n path: \"security\",\n loadChildren: () => SecurityRoutingModule,\n },\n {\n path: \"domain-rules\",\n component: DomainRulesComponent,\n data: { titleId: \"domainRules\" },\n },\n {\n path: \"subscription\",\n loadChildren: () => SubscriptionRoutingModule,\n },\n {\n path: \"emergency-access\",\n children: [\n {\n path: \"\",\n component: EmergencyAccessComponent,\n data: { titleId: \"emergencyAccess\" },\n },\n {\n path: \":id\",\n component: EmergencyAccessViewComponent,\n data: { titleId: \"emergencyAccess\" },\n },\n ],\n },\n {\n path: \"sponsored-families\",\n component: SponsoredFamiliesComponent,\n data: { titleId: \"sponsoredFamilies\" },\n },\n ],\n },\n {\n path: \"tools\",\n component: ToolsComponent,\n canActivate: [AuthGuard],\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"generator\" },\n {\n path: \"\",\n loadChildren: () =>\n import(\"./tools/import-export/import-export.module\").then(\n (m) => m.ImportExportModule\n ),\n },\n {\n path: \"generator\",\n component: GeneratorComponent,\n data: { titleId: \"generator\" },\n },\n ],\n },\n {\n path: \"reports\",\n loadChildren: () => ReportsModule,\n },\n { path: \"setup/families-for-enterprise\", component: FamiliesForEnterpriseSetupComponent },\n ],\n },\n {\n path: \"organizations\",\n loadChildren: () => OrganizationModule,\n },\n];\n\n@NgModule({\n imports: [\n RouterModule.forRoot(routes, {\n useHash: true,\n paramsInheritanceStrategy: \"always\",\n // enableTracing: true,\n }),\n ],\n exports: [RouterModule],\n})\nexport class OssRoutingModule {}\n\nexport function buildFlaggedRoute(flagName: keyof Flags, route: Route): Route {\n return flagEnabled(flagName)\n ? route\n : {\n path: route.path,\n redirectTo: \"/\",\n };\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from \"@angular/router\";\n\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class HasPremiumGuard implements CanActivate {\n constructor(\n private router: Router,\n private stateService: StateService,\n private messagingService: MessagingService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {\n const userHasPremium = await this.stateService.getCanAccessPremium();\n\n if (!userHasPremium) {\n this.messagingService.send(\"premiumRequired\");\n }\n\n // Prevent trapping the user on the login page, since that's an awful UX flow\n if (!userHasPremium && this.router.url === \"/login\") {\n return this.router.createUrlTree([\"/\"]);\n }\n\n return userHasPremium;\n }\n}\n","
    \n

    {{ \"dataBreachReport\" | i18n }}

    \n
    \n

    {{ \"breachDesc\" | i18n }}

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

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

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

      {{ a.title }}

      \n

      \n

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

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

    {{ \"reports\" | i18n }}

    \n
    \n\n

    {{ \"reportsDesc\" | i18n }}

    \n\n\n","\n","import { Component, OnDestroy } from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { Subscription } from \"rxjs\";\nimport { filter } from \"rxjs/operators\";\n\n@Component({\n selector: \"app-reports-layout\",\n templateUrl: \"reports-layout.component.html\",\n})\nexport class ReportsLayoutComponent implements OnDestroy {\n homepage = true;\n subscription: Subscription;\n\n constructor(router: Router) {\n this.subscription = router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n .subscribe((event) => {\n this.homepage = (event as NavigationEnd).url == \"/reports\";\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"@bitwarden/angular/guards/auth.guard\";\n\nimport { HasPremiumGuard } from \"../shared/guards/has-premium.guard\";\n\nimport { BreachReportComponent } from \"./pages/breach-report.component\";\nimport { ExposedPasswordsReportComponent } from \"./pages/exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent } from \"./pages/inactive-two-factor-report.component\";\nimport { ReportsHomeComponent } from \"./pages/reports-home.component\";\nimport { ReusedPasswordsReportComponent } from \"./pages/reused-passwords-report.component\";\nimport { UnsecuredWebsitesReportComponent } from \"./pages/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent } from \"./pages/weak-passwords-report.component\";\nimport { ReportsLayoutComponent } from \"./reports-layout.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: ReportsLayoutComponent,\n canActivate: [AuthGuard],\n children: [\n { path: \"\", pathMatch: \"full\", component: ReportsHomeComponent, data: { homepage: true } },\n {\n path: \"breach-report\",\n component: BreachReportComponent,\n data: { titleId: \"dataBreachReport\" },\n },\n {\n path: \"reused-passwords-report\",\n component: ReusedPasswordsReportComponent,\n data: { titleId: \"reusedPasswordsReport\" },\n canActivate: [HasPremiumGuard],\n },\n {\n path: \"unsecured-websites-report\",\n component: UnsecuredWebsitesReportComponent,\n data: { titleId: \"unsecuredWebsitesReport\" },\n canActivate: [HasPremiumGuard],\n },\n {\n path: \"weak-passwords-report\",\n component: WeakPasswordsReportComponent,\n data: { titleId: \"weakPasswordsReport\" },\n canActivate: [HasPremiumGuard],\n },\n {\n path: \"exposed-passwords-report\",\n component: ExposedPasswordsReportComponent,\n data: { titleId: \"exposedPasswordsReport\" },\n canActivate: [HasPremiumGuard],\n },\n {\n path: \"inactive-two-factor-report\",\n component: InactiveTwoFactorReportComponent,\n data: { titleId: \"inactive2faReport\" },\n canActivate: [HasPremiumGuard],\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class ReportsRoutingModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../shared\";\n\nimport { BreachReportComponent } from \"./pages/breach-report.component\";\nimport { ExposedPasswordsReportComponent } from \"./pages/exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent } from \"./pages/inactive-two-factor-report.component\";\nimport { ReportsHomeComponent } from \"./pages/reports-home.component\";\nimport { ReusedPasswordsReportComponent } from \"./pages/reused-passwords-report.component\";\nimport { UnsecuredWebsitesReportComponent } from \"./pages/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent } from \"./pages/weak-passwords-report.component\";\nimport { ReportsLayoutComponent } from \"./reports-layout.component\";\nimport { ReportsRoutingModule } from \"./reports-routing.module\";\nimport { ReportsSharedModule } from \"./shared\";\n\n@NgModule({\n imports: [CommonModule, SharedModule, ReportsSharedModule, ReportsRoutingModule],\n declarations: [\n BreachReportComponent,\n ExposedPasswordsReportComponent,\n InactiveTwoFactorReportComponent,\n ReportsLayoutComponent,\n ReportsHomeComponent,\n ReusedPasswordsReportComponent,\n UnsecuredWebsitesReportComponent,\n WeakPasswordsReportComponent,\n WeakPasswordsReportComponent,\n ],\n})\nexport class ReportsModule {}\n","import { Directive, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/vault/enums/cipher-reprompt-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\n\nimport { AddEditComponent } from \"../../../vault/app/vault/add-edit.component\";\nimport { AddEditComponent as OrgAddEditComponent } from \"../../organizations/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 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 { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/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 passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, 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 { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/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 private logService: LogService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n try {\n await this.load2fa();\n } catch (e) {\n this.logService.error(e);\n }\n\n if (this.services.size > 0) {\n const allCiphers = await this.getAllCiphers();\n const inactive2faCiphers: CipherView[] = [];\n const promises: Promise[] = [];\n const docs = new Map();\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n (c.login.totp != null && c.login.totp !== \"\") ||\n !c.login.hasUris ||\n c.isDeleted\n ) {\n return;\n }\n for (let i = 0; i < c.login.uris.length; i++) {\n const u = c.login.uris[i];\n if (u.uri != null && u.uri !== \"\") {\n const uri = u.uri.replace(\"www.\", \"\");\n const domain = Utils.getDomain(uri);\n if (domain != null && this.services.has(domain)) {\n if (this.services.get(domain) != null) {\n docs.set(c.id, this.services.get(domain));\n }\n inactive2faCiphers.push(c);\n }\n }\n }\n });\n await Promise.all(promises);\n this.ciphers = inactive2faCiphers;\n this.cipherDocs = docs;\n }\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n private async load2fa() {\n if (this.services.size > 0) {\n return;\n }\n const response = await fetch(new Request(\"https://api.2fa.directory/v3/totp.json\"));\n if (response.status !== 200) {\n throw new Error();\n }\n const responseJson = await response.json();\n for (const service of responseJson) {\n const serviceData = service[1];\n if (serviceData.domain == null) {\n continue;\n }\n if (serviceData.documentation == null) {\n continue;\n }\n if (serviceData[\"additional-domains\"] != null) {\n for (const additionalDomain of serviceData[\"additional-domains\"]) {\n this.services.set(additionalDomain, serviceData.documentation);\n }\n }\n this.services.set(serviceData.domain, serviceData.documentation);\n }\n }\n}\n","
    \n

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

    \n
    \n

    {{ \"reusedPasswordsReportDesc\" | i18n }}

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

    {{ title }}

    \n

    {{ description }}

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

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

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

    {{ apiKeyTitle | i18n }}

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

    {{ apiKeyDescription | i18n }}

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

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

    \n

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

    \n

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

    \n

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

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

    {{ \"invoices\" | i18n }}

    \n

    {{ \"noInvoices\" | i18n }}

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

    {{ \"transactions\" | i18n }}

    \n

    {{ \"noTransactions\" | i18n }}

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

    {{ \"uploadLicenseFileOrg\" | i18n }}

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

    {{ \"chooseYourPlan\" | i18n }}

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

    {{ \"users\" | i18n }}

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

    {{ \"addons\" | i18n }}

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

    {{ \"summary\" | i18n }}

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

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

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

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

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

    {{ \"addCredit\" | i18n }}

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

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

    \n \n \n \n \n
    \n
    \n","\n\n
    \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\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\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 private syncService: SyncService\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 this.syncService.fullSync(true);\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 { Utils } from \"@bitwarden/common/misc/utils\";\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 Utils.encodeRFC3986URIComponent(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","
    \n
    \n \n \n {{\n \"licenseFileDesc\"\n | i18n\n : (!organizationId\n ? \"bitwarden_premium_license.json\"\n : \"bitwarden_organization_license.json\")\n }}\n
    \n \n \n
    \n","import { Component, 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 @Input() showCancel = true;\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","import { NgModule } from \"@angular/core\";\n\nimport { PasswordRepromptComponent } from \"../../../src/vault/app/components/password-reprompt.component\";\nimport { PremiumBadgeComponent } from \"../../vault/app/components/premium-badge.component\";\nimport { AddEditCustomFieldsComponent } from \"../../vault/app/vault/add-edit-custom-fields.component\";\nimport { AddEditComponent } from \"../../vault/app/vault/add-edit.component\";\nimport { AttachmentsComponent } from \"../../vault/app/vault/attachments.component\";\nimport { CollectionsComponent } from \"../../vault/app/vault/collections.component\";\nimport { FolderAddEditComponent } from \"../../vault/app/vault/folder-add-edit.component\";\nimport { ShareComponent } from \"../../vault/app/vault/share.component\";\nimport { AcceptEmergencyComponent } from \"../accounts/accept-emergency.component\";\nimport { AcceptOrganizationComponent } from \"../accounts/accept-organization.component\";\nimport { HintComponent } from \"../accounts/hint.component\";\nimport { LockComponent } from \"../accounts/lock.component\";\nimport { RecoverDeleteComponent } from \"../accounts/recover-delete.component\";\nimport { RecoverTwoFactorComponent } from \"../accounts/recover-two-factor.component\";\nimport { RegisterFormModule } from \"../accounts/register-form/register-form.module\";\nimport { RemovePasswordComponent } from \"../accounts/remove-password.component\";\nimport { SetPasswordComponent } from \"../accounts/set-password.component\";\nimport { SsoComponent } from \"../accounts/sso.component\";\nimport { TwoFactorOptionsComponent } from \"../accounts/two-factor-options.component\";\nimport { TwoFactorComponent } from \"../accounts/two-factor.component\";\nimport { UpdatePasswordComponent } from \"../accounts/update-password.component\";\nimport { UpdateTempPasswordComponent } from \"../accounts/update-temp-password.component\";\nimport { VerifyEmailTokenComponent } from \"../accounts/verify-email-token.component\";\nimport { VerifyRecoverDeleteComponent } from \"../accounts/verify-recover-delete.component\";\nimport { DynamicAvatarComponent } from \"../components/dynamic-avatar.component\";\nimport { OrganizationSwitcherComponent } from \"../components/organization-switcher.component\";\nimport { SelectableAvatarComponent } from \"../components/selectable-avatar.component\";\nimport { UserVerificationPromptComponent } from \"../components/user-verification-prompt.component\";\nimport { UserVerificationComponent } from \"../components/user-verification.component\";\nimport { FooterComponent } from \"../layouts/footer.component\";\nimport { FrontendLayoutComponent } from \"../layouts/frontend-layout.component\";\nimport { NavbarComponent } from \"../layouts/navbar.component\";\nimport { ProductSwitcherModule } from \"../layouts/product-switcher/product-switcher.module\";\nimport { UserLayoutComponent } from \"../layouts/user-layout.component\";\nimport { OrganizationCreateModule } from \"../organizations/create/organization-create.module\";\nimport { OrganizationLayoutComponent } from \"../organizations/layouts/organization-layout.component\";\nimport { 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 { ManageComponent as OrgManageComponent } from \"../organizations/manage/manage.component\";\nimport { UserConfirmComponent as OrgUserConfirmComponent } from \"../organizations/manage/user-confirm.component\";\nimport { AcceptFamilySponsorshipComponent } from \"../organizations/sponsorships/accept-family-sponsorship.component\";\nimport { FamiliesForEnterpriseSetupComponent } from \"../organizations/sponsorships/families-for-enterprise-setup.component\";\nimport { ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent } from \"../organizations/tools/exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent } from \"../organizations/tools/inactive-two-factor-report.component\";\nimport { ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent } from \"../organizations/tools/reused-passwords-report.component\";\nimport { ToolsComponent as OrgToolsComponent } from \"../organizations/tools/tools.component\";\nimport { UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent } from \"../organizations/tools/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent } from \"../organizations/tools/weak-passwords-report.component\";\nimport { AddEditComponent as OrgAddEditComponent } from \"../organizations/vault/add-edit.component\";\nimport { AttachmentsComponent as OrgAttachmentsComponent } from \"../organizations/vault/attachments.component\";\nimport { CollectionsComponent as OrgCollectionsComponent } from \"../organizations/vault/collections.component\";\nimport { ProvidersComponent } from \"../providers/providers.component\";\nimport { AccessComponent } from \"../send/access.component\";\nimport { AddEditComponent as SendAddEditComponent } from \"../send/add-edit.component\";\nimport { EffluxDatesComponent as SendEffluxDatesComponent } from \"../send/efflux-dates.component\";\nimport { SendComponent } from \"../send/send.component\";\nimport { AccountComponent } from \"../settings/account.component\";\nimport { AddCreditComponent } from \"../settings/add-credit.component\";\nimport { AdjustPaymentComponent } from \"../settings/adjust-payment.component\";\nimport { AdjustStorageComponent } from \"../settings/adjust-storage.component\";\nimport { ApiKeyComponent } from \"../settings/api-key.component\";\nimport { BillingHistoryViewComponent } from \"../settings/billing-history-view.component\";\nimport { BillingHistoryComponent } from \"../settings/billing-history.component\";\nimport { BillingSyncKeyComponent } from \"../settings/billing-sync-key.component\";\nimport { ChangeAvatarComponent } from \"../settings/change-avatar.component\";\nimport { ChangeEmailComponent } from \"../settings/change-email.component\";\nimport { ChangeKdfComponent } from \"../settings/change-kdf.component\";\nimport { ChangePasswordComponent } from \"../settings/change-password.component\";\nimport { CreateOrganizationComponent } from \"../settings/create-organization.component\";\nimport { DeauthorizeSessionsComponent } from \"../settings/deauthorize-sessions.component\";\nimport { DeleteAccountComponent } from \"../settings/delete-account.component\";\nimport { DomainRulesComponent } from \"../settings/domain-rules.component\";\nimport { EmergencyAccessAddEditComponent } from \"../settings/emergency-access-add-edit.component\";\nimport { EmergencyAccessAttachmentsComponent } from \"../settings/emergency-access-attachments.component\";\nimport { EmergencyAccessConfirmComponent } from \"../settings/emergency-access-confirm.component\";\nimport { EmergencyAccessTakeoverComponent } from \"../settings/emergency-access-takeover.component\";\nimport { EmergencyAccessViewComponent } from \"../settings/emergency-access-view.component\";\nimport { EmergencyAccessComponent } from \"../settings/emergency-access.component\";\nimport { EmergencyAddEditComponent } from \"../settings/emergency-add-edit.component\";\nimport { LowKdfComponent } from \"../settings/low-kdf.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\";\n\nimport { SharedModule } from \"./shared.module\";\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: [SharedModule, OrganizationCreateModule, RegisterFormModule, ProductSwitcherModule],\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 ChangeEmailComponent,\n ChangeKdfComponent,\n ChangePasswordComponent,\n CollectionsComponent,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DomainRulesComponent,\n DynamicAvatarComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n FamiliesForEnterpriseSetupComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n LockComponent,\n NavbarComponent,\n OrganizationSwitcherComponent,\n OrgAddEditComponent,\n OrganizationLayoutComponent,\n OrganizationPlansComponent,\n OrgAttachmentsComponent,\n OrgCollectionsComponent,\n OrgEntityEventsComponent,\n OrgEventsComponent,\n OrgExposedPasswordsReportComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgManageCollectionsComponent,\n OrgManageComponent,\n OrgReusedPasswordsReportComponent,\n OrgToolsComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserConfirmComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordRepromptComponent,\n UserVerificationPromptComponent,\n PaymentComponent,\n PaymentMethodComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n PremiumComponent,\n ProfileComponent,\n ChangeAvatarComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RemovePasswordComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SelectableAvatarComponent,\n SendAddEditComponent,\n SendComponent,\n SendEffluxDatesComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n SubscriptionComponent,\n TaxInfoComponent,\n ToolsComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n BillingHistoryComponent,\n BillingHistoryViewComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n UserVerificationComponent,\n VaultTimeoutInputComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n LowKdfComponent,\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 ChangeEmailComponent,\n ChangeKdfComponent,\n ChangePasswordComponent,\n CollectionsComponent,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DomainRulesComponent,\n DynamicAvatarComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n FamiliesForEnterpriseSetupComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n LockComponent,\n NavbarComponent,\n OrganizationSwitcherComponent,\n OrgAddEditComponent,\n OrganizationLayoutComponent,\n OrganizationPlansComponent,\n OrgAttachmentsComponent,\n OrgCollectionsComponent,\n OrgEntityEventsComponent,\n OrgEventsComponent,\n OrgExposedPasswordsReportComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgManageCollectionsComponent,\n OrgManageComponent,\n OrgReusedPasswordsReportComponent,\n OrgToolsComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserConfirmComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordRepromptComponent,\n PaymentComponent,\n PaymentMethodComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n PremiumComponent,\n ProfileComponent,\n ChangeAvatarComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RemovePasswordComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SelectableAvatarComponent,\n SendAddEditComponent,\n SendComponent,\n SendEffluxDatesComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n SubscriptionComponent,\n TaxInfoComponent,\n ToolsComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n BillingHistoryComponent,\n BillingHistoryViewComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n UserVerificationComponent,\n VaultTimeoutInputComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n LowKdfComponent,\n ],\n})\nexport class LooseComponentsModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../shared\";\n\nimport { BitActionDirective } from \"./bit-action.directive\";\nimport { BitSubmitDirective } from \"./bit-submit.directive\";\nimport { BitFormButtonDirective } from \"./form-button.directive\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [BitActionDirective, BitFormButtonDirective, BitSubmitDirective],\n exports: [BitActionDirective, BitFormButtonDirective, BitSubmitDirective],\n})\nexport class AsyncActionsModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { AvatarComponent } from \"./avatar.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [AvatarComponent],\n declarations: [AvatarComponent],\n})\nexport class AvatarModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { BadgeModule } from \"../badge\";\nimport { SharedModule } from \"../shared\";\n\nimport { BadgeListComponent } from \"./badge-list.component\";\n\n@NgModule({\n imports: [SharedModule, BadgeModule],\n exports: [BadgeListComponent],\n declarations: [BadgeListComponent],\n})\nexport class BadgeListModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { ButtonComponent } from \"./button.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [ButtonComponent],\n declarations: [ButtonComponent],\n})\nexport class ButtonModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { CalloutComponent } from \"./callout.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [CalloutComponent],\n declarations: [CalloutComponent],\n})\nexport class CalloutModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { ColorPasswordComponent } from \"./color-password.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [ColorPasswordComponent],\n declarations: [ColorPasswordComponent],\n})\nexport class ColorPasswordModule {}\n","import { DialogModule as CdkDialogModule } from \"@angular/cdk/dialog\";\nimport { NgModule } from \"@angular/core\";\n\nimport { ButtonModule } from \"../button\";\nimport { IconButtonModule } from \"../icon-button\";\nimport { SharedModule } from \"../shared\";\n\nimport { DialogService } from \"./dialog.service\";\nimport { DialogComponent } from \"./dialog/dialog.component\";\nimport { DialogCloseDirective } from \"./directives/dialog-close.directive\";\nimport { DialogTitleContainerDirective } from \"./directives/dialog-title-container.directive\";\nimport { SimpleConfigurableDialogComponent } from \"./simple-configurable-dialog/simple-configurable-dialog.component\";\nimport { IconDirective, SimpleDialogComponent } from \"./simple-dialog/simple-dialog.component\";\n\n@NgModule({\n imports: [SharedModule, IconButtonModule, CdkDialogModule, ButtonModule],\n declarations: [\n DialogCloseDirective,\n DialogTitleContainerDirective,\n DialogComponent,\n SimpleDialogComponent,\n SimpleConfigurableDialogComponent,\n IconDirective,\n ],\n exports: [\n CdkDialogModule,\n DialogComponent,\n SimpleDialogComponent,\n DialogCloseDirective,\n IconDirective,\n ],\n providers: [DialogService],\n})\nexport class DialogModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BitIconComponent } from \"./icon.component\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitIconComponent],\n exports: [BitIconComponent],\n})\nexport class IconModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { CellDirective } from \"./cell.directive\";\nimport { RowDirective } from \"./row.directive\";\nimport { SortableComponent } from \"./sortable.component\";\nimport { TableBodyDirective, TableComponent } from \"./table.component\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n TableComponent,\n CellDirective,\n RowDirective,\n SortableComponent,\n TableBodyDirective,\n ],\n exports: [TableComponent, CellDirective, RowDirective, SortableComponent, TableBodyDirective],\n})\nexport class TableModule {}\n","import { PortalModule } from \"@angular/cdk/portal\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { RouterModule } from \"@angular/router\";\n\nimport { TabHeaderComponent } from \"./shared/tab-header.component\";\nimport { TabListContainerDirective } from \"./shared/tab-list-container.directive\";\nimport { TabListItemDirective } from \"./shared/tab-list-item.directive\";\nimport { TabBodyComponent } from \"./tab-group/tab-body.component\";\nimport { TabGroupComponent } from \"./tab-group/tab-group.component\";\nimport { TabLabelDirective } from \"./tab-group/tab-label.directive\";\nimport { TabComponent } from \"./tab-group/tab.component\";\nimport { TabLinkComponent } from \"./tab-nav-bar/tab-link.component\";\nimport { TabNavBarComponent } from \"./tab-nav-bar/tab-nav-bar.component\";\n\n@NgModule({\n imports: [CommonModule, RouterModule, PortalModule],\n exports: [\n TabGroupComponent,\n TabComponent,\n TabLabelDirective,\n TabNavBarComponent,\n TabLinkComponent,\n ],\n declarations: [\n TabGroupComponent,\n TabComponent,\n TabLabelDirective,\n TabListContainerDirective,\n TabListItemDirective,\n TabHeaderComponent,\n TabNavBarComponent,\n TabLinkComponent,\n TabBodyComponent,\n ],\n})\nexport class TabsModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BadgeModule } from \"../badge\";\n\nimport { ToggleGroupComponent } from \"./toggle-group.component\";\nimport { ToggleComponent } from \"./toggle.component\";\n\n@NgModule({\n imports: [CommonModule, BadgeModule],\n exports: [ToggleGroupComponent, ToggleComponent],\n declarations: [ToggleGroupComponent, ToggleComponent],\n})\nexport class ToggleGroupModule {}\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 BadgeListModule,\n BadgeModule,\n ButtonModule,\n CalloutModule,\n CheckboxModule,\n ColorPasswordModule,\n DialogModule,\n FormFieldModule,\n IconButtonModule,\n IconModule,\n LinkModule,\n MenuModule,\n MultiSelectModule,\n TableModule,\n TabsModule,\n RadioButtonModule,\n ToggleGroupModule,\n} from \"@bitwarden/components\";\n\n// Register the locales for the application\nimport \"./locales\";\n\n/**\n * This NgModule should contain the most basic shared directives, pipes, and components. They\n * should be widely used by other modules to be considered for adding to this module. If in doubt\n * do not add to this module.\n *\n * See: https://angular.io/guide/module-types#shared-ngmodules\n */\n@NgModule({\n imports: [\n CommonModule,\n DragDropModule,\n FormsModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n RouterModule,\n ToastrModule,\n JslibModule,\n\n // Component library modules\n // Only add components that are used almost everywhere in the application\n AsyncActionsModule,\n AvatarModule,\n BadgeListModule,\n BadgeModule,\n ButtonModule,\n CalloutModule,\n CheckboxModule,\n ColorPasswordModule,\n DialogModule,\n FormFieldModule,\n IconButtonModule,\n IconModule,\n LinkModule,\n MenuModule,\n MultiSelectModule,\n TableModule,\n TabsModule,\n RadioButtonModule,\n ToggleGroupModule,\n\n // Web specific\n ],\n exports: [\n CommonModule,\n DragDropModule,\n FormsModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n RouterModule,\n ToastrModule,\n JslibModule,\n\n // Component library\n AsyncActionsModule,\n AvatarModule,\n BadgeListModule,\n BadgeModule,\n ButtonModule,\n CalloutModule,\n CheckboxModule,\n ColorPasswordModule,\n DialogModule,\n FormFieldModule,\n IconButtonModule,\n IconModule,\n LinkModule,\n MenuModule,\n MultiSelectModule,\n TableModule,\n TabsModule,\n RadioButtonModule,\n ToggleGroupModule,\n\n // Web specific\n ],\n providers: [DatePipe],\n bootstrap: [],\n})\nexport class SharedModule {}\n","import {\n flagEnabled as baseFlagEnabled,\n devFlagEnabled as baseDevFlagEnabled,\n devFlagValue as baseDevFlagValue,\n SharedFlags,\n SharedDevFlags,\n} from \"@bitwarden/common/misc/flags\";\n\n// required to avoid linting errors when there are no flags\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport type Flags = {\n secretsManager?: boolean;\n showPasswordless?: boolean;\n} & SharedFlags;\n\n// required to avoid linting errors when there are no flags\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport type DevFlags = {} & SharedDevFlags;\n\nexport function flagEnabled(flag: keyof Flags): boolean {\n return baseFlagEnabled(flag);\n}\n\nexport function devFlagEnabled(flag: keyof DevFlags) {\n return baseDevFlagEnabled(flag);\n}\n\nexport function devFlagValue(flag: keyof DevFlags) {\n return baseDevFlagValue(flag);\n}\n","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 { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport { Directive, Input, OnChanges, SimpleChanges } from \"@angular/core\";\n\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { EventType } from \"@bitwarden/common/enums/eventType\";\nimport { FieldType } from \"@bitwarden/common/enums/fieldType\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { FieldView } from \"@bitwarden/common/vault/models/view/field.view\";\n\n@Directive()\nexport class AddEditCustomFieldsComponent implements OnChanges {\n @Input() cipher: CipherView;\n @Input() thisCipherType: CipherType;\n @Input() editMode: boolean;\n\n addFieldType: FieldType = FieldType.Text;\n addFieldTypeOptions: any[];\n addFieldLinkedTypeOption: any;\n linkedFieldOptions: any[] = [];\n\n cipherType = CipherType;\n fieldType = FieldType;\n eventType = EventType;\n\n constructor(\n private i18nService: I18nService,\n private eventCollectionService: EventCollectionService\n ) {\n this.addFieldTypeOptions = [\n { name: i18nService.t(\"cfTypeText\"), value: FieldType.Text },\n { name: i18nService.t(\"cfTypeHidden\"), value: FieldType.Hidden },\n { name: i18nService.t(\"cfTypeBoolean\"), value: FieldType.Boolean },\n ];\n this.addFieldLinkedTypeOption = {\n name: this.i18nService.t(\"cfTypeLinked\"),\n value: FieldType.Linked,\n };\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.thisCipherType != null) {\n this.setLinkedFieldOptions();\n\n if (!changes.thisCipherType.firstChange) {\n this.resetCipherLinkedFields();\n }\n }\n }\n\n addField() {\n if (this.cipher.fields == null) {\n this.cipher.fields = [];\n }\n\n const f = new FieldView();\n f.type = this.addFieldType;\n f.newField = true;\n\n if (f.type === FieldType.Linked) {\n f.linkedId = this.linkedFieldOptions[0].value;\n }\n\n this.cipher.fields.push(f);\n }\n\n removeField(field: FieldView) {\n const i = this.cipher.fields.indexOf(field);\n if (i > -1) {\n this.cipher.fields.splice(i, 1);\n }\n }\n\n toggleFieldValue(field: FieldView) {\n const f = field as any;\n f.showValue = !f.showValue;\n if (this.editMode && f.showValue) {\n this.eventCollectionService.collect(\n EventType.Cipher_ClientToggledHiddenFieldVisible,\n this.cipher.id\n );\n }\n }\n\n trackByFunction(index: number, item: any) {\n return index;\n }\n\n drop(event: CdkDragDrop) {\n moveItemInArray(this.cipher.fields, event.previousIndex, event.currentIndex);\n }\n\n private setLinkedFieldOptions() {\n if (this.cipher.linkedFieldOptions == null) {\n return;\n }\n\n const options: any = [];\n this.cipher.linkedFieldOptions.forEach((linkedFieldOption, id) =>\n options.push({ name: this.i18nService.t(linkedFieldOption.i18nKey), value: id })\n );\n this.linkedFieldOptions = options.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n\n private resetCipherLinkedFields() {\n if (this.cipher.fields == null || this.cipher.fields.length === 0) {\n return;\n }\n\n // Delete any Linked custom fields if the item type does not support them\n if (this.cipher.linkedFieldOptions == null) {\n this.cipher.fields = this.cipher.fields.filter((f) => f.type !== FieldType.Linked);\n return;\n }\n\n this.cipher.fields\n .filter((f) => f.type === FieldType.Linked)\n .forEach((f) => (f.linkedId = this.linkedFieldOptions[0].value));\n }\n}\n","import { Directive, ElementRef, forwardRef, HostListener, Input, Renderer2 } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n// ref: https://juristr.com/blog/2018/02/ng-true-value-directive/\n@Directive({\n selector: \"input[type=checkbox][appTrueFalseValue]\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TrueFalseValueDirective),\n multi: true,\n },\n ],\n})\nexport class TrueFalseValueDirective implements ControlValueAccessor {\n @Input() trueValue: boolean | string = true;\n @Input() falseValue: boolean | string = false;\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {}\n\n @HostListener(\"change\", [\"$event\"])\n onHostChange(ev: any) {\n this.propagateChange(ev.target.checked ? this.trueValue : this.falseValue);\n }\n\n writeValue(obj: any): void {\n if (obj === this.trueValue) {\n this.renderer.setProperty(this.elementRef.nativeElement, \"checked\", true);\n } else {\n this.renderer.setProperty(this.elementRef.nativeElement, \"checked\", false);\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n /* nothing */\n }\n\n setDisabledState?(isDisabled: boolean): void {\n /* nothing */\n }\n\n private propagateChange = (_: any) => {\n /* nothing */\n };\n}\n","\n

    {{ \"customFields\" | i18n }}

    \n
    \n \n
    \n
    \n \n \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n \n
    \n \n \n \n
    \n
    \n \n
    \n \n
    \n \n \n \n \n \n \n \n
    \n
    \n \n
    \n \n \n \n
    \n
    \n \n \n
    \n \n \n \n \n \n \n
    \n
    \n
    \n \n \n \n {{ \"newCustomField\" | i18n }}\n \n
    \n
    \n \n \n
    \n
    \n
    \n","import { Component, Input } from \"@angular/core\";\n\nimport { AddEditCustomFieldsComponent as BaseAddEditCustomFieldsComponent } from \"@bitwarden/angular/vault/components/add-edit-custom-fields.component\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\n@Component({\n selector: \"app-vault-add-edit-custom-fields\",\n templateUrl: \"add-edit-custom-fields.component.html\",\n})\nexport class AddEditCustomFieldsComponent extends BaseAddEditCustomFieldsComponent {\n @Input() viewOnly: boolean;\n @Input() copy: (value: string, typeI18nKey: string, aType: string) => void;\n\n constructor(i18nService: I18nService, eventCollectionService: EventCollectionService) {\n super(i18nService, eventCollectionService);\n }\n}\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { Observable, Subject, takeUntil, concatMap } from \"rxjs\";\n\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport {\n isNotProviderUser,\n OrganizationService,\n} 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 { StateService } from \"@bitwarden/common/abstractions/state.service\";\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 { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { CollectionView } from \"@bitwarden/common/models/view/collection.view\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/vault/enums/cipher-reprompt-type\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\nimport { CardView } from \"@bitwarden/common/vault/models/view/card.view\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { FolderView } from \"@bitwarden/common/vault/models/view/folder.view\";\nimport { IdentityView } from \"@bitwarden/common/vault/models/view/identity.view\";\nimport { LoginUriView } from \"@bitwarden/common/vault/models/view/login-uri.view\";\nimport { LoginView } from \"@bitwarden/common/vault/models/view/login.view\";\nimport { SecureNoteView } from \"@bitwarden/common/vault/models/view/secure-note.view\";\n\n@Directive()\nexport class AddEditComponent implements OnInit, OnDestroy {\n @Input() cloneMode = false;\n @Input() folderId: string = null;\n @Input() cipherId: string;\n @Input() type: CipherType;\n @Input() collectionIds: string[];\n @Input() organizationId: string = null;\n @Output() onSavedCipher = new EventEmitter();\n @Output() onDeletedCipher = new EventEmitter();\n @Output() onRestoredCipher = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n @Output() onEditAttachments = new EventEmitter();\n @Output() onShareCipher = new EventEmitter();\n @Output() onEditCollections = new EventEmitter();\n @Output() onGeneratePassword = new EventEmitter();\n @Output() onGenerateUsername = new EventEmitter();\n\n editMode = false;\n cipher: CipherView;\n folders$: Observable;\n collections: CollectionView[] = [];\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n restorePromise: Promise;\n checkPasswordPromise: Promise;\n showPassword = false;\n showCardNumber = false;\n showCardCode = false;\n cipherType = CipherType;\n typeOptions: any[];\n cardBrandOptions: any[];\n cardExpMonthOptions: any[];\n identityTitleOptions: any[];\n uriMatchOptions: any[];\n ownershipOptions: any[] = [];\n autofillOnPageLoadOptions: any[];\n currentDate = new Date();\n allowPersonal = true;\n reprompt = false;\n canUseReprompt = true;\n organization: Organization;\n\n protected componentName = \"\";\n protected destroy$ = new Subject();\n protected writeableCollections: CollectionView[];\n private personalOwnershipPolicyAppliesToActiveUser: boolean;\n private previousCipherId: string;\n\n constructor(\n protected cipherService: CipherService,\n protected folderService: FolderService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected auditService: AuditService,\n protected stateService: StateService,\n protected collectionService: CollectionService,\n protected messagingService: MessagingService,\n protected eventCollectionService: EventCollectionService,\n protected policyService: PolicyService,\n private logService: LogService,\n protected passwordRepromptService: PasswordRepromptService,\n private organizationService: OrganizationService\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"typeLogin\"), value: CipherType.Login },\n { name: i18nService.t(\"typeCard\"), value: CipherType.Card },\n { name: i18nService.t(\"typeIdentity\"), value: CipherType.Identity },\n { name: i18nService.t(\"typeSecureNote\"), value: CipherType.SecureNote },\n ];\n this.cardBrandOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: \"Visa\", value: \"Visa\" },\n { name: \"Mastercard\", value: \"Mastercard\" },\n { name: \"American Express\", value: \"Amex\" },\n { name: \"Discover\", value: \"Discover\" },\n { name: \"Diners Club\", value: \"Diners Club\" },\n { name: \"JCB\", value: \"JCB\" },\n { name: \"Maestro\", value: \"Maestro\" },\n { name: \"UnionPay\", value: \"UnionPay\" },\n { name: \"RuPay\", value: \"RuPay\" },\n { name: i18nService.t(\"cardBrandMir\"), value: \"Mir\" },\n { name: i18nService.t(\"other\"), value: \"Other\" },\n ];\n this.cardExpMonthOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: \"01 - \" + i18nService.t(\"january\"), value: \"1\" },\n { name: \"02 - \" + i18nService.t(\"february\"), value: \"2\" },\n { name: \"03 - \" + i18nService.t(\"march\"), value: \"3\" },\n { name: \"04 - \" + i18nService.t(\"april\"), value: \"4\" },\n { name: \"05 - \" + i18nService.t(\"may\"), value: \"5\" },\n { name: \"06 - \" + i18nService.t(\"june\"), value: \"6\" },\n { name: \"07 - \" + i18nService.t(\"july\"), value: \"7\" },\n { name: \"08 - \" + i18nService.t(\"august\"), value: \"8\" },\n { name: \"09 - \" + i18nService.t(\"september\"), value: \"9\" },\n { name: \"10 - \" + i18nService.t(\"october\"), value: \"10\" },\n { name: \"11 - \" + i18nService.t(\"november\"), value: \"11\" },\n { name: \"12 - \" + i18nService.t(\"december\"), value: \"12\" },\n ];\n this.identityTitleOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: i18nService.t(\"mr\"), value: i18nService.t(\"mr\") },\n { name: i18nService.t(\"mrs\"), value: i18nService.t(\"mrs\") },\n { name: i18nService.t(\"ms\"), value: i18nService.t(\"ms\") },\n { name: i18nService.t(\"mx\"), value: i18nService.t(\"mx\") },\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.writeableCollections = await this.loadCollections();\n this.canUseReprompt = await this.passwordRepromptService.enabled();\n\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\n .filter(isNotProviderUser)\n .sort(Utils.getSortFunction(this.i18nService, \"name\"))\n .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\n async load() {\n this.editMode = this.cipherId != null;\n if (this.editMode) {\n this.editMode = true;\n if (this.cloneMode) {\n this.cloneMode = true;\n this.title = this.i18nService.t(\"addItem\");\n } else {\n this.title = this.i18nService.t(\"editItem\");\n }\n } else {\n this.title = this.i18nService.t(\"addItem\");\n }\n\n const addEditCipherInfo: any = await this.stateService.getAddEditCipherInfo();\n if (addEditCipherInfo != null) {\n this.cipher = addEditCipherInfo.cipher;\n this.collectionIds = addEditCipherInfo.collectionIds;\n }\n await this.stateService.setAddEditCipherInfo(null);\n\n if (this.cipher == null) {\n if (this.editMode) {\n const cipher = await this.loadCipher();\n this.cipher = await cipher.decrypt();\n\n // Adjust Cipher Name if Cloning\n if (this.cloneMode) {\n this.cipher.name += \" - \" + this.i18nService.t(\"clone\");\n // If not allowing personal ownership, update cipher's org Id to prompt downstream changes\n if (this.cipher.organizationId == null && !this.allowPersonal) {\n this.cipher.organizationId = this.organizationId;\n }\n }\n } else {\n this.cipher = new CipherView();\n this.cipher.organizationId = this.organizationId == null ? null : this.organizationId;\n this.cipher.folderId = this.folderId;\n this.cipher.type = this.type == null ? CipherType.Login : this.type;\n this.cipher.login = new LoginView();\n this.cipher.login.uris = [new LoginUriView()];\n this.cipher.card = new CardView();\n this.cipher.identity = new IdentityView();\n this.cipher.secureNote = new SecureNoteView();\n this.cipher.secureNote.type = SecureNoteType.Generic;\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n if (this.cipher != null && (!this.editMode || addEditCipherInfo != null || this.cloneMode)) {\n await this.organizationChanged();\n if (\n this.collectionIds != null &&\n this.collectionIds.length > 0 &&\n this.collections.length > 0\n ) {\n this.collections.forEach((c) => {\n if (this.collectionIds.indexOf(c.id) > -1) {\n (c as any).checked = true;\n }\n });\n }\n }\n\n this.folders$ = this.folderService.folderViews$;\n\n if (this.editMode && this.previousCipherId !== this.cipherId) {\n this.eventCollectionService.collect(EventType.Cipher_ClientViewed, this.cipherId);\n }\n this.previousCipherId = this.cipherId;\n this.reprompt = this.cipher.reprompt !== CipherRepromptType.None;\n }\n\n async submit(): Promise {\n if (this.cipher.isDeleted) {\n return this.restore();\n }\n\n if (this.cipher.name == null || this.cipher.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n if (\n (!this.editMode || this.cloneMode) &&\n !this.allowPersonal &&\n this.cipher.organizationId == null\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"personalOwnershipSubmitError\")\n );\n return false;\n }\n\n if (\n (!this.editMode || this.cloneMode) &&\n this.cipher.type === CipherType.Login &&\n this.cipher.login.uris != null &&\n this.cipher.login.uris.length === 1 &&\n (this.cipher.login.uris[0].uri == null || this.cipher.login.uris[0].uri === \"\")\n ) {\n this.cipher.login.uris = null;\n }\n\n // Allows saving of selected collections during \"Add\" and \"Clone\" flows\n if ((!this.editMode || this.cloneMode) && this.cipher.organizationId != null) {\n this.cipher.collectionIds =\n this.collections == null\n ? []\n : this.collections.filter((c) => (c as any).checked).map((c) => c.id);\n }\n\n // Clear current Cipher Id to trigger \"Add\" cipher flow\n if (this.cloneMode) {\n this.cipher.id = null;\n }\n\n const cipher = await this.encryptCipher();\n try {\n this.formPromise = this.saveCipher(cipher);\n await this.formPromise;\n this.cipher.id = cipher.id;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode && !this.cloneMode ? \"editedItem\" : \"addedItem\")\n );\n this.onSavedCipher.emit(this.cipher);\n this.messagingService.send(this.editMode && !this.cloneMode ? \"editedCipher\" : \"addedCipher\");\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n addUri() {\n if (this.cipher.type !== CipherType.Login) {\n return;\n }\n\n if (this.cipher.login.uris == null) {\n this.cipher.login.uris = [];\n }\n\n this.cipher.login.uris.push(new LoginUriView());\n }\n\n removeUri(uri: LoginUriView) {\n if (this.cipher.type !== CipherType.Login || this.cipher.login.uris == null) {\n return;\n }\n\n const i = this.cipher.login.uris.indexOf(uri);\n if (i > -1) {\n this.cipher.login.uris.splice(i, 1);\n }\n }\n\n getCardExpMonthDisplay() {\n return this.cardExpMonthOptions.find((x) => x.value == this.cipher.card.expMonth)?.name;\n }\n\n trackByFunction(index: number, item: any) {\n return index;\n }\n\n cancel() {\n this.onCancelled.emit(this.cipher);\n }\n\n attachments() {\n this.onEditAttachments.emit(this.cipher);\n }\n\n share() {\n this.onShareCipher.emit(this.cipher);\n }\n\n editCollections() {\n this.onEditCollections.emit(this.cipher);\n }\n\n async delete(): Promise {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\n this.cipher.isDeleted ? \"permanentlyDeleteItemConfirmation\" : \"deleteItemConfirmation\"\n ),\n this.i18nService.t(\"deleteItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\",\n false,\n this.componentName != \"\" ? this.componentName + \" .modal-content\" : null\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.deleteCipher();\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.cipher.isDeleted ? \"permanentlyDeletedItem\" : \"deletedItem\")\n );\n this.onDeletedCipher.emit(this.cipher);\n this.messagingService.send(\n this.cipher.isDeleted ? \"permanentlyDeletedCipher\" : \"deletedCipher\"\n );\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n async restore(): Promise {\n if (!this.cipher.isDeleted) {\n return false;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"restoreItemConfirmation\"),\n this.i18nService.t(\"restoreItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.restorePromise = this.restoreCipher();\n await this.restorePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItem\"));\n this.onRestoredCipher.emit(this.cipher);\n this.messagingService.send(\"restoredCipher\");\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n async generateUsername(): Promise {\n if (this.cipher.login?.username?.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"overwriteUsernameConfirmation\"),\n this.i18nService.t(\"overwriteUsername\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\")\n );\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGenerateUsername.emit();\n return true;\n }\n\n async generatePassword(): Promise {\n if (this.cipher.login?.password?.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"overwritePasswordConfirmation\"),\n this.i18nService.t(\"overwritePassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\")\n );\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGeneratePassword.emit();\n return true;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"loginPassword\").focus();\n if (this.editMode && this.showPassword) {\n this.eventCollectionService.collect(\n EventType.Cipher_ClientToggledPasswordVisible,\n this.cipherId\n );\n }\n }\n\n async toggleCardNumber() {\n this.showCardNumber = !this.showCardNumber;\n if (this.showCardNumber) {\n this.eventCollectionService.collect(\n EventType.Cipher_ClientToggledCardNumberVisible,\n this.cipherId\n );\n }\n }\n\n toggleCardCode() {\n this.showCardCode = !this.showCardCode;\n document.getElementById(\"cardCode\").focus();\n if (this.editMode && this.showCardCode) {\n this.eventCollectionService.collect(\n EventType.Cipher_ClientToggledCardCodeVisible,\n this.cipherId\n );\n }\n }\n\n toggleUriOptions(uri: LoginUriView) {\n const u = uri as any;\n u.showOptions = u.showOptions == null && uri.match != null ? false : !u.showOptions;\n }\n\n loginUriMatchChanged(uri: LoginUriView) {\n const u = uri as any;\n u.showOptions = u.showOptions == null ? true : u.showOptions;\n }\n\n async organizationChanged() {\n if (this.writeableCollections != null) {\n this.writeableCollections.forEach((c) => ((c as any).checked = false));\n }\n if (this.cipher.organizationId != null) {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.cipher.organizationId\n );\n const org = await this.organizationService.get(this.cipher.organizationId);\n if (org != null) {\n this.cipher.organizationUseTotp = org.useTotp;\n }\n } else {\n this.collections = [];\n }\n }\n\n async checkPassword() {\n if (this.checkPasswordPromise != null) {\n return;\n }\n\n if (\n this.cipher.login == null ||\n this.cipher.login.password == null ||\n this.cipher.login.password === \"\"\n ) {\n return;\n }\n\n this.checkPasswordPromise = this.auditService.passwordLeaked(this.cipher.login.password);\n const matches = await this.checkPasswordPromise;\n this.checkPasswordPromise = null;\n\n if (matches > 0) {\n this.platformUtilsService.showToast(\n \"warning\",\n null,\n this.i18nService.t(\"passwordExposed\", matches.toString())\n );\n } else {\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"passwordSafe\"));\n }\n }\n\n repromptChanged() {\n this.reprompt = !this.reprompt;\n if (this.reprompt) {\n this.cipher.reprompt = CipherRepromptType.Password;\n } else {\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter((c) => !c.readOnly);\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected encryptCipher() {\n return this.cipherService.encrypt(this.cipher);\n }\n\n protected saveCipher(cipher: Cipher) {\n return this.cipher.id == null\n ? this.cipherService.createWithServer(cipher)\n : this.cipherService.updateWithServer(cipher);\n }\n\n protected deleteCipher() {\n return this.cipher.isDeleted\n ? this.cipherService.deleteWithServer(this.cipher.id)\n : this.cipherService.softDeleteWithServer(this.cipher.id);\n }\n\n protected restoreCipher() {\n return this.cipherService.restoreWithServer(this.cipher.id);\n }\n}\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"@bitwarden/angular/vault/components/add-edit.component\";\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { 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 { 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 { EventType } from \"@bitwarden/common/enums/eventType\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { LoginUriView } from \"@bitwarden/common/vault/models/view/login-uri.view\";\n\n@Component({\n selector: \"app-vault-add-edit\",\n templateUrl: \"add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent implements OnInit, OnDestroy {\n canAccessPremium: boolean;\n totpCode: string;\n totpCodeFormatted: string;\n totpDash: number;\n totpSec: number;\n totpLow: boolean;\n showRevisionDate = false;\n hasPasswordHistory = false;\n viewingPasswordHistory = false;\n viewOnly = false;\n showPasswordCount = false;\n\n protected totpInterval: number;\n protected override componentName = \"app-vault-add-edit\";\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n protected totpService: TotpService,\n protected passwordGenerationService: PasswordGenerationService,\n protected messagingService: MessagingService,\n eventCollectionService: EventCollectionService,\n protected policyService: PolicyService,\n organizationService: OrganizationService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n messagingService,\n eventCollectionService,\n policyService,\n logService,\n passwordRepromptService,\n organizationService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n // remove when all the title for all clients are updated to New Item\n if (this.cloneMode || !this.editMode) {\n this.title = this.i18nService.t(\"newItem\");\n }\n this.showRevisionDate = this.cipher.passwordRevisionDisplayDate != null;\n this.hasPasswordHistory = this.cipher.hasPasswordHistory;\n this.cleanUp();\n\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n if (\n this.cipher.type === CipherType.Login &&\n this.cipher.login.totp &&\n (this.cipher.organizationUseTotp || this.canAccessPremium)\n ) {\n await this.totpUpdateCode();\n const interval = this.totpService.getTimeInterval(this.cipher.login.totp);\n await this.totpTick(interval);\n\n this.totpInterval = window.setInterval(async () => {\n await this.totpTick(interval);\n }, 1000);\n }\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n\n toggleFavorite() {\n this.cipher.favorite = !this.cipher.favorite;\n }\n\n togglePassword() {\n super.togglePassword();\n\n // Hide password count when password is hidden to be safe\n if (!this.showPassword && this.showPasswordCount) {\n this.togglePasswordCount();\n }\n }\n\n togglePasswordCount() {\n this.showPasswordCount = !this.showPasswordCount;\n\n if (this.editMode && this.showPasswordCount) {\n this.eventCollectionService.collect(\n EventType.Cipher_ClientToggledPasswordVisible,\n this.cipherId\n );\n }\n }\n\n launch(uri: LoginUriView) {\n if (!uri.canLaunch) {\n return;\n }\n\n this.platformUtilsService.launchUri(uri.launchUri);\n }\n\n copy(value: string, typeI18nKey: string, aType: string) {\n if (value == null) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(typeI18nKey))\n );\n\n if (this.editMode) {\n if (typeI18nKey === \"password\") {\n this.eventCollectionService.collect(\n EventType.Cipher_ClientToggledHiddenFieldVisible,\n this.cipherId\n );\n } else if (typeI18nKey === \"securityCode\") {\n this.eventCollectionService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId);\n } else if (aType === \"H_Field\") {\n this.eventCollectionService.collect(\n EventType.Cipher_ClientCopiedHiddenField,\n this.cipherId\n );\n }\n }\n }\n\n async generatePassword(): Promise {\n const confirmed = await super.generatePassword();\n if (confirmed) {\n const options = (await this.passwordGenerationService.getOptions())?.[0] ?? {};\n this.cipher.login.password = await this.passwordGenerationService.generatePassword(options);\n }\n return confirmed;\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n\n upgradeOrganization() {\n this.messagingService.send(\"upgradeOrganization\", {\n organizationId: this.cipher.organizationId,\n });\n }\n\n showGetPremium() {\n if (this.canAccessPremium) {\n return;\n }\n if (this.cipher.organizationUseTotp) {\n this.upgradeOrganization();\n } else {\n this.premiumRequired();\n }\n }\n\n viewHistory() {\n this.viewingPasswordHistory = !this.viewingPasswordHistory;\n }\n\n protected cleanUp() {\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n }\n\n protected async totpUpdateCode() {\n if (\n this.cipher == null ||\n this.cipher.type !== CipherType.Login ||\n this.cipher.login.totp == null\n ) {\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n return;\n }\n\n this.totpCode = await this.totpService.getCode(this.cipher.login.totp);\n if (this.totpCode != null) {\n if (this.totpCode.length > 4) {\n const half = Math.floor(this.totpCode.length / 2);\n this.totpCodeFormatted =\n this.totpCode.substring(0, half) + \" \" + this.totpCode.substring(half);\n } else {\n this.totpCodeFormatted = this.totpCode;\n }\n } else {\n this.totpCodeFormatted = null;\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n }\n }\n\n protected allowOwnershipAssignment() {\n return (\n (!this.editMode || this.cloneMode) &&\n this.ownershipOptions != null &&\n (this.ownershipOptions.length > 1 || !this.allowPersonal)\n );\n }\n\n private async totpTick(intervalSeconds: number) {\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const mod = epoch % intervalSeconds;\n\n this.totpSec = intervalSeconds - mod;\n this.totpDash = +(Math.round(((78.6 / intervalSeconds) * mod + \"e+2\") as any) + \"e-2\");\n this.totpLow = this.totpSec <= 7;\n if (mod === 0) {\n await this.totpUpdateCode();\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../../app/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 { Observable } from \"rxjs\";\n\nimport { Organization } from \"@bitwarden/common/src/models/domain/organization\";\nimport { TreeNode } from \"@bitwarden/common/src/models/domain/tree-node\";\nimport { CollectionView } from \"@bitwarden/common/src/models/view/collection.view\";\nimport { FolderView } from \"@bitwarden/common/src/vault/models/view/folder.view\";\n\nimport {\n CipherTypeFilter,\n CollectionFilter,\n FolderFilter,\n OrganizationFilter,\n} from \"../../shared/models/vault-filter.type\";\n\nexport abstract class VaultFilterService {\n collapsedFilterNodes$: Observable>;\n filteredFolders$: Observable;\n filteredCollections$: Observable;\n organizationTree$: Observable>;\n folderTree$: Observable>;\n collectionTree$: Observable>;\n reloadCollections: () => Promise;\n getCollectionNodeFromTree: (id: string) => Promise>;\n setCollapsedFilterNodes: (collapsedFilterNodes: Set) => Promise;\n expandOrgFilter: () => Promise;\n setOrganizationFilter: (organization: Organization) => void;\n buildTypeTree: (\n head: CipherTypeFilter,\n array: CipherTypeFilter[]\n ) => Observable>;\n}\n","import { Injectable } from \"@angular/core\";\nimport {\n BehaviorSubject,\n combineLatestWith,\n firstValueFrom,\n map,\n Observable,\n of,\n ReplaySubject,\n switchMap,\n} from \"rxjs\";\n\nimport { CollectionService } from \"@bitwarden/common/abstractions/collection.service\";\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 { 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 { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { FolderView } from \"@bitwarden/common/vault/models/view/folder.view\";\n\nimport { CollectionAdminView } from \"../../../../../app/organizations/core\";\nimport {\n CipherTypeFilter,\n CollectionFilter,\n FolderFilter,\n OrganizationFilter,\n} from \"../shared/models/vault-filter.type\";\n\nimport { VaultFilterService as VaultFilterServiceAbstraction } from \"./abstractions/vault-filter.service\";\n\nconst NestingDelimiter = \"/\";\n\n@Injectable()\nexport class VaultFilterService implements VaultFilterServiceAbstraction {\n protected _collapsedFilterNodes = new BehaviorSubject>(null);\n collapsedFilterNodes$: Observable> = this._collapsedFilterNodes.pipe(\n switchMap(async (nodes) => nodes ?? (await this.getCollapsedFilterNodes()))\n );\n\n organizationTree$: Observable> =\n this.organizationService.organizations$.pipe(\n switchMap((orgs) => this.buildOrganizationTree(orgs))\n );\n\n protected _organizationFilter = new BehaviorSubject(null);\n\n filteredFolders$: Observable = this.folderService.folderViews$.pipe(\n combineLatestWith(this._organizationFilter),\n switchMap(([folders, org]) => {\n return this.filterFolders(folders, org);\n })\n );\n folderTree$: Observable> = this.filteredFolders$.pipe(\n map((folders) => this.buildFolderTree(folders))\n );\n\n // TODO: Remove once collections is refactored with observables\n // replace with collection service observable\n private collectionViews$ = new ReplaySubject(1);\n filteredCollections$: Observable = this.collectionViews$.pipe(\n combineLatestWith(this._organizationFilter),\n switchMap(([collections, org]) => {\n return this.filterCollections(collections, org);\n })\n );\n collectionTree$: Observable> = this.filteredCollections$.pipe(\n map((collections) => this.buildCollectionTree(collections))\n );\n\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 protected i18nService: I18nService\n ) {}\n\n // TODO: Remove once collections is refactored with observables\n async reloadCollections() {\n this.collectionViews$.next(await this.collectionService.getAllDecrypted());\n }\n\n async getCollectionNodeFromTree(id: string) {\n const collections = await firstValueFrom(this.collectionTree$);\n return ServiceUtils.getTreeNodeObject(collections, id) as TreeNode;\n }\n\n async setCollapsedFilterNodes(collapsedFilterNodes: Set): Promise {\n await this.stateService.setCollapsedGroupings(Array.from(collapsedFilterNodes));\n this._collapsedFilterNodes.next(collapsedFilterNodes);\n }\n\n protected async getCollapsedFilterNodes(): Promise> {\n const nodes = new Set(await this.stateService.getCollapsedGroupings());\n return nodes;\n }\n\n setOrganizationFilter(organization: Organization) {\n if (organization?.id != \"AllVaults\") {\n this._organizationFilter.next(organization);\n } else {\n this._organizationFilter.next(null);\n }\n }\n\n async expandOrgFilter() {\n const collapsedFilterNodes = await firstValueFrom(this.collapsedFilterNodes$);\n if (!collapsedFilterNodes.has(\"AllVaults\")) {\n return;\n }\n collapsedFilterNodes.delete(\"AllVaults\");\n await this.setCollapsedFilterNodes(collapsedFilterNodes);\n }\n\n protected async buildOrganizationTree(\n orgs?: Organization[]\n ): Promise> {\n const headNode = this.getOrganizationFilterHead();\n if (!(await this.policyService.policyAppliesToUser(PolicyType.PersonalOwnership))) {\n const myVaultNode = this.getOrganizationFilterMyVault();\n headNode.children.push(myVaultNode);\n }\n if (await this.policyService.policyAppliesToUser(PolicyType.SingleOrg)) {\n orgs = orgs.slice(0, 1);\n }\n if (orgs) {\n orgs.forEach((org) => {\n const orgCopy = org as OrganizationFilter;\n orgCopy.icon = \"bwi-business\";\n const node = new TreeNode(orgCopy, headNode, orgCopy.name);\n headNode.children.push(node);\n });\n }\n return headNode;\n }\n\n protected getOrganizationFilterHead(): TreeNode {\n const head = new Organization() as OrganizationFilter;\n head.enabled = true;\n return new TreeNode(head, null, \"allVaults\", \"AllVaults\");\n }\n\n protected getOrganizationFilterMyVault(): TreeNode {\n const myVault = new Organization() as OrganizationFilter;\n myVault.id = \"MyVault\";\n myVault.icon = \"bwi-user\";\n myVault.enabled = true;\n myVault.hideOptions = true;\n return new TreeNode(myVault, null, this.i18nService.t(\"myVault\"));\n }\n\n buildTypeTree(\n head: CipherTypeFilter,\n array?: CipherTypeFilter[]\n ): Observable> {\n const headNode = new TreeNode(head, null);\n array?.forEach((filter) => {\n const node = new TreeNode(filter, headNode, filter.name);\n headNode.children.push(node);\n });\n return of(headNode);\n }\n\n protected async filterCollections(\n storedCollections: CollectionView[],\n org?: Organization\n ): Promise {\n return org?.id != null\n ? storedCollections.filter((c) => c.organizationId === org.id)\n : storedCollections;\n }\n\n protected buildCollectionTree(collections?: CollectionView[]): TreeNode {\n const headNode = this.getCollectionFilterHead();\n if (!collections) {\n return headNode;\n }\n const nodes: TreeNode[] = [];\n collections\n .sort((a, b) => this.i18nService.collator.compare(a.name, b.name))\n .forEach((c) => {\n const collectionCopy = new CollectionView() as CollectionFilter;\n collectionCopy.id = c.id;\n collectionCopy.organizationId = c.organizationId;\n collectionCopy.icon = \"bwi-collection\";\n if (c instanceof CollectionAdminView) {\n collectionCopy.groups = c.groups;\n collectionCopy.assigned = c.assigned;\n }\n const parts =\n c.name != null ? c.name.replace(/^\\/+|\\/+$/g, \"\").split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, collectionCopy, null, NestingDelimiter);\n });\n nodes.forEach((n) => {\n n.parent = headNode;\n headNode.children.push(n);\n });\n return headNode;\n }\n\n protected getCollectionFilterHead(): TreeNode {\n const head = new CollectionView() as CollectionFilter;\n return new TreeNode(head, null, \"collections\", \"AllCollections\");\n }\n\n protected async filterFolders(\n storedFolders: FolderView[],\n org?: Organization\n ): Promise {\n if (org?.id == null) {\n return storedFolders;\n }\n const ciphers = await this.cipherService.getAllDecrypted();\n const orgCiphers = ciphers.filter((c) => c.organizationId == org?.id);\n return 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 }\n\n protected buildFolderTree(folders?: FolderView[]): TreeNode {\n const headNode = this.getFolderFilterHead();\n if (!folders) {\n return headNode;\n }\n const nodes: TreeNode[] = [];\n folders.forEach((f) => {\n const folderCopy = new FolderView() as FolderFilter;\n folderCopy.id = f.id;\n folderCopy.revisionDate = f.revisionDate;\n folderCopy.icon = \"bwi-folder\";\n const parts = f.name != null ? f.name.replace(/^\\/+|\\/+$/g, \"\").split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, folderCopy, null, NestingDelimiter);\n });\n\n nodes.forEach((n) => {\n n.parent = headNode;\n headNode.children.push(n);\n });\n return headNode;\n }\n\n protected getFolderFilterHead(): TreeNode {\n const head = new FolderView() as FolderFilter;\n return new TreeNode(head, null, \"folders\", \"AllFolders\");\n }\n}\n","import { NgModule } from \"@angular/core\";\n\n// TODO refine elsint rule for **/app/shared/*\n// eslint-disable-next-line no-restricted-imports\nimport { SharedModule } from \"../../../../../app/shared\";\n\nimport { VaultFilterSectionComponent } from \"./components/vault-filter-section.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [VaultFilterSectionComponent],\n exports: [SharedModule, VaultFilterSectionComponent],\n})\nexport class VaultFilterSharedModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { VaultFilterSharedModule } from \"../../vault/vault-filter/shared/vault-filter-shared.module\";\n\nimport { LinkSsoComponent } from \"./components/link-sso.component\";\nimport { OrganizationOptionsComponent } from \"./components/organization-options.component\";\nimport { VaultFilterComponent } from \"./components/vault-filter.component\";\nimport { VaultFilterService as VaultFilterServiceAbstraction } from \"./services/abstractions/vault-filter.service\";\nimport { VaultFilterService } from \"./services/vault-filter.service\";\n\n@NgModule({\n imports: [VaultFilterSharedModule],\n declarations: [VaultFilterComponent, OrganizationOptionsComponent, LinkSsoComponent],\n exports: [VaultFilterComponent],\n providers: [\n {\n provide: VaultFilterServiceAbstraction,\n useClass: VaultFilterService,\n },\n ],\n})\nexport class VaultFilterModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { CheckboxModule } from \"@bitwarden/components\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { LoginWithDeviceComponent } from \"./login-with-device.component\";\nimport { LoginComponent } from \"./login.component\";\n\n@NgModule({\n imports: [SharedModule, CheckboxModule],\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 { OrganizationBadgeModule } from \"../vault/app/vault/organization-badge/organization-badge.module\";\nimport { VaultFilterModule } from \"../vault/app/vault/vault-filter/vault-filter.module\";\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\";\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 { ProviderAddOrganizationRequest } from \"@bitwarden/common/models/request/provider/provider-add-organization.request\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\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
    \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\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/members/components/bulk/bulk-confirm.component\";\nimport { BulkUserDetails } from \"@bitwarden/web-vault/app/organizations/members/components/bulk/bulk-status.component\";\n\n@Component({\n templateUrl:\n \"../../../../../../../apps/web/src/app/organizations/members/components/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/members/components/bulk/bulk-remove.component\";\n\n@Component({\n templateUrl:\n \"../../../../../../../apps/web/src/app/organizations/members/components/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\n
    \n

    {{ \"people\" | i18n }}

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

    {{ \"noUsersInList\" | i18n }}

    \n \n \n {{ \"providerUsersNeedConfirmed\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n \n {{ u.email }}\n {{\n \"invited\" | i18n\n }}\n {{\n \"accepted\" | i18n\n }}\n {{ u.name }}\n \n \n \n \n {{ \"userUsingTwoStep\" | i18n }}\n \n \n \n {{ \"providerAdmin\" | i18n }}\n {{ \"serviceUser\" | i18n }}\n \n \n
    \n \n \n \n
    \n \n \n {{ \"resendInvitation\" | i18n }}\n \n \n \n {{ \"confirm\" | i18n }}\n \n \n \n {{ \"eventLogs\" | i18n }}\n \n \n \n {{ \"remove\" | i18n }}\n \n
    \n
    \n \n \n \n \n
    \n\n\n\n\n\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { SearchPipe } from \"@bitwarden/angular/pipes/search.pipe\";\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { StateService } from \"@bitwarden/common/abstractions/state.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { ProviderUserStatusType } from \"@bitwarden/common/enums/providerUserStatusType\";\nimport { ProviderUserType } from \"@bitwarden/common/enums/providerUserType\";\nimport { ProviderUserBulkRequest } from \"@bitwarden/common/models/request/provider/provider-user-bulk.request\";\nimport { ProviderUserConfirmRequest } from \"@bitwarden/common/models/request/provider/provider-user-confirm.request\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { ProviderUserBulkResponse } from \"@bitwarden/common/models/response/provider/provider-user-bulk.response\";\nimport { ProviderUserUserDetailsResponse } from \"@bitwarden/common/models/response/provider/provider-user.response\";\nimport { BasePeopleComponent } from \"@bitwarden/web-vault/app/common/base.people.component\";\nimport { EntityEventsComponent } from \"@bitwarden/web-vault/app/organizations/manage/entity-events.component\";\nimport { BulkStatusComponent } from \"@bitwarden/web-vault/app/organizations/members/components/bulk/bulk-status.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 { ProviderUpdateRequest } from \"@bitwarden/common/models/request/provider/provider-update.request\";\nimport { ProviderResponse } from \"@bitwarden/common/models/response/provider/provider.response\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\n\n@Component({\n selector: \"provider-account\",\n templateUrl: \"account.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class AccountComponent {\n selfHosted = false;\n loading = true;\n provider: ProviderResponse;\n formPromise: Promise;\n taxFormPromise: Promise;\n\n private providerId: string;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private syncService: SyncService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.providerId = params.providerId;\n try {\n this.provider = await this.apiService.getProvider(this.providerId);\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n });\n this.loading = false;\n }\n\n async submit() {\n try {\n const request = new ProviderUpdateRequest();\n request.name = this.provider.name;\n request.businessName = this.provider.businessName;\n request.billingEmail = this.provider.billingEmail;\n\n this.formPromise = this.apiService.putProvider(this.providerId, request).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"providerUpdated\"));\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n }\n}\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ProviderService } from \"@bitwarden/common/abstractions/provider.service\";\n\n@Component({\n selector: \"provider-settings\",\n templateUrl: \"settings.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class SettingsComponent {\n constructor(private route: ActivatedRoute, private providerService: ProviderService) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.params.subscribe(async (params) => {\n await this.providerService.get(params.providerId);\n });\n }\n}\n","
    \n
    \n
    \n
    \n
    {{ \"settings\" | i18n }}
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n","
    \n
    \n \"Bitwarden\"\n

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

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

    {{ \"setupProvider\" | i18n }}

    \n
    \n
    \n

    {{ \"setupProviderLoginDesc\" | i18n }}

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

    {{ \"setupProvider\" | i18n }}

    \n
    \n

    {{ \"setupProviderDesc\" | i18n }}

    \n\n
    \n

    {{ \"generalInformation\" | i18n }}

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

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

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

    {{ \"scim\" | i18n }}

    \n
    \n\n

    {{ \"scimDescription\" | i18n }}

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

    {{ \"singleSignOn\" | i18n }}

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

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

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

    {{ \"openIdConnectConfig\" | i18n }}

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

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

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

    {{ \"samlSpConfig\" | i18n }}

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

    {{ \"samlIdpConfig\" | i18n }}

    \n\n \n {{ \"idpEntityId\" | i18n }}\n \n \n\n \n {{ \"idpBindingType\" | i18n }}\n \n \n\n \n {{ \"idpSingleSignOnServiceUrl\" | i18n }}\n \n {{ \"idpSingleSignOnServiceUrlRequired\" | i18n }}\n \n\n \n {{ \"idpSingleLogoutServiceUrl\" | i18n }}\n \n \n\n \n {{ \"idpX509PublicCert\" | i18n }}\n \n \n\n \n {{ \"idpOutboundSigningAlgorithm\" | i18n }}\n \n \n\n \n \n\n \n\n \n
    \n
    \n\n \n \n\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport {\n AbstractControl,\n FormBuilder,\n FormControl,\n UntypedFormGroup,\n Validators,\n} from \"@angular/forms\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { concatMap, Subject, takeUntil } from \"rxjs\";\n\nimport { SelectOptions } from \"@bitwarden/angular/interfaces/selectOptions\";\nimport { ControlsOf } from \"@bitwarden/angular/types/controls-of\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { PlatformUtilsService } from \"@bitwarden/common/abstractions/platformUtils.service\";\nimport {\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"@bitwarden/common/enums/ssoEnums\";\nimport { Utils } from \"@bitwarden/common/misc/utils\";\nimport { SsoConfigApi } from \"@bitwarden/common/models/api/sso-config.api\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { OrganizationSsoRequest } from \"@bitwarden/common/models/request/organization/organization-sso.request\";\nimport { OrganizationSsoResponse } from \"@bitwarden/common/models/response/organization/organization-sso.response\";\nimport { SsoConfigView } from \"@bitwarden/common/models/view/sso-config.view\";\n\nconst defaultSigningAlgorithm = \"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\";\n\n@Component({\n selector: \"app-org-manage-sso\",\n templateUrl: \"sso.component.html\",\n})\nexport class SsoComponent implements OnInit, OnDestroy {\n readonly ssoType = SsoType;\n\n readonly ssoTypeOptions: SelectOptions[] = [\n { name: this.i18nService.t(\"selectType\"), value: SsoType.None, disabled: true },\n { name: \"OpenID Connect\", value: SsoType.OpenIdConnect },\n { name: \"SAML 2.0\", value: SsoType.Saml2 },\n ];\n\n readonly samlSigningAlgorithms = [\n \"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\",\n \"http://www.w3.org/2000/09/xmldsig#rsa-sha384\",\n \"http://www.w3.org/2000/09/xmldsig#rsa-sha512\",\n ];\n\n readonly saml2SigningBehaviourOptions: SelectOptions[] = [\n {\n name: \"If IdP Wants Authn Requests Signed\",\n value: Saml2SigningBehavior.IfIdpWantAuthnRequestsSigned,\n },\n { name: \"Always\", value: Saml2SigningBehavior.Always },\n { name: \"Never\", value: Saml2SigningBehavior.Never },\n ];\n readonly saml2BindingTypeOptions: SelectOptions[] = [\n { name: \"Redirect\", value: Saml2BindingType.HttpRedirect },\n { name: \"HTTP POST\", value: Saml2BindingType.HttpPost },\n ];\n readonly saml2NameIdFormatOptions: SelectOptions[] = [\n { name: \"Not Configured\", value: Saml2NameIdFormat.NotConfigured },\n { name: \"Unspecified\", value: Saml2NameIdFormat.Unspecified },\n { name: \"Email Address\", value: Saml2NameIdFormat.EmailAddress },\n { name: \"X.509 Subject Name\", value: Saml2NameIdFormat.X509SubjectName },\n { name: \"Windows Domain Qualified Name\", value: Saml2NameIdFormat.WindowsDomainQualifiedName },\n { name: \"Kerberos Principal Name\", value: Saml2NameIdFormat.KerberosPrincipalName },\n { name: \"Entity Identifier\", value: Saml2NameIdFormat.EntityIdentifier },\n { name: \"Persistent\", value: Saml2NameIdFormat.Persistent },\n { name: \"Transient\", value: Saml2NameIdFormat.Transient },\n ];\n\n readonly connectRedirectOptions: SelectOptions[] = [\n { name: \"Redirect GET\", value: OpenIdConnectRedirectBehavior.RedirectGet },\n { name: \"Form POST\", value: OpenIdConnectRedirectBehavior.FormPost },\n ];\n\n private destory$ = new Subject();\n\n showOpenIdCustomizations = false;\n\n loading = true;\n haveTestedKeyConnector = false;\n organizationId: string;\n organization: Organization;\n formPromise: Promise;\n\n callbackPath: string;\n signedOutCallbackPath: string;\n spEntityId: string;\n spMetadataUrl: string;\n spAcsUrl: string;\n\n protected enabled = this.formBuilder.control(false);\n\n protected ssoIdentifier = this.formBuilder.control(\"\", {\n validators: [Validators.maxLength(50), Validators.required],\n });\n\n protected openIdForm = this.formBuilder.group>(\n {\n authority: new FormControl(\"\", Validators.required),\n clientId: new FormControl(\"\", Validators.required),\n clientSecret: new FormControl(\"\", Validators.required),\n metadataAddress: new FormControl(),\n redirectBehavior: new FormControl(\n OpenIdConnectRedirectBehavior.RedirectGet,\n Validators.required\n ),\n getClaimsFromUserInfoEndpoint: new FormControl(),\n additionalScopes: new FormControl(),\n additionalUserIdClaimTypes: new FormControl(),\n additionalEmailClaimTypes: new FormControl(),\n additionalNameClaimTypes: new FormControl(),\n acrValues: new FormControl(),\n expectedReturnAcrValue: new FormControl(),\n },\n {\n updateOn: \"blur\",\n }\n );\n\n protected samlForm = this.formBuilder.group>(\n {\n spNameIdFormat: new FormControl(Saml2NameIdFormat.NotConfigured),\n spOutboundSigningAlgorithm: new FormControl(defaultSigningAlgorithm),\n spSigningBehavior: new FormControl(Saml2SigningBehavior.IfIdpWantAuthnRequestsSigned),\n spMinIncomingSigningAlgorithm: new FormControl(defaultSigningAlgorithm),\n spWantAssertionsSigned: new FormControl(),\n spValidateCertificates: new FormControl(),\n\n idpEntityId: new FormControl(\"\", Validators.required),\n idpBindingType: new FormControl(Saml2BindingType.HttpRedirect),\n idpSingleSignOnServiceUrl: new FormControl(),\n idpSingleLogoutServiceUrl: new FormControl(),\n idpX509PublicCert: new FormControl(\"\", Validators.required),\n idpOutboundSigningAlgorithm: new FormControl(defaultSigningAlgorithm),\n idpAllowUnsolicitedAuthnResponse: new FormControl(),\n idpAllowOutboundLogoutRequests: new FormControl(true),\n idpWantAuthnRequestsSigned: new FormControl(),\n },\n {\n updateOn: \"blur\",\n }\n );\n\n protected ssoConfigForm = this.formBuilder.group>({\n configType: new FormControl(SsoType.None),\n keyConnectorEnabled: new FormControl(false),\n keyConnectorUrl: new FormControl(\"\"),\n openId: this.openIdForm,\n saml: this.samlForm,\n });\n\n constructor(\n private formBuilder: FormBuilder,\n private route: ActivatedRoute,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private organizationService: OrganizationService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n this.ssoConfigForm\n .get(\"configType\")\n .valueChanges.pipe(takeUntil(this.destory$))\n .subscribe((newType: SsoType) => {\n if (newType === SsoType.OpenIdConnect) {\n this.openIdForm.enable();\n this.samlForm.disable();\n } else if (newType === SsoType.Saml2) {\n this.openIdForm.disable();\n this.samlForm.enable();\n } else {\n this.openIdForm.disable();\n this.samlForm.disable();\n }\n });\n\n this.samlForm\n .get(\"spSigningBehavior\")\n .valueChanges.pipe(takeUntil(this.destory$))\n .subscribe(() => this.samlForm.get(\"idpX509PublicCert\").updateValueAndValidity());\n\n this.route.params\n .pipe(\n concatMap(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n }),\n takeUntil(this.destory$)\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destory$.next();\n this.destory$.complete();\n }\n\n async load() {\n this.organization = await this.organizationService.get(this.organizationId);\n const ssoSettings = await this.organizationApiService.getSso(this.organizationId);\n this.populateForm(ssoSettings);\n\n this.callbackPath = ssoSettings.urls.callbackPath;\n this.signedOutCallbackPath = ssoSettings.urls.signedOutCallbackPath;\n this.spEntityId = ssoSettings.urls.spEntityId;\n this.spMetadataUrl = ssoSettings.urls.spMetadataUrl;\n this.spAcsUrl = ssoSettings.urls.spAcsUrl;\n\n this.loading = false;\n }\n\n async submit() {\n this.validateForm(this.ssoConfigForm);\n\n if (this.ssoConfigForm.value.keyConnectorEnabled) {\n this.haveTestedKeyConnector = false;\n await this.validateKeyConnectorUrl();\n }\n\n if (!this.ssoConfigForm.valid) {\n this.readOutErrors();\n return;\n }\n\n const request = new OrganizationSsoRequest();\n request.enabled = this.enabled.value;\n request.identifier = this.ssoIdentifier.value;\n request.data = SsoConfigApi.fromView(this.ssoConfigForm.getRawValue());\n\n this.formPromise = this.organizationApiService.updateSso(this.organizationId, request);\n\n try {\n const response = await this.formPromise;\n this.populateForm(response);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"ssoSettingsSaved\"));\n } catch {\n // Logged by appApiAction, do nothing\n }\n\n this.formPromise = null;\n }\n\n async validateKeyConnectorUrl() {\n if (this.haveTestedKeyConnector) {\n return;\n }\n\n this.keyConnectorUrl.markAsPending();\n\n try {\n await this.apiService.getKeyConnectorAlive(this.keyConnectorUrl.value);\n this.keyConnectorUrl.updateValueAndValidity();\n } catch {\n this.keyConnectorUrl.setErrors({\n invalidUrl: { message: this.i18nService.t(\"keyConnectorTestFail\") },\n });\n }\n\n this.haveTestedKeyConnector = true;\n }\n\n toggleOpenIdCustomizations() {\n this.showOpenIdCustomizations = !this.showOpenIdCustomizations;\n }\n\n getErrorCount(form: UntypedFormGroup): number {\n return Object.values(form.controls).reduce((acc: number, control: AbstractControl) => {\n if (control instanceof UntypedFormGroup) {\n return acc + this.getErrorCount(control);\n }\n\n if (control.errors == null) {\n return acc;\n }\n return acc + Object.keys(control.errors).length;\n }, 0);\n }\n\n get enableTestKeyConnector() {\n return (\n this.ssoConfigForm.get(\"keyConnectorEnabled\").value &&\n !Utils.isNullOrWhitespace(this.keyConnectorUrl?.value)\n );\n }\n\n get keyConnectorUrl() {\n return this.ssoConfigForm.get(\"keyConnectorUrl\");\n }\n\n get samlSigningAlgorithmOptions(): SelectOptions[] {\n return this.samlSigningAlgorithms.map((algorithm) => ({ name: algorithm, value: algorithm }));\n }\n\n private validateForm(form: UntypedFormGroup) {\n Object.values(form.controls).forEach((control: AbstractControl) => {\n if (control.disabled) {\n return;\n }\n\n if (control instanceof UntypedFormGroup) {\n this.validateForm(control);\n } else {\n control.markAsDirty();\n control.markAsTouched();\n control.updateValueAndValidity();\n }\n });\n }\n\n private populateForm(ssoSettings: OrganizationSsoResponse) {\n this.enabled.setValue(ssoSettings.enabled);\n this.ssoIdentifier.setValue(ssoSettings.identifier);\n if (ssoSettings.data != null) {\n const ssoConfigView = new SsoConfigView(ssoSettings.data);\n this.ssoConfigForm.patchValue(ssoConfigView);\n }\n }\n\n private readOutErrors() {\n const errorText = this.i18nService.t(\"error\");\n const errorCount = this.getErrorCount(this.ssoConfigForm);\n const errorCountText = this.i18nService.t(\n errorCount === 1 ? \"formErrorSummarySingle\" : \"formErrorSummaryPlural\",\n errorCount.toString()\n );\n\n const div = document.createElement(\"div\");\n div.className = \"sr-only\";\n div.id = \"srErrorCount\";\n div.setAttribute(\"aria-live\", \"polite\");\n div.innerText = errorText + \": \" + errorCountText;\n\n const existing = document.getElementById(\"srErrorCount\");\n if (existing != null) {\n existing.remove();\n }\n\n document.body.append(div);\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"@bitwarden/angular/guards/auth.guard\";\nimport { canAccessSettingsTab } from \"@bitwarden/common/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/models/domain/organization\";\nimport { OrganizationPermissionsGuard } from \"@bitwarden/web-vault/app/organizations/guards/org-permissions.guard\";\nimport { OrganizationLayoutComponent } from \"@bitwarden/web-vault/app/organizations/layouts/organization-layout.component\";\nimport { SettingsComponent } from \"@bitwarden/web-vault/app/organizations/settings/settings.component\";\n\nimport { ScimComponent } from \"./manage/scim.component\";\nimport { SsoComponent } from \"./manage/sso.component\";\n\nconst routes: Routes = [\n {\n path: \"organizations/:organizationId\",\n component: OrganizationLayoutComponent,\n canActivate: [AuthGuard, OrganizationPermissionsGuard],\n children: [\n {\n path: \"settings\",\n component: SettingsComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: canAccessSettingsTab,\n },\n children: [\n {\n path: \"sso\",\n component: SsoComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: (org: Organization) => org.canManageSso,\n },\n },\n {\n path: \"scim\",\n component: ScimComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: (org: Organization) => org.canManageScim,\n },\n },\n ],\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class OrganizationsRoutingModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"@bitwarden/web-vault/app/shared/shared.module\";\n\nimport { InputCheckboxComponent } from \"./components/input-checkbox.component\";\nimport { ScimComponent } from \"./manage/scim.component\";\nimport { SsoComponent } from \"./manage/sso.component\";\nimport { OrganizationsRoutingModule } from \"./organizations-routing.module\";\n\n@NgModule({\n imports: [SharedModule, OrganizationsRoutingModule],\n declarations: [InputCheckboxComponent, SsoComponent, ScimComponent],\n})\nexport class OrganizationsModule {}\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { OverlayModule } from \"@angular/cdk/overlay\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { BrowserAnimationsModule } from \"@angular/platform-browser/animations\";\nimport { RouterModule } from \"@angular/router\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\n\nimport { JslibModule } from \"@bitwarden/angular/jslib.module\";\nimport { CoreModule } from \"@bitwarden/web-vault/app/core\";\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 { Observable, Subject } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nexport class ModalRef {\n onCreated: Observable; // Modal added to the DOM.\n onClose: Observable; // Initiated close.\n onClosed: Observable; // Modal was closed (Remove element from DOM)\n onShow: Observable; // Start showing modal\n onShown: Observable; // Modal is fully visible\n\n private readonly _onCreated = new Subject();\n private readonly _onClose = new Subject();\n private readonly _onClosed = new Subject();\n private readonly _onShow = new Subject();\n private readonly _onShown = new Subject();\n private lastResult: any;\n\n constructor() {\n this.onCreated = this._onCreated.asObservable();\n this.onClose = this._onClose.asObservable();\n this.onClosed = this._onClosed.asObservable();\n this.onShow = this._onShow.asObservable();\n this.onShown = this._onShow.asObservable();\n }\n\n show() {\n this._onShow.next();\n }\n\n shown() {\n this._onShown.next();\n }\n\n close(result?: any) {\n this.lastResult = result;\n this._onClose.next(result);\n }\n\n closed() {\n this._onClosed.next(this.lastResult);\n }\n\n created(el: HTMLElement) {\n this._onCreated.next(el);\n }\n\n onClosedPromise(): Promise {\n return this.onClosed.pipe(first()).toPromise();\n }\n}\n","import { Directive, ElementRef, Input, Renderer2 } from \"@angular/core\";\n\n@Directive({\n selector: \"[appA11yTitle]\",\n})\nexport class A11yTitleDirective {\n @Input() set appA11yTitle(title: string) {\n this.title = title;\n }\n\n private title: string;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n ngOnInit() {\n if (!this.el.nativeElement.hasAttribute(\"title\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"title\", this.title);\n }\n if (!this.el.nativeElement.hasAttribute(\"aria-label\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"aria-label\", this.title);\n }\n }\n}\n","import { Directive, ElementRef, Input, OnChanges } from \"@angular/core\";\n\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\n\n/**\n * Provides error handling, in particular for any error returned by the server in an api call.\n * Attach it to a
    element and provide the name of the class property that will hold the api call promise.\n * e.g. \n * Any errors/rejections that occur will be intercepted and displayed as error toasts.\n */\n@Directive({\n selector: \"[appApiAction]\",\n})\nexport class ApiActionDirective implements OnChanges {\n @Input() appApiAction: Promise;\n\n constructor(\n private el: ElementRef,\n private validationService: ValidationService,\n private logService: LogService\n ) {}\n\n ngOnChanges(changes: any) {\n if (this.appApiAction == null || this.appApiAction.then == null) {\n return;\n }\n\n this.el.nativeElement.loading = true;\n\n this.appApiAction.then(\n (response: any) => {\n this.el.nativeElement.loading = false;\n },\n (e: any) => {\n this.el.nativeElement.loading = false;\n\n if ((e as ErrorResponse).captchaRequired) {\n this.logService.error(\"Captcha required error response: \" + e.getSingleMessage());\n return;\n }\n this.logService?.error(`Received API exception: ${e}`);\n this.validationService.showError(e);\n }\n );\n }\n}\n","import { Directive, ElementRef, Input, NgZone } from \"@angular/core\";\nimport { take } from \"rxjs/operators\";\n\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\n@Directive({\n selector: \"[appAutofocus]\",\n})\nexport class AutofocusDirective {\n @Input() set appAutofocus(condition: boolean | string) {\n this.autofocus = condition === \"\" || condition === true;\n }\n\n private autofocus: boolean;\n\n constructor(private el: ElementRef, private ngZone: NgZone) {}\n\n ngOnInit() {\n if (!Utils.isMobileBrowser && this.autofocus) {\n if (this.ngZone.isStable) {\n this.el.nativeElement.focus();\n } else {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => this.el.nativeElement.focus());\n }\n }\n }\n}\n","import { Directive, ElementRef, Input, Renderer2 } from \"@angular/core\";\n\n@Directive({\n selector: \"[appInputVerbatim]\",\n})\nexport class InputVerbatimDirective {\n @Input() set appInputVerbatim(condition: boolean | string) {\n this.disableComplete = condition === \"\" || condition === true;\n }\n\n private disableComplete: boolean;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n ngOnInit() {\n if (this.disableComplete && !this.el.nativeElement.hasAttribute(\"autocomplete\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"autocomplete\", \"off\");\n }\n if (!this.el.nativeElement.hasAttribute(\"autocapitalize\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"autocapitalize\", \"none\");\n }\n if (!this.el.nativeElement.hasAttribute(\"autocorrect\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"autocorrect\", \"none\");\n }\n if (!this.el.nativeElement.hasAttribute(\"spellcheck\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"spellcheck\", \"false\");\n }\n if (!this.el.nativeElement.hasAttribute(\"inputmode\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"inputmode\", \"verbatim\");\n }\n }\n}\n","import { Directive, HostListener } from \"@angular/core\";\n\n@Directive({\n selector: \"[appStopClick]\",\n})\nexport class StopClickDirective {\n @HostListener(\"click\", [\"$event\"]) onClick($event: MouseEvent) {\n $event.preventDefault();\n }\n}\n","import { Directive, HostListener } from \"@angular/core\";\n\n@Directive({\n selector: \"[appStopProp]\",\n})\nexport class StopPropDirective {\n @HostListener(\"click\", [\"$event\"]) onClick($event: MouseEvent) {\n $event.stopPropagation();\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/abstractions/keyConnector.service\";\nimport { MessagingService } from \"@bitwarden/common/abstractions/messaging.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable()\nexport class AuthGuard implements CanActivate {\n constructor(\n private authService: AuthService,\n private router: Router,\n private messagingService: MessagingService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n this.messagingService.send(\"authBlocked\", { url: routerState.url });\n return false;\n }\n\n if (authStatus === AuthenticationStatus.Locked) {\n if (routerState != null) {\n this.messagingService.send(\"lockedUrl\", { url: routerState.url });\n }\n return this.router.createUrlTree([\"lock\"], { queryParams: { promptBiometric: true } });\n }\n\n if (\n !routerState.url.includes(\"remove-password\") &&\n (await this.keyConnectorService.getConvertAccountRequired())\n ) {\n return this.router.createUrlTree([\"/remove-password\"]);\n }\n\n return true;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable()\nexport class LockGuard implements CanActivate {\n protected homepage = \"vault\";\n protected loginpage = \"login\";\n constructor(private authService: AuthService, private router: Router) {}\n\n async canActivate() {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.Locked) {\n return true;\n }\n\n const redirectUrl =\n authStatus === AuthenticationStatus.LoggedOut ? this.loginpage : this.homepage;\n\n return this.router.createUrlTree([redirectUrl]);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\n@Injectable()\nexport class UnauthGuard implements CanActivate {\n protected homepage = \"vault\";\n constructor(private authService: AuthService, private router: Router) {}\n\n async canActivate() {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n return true;\n }\n\n if (authStatus === AuthenticationStatus.Locked) {\n return this.router.createUrlTree([\"lock\"]);\n }\n\n return this.router.createUrlTree([this.homepage]);\n }\n}\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { CommonModule } from \"@angular/common\";\nimport { Component, ModuleWithProviders, NgModule } from \"@angular/core\";\nimport {\n DefaultNoComponentGlobalConfig,\n GlobalConfig,\n Toast as BaseToast,\n ToastPackage,\n ToastrService,\n TOAST_CONFIG,\n} from \"ngx-toastr\";\n\n@Component({\n selector: \"[toast-component2]\",\n template: `\n \n ×\n \n
    \n \n
    \n
    \n
    \n {{ title }} [{{ duplicatesCount + 1 }}]\n
    \n
    \n \n {{ message }}\n \n \n
    \n
    \n
    \n `,\n animations: [\n trigger(\"flyInOut\", [\n state(\"inactive\", style({ opacity: 0 })),\n state(\"active\", style({ opacity: 1 })),\n state(\"removed\", style({ opacity: 0 })),\n transition(\"inactive => active\", animate(\"{{ easeTime }}ms {{ easing }}\")),\n transition(\"active => removed\", animate(\"{{ easeTime }}ms {{ easing }}\")),\n ]),\n ],\n preserveWhitespaces: false,\n})\nexport class BitwardenToast extends BaseToast {\n constructor(protected toastrService: ToastrService, public toastPackage: ToastPackage) {\n super(toastrService, toastPackage);\n }\n}\n\nexport const BitwardenToastGlobalConfig: GlobalConfig = {\n ...DefaultNoComponentGlobalConfig,\n toastComponent: BitwardenToast,\n};\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitwardenToast],\n exports: [BitwardenToast],\n})\nexport class BitwardenToastModule {\n static forRoot(config: Partial = {}): ModuleWithProviders {\n return {\n ngModule: BitwardenToastModule,\n providers: [\n {\n provide: TOAST_CONFIG,\n useValue: {\n default: BitwardenToastGlobalConfig,\n config: config,\n },\n },\n ],\n };\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\ninterface CardRuleEntry {\n cardLength: number;\n blocks: number[];\n}\n\n// See https://baymard.com/checkout-usability/credit-card-patterns for\n// all possible credit card spacing patterns. For now, we just handle\n// the below.\nconst numberFormats: Record = {\n Visa: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n Mastercard: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n Maestro: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 13, blocks: [4, 4, 5] },\n { cardLength: 15, blocks: [4, 6, 5] },\n { cardLength: 19, blocks: [4, 4, 4, 4, 3] },\n ],\n Discover: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n \"Diners Club\": [{ cardLength: 14, blocks: [4, 6, 4] }],\n JCB: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n UnionPay: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 19, blocks: [6, 13] },\n ],\n Amex: [{ cardLength: 15, blocks: [4, 6, 5] }],\n Mir: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 17, blocks: [5, 4, 4, 4] },\n { cardLength: 18, blocks: [6, 4, 4, 4] },\n { cardLength: 19, blocks: [7, 4, 4, 4] },\n ],\n Other: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n};\n\n@Pipe({ name: \"creditCardNumber\" })\nexport class CreditCardNumberPipe implements PipeTransform {\n transform(creditCardNumber: string, brand: string): string {\n let rules = numberFormats[brand];\n\n if (rules == null) {\n rules = numberFormats[\"Other\"];\n }\n\n const cardLength = creditCardNumber.length;\n\n let matchingRule = rules.find((r) => r.cardLength == cardLength);\n if (matchingRule == null) {\n matchingRule = rules[0];\n }\n\n const blocks = matchingRule.blocks;\n\n const chunks: string[] = [];\n let total = 0;\n\n blocks.forEach((c) => {\n chunks.push(creditCardNumber.slice(total, total + c));\n total += c;\n });\n\n // Append the remaining part\n if (cardLength > total) {\n chunks.push(creditCardNumber.slice(total));\n }\n\n return chunks.join(\" \");\n }\n}\n","import { CommonModule, DatePipe } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\n\nimport { CalloutComponent } from \"./components/callout.component\";\nimport { ExportScopeCalloutComponent } from \"./components/export-scope-callout.component\";\nimport { BitwardenToastModule } from \"./components/toastr.component\";\nimport { A11yInvalidDirective } from \"./directives/a11y-invalid.directive\";\nimport { A11yTitleDirective } from \"./directives/a11y-title.directive\";\nimport { ApiActionDirective } from \"./directives/api-action.directive\";\nimport { AutofocusDirective } from \"./directives/autofocus.directive\";\nimport { BoxRowDirective } from \"./directives/box-row.directive\";\nimport { CopyClickDirective } from \"./directives/copy-click.directive\";\nimport { FallbackSrcDirective } from \"./directives/fallback-src.directive\";\nimport { InputStripSpacesDirective } from \"./directives/input-strip-spaces.directive\";\nimport { InputVerbatimDirective } from \"./directives/input-verbatim.directive\";\nimport { LaunchClickDirective } from \"./directives/launch-click.directive\";\nimport { NotPremiumDirective } from \"./directives/not-premium.directive\";\nimport { SelectCopyDirective } from \"./directives/select-copy.directive\";\nimport { StopClickDirective } from \"./directives/stop-click.directive\";\nimport { StopPropDirective } from \"./directives/stop-prop.directive\";\nimport { TrueFalseValueDirective } from \"./directives/true-false-value.directive\";\nimport { CreditCardNumberPipe } from \"./pipes/credit-card-number.pipe\";\nimport { EllipsisPipe } from \"./pipes/ellipsis.pipe\";\nimport { I18nPipe } from \"./pipes/i18n.pipe\";\nimport { SearchCiphersPipe } from \"./pipes/search-ciphers.pipe\";\nimport { SearchPipe } from \"./pipes/search.pipe\";\nimport { UserNamePipe } from \"./pipes/user-name.pipe\";\nimport { UserTypePipe } from \"./pipes/user-type.pipe\";\nimport { PasswordStrengthComponent } from \"./shared/components/password-strength/password-strength.component\";\nimport { IconComponent } from \"./vault/components/icon.component\";\n\n@NgModule({\n imports: [\n BitwardenToastModule.forRoot({\n maxOpened: 5,\n autoDismiss: true,\n closeButton: true,\n }),\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n ],\n declarations: [\n A11yInvalidDirective,\n A11yTitleDirective,\n ApiActionDirective,\n AutofocusDirective,\n BoxRowDirective,\n CalloutComponent,\n CreditCardNumberPipe,\n EllipsisPipe,\n ExportScopeCalloutComponent,\n FallbackSrcDirective,\n I18nPipe,\n IconComponent,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n CopyClickDirective,\n LaunchClickDirective,\n UserNamePipe,\n PasswordStrengthComponent,\n UserTypePipe,\n ],\n exports: [\n A11yInvalidDirective,\n A11yTitleDirective,\n ApiActionDirective,\n AutofocusDirective,\n BitwardenToastModule,\n BoxRowDirective,\n CalloutComponent,\n CreditCardNumberPipe,\n EllipsisPipe,\n ExportScopeCalloutComponent,\n FallbackSrcDirective,\n I18nPipe,\n IconComponent,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n CopyClickDirective,\n LaunchClickDirective,\n UserNamePipe,\n PasswordStrengthComponent,\n UserTypePipe,\n ],\n providers: [CreditCardNumberPipe, DatePipe, I18nPipe, SearchPipe, UserNamePipe, UserTypePipe],\n})\nexport class JslibModule {}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\n@Pipe({\n name: \"i18n\",\n})\nexport class I18nPipe implements PipeTransform {\n constructor(private i18nService: I18nService) {}\n\n transform(id: string, p1?: string | number, p2?: string | number, p3?: string | number): string {\n return this.i18nService.t(id, p1, p2, p3);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\ntype PropertyValueFunction = (item: T) => { toString: () => string };\n\n@Pipe({\n name: \"search\",\n})\nexport class SearchPipe implements PipeTransform {\n transform(\n items: T[],\n searchText: string,\n prop1?: keyof T,\n prop2?: keyof T,\n prop3?: keyof T\n ): T[];\n transform(\n items: T[],\n searchText: string,\n prop1?: PropertyValueFunction,\n prop2?: PropertyValueFunction,\n prop3?: PropertyValueFunction\n ): T[];\n transform(\n items: T[],\n searchText: string,\n prop1?: keyof T | PropertyValueFunction,\n prop2?: keyof T | PropertyValueFunction,\n prop3?: keyof T | PropertyValueFunction\n ): T[] {\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 (prop1 != null) {\n const propValue = typeof prop1 === \"function\" ? prop1(i) : i[prop1];\n\n if (propValue?.toString().toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n }\n\n if (prop2 != null) {\n const propValue = typeof prop2 === \"function\" ? prop2(i) : i[prop2];\n\n if (propValue?.toString().toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n }\n\n if (prop3 != null) {\n const propValue = typeof prop3 === \"function\" ? prop3(i) : i[prop3];\n\n if (propValue?.toString().toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n }\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 { 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): string {\n if (value == null) {\n return 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","import { InjectionToken } from \"@angular/core\";\n\nimport {\n AbstractMemoryStorageService,\n AbstractStorageService,\n} 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","
    \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 { 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 { Utils } from \"@bitwarden/common/misc/utils\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/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 { Verification } from \"../../types/verification\";\n\nexport abstract class AccountApiService {\n abstract deleteAccount(verification: Verification): Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { ProfileResponse } from \"../../models/response/profile.response\";\nexport abstract class AvatarUpdateService {\n avatarUpdate$ = new Observable();\n abstract pushUpdate(color: string): Promise;\n abstract loadColorFromState(): Promise;\n}\n","export abstract class AnonymousHubService {\n createHubConnection: (token: string) => void;\n stopHubConnection: () => void;\n}\n","import { OrganizationConnectionType } from \"../enums/organizationConnectionType\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/set-key-connector-key.request\";\nimport { BitPayInvoiceRequest } from \"../models/request/bit-pay-invoice.request\";\nimport { CollectionBulkDeleteRequest } from \"../models/request/collection-bulk-delete.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 { IapCheckRequest } from \"../models/request/iap-check.request\";\nimport { PasswordTokenRequest } from \"../models/request/identity-token/password-token.request\";\nimport { SsoTokenRequest } from \"../models/request/identity-token/sso-token.request\";\nimport { UserApiTokenRequest } from \"../models/request/identity-token/user-api-token.request\";\nimport { KdfRequest } from \"../models/request/kdf.request\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/key-connector-user-key.request\";\nimport { KeysRequest } from \"../models/request/keys.request\";\nimport { OrganizationConnectionRequest } from \"../models/request/organization-connection.request\";\nimport { OrganizationImportRequest } from \"../models/request/organization-import.request\";\nimport { OrganizationSponsorshipCreateRequest } from \"../models/request/organization/organization-sponsorship-create.request\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../models/request/organization/organization-sponsorship-redeem.request\";\nimport { PasswordHintRequest } from \"../models/request/password-hint.request\";\nimport { PasswordRequest } from \"../models/request/password.request\";\nimport { PasswordlessAuthRequest } from \"../models/request/passwordless-auth.request\";\nimport { PasswordlessCreateAuthRequest } from \"../models/request/passwordless-create-auth.request\";\nimport { PaymentRequest } from \"../models/request/payment.request\";\nimport { PreloginRequest } from \"../models/request/prelogin.request\";\nimport { ProviderAddOrganizationRequest } from \"../models/request/provider/provider-add-organization.request\";\nimport { ProviderOrganizationCreateRequest } from \"../models/request/provider/provider-organization-create.request\";\nimport { ProviderSetupRequest } from \"../models/request/provider/provider-setup.request\";\nimport { ProviderUpdateRequest } from \"../models/request/provider/provider-update.request\";\nimport { ProviderUserAcceptRequest } from \"../models/request/provider/provider-user-accept.request\";\nimport { ProviderUserBulkConfirmRequest } from \"../models/request/provider/provider-user-bulk-confirm.request\";\nimport { ProviderUserBulkRequest } from \"../models/request/provider/provider-user-bulk.request\";\nimport { ProviderUserConfirmRequest } from \"../models/request/provider/provider-user-confirm.request\";\nimport { ProviderUserInviteRequest } from \"../models/request/provider/provider-user-invite.request\";\nimport { ProviderUserUpdateRequest } from \"../models/request/provider/provider-user-update.request\";\nimport { RegisterRequest } from \"../models/request/register.request\";\nimport { SecretVerificationRequest } from \"../models/request/secret-verification.request\";\nimport { SelectionReadOnlyRequest } from \"../models/request/selection-read-only.request\";\nimport { SendAccessRequest } from \"../models/request/send-access.request\";\nimport { SendRequest } from \"../models/request/send.request\";\nimport { SetPasswordRequest } from \"../models/request/set-password.request\";\nimport { StorageRequest } from \"../models/request/storage.request\";\nimport { TaxInfoUpdateRequest } from \"../models/request/tax-info-update.request\";\nimport { TwoFactorEmailRequest } from \"../models/request/two-factor-email.request\";\nimport { TwoFactorProviderRequest } from \"../models/request/two-factor-provider.request\";\nimport { TwoFactorRecoveryRequest } from \"../models/request/two-factor-recovery.request\";\nimport { UpdateAvatarRequest } from \"../models/request/update-avatar.request\";\nimport { UpdateDomainsRequest } from \"../models/request/update-domains.request\";\nimport { UpdateKeyRequest } from \"../models/request/update-key.request\";\nimport { UpdateProfileRequest } from \"../models/request/update-profile.request\";\nimport { UpdateTempPasswordRequest } from \"../models/request/update-temp-password.request\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../models/request/update-two-factor-authenticator.request\";\nimport { UpdateTwoFactorDuoRequest } from \"../models/request/update-two-factor-duo.request\";\nimport { UpdateTwoFactorEmailRequest } from \"../models/request/update-two-factor-email.request\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../models/request/update-two-factor-web-authn-delete.request\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../models/request/update-two-factor-web-authn.request\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../models/request/update-two-factor-yubio-otp.request\";\nimport { VerifyDeleteRecoverRequest } from \"../models/request/verify-delete-recover.request\";\nimport { VerifyEmailRequest } from \"../models/request/verify-email.request\";\nimport { ApiKeyResponse } from \"../models/response/api-key.response\";\nimport { 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 {\n CollectionAccessDetailsResponse,\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 { IdentityCaptchaResponse } from \"../models/response/identity-captcha.response\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identity-two-factor.response\";\nimport { KeyConnectorUserKeyResponse } from \"../models/response/key-connector-user-key.response\";\nimport { ListResponse } from \"../models/response/list.response\";\nimport {\n OrganizationConnectionConfigApis,\n OrganizationConnectionResponse,\n} from \"../models/response/organization-connection.response\";\nimport { OrganizationExportResponse } from \"../models/response/organization-export.response\";\nimport { OrganizationSponsorshipSyncStatusResponse } from \"../models/response/organization-sponsorship-sync-status.response\";\nimport { PaymentResponse } from \"../models/response/payment.response\";\nimport { PlanResponse } from \"../models/response/plan.response\";\nimport { PolicyResponse } from \"../models/response/policy.response\";\nimport { PreloginResponse } from \"../models/response/prelogin.response\";\nimport { ProfileResponse } from \"../models/response/profile.response\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../models/response/provider/provider-organization.response\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../models/response/provider/provider-user-bulk-public-key.response\";\nimport { ProviderUserBulkResponse } from \"../models/response/provider/provider-user-bulk.response\";\nimport {\n ProviderUserResponse,\n ProviderUserUserDetailsResponse,\n} from \"../models/response/provider/provider-user.response\";\nimport { ProviderResponse } from \"../models/response/provider/provider.response\";\nimport { SelectionReadOnlyResponse } from \"../models/response/selection-read-only.response\";\nimport { SendAccessResponse } from \"../models/response/send-access.response\";\nimport { SendFileDownloadDataResponse } from \"../models/response/send-file-download-data.response\";\nimport { SendFileUploadDataResponse } from \"../models/response/send-file-upload-data.response\";\nimport { SendResponse } from \"../models/response/send.response\";\nimport { SsoPreValidateResponse } from \"../models/response/sso-pre-validate.response\";\nimport { SubscriptionResponse } from \"../models/response/subscription.response\";\nimport { TaxInfoResponse } from \"../models/response/tax-info.response\";\nimport { TaxRateResponse } from \"../models/response/tax-rate.response\";\nimport { TwoFactorAuthenticatorResponse } from \"../models/response/two-factor-authenticator.response\";\nimport { TwoFactorDuoResponse } from \"../models/response/two-factor-duo.response\";\nimport { TwoFactorEmailResponse } from \"../models/response/two-factor-email.response\";\nimport { TwoFactorProviderResponse } from \"../models/response/two-factor-provider.response\";\nimport { TwoFactorRecoverResponse } from \"../models/response/two-factor-recover.response\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"../models/response/two-factor-web-authn.response\";\nimport { TwoFactorYubiKeyResponse } from \"../models/response/two-factor-yubi-key.response\";\nimport { UserKeyResponse } from \"../models/response/user-key.response\";\nimport { SendAccessView } from \"../models/view/send-access.view\";\nimport { AttachmentRequest } from \"../vault/models/request/attachment.request\";\nimport { CipherBulkDeleteRequest } from \"../vault/models/request/cipher-bulk-delete.request\";\nimport { CipherBulkMoveRequest } from \"../vault/models/request/cipher-bulk-move.request\";\nimport { CipherBulkRestoreRequest } from \"../vault/models/request/cipher-bulk-restore.request\";\nimport { CipherBulkShareRequest } from \"../vault/models/request/cipher-bulk-share.request\";\nimport { CipherCollectionsRequest } from \"../vault/models/request/cipher-collections.request\";\nimport { CipherCreateRequest } from \"../vault/models/request/cipher-create.request\";\nimport { CipherPartialRequest } from \"../vault/models/request/cipher-partial.request\";\nimport { CipherShareRequest } from \"../vault/models/request/cipher-share.request\";\nimport { CipherRequest } from \"../vault/models/request/cipher.request\";\nimport { AttachmentUploadDataResponse } from \"../vault/models/response/attachment-upload-data.response\";\nimport { AttachmentResponse } from \"../vault/models/response/attachment.response\";\nimport { CipherResponse } from \"../vault/models/response/cipher.response\";\nimport { SyncResponse } from \"../vault/models/response/sync.response\";\n\n/**\n * @deprecated The `ApiService` class is deprecated and calls should be extracted into individual\n * api services. The `send` method is still allowed to be used within api services. For background\n * of this decision please read https://contributing.bitwarden.com/architecture/adr/refactor-api-service.\n */\nexport abstract class ApiService {\n send: (\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n path: string,\n body: any,\n authed: boolean,\n hasResponse: boolean,\n apiUrl?: string,\n alterHeaders?: (headers: Headers) => void\n ) => Promise;\n\n postIdentityToken: (\n request: PasswordTokenRequest | SsoTokenRequest | UserApiTokenRequest\n ) => Promise;\n refreshIdentityToken: () => Promise;\n\n getProfile: () => Promise;\n getUserSubscription: () => Promise;\n getTaxInfo: () => Promise;\n putProfile: (request: UpdateProfileRequest) => Promise;\n putAvatar: (request: UpdateAvatarRequest) => Promise;\n putTaxInfo: (request: TaxInfoUpdateRequest) => Promise;\n postPrelogin: (request: PreloginRequest) => Promise;\n postEmailToken: (request: EmailTokenRequest) => Promise;\n postEmail: (request: EmailRequest) => Promise;\n postPassword: (request: PasswordRequest) => Promise;\n setPassword: (request: SetPasswordRequest) => Promise;\n postSetKeyConnectorKey: (request: SetKeyConnectorKeyRequest) => Promise;\n postSecurityStamp: (request: SecretVerificationRequest) => Promise;\n getAccountRevisionDate: () => Promise;\n postPasswordHint: (request: PasswordHintRequest) => Promise;\n postRegister: (request: RegisterRequest) => Promise;\n postPremium: (data: FormData) => Promise;\n postIapCheck: (request: IapCheckRequest) => Promise;\n postReinstatePremium: () => Promise;\n postCancelPremium: () => Promise;\n postAccountStorage: (request: StorageRequest) => Promise;\n postAccountPayment: (request: PaymentRequest) => Promise;\n postAccountLicense: (data: FormData) => Promise;\n postAccountKey: (request: UpdateKeyRequest) => Promise;\n postAccountKeys: (request: KeysRequest) => Promise;\n postAccountVerifyEmail: () => Promise;\n postAccountVerifyEmailToken: (request: VerifyEmailRequest) => Promise;\n postAccountVerifyPassword: (request: SecretVerificationRequest) => Promise;\n postAccountRecoverDelete: (request: DeleteRecoverRequest) => Promise;\n postAccountRecoverDeleteToken: (request: VerifyDeleteRecoverRequest) => Promise;\n postAccountKdf: (request: KdfRequest) => Promise;\n postUserApiKey: (id: string, request: SecretVerificationRequest) => Promise;\n postUserRotateApiKey: (id: string, request: SecretVerificationRequest) => Promise;\n putUpdateTempPassword: (request: UpdateTempPasswordRequest) => Promise;\n postConvertToKeyConnector: () => Promise;\n //passwordless\n postAuthRequest: (request: PasswordlessCreateAuthRequest) => Promise;\n getAuthResponse: (id: string, accessCode: string) => Promise;\n getAuthRequest: (id: string) => Promise;\n putAuthRequest: (id: string, request: PasswordlessAuthRequest) => Promise;\n getAuthRequests: () => Promise>;\n getLastAuthRequest: () => 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 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 getUserCollections: () => Promise>;\n getCollections: (organizationId: string) => Promise>;\n getCollectionUsers: (organizationId: string, id: string) => Promise;\n getCollectionAccessDetails: (\n organizationId: string,\n id: string\n ) => Promise;\n getManyCollectionsWithAccessDetails: (\n orgId: string\n ) => 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 deleteManyCollections: (request: CollectionBulkDeleteRequest) => Promise;\n deleteCollectionUser: (\n organizationId: string,\n id: string,\n organizationUserId: string\n ) => Promise;\n\n getGroupUsers: (organizationId: string, id: string) => Promise;\n putGroupUsers: (organizationId: string, id: string, request: string[]) => Promise;\n deleteGroupUser: (organizationId: string, id: string, organizationUserId: string) => Promise;\n\n getSync: () => Promise;\n postPublicImportDirectory: (request: OrganizationImportRequest) => Promise;\n\n getSettingsDomains: () => Promise;\n putSettingsDomains: (request: UpdateDomainsRequest) => Promise;\n\n getTwoFactorProviders: () => Promise>;\n getTwoFactorOrganizationProviders: (\n organizationId: string\n ) => Promise>;\n getTwoFactorAuthenticator: (\n request: SecretVerificationRequest\n ) => Promise;\n getTwoFactorEmail: (request: SecretVerificationRequest) => Promise;\n getTwoFactorDuo: (request: SecretVerificationRequest) => Promise;\n getTwoFactorOrganizationDuo: (\n organizationId: string,\n request: SecretVerificationRequest\n ) => Promise;\n getTwoFactorYubiKey: (request: SecretVerificationRequest) => Promise;\n getTwoFactorWebAuthn: (request: SecretVerificationRequest) => Promise;\n getTwoFactorWebAuthnChallenge: (request: SecretVerificationRequest) => Promise;\n getTwoFactorRecover: (request: SecretVerificationRequest) => Promise;\n putTwoFactorAuthenticator: (\n request: UpdateTwoFactorAuthenticatorRequest\n ) => Promise;\n putTwoFactorEmail: (request: UpdateTwoFactorEmailRequest) => Promise;\n putTwoFactorDuo: (request: UpdateTwoFactorDuoRequest) => Promise;\n putTwoFactorOrganizationDuo: (\n organizationId: string,\n request: UpdateTwoFactorDuoRequest\n ) => Promise;\n putTwoFactorYubiKey: (\n request: UpdateTwoFactorYubioOtpRequest\n ) => Promise;\n putTwoFactorWebAuthn: (\n request: UpdateTwoFactorWebAuthnRequest\n ) => Promise;\n deleteTwoFactorWebAuthn: (\n request: UpdateTwoFactorWebAuthnDeleteRequest\n ) => Promise;\n putTwoFactorDisable: (request: TwoFactorProviderRequest) => Promise;\n putTwoFactorOrganizationDisable: (\n organizationId: string,\n request: TwoFactorProviderRequest\n ) => Promise;\n postTwoFactorRecover: (request: TwoFactorRecoveryRequest) => Promise;\n postTwoFactorEmailSetup: (request: TwoFactorEmailRequest) => Promise;\n postTwoFactorEmail: (request: TwoFactorEmailRequest) => Promise;\n getDeviceVerificationSettings: () => Promise;\n putDeviceVerificationSettings: (\n request: DeviceVerificationRequest\n ) => Promise;\n getKnownDevice: (email: string, deviceIdentifier: string) => Promise;\n\n getEmergencyAccessTrusted: () => Promise>;\n getEmergencyAccessGranted: () => Promise>;\n getEmergencyAccess: (id: string) => Promise;\n getEmergencyGrantorPolicies: (id: string) => Promise>;\n putEmergencyAccess: (id: string, request: EmergencyAccessUpdateRequest) => Promise;\n deleteEmergencyAccess: (id: string) => Promise;\n postEmergencyAccessInvite: (request: EmergencyAccessInviteRequest) => Promise;\n postEmergencyAccessReinvite: (id: string) => Promise;\n postEmergencyAccessAccept: (id: string, request: EmergencyAccessAcceptRequest) => Promise;\n postEmergencyAccessConfirm: (id: string, request: EmergencyAccessConfirmRequest) => Promise;\n postEmergencyAccessInitiate: (id: string) => Promise;\n postEmergencyAccessApprove: (id: string) => Promise;\n postEmergencyAccessReject: (id: string) => Promise;\n postEmergencyAccessTakeover: (id: string) => Promise;\n postEmergencyAccessPassword: (\n id: string,\n request: EmergencyAccessPasswordRequest\n ) => Promise;\n postEmergencyAccessView: (id: string) => Promise;\n getCloudCommunicationsEnabled: () => Promise;\n abstract getOrganizationConnection(\n id: string,\n type: OrganizationConnectionType,\n configType: { new (response: any): TConfig }\n ): Promise>;\n abstract createOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig }\n ): Promise>;\n abstract updateOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig },\n organizationConnectionId: string\n ): Promise>;\n deleteOrganizationConnection: (id: string) => Promise;\n getPlans: () => Promise>;\n getTaxRates: () => Promise>;\n\n postProviderSetup: (id: string, request: ProviderSetupRequest) => Promise;\n getProvider: (id: string) => Promise;\n putProvider: (id: string, request: ProviderUpdateRequest) => Promise;\n\n getProviderUsers: (providerId: string) => Promise>;\n getProviderUser: (providerId: string, id: string) => Promise;\n postProviderUserInvite: (providerId: string, request: ProviderUserInviteRequest) => Promise;\n postProviderUserReinvite: (providerId: string, id: string) => Promise;\n postManyProviderUserReinvite: (\n providerId: string,\n request: ProviderUserBulkRequest\n ) => Promise>;\n postProviderUserAccept: (\n providerId: string,\n id: string,\n request: ProviderUserAcceptRequest\n ) => Promise;\n postProviderUserConfirm: (\n providerId: string,\n id: string,\n request: ProviderUserConfirmRequest\n ) => Promise;\n postProviderUsersPublicKey: (\n providerId: string,\n request: ProviderUserBulkRequest\n ) => Promise>;\n postProviderUserBulkConfirm: (\n providerId: string,\n request: ProviderUserBulkConfirmRequest\n ) => Promise>;\n putProviderUser: (\n providerId: string,\n id: string,\n request: ProviderUserUpdateRequest\n ) => Promise;\n deleteProviderUser: (organizationId: string, id: string) => Promise;\n deleteManyProviderUsers: (\n providerId: string,\n request: ProviderUserBulkRequest\n ) => Promise>;\n getProviderClients: (\n providerId: string\n ) => Promise>;\n postProviderAddOrganization: (\n providerId: string,\n request: ProviderAddOrganizationRequest\n ) => Promise;\n postProviderCreateOrganization: (\n providerId: string,\n request: ProviderOrganizationCreateRequest\n ) => Promise;\n deleteProviderOrganization: (providerId: string, organizationId: string) => Promise;\n\n getEvents: (start: string, end: string, token: string) => Promise>;\n getEventsCipher: (\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsOrganization: (\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsOrganizationUser: (\n organizationId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsProvider: (\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsProviderUser: (\n providerId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n postEventsCollect: (request: EventRequest[]) => Promise;\n\n deleteSsoUser: (organizationId: string) => Promise;\n getSsoUserIdentifier: () => Promise;\n\n getUserPublicKey: (id: string) => Promise;\n\n getHibpBreach: (username: string) => Promise;\n\n postBitPayInvoice: (request: BitPayInvoiceRequest) => Promise;\n postSetupPayment: () => Promise;\n\n getActiveBearerToken: () => Promise;\n fetch: (request: Request) => Promise;\n nativeFetch: (request: Request) => Promise;\n\n preValidateSso: (identifier: string) => Promise;\n\n postCreateSponsorship: (\n sponsorshipOrgId: string,\n request: OrganizationSponsorshipCreateRequest\n ) => Promise;\n getSponsorshipSyncStatus: (\n sponsoredOrgId: string\n ) => Promise;\n deleteRevokeSponsorship: (sponsoringOrganizationId: string) => Promise;\n deleteRemoveSponsorship: (sponsoringOrgId: string) => Promise;\n postPreValidateSponsorshipToken: (sponsorshipToken: string) => Promise;\n postRedeemSponsorship: (\n sponsorshipToken: string,\n request: OrganizationSponsorshipRedeemRequest\n ) => Promise;\n postResendSponsorshipOffer: (sponsoringOrgId: string) => Promise;\n\n getUserKeyFromKeyConnector: (keyConnectorUrl: string) => Promise;\n postUserKeyToKeyConnector: (\n keyConnectorUrl: string,\n request: KeyConnectorUserKeyRequest\n ) => Promise;\n getKeyConnectorAlive: (keyConnectorUrl: string) => Promise;\n getOrganizationExport: (organizationId: string) => Promise;\n}\n","export abstract class AppIdService {\n getAppId: () => Promise;\n getAnonymousAppId: () => Promise;\n}\n","import { BreachAccountResponse } from \"../models/response/breach-account.response\";\n\nexport abstract class AuditService {\n passwordLeaked: (password: string) => Promise;\n breachedAccounts: (username: string) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { AuthenticationStatus } from \"../enums/authenticationStatus\";\nimport { AuthResult } from \"../models/domain/auth-result\";\nimport {\n UserApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../models/domain/log-in-credentials\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\nimport { TokenTwoFactorRequest } from \"../models/request/identity-token/token-two-factor.request\";\nimport { AuthRequestResponse } from \"../models/response/auth-request.response\";\nimport { AuthRequestPushNotification } from \"../models/response/notification.response\";\n\nexport abstract class AuthService {\n masterPasswordHash: string;\n email: string;\n accessCode: string;\n authRequestId: string;\n\n logIn: (\n credentials:\n | UserApiLogInCredentials\n | PasswordLogInCredentials\n | SsoLogInCredentials\n | PasswordlessLogInCredentials\n ) => Promise;\n logInTwoFactor: (\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ) => Promise;\n logOut: (callback: () => void) => void;\n makePreloginKey: (masterPassword: string, email: string) => Promise;\n authingWithUserApiKey: () => boolean;\n authingWithSso: () => boolean;\n authingWithPassword: () => boolean;\n authingWithPasswordless: () => boolean;\n getAuthStatus: (userId?: string) => Promise;\n authResponsePushNotifiction: (notification: AuthRequestPushNotification) => Promise;\n passwordlessLogin: (\n id: string,\n key: string,\n requestApproved: boolean\n ) => Promise;\n getPushNotifcationObs$: () => Observable;\n}\n","export interface MessageBase {\n command: string;\n}\n\nexport abstract class BroadcasterService {\n send: (message: MessageBase, id?: string) => void;\n subscribe: (id: string, messageCallback: (message: MessageBase) => void) => void;\n unsubscribe: (id: string) => void;\n}\n","import { 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 { KdfConfig } from \"../models/domain/kdf-config\";\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 kdfConfig: KdfConfig\n ) => Promise;\n makeKeyFromPin: (\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfConfig: KdfConfig,\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 kdfConfig: KdfConfig\n ) => Promise;\n makeSendKey: (keyMaterial: ArrayBuffer) => Promise;\n hashPassword: (\n password: string,\n key: SymmetricCryptoKey,\n hashPurpose?: HashPurpose\n ) => Promise;\n makeEncKey: (key: SymmetricCryptoKey) => Promise<[SymmetricCryptoKey, EncString]>;\n remakeEncKey: (\n key: SymmetricCryptoKey,\n encKey?: SymmetricCryptoKey\n ) => Promise<[SymmetricCryptoKey, EncString]>;\n encrypt: (plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey) => Promise;\n encryptToBytes: (plainValue: ArrayBuffer, key?: SymmetricCryptoKey) => Promise;\n rsaEncrypt: (data: ArrayBuffer, publicKey?: ArrayBuffer) => Promise;\n rsaDecrypt: (encValue: string, privateKeyValue?: ArrayBuffer) => Promise;\n decryptToBytes: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n decryptToUtf8: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n decryptFromBytes: (encBuffer: EncArrayBuffer, key: SymmetricCryptoKey) => Promise;\n randomNumber: (min: number, max: number) => Promise;\n validateKey: (key: SymmetricCryptoKey) => Promise;\n}\n","import { DecryptParameters } from \"../models/domain/decrypt-parameters\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\n\nexport abstract class CryptoFunctionService {\n pbkdf2: (\n password: string | ArrayBuffer,\n salt: string | ArrayBuffer,\n algorithm: \"sha256\" | \"sha512\",\n iterations: number\n ) => Promise;\n argon2: (\n password: string | ArrayBuffer,\n salt: string | ArrayBuffer,\n iterations: number,\n memory: number,\n parallelism: number\n ) => Promise;\n hkdf: (\n ikm: ArrayBuffer,\n salt: string | ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hkdfExpand: (\n prk: ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hash: (\n value: string | ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"\n ) => Promise;\n hmac: (\n value: ArrayBuffer,\n key: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compare: (a: ArrayBuffer, b: ArrayBuffer) => Promise;\n hmacFast: (\n value: ArrayBuffer | string,\n key: ArrayBuffer | string,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compareFast: (a: ArrayBuffer | string, b: ArrayBuffer | string) => Promise;\n aesEncrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n aesDecryptFastParameters: (\n data: string,\n iv: string,\n mac: string,\n key: SymmetricCryptoKey\n ) => DecryptParameters;\n aesDecryptFast: (parameters: DecryptParameters) => Promise;\n aesDecrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n rsaEncrypt: (\n data: ArrayBuffer,\n publicKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaDecrypt: (\n data: ArrayBuffer,\n privateKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaExtractPublicKey: (privateKey: ArrayBuffer) => Promise;\n rsaGenerateKeyPair: (length: 1024 | 2048 | 4096) => Promise<[ArrayBuffer, ArrayBuffer]>;\n randomBytes: (length: number) => Promise;\n}\n","import { IEncrypted } from \"../interfaces/IEncrypted\";\nimport { Decryptable } from \"../interfaces/decryptable.interface\";\nimport { InitializerMetadata } from \"../interfaces/initializer-metadata.interface\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\n\nexport abstract class EncryptService {\n abstract encrypt(plainValue: string | ArrayBuffer, key: SymmetricCryptoKey): Promise;\n abstract encryptToBytes: (\n plainValue: ArrayBuffer,\n key?: SymmetricCryptoKey\n ) => Promise;\n abstract decryptToUtf8: (encString: EncString, key: SymmetricCryptoKey) => Promise;\n abstract decryptToBytes: (encThing: IEncrypted, key: SymmetricCryptoKey) => Promise;\n abstract resolveLegacyKey: (key: SymmetricCryptoKey, encThing: IEncrypted) => SymmetricCryptoKey;\n abstract decryptItems: (\n items: Decryptable[],\n key: SymmetricCryptoKey\n ) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nexport type Urls = {\n base?: string;\n webVault?: string;\n api?: string;\n identity?: string;\n icons?: string;\n notifications?: string;\n events?: string;\n keyConnector?: string;\n scim?: string;\n};\n\nexport type PayPalConfig = {\n businessId?: string;\n buttonAction?: string;\n};\n\nexport abstract class EnvironmentService {\n urls: Observable;\n\n hasBaseUrl: () => boolean;\n getNotificationsUrl: () => string;\n getWebVaultUrl: () => string;\n getSendUrl: () => string;\n getIconsUrl: () => string;\n getApiUrl: () => string;\n getIdentityUrl: () => string;\n getEventsUrl: () => string;\n getKeyConnectorUrl: () => string;\n getScimUrl: () => string;\n setUrlsFromStorage: () => Promise;\n setUrls: (urls: Urls) => Promise;\n getUrls: () => Urls;\n isCloud: () => boolean;\n /**\n * @remarks For desktop and browser use only.\n * For web, use PlatformUtilsService.isSelfHost()\n */\n isSelfHosted: () => boolean;\n}\n","import { EventType } from \"../../enums/eventType\";\n\nexport abstract class EventCollectionService {\n collect: (\n eventType: EventType,\n cipherId?: string,\n uploadImmediately?: boolean,\n organizationId?: string\n ) => Promise;\n}\n","export abstract class EventUploadService {\n uploadEvents: (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 { AbstractControl } from \"@angular/forms\";\nexport interface AllValidationErrors {\n controlName: string;\n errorName: string;\n}\n\nexport interface FormGroupControls {\n [key: string]: AbstractControl;\n}\n\nexport abstract class FormValidationErrorsService {\n getFormValidationErrors: (controls: FormGroupControls) => AllValidationErrors[];\n}\n","import { Observable } from \"rxjs\";\n\nimport { TranslationService } from \"./translation.service\";\n\nexport abstract class I18nService extends TranslationService {\n locale$: Observable;\n}\n","export abstract class TranslationService {\n supportedTranslationLocales: string[];\n translationLocale: string;\n collator: Intl.Collator;\n localeNames: Map;\n t: (id: string, p1?: string | number, p2?: string | number, p3?: string | number) => string;\n translate: (id: string, p1?: string, p2?: string, p3?: string) => string;\n}\n","import { Organization } from \"../models/domain/organization\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\n\nexport abstract class KeyConnectorService {\n getAndSetKey: (url?: string) => Promise;\n getManagingOrganization: () => Promise;\n getUsesKeyConnector: () => Promise;\n migrateUser: () => Promise;\n userNeedsMigration: () => Promise;\n convertNewSsoUserToKeyConnector: (\n tokenResponse: IdentityTokenResponse,\n orgId: string\n ) => Promise;\n setUsesKeyConnector: (enabled: boolean) => Promise;\n setConvertAccountRequired: (status: boolean) => Promise;\n getConvertAccountRequired: () => Promise;\n removeConvertAccountRequired: () => Promise;\n clear: () => Promise;\n}\n","import { LogLevelType } from \"../enums/logLevelType\";\n\nexport abstract class LogService {\n debug: (message: string) => void;\n info: (message: string) => void;\n warning: (message: string) => void;\n error: (message: string) => void;\n write: (level: LogLevelType, message: string) => void;\n}\n","export abstract class LoginService {\n getEmail: () => string;\n getRememberEmail: () => boolean;\n setEmail: (value: string) => void;\n setRememberEmail: (value: boolean) => void;\n clearValues: () => void;\n saveEmailSettings: () => Promise;\n}\n","export abstract class MessagingService {\n send: (subscriber: string, arg?: any) => void;\n}\n","export abstract class NotificationsService {\n init: () => Promise;\n updateConnection: (sync?: boolean) => Promise;\n reconnectFromActivity: () => Promise;\n disconnectFromInactivity: () => Promise;\n}\n","import { ListResponse } from \"../../models/response/list.response\";\n\nimport {\n OrganizationUserAcceptRequest,\n OrganizationUserBulkConfirmRequest,\n OrganizationUserConfirmRequest,\n OrganizationUserInviteRequest,\n OrganizationUserResetPasswordEnrollmentRequest,\n OrganizationUserResetPasswordRequest,\n OrganizationUserUpdateGroupsRequest,\n OrganizationUserUpdateRequest,\n} from \"./requests\";\nimport {\n OrganizationUserBulkPublicKeyResponse,\n OrganizationUserBulkResponse,\n OrganizationUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n OrganizationUserUserDetailsResponse,\n} from \"./responses\";\n\n/**\n * Service for interacting with Organization Users via the API\n */\nexport abstract class OrganizationUserService {\n /**\n * Retrieve a single organization user by Id\n * @param organizationId - Identifier for the user's organization\n * @param id - Organization user identifier\n * @param options - Options for the request\n */\n abstract getOrganizationUser(\n organizationId: string,\n id: string,\n options?: {\n includeGroups?: boolean;\n }\n ): Promise;\n\n /**\n * Retrieve a list of groups Ids the specified organization user belongs to\n * @param organizationId - Identifier for the user's organization\n * @param id - Organization user identifier\n */\n abstract getOrganizationUserGroups(organizationId: string, id: string): Promise;\n\n /**\n * Retrieve a list of all users that belong to the specified organization\n * @param organizationId - Identifier for the organization\n * @param options - Options for the request\n */\n abstract getAllUsers(\n organizationId: string,\n options?: {\n includeCollections?: boolean;\n includeGroups?: boolean;\n }\n ): Promise>;\n\n /**\n * Retrieve reset password details for the specified organization user\n * @param organizationId - Identifier for the user's organization\n * @param id - Organization user identifier\n */\n abstract getOrganizationUserResetPasswordDetails(\n organizationId: string,\n id: string\n ): Promise;\n\n /**\n * Create new organization user invite(s) for the specified organization\n * @param organizationId - Identifier for the organization\n * @param request - New user invitation request details\n */\n abstract postOrganizationUserInvite(\n organizationId: string,\n request: OrganizationUserInviteRequest\n ): Promise;\n\n /**\n * Re-invite the specified organization user\n * @param organizationId - Identifier for the user's organization\n * @param id - Organization user identifier\n */\n abstract postOrganizationUserReinvite(organizationId: string, id: string): Promise;\n\n /**\n * Re-invite many organization users for the specified organization\n * @param organizationId - Identifier for the organization\n * @param ids - A list of organization user identifiers\n * @return List of user ids, including both those that were successfully re-invited and those that had an error\n */\n abstract postManyOrganizationUserReinvite(\n organizationId: string,\n ids: string[]\n ): Promise>;\n\n /**\n * Accept an organization user invitation\n * @param organizationId - Identifier for the organization to accept\n * @param id - Organization user identifier\n * @param request - Request details for accepting the invitation\n */\n abstract postOrganizationUserAccept(\n organizationId: string,\n id: string,\n request: OrganizationUserAcceptRequest\n ): Promise;\n\n /**\n * Confirm an organization user that has accepted their invitation\n * @param organizationId - Identifier for the organization to confirm\n * @param id - Organization user identifier\n * @param request - Request details for confirming the user\n */\n abstract postOrganizationUserConfirm(\n organizationId: string,\n id: string,\n request: OrganizationUserConfirmRequest\n ): Promise;\n\n /**\n * Retrieve a list of the specified users' public keys\n * @param organizationId - Identifier for the organization to accept\n * @param ids - A list of organization user identifiers to retrieve public keys for\n */\n abstract postOrganizationUsersPublicKey(\n organizationId: string,\n ids: string[]\n ): Promise>;\n\n /**\n * Confirm many organization users that have accepted their invitations\n * @param organizationId - Identifier for the organization to confirm users\n * @param request - Bulk request details for confirming the user\n */\n abstract postOrganizationUserBulkConfirm(\n organizationId: string,\n request: OrganizationUserBulkConfirmRequest\n ): Promise>;\n\n /**\n * Update an organization users\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n * @param request - Request details for updating the user\n */\n abstract putOrganizationUser(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateRequest\n ): Promise;\n\n /**\n * Update an organization user's groups\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n * @param groupIds - List of group ids to associate the user with\n */\n abstract putOrganizationUserGroups(\n organizationId: string,\n id: string,\n groupIds: OrganizationUserUpdateGroupsRequest\n ): Promise;\n\n /**\n * Update an organization user's reset password enrollment\n * @param organizationId - Identifier for the organization the user belongs to\n * @param userId - Organization user identifier\n * @param request - Reset password enrollment details\n */\n abstract putOrganizationUserResetPasswordEnrollment(\n organizationId: string,\n userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest\n ): Promise;\n\n /**\n * Reset an organization user's password\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n * @param request - Reset password details\n */\n abstract putOrganizationUserResetPassword(\n organizationId: string,\n id: string,\n request: OrganizationUserResetPasswordRequest\n ): Promise;\n\n /**\n * Delete an organization user\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n */\n abstract deleteOrganizationUser(organizationId: string, id: string): Promise;\n\n /**\n * Delete many organization users\n * @param organizationId - Identifier for the organization the users belongs to\n * @param ids - List of organization user identifiers to delete\n * @return List of user ids, including both those that were successfully deleted and those that had an error\n */\n abstract deleteManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise>;\n\n /**\n * Revoke an organization user's access to the organization\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n */\n abstract revokeOrganizationUser(organizationId: string, id: string): Promise;\n\n /**\n * Revoke many organization users' access to the organization\n * @param organizationId - Identifier for the organization the users belongs to\n * @param ids - List of organization user identifiers to revoke\n * @return List of user ids, including both those that were successfully revoked and those that had an error\n */\n abstract revokeManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise>;\n\n /**\n * Restore an organization user's access to the organization\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n */\n abstract restoreOrganizationUser(organizationId: string, id: string): Promise;\n\n /**\n * Restore many organization users' access to the organization\n * @param organizationId - Identifier for the organization the users belongs to\n * @param ids - List of organization user identifiers to restore\n * @return List of user ids, including both those that were successfully restored and those that had an error\n */\n abstract restoreManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise>;\n}\n","export class OrganizationUserResetPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\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 selfHostedSyncLicense: (id: string) => 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.canViewAssignedCollections || org.canViewAllCollections || org.canManageGroups;\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 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 );\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","import { ClientType } from \"../enums/clientType\";\nimport { DeviceType } from \"../enums/deviceType\";\n\ninterface ToastOptions {\n timeout?: number;\n}\n\nexport abstract class PlatformUtilsService {\n getDevice: () => DeviceType;\n getDeviceString: () => string;\n getClientType: () => ClientType;\n isFirefox: () => boolean;\n isChrome: () => boolean;\n isEdge: () => boolean;\n isOpera: () => boolean;\n isVivaldi: () => boolean;\n isSafari: () => boolean;\n isMacAppStore: () => boolean;\n isViewOpen: () => Promise;\n launchUri: (uri: string, options?: any) => void;\n getApplicationVersion: () => Promise;\n getApplicationVersionNumber: () => Promise;\n supportsWebAuthn: (win: Window) => boolean;\n supportsDuo: () => boolean;\n showToast: (\n type: \"error\" | \"success\" | \"warning\" | \"info\",\n title: string,\n text: string | string[],\n options?: ToastOptions\n ) => void;\n showDialog: (\n body: string,\n title?: string,\n confirmText?: string,\n cancelText?: string,\n type?: string,\n bodyIsHtml?: boolean,\n target?: string\n ) => Promise;\n isDev: () => boolean;\n isSelfHost: () => boolean;\n copyToClipboard: (text: string, options?: any) => void | boolean;\n readFromClipboard: (options?: any) => Promise;\n supportsBiometric: () => Promise;\n authenticateBiometric: () => Promise;\n supportsSecureStorage: () => boolean;\n}\n","import { PolicyType } from \"../../enums/policyType\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/master-password-policy-options\";\nimport { PolicyRequest } from \"../../models/request/policy.request\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\n\nexport class PolicyApiServiceAbstraction {\n getPolicy: (organizationId: string, type: PolicyType) => Promise;\n getPolicies: (organizationId: string) => Promise>;\n getPoliciesByToken: (\n organizationId: string,\n token: string,\n email: string,\n organizationUserId: string\n ) => Promise>;\n getPoliciesByInvitedUser: (\n organizationId: string,\n userId: string\n ) => Promise>;\n getMasterPasswordPoliciesForInvitedUsers: (orgId: string) => Promise;\n putPolicy: (organizationId: string, type: PolicyType, request: PolicyRequest) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { PolicyType } from \"../../enums/policyType\";\nimport { PolicyData } from \"../../models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/master-password-policy-options\";\nimport { Policy } from \"../../models/domain/policy\";\nimport { ResetPasswordPolicyOptions } from \"../../models/domain/reset-password-policy-options\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\n\nexport abstract class PolicyService {\n policies$: Observable;\n masterPasswordPolicyOptions$: (policies?: Policy[]) => Observable;\n policyAppliesToActiveUser$: (\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean\n ) => Observable;\n\n /**\n * @deprecated Do not call this, use the policies$ observable collection\n */\n getAll: (type?: PolicyType, userId?: string) => Promise;\n evaluateMasterPassword: (\n passwordStrength: number,\n newPassword: string,\n enforcedPolicyOptions?: MasterPasswordPolicyOptions\n ) => boolean;\n getResetPasswordPolicyOptions: (\n policies: Policy[],\n orgId: string\n ) => [ResetPasswordPolicyOptions, boolean];\n mapPoliciesFromToken: (policiesResponse: ListResponse) => Policy[];\n policyAppliesToUser: (\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean,\n userId?: string\n ) => Promise;\n}\n\nexport abstract class InternalPolicyService extends PolicyService {\n upsert: (policy: PolicyData) => Promise;\n replace: (policies: { [id: string]: PolicyData }) => Promise;\n clear: (userId?: string) => Promise;\n}\n","import { ProviderData } from \"../models/data/provider.data\";\nimport { Provider } from \"../models/domain/provider\";\n\nexport abstract class ProviderService {\n get: (id: string) => Promise;\n getAll: () => Promise;\n save: (providers: { [id: string]: ProviderData }) => Promise;\n}\n","import { SendView } from \"../models/view/send.view\";\nimport { CipherView } from \"../vault/models/view/cipher.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 { KdfType } from \"../enums/kdfType\";\nimport { ThemeType } from \"../enums/themeType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { EncryptedOrganizationKeyData } from \"../models/data/encrypted-organization-key.data\";\nimport { EventData } from \"../models/data/event.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 { KdfConfig } from \"../models/domain/kdf-config\";\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 { CollectionView } from \"../models/view/collection.view\";\nimport { SendView } from \"../models/view/send.view\";\nimport { CipherData } from \"../vault/models/data/cipher.data\";\nimport { FolderData } from \"../vault/models/data/folder.data\";\nimport { LocalData } from \"../vault/models/data/local.data\";\nimport { CipherView } from \"../vault/models/view/cipher.view\";\n\nexport abstract class StateService {\n accounts$: Observable<{ [userId: string]: T }>;\n activeAccount$: Observable;\n activeAccountUnlocked$: Observable;\n\n addAccount: (account: T) => Promise;\n setActiveUser: (userId: string) => Promise;\n clean: (options?: StorageOptions) => Promise;\n init: () => Promise;\n\n getAccessToken: (options?: StorageOptions) => Promise;\n setAccessToken: (value: string, options?: StorageOptions) => Promise;\n getAddEditCipherInfo: (options?: StorageOptions) => Promise;\n setAddEditCipherInfo: (value: any, options?: StorageOptions) => Promise;\n getAlwaysShowDock: (options?: StorageOptions) => Promise;\n setAlwaysShowDock: (value: boolean, options?: StorageOptions) => Promise;\n getApiKeyClientId: (options?: StorageOptions) => Promise;\n setApiKeyClientId: (value: string, options?: StorageOptions) => Promise;\n getApiKeyClientSecret: (options?: StorageOptions) => Promise;\n setApiKeyClientSecret: (value: string, options?: StorageOptions) => Promise;\n getAutoConfirmFingerPrints: (options?: StorageOptions) => Promise;\n setAutoConfirmFingerprints: (value: boolean, options?: StorageOptions) => Promise;\n getAutoFillOnPageLoadDefault: (options?: StorageOptions) => Promise;\n setAutoFillOnPageLoadDefault: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricAwaitingAcceptance: (options?: StorageOptions) => Promise;\n setBiometricAwaitingAcceptance: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricFingerprintValidated: (options?: StorageOptions) => Promise;\n setBiometricFingerprintValidated: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricText: (options?: StorageOptions) => Promise;\n setBiometricText: (value: string, options?: StorageOptions) => Promise;\n getBiometricUnlock: (options?: StorageOptions) => Promise;\n setBiometricUnlock: (value: boolean, options?: StorageOptions) => Promise;\n getCanAccessPremium: (options?: StorageOptions) => Promise;\n getHasPremiumPersonally: (options?: StorageOptions) => Promise;\n setHasPremiumPersonally: (value: boolean, options?: StorageOptions) => Promise;\n setHasPremiumFromOrganization: (value: boolean, options?: StorageOptions) => Promise;\n getHasPremiumFromOrganization: (options?: StorageOptions) => Promise;\n getClearClipboard: (options?: StorageOptions) => Promise;\n setClearClipboard: (value: number, options?: StorageOptions) => Promise;\n getCollapsedGroupings: (options?: StorageOptions) => Promise;\n setCollapsedGroupings: (value: string[], options?: StorageOptions) => Promise;\n getConvertAccountToKeyConnector: (options?: StorageOptions) => Promise;\n setConvertAccountToKeyConnector: (value: boolean, options?: StorageOptions) => Promise;\n getCryptoMasterKey: (options?: StorageOptions) => Promise;\n setCryptoMasterKey: (value: SymmetricCryptoKey, options?: StorageOptions) => Promise;\n getCryptoMasterKeyAuto: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyAuto: (value: string, options?: StorageOptions) => Promise;\n getCryptoMasterKeyB64: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyB64: (value: string, options?: StorageOptions) => Promise;\n getCryptoMasterKeyBiometric: (options?: StorageOptions) => Promise;\n hasCryptoMasterKeyBiometric: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyBiometric: (value: string, options?: StorageOptions) => Promise;\n getDecryptedCiphers: (options?: StorageOptions) => Promise;\n setDecryptedCiphers: (value: CipherView[], options?: StorageOptions) => Promise;\n getDecryptedCollections: (options?: StorageOptions) => Promise;\n setDecryptedCollections: (value: CollectionView[], options?: StorageOptions) => Promise;\n getDecryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise;\n setDecryptedCryptoSymmetricKey: (\n value: SymmetricCryptoKey,\n options?: StorageOptions\n ) => Promise;\n getDecryptedOrganizationKeys: (\n options?: StorageOptions\n ) => Promise>;\n setDecryptedOrganizationKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n getDecryptedPasswordGenerationHistory: (\n options?: StorageOptions\n ) => Promise;\n setDecryptedPasswordGenerationHistory: (\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ) => Promise;\n getDecryptedPinProtected: (options?: StorageOptions) => Promise;\n setDecryptedPinProtected: (value: EncString, options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this, use PolicyService\n */\n getDecryptedPolicies: (options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this, use PolicyService\n */\n setDecryptedPolicies: (value: Policy[], options?: StorageOptions) => Promise;\n getDecryptedPrivateKey: (options?: StorageOptions) => Promise;\n setDecryptedPrivateKey: (value: ArrayBuffer, options?: StorageOptions) => Promise;\n getDecryptedProviderKeys: (options?: StorageOptions) => Promise>;\n setDecryptedProviderKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n getDecryptedSends: (options?: StorageOptions) => Promise;\n setDecryptedSends: (value: SendView[], options?: StorageOptions) => Promise;\n getDefaultUriMatch: (options?: StorageOptions) => Promise;\n setDefaultUriMatch: (value: UriMatchType, options?: StorageOptions) => Promise;\n getDisableAddLoginNotification: (options?: StorageOptions) => Promise;\n setDisableAddLoginNotification: (value: boolean, options?: StorageOptions) => Promise;\n getDisableAutoBiometricsPrompt: (options?: StorageOptions) => Promise;\n setDisableAutoBiometricsPrompt: (value: boolean, options?: StorageOptions) => Promise;\n getDisableAutoTotpCopy: (options?: StorageOptions) => Promise;\n setDisableAutoTotpCopy: (value: boolean, options?: StorageOptions) => Promise;\n getDisableBadgeCounter: (options?: StorageOptions) => Promise;\n setDisableBadgeCounter: (value: boolean, options?: StorageOptions) => Promise;\n getDisableChangedPasswordNotification: (options?: StorageOptions) => Promise;\n setDisableChangedPasswordNotification: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getDisableContextMenuItem: (options?: StorageOptions) => Promise;\n setDisableContextMenuItem: (value: boolean, options?: StorageOptions) => Promise;\n getDisableFavicon: (options?: StorageOptions) => Promise;\n setDisableFavicon: (value: boolean, options?: StorageOptions) => Promise;\n getDisableGa: (options?: StorageOptions) => Promise;\n setDisableGa: (value: boolean, options?: StorageOptions) => Promise;\n getDontShowCardsCurrentTab: (options?: StorageOptions) => Promise;\n setDontShowCardsCurrentTab: (value: boolean, options?: StorageOptions) => Promise;\n getDontShowIdentitiesCurrentTab: (options?: StorageOptions) => Promise;\n setDontShowIdentitiesCurrentTab: (value: boolean, options?: StorageOptions) => Promise;\n getDuckDuckGoSharedKey: (options?: StorageOptions) => Promise;\n setDuckDuckGoSharedKey: (value: string, options?: StorageOptions) => Promise;\n getEmail: (options?: StorageOptions) => Promise;\n setEmail: (value: string, options?: StorageOptions) => Promise;\n getEmailVerified: (options?: StorageOptions) => Promise;\n setEmailVerified: (value: boolean, options?: StorageOptions) => Promise;\n getEnableAlwaysOnTop: (options?: StorageOptions) => Promise;\n setEnableAlwaysOnTop: (value: boolean, options?: StorageOptions) => Promise;\n getEnableAutoFillOnPageLoad: (options?: StorageOptions) => Promise;\n setEnableAutoFillOnPageLoad: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBiometric: (options?: StorageOptions) => Promise;\n setEnableBiometric: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBrowserIntegration: (options?: StorageOptions) => Promise;\n setEnableBrowserIntegration: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBrowserIntegrationFingerprint: (options?: StorageOptions) => Promise;\n setEnableBrowserIntegrationFingerprint: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getEnableCloseToTray: (options?: StorageOptions) => Promise;\n setEnableCloseToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableDuckDuckGoBrowserIntegration: (options?: StorageOptions) => Promise;\n setEnableDuckDuckGoBrowserIntegration: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getEnableFullWidth: (options?: StorageOptions) => Promise;\n setEnableFullWidth: (value: boolean, options?: StorageOptions) => Promise;\n getEnableMinimizeToTray: (options?: StorageOptions) => Promise;\n setEnableMinimizeToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableStartToTray: (options?: StorageOptions) => Promise;\n setEnableStartToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableTray: (options?: StorageOptions) => Promise;\n setEnableTray: (value: boolean, options?: StorageOptions) => Promise;\n getEncryptedCiphers: (options?: StorageOptions) => Promise<{ [id: string]: CipherData }>;\n setEncryptedCiphers: (\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedCollections: (options?: StorageOptions) => Promise<{ [id: string]: CollectionData }>;\n setEncryptedCollections: (\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise;\n setEncryptedCryptoSymmetricKey: (value: string, options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use FolderService\n */\n getEncryptedFolders: (options?: StorageOptions) => Promise<{ [id: string]: FolderData }>;\n /**\n * @deprecated Do not call this directly, use FolderService\n */\n setEncryptedFolders: (\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedOrganizationKeys: (\n options?: StorageOptions\n ) => Promise<{ [orgId: string]: EncryptedOrganizationKeyData }>;\n setEncryptedOrganizationKeys: (\n value: { [orgId: string]: EncryptedOrganizationKeyData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedPasswordGenerationHistory: (\n options?: StorageOptions\n ) => Promise;\n setEncryptedPasswordGenerationHistory: (\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ) => Promise;\n getEncryptedPinProtected: (options?: StorageOptions) => Promise;\n setEncryptedPinProtected: (value: string, options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use PolicyService\n */\n getEncryptedPolicies: (options?: StorageOptions) => Promise<{ [id: string]: PolicyData }>;\n /**\n * @deprecated Do not call this directly, use PolicyService\n */\n setEncryptedPolicies: (\n value: { [id: string]: PolicyData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedPrivateKey: (options?: StorageOptions) => Promise;\n setEncryptedPrivateKey: (value: string, options?: StorageOptions) => Promise;\n getEncryptedProviderKeys: (options?: StorageOptions) => Promise;\n setEncryptedProviderKeys: (value: any, options?: StorageOptions) => Promise;\n getEncryptedSends: (options?: StorageOptions) => Promise<{ [id: string]: SendData }>;\n setEncryptedSends: (value: { [id: string]: SendData }, options?: StorageOptions) => Promise;\n getEntityId: (options?: StorageOptions) => Promise;\n setEntityId: (value: string, options?: StorageOptions) => Promise;\n getEntityType: (options?: StorageOptions) => Promise;\n setEntityType: (value: string, options?: StorageOptions) => Promise;\n getEnvironmentUrls: (options?: StorageOptions) => Promise;\n setEnvironmentUrls: (value: EnvironmentUrls, options?: StorageOptions) => Promise;\n getEquivalentDomains: (options?: StorageOptions) => Promise;\n setEquivalentDomains: (value: string, options?: StorageOptions) => Promise;\n getEventCollection: (options?: StorageOptions) => Promise;\n setEventCollection: (value: EventData[], options?: StorageOptions) => Promise;\n getEverBeenUnlocked: (options?: StorageOptions) => Promise;\n setEverBeenUnlocked: (value: boolean, options?: StorageOptions) => Promise;\n getForcePasswordReset: (options?: StorageOptions) => Promise;\n setForcePasswordReset: (value: boolean, options?: StorageOptions) => Promise;\n getInstalledVersion: (options?: StorageOptions) => Promise;\n setInstalledVersion: (value: string, options?: StorageOptions) => Promise;\n getIsAuthenticated: (options?: StorageOptions) => Promise;\n getKdfConfig: (options?: StorageOptions) => Promise;\n setKdfConfig: (kdfConfig: KdfConfig, 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 getApproveLoginRequests: (options?: StorageOptions) => Promise;\n setApproveLoginRequests: (value: boolean, options?: StorageOptions) => Promise;\n getStateVersion: () => Promise;\n setStateVersion: (value: number) => Promise;\n getWindow: () => Promise;\n setWindow: (value: WindowState) => Promise;\n /**\n * @deprecated Do not call this directly, use ConfigService\n */\n getServerConfig: (options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use ConfigService\n */\n setServerConfig: (value: ServerConfigData, options?: StorageOptions) => Promise;\n\n getAvatarColor: (options?: StorageOptions) => Promise;\n setAvatarColor: (value: string, options?: StorageOptions) => Promise;\n}\n","export abstract class StateMigrationService {\n needsMigration: () => Promise;\n migrate: () => Promise;\n}\n","import { MemoryStorageOptions, StorageOptions } from \"../models/domain/storage-options\";\n\nexport abstract class AbstractStorageService {\n abstract get(key: string, options?: StorageOptions): Promise;\n abstract has(key: string, options?: StorageOptions): Promise;\n abstract save(key: string, obj: T, options?: StorageOptions): Promise;\n abstract remove(key: string, options?: StorageOptions): Promise;\n}\n\nexport abstract class AbstractMemoryStorageService extends AbstractStorageService {\n // Used to identify the service in the session sync decorator framework\n static readonly TYPE = \"MemoryStorageService\";\n readonly type = AbstractMemoryStorageService.TYPE;\n\n abstract get(key: string, options?: MemoryStorageOptions): Promise;\n abstract getBypassCache(key: string, options?: MemoryStorageOptions): Promise;\n}\n","import { IdentityTokenResponse } from \"../models/response/identity-token.response\";\n\nexport abstract class TokenService {\n setTokens: (\n accessToken: string,\n refreshToken: string,\n clientIdClientSecret: [string, string]\n ) => Promise;\n setToken: (token: string) => Promise;\n getToken: () => Promise;\n setRefreshToken: (refreshToken: string) => Promise;\n getRefreshToken: () => Promise;\n setClientId: (clientId: string) => Promise;\n getClientId: () => Promise;\n setClientSecret: (clientSecret: string) => Promise;\n getClientSecret: () => Promise;\n setTwoFactorToken: (tokenResponse: IdentityTokenResponse) => Promise;\n getTwoFactorToken: () => Promise;\n clearTwoFactorToken: () => Promise;\n clearToken: (userId?: string) => Promise;\n decodeToken: (token?: string) => any;\n getTokenExpirationDate: () => Promise;\n tokenSecondsRemaining: (offsetSeconds?: number) => Promise;\n tokenNeedsRefresh: (minutes?: number) => Promise;\n getUserId: () => Promise;\n getEmail: () => Promise;\n getEmailVerified: () => Promise;\n getName: () => Promise;\n getIssuer: () => Promise;\n getIsExternal: () => Promise;\n}\n","export abstract class TotpService {\n getCode: (key: string) => Promise;\n getTimeInterval: (key: string) => number;\n}\n","import { TwoFactorProviderType } from \"../enums/twoFactorProviderType\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identity-two-factor.response\";\n\nexport interface TwoFactorProviderDetails {\n type: TwoFactorProviderType;\n name: string;\n description: string;\n priority: number;\n sort: number;\n premium: boolean;\n}\n\nexport abstract class TwoFactorService {\n init: () => void;\n getSupportedProviders: (win: Window) => TwoFactorProviderDetails[];\n getDefaultProvider: (webAuthnSupported: boolean) => TwoFactorProviderType;\n setSelectedProvider: (type: TwoFactorProviderType) => void;\n clearSelectedProvider: () => void;\n\n setProviders: (response: IdentityTwoFactorResponse) => void;\n clearProviders: () => void;\n getProviders: () => Map;\n}\n","import { SecretVerificationRequest } from \"../../models/request/secret-verification.request\";\nimport { Verification } from \"../../types/verification\";\n\nexport abstract class UserVerificationService {\n buildRequest: (\n verification: Verification,\n requestClass?: new () => T,\n alreadyHashed?: boolean\n ) => Promise;\n verifyUser: (verification: Verification) => Promise;\n requestOTP: () => Promise;\n}\n","export abstract class UsernameGenerationService {\n generateUsername: (options: any) => Promise;\n generateWord: (options: any) => Promise;\n generateSubaddress: (options: any) => Promise;\n generateCatchall: (options: any) => Promise;\n generateForwarded: (options: any) => Promise;\n getOptions: () => Promise;\n saveOptions: (options: any) => Promise;\n}\n","export abstract class ValidationService {\n showError: (data: any) => string[];\n}\n","export abstract class VaultTimeoutService {\n checkVaultTimeout: () => Promise;\n lock: (userId?: string) => Promise;\n logOut: (userId?: string) => Promise;\n}\n","export abstract class VaultTimeoutSettingsService {\n setVaultTimeoutOptions: (vaultTimeout: number, vaultTimeoutAction: string) => Promise;\n getVaultTimeout: (userId?: string) => Promise;\n isPinLockSet: () => Promise<[boolean, boolean]>;\n isBiometricLockSet: () => Promise;\n clear: (userId?: string) => Promise;\n}\n","export enum AuthenticationStatus {\n LoggedOut = 0,\n Locked = 1,\n Unlocked = 2,\n}\n","export enum AuthenticationType {\n Password = 0,\n Sso = 1,\n UserApi = 2,\n Passwordless = 3,\n}\n","export enum DeviceType {\n Android = 0,\n iOS = 1,\n ChromeExtension = 2,\n FirefoxExtension = 3,\n OperaExtension = 4,\n EdgeExtension = 5,\n WindowsDesktop = 6,\n MacOsDesktop = 7,\n LinuxDesktop = 8,\n ChromeBrowser = 9,\n FirefoxBrowser = 10,\n OperaBrowser = 11,\n EdgeBrowser = 12,\n IEBrowser = 13,\n UnknownBrowser = 14,\n AndroidAmazon = 15,\n UWP = 16,\n SafariBrowser = 17,\n VivaldiBrowser = 18,\n VivaldiExtension = 19,\n SafariExtension = 20,\n}\n","export enum EncryptionType {\n AesCbc256_B64 = 0,\n AesCbc128_HmacSha256_B64 = 1,\n AesCbc256_HmacSha256_B64 = 2,\n Rsa2048_OaepSha256_B64 = 3,\n Rsa2048_OaepSha1_B64 = 4,\n Rsa2048_OaepSha256_HmacSha256_B64 = 5,\n Rsa2048_OaepSha1_HmacSha256_B64 = 6,\n}\n","export enum EventType {\n User_LoggedIn = 1000,\n User_ChangedPassword = 1001,\n User_Updated2fa = 1002,\n User_Disabled2fa = 1003,\n User_Recovered2fa = 1004,\n User_FailedLogIn = 1005,\n User_FailedLogIn2fa = 1006,\n User_ClientExportedVault = 1007,\n User_UpdatedTempPassword = 1008,\n User_MigratedKeyToKeyConnector = 1009,\n\n Cipher_Created = 1100,\n Cipher_Updated = 1101,\n Cipher_Deleted = 1102,\n Cipher_AttachmentCreated = 1103,\n Cipher_AttachmentDeleted = 1104,\n Cipher_Shared = 1105,\n Cipher_UpdatedCollections = 1106,\n Cipher_ClientViewed = 1107,\n Cipher_ClientToggledPasswordVisible = 1108,\n Cipher_ClientToggledHiddenFieldVisible = 1109,\n Cipher_ClientToggledCardCodeVisible = 1110,\n Cipher_ClientCopiedPassword = 1111,\n Cipher_ClientCopiedHiddenField = 1112,\n Cipher_ClientCopiedCardCode = 1113,\n Cipher_ClientAutofilled = 1114,\n Cipher_SoftDeleted = 1115,\n Cipher_Restored = 1116,\n Cipher_ClientToggledCardNumberVisible = 1117,\n\n Collection_Created = 1300,\n Collection_Updated = 1301,\n Collection_Deleted = 1302,\n\n Group_Created = 1400,\n Group_Updated = 1401,\n Group_Deleted = 1402,\n\n OrganizationUser_Invited = 1500,\n OrganizationUser_Confirmed = 1501,\n OrganizationUser_Updated = 1502,\n OrganizationUser_Removed = 1503,\n OrganizationUser_UpdatedGroups = 1504,\n OrganizationUser_UnlinkedSso = 1505,\n OrganizationUser_ResetPassword_Enroll = 1506,\n OrganizationUser_ResetPassword_Withdraw = 1507,\n OrganizationUser_AdminResetPassword = 1508,\n OrganizationUser_ResetSsoLink = 1509,\n OrganizationUser_FirstSsoLogin = 1510,\n OrganizationUser_Revoked = 1511,\n OrganizationUser_Restored = 1512,\n\n Organization_Updated = 1600,\n Organization_PurgedVault = 1601,\n Organization_ClientExportedVault = 1602,\n Organization_VaultAccessed = 1603,\n Organization_EnabledSso = 1604,\n Organization_DisabledSso = 1605,\n Organization_EnabledKeyConnector = 1606,\n Organization_DisabledKeyConnector = 1607,\n Organization_SponsorshipsSynced = 1608,\n\n Policy_Updated = 1700,\n\n ProviderUser_Invited = 1800,\n ProviderUser_Confirmed = 1801,\n ProviderUser_Updated = 1802,\n ProviderUser_Removed = 1803,\n\n ProviderOrganization_Created = 1900,\n ProviderOrganization_Added = 1901,\n ProviderOrganization_Removed = 1902,\n ProviderOrganization_VaultAccessed = 1903,\n}\n","export enum FieldType {\n Text = 0,\n Hidden = 1,\n Boolean = 2,\n Linked = 3,\n}\n","export enum HashPurpose {\n ServerAuthorization = 1,\n LocalAuthorization = 2,\n}\n","export enum HtmlStorageLocation {\n Local = \"local\",\n Memory = \"memory\",\n Session = \"session\",\n}\n","import { KdfConfig } from \"../models/domain/kdf-config\";\n\nexport enum KdfType {\n PBKDF2_SHA256 = 0,\n Argon2id = 1,\n}\n\nexport const DEFAULT_ARGON2_MEMORY = 64;\nexport const DEFAULT_ARGON2_PARALLELISM = 4;\nexport const DEFAULT_ARGON2_ITERATIONS = 3;\n\nexport const DEFAULT_KDF_TYPE = KdfType.PBKDF2_SHA256;\nexport const DEFAULT_PBKDF2_ITERATIONS = 600000;\nexport const DEFAULT_KDF_CONFIG = new KdfConfig(DEFAULT_PBKDF2_ITERATIONS);\nexport const SEND_KDF_ITERATIONS = 100000;\n","export enum KeySuffixOptions {\n Auto = \"auto\",\n Biometric = \"biometric\",\n}\n","export type LinkedIdType = LoginLinkedId | CardLinkedId | IdentityLinkedId;\n\n// LoginView\nexport enum LoginLinkedId {\n Username = 100,\n Password = 101,\n}\n\n// CardView\nexport enum CardLinkedId {\n CardholderName = 300,\n ExpMonth = 301,\n ExpYear = 302,\n Code = 303,\n Brand = 304,\n Number = 305,\n}\n\n// IdentityView\nexport enum IdentityLinkedId {\n Title = 400,\n MiddleName = 401,\n Address1 = 402,\n Address2 = 403,\n Address3 = 404,\n City = 405,\n State = 406,\n PostalCode = 407,\n Country = 408,\n Company = 409,\n Email = 410,\n Phone = 411,\n Ssn = 412,\n Username = 413,\n PassportNumber = 414,\n LicenseNumber = 415,\n FirstName = 416,\n LastName = 417,\n FullName = 418,\n}\n","export enum LogLevelType {\n Debug,\n Info,\n Warning,\n Error,\n}\n","export enum OrganizationApiKeyType {\n Default = 0,\n BillingSync = 1,\n Scim = 2,\n}\n","export enum OrganizationConnectionType {\n CloudBillingSync = 1,\n Scim = 2,\n}\n","export enum OrganizationUserStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n Revoked = -1,\n}\n","export enum OrganizationUserType {\n Owner = 0,\n Admin = 1,\n User = 2,\n Manager = 3,\n Custom = 4,\n}\n","export enum PaymentMethodType {\n Card = 0,\n BankAccount = 1,\n PayPal = 2,\n BitPay = 3,\n Credit = 4,\n WireTransfer = 5,\n AppleInApp = 6,\n GoogleInApp = 7,\n Check = 8,\n}\n","export enum PlanType {\n Free = 0,\n FamiliesAnnually2019 = 1,\n TeamsMonthly2019 = 2,\n TeamsAnnually2019 = 3,\n EnterpriseMonthly2019 = 4,\n EnterpriseAnnually2019 = 5,\n Custom = 6,\n FamiliesAnnually = 7,\n TeamsMonthly = 8,\n TeamsAnnually = 9,\n EnterpriseMonthly = 10,\n EnterpriseAnnually = 11,\n}\n","export enum PolicyType {\n TwoFactorAuthentication = 0, // Requires users to have 2fa enabled\n MasterPassword = 1, // Sets minimum requirements for master password complexity\n PasswordGenerator = 2, // Sets minimum requirements/default type for generated passwords/passphrases\n SingleOrg = 3, // Allows users to only be apart of one organization\n RequireSso = 4, // Requires users to authenticate with SSO\n PersonalOwnership = 5, // Disables personal vault ownership for adding/cloning items\n DisableSend = 6, // Disables the ability to create and edit Bitwarden Sends\n SendOptions = 7, // Sets restrictions or defaults for Bitwarden Sends\n ResetPassword = 8, // Allows orgs to use reset password : also can enable auto-enrollment during invite flow\n MaximumVaultTimeout = 9, // Sets the maximum allowed vault timeout\n DisablePersonalVaultExport = 10, // Disable personal vault export\n}\n","export enum ProductType {\n Free = 0,\n Families = 1,\n Teams = 2,\n Enterprise = 3,\n}\n","export enum 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","export enum SecureNoteType {\n Generic = 0,\n}\n","export enum SendType {\n Text = 0,\n File = 1,\n}\n","export enum SsoType {\n None = 0,\n OpenIdConnect = 1,\n Saml2 = 2,\n}\n\nexport enum OpenIdConnectRedirectBehavior {\n RedirectGet = 0,\n FormPost = 1,\n}\n\nexport enum Saml2BindingType {\n HttpRedirect = 1,\n HttpPost = 2,\n}\n\nexport enum Saml2NameIdFormat {\n NotConfigured = 0,\n Unspecified = 1,\n EmailAddress = 2,\n X509SubjectName = 3,\n WindowsDomainQualifiedName = 4,\n KerberosPrincipalName = 5,\n EntityIdentifier = 6,\n Persistent = 7,\n Transient = 8,\n}\n\nexport enum Saml2SigningBehavior {\n IfIdpWantAuthnRequestsSigned = 0,\n Always = 1,\n Never = 3,\n}\n","export enum ThemeType {\n System = \"system\",\n Light = \"light\",\n Dark = \"dark\",\n Nord = \"nord\",\n SolarizedDark = \"solarizedDark\",\n}\n","export enum TwoFactorProviderType {\n Authenticator = 0,\n Email = 1,\n Duo = 2,\n Yubikey = 3,\n U2f = 4,\n Remember = 5,\n OrganizationDuo = 6,\n WebAuthn = 7,\n}\n","export enum UriMatchType {\n Domain = 0,\n Host = 1,\n StartsWith = 2,\n Exact = 3,\n RegularExpression = 4,\n Never = 5,\n}\n","export enum VerificationType {\n MasterPassword = 0,\n OTP = 1,\n}\n","// required to avoid linting errors when there are no flags\n/* eslint-disable @typescript-eslint/ban-types */\nexport type SharedFlags = {\n multithreadDecryption: boolean;\n showPasswordless?: boolean;\n};\n\n// required to avoid linting errors when there are no flags\n/* eslint-disable @typescript-eslint/ban-types */\nexport type SharedDevFlags = {};\n\nfunction getFlags(envFlags: string | T): T {\n if (typeof envFlags === \"string\") {\n return JSON.parse(envFlags) as T;\n } else {\n return envFlags as T;\n }\n}\n\n/**\n * Gets the value of a feature flag from environment.\n * All flags default to \"on\" (true).\n * Only use for shared code in `libs`, otherwise use the client-specific function.\n * @param flag The name of the feature flag to check\n * @returns The value of the flag\n */\nexport function flagEnabled(flag: keyof Flags): boolean {\n const flags = getFlags(process.env.FLAGS);\n return flags[flag] == null || !!flags[flag];\n}\n\n/**\n * Gets the value of a dev flag from environment.\n * Will always return false unless in development.\n * Only use for shared code in `libs`, otherwise use the client-specific function.\n * @param flag The name of the dev flag to check\n * @returns The value of the flag\n */\nexport function devFlagEnabled(flag: keyof DevFlags): boolean {\n if (process.env.ENV !== \"development\") {\n return false;\n }\n\n const devFlags = getFlags(process.env.DEV_FLAGS);\n return devFlags[flag] == null || !!devFlags[flag];\n}\n\n/**\n * Gets the value of a dev flag from environment.\n * Will always return false unless in development.\n * @param flag The name of the dev flag to check\n * @returns The value of the flag\n * @throws Error if the flag is not enabled\n */\nexport function devFlagValue(\n flag: keyof DevFlags\n): DevFlags[keyof DevFlags] {\n if (!devFlagEnabled(flag)) {\n throw new Error(`This method should not be called, it is protected by a disabled dev flag.`);\n }\n\n const devFlags = getFlags(process.env.DEV_FLAGS);\n return devFlags[flag];\n}\n","import { LinkedIdType } from \"../enums/linkedIdType\";\nimport { ItemView } from \"../vault/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","import { ITreeNodeObject, TreeNode } from \"../models/domain/tree-node\";\n\nexport class ServiceUtils {\n /**\n * Recursively adds a node to nodeTree\n * @param {TreeNode[]} nodeTree - An array of TreeNodes that the node will be added to\n * @param {number} partIndex - Index of the `parts` array that is being processed\n * @param {string[]} parts - Array of strings that represent the path to the `obj` node\n * @param {ITreeNodeObject} obj - The node to be added to the tree\n * @param {ITreeNodeObject} parent - The parent node of the `obj` node\n * @param {string} delimiter - The delimiter used to split the path string, will be used to combine the path for missing nodes\n */\n static nestedTraverse(\n nodeTree: TreeNode[],\n partIndex: number,\n parts: string[],\n obj: ITreeNodeObject,\n parent: TreeNode | undefined,\n delimiter: string\n ) {\n if (parts.length <= partIndex) {\n return;\n }\n\n const end: boolean = partIndex === parts.length - 1;\n const partName: string = parts[partIndex];\n\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.name !== partName) {\n continue;\n }\n if (end && nodeTree[i].node.id !== obj.id) {\n // Another node exists with the same name as the node being added\n nodeTree.push(new TreeNode(obj, parent, partName));\n return;\n }\n // Move down the tree to the next level\n ServiceUtils.nestedTraverse(\n nodeTree[i].children,\n partIndex + 1,\n parts,\n obj,\n nodeTree[i],\n delimiter\n );\n return;\n }\n\n // If there's no node here with the same name...\n if (nodeTree.filter((n) => n.node.name === partName).length === 0) {\n // And we're at the end of the path given, add the node\n if (end) {\n nodeTree.push(new TreeNode(obj, parent, partName));\n return;\n }\n // And we're not at the end of the path, combine the current name with the next name\n // 1, *1.2, 1.2.1 becomes\n // 1, *1.2/1.2.1\n const newPartName = partName + 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 /**\n * Searches a tree for a node with a matching `id`\n * @param {TreeNode} nodeTree - A single TreeNode branch that will be searched\n * @param {string} id - The id of the node to be found\n * @returns {TreeNode} The node with a matching `id`\n */\n static getTreeNodeObject(\n nodeTree: TreeNode,\n id: string\n ): TreeNode {\n if (nodeTree.node.id === id) {\n return nodeTree;\n }\n for (let i = 0; i < nodeTree.children.length; i++) {\n if (nodeTree.children[i].children != null) {\n const node = ServiceUtils.getTreeNodeObject(nodeTree.children[i], id);\n if (node !== null) {\n return node;\n }\n }\n }\n return null;\n }\n\n /**\n * Searches an array of tree nodes for a node with a matching `id`\n * @param {TreeNode} nodeTree - An array of TreeNode branches that will be searched\n * @param {string} id - The id of the node to be found\n * @returns {TreeNode} The node with a matching `id`\n */\n static getTreeNodeObjectFromList(\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.getTreeNodeObjectFromList(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 * as path from \"path\";\n\nimport { getHostname, parse } from \"tldts\";\nimport { Merge } from \"type-fest\";\n\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { EncryptService } from \"../abstractions/encrypt.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\n\nconst nodeURL = typeof window === \"undefined\" ? require(\"url\") : null;\n\ndeclare global {\n /* eslint-disable-next-line no-var */\n var bitwardenContainerService: BitwardenContainerService;\n}\n\ninterface BitwardenContainerService {\n getCryptoService: () => CryptoService;\n getEncryptService: () => EncryptService;\n}\n\nexport class Utils {\n static inited = false;\n static isNode = false;\n static isBrowser = true;\n static isMobileBrowser = false;\n static isAppleMobileBrowser = false;\n static global: typeof global = null;\n // Transpiled version of /\\p{Emoji_Presentation}/gu using https://mothereff.in/regexpu. Used for compatability in older browsers.\n static regexpEmojiPresentation =\n /(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])/g;\n static readonly validHosts: string[] = [\"localhost\"];\n\n static init() {\n if (Utils.inited) {\n return;\n }\n\n Utils.inited = true;\n Utils.isNode =\n typeof process !== \"undefined\" &&\n (process as any).release != null &&\n (process as any).release.name === \"node\";\n Utils.isBrowser = typeof window !== \"undefined\";\n\n Utils.isMobileBrowser = Utils.isBrowser && this.isMobile(window);\n Utils.isAppleMobileBrowser = Utils.isBrowser && this.isAppleMobile(window);\n\n if (Utils.isNode) {\n Utils.global = global;\n } else if (Utils.isBrowser) {\n Utils.global = window;\n } else {\n // If it's not browser or node then it must be a service worker\n Utils.global = self;\n }\n }\n\n static fromB64ToArray(str: string): Uint8Array {\n if (str == null) {\n return null;\n }\n\n if (Utils.isNode) {\n return new Uint8Array(Buffer.from(str, \"base64\"));\n } else {\n const binaryString = Utils.global.atob(str);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n }\n }\n\n static fromUrlB64ToArray(str: string): Uint8Array {\n return Utils.fromB64ToArray(Utils.fromUrlB64ToB64(str));\n }\n\n static fromHexToArray(str: string): Uint8Array {\n if (Utils.isNode) {\n return new Uint8Array(Buffer.from(str, \"hex\"));\n } else {\n const bytes = new Uint8Array(str.length / 2);\n for (let i = 0; i < str.length; i += 2) {\n bytes[i / 2] = parseInt(str.substr(i, 2), 16);\n }\n return bytes;\n }\n }\n\n static fromUtf8ToArray(str: string): Uint8Array {\n if (Utils.isNode) {\n return new Uint8Array(Buffer.from(str, \"utf8\"));\n } else {\n const strUtf8 = unescape(encodeURIComponent(str));\n const arr = new Uint8Array(strUtf8.length);\n for (let i = 0; i < strUtf8.length; i++) {\n arr[i] = strUtf8.charCodeAt(i);\n }\n return arr;\n }\n }\n\n static fromByteStringToArray(str: string): Uint8Array {\n if (str == null) {\n return null;\n }\n const arr = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n return arr;\n }\n\n static fromBufferToB64(buffer: ArrayBuffer): string {\n if (buffer == null) {\n return null;\n }\n if (Utils.isNode) {\n return Buffer.from(buffer).toString(\"base64\");\n } else {\n let binary = \"\";\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return Utils.global.btoa(binary);\n }\n }\n\n static fromBufferToUrlB64(buffer: ArrayBuffer): string {\n return Utils.fromB64toUrlB64(Utils.fromBufferToB64(buffer));\n }\n\n static fromB64toUrlB64(b64Str: string) {\n return b64Str.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n }\n\n static fromBufferToUtf8(buffer: ArrayBuffer): string {\n if (Utils.isNode) {\n return Buffer.from(buffer).toString(\"utf8\");\n } else {\n const bytes = new Uint8Array(buffer);\n const encodedString = String.fromCharCode.apply(null, bytes);\n return decodeURIComponent(escape(encodedString));\n }\n }\n\n static fromBufferToByteString(buffer: ArrayBuffer): string {\n return String.fromCharCode.apply(null, new Uint8Array(buffer));\n }\n\n // ref: https://stackoverflow.com/a/40031979/1090359\n static fromBufferToHex(buffer: ArrayBuffer): string {\n if (Utils.isNode) {\n return Buffer.from(buffer).toString(\"hex\");\n } else {\n const bytes = new Uint8Array(buffer);\n return Array.prototype.map\n .call(bytes, (x: number) => (\"00\" + x.toString(16)).slice(-2))\n .join(\"\");\n }\n }\n\n static fromUrlB64ToB64(urlB64Str: string): string {\n let output = urlB64Str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"Illegal base64url string!\");\n }\n\n return output;\n }\n\n static fromUrlB64ToUtf8(urlB64Str: string): string {\n return Utils.fromB64ToUtf8(Utils.fromUrlB64ToB64(urlB64Str));\n }\n\n static fromUtf8ToB64(utfStr: string): string {\n if (Utils.isNode) {\n return Buffer.from(utfStr, \"utf8\").toString(\"base64\");\n } else {\n return decodeURIComponent(escape(Utils.global.btoa(utfStr)));\n }\n }\n\n static fromUtf8ToUrlB64(utfStr: string): string {\n return Utils.fromBufferToUrlB64(Utils.fromUtf8ToArray(utfStr));\n }\n\n static fromB64ToUtf8(b64Str: string): string {\n if (Utils.isNode) {\n return Buffer.from(b64Str, \"base64\").toString(\"utf8\");\n } else {\n return decodeURIComponent(escape(Utils.global.atob(b64Str)));\n }\n }\n\n // ref: http://stackoverflow.com/a/2117523/1090359\n static newGuid(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n static isGuid(id: string) {\n return RegExp(\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/,\n \"i\"\n ).test(id);\n }\n\n static getHostname(uriString: string): string {\n if (Utils.isNullOrWhitespace(uriString)) {\n return null;\n }\n\n uriString = uriString.trim();\n\n if (uriString.startsWith(\"data:\")) {\n return null;\n }\n\n if (uriString.startsWith(\"about:\")) {\n return null;\n }\n\n if (uriString.startsWith(\"file:\")) {\n return null;\n }\n\n // Does uriString contain invalid characters\n // TODO Needs to possibly be extended, although '!' is a reserved character\n if (uriString.indexOf(\"!\") > 0) {\n return null;\n }\n\n try {\n const hostname = getHostname(uriString, { validHosts: this.validHosts });\n if (hostname != null) {\n return hostname;\n }\n } catch {\n return null;\n }\n return null;\n }\n\n static getHost(uriString: string): string {\n const url = Utils.getUrl(uriString);\n try {\n return url != null && url.host !== \"\" ? url.host : null;\n } catch {\n return null;\n }\n }\n\n static getDomain(uriString: string): string {\n if (Utils.isNullOrWhitespace(uriString)) {\n return null;\n }\n\n uriString = uriString.trim();\n\n if (uriString.startsWith(\"data:\")) {\n return null;\n }\n\n if (uriString.startsWith(\"about:\")) {\n return null;\n }\n\n try {\n const parseResult = parse(uriString, { validHosts: this.validHosts });\n if (parseResult != null && parseResult.hostname != null) {\n if (parseResult.hostname === \"localhost\" || parseResult.isIp) {\n return parseResult.hostname;\n }\n\n if (parseResult.domain != null) {\n return parseResult.domain;\n }\n return null;\n }\n } catch {\n return null;\n }\n return null;\n }\n\n static getQueryParams(uriString: string): Map {\n const url = Utils.getUrl(uriString);\n if (url == null || url.search == null || url.search === \"\") {\n return null;\n }\n const map = new Map();\n const pairs = (url.search[0] === \"?\" ? url.search.substr(1) : url.search).split(\"&\");\n pairs.forEach((pair) => {\n const parts = pair.split(\"=\");\n if (parts.length < 1) {\n return;\n }\n map.set(\n decodeURIComponent(parts[0]).toLowerCase(),\n parts[1] == null ? \"\" : decodeURIComponent(parts[1])\n );\n });\n return map;\n }\n\n static getSortFunction(\n i18nService: I18nService,\n prop: { [K in keyof T]: T[K] extends string ? K : never }[keyof T]\n ): (a: T, b: T) => number {\n return (a, b) => {\n if (a[prop] == null && b[prop] != null) {\n return -1;\n }\n if (a[prop] != null && b[prop] == null) {\n return 1;\n }\n if (a[prop] == null && b[prop] == null) {\n return 0;\n }\n\n // The `as unknown as string` here is unfortunate because typescript doesn't property understand that the return of T[prop] will be a string\n return i18nService.collator\n ? i18nService.collator.compare(a[prop] as unknown as string, b[prop] as unknown as string)\n : (a[prop] as unknown as string).localeCompare(b[prop] as unknown as string);\n };\n }\n\n static isNullOrWhitespace(str: string): boolean {\n return str == null || typeof str !== \"string\" || str.trim() === \"\";\n }\n\n static isNullOrEmpty(str: string): boolean {\n return str == null || typeof str !== \"string\" || str == \"\";\n }\n\n static isPromise(obj: any): obj is Promise {\n return (\n obj != undefined && typeof obj[\"then\"] === \"function\" && typeof obj[\"catch\"] === \"function\"\n );\n }\n\n static nameOf(name: string & keyof T) {\n return name;\n }\n\n static assign(target: T, source: Partial): T {\n return Object.assign(target, source);\n }\n\n static iterateEnum(obj: O) {\n return (Object.keys(obj).filter((k) => Number.isNaN(+k)) as K[]).map((k) => obj[k]);\n }\n\n static getUrl(uriString: string): URL {\n if (this.isNullOrWhitespace(uriString)) {\n return null;\n }\n\n uriString = uriString.trim();\n\n let url = Utils.getUrlObject(uriString);\n if (url == null) {\n const hasHttpProtocol =\n uriString.indexOf(\"http://\") === 0 || uriString.indexOf(\"https://\") === 0;\n if (!hasHttpProtocol && uriString.indexOf(\".\") > -1) {\n url = Utils.getUrlObject(\"http://\" + uriString);\n }\n }\n return url;\n }\n\n static camelToPascalCase(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n\n /**\n * There are a few ways to calculate text color for contrast, this one seems to fit accessibility guidelines best.\n * https://stackoverflow.com/a/3943023/6869691\n *\n * @param {string} bgColor\n * @param {number} [threshold] see stackoverflow link above\n * @param {boolean} [svgTextFill]\n * Indicates if this method is performed on an SVG 'fill' attribute (e.g. ).\n * This check is necessary because the '!important' tag cannot be used in a 'fill' attribute.\n */\n static pickTextColorBasedOnBgColor(bgColor: string, threshold = 186, svgTextFill = false) {\n const bgColorHexNums = bgColor.charAt(0) === \"#\" ? bgColor.substring(1, 7) : bgColor;\n const r = parseInt(bgColorHexNums.substring(0, 2), 16); // hexToR\n const g = parseInt(bgColorHexNums.substring(2, 4), 16); // hexToG\n const b = parseInt(bgColorHexNums.substring(4, 6), 16); // hexToB\n const blackColor = svgTextFill ? \"black\" : \"black !important\";\n const whiteColor = svgTextFill ? \"white\" : \"white !important\";\n return r * 0.299 + g * 0.587 + b * 0.114 > threshold ? blackColor : whiteColor;\n }\n\n static stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n let color = \"#\";\n for (let i = 0; i < 3; i++) {\n const value = (hash >> (i * 8)) & 0xff;\n color += (\"00\" + value.toString(16)).substr(-2);\n }\n return color;\n }\n\n /**\n * @throws Will throw an error if the ContainerService has not been attached to the window object\n */\n static getContainerService(): BitwardenContainerService {\n if (this.global.bitwardenContainerService == null) {\n throw new Error(\"global bitwardenContainerService not initialized.\");\n }\n return this.global.bitwardenContainerService;\n }\n\n static validateHexColor(color: string) {\n return /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(color);\n }\n\n /**\n * Converts map to a Record with the same data. Inverse of recordToMap\n * Useful in toJSON methods, since Maps are not serializable\n * @param map\n * @returns\n */\n static mapToRecord(map: Map): Record {\n if (map == null) {\n return null;\n }\n if (!(map instanceof Map)) {\n return map;\n }\n return Object.fromEntries(map);\n }\n\n /**\n * Converts record to a Map with the same data. Inverse of mapToRecord\n * Useful in fromJSON methods, since Maps are not serializable\n *\n * Warning: If the record has string keys that are numbers, they will be converted to numbers in the map\n * @param record\n * @returns\n */\n static recordToMap(record: Record): Map {\n if (record == null) {\n return null;\n } else if (record instanceof Map) {\n return record;\n }\n\n const entries = Object.entries(record);\n if (entries.length === 0) {\n return new Map();\n }\n\n if (isNaN(Number(entries[0][0]))) {\n return new Map(entries) as Map;\n } else {\n return new Map(entries.map((e) => [Number(e[0]), e[1]])) as Map;\n }\n }\n\n /** Applies Object.assign, but converts the type nicely using Type-Fest Merge */\n static merge(\n destination: Destination,\n source: Source\n ): Merge {\n return Object.assign(destination, source) as unknown as Merge;\n }\n\n /**\n * encodeURIComponent escapes all characters except the following:\n * alphabetic, decimal digits, - _ . ! ~ * ' ( )\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent#encoding_for_rfc3986\n */\n static encodeRFC3986URIComponent(str: string): string {\n return encodeURIComponent(str).replace(\n /[!'()*]/g,\n (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`\n );\n }\n\n /**\n * Normalizes a path for defense against attacks like traversals\n * @param denormalizedPath\n * @returns\n */\n static normalizePath(denormalizedPath: string): string {\n return path.normalize(decodeURIComponent(denormalizedPath)).replace(/^(\\.\\.(\\/|\\\\|$))+/, \"\");\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 static delay(ms: number): Promise {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private static isAppleMobile(win: Window) {\n return (\n win.navigator.userAgent.match(/iPhone/i) != null ||\n win.navigator.userAgent.match(/iPad/i) != null\n );\n }\n\n private static getUrlObject(uriString: string): URL {\n try {\n if (nodeURL != null) {\n return new nodeURL.URL(uriString);\n } else if (typeof URL === \"function\") {\n return new URL(uriString);\n } else if (typeof window !== \"undefined\") {\n const hasProtocol = uriString.indexOf(\"://\") > -1;\n if (!hasProtocol && uriString.indexOf(\".\") > -1) {\n uriString = \"http://\" + uriString;\n } else if (!hasProtocol) {\n return null;\n }\n const anchor = window.document.createElement(\"a\");\n anchor.href = uriString;\n return anchor as any;\n }\n } catch (e) {\n // Ignore error\n }\n\n return null;\n }\n}\n\nUtils.init();\n","import { BaseResponse } from \"../response/base.response\";\n\nexport class CardApi extends BaseResponse {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.cardholderName = this.getResponseProperty(\"CardholderName\");\n this.brand = this.getResponseProperty(\"Brand\");\n this.number = this.getResponseProperty(\"Number\");\n this.expMonth = this.getResponseProperty(\"ExpMonth\");\n this.expYear = this.getResponseProperty(\"ExpYear\");\n this.code = this.getResponseProperty(\"Code\");\n }\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { BaseResponse } from \"../response/base.response\";\n\nexport class FieldApi extends BaseResponse {\n name: string;\n value: string;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.value = this.getResponseProperty(\"Value\");\n this.linkedId = this.getResponseProperty(\"linkedId\");\n }\n}\n","import { BaseResponse } from \"../response/base.response\";\n\nexport class IdentityApi extends BaseResponse {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.title = this.getResponseProperty(\"Title\");\n this.firstName = this.getResponseProperty(\"FirstName\");\n this.middleName = this.getResponseProperty(\"MiddleName\");\n this.lastName = this.getResponseProperty(\"LastName\");\n this.address1 = this.getResponseProperty(\"Address1\");\n this.address2 = this.getResponseProperty(\"Address2\");\n this.address3 = this.getResponseProperty(\"Address3\");\n this.city = this.getResponseProperty(\"City\");\n this.state = this.getResponseProperty(\"State\");\n this.postalCode = this.getResponseProperty(\"PostalCode\");\n this.country = this.getResponseProperty(\"Country\");\n this.company = this.getResponseProperty(\"Company\");\n this.email = this.getResponseProperty(\"Email\");\n this.phone = this.getResponseProperty(\"Phone\");\n this.ssn = this.getResponseProperty(\"SSN\");\n this.username = this.getResponseProperty(\"Username\");\n this.passportNumber = this.getResponseProperty(\"PassportNumber\");\n this.licenseNumber = this.getResponseProperty(\"LicenseNumber\");\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { BaseResponse } from \"../response/base.response\";\n\nexport class LoginUriApi extends BaseResponse {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.uri = this.getResponseProperty(\"Uri\");\n const match = this.getResponseProperty(\"Match\");\n this.match = match != null ? match : null;\n }\n}\n","import { BaseResponse } from \"../response/base.response\";\n\nimport { LoginUriApi } from \"./login-uri.api\";\n\nexport class LoginApi extends BaseResponse {\n uris: LoginUriApi[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n autofillOnPageLoad: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.username = this.getResponseProperty(\"Username\");\n this.password = this.getResponseProperty(\"Password\");\n this.passwordRevisionDate = this.getResponseProperty(\"PasswordRevisionDate\");\n this.totp = this.getResponseProperty(\"Totp\");\n this.autofillOnPageLoad = this.getResponseProperty(\"AutofillOnPageLoad\");\n\n const uris = this.getResponseProperty(\"Uris\");\n if (uris != null) {\n this.uris = uris.map((u: any) => new LoginUriApi(u));\n }\n }\n}\n","import { BaseResponse } from \"../response/base.response\";\n\nexport class PermissionsApi extends BaseResponse {\n accessEventLogs: boolean;\n accessImportExport: boolean;\n accessReports: boolean;\n createNewCollections: boolean;\n editAnyCollection: boolean;\n deleteAnyCollection: 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 this.createNewCollections = this.getResponseProperty(\"CreateNewCollections\");\n this.editAnyCollection = this.getResponseProperty(\"EditAnyCollection\");\n this.deleteAnyCollection = this.getResponseProperty(\"DeleteAnyCollection\");\n this.editAssignedCollections = this.getResponseProperty(\"EditAssignedCollections\");\n this.deleteAssignedCollections = this.getResponseProperty(\"DeleteAssignedCollections\");\n\n this.manageCiphers = this.getResponseProperty(\"ManageCiphers\");\n this.manageGroups = this.getResponseProperty(\"ManageGroups\");\n this.manageSso = this.getResponseProperty(\"ManageSso\");\n this.managePolicies = this.getResponseProperty(\"ManagePolicies\");\n this.manageUsers = this.getResponseProperty(\"ManageUsers\");\n this.manageResetPassword = this.getResponseProperty(\"ManageResetPassword\");\n this.manageScim = this.getResponseProperty(\"ManageScim\");\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { BaseResponse } from \"../response/base.response\";\n\nexport class SecureNoteApi extends BaseResponse {\n type: SecureNoteType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty(\"Type\");\n }\n}\n","import { BaseResponse } from \"../response/base.response\";\n\nexport class SendFileApi extends BaseResponse {\n id: string;\n fileName: string;\n size: string;\n sizeName: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.id = this.getResponseProperty(\"Id\");\n this.fileName = this.getResponseProperty(\"FileName\");\n this.size = this.getResponseProperty(\"Size\");\n this.sizeName = this.getResponseProperty(\"SizeName\");\n }\n}\n","import { BaseResponse } from \"../response/base.response\";\n\nexport class SendTextApi extends BaseResponse {\n text: string;\n hidden: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.text = this.getResponseProperty(\"Text\");\n this.hidden = this.getResponseProperty(\"Hidden\") || false;\n }\n}\n","import {\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 { 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 { 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 { 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 \"../../vault/models/data/cipher.data\";\nimport { FolderData } from \"../../vault/models/data/folder.data\";\nimport { CipherView } from \"../../vault/models/view/cipher.view\";\nimport { CollectionData } from \"../data/collection.data\";\nimport { EncryptedOrganizationKeyData } from \"../data/encrypted-organization-key.data\";\nimport { EventData } from \"../data/event.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 { 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 kdfMemory?: number;\n kdfParallelism?: 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 approveLoginRequests?: boolean;\n avatarColor?: string;\n\n static fromJSON(obj: Jsonify): AccountSettings {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new AccountSettings(), obj, {\n environmentUrls: EnvironmentUrls.fromJSON(obj?.environmentUrls),\n pinProtected: EncryptionPair.fromJSON(\n obj?.pinProtected,\n EncString.fromJSON\n ),\n serverConfig: ServerConfigData.fromJSON(obj?.serverConfig),\n });\n }\n}\n\nexport type AccountSettingsSettings = {\n equivalentDomains?: string[][];\n};\n\nexport class AccountTokens {\n accessToken?: string;\n refreshToken?: string;\n securityStamp?: string;\n\n static fromJSON(obj: Jsonify): AccountTokens {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new AccountTokens(), obj);\n }\n}\n\nexport class Account {\n data?: AccountData = new AccountData();\n keys?: AccountKeys = new AccountKeys();\n profile?: AccountProfile = new AccountProfile();\n settings?: AccountSettings = new AccountSettings();\n tokens?: AccountTokens = new AccountTokens();\n\n constructor(init: Partial) {\n Object.assign(this, {\n data: {\n ...new AccountData(),\n ...init?.data,\n },\n keys: {\n ...new AccountKeys(),\n ...init?.keys,\n },\n profile: {\n ...new AccountProfile(),\n ...init?.profile,\n },\n settings: {\n ...new AccountSettings(),\n ...init?.settings,\n },\n tokens: {\n ...new AccountTokens(),\n ...init?.tokens,\n },\n });\n }\n\n static fromJSON(json: Jsonify): Account {\n if (json == null) {\n return null;\n }\n\n return Object.assign(new Account({}), json, {\n keys: AccountKeys.fromJSON(json?.keys),\n profile: AccountProfile.fromJSON(json?.profile),\n settings: AccountSettings.fromJSON(json?.settings),\n tokens: AccountTokens.fromJSON(json?.tokens),\n });\n }\n}\n","import { CollectionData } from \"../data/collection.data\";\nimport { CollectionView } from \"../view/collection.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\n\nexport class Collection extends Domain {\n id: string;\n organizationId: string;\n name: EncString;\n externalId: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(obj?: CollectionData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n organizationId: null,\n name: null,\n externalId: null,\n readOnly: null,\n hidePasswords: null,\n },\n [\"id\", \"organizationId\", \"externalId\", \"readOnly\", \"hidePasswords\"]\n );\n }\n\n decrypt(): Promise {\n return this.decryptObj(\n new CollectionView(this),\n {\n name: null,\n },\n this.organizationId\n );\n }\n}\n","import { View } from \"../view/view\";\n\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport default class Domain {\n protected buildDomainModel(\n domain: D,\n dataObj: any,\n map: any,\n notEncList: any[] = []\n ) {\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n const objProp = dataObj[map[prop] || prop];\n if (notEncList.indexOf(prop) > -1) {\n (domain as any)[prop] = objProp ? objProp : null;\n } else {\n (domain as any)[prop] = objProp ? new EncString(objProp) : null;\n }\n }\n }\n protected buildDataModel(\n domain: D,\n dataObj: any,\n map: any,\n notEncStringList: any[] = []\n ) {\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n const objProp = (domain as any)[map[prop] || prop];\n if (notEncStringList.indexOf(prop) > -1) {\n (dataObj as any)[prop] = objProp != null ? objProp : null;\n } else {\n (dataObj as any)[prop] = objProp != null ? (objProp as EncString).encryptedString : null;\n }\n }\n }\n\n protected async decryptObj(\n viewModel: T,\n map: any,\n orgId: string,\n key: SymmetricCryptoKey = null\n ): Promise {\n const promises = [];\n const self: any = this;\n\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n (function (theProp) {\n const p = Promise.resolve()\n .then(() => {\n const mapProp = map[theProp] || theProp;\n if (self[mapProp]) {\n return self[mapProp].decrypt(orgId, key);\n }\n return null;\n })\n .then((val: any) => {\n (viewModel as any)[theProp] = val;\n });\n promises.push(p);\n })(prop);\n }\n\n await Promise.all(promises);\n return viewModel;\n }\n}\n","import { EncryptionType } from \"../../enums/encryptionType\";\nimport { IEncrypted } from \"../../interfaces/IEncrypted\";\nimport { Utils } from \"../../misc/utils\";\n\nconst ENC_TYPE_LENGTH = 1;\nconst IV_LENGTH = 16;\nconst MAC_LENGTH = 32;\nconst MIN_DATA_LENGTH = 1;\n\nexport class EncArrayBuffer implements IEncrypted {\n readonly encryptionType: EncryptionType = null;\n readonly dataBytes: ArrayBuffer = null;\n readonly ivBytes: ArrayBuffer = null;\n readonly macBytes: ArrayBuffer = null;\n\n constructor(readonly buffer: ArrayBuffer) {\n const encBytes = new Uint8Array(buffer);\n const encType = encBytes[0];\n\n switch (encType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64: {\n const minimumLength = ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH + MIN_DATA_LENGTH;\n if (encBytes.length < minimumLength) {\n this.throwDecryptionError();\n }\n\n this.ivBytes = encBytes.slice(ENC_TYPE_LENGTH, ENC_TYPE_LENGTH + IV_LENGTH).buffer;\n this.macBytes = encBytes.slice(\n ENC_TYPE_LENGTH + IV_LENGTH,\n ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH\n ).buffer;\n this.dataBytes = encBytes.slice(ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH).buffer;\n break;\n }\n case EncryptionType.AesCbc256_B64: {\n const minimumLength = ENC_TYPE_LENGTH + IV_LENGTH + MIN_DATA_LENGTH;\n if (encBytes.length < minimumLength) {\n this.throwDecryptionError();\n }\n\n this.ivBytes = encBytes.slice(ENC_TYPE_LENGTH, ENC_TYPE_LENGTH + IV_LENGTH).buffer;\n this.dataBytes = encBytes.slice(ENC_TYPE_LENGTH + IV_LENGTH).buffer;\n break;\n }\n default:\n this.throwDecryptionError();\n }\n\n this.encryptionType = encType;\n }\n\n private throwDecryptionError() {\n throw new Error(\n \"Error parsing encrypted ArrayBuffer: data is corrupted or has an invalid format.\"\n );\n }\n\n static async fromResponse(response: {\n arrayBuffer: () => Promise;\n }): Promise {\n const buffer = await response.arrayBuffer();\n if (buffer == null) {\n throw new Error(\"Cannot create EncArrayBuffer from Response - Response is empty\");\n }\n return new EncArrayBuffer(buffer);\n }\n\n static fromB64(b64: string) {\n const buffer = Utils.fromB64ToArray(b64).buffer;\n return new EncArrayBuffer(buffer);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { EncryptionType } from \"../../enums/encryptionType\";\nimport { IEncrypted } from \"../../interfaces/IEncrypted\";\nimport { Utils } from \"../../misc/utils\";\n\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class EncString implements IEncrypted {\n encryptedString?: string;\n encryptionType?: EncryptionType;\n decryptedValue?: string;\n data?: string;\n iv?: string;\n mac?: string;\n\n constructor(\n encryptedStringOrType: string | EncryptionType,\n data?: string,\n iv?: string,\n mac?: string\n ) {\n if (data != null) {\n this.initFromData(encryptedStringOrType as EncryptionType, data, iv, mac);\n } else {\n this.initFromEncryptedString(encryptedStringOrType as string);\n }\n }\n\n get ivBytes(): ArrayBuffer {\n return this.iv == null ? null : Utils.fromB64ToArray(this.iv).buffer;\n }\n\n get macBytes(): ArrayBuffer {\n return this.mac == null ? null : Utils.fromB64ToArray(this.mac).buffer;\n }\n\n get dataBytes(): ArrayBuffer {\n return this.data == null ? null : Utils.fromB64ToArray(this.data).buffer;\n }\n\n toJSON() {\n return this.encryptedString;\n }\n\n static fromJSON(obj: Jsonify): EncString {\n if (obj == null) {\n return null;\n }\n\n return new EncString(obj);\n }\n\n private initFromData(encType: EncryptionType, data: string, iv: string, mac: string) {\n if (iv != null) {\n this.encryptedString = encType + \".\" + iv + \"|\" + data;\n } else {\n this.encryptedString = encType + \".\" + data;\n }\n\n // mac\n if (mac != null) {\n this.encryptedString += \"|\" + mac;\n }\n\n this.encryptionType = encType;\n this.data = data;\n this.iv = iv;\n this.mac = mac;\n }\n\n private initFromEncryptedString(encryptedString: string) {\n this.encryptedString = encryptedString as string;\n if (!this.encryptedString) {\n return;\n }\n\n const { encType, encPieces } = this.parseEncryptedString(this.encryptedString);\n this.encryptionType = encType;\n\n switch (encType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64:\n if (encPieces.length !== 3) {\n return;\n }\n\n this.iv = encPieces[0];\n this.data = encPieces[1];\n this.mac = encPieces[2];\n break;\n case EncryptionType.AesCbc256_B64:\n if (encPieces.length !== 2) {\n return;\n }\n\n this.iv = encPieces[0];\n this.data = encPieces[1];\n break;\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_B64:\n if (encPieces.length !== 1) {\n return;\n }\n\n this.data = encPieces[0];\n break;\n default:\n return;\n }\n }\n\n private parseEncryptedString(encryptedString: string): {\n encType: EncryptionType;\n encPieces: string[];\n } {\n const headerPieces = encryptedString.split(\".\");\n let encType: EncryptionType;\n let encPieces: string[] = null;\n\n if (headerPieces.length === 2) {\n try {\n encType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split(\"|\");\n } catch (e) {\n return;\n }\n } else {\n encPieces = encryptedString.split(\"|\");\n encType =\n encPieces.length === 3\n ? EncryptionType.AesCbc128_HmacSha256_B64\n : EncryptionType.AesCbc256_B64;\n }\n\n return {\n encType,\n encPieces,\n };\n }\n\n async decrypt(orgId: string, key: SymmetricCryptoKey = null): Promise {\n if (this.decryptedValue != null) {\n return this.decryptedValue;\n }\n\n try {\n if (key == null) {\n key = await this.getKeyForDecryption(orgId);\n }\n if (key == null) {\n throw new Error(\"No key to decrypt EncString with orgId \" + orgId);\n }\n\n const encryptService = Utils.getContainerService().getEncryptService();\n this.decryptedValue = await encryptService.decryptToUtf8(this, key);\n } catch (e) {\n this.decryptedValue = \"[error: cannot decrypt]\";\n }\n return this.decryptedValue;\n }\n\n private async getKeyForDecryption(orgId: string) {\n const cryptoService = Utils.getContainerService().getCryptoService();\n return orgId != null\n ? await cryptoService.getOrgKey(orgId)\n : await cryptoService.getKeyForUserEncryption();\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nexport class EnvironmentUrls {\n base: string = null;\n api: string = null;\n identity: string = null;\n icons: string = null;\n notifications: string = null;\n events: string = null;\n webVault: string = null;\n keyConnector: string = null;\n\n static fromJSON(obj: Jsonify): EnvironmentUrls {\n return Object.assign(new EnvironmentUrls(), obj);\n }\n}\n","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","export class KdfConfig {\n iterations: number;\n memory?: number;\n parallelism?: number;\n\n constructor(iterations: number, memory?: number, parallelism?: number) {\n this.iterations = iterations;\n this.memory = memory;\n this.parallelism = parallelism;\n }\n}\n","import Domain from \"./domain-base\";\n\nexport class MasterPasswordPolicyOptions extends Domain {\n minComplexity = 0;\n minLength = 0;\n requireUpper = false;\n requireLower = false;\n requireNumbers = false;\n requireSpecial = false;\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissions.api\";\nimport { OrganizationData } from \"../data/organization.data\";\n\nexport class Organization {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useScim: boolean;\n useCustomPermissions: boolean;\n useResetPassword: boolean;\n useSecretsManager: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n hasPublicAndPrivateKeys: boolean;\n providerId: string;\n providerName: string;\n isProviderUser: boolean;\n familySponsorshipFriendlyName: string;\n familySponsorshipAvailable: boolean;\n planProductType: ProductType;\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n familySponsorshipLastSyncDate?: Date;\n familySponsorshipValidUntil?: Date;\n familySponsorshipToDelete?: boolean;\n accessSecretsManager: boolean;\n\n constructor(obj?: OrganizationData) {\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.name = obj.name;\n this.status = obj.status;\n this.type = obj.type;\n this.enabled = obj.enabled;\n this.usePolicies = obj.usePolicies;\n this.useGroups = obj.useGroups;\n this.useDirectory = obj.useDirectory;\n this.useEvents = obj.useEvents;\n this.useTotp = obj.useTotp;\n this.use2fa = obj.use2fa;\n this.useApi = obj.useApi;\n this.useSso = obj.useSso;\n this.useKeyConnector = obj.useKeyConnector;\n this.useScim = obj.useScim;\n this.useCustomPermissions = obj.useCustomPermissions;\n this.useResetPassword = obj.useResetPassword;\n this.useSecretsManager = obj.useSecretsManager;\n this.selfHost = obj.selfHost;\n this.usersGetPremium = obj.usersGetPremium;\n this.seats = obj.seats;\n this.maxCollections = obj.maxCollections;\n this.maxStorageGb = obj.maxStorageGb;\n this.ssoBound = obj.ssoBound;\n this.identifier = obj.identifier;\n this.permissions = obj.permissions;\n this.resetPasswordEnrolled = obj.resetPasswordEnrolled;\n this.userId = obj.userId;\n this.hasPublicAndPrivateKeys = obj.hasPublicAndPrivateKeys;\n this.providerId = obj.providerId;\n this.providerName = obj.providerName;\n this.isProviderUser = obj.isProviderUser;\n this.familySponsorshipFriendlyName = obj.familySponsorshipFriendlyName;\n this.familySponsorshipAvailable = obj.familySponsorshipAvailable;\n this.planProductType = obj.planProductType;\n this.keyConnectorEnabled = obj.keyConnectorEnabled;\n this.keyConnectorUrl = obj.keyConnectorUrl;\n this.familySponsorshipLastSyncDate = obj.familySponsorshipLastSyncDate;\n this.familySponsorshipValidUntil = obj.familySponsorshipValidUntil;\n this.familySponsorshipToDelete = obj.familySponsorshipToDelete;\n this.accessSecretsManager = obj.accessSecretsManager;\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 this.isManager || this.permissions.createNewCollections;\n }\n\n get canEditAnyCollection() {\n return this.isAdmin || this.permissions.editAnyCollection;\n }\n\n get canUseAdminCollections() {\n return this.canEditAnyCollection;\n }\n\n get canDeleteAnyCollection() {\n return this.isAdmin || this.permissions.deleteAnyCollection;\n }\n\n get canViewAllCollections() {\n return this.canCreateNewCollections || this.canEditAnyCollection || this.canDeleteAnyCollection;\n }\n\n get canEditAssignedCollections() {\n return this.isManager || this.permissions.editAssignedCollections;\n }\n\n get canDeleteAssignedCollections() {\n return this.isManager || this.permissions.deleteAssignedCollections;\n }\n\n get canViewAssignedCollections() {\n return this.canDeleteAssignedCollections || this.canEditAssignedCollections;\n }\n\n get canManageGroups() {\n return (this.isAdmin || this.permissions.manageGroups) && this.useGroups;\n }\n\n get canManageSso() {\n return (this.isAdmin || this.permissions.manageSso) && this.useSso;\n }\n\n get canManageScim() {\n return (this.isAdmin || this.permissions.manageScim) && this.useScim;\n }\n\n get canManagePolicies() {\n return (this.isAdmin || this.permissions.managePolicies) && this.usePolicies;\n }\n\n get canManageUsers() {\n return this.isAdmin || this.permissions.manageUsers;\n }\n\n get canManageUsersPassword() {\n return this.isAdmin || this.permissions.manageResetPassword;\n }\n\n get isExemptFromPolicies() {\n return this.canManagePolicies;\n }\n\n get canManageBilling() {\n return this.isOwner && (this.isProviderUser || !this.hasProvider);\n }\n\n get hasProvider() {\n return this.providerId != null || this.providerName != null;\n }\n\n get canAccessSecretsManager() {\n return this.useSecretsManager && this.accessSecretsManager;\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 { 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 { SendFileData } from \"../data/send-file.data\";\nimport { SendFileView } from \"../view/send-file.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class SendFile extends Domain {\n id: string;\n size: string;\n sizeName: string;\n fileName: EncString;\n\n constructor(obj?: SendFileData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.size = obj.size;\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n sizeName: null,\n fileName: null,\n },\n [\"id\", \"sizeName\"]\n );\n }\n\n async decrypt(key: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(\n new SendFileView(this),\n {\n fileName: null,\n },\n null,\n key\n );\n return view;\n }\n}\n","import { SendTextData } from \"../data/send-text.data\";\nimport { SendTextView } from \"../view/send-text.view\";\n\nimport Domain from \"./domain-base\";\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class SendText extends Domain {\n text: EncString;\n hidden: boolean;\n\n constructor(obj?: SendTextData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.hidden = obj.hidden;\n this.buildDomainModel(\n this,\n obj,\n {\n text: null,\n },\n []\n );\n }\n\n decrypt(key: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new SendTextView(this),\n {\n text: null,\n },\n null,\n key\n );\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { EncryptionType } from \"../../enums/encryptionType\";\nimport { Utils } from \"../../misc/utils\";\n\nexport class SymmetricCryptoKey {\n key: ArrayBuffer;\n encKey?: ArrayBuffer;\n macKey?: ArrayBuffer;\n encType: EncryptionType;\n\n keyB64: string;\n encKeyB64: string;\n macKeyB64: string;\n\n meta: any;\n\n constructor(key: ArrayBuffer, encType?: EncryptionType) {\n if (key == null) {\n throw new Error(\"Must provide key\");\n }\n\n if (encType == null) {\n if (key.byteLength === 32) {\n encType = EncryptionType.AesCbc256_B64;\n } else if (key.byteLength === 64) {\n encType = EncryptionType.AesCbc256_HmacSha256_B64;\n } else {\n throw new Error(\"Unable to determine encType.\");\n }\n }\n\n this.key = key;\n this.encType = encType;\n\n if (encType === EncryptionType.AesCbc256_B64 && key.byteLength === 32) {\n this.encKey = key;\n this.macKey = null;\n } else if (encType === EncryptionType.AesCbc128_HmacSha256_B64 && key.byteLength === 32) {\n this.encKey = key.slice(0, 16);\n this.macKey = key.slice(16, 32);\n } else if (encType === EncryptionType.AesCbc256_HmacSha256_B64 && key.byteLength === 64) {\n this.encKey = key.slice(0, 32);\n this.macKey = key.slice(32, 64);\n } else {\n throw new Error(\"Unsupported encType/key length.\");\n }\n\n if (this.key != null) {\n this.keyB64 = Utils.fromBufferToB64(this.key);\n }\n if (this.encKey != null) {\n this.encKeyB64 = Utils.fromBufferToB64(this.encKey);\n }\n if (this.macKey != null) {\n this.macKeyB64 = Utils.fromBufferToB64(this.macKey);\n }\n }\n\n toJSON() {\n // The whole object is constructed from the initial key, so just store the B64 key\n return { keyB64: this.keyB64 };\n }\n\n static fromJSON(obj: Jsonify): SymmetricCryptoKey {\n if (obj == null) {\n return null;\n }\n\n const arrayBuffer = Utils.fromB64ToArray(obj.keyB64).buffer;\n return new SymmetricCryptoKey(arrayBuffer);\n }\n}\n","export class TreeNode {\n node: T;\n parent: TreeNode;\n children: TreeNode[] = [];\n\n constructor(node: T, parent: TreeNode, name?: string, id?: string) {\n this.parent = parent;\n this.node = node;\n if (name) {\n this.node.name = name;\n }\n if (id) {\n this.node.id = id;\n }\n }\n}\n\nexport interface ITreeNodeObject {\n id: string;\n name: string;\n}\n","export class WindowState {\n width?: number;\n height?: number;\n isMaximized?: boolean;\n // TODO: displayBounds is an Electron.Rectangle.\n // We need to establish some kind of client-specific global state, similiar to the way we already extend a base Account.\n displayBounds: any;\n x?: number;\n y?: number;\n zoomFactor?: number;\n}\n","import { Card as CardDomain } from \"../../vault/models/domain/card\";\nimport { CardView } from \"../../vault/models/view/card.view\";\nimport { EncString } from \"../domain/enc-string\";\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 { Field as FieldDomain } from \"../../vault/models/domain/field\";\nimport { FieldView } from \"../../vault/models/view/field.view\";\nimport { EncString } from \"../domain/enc-string\";\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 { Identity as IdentityDomain } from \"../../vault/models/domain/identity\";\nimport { IdentityView } from \"../../vault/models/view/identity.view\";\nimport { EncString } from \"../domain/enc-string\";\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 { LoginUri as LoginUriDomain } from \"../../vault/models/domain/login-uri\";\nimport { LoginUriView } from \"../../vault/models/view/login-uri.view\";\nimport { EncString } from \"../domain/enc-string\";\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 { Login as LoginDomain } from \"../../vault/models/domain/login\";\nimport { LoginView } from \"../../vault/models/view/login.view\";\nimport { EncString } from \"../domain/enc-string\";\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 \"../../vault/models/domain/secure-note\";\nimport { SecureNoteView } from \"../../vault/models/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 \"../../vault/enums/cipher-reprompt-type\";\nimport { CipherType } from \"../../vault/enums/cipher-type\";\nimport { Cipher as CipherDomain } from \"../../vault/models/domain/cipher\";\nimport { CipherView } from \"../../vault/models/view/cipher.view\";\nimport { EncString } from \"../domain/enc-string\";\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 \"../../vault/models/domain/cipher\";\nimport { CipherView } from \"../../vault/models/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 { Folder as FolderDomain } from \"../../vault/models/domain/folder\";\nimport { FolderView } from \"../../vault/models/view/folder.view\";\nimport { EncString } from \"../domain/enc-string\";\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 \"../../vault/models/domain/folder\";\nimport { FolderView } from \"../../vault/models/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 { 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 users: 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 { TwoFactorProviderType } from \"../../../enums/twoFactorProviderType\";\n\nexport class TokenTwoFactorRequest {\n constructor(\n public provider: TwoFactorProviderType = null,\n public token: string = null,\n public remember: boolean = false\n ) {}\n}\n","export class KeysRequest {\n publicKey: string;\n encryptedPrivateKey: string;\n\n constructor(publicKey: string, encryptedPrivateKey: string) {\n this.publicKey = publicKey;\n this.encryptedPrivateKey = encryptedPrivateKey;\n }\n}\n","import { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\n\nimport { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class OrganizationApiKeyRequest extends SecretVerificationRequest {\n type: OrganizationApiKeyType = OrganizationApiKeyType.Default;\n}\n","import { OrganizationConnectionType } from \"../../enums/organizationConnectionType\";\n\nimport { BillingSyncConfigRequest } from \"./billing-sync-config.request\";\nimport { ScimConfigRequest } from \"./scim-config.request\";\n\n/**API request config types for OrganizationConnectionRequest */\nexport type OrganizationConnectionRequestConfigs = BillingSyncConfigRequest | ScimConfigRequest;\n\nexport class OrganizationConnectionRequest {\n constructor(\n public organizationId: string,\n public type: OrganizationConnectionType,\n public enabled: boolean,\n public config: OrganizationConnectionRequestConfigs\n ) {}\n}\n","import { KeysRequest } from \"./keys.request\";\n\nexport class OrganizationKeysRequest extends KeysRequest {\n constructor(publicKey: string, encryptedPrivateKey: string) {\n super(publicKey, encryptedPrivateKey);\n }\n}\n","import { TaxInfoUpdateRequest } from \"./tax-info-update.request\";\n\nexport class OrganizationTaxInfoUpdateRequest extends TaxInfoUpdateRequest {\n taxId: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n}\n","export class SecretVerificationRequest {\n masterPasswordHash: string;\n otp: string;\n authRequestAccessCode: string;\n}\n","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","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/send-file.api\";\nimport { SendTextApi } from \"../api/send-text.api\";\nimport { Send } from \"../domain/send\";\n\nexport class SendRequest {\n type: SendType;\n fileLength?: number;\n name: string;\n notes: string;\n key: string;\n maxAccessCount?: number;\n expirationDate: string;\n deletionDate: string;\n text: SendTextApi;\n file: SendFileApi;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(send: Send, fileLength?: number) {\n this.type = send.type;\n this.fileLength = fileLength;\n this.name = send.name ? send.name.encryptedString : null;\n this.notes = send.notes ? send.notes.encryptedString : null;\n this.maxAccessCount = send.maxAccessCount;\n this.expirationDate = send.expirationDate != null ? send.expirationDate.toISOString() : null;\n this.deletionDate = send.deletionDate != null ? send.deletionDate.toISOString() : null;\n this.key = send.key != null ? send.key.encryptedString : null;\n this.password = send.password;\n this.disabled = send.disabled;\n this.hideEmail = send.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendTextApi();\n this.text.text = send.text.text != null ? send.text.text.encryptedString : null;\n this.text.hidden = send.text.hidden;\n break;\n case SendType.File:\n this.file = new SendFileApi();\n this.file.fileName = send.file.fileName != null ? send.file.fileName.encryptedString : null;\n break;\n default:\n break;\n }\n }\n}\n","export class TaxInfoUpdateRequest {\n country: string;\n postalCode: string;\n}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class TwoFactorEmailRequest extends SecretVerificationRequest {\n email: string;\n deviceIdentifier: string;\n authRequestId: string;\n}\n","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 { EmergencyAccessStatusType } from \"../../enums/emergencyAccessStatusType\";\nimport { EmergencyAccessType } from \"../../enums/emergencyAccessType\";\nimport { KdfType } from \"../../enums/kdfType\";\nimport { CipherResponse } from \"../../vault/models/response/cipher.response\";\n\nimport { BaseResponse } from \"./base.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 avatarColor: 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 this.avatarColor = this.getResponseProperty(\"AvatarColor\");\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 avatarColor: 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 this.avatarColor = this.getResponseProperty(\"AvatarColor\");\n }\n}\n\nexport class EmergencyAccessTakeoverResponse extends BaseResponse {\n keyEncrypted: string;\n kdf: KdfType;\n kdfIterations: number;\n kdfMemory?: number;\n kdfParallelism?: 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 this.kdfMemory = this.getResponseProperty(\"KdfMemory\");\n this.kdfParallelism = this.getResponseProperty(\"KdfParallelism\");\n }\n}\n\nexport class EmergencyAccessViewResponse extends BaseResponse {\n keyEncrypted: string;\n ciphers: CipherResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n this.keyEncrypted = this.getResponseProperty(\"KeyEncrypted\");\n\n const ciphers = this.getResponseProperty(\"Ciphers\");\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n }\n}\n","import { Utils } from \"../../misc/utils\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class ErrorResponse extends BaseResponse {\n message: string;\n validationErrors: { [key: string]: string[] };\n statusCode: number;\n captchaRequired: boolean;\n captchaSiteKey: string;\n\n constructor(response: any, status: number, identityResponse?: boolean) {\n super(response);\n let errorModel = null;\n if (response != null) {\n const responseErrorModel = this.getResponseProperty(\"ErrorModel\");\n if (responseErrorModel && identityResponse) {\n errorModel = responseErrorModel;\n } else {\n errorModel = response;\n }\n }\n\n if (status === 429) {\n this.message = \"Rate limit exceeded. Try again later.\";\n } else if (errorModel) {\n this.message = this.getResponseProperty(\"Message\", errorModel);\n this.validationErrors = this.getResponseProperty(\"ValidationErrors\", errorModel);\n this.captchaSiteKey = this.validationErrors?.HCaptcha_SiteKey?.[0];\n this.captchaRequired = !Utils.isNullOrWhitespace(this.captchaSiteKey);\n }\n this.statusCode = status;\n }\n\n getSingleMessage(): string {\n if (this.validationErrors == null) {\n return this.message;\n }\n for (const key in this.validationErrors) {\n // eslint-disable-next-line\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n if (this.validationErrors[key].length) {\n return this.validationErrors[key][0];\n }\n }\n return this.message;\n }\n\n getAllMessages(): string[] {\n const messages: string[] = [];\n if (this.validationErrors == null) {\n return messages;\n }\n for (const key in this.validationErrors) {\n // eslint-disable-next-line\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n this.validationErrors[key].forEach((item: string) => {\n let prefix = \"\";\n if (key.indexOf(\"[\") > -1 && key.indexOf(\"]\") > -1) {\n const lastSep = key.lastIndexOf(\".\");\n prefix = key.substr(0, lastSep > -1 ? lastSep : key.length) + \": \";\n }\n messages.push(prefix + item);\n });\n }\n return messages;\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class ListResponse extends BaseResponse {\n data: T[];\n continuationToken: string;\n\n constructor(response: any, t: new (dataResponse: any) => T) {\n super(response);\n const data = this.getResponseProperty(\"Data\");\n this.data = data == null ? [] : data.map((dr: any) => new t(dr));\n this.continuationToken = this.getResponseProperty(\"ContinuationToken\");\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\n\nimport { BaseResponse } from \"./base.response\";\n\nexport class PolicyResponse extends BaseResponse {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.type = this.getResponseProperty(\"Type\");\n this.data = this.getResponseProperty(\"Data\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n }\n}\n","import { 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 { Collection } from \"../domain/collection\";\nimport { ITreeNodeObject } from \"../domain/tree-node\";\nimport { CollectionAccessDetailsResponse } 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 | CollectionAccessDetailsResponse) {\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 { 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","export class View {}\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 AbstractMemoryStorageService,\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 { CollectionData } from \"../models/data/collection.data\";\nimport { EncryptedOrganizationKeyData } from \"../models/data/encrypted-organization-key.data\";\nimport { EventData } from \"../models/data/event.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 { KdfConfig } from \"../models/domain/kdf-config\";\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 { CollectionView } from \"../models/view/collection.view\";\nimport { SendView } from \"../models/view/send.view\";\nimport { CipherData } from \"../vault/models/data/cipher.data\";\nimport { FolderData } from \"../vault/models/data/folder.data\";\nimport { LocalData } from \"../vault/models/data/local.data\";\nimport { CipherView } from \"../vault/models/view/cipher.view\";\n\nconst keys = {\n state: \"state\",\n global: \"global\",\n authenticatedAccounts: \"authenticatedAccounts\",\n activeUserId: \"activeUserId\",\n tempAccountSettings: \"tempAccountSettings\", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication\n accountActivity: \"accountActivity\",\n};\n\nconst partialKeys = {\n autoKey: \"_masterkey_auto\",\n biometricKey: \"_masterkey_biometric\",\n masterKey: \"_masterkey\",\n};\n\nconst DDG_SHARED_KEY = \"DuckDuckGoSharedKey\";\n\nexport class StateService<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> implements StateServiceAbstraction\n{\n protected accountsSubject = new BehaviorSubject<{ [userId: string]: TAccount }>({});\n accounts$ = this.accountsSubject.asObservable();\n\n protected activeAccountSubject = new BehaviorSubject(null);\n activeAccount$ = this.activeAccountSubject.asObservable();\n\n protected activeAccountUnlockedSubject = new BehaviorSubject(false);\n activeAccountUnlocked$ = this.activeAccountUnlockedSubject.asObservable();\n\n private hasBeenInited = false;\n private isRecoveredSession = false;\n\n protected accountDiskCache = new BehaviorSubject>({});\n\n // default account serializer, must be overridden by child class\n protected accountDeserializer = Account.fromJSON as (json: Jsonify) => TAccount;\n\n constructor(\n protected storageService: AbstractStorageService,\n protected secureStorageService: AbstractStorageService,\n protected memoryStorageService: AbstractMemoryStorageService,\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 getKdfConfig(options?: StorageOptions): Promise {\n const iterations = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.kdfIterations;\n const memory = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.kdfMemory;\n const parallelism = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.kdfParallelism;\n return new KdfConfig(iterations, memory, parallelism);\n }\n\n async setKdfConfig(config: KdfConfig, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.kdfIterations = config.iterations;\n account.profile.kdfMemory = config.memory;\n account.profile.kdfParallelism = config.parallelism;\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 getApproveLoginRequests(options?: StorageOptions): Promise {\n const approveLoginRequests = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.approveLoginRequests;\n return approveLoginRequests;\n }\n\n async setApproveLoginRequests(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.approveLoginRequests = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getStateVersion(): Promise {\n return (await this.getGlobals(await this.defaultOnDiskLocalOptions())).stateVersion ?? 1;\n }\n\n async setStateVersion(value: number): Promise {\n const globals = await this.getGlobals(await this.defaultOnDiskOptions());\n globals.stateVersion = value;\n await this.saveGlobals(globals, await this.defaultOnDiskOptions());\n }\n\n async getWindow(): Promise {\n const globals = await this.getGlobals(await this.defaultOnDiskOptions());\n return globals?.window != null && Object.keys(globals.window).length > 0\n ? globals.window\n : new WindowState();\n }\n\n async setWindow(value: WindowState, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.window = value;\n return await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async setServerConfig(value: ServerConfigData, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.serverConfig = value;\n return await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getServerConfig(options: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.serverConfig;\n }\n\n async getAvatarColor(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.avatarColor;\n }\n\n async setAvatarColor(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.avatarColor = value;\n return await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n protected async getGlobals(options: StorageOptions): Promise {\n let globals: TGlobalState;\n if (this.useMemory(options.storageLocation)) {\n globals = await this.getGlobalsFromMemory();\n }\n\n if (this.useDisk && globals == null) {\n globals = await this.getGlobalsFromDisk(options);\n }\n\n return globals ?? this.createGlobals();\n }\n\n protected async saveGlobals(globals: TGlobalState, options: StorageOptions) {\n return this.useMemory(options.storageLocation)\n ? this.saveGlobalsToMemory(globals)\n : await this.saveGlobalsToDisk(globals, options);\n }\n\n protected async getGlobalsFromMemory(): Promise {\n return (await this.state()).globals;\n }\n\n protected async getGlobalsFromDisk(options: StorageOptions): Promise {\n return await this.storageService.get(keys.global, options);\n }\n\n protected async saveGlobalsToMemory(globals: TGlobalState): Promise {\n await this.updateState(async (state) => {\n state.globals = globals;\n return state;\n });\n }\n\n protected async saveGlobalsToDisk(globals: TGlobalState, options: StorageOptions): Promise {\n if (options.useSecureStorage) {\n await this.secureStorageService.save(keys.global, globals, options);\n } else {\n await this.storageService.save(keys.global, globals, options);\n }\n }\n\n protected async getAccount(options: StorageOptions): Promise {\n try {\n let account: TAccount;\n if (this.useMemory(options.storageLocation)) {\n account = await this.getAccountFromMemory(options);\n }\n\n if (this.useDisk(options.storageLocation) && account == null) {\n account = await this.getAccountFromDisk(options);\n }\n\n return account;\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected async getAccountFromMemory(options: StorageOptions): Promise {\n return await this.state().then(async (state) => {\n if (state.accounts == null) {\n return null;\n }\n return state.accounts[await this.getUserIdFromMemory(options)];\n });\n }\n\n protected async getUserIdFromMemory(options: StorageOptions): Promise {\n return await this.state().then((state) => {\n return options?.userId != null\n ? state.accounts[options.userId]?.profile?.userId\n : state.activeUserId;\n });\n }\n\n protected async getAccountFromDisk(options: StorageOptions): Promise {\n if (options?.userId == null && (await this.state())?.activeUserId == null) {\n return null;\n }\n\n if (this.useAccountCache) {\n const cachedAccount = this.accountDiskCache.value[options.userId];\n if (cachedAccount != null) {\n return cachedAccount;\n }\n }\n\n const account = options?.useSecureStorage\n ? (await this.secureStorageService.get(options.userId, options)) ??\n (await this.storageService.get(\n options.userId,\n this.reconcileOptions(options, { htmlStorageLocation: HtmlStorageLocation.Local })\n ))\n : await this.storageService.get(options.userId, options);\n\n this.setDiskCache(options.userId, account);\n return account;\n }\n\n protected useMemory(storageLocation: StorageLocation) {\n return storageLocation === StorageLocation.Memory || storageLocation === StorageLocation.Both;\n }\n\n protected useDisk(storageLocation: StorageLocation) {\n return storageLocation === StorageLocation.Disk || storageLocation === StorageLocation.Both;\n }\n\n protected async saveAccount(\n account: TAccount,\n options: StorageOptions = {\n storageLocation: StorageLocation.Both,\n useSecureStorage: false,\n }\n ) {\n return this.useMemory(options.storageLocation)\n ? await this.saveAccountToMemory(account)\n : await this.saveAccountToDisk(account, options);\n }\n\n protected async saveAccountToDisk(account: TAccount, options: StorageOptions): Promise {\n const storageLocation = options.useSecureStorage\n ? this.secureStorageService\n : this.storageService;\n\n await storageLocation.save(`${options.userId}`, account, options);\n\n this.deleteDiskCache(options.userId);\n }\n\n protected async saveAccountToMemory(account: TAccount): Promise {\n if (this.getAccountFromMemory({ userId: account.profile.userId }) !== null) {\n await this.updateState((state) => {\n return new Promise((resolve) => {\n state.accounts[account.profile.userId] = account;\n resolve(state);\n });\n });\n }\n await this.pushAccounts();\n }\n\n protected async scaffoldNewAccountStorage(account: TAccount): Promise {\n // We don't want to manipulate the referenced in memory account\n const deepClone = JSON.parse(JSON.stringify(account));\n await this.scaffoldNewAccountLocalStorage(deepClone);\n await this.scaffoldNewAccountSessionStorage(deepClone);\n await this.scaffoldNewAccountMemoryStorage(deepClone);\n }\n\n // TODO: There is a tech debt item for splitting up these methods - only Web uses multiple storage locations in its storageService.\n // For now these methods exist with some redundancy to facilitate this special web requirement.\n protected async scaffoldNewAccountLocalStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskLocalOptions()\n )\n );\n // EnvironmentUrls are set before authenticating and should override whatever is stored from any previous session\n const environmentUrls = account.settings.environmentUrls;\n if (storedAccount?.settings != null) {\n account.settings = storedAccount.settings;\n } else if (await this.storageService.has(keys.tempAccountSettings)) {\n account.settings = await this.storageService.get(keys.tempAccountSettings);\n await this.storageService.remove(keys.tempAccountSettings);\n }\n account.settings.environmentUrls = environmentUrls;\n if (account.settings.vaultTimeoutAction === \"logOut\" && account.settings.vaultTimeout != null) {\n account.tokens.accessToken = null;\n account.tokens.refreshToken = null;\n account.profile.apiKeyClientId = null;\n account.keys.apiKeyClientSecret = null;\n }\n await this.saveAccount(\n account,\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskLocalOptions()\n )\n );\n }\n\n protected async scaffoldNewAccountMemoryStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskMemoryOptions()\n )\n );\n if (storedAccount?.settings != null) {\n storedAccount.settings.environmentUrls = account.settings.environmentUrls;\n account.settings = storedAccount.settings;\n }\n await this.storageService.save(\n account.profile.userId,\n account,\n await this.defaultOnDiskMemoryOptions()\n );\n await this.saveAccount(\n account,\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskMemoryOptions()\n )\n );\n }\n\n protected async scaffoldNewAccountSessionStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: account.profile.userId }, await this.defaultOnDiskOptions())\n );\n if (storedAccount?.settings != null) {\n storedAccount.settings.environmentUrls = account.settings.environmentUrls;\n account.settings = storedAccount.settings;\n }\n await this.storageService.save(\n account.profile.userId,\n account,\n await this.defaultOnDiskMemoryOptions()\n );\n await this.saveAccount(\n account,\n this.reconcileOptions({ userId: account.profile.userId }, await this.defaultOnDiskOptions())\n );\n }\n //\n\n protected async pushAccounts(): Promise {\n await this.pruneInMemoryAccounts();\n await this.state().then((state) => {\n if (state.accounts == null || Object.keys(state.accounts).length < 1) {\n this.accountsSubject.next({});\n return;\n }\n\n this.accountsSubject.next(state.accounts);\n });\n }\n\n protected reconcileOptions(\n requestedOptions: StorageOptions,\n defaultOptions: StorageOptions\n ): StorageOptions {\n if (requestedOptions == null) {\n return defaultOptions;\n }\n requestedOptions.userId = requestedOptions?.userId ?? defaultOptions.userId;\n requestedOptions.storageLocation =\n requestedOptions?.storageLocation ?? defaultOptions.storageLocation;\n requestedOptions.useSecureStorage =\n requestedOptions?.useSecureStorage ?? defaultOptions.useSecureStorage;\n requestedOptions.htmlStorageLocation =\n requestedOptions?.htmlStorageLocation ?? defaultOptions.htmlStorageLocation;\n requestedOptions.keySuffix = requestedOptions?.keySuffix ?? defaultOptions.keySuffix;\n return requestedOptions;\n }\n\n protected async defaultInMemoryOptions(): Promise {\n return {\n storageLocation: StorageLocation.Memory,\n userId: (await this.state()).activeUserId,\n };\n }\n\n protected async defaultOnDiskOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Session,\n userId: (await this.state())?.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultOnDiskLocalOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Local,\n userId: (await this.state())?.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultOnDiskMemoryOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Memory,\n userId: (await this.state())?.activeUserId ?? (await this.getUserId()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultSecureStorageOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n useSecureStorage: true,\n userId: (await this.state())?.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n };\n }\n\n protected async getActiveUserIdFromStorage(): Promise {\n return await this.storageService.get(keys.activeUserId);\n }\n\n protected async removeAccountFromLocalStorage(userId: string = null): Promise {\n userId = userId ?? (await this.state())?.activeUserId;\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskLocalOptions())\n );\n await this.saveAccount(\n this.resetAccount(storedAccount),\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskLocalOptions())\n );\n }\n\n protected async removeAccountFromSessionStorage(userId: string = null): Promise {\n userId = userId ?? (await this.state())?.activeUserId;\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskOptions())\n );\n await this.saveAccount(\n this.resetAccount(storedAccount),\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskOptions())\n );\n }\n\n protected async removeAccountFromSecureStorage(userId: string = null): Promise {\n userId = userId ?? (await this.state())?.activeUserId;\n await this.setCryptoMasterKeyAuto(null, { userId: userId });\n await this.setCryptoMasterKeyBiometric(null, { userId: userId });\n await this.setCryptoMasterKeyB64(null, { userId: userId });\n }\n\n protected async removeAccountFromMemory(userId: string = null): Promise {\n await this.updateState(async (state) => {\n userId = userId ?? state.activeUserId;\n delete state.accounts[userId];\n\n this.deleteDiskCache(userId);\n\n return state;\n });\n }\n\n protected async pruneInMemoryAccounts() {\n // We preserve settings for logged out accounts, but we don't want to consider them when thinking about active account state\n for (const userId in (await this.state())?.accounts) {\n if (!(await this.getIsAuthenticated({ userId: userId }))) {\n await this.removeAccountFromMemory(userId);\n }\n }\n }\n\n // settings persist even on reset, and are not effected by this method\n protected resetAccount(account: TAccount) {\n const persistentAccountInformation = { settings: account.settings };\n return Object.assign(this.createAccount(), persistentAccountInformation);\n }\n\n protected async setAccountEnvironmentUrls(account: TAccount): Promise {\n account.settings.environmentUrls = await this.getGlobalEnvironmentUrls();\n return account;\n }\n\n protected async getGlobalEnvironmentUrls(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n return (await this.getGlobals(options)).environmentUrls ?? new EnvironmentUrls();\n }\n\n protected async clearDecryptedDataForActiveUser(): Promise {\n await this.updateState(async (state) => {\n const userId = state?.activeUserId;\n if (userId != null && state?.accounts[userId]?.data != null) {\n state.accounts[userId].data = new AccountData();\n }\n\n return state;\n });\n }\n\n protected createAccount(init: Partial = null): TAccount {\n return this.stateFactory.createAccount(init);\n }\n\n protected createGlobals(init: Partial = null): TGlobalState {\n return this.stateFactory.createGlobal(init);\n }\n\n protected async deAuthenticateAccount(userId: string): Promise {\n await this.setAccessToken(null, { userId: userId });\n await this.setLastActive(null, { userId: userId });\n await this.updateState(async (state) => {\n state.authenticatedAccounts = state.authenticatedAccounts.filter((id) => id !== userId);\n\n await this.storageService.save(keys.authenticatedAccounts, state.authenticatedAccounts);\n\n return state;\n });\n }\n\n protected async removeAccountFromDisk(userId: string) {\n await this.removeAccountFromSessionStorage(userId);\n await this.removeAccountFromLocalStorage(userId);\n await this.removeAccountFromSecureStorage(userId);\n }\n\n protected async dynamicallySetActiveUser() {\n const accounts = (await this.state())?.accounts;\n if (accounts == null || Object.keys(accounts).length < 1) {\n await this.setActiveUser(null);\n return;\n }\n for (const userId in accounts) {\n if (userId == null) {\n continue;\n }\n if (await this.getIsAuthenticated({ userId: userId })) {\n await this.setActiveUser(userId);\n break;\n }\n await this.setActiveUser(null);\n }\n }\n\n private async getTimeoutBasedStorageOptions(options?: StorageOptions): Promise {\n const timeoutAction = await this.getVaultTimeoutAction({ userId: options?.userId });\n const timeout = await this.getVaultTimeout({ userId: options?.userId });\n const defaultOptions =\n timeoutAction === \"logOut\" && timeout != null\n ? await this.defaultInMemoryOptions()\n : await this.defaultOnDiskOptions();\n return this.reconcileOptions(options, defaultOptions);\n }\n\n private async saveSecureStorageKey(key: string, value: string, options?: StorageOptions) {\n return value == null\n ? await this.secureStorageService.remove(`${options.userId}${key}`, options)\n : await this.secureStorageService.save(`${options.userId}${key}`, value, options);\n }\n\n protected async state(): Promise> {\n const state = await this.memoryStorageService.get>(keys.state, {\n deserializer: (s) => State.fromJSON(s, this.accountDeserializer),\n });\n return state;\n }\n\n private async setState(state: State): Promise {\n await this.memoryStorageService.save(keys.state, state);\n }\n\n protected async updateState(\n stateUpdater: (state: State) => Promise>\n ) {\n await this.state().then(async (state) => {\n const updatedState = await stateUpdater(state);\n if (updatedState == null) {\n throw new Error(\"Attempted to update state to null value\");\n }\n\n await this.setState(updatedState);\n });\n }\n\n private setDiskCache(key: string, value: TAccount, options?: StorageOptions) {\n if (this.useAccountCache) {\n this.accountDiskCache.value[key] = value;\n this.accountDiskCache.next(this.accountDiskCache.value);\n }\n }\n\n private deleteDiskCache(key: string) {\n if (this.useAccountCache) {\n delete this.accountDiskCache.value[key];\n this.accountDiskCache.next(this.accountDiskCache.value);\n }\n }\n}\n\nfunction withPrototypeForArrayMembers(\n memberConstructor: new (...args: any[]) => T,\n memberConverter: (input: any) => T = (i) => i\n): (\n target: any,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n) => { value: (...args: any[]) => Promise } {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod = descriptor.value;\n\n return {\n value: function (...args: any[]) {\n const originalResult: Promise = originalMethod.apply(this, args);\n\n if (!(originalResult instanceof Promise)) {\n throw new Error(\n `Error applying prototype to stored value -- result is not a promise for method ${String(\n propertyKey\n )}`\n );\n }\n\n return originalResult.then((result) => {\n if (result == null) {\n return null;\n } else if (!(result instanceof Array)) {\n throw new Error(\n `Attempted to retrieve non array type from state as an array for method ${String(\n propertyKey\n )}`\n );\n } else {\n return result.map((r) => {\n return r == null ||\n r.constructor.name === memberConstructor.prototype.constructor.name\n ? r\n : memberConverter(\n Object.create(memberConstructor.prototype, Object.getOwnPropertyDescriptors(r))\n );\n });\n }\n });\n },\n };\n };\n}\n\nfunction withPrototypeForObjectValues(\n valuesConstructor: new (...args: any[]) => T,\n valuesConverter: (input: any) => T = (i) => i\n): (\n target: any,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n) => { value: (...args: any[]) => Promise<{ [key: string]: T }> } {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod = descriptor.value;\n\n return {\n value: function (...args: any[]) {\n const originalResult: Promise<{ [key: string]: T }> = originalMethod.apply(this, args);\n\n if (!(originalResult instanceof Promise)) {\n throw new Error(\n `Error applying prototype to stored value -- result is not a promise for method ${String(\n propertyKey\n )}`\n );\n }\n\n return originalResult.then((result) => {\n if (result == null) {\n return null;\n } else {\n for (const [key, val] of Object.entries(result)) {\n result[key] =\n val == null || val.constructor.name === valuesConstructor.prototype.constructor.name\n ? valuesConverter(val)\n : valuesConverter(\n Object.create(\n valuesConstructor.prototype,\n Object.getOwnPropertyDescriptors(val)\n )\n );\n }\n\n return result as { [key: string]: T };\n }\n });\n },\n };\n };\n}\n","import { I18nService } from \"../abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport {\n TwoFactorProviderDetails,\n TwoFactorService as TwoFactorServiceAbstraction,\n} from \"../abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"../enums/twoFactorProviderType\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identity-two-factor.response\";\n\nexport const TwoFactorProviders: Partial> =\n {\n [TwoFactorProviderType.Authenticator]: {\n type: TwoFactorProviderType.Authenticator,\n name: null as string,\n description: null as string,\n priority: 1,\n sort: 1,\n premium: false,\n },\n [TwoFactorProviderType.Yubikey]: {\n type: TwoFactorProviderType.Yubikey,\n name: null as string,\n description: null as string,\n priority: 3,\n sort: 2,\n premium: true,\n },\n [TwoFactorProviderType.Duo]: {\n type: TwoFactorProviderType.Duo,\n name: \"Duo\",\n description: null as string,\n priority: 2,\n sort: 3,\n premium: true,\n },\n [TwoFactorProviderType.OrganizationDuo]: {\n type: TwoFactorProviderType.OrganizationDuo,\n name: \"Duo (Organization)\",\n description: null as string,\n priority: 10,\n sort: 4,\n premium: false,\n },\n [TwoFactorProviderType.Email]: {\n type: TwoFactorProviderType.Email,\n name: null as string,\n description: null as string,\n priority: 0,\n sort: 6,\n premium: false,\n },\n [TwoFactorProviderType.WebAuthn]: {\n type: TwoFactorProviderType.WebAuthn,\n name: null as string,\n description: null as string,\n priority: 4,\n sort: 5,\n premium: true,\n },\n };\n\nexport class TwoFactorService implements TwoFactorServiceAbstraction {\n private twoFactorProvidersData: Map;\n private selectedTwoFactorProviderType: TwoFactorProviderType = null;\n\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n init() {\n TwoFactorProviders[TwoFactorProviderType.Email].name = this.i18nService.t(\"emailTitle\");\n TwoFactorProviders[TwoFactorProviderType.Email].description = this.i18nService.t(\"emailDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Authenticator].name =\n this.i18nService.t(\"authenticatorAppTitle\");\n TwoFactorProviders[TwoFactorProviderType.Authenticator].description =\n this.i18nService.t(\"authenticatorAppDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Duo].description = this.i18nService.t(\"duoDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].name =\n \"Duo (\" + this.i18nService.t(\"organization\") + \")\";\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].description =\n this.i18nService.t(\"duoOrganizationDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].name = this.i18nService.t(\"webAuthnTitle\");\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].description =\n this.i18nService.t(\"webAuthnDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Yubikey].name = this.i18nService.t(\"yubiKeyTitle\");\n TwoFactorProviders[TwoFactorProviderType.Yubikey].description =\n this.i18nService.t(\"yubiKeyDesc\");\n }\n\n getSupportedProviders(win: Window): TwoFactorProviderDetails[] {\n const providers: any[] = [];\n if (this.twoFactorProvidersData == null) {\n return providers;\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.OrganizationDuo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.OrganizationDuo]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Authenticator)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Authenticator]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Yubikey)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Yubikey]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.Duo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Duo]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.WebAuthn) &&\n this.platformUtilsService.supportsWebAuthn(win)\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.WebAuthn]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Email)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Email]);\n }\n\n return providers;\n }\n\n getDefaultProvider(webAuthnSupported: boolean): TwoFactorProviderType {\n if (this.twoFactorProvidersData == null) {\n return null;\n }\n\n if (\n this.selectedTwoFactorProviderType != null &&\n this.twoFactorProvidersData.has(this.selectedTwoFactorProviderType)\n ) {\n return this.selectedTwoFactorProviderType;\n }\n\n let providerType: TwoFactorProviderType = null;\n let providerPriority = -1;\n this.twoFactorProvidersData.forEach((_value, type) => {\n const provider = (TwoFactorProviders as any)[type];\n if (provider != null && provider.priority > providerPriority) {\n if (type === TwoFactorProviderType.WebAuthn && !webAuthnSupported) {\n return;\n }\n\n providerType = type;\n providerPriority = provider.priority;\n }\n });\n\n return providerType;\n }\n\n setSelectedProvider(type: TwoFactorProviderType) {\n this.selectedTwoFactorProviderType = type;\n }\n\n clearSelectedProvider() {\n this.selectedTwoFactorProviderType = null;\n }\n\n setProviders(response: IdentityTwoFactorResponse) {\n this.twoFactorProvidersData = response.twoFactorProviders2;\n }\n\n clearProviders() {\n this.twoFactorProvidersData = null;\n }\n\n getProviders() {\n return this.twoFactorProvidersData;\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetric-crypto-key\";\nimport { CipherType } from \"../enums/cipher-type\";\nimport { CipherData } from \"../models/data/cipher.data\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport { Field } from \"../models/domain/field\";\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: CipherView, b: CipherView) => number;\n sortCiphersByLastUsedThenName: (a: CipherView, b: CipherView) => 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 { Folder } from \"../../models/domain/folder\";\nimport { FolderResponse } from \"../../models/response/folder.response\";\n\nexport class FolderApiServiceAbstraction {\n save: (folder: Folder) => Promise;\n delete: (id: string) => Promise;\n get: (id: string) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { SymmetricCryptoKey } from \"../../../models/domain/symmetric-crypto-key\";\nimport { FolderData } from \"../../models/data/folder.data\";\nimport { Folder } from \"../../models/domain/folder\";\nimport { FolderView } from \"../../models/view/folder.view\";\n\nexport abstract class FolderService {\n folders$: Observable;\n folderViews$: Observable;\n\n clearCache: () => Promise;\n encrypt: (model: FolderView, key?: SymmetricCryptoKey) => Promise;\n get: (id: string) => Promise;\n getAllFromState: () => Promise;\n /**\n * @deprecated Only use in CLI!\n */\n getFromState: (id: string) => Promise;\n /**\n * @deprecated Only use in CLI!\n */\n getAllDecryptedFromState: () => Promise;\n}\n\nexport abstract class InternalFolderService extends FolderService {\n upsert: (folder: FolderData | FolderData[]) => Promise;\n replace: (folders: { [id: string]: FolderData }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n}\n","export abstract class PasswordRepromptService {\n protectedFields: () => string[];\n showPasswordPrompt: () => Promise;\n enabled: () => 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 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","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 \"../../../models/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/cipher-reprompt-type\";\nimport { CipherType } from \"../../enums/cipher-type\";\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 { FieldType } from \"../../../enums/fieldType\";\nimport { LinkedIdType } from \"../../../enums/linkedIdType\";\nimport { FieldApi } from \"../../../models/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 \"../../../models/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 \"../../../models/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 \"../../../models/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 { SecureNoteType } from \"../../../enums/secureNoteType\";\nimport { SecureNoteApi } from \"../../../models/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 { Jsonify } from \"type-fest\";\n\nimport { Utils } from \"../../../misc/utils\";\nimport Domain from \"../../../models/domain/domain-base\";\nimport { EncString } from \"../../../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../models/domain/symmetric-crypto-key\";\nimport { AttachmentData } from \"../data/attachment.data\";\nimport { AttachmentView } from \"../view/attachment.view\";\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 Domain from \"../../../models/domain/domain-base\";\nimport { EncString } from \"../../../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../models/domain/symmetric-crypto-key\";\nimport { CardData } from \"../data/card.data\";\nimport { CardView } from \"../view/card.view\";\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 { Decryptable } from \"../../../interfaces/decryptable.interface\";\nimport Domain from \"../../../models/domain/domain-base\";\nimport { EncString } from \"../../../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../models/domain/symmetric-crypto-key\";\nimport { InitializerKey } from \"../../../services/cryptography/initializer-key\";\nimport { CipherRepromptType } from \"../../enums/cipher-reprompt-type\";\nimport { CipherType } from \"../../enums/cipher-type\";\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 { Field } from \"./field\";\nimport { Identity } from \"./identity\";\nimport { Login } from \"./login\";\nimport { Password } from \"./password\";\nimport { SecureNote } from \"./secure-note\";\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 { Jsonify } from \"type-fest\";\n\nimport { FieldType } from \"../../../enums/fieldType\";\nimport { LinkedIdType } from \"../../../enums/linkedIdType\";\nimport Domain from \"../../../models/domain/domain-base\";\nimport { EncString } from \"../../../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../models/domain/symmetric-crypto-key\";\nimport { FieldData } from \"../data/field.data\";\nimport { FieldView } from \"../view/field.view\";\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 Domain from \"../../../models/domain/domain-base\";\nimport { EncString } from \"../../../models/domain/enc-string\";\nimport { FolderData } from \"../data/folder.data\";\nimport { FolderView } from \"../view/folder.view\";\n\nexport class Folder extends Domain {\n id: string;\n name: EncString;\n revisionDate: Date;\n\n constructor(obj?: FolderData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n name: null,\n },\n [\"id\"]\n );\n\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n }\n\n decrypt(): Promise {\n return this.decryptObj(\n new FolderView(this),\n {\n name: null,\n },\n null\n );\n }\n\n static fromJSON(obj: Jsonify) {\n const revisionDate = obj.revisionDate == null ? null : new Date(obj.revisionDate);\n return Object.assign(new Folder(), obj, { name: EncString.fromJSON(obj.name), revisionDate });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport Domain from \"../../../models/domain/domain-base\";\nimport { EncString } from \"../../../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../models/domain/symmetric-crypto-key\";\nimport { IdentityData } from \"../data/identity.data\";\nimport { IdentityView } from \"../view/identity.view\";\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 Domain from \"../../../models/domain/domain-base\";\nimport { EncString } from \"../../../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../models/domain/symmetric-crypto-key\";\nimport { LoginUriData } from \"../data/login-uri.data\";\nimport { LoginUriView } from \"../view/login-uri.view\";\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 Domain from \"../../../models/domain/domain-base\";\nimport { EncString } from \"../../../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../models/domain/symmetric-crypto-key\";\nimport { LoginData } from \"../data/login.data\";\nimport { LoginView } from \"../view/login.view\";\n\nimport { LoginUri } from \"./login-uri\";\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 { Jsonify } from \"type-fest\";\n\nimport Domain from \"../../../models/domain/domain-base\";\nimport { EncString } from \"../../../models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../models/domain/symmetric-crypto-key\";\nimport { PasswordHistoryData } from \"../data/password-history.data\";\nimport { PasswordHistoryView } from \"../view/password-history.view\";\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 { Jsonify } from \"type-fest\";\n\nimport { SecureNoteType } from \"../../../enums/secureNoteType\";\nimport Domain from \"../../../models/domain/domain-base\";\nimport { SymmetricCryptoKey } from \"../../../models/domain/symmetric-crypto-key\";\nimport { SecureNoteData } from \"../data/secure-note.data\";\nimport { SecureNoteView } from \"../view/secure-note.view\";\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","export class CipherBulkDeleteRequest {\n ids: string[];\n organizationId: string;\n\n constructor(ids: string[], organizationId?: string) {\n this.ids = ids == null ? [] : ids;\n this.organizationId = organizationId;\n }\n}\n","export class CipherCollectionsRequest {\n collectionIds: string[];\n\n constructor(collectionIds: string[]) {\n this.collectionIds = collectionIds == null ? [] : collectionIds;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipher.request\";\n\nexport class CipherCreateRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipher.request\";\n\nexport class CipherWithIdRequest extends CipherRequest {\n id: string;\n\n constructor(cipher: Cipher) {\n super(cipher);\n this.id = cipher.id;\n }\n}\n","export class AttachmentRequest {\n fileName: string;\n key: string;\n fileSize: number;\n adminRequest: boolean;\n}\n","import { CardApi } from \"../../../models/api/card.api\";\nimport { FieldApi } from \"../../../models/api/field.api\";\nimport { IdentityApi } from \"../../../models/api/identity.api\";\nimport { LoginUriApi } from \"../../../models/api/login-uri.api\";\nimport { LoginApi } from \"../../../models/api/login.api\";\nimport { SecureNoteApi } from \"../../../models/api/secure-note.api\";\nimport { CipherRepromptType } from \"../../enums/cipher-reprompt-type\";\nimport { CipherType } from \"../../enums/cipher-type\";\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 { Folder } from \"../domain/folder\";\n\nexport class FolderRequest {\n name: string;\n\n constructor(folder: Folder) {\n this.name = folder.name ? folder.name.encryptedString : null;\n }\n}\n","import { BaseResponse } from \"../../../models/response/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 \"../../../models/response/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 { CardApi } from \"../../../models/api/card.api\";\nimport { FieldApi } from \"../../../models/api/field.api\";\nimport { IdentityApi } from \"../../../models/api/identity.api\";\nimport { LoginApi } from \"../../../models/api/login.api\";\nimport { SecureNoteApi } from \"../../../models/api/secure-note.api\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\nimport { CipherRepromptType } from \"../../enums/cipher-reprompt-type\";\n\nimport { AttachmentResponse } from \"./attachment.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 { Jsonify } from \"type-fest\";\n\nimport { SymmetricCryptoKey } from \"../../../models/domain/symmetric-crypto-key\";\nimport { View } from \"../../../models/view/view\";\nimport { Attachment } from \"../domain/attachment\";\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 { LinkedIdType } from \"../../../enums/linkedIdType\";\nimport { InitializerMetadata } from \"../../../interfaces/initializer-metadata.interface\";\nimport { View } from \"../../../models/view/view\";\nimport { InitializerKey } from \"../../../services/cryptography/initializer-key\";\nimport { CipherRepromptType } from \"../../enums/cipher-reprompt-type\";\nimport { CipherType } from \"../../enums/cipher-type\";\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\";\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 { Jsonify } from \"type-fest\";\n\nimport { FieldType } from \"../../../enums/fieldType\";\nimport { LinkedIdType } from \"../../../enums/linkedIdType\";\nimport { View } from \"../../../models/view/view\";\nimport { Field } from \"../domain/field\";\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 { ITreeNodeObject } from \"../../../models/domain/tree-node\";\nimport { View } from \"../../../models/view/view\";\nimport { Folder } from \"../domain/folder\";\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\";\nimport { View } from \"../../../models/view/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 { View } from \"../../../models/view/view\";\nimport { LoginUri } from \"../domain/login-uri\";\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 { View } from \"../../../models/view/view\";\nimport { Password } from \"../domain/password\";\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 { Directive, HostListener, Input, OnDestroy, Optional } from \"@angular/core\";\nimport { BehaviorSubject, finalize, Subject, takeUntil, tap } from \"rxjs\";\n\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\n\nimport { ButtonLikeAbstraction } from \"../shared/button-like.abstraction\";\nimport { FunctionReturningAwaitable, functionToObservable } from \"../utils/function-to-observable\";\n\n/**\n * Allow a single button to perform async actions on click and reflect the progress in the UI by automatically\n * activating the loading effect while the action is processed.\n */\n@Directive({\n selector: \"[bitAction]\",\n})\nexport class BitActionDirective implements OnDestroy {\n private destroy$ = new Subject();\n private _loading$ = new BehaviorSubject(false);\n\n disabled = false;\n\n @Input(\"bitAction\") protected handler: FunctionReturningAwaitable;\n\n readonly loading$ = this._loading$.asObservable();\n\n constructor(\n private buttonComponent: ButtonLikeAbstraction,\n @Optional() private validationService?: ValidationService,\n @Optional() private logService?: LogService\n ) {}\n\n get loading() {\n return this._loading$.value;\n }\n\n set loading(value: boolean) {\n this._loading$.next(value);\n this.buttonComponent.loading = value;\n }\n\n @HostListener(\"click\")\n protected async onClick() {\n if (!this.handler || this.loading || this.disabled || this.buttonComponent.disabled) {\n return;\n }\n\n this.loading = true;\n functionToObservable(this.handler)\n .pipe(\n tap({\n error: (err: unknown) => {\n this.logService?.error(`Async action exception: ${err}`);\n this.validationService?.showError(err);\n },\n }),\n finalize(() => (this.loading = false)),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { Directive, Input, OnDestroy, OnInit, Optional } from \"@angular/core\";\nimport { FormGroupDirective } from \"@angular/forms\";\nimport { BehaviorSubject, catchError, filter, of, Subject, switchMap, takeUntil } from \"rxjs\";\n\nimport { LogService } from \"@bitwarden/common/abstractions/log.service\";\nimport { ValidationService } from \"@bitwarden/common/abstractions/validation.service\";\n\nimport { FunctionReturningAwaitable, functionToObservable } from \"../utils/function-to-observable\";\n\n/**\n * Allow a form to perform async actions on submit, disabling the form while the action is processing.\n */\n@Directive({\n selector: \"[formGroup][bitSubmit]\",\n})\nexport class BitSubmitDirective implements OnInit, OnDestroy {\n private destroy$ = new Subject();\n private _loading$ = new BehaviorSubject(false);\n private _disabled$ = new BehaviorSubject(false);\n\n @Input(\"bitSubmit\") protected handler: FunctionReturningAwaitable;\n\n readonly loading$ = this._loading$.asObservable();\n readonly disabled$ = this._disabled$.asObservable();\n\n constructor(\n private formGroupDirective: FormGroupDirective,\n @Optional() validationService?: ValidationService,\n @Optional() logService?: LogService\n ) {\n formGroupDirective.ngSubmit\n .pipe(\n filter(() => !this.disabled),\n switchMap(() => {\n // Calling functionToObservable exectues the sync part of the handler\n // allowing the function to check form validity before it gets disabled.\n const awaitable = functionToObservable(this.handler);\n\n // Disable form\n this.loading = true;\n\n return awaitable.pipe(\n catchError((err: unknown) => {\n logService?.error(`Async submit exception: ${err}`);\n validationService?.showError(err);\n return of(undefined);\n })\n );\n }),\n takeUntil(this.destroy$)\n )\n .subscribe({\n next: () => (this.loading = false),\n complete: () => (this.loading = false),\n });\n }\n\n ngOnInit(): void {\n this.formGroupDirective.statusChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((c) => this._disabled$.next(c === \"DISABLED\"));\n }\n\n get disabled() {\n return this._disabled$.value;\n }\n\n set disabled(value: boolean) {\n this._disabled$.next(value);\n }\n\n get loading() {\n return this._loading$.value;\n }\n\n set loading(value: boolean) {\n this.disabled = value;\n this._loading$.next(value);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { Directive, Input, OnDestroy, Optional } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { ButtonLikeAbstraction } from \"../shared/button-like.abstraction\";\n\nimport { BitActionDirective } from \"./bit-action.directive\";\nimport { BitSubmitDirective } from \"./bit-submit.directive\";\n\n/**\n * This directive has two purposes:\n *\n * When attached to a submit button:\n * - Activates the button loading effect while the form is processing an async submit action.\n * - Disables the button while a `bitAction` directive on another button is being processed.\n *\n * When attached to a button with `bitAction` directive inside of a form:\n * - Disables the button while the `bitSubmit` directive is processing an async submit action.\n * - Disables the button while a `bitAction` directive on another button is being processed.\n * - Disables form submission while the `bitAction` directive is processing an async action.\n */\n@Directive({\n selector: \"button[bitFormButton]\",\n})\nexport class BitFormButtonDirective implements OnDestroy {\n private destroy$ = new Subject();\n\n @Input() type: string;\n\n constructor(\n buttonComponent: ButtonLikeAbstraction,\n @Optional() submitDirective?: BitSubmitDirective,\n @Optional() actionDirective?: BitActionDirective\n ) {\n if (submitDirective && buttonComponent) {\n submitDirective.loading$.pipe(takeUntil(this.destroy$)).subscribe((loading) => {\n if (this.type === \"submit\") {\n buttonComponent.loading = loading;\n } else {\n buttonComponent.disabled = loading;\n }\n });\n\n submitDirective.disabled$.pipe(takeUntil(this.destroy$)).subscribe((disabled) => {\n buttonComponent.disabled = disabled;\n });\n }\n\n if (submitDirective && actionDirective) {\n actionDirective.loading$.pipe(takeUntil(this.destroy$)).subscribe((disabled) => {\n submitDirective.disabled = disabled;\n });\n\n submitDirective.disabled$.pipe(takeUntil(this.destroy$)).subscribe((disabled) => {\n actionDirective.disabled = disabled;\n });\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { Component, Input, OnChanges } from \"@angular/core\";\nimport { DomSanitizer, SafeResourceUrl } from \"@angular/platform-browser\";\n\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\ntype SizeTypes = \"xlarge\" | \"large\" | \"default\" | \"small\" | \"xsmall\";\n\nconst SizeClasses: Record = {\n xlarge: [\"tw-h-24\", \"tw-w-24\"],\n large: [\"tw-h-16\", \"tw-w-16\"],\n default: [\"tw-h-10\", \"tw-w-10\"],\n small: [\"tw-h-7\", \"tw-w-7\"],\n xsmall: [\"tw-h-6\", \"tw-w-6\"],\n};\n\n@Component({\n selector: \"bit-avatar\",\n template: ``,\n})\nexport class AvatarComponent implements OnChanges {\n @Input() border = false;\n @Input() color?: string;\n @Input() id?: string;\n @Input() text?: string;\n @Input() title: string;\n @Input() size: SizeTypes = \"default\";\n\n private svgCharCount = 2;\n private svgFontSize = 20;\n private svgFontWeight = 300;\n private svgSize = 48;\n src: SafeResourceUrl;\n\n constructor(public sanitizer: DomSanitizer) {}\n\n ngOnChanges() {\n this.generate();\n }\n\n get classList() {\n return [\"tw-rounded-full\"]\n .concat(SizeClasses[this.size] ?? [])\n .concat(this.border ? [\"tw-border\", \"tw-border-solid\", \"tw-border-secondary-500\"] : []);\n }\n\n private generate() {\n let chars: string = null;\n const upperCaseText = this.text?.toUpperCase() ?? \"\";\n\n chars = this.getFirstLetters(upperCaseText, this.svgCharCount);\n\n if (chars == null) {\n chars = this.unicodeSafeSubstring(upperCaseText, this.svgCharCount);\n }\n\n // If the chars contain an emoji, only show it.\n if (chars.match(Utils.regexpEmojiPresentation)) {\n chars = chars.match(Utils.regexpEmojiPresentation)[0];\n }\n\n let svg: HTMLElement;\n let hexColor = this.color;\n\n if (!Utils.isNullOrWhitespace(this.color)) {\n svg = this.createSvgElement(this.svgSize, hexColor);\n } else if (!Utils.isNullOrWhitespace(this.id)) {\n hexColor = Utils.stringToColor(this.id.toString());\n svg = this.createSvgElement(this.svgSize, hexColor);\n } else {\n hexColor = Utils.stringToColor(upperCaseText);\n svg = this.createSvgElement(this.svgSize, hexColor);\n }\n\n const charObj = this.createTextElement(chars, hexColor);\n svg.appendChild(charObj);\n const html = window.document.createElement(\"div\").appendChild(svg).outerHTML;\n const svgHtml = window.btoa(unescape(encodeURIComponent(html)));\n this.src = this.sanitizer.bypassSecurityTrustResourceUrl(\n \"data:image/svg+xml;base64,\" + svgHtml\n );\n }\n\n private getFirstLetters(data: string, count: number): string {\n const parts = data.split(\" \");\n if (parts.length > 1) {\n let text = \"\";\n for (let i = 0; i < count; i++) {\n text += this.unicodeSafeSubstring(parts[i], 1);\n }\n return text;\n }\n return null;\n }\n\n private createSvgElement(size: number, color: string): HTMLElement {\n const svgTag = window.document.createElement(\"svg\");\n svgTag.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n svgTag.setAttribute(\"pointer-events\", \"none\");\n svgTag.setAttribute(\"width\", size.toString());\n svgTag.setAttribute(\"height\", size.toString());\n svgTag.style.backgroundColor = color;\n svgTag.style.width = size + \"px\";\n svgTag.style.height = size + \"px\";\n return svgTag;\n }\n\n private createTextElement(character: string, color: string): HTMLElement {\n const textTag = window.document.createElement(\"text\");\n textTag.setAttribute(\"text-anchor\", \"middle\");\n textTag.setAttribute(\"y\", \"50%\");\n textTag.setAttribute(\"x\", \"50%\");\n textTag.setAttribute(\"dy\", \"0.35em\");\n textTag.setAttribute(\"pointer-events\", \"auto\");\n textTag.setAttribute(\"fill\", Utils.pickTextColorBasedOnBgColor(color, 135, true));\n textTag.setAttribute(\n \"font-family\",\n '\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,' +\n 'sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\"'\n );\n textTag.textContent = character;\n textTag.style.fontWeight = this.svgFontWeight.toString();\n textTag.style.fontSize = this.svgFontSize + \"px\";\n return textTag;\n }\n\n private unicodeSafeSubstring(str: string, count: number) {\n const characters = str.match(/./gu);\n return characters != null ? characters.slice(0, count).join(\"\") : \"\";\n }\n}\n","
    \n \n {{ item }}\n , \n \n \n {{ \"plusNMore\" | i18n: (items.length - filteredItems.length).toString() }}\n \n
    \n","import { Component, Input, OnChanges } from \"@angular/core\";\n\nimport { BadgeTypes } from \"../badge\";\n\n@Component({\n selector: \"bit-badge-list\",\n templateUrl: \"badge-list.component.html\",\n})\nexport class BadgeListComponent implements OnChanges {\n private _maxItems: number;\n\n protected filteredItems: string[] = [];\n protected isFiltered = false;\n\n @Input() badgeType: BadgeTypes = \"primary\";\n @Input() items: string[] = [];\n\n @Input()\n get maxItems(): number | undefined {\n return this._maxItems;\n }\n\n set maxItems(value: number | undefined) {\n this._maxItems = value == undefined ? undefined : Math.max(1, value);\n }\n\n ngOnChanges() {\n if (this.maxItems == undefined || this.items.length <= this.maxItems) {\n this.filteredItems = this.items;\n } else {\n this.filteredItems = this.items.slice(0, this.maxItems - 1);\n }\n this.isFiltered = this.items.length > this.filteredItems.length;\n }\n}\n","import { Directive, ElementRef, HostBinding, Input } from \"@angular/core\";\n\nexport type BadgeTypes = \"primary\" | \"secondary\" | \"success\" | \"danger\" | \"warning\" | \"info\";\n\nconst styles: Record = {\n primary: [\"tw-bg-primary-500\"],\n secondary: [\"tw-bg-text-muted\"],\n success: [\"tw-bg-success-500\"],\n danger: [\"tw-bg-danger-500\"],\n warning: [\"tw-bg-warning-500\"],\n info: [\"tw-bg-info-500\"],\n};\n\nconst hoverStyles: Record = {\n primary: [\"hover:tw-bg-primary-700\"],\n secondary: [\"hover:tw-bg-secondary-700\"],\n success: [\"hover:tw-bg-success-700\"],\n danger: [\"hover:tw-bg-danger-700\"],\n warning: [\"hover:tw-bg-warning-700\"],\n info: [\"hover:tw-bg-info-700\"],\n};\n\n@Directive({\n selector: \"span[bitBadge], a[bitBadge], button[bitBadge]\",\n})\nexport class BadgeDirective {\n @HostBinding(\"class\") get classList() {\n return [\n \"tw-inline\",\n \"tw-py-0.5\",\n \"tw-px-1.5\",\n \"tw-font-bold\",\n \"tw-text-center\",\n \"!tw-text-contrast\",\n \"tw-rounded\",\n \"tw-border-none\",\n \"tw-box-border\",\n \"tw-whitespace-nowrap\",\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","\n \n\n","import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from \"@angular/core\";\n\n@Component({\n selector: \"bit-breadcrumb\",\n templateUrl: \"./breadcrumb.component.html\",\n})\nexport class BreadcrumbComponent {\n @Input()\n icon?: string;\n\n @Input()\n route?: string | any[] = undefined;\n\n @Input()\n queryParams?: Record = {};\n\n @Output()\n click = new EventEmitter();\n\n @ViewChild(TemplateRef, { static: true }) content: TemplateRef;\n\n onClick(args: unknown) {\n this.click.next(args);\n }\n}\n","\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n\n\n 0\" class=\"bwi bwi-angle-right tw-mx-1.5 tw-text-main\">\n\n \n\n \n \n \n \n \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, ContentChildren, Input, QueryList } from \"@angular/core\";\n\nimport { BreadcrumbComponent } from \"./breadcrumb.component\";\n\n@Component({\n selector: \"bit-breadcrumbs\",\n templateUrl: \"./breadcrumbs.component.html\",\n})\nexport class BreadcrumbsComponent {\n @Input()\n show = 3;\n\n private breadcrumbs: BreadcrumbComponent[] = [];\n\n @ContentChildren(BreadcrumbComponent)\n protected set breadcrumbList(value: QueryList) {\n this.breadcrumbs = value.toArray();\n }\n\n protected get beforeOverflow() {\n if (this.hasOverflow) {\n return this.breadcrumbs.slice(0, this.show - 1);\n }\n\n return this.breadcrumbs;\n }\n\n protected get overflow() {\n return this.breadcrumbs.slice(this.show - 1, -1);\n }\n\n protected get afterOverflow() {\n return this.breadcrumbs.slice(-1);\n }\n\n protected get hasOverflow() {\n return this.breadcrumbs.length > this.show;\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { RouterModule } from \"@angular/router\";\n\nimport { IconButtonModule } from \"../icon-button\";\nimport { LinkModule } from \"../link\";\nimport { MenuModule } from \"../menu\";\n\nimport { BreadcrumbComponent } from \"./breadcrumb.component\";\nimport { BreadcrumbsComponent } from \"./breadcrumbs.component\";\n\n@NgModule({\n imports: [CommonModule, LinkModule, IconButtonModule, MenuModule, RouterModule],\n declarations: [BreadcrumbsComponent, BreadcrumbComponent],\n exports: [BreadcrumbsComponent, BreadcrumbComponent],\n})\nexport class BreadcrumbsModule {}\n","import { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { Input, HostBinding, Component } from \"@angular/core\";\n\nimport { ButtonLikeAbstraction, ButtonType } from \"../shared/button-like.abstraction\";\n\nconst focusRing = [\n \"focus-visible:tw-ring\",\n \"focus-visible:tw-ring-offset-2\",\n \"focus-visible:tw-ring-primary-700\",\n \"focus-visible:tw-z-10\",\n];\n\nconst buttonStyles: Record = {\n primary: [\n \"tw-border-primary-500\",\n \"tw-bg-primary-500\",\n \"!tw-text-contrast\",\n \"hover:tw-bg-primary-700\",\n \"hover:tw-border-primary-700\",\n \"disabled:tw-bg-primary-500/60\",\n \"disabled:tw-border-primary-500/60\",\n \"disabled:!tw-text-contrast/60\",\n \"disabled:tw-bg-clip-padding\",\n \"disabled:tw-cursor-not-allowed\",\n ...focusRing,\n ],\n secondary: [\n \"tw-bg-transparent\",\n \"tw-border-text-muted\",\n \"!tw-text-muted\",\n \"hover:tw-bg-text-muted\",\n \"hover:tw-border-text-muted\",\n \"hover:!tw-text-contrast\",\n \"disabled:tw-bg-transparent\",\n \"disabled:tw-border-text-muted/60\",\n \"disabled:!tw-text-muted/60\",\n \"disabled:tw-cursor-not-allowed\",\n ...focusRing,\n ],\n danger: [\n \"tw-bg-transparent\",\n \"tw-border-danger-500\",\n \"!tw-text-danger\",\n \"hover:tw-bg-danger-500\",\n \"hover:tw-border-danger-500\",\n \"hover:!tw-text-contrast\",\n \"disabled:tw-bg-transparent\",\n \"disabled:tw-border-danger-500/60\",\n \"disabled:!tw-text-danger/60\",\n \"disabled:tw-cursor-not-allowed\",\n ...focusRing,\n ],\n unstyled: [],\n};\n\n@Component({\n selector: \"button[bitButton], a[bitButton]\",\n templateUrl: \"button.component.html\",\n providers: [{ provide: ButtonLikeAbstraction, useExisting: ButtonComponent }],\n})\nexport class ButtonComponent implements ButtonLikeAbstraction {\n @HostBinding(\"class\") get classList() {\n return [\n \"tw-font-semibold\",\n \"tw-py-1.5\",\n \"tw-px-3\",\n \"tw-rounded\",\n \"tw-transition\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-text-center\",\n \"hover:tw-no-underline\",\n \"focus:tw-outline-none\",\n ]\n .concat(this.block ? [\"tw-w-full\", \"tw-block\"] : [\"tw-inline-block\"])\n .concat(buttonStyles[this.buttonType ?? \"secondary\"]);\n }\n\n @HostBinding(\"attr.disabled\")\n get disabledAttr() {\n const disabled = this.disabled != null && this.disabled !== false;\n return disabled || this.loading ? true : null;\n }\n\n @Input() buttonType: ButtonType;\n\n private _block = false;\n\n @Input()\n get block(): boolean {\n return this._block;\n }\n\n set block(value: boolean | \"\") {\n this._block = coerceBooleanProperty(value);\n }\n\n @Input() loading = false;\n\n @Input() disabled = false;\n\n setButtonType(value: \"primary\" | \"secondary\" | \"danger\" | \"unstyled\") {\n this.buttonType = value;\n }\n}\n","\n \n \n \n \n \n \n\n","\n \n \n {{ title }}\n \n \n\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\ntype CalloutTypes = \"success\" | \"info\" | \"warning\" | \"danger\";\n\nconst defaultIcon: Record = {\n success: \"bwi-check\",\n info: \"bwi-info-circle\",\n warning: \"bwi-exclamation-triangle\",\n danger: \"bwi-error\",\n};\n\nconst defaultI18n: Partial> = {\n warning: \"warning\",\n danger: \"error\",\n};\n\n@Component({\n selector: \"bit-callout\",\n templateUrl: \"callout.component.html\",\n})\nexport class CalloutComponent implements OnInit {\n @Input() type: CalloutTypes = \"info\";\n @Input() icon: string;\n @Input() title: string;\n @Input() useAlertRole = false;\n\n constructor(private i18nService: I18nService) {}\n\n ngOnInit() {\n this.icon ??= defaultIcon[this.type];\n if (this.title == null && defaultI18n[this.type] != null) {\n this.title = this.i18nService.t(defaultI18n[this.type]);\n }\n }\n\n get calloutClass() {\n switch (this.type) {\n case \"danger\":\n return \"tw-border-l-danger-500\";\n case \"info\":\n return \"tw-border-l-info-500\";\n case \"success\":\n return \"tw-border-l-success-500\";\n case \"warning\":\n return \"tw-border-l-warning-500\";\n }\n }\n\n get headerClass() {\n switch (this.type) {\n case \"danger\":\n return \"!tw-text-danger\";\n case \"info\":\n return \"!tw-text-info\";\n case \"success\":\n return \"!tw-text-success\";\n case \"warning\":\n return \"!tw-text-warning\";\n }\n }\n}\n","import { Component, HostBinding, Input, Optional, Self } from \"@angular/core\";\nimport { NgControl, Validators } from \"@angular/forms\";\n\nimport { BitFormControlAbstraction } from \"../form-control\";\n\n@Component({\n selector: \"input[type=checkbox][bitCheckbox]\",\n template: \"\",\n providers: [{ provide: BitFormControlAbstraction, useExisting: CheckboxComponent }],\n})\nexport class CheckboxComponent implements BitFormControlAbstraction {\n @HostBinding(\"class\")\n protected inputClasses = [\n \"tw-appearance-none\",\n \"tw-outline-none\",\n \"tw-relative\",\n \"tw-transition\",\n \"tw-cursor-pointer\",\n \"tw-inline-block\",\n \"tw-rounded\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-border-secondary-500\",\n \"tw-h-3.5\",\n \"tw-w-3.5\",\n \"tw-mr-1.5\",\n \"tw-bottom-[-1px]\", // Fix checkbox looking off-center\n\n \"before:tw-content-['']\",\n \"before:tw-block\",\n \"before:tw-absolute\",\n \"before:tw-inset-0\",\n\n \"hover:tw-border-2\",\n \"[&>label]:tw-border-2\",\n\n \"focus-visible:tw-ring-2\",\n \"focus-visible:tw-ring-offset-2\",\n \"focus-visible:tw-ring-primary-700\",\n\n \"disabled:tw-cursor-auto\",\n \"disabled:tw-border\",\n \"disabled:tw-bg-secondary-100\",\n\n \"checked:tw-bg-primary-500\",\n \"checked:tw-border-primary-500\",\n\n \"checked:hover:tw-bg-primary-700\",\n \"checked:hover:tw-border-primary-700\",\n \"[&>label:hover]:checked:tw-bg-primary-700\",\n \"[&>label:hover]:checked:tw-border-primary-700\",\n\n \"checked:before:tw-bg-text-contrast\",\n \"checked:before:tw-mask-image-[var(--mask-image)]\",\n \"checked:before:tw-mask-position-[center]\",\n \"checked:before:tw-mask-repeat-[no-repeat]\",\n\n \"checked:disabled:tw-border-secondary-100\",\n \"checked:disabled:tw-bg-secondary-100\",\n\n \"checked:disabled:before:tw-bg-text-muted\",\n ];\n\n constructor(@Optional() @Self() private ngControl?: NgControl) {}\n\n @HostBinding(\"style.--mask-image\")\n protected maskImage = `url('data:image/svg+xml,%3Csvg class=\"svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"8\" height=\"8\" viewBox=\"0 0 10 10\"%3E%3Cpath d=\"M0.5 6.2L2.9 8.6L9.5 1.4\" fill=\"none\" stroke=\"white\" stroke-width=\"2\"%3E%3C/path%3E%3C/svg%3E')`;\n\n @HostBinding()\n @Input()\n get disabled() {\n return this._disabled ?? this.ngControl?.disabled ?? false;\n }\n set disabled(value: any) {\n this._disabled = value != null && value !== false;\n }\n private _disabled: boolean;\n\n @Input()\n get required() {\n return (\n this._required ?? this.ngControl?.control?.hasValidator(Validators.requiredTrue) ?? false\n );\n }\n set required(value: any) {\n this._required = value != null && value !== false;\n }\n private _required: boolean;\n\n get hasError() {\n return this.ngControl?.status === \"INVALID\" && this.ngControl?.touched;\n }\n\n get error(): [string, any] {\n const key = Object.keys(this.ngControl.errors)[0];\n return [key, this.ngControl.errors[key]];\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { FormControlModule } from \"../form-control\";\nimport { SharedModule } from \"../shared\";\n\nimport { CheckboxComponent } from \"./checkbox.component\";\n\n@NgModule({\n imports: [SharedModule, CommonModule, FormControlModule],\n declarations: [CheckboxComponent],\n exports: [CheckboxComponent],\n})\nexport class CheckboxModule {}\n","import { Component, HostBinding, Input } from \"@angular/core\";\n\nimport { Utils } from \"@bitwarden/common/misc/utils\";\n\nenum CharacterType {\n Letter,\n Emoji,\n Special,\n Number,\n}\n\n@Component({\n selector: \"bit-color-password\",\n template: `\n {{ character }}\n {{\n i + 1\n }}\n `,\n})\nexport class ColorPasswordComponent {\n @Input() private password: string = null;\n @Input() showCount = false;\n\n characterStyles: Record = {\n [CharacterType.Emoji]: [],\n [CharacterType.Letter]: [\"tw-text-main\"],\n [CharacterType.Special]: [\"tw-text-danger\"],\n [CharacterType.Number]: [\"tw-text-primary-500\"],\n };\n\n @HostBinding(\"class\")\n get classList() {\n return [\"tw-min-w-0\", \"tw-whitespace-pre-wrap\", \"tw-break-all\"];\n }\n\n get passwordArray() {\n // Convert to an array to handle cases that strings have special characters, i.e.: emoji.\n return Array.from(this.password);\n }\n\n getCharacterClass(character: string) {\n const charType = this.getCharacterType(character);\n const charClass = this.characterStyles[charType].concat(\"tw-inline-flex\");\n\n if (this.showCount) {\n return charClass.concat([\n \"tw-flex-col\",\n \"tw-items-center\",\n \"tw-w-7\",\n \"tw-py-1\",\n \"odd:tw-bg-secondary-100\",\n \"even:tw-bg-background\",\n ]);\n }\n\n return charClass;\n }\n\n private getCharacterType(character: string): CharacterType {\n if (character.match(Utils.regexpEmojiPresentation)) {\n return CharacterType.Emoji;\n }\n\n if (character.match(/\\d/)) {\n return CharacterType.Number;\n }\n\n const specials = [\"&\", \"<\", \">\", \" \"];\n if (specials.includes(character) || character.match(/[^\\w ]/)) {\n return CharacterType.Special;\n }\n\n return CharacterType.Letter;\n }\n}\n","import { style, animate, trigger, transition, group } from \"@angular/animations\";\n\nexport const fadeIn = trigger(\"fadeIn\", [\n transition(\":enter\", [\n style({ opacity: 0, transform: \"translateY(-50px)\" }),\n group([\n animate(\"0.15s linear\", style({ opacity: 1 })),\n animate(\"0.3s ease-out\", style({ transform: \"none\" })),\n ]),\n ]),\n]);\n","\n\n\n \n\n {{ title }}\n\n
    {{ content }}
    \n\n
    \n \n\n \n {{ cancelButtonText }}\n \n
    \n
    \n","import { DialogRef, DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\nimport { SimpleDialogCloseType } from \"./models/simple-dialog-close-type.enum\";\nimport { SimpleDialogOptions } from \"./models/simple-dialog-options\";\nimport { SimpleDialogType } from \"./models/simple-dialog-type.enum\";\nimport { Translation } from \"./models/translation\";\n\nconst DEFAULT_ICON: Record = {\n [SimpleDialogType.PRIMARY]: \"bwi-business\",\n [SimpleDialogType.SUCCESS]: \"bwi-star\",\n [SimpleDialogType.INFO]: \"bwi-info-circle\",\n [SimpleDialogType.WARNING]: \"bwi-exclamation-triangle\",\n [SimpleDialogType.DANGER]: \"bwi-error\",\n};\n\nconst DEFAULT_COLOR: Record = {\n [SimpleDialogType.PRIMARY]: \"tw-text-primary-500\",\n [SimpleDialogType.SUCCESS]: \"tw-text-success\",\n [SimpleDialogType.INFO]: \"tw-text-info\",\n [SimpleDialogType.WARNING]: \"tw-text-warning\",\n [SimpleDialogType.DANGER]: \"tw-text-danger\",\n};\n\n@Component({\n selector: \"bit-simple-configurable-dialog\",\n templateUrl: \"./simple-configurable-dialog.component.html\",\n})\nexport class SimpleConfigurableDialogComponent {\n SimpleDialogType = SimpleDialogType;\n SimpleDialogCloseType = SimpleDialogCloseType;\n\n get iconClasses() {\n return [\n this.simpleDialogOpts.icon ?? DEFAULT_ICON[this.simpleDialogOpts.type],\n DEFAULT_COLOR[this.simpleDialogOpts.type],\n ];\n }\n\n title: string;\n content: string;\n acceptButtonText: string;\n cancelButtonText: string;\n\n showCancelButton = this.simpleDialogOpts.cancelButtonText !== null;\n\n constructor(\n public dialogRef: DialogRef,\n private i18nService: I18nService,\n @Inject(DIALOG_DATA) public simpleDialogOpts?: SimpleDialogOptions\n ) {\n this.localizeText();\n }\n\n private localizeText() {\n this.title = this.translate(this.simpleDialogOpts.title);\n this.content = this.translate(this.simpleDialogOpts.content);\n this.acceptButtonText = this.translate(this.simpleDialogOpts.acceptButtonText, \"yes\");\n\n if (this.showCancelButton) {\n // If accept text is overridden, use cancel, otherwise no\n this.cancelButtonText = this.translate(\n this.simpleDialogOpts.cancelButtonText,\n this.simpleDialogOpts.acceptButtonText !== undefined ? \"cancel\" : \"no\"\n );\n }\n }\n\n private translate(translation: string | Translation, defaultKey?: string): string {\n // Translation interface use implies we must localize.\n if (typeof translation === \"object\") {\n return this.i18nService.t(translation.key, ...translation.placeholders);\n }\n\n // Use string that is already translated or use default key post translate\n return translation ?? this.i18nService.t(defaultKey);\n }\n}\n","import {\n DEFAULT_DIALOG_CONFIG,\n Dialog,\n DialogConfig,\n DialogRef,\n DIALOG_SCROLL_STRATEGY,\n} from \"@angular/cdk/dialog\";\nimport { ComponentType, Overlay, OverlayContainer } from \"@angular/cdk/overlay\";\nimport {\n Inject,\n Injectable,\n Injector,\n OnDestroy,\n Optional,\n SkipSelf,\n TemplateRef,\n} from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { filter, Subject, switchMap, takeUntil } from \"rxjs\";\n\nimport { AuthService } from \"@bitwarden/common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/enums/authenticationStatus\";\n\nimport { SimpleDialogOptions } from \"./simple-configurable-dialog/models/simple-dialog-options\";\nimport { SimpleConfigurableDialogComponent } from \"./simple-configurable-dialog/simple-configurable-dialog.component\";\n\n@Injectable()\nexport class DialogService extends Dialog implements OnDestroy {\n private _destroy$ = new Subject();\n\n private backDropClasses = [\n \"tw-fixed\",\n \"tw-bg-black\",\n \"tw-bg-opacity-30\",\n \"tw-inset-0\",\n \"tw-z-40\",\n ];\n\n constructor(\n /** Parent class constructor */\n _overlay: Overlay,\n _injector: Injector,\n @Optional() @Inject(DEFAULT_DIALOG_CONFIG) _defaultOptions: DialogConfig,\n @Optional() @SkipSelf() _parentDialog: Dialog,\n _overlayContainer: OverlayContainer,\n @Inject(DIALOG_SCROLL_STRATEGY) scrollStrategy: any,\n\n /** Not in parent class */\n @Optional() router: Router,\n @Optional() authService: AuthService\n ) {\n super(_overlay, _injector, _defaultOptions, _parentDialog, _overlayContainer, scrollStrategy);\n\n /** Close all open dialogs if the vault locks */\n if (router && authService) {\n router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n switchMap(() => authService.getAuthStatus()),\n filter((v) => v !== AuthenticationStatus.Unlocked),\n takeUntil(this._destroy$)\n )\n .subscribe(() => this.closeAll());\n }\n }\n\n override ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n super.ngOnDestroy();\n }\n\n override open(\n componentOrTemplateRef: ComponentType | TemplateRef,\n config?: DialogConfig>\n ): DialogRef {\n config = {\n backdropClass: this.backDropClasses,\n ...config,\n };\n\n return super.open(componentOrTemplateRef, config);\n }\n\n /**\n * Opens a simple dialog.\n *\n * @param {SimpleDialogOptions} simpleDialogOptions - An object containing options for the dialog.\n * @returns `DialogRef` - The reference to the opened dialog.\n * Contains a closed observable which can be subscribed to for determining which button\n * a user pressed (see `SimpleDialogCloseType`)\n */\n openSimpleDialog(simpleDialogOptions: SimpleDialogOptions): DialogRef {\n // Method needs to return dialog reference so devs can sub to closed and get results.\n return this.open(SimpleConfigurableDialogComponent, {\n data: simpleDialogOptions,\n disableClose: simpleDialogOptions.disableClose,\n });\n }\n}\n","import { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { Component, HostBinding, Input } from \"@angular/core\";\n\nimport { fadeIn } from \"../animations\";\n\n@Component({\n selector: \"bit-dialog\",\n templateUrl: \"./dialog.component.html\",\n animations: [fadeIn],\n})\nexport class DialogComponent {\n @Input() dialogSize: \"small\" | \"default\" | \"large\" = \"default\";\n\n private _disablePadding = false;\n @Input() set disablePadding(value: boolean | \"\") {\n this._disablePadding = coerceBooleanProperty(value);\n }\n get disablePadding() {\n return this._disablePadding;\n }\n\n @HostBinding(\"class\") classes = [\"tw-flex\", \"tw-flex-col\", \"tw-py-4\", \"tw-max-h-screen\"];\n\n get width() {\n switch (this.dialogSize) {\n case \"small\": {\n return \"tw-w-96\";\n }\n case \"large\": {\n return \"tw-w-75vw\";\n }\n default: {\n return \"tw-w-50vw\";\n }\n }\n }\n}\n","\n \n

    \n \n

    \n \n \n\n
    \n \n
    \n\n \n \n \n\n","import { DialogRef } from \"@angular/cdk/dialog\";\nimport { Directive, HostListener, Input, Optional } from \"@angular/core\";\n\n@Directive({\n selector: \"[bitDialogClose]\",\n})\nexport class DialogCloseDirective {\n @Input(\"bit-dialog-close\") dialogResult: any;\n\n constructor(@Optional() public dialogRef: DialogRef) {}\n\n @HostListener(\"click\") close(): void {\n this.dialogRef.close(this.dialogResult);\n }\n}\n","import { CdkDialogContainer, DialogRef } from \"@angular/cdk/dialog\";\nimport { Directive, HostBinding, Input, OnInit, Optional } from \"@angular/core\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Directive({\n selector: \"[bitDialogTitleContainer]\",\n})\nexport class DialogTitleContainerDirective implements OnInit {\n @HostBinding(\"id\") id = `bit-dialog-title-${nextId++}`;\n\n @Input() simple = false;\n\n constructor(@Optional() private dialogRef: DialogRef) {}\n\n ngOnInit(): void {\n // Based on angular/components, licensed under MIT\n // https://github.com/angular/components/blob/14.2.0/src/material/dialog/dialog-content-directives.ts#L121-L128\n if (this.dialogRef) {\n Promise.resolve().then(() => {\n const container = this.dialogRef.containerInstance as CdkDialogContainer;\n\n if (container && !container._ariaLabelledBy) {\n container._ariaLabelledBy = this.id;\n }\n });\n }\n }\n}\n","export enum SimpleDialogCloseType {\n ACCEPT = \"accept\",\n CANCEL = \"cancel\",\n}\n","export enum SimpleDialogType {\n PRIMARY = \"primary\",\n SUCCESS = \"success\",\n INFO = \"info\",\n WARNING = \"warning\",\n DANGER = \"danger\",\n}\n","\n
    \n \n \n \n \n

    \n \n

    \n
    \n
    \n \n
    \n
    \n \n
    \n\n","import { Component, ContentChild, Directive } from \"@angular/core\";\n\nimport { fadeIn } from \"../animations\";\n\n@Directive({ selector: \"[bit-dialog-icon]\" })\nexport class IconDirective {}\n\n@Component({\n selector: \"bit-simple-dialog\",\n templateUrl: \"./simple-dialog.component.html\",\n animations: [fadeIn],\n})\nexport class SimpleDialogComponent {\n @ContentChild(IconDirective) icon!: IconDirective;\n\n get hasIcon() {\n return this.icon != null;\n }\n}\n","export abstract class BitFormControlAbstraction {\n disabled: boolean;\n required: boolean;\n hasError: boolean;\n error: [string, any];\n}\n","\n
    \n \n
    \n
    \n {{ displayError }}\n
    \n","import { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { Component, ContentChild, HostBinding, Input } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\nimport { BitFormControlAbstraction } from \"./form-control.abstraction\";\n\n@Component({\n selector: \"bit-form-control\",\n templateUrl: \"form-control.component.html\",\n})\nexport class FormControlComponent {\n @Input() label: string;\n\n private _inline = false;\n @Input() get inline() {\n return this._inline;\n }\n set inline(value: boolean | \"\") {\n this._inline = coerceBooleanProperty(value);\n }\n\n @ContentChild(BitFormControlAbstraction) protected formControl: BitFormControlAbstraction;\n\n @HostBinding(\"class\") get classes() {\n return [\"tw-mb-6\"].concat(this.inline ? [\"tw-inline-block\", \"tw-mr-4\"] : [\"tw-block\"]);\n }\n\n constructor(private i18nService: I18nService) {}\n\n protected get labelClasses() {\n return [\"tw-transition\", \"tw-select-none\", \"tw-mb-0\"].concat(\n this.formControl.disabled ? \"tw-cursor-auto\" : \"tw-cursor-pointer\"\n );\n }\n\n protected get labelContentClasses() {\n return [\"tw-font-semibold\"].concat(\n this.formControl.disabled ? \"tw-text-muted\" : \"tw-text-main\"\n );\n }\n\n get required() {\n return this.formControl.required;\n }\n\n get hasError() {\n return this.formControl.hasError;\n }\n\n get error() {\n return this.formControl.error;\n }\n\n get displayError() {\n switch (this.error[0]) {\n case \"required\":\n return this.i18nService.t(\"inputRequired\");\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","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../shared\";\n\nimport { FormControlComponent } from \"./form-control.component\";\nimport { BitHintComponent } from \"./hint.component\";\nimport { BitLabel } from \"./label.directive\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [FormControlComponent, BitLabel, BitHintComponent],\n exports: [FormControlComponent, BitLabel, BitHintComponent],\n})\nexport class FormControlModule {}\n","import { Directive, HostBinding } from \"@angular/core\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Directive({\n selector: \"bit-hint\",\n host: {\n class: \"tw-text-muted tw-inline-block tw-mt-1\",\n },\n})\nexport class BitHintComponent {\n @HostBinding() id = `bit-hint-${nextId++}`;\n}\n","import { Directive } from \"@angular/core\";\n\n@Directive({\n selector: \"bit-label\",\n})\nexport class BitLabel {}\n","import { Component, Input } from \"@angular/core\";\nimport { AbstractControl, UntypedFormGroup } from \"@angular/forms\";\n\n@Component({\n selector: \"bit-error-summary\",\n template: ` 0\">\n {{ \"fieldsNeedAttention\" | i18n: errorString }}\n `,\n host: {\n class: \"tw-block tw-text-danger tw-mt-2\",\n \"aria-live\": \"assertive\",\n },\n})\nexport class BitErrorSummary {\n @Input()\n formGroup: UntypedFormGroup;\n\n get errorCount(): number {\n return this.getErrorCount(this.formGroup);\n }\n\n get errorString() {\n return this.errorCount.toString();\n }\n\n private getErrorCount(form: UntypedFormGroup): number {\n return Object.values(form.controls).reduce((acc: number, control: AbstractControl) => {\n if (control instanceof UntypedFormGroup) {\n return acc + this.getErrorCount(control);\n }\n\n if (control.errors == null) {\n return acc;\n }\n\n if (!control.dirty && control.untouched) {\n return acc;\n }\n\n return acc + Object.keys(control.errors).length;\n }, 0);\n }\n}\n","export type InputTypes =\n | \"text\"\n | \"password\"\n | \"number\"\n | \"datetime-local\"\n | \"email\"\n | \"checkbox\"\n | \"search\";\n\nexport abstract class BitFormFieldControl {\n ariaDescribedBy: string;\n id: string;\n labelForId: string;\n required: boolean;\n hasError: boolean;\n error: [string, any];\n type?: InputTypes;\n spellcheck?: boolean;\n focus?: () => void;\n}\n","import { Component, HostBinding, Input } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Component({\n selector: \"bit-error\",\n template: ` {{ displayError }}`,\n host: {\n class: \"tw-block tw-mt-1 tw-text-danger\",\n \"aria-live\": \"assertive\",\n },\n})\nexport class BitErrorComponent {\n @HostBinding() id = `bit-error-${nextId++}`;\n\n @Input() error: [string, any];\n\n constructor(private i18nService: I18nService) {}\n\n get displayError() {\n switch (this.error[0]) {\n case \"required\":\n return this.i18nService.t(\"inputRequired\");\n case \"email\":\n return this.i18nService.t(\"inputEmail\");\n case \"minlength\":\n return this.i18nService.t(\"inputMinLength\", this.error[1]?.requiredLength);\n case \"maxlength\":\n return this.i18nService.t(\"inputMaxLength\", this.error[1]?.requiredLength);\n case \"forbiddenCharacters\":\n return this.i18nService.t(\"inputForbiddenCharacters\", this.error[1]?.characters.join(\", \"));\n case \"multipleEmails\":\n return this.i18nService.t(\"multipleInputEmails\");\n default:\n // Attempt to show a custom error message.\n if (this.error[1]?.message) {\n return this.error[1]?.message;\n }\n\n return this.error;\n }\n }\n}\n","\n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n\n \n \n\n","import {\n AfterContentChecked,\n Component,\n ContentChild,\n ContentChildren,\n QueryList,\n ViewChild,\n} from \"@angular/core\";\n\nimport { BitHintComponent } from \"../form-control/hint.component\";\n\nimport { BitErrorComponent } from \"./error.component\";\nimport { BitFormFieldControl } from \"./form-field-control\";\nimport { BitPrefixDirective } from \"./prefix.directive\";\nimport { BitSuffixDirective } from \"./suffix.directive\";\n\n@Component({\n selector: \"bit-form-field\",\n templateUrl: \"./form-field.component.html\",\n host: {\n class: \"tw-mb-6 tw-block\",\n },\n})\nexport class BitFormFieldComponent implements AfterContentChecked {\n @ContentChild(BitFormFieldControl) input: BitFormFieldControl;\n @ContentChild(BitHintComponent) hint: BitHintComponent;\n\n @ViewChild(BitErrorComponent) error: BitErrorComponent;\n\n @ContentChildren(BitPrefixDirective) prefixChildren: QueryList;\n @ContentChildren(BitSuffixDirective) suffixChildren: QueryList;\n\n ngAfterContentChecked(): void {\n if (this.error) {\n this.input.ariaDescribedBy = this.error.id;\n } else if (this.hint) {\n this.input.ariaDescribedBy = this.hint.id;\n } else {\n this.input.ariaDescribedBy = undefined;\n }\n }\n}\n","import { 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 { NgModule } from \"@angular/core\";\n\nimport { FormControlModule } from \"../form-control\";\nimport { BitInputDirective } from \"../input/input.directive\";\nimport { InputModule } from \"../input/input.module\";\nimport { MultiSelectComponent } from \"../multi-select/multi-select.component\";\nimport { MultiSelectModule } from \"../multi-select/multi-select.module\";\nimport { SharedModule } from \"../shared\";\n\nimport { BitErrorSummary } from \"./error-summary.component\";\nimport { BitErrorComponent } from \"./error.component\";\nimport { BitFormFieldComponent } from \"./form-field.component\";\nimport { BitPasswordInputToggleDirective } from \"./password-input-toggle.directive\";\nimport { BitPrefixDirective } from \"./prefix.directive\";\nimport { BitSuffixDirective } from \"./suffix.directive\";\n\n@NgModule({\n imports: [SharedModule, FormControlModule, InputModule, MultiSelectModule],\n declarations: [\n BitErrorComponent,\n BitErrorSummary,\n BitFormFieldComponent,\n BitPasswordInputToggleDirective,\n BitPrefixDirective,\n BitSuffixDirective,\n ],\n exports: [\n BitErrorComponent,\n BitErrorSummary,\n BitFormFieldComponent,\n BitInputDirective,\n BitPasswordInputToggleDirective,\n BitPrefixDirective,\n BitSuffixDirective,\n MultiSelectComponent,\n FormControlModule,\n ],\n})\nexport class FormFieldModule {}\n","import {\n AfterContentInit,\n Directive,\n EventEmitter,\n Host,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n Output,\n} from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\nimport { BitIconButtonComponent } from \"../icon-button/icon-button.component\";\n\nimport { BitFormFieldComponent } from \"./form-field.component\";\n\n@Directive({\n selector: \"[bitPasswordInputToggle]\",\n})\nexport class BitPasswordInputToggleDirective implements AfterContentInit, OnChanges {\n /**\n * Whether the input is toggled to show the password.\n */\n @HostBinding(\"attr.aria-pressed\") @Input() toggled = false;\n @Output() toggledChange = new EventEmitter();\n\n @HostBinding(\"attr.title\") title = this.i18nService.t(\"toggleVisibility\");\n @HostBinding(\"attr.aria-label\") label = this.i18nService.t(\"toggleVisibility\");\n\n /**\n * Click handler to toggle the state of the input type.\n */\n @HostListener(\"click\") onClick() {\n this.toggled = !this.toggled;\n this.toggledChange.emit(this.toggled);\n\n this.update();\n\n this.formField.input?.focus();\n }\n\n constructor(\n @Host() private button: BitIconButtonComponent,\n private formField: BitFormFieldComponent,\n private i18nService: I18nService\n ) {}\n\n get icon() {\n return this.toggled ? \"bwi-eye-slash\" : \"bwi-eye\";\n }\n\n ngOnChanges(): void {\n this.update();\n }\n\n ngAfterContentInit(): void {\n this.toggled = this.formField.input.type !== \"password\";\n this.button.icon = this.icon;\n }\n\n private update() {\n this.button.icon = this.icon;\n if (this.formField.input?.type != null) {\n this.formField.input.type = this.toggled ? \"text\" : \"password\";\n this.formField.input.spellcheck = this.toggled ? false : undefined;\n }\n }\n}\n","import { Directive, HostBinding, Input, OnInit, Optional } from \"@angular/core\";\n\nimport { ButtonLikeAbstraction } from \"../shared/button-like.abstraction\";\n\nexport const PrefixClasses = [\n \"tw-bg-background-alt\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-border-secondary-500\",\n \"tw-text-muted\",\n \"tw-rounded-none\",\n];\n\nexport const PrefixButtonClasses = [\n \"hover:tw-bg-text-muted\",\n \"hover:tw-text-contrast\",\n \"disabled:tw-opacity-100\",\n \"disabled:tw-bg-secondary-100\",\n \"disabled:hover:tw-bg-secondary-100\",\n \"disabled:hover:tw-text-muted\",\n \"focus-visible:tw-ring-primary-700\",\n\n \"focus-visible:tw-border-primary-700\",\n \"focus-visible:tw-ring-1\",\n \"focus-visible:tw-ring-inset\",\n \"focus-visible:tw-ring-primary-700\",\n \"focus-visible:tw-z-10\",\n];\n\nexport const PrefixStaticContentClasses = [\"tw-block\", \"tw-px-3\", \"tw-py-1.5\"];\n\n@Directive({\n selector: \"[bitPrefix]\",\n})\nexport class BitPrefixDirective implements OnInit {\n constructor(@Optional() private buttonComponent: ButtonLikeAbstraction) {}\n\n @HostBinding(\"class\") @Input() get classList() {\n return PrefixClasses.concat([\n \"tw-border-r-0\",\n \"first:tw-rounded-l\",\n\n \"focus-visible:tw-border-r\",\n \"focus-visible:tw-mr-[-1px]\",\n ]).concat(this.buttonComponent != undefined ? PrefixButtonClasses : PrefixStaticContentClasses);\n }\n\n ngOnInit(): void {\n this.buttonComponent?.setButtonType(\"unstyled\");\n }\n}\n","import { Directive, HostBinding, Input, Optional } from \"@angular/core\";\n\nimport { ButtonLikeAbstraction } from \"../shared/button-like.abstraction\";\n\nimport { PrefixButtonClasses, PrefixClasses, PrefixStaticContentClasses } from \"./prefix.directive\";\n\n@Directive({\n selector: \"[bitSuffix]\",\n})\nexport class BitSuffixDirective {\n constructor(@Optional() private buttonComponent: ButtonLikeAbstraction) {}\n\n @HostBinding(\"class\") @Input() get classList() {\n return PrefixClasses.concat([\n \"tw-border-l-0\",\n \"last:tw-rounded-r\",\n\n \"focus-visible:tw-border-l\",\n \"focus-visible:tw-ml-[-1px]\",\n ]).concat(this.buttonComponent != undefined ? PrefixButtonClasses : PrefixStaticContentClasses);\n }\n\n ngOnInit(): void {\n this.buttonComponent?.setButtonType(\"unstyled\");\n }\n}\n","import { Component, HostBinding, Input } from \"@angular/core\";\n\nimport { ButtonLikeAbstraction, ButtonType } from \"../shared/button-like.abstraction\";\n\nexport type IconButtonType = ButtonType | \"contrast\" | \"main\" | \"muted\" | \"light\";\n\nconst focusRing = [\n // Workaround for box-shadow with transparent offset issue:\n // https://github.com/tailwindlabs/tailwindcss/issues/3595\n // Remove `before:` and use regular `tw-ring` when browser no longer has bug, or better:\n // switch to `outline` with `outline-offset` when Safari supports border radius on outline.\n // Using `box-shadow` to create outlines is a hack and as such `outline` should be preferred.\n \"tw-relative\",\n \"before:tw-content-['']\",\n \"before:tw-block\",\n \"before:tw-absolute\",\n \"before:-tw-inset-[3px]\",\n \"before:tw-rounded-md\",\n \"before:tw-transition\",\n \"before:tw-ring\",\n \"before:tw-ring-transparent\",\n \"focus-visible:tw-z-10\",\n];\n\nconst styles: Record = {\n contrast: [\n \"tw-bg-transparent\",\n \"!tw-text-contrast\",\n \"tw-border-transparent\",\n \"hover:tw-bg-transparent-hover\",\n \"hover:tw-border-text-contrast\",\n \"focus-visible:before:tw-ring-text-contrast\",\n \"disabled:tw-opacity-60\",\n \"disabled:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\n ...focusRing,\n ],\n main: [\n \"tw-bg-transparent\",\n \"!tw-text-main\",\n \"tw-border-transparent\",\n \"hover:tw-bg-transparent-hover\",\n \"hover:tw-border-text-main\",\n \"focus-visible:before:tw-ring-text-main\",\n \"disabled:tw-opacity-60\",\n \"disabled:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\n ...focusRing,\n ],\n muted: [\n \"tw-bg-transparent\",\n \"!tw-text-muted\",\n \"tw-border-transparent\",\n \"hover:tw-bg-transparent-hover\",\n \"hover:tw-border-primary-700\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:tw-opacity-60\",\n \"disabled:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\n ...focusRing,\n ],\n primary: [\n \"tw-bg-primary-500\",\n \"!tw-text-contrast\",\n \"tw-border-primary-500\",\n \"hover:tw-bg-primary-700\",\n \"hover:tw-border-primary-700\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:tw-opacity-60\",\n \"disabled:hover:tw-border-primary-500\",\n \"disabled:hover:tw-bg-primary-500\",\n ...focusRing,\n ],\n secondary: [\n \"tw-bg-transparent\",\n \"!tw-text-muted\",\n \"tw-border-text-muted\",\n \"hover:!tw-text-contrast\",\n \"hover:tw-bg-text-muted\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:tw-opacity-60\",\n \"disabled:hover:tw-border-text-muted\",\n \"disabled:hover:tw-bg-transparent\",\n \"disabled:hover:!tw-text-muted\",\n \"disabled:hover:tw-border-text-muted\",\n ...focusRing,\n ],\n danger: [\n \"tw-bg-transparent\",\n \"!tw-text-danger\",\n \"tw-border-danger-500\",\n \"hover:!tw-text-contrast\",\n \"hover:tw-bg-danger-500\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:tw-opacity-60\",\n \"disabled:hover:tw-border-danger-500\",\n \"disabled:hover:tw-bg-transparent\",\n \"disabled:hover:!tw-text-danger\",\n \"disabled:hover:tw-border-danger-500\",\n ...focusRing,\n ],\n light: [\n \"tw-bg-transparent\",\n \"!tw-text-alt2\",\n \"tw-border-transparent\",\n \"hover:tw-bg-transparent-hover\",\n \"hover:tw-border-text-alt2\",\n \"focus-visible:before:tw-ring-text-alt2\",\n \"disabled:hover:tw-border-transparent\",\n \"disabled:hover:tw-bg-transparent\",\n ...focusRing,\n ],\n unstyled: [],\n};\n\nexport type IconButtonSize = \"default\" | \"small\";\n\nconst sizes: Record = {\n default: [\"tw-px-2.5\", \"tw-py-1.5\"],\n small: [\"tw-leading-none\", \"tw-text-base\", \"tw-p-1\"],\n};\n\n@Component({\n selector: \"button[bitIconButton]:not(button[bitButton])\",\n templateUrl: \"icon-button.component.html\",\n providers: [{ provide: ButtonLikeAbstraction, useExisting: BitIconButtonComponent }],\n})\nexport class BitIconButtonComponent implements ButtonLikeAbstraction {\n @Input(\"bitIconButton\") icon: string;\n\n @Input() buttonType: IconButtonType;\n\n @Input() size: IconButtonSize = \"default\";\n\n @HostBinding(\"class\") get classList() {\n return [\n \"tw-font-semibold\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-rounded\",\n \"tw-transition\",\n \"hover:tw-no-underline\",\n \"focus:tw-outline-none\",\n ]\n .concat(styles[this.buttonType ?? \"main\"])\n .concat(sizes[this.size]);\n }\n\n get iconClass() {\n return [this.icon, \"!tw-m-0\"];\n }\n\n @HostBinding(\"attr.disabled\")\n get disabledAttr() {\n const disabled = this.disabled != null && this.disabled !== false;\n return disabled || this.loading ? true : null;\n }\n\n @Input() loading = false;\n @Input() disabled = false;\n\n setButtonType(value: \"primary\" | \"secondary\" | \"danger\" | \"unstyled\") {\n this.buttonType = value;\n }\n}\n","\n \n \n \n \n \n \n\n","import { 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 { Component, HostBinding, Input } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\n\nimport { Icon, isIcon } from \"./icon\";\n\n@Component({\n selector: \"bit-icon\",\n template: ``,\n})\nexport class BitIconComponent {\n @Input() icon: Icon;\n\n @HostBinding()\n protected get innerHtml() {\n if (!isIcon(this.icon)) {\n return \"\";\n }\n\n const svg = this.icon.svg;\n return this.domSanitizer.bypassSecurityTrustHtml(svg);\n }\n\n constructor(private domSanitizer: DomSanitizer) {}\n}\n","class Icon {\n constructor(readonly svg: string) {}\n}\n\n// We only export the type to prohibit the creation of Icons without using\n// the `svgIcon` template literal tag.\nexport type { Icon };\n\nexport function isIcon(icon: unknown): icon is Icon {\n return icon instanceof Icon;\n}\n\nexport class DynamicContentNotAllowedError extends Error {\n constructor() {\n super(\"Dynamic content in icons is not allowed due to risk of user-injected XSS.\");\n }\n}\n\nexport function svgIcon(strings: TemplateStringsArray, ...values: unknown[]): Icon {\n if (values.length > 0) {\n throw new DynamicContentNotAllowedError();\n }\n\n return new Icon(strings[0]);\n}\n","import { svgIcon } from \"../icon\";\n\nexport const Search = svgIcon`\n\n \n \n \n \n \n \n \n \n \n \n \n \n\n`;\n","import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n NgZone,\n Optional,\n Self,\n} from \"@angular/core\";\nimport { NgControl, Validators } from \"@angular/forms\";\n\nimport { BitFormFieldControl, InputTypes } from \"../form-field/form-field-control\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Directive({\n selector: \"input[bitInput], select[bitInput], textarea[bitInput]\",\n providers: [{ provide: BitFormFieldControl, useExisting: BitInputDirective }],\n})\nexport class BitInputDirective implements BitFormFieldControl {\n @HostBinding(\"class\") @Input() get classList() {\n return [\n \"tw-block\",\n \"tw-w-full\",\n \"tw-px-3\",\n \"tw-py-1.5\",\n \"tw-bg-background-alt\",\n \"tw-border\",\n \"tw-border-solid\",\n this.hasError ? \"tw-border-danger-500\" : \"tw-border-secondary-500\",\n \"tw-text-main\",\n \"tw-placeholder-text-muted\",\n // Rounded\n \"tw-rounded-none\",\n \"first:tw-rounded-l\",\n \"last:tw-rounded-r\",\n // Focus\n \"focus:tw-outline-none\",\n \"focus:tw-border-primary-700\",\n \"focus:tw-ring-1\",\n \"focus:tw-ring-inset\",\n \"focus:tw-ring-primary-700\",\n \"focus:tw-z-10\",\n \"disabled:tw-bg-secondary-100\",\n ].filter((s) => s != \"\");\n }\n\n @HostBinding() @Input() id = `bit-input-${nextId++}`;\n\n @HostBinding(\"attr.aria-describedby\") ariaDescribedBy: string;\n\n @HostBinding(\"attr.aria-invalid\") get ariaInvalid() {\n return this.hasError ? true : undefined;\n }\n\n @HostBinding(\"attr.type\") @Input() type?: InputTypes;\n\n @HostBinding(\"attr.spellcheck\") @Input() spellcheck?: boolean;\n\n @HostBinding()\n @Input()\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value: any) {\n this._required = value != null && value !== false;\n }\n private _required: boolean;\n\n @Input() hasPrefix = false;\n @Input() hasSuffix = false;\n\n get labelForId(): string {\n return this.id;\n }\n\n private isActive = true;\n @HostListener(\"blur\")\n onBlur() {\n this.isActive = true;\n }\n\n @HostListener(\"input\")\n onInput() {\n this.isActive = false;\n }\n\n get hasError() {\n return this.ngControl?.status === \"INVALID\" && this.ngControl?.touched && this.isActive;\n }\n\n get error(): [string, any] {\n const key = Object.keys(this.ngControl.errors)[0];\n return [key, this.ngControl.errors[key]];\n }\n\n constructor(\n @Optional() @Self() private ngControl: NgControl,\n private ngZone: NgZone,\n private elementRef: ElementRef\n ) {}\n\n focus() {\n this.ngZone.runOutsideAngular(() => {\n const end = this.elementRef.nativeElement.value.length;\n this.elementRef.nativeElement.setSelectionRange(end, end);\n this.elementRef.nativeElement.focus();\n });\n }\n}\n","import { Input, HostBinding, Directive } from \"@angular/core\";\n\nexport type LinkType = \"primary\" | \"secondary\" | \"contrast\";\n\nconst linkStyles: Record = {\n primary: [\n \"!tw-text-primary-500\",\n \"hover:!tw-text-primary-500\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:!tw-text-primary-500/60\",\n ],\n secondary: [\n \"!tw-text-main\",\n \"hover:!tw-text-main\",\n \"focus-visible:before:tw-ring-primary-700\",\n \"disabled:!tw-text-muted/60\",\n ],\n contrast: [\n \"!tw-text-contrast\",\n \"hover:!tw-text-contrast\",\n \"focus-visible:before:tw-ring-text-contrast\",\n \"disabled:!tw-text-contrast/60\",\n ],\n};\n\nconst commonStyles = [\n \"tw-leading-none\",\n \"tw-p-0\",\n \"tw-font-semibold\",\n \"tw-bg-transparent\",\n \"tw-border-0\",\n \"tw-border-none\",\n \"tw-rounded\",\n \"tw-transition\",\n \"hover:tw-underline\",\n \"hover:tw-decoration-1\",\n \"disabled:tw-no-underline\",\n \"disabled:tw-cursor-not-allowed\",\n \"focus-visible:tw-outline-none\",\n \"focus-visible:tw-underline\",\n \"focus-visible:tw-decoration-1\",\n\n // Workaround for html button tag not being able to be set to `display: inline`\n // and at the same time not being able to use `tw-ring-offset` because of box-shadow issue.\n // https://github.com/w3c/csswg-drafts/issues/3226\n // Add `tw-inline`, add `tw-py-0.5` and use regular `tw-ring` if issue is fixed.\n //\n // https://github.com/tailwindlabs/tailwindcss/issues/3595\n // Remove `before:` and use regular `tw-ring` when browser no longer has bug, or better:\n // switch to `outline` with `outline-offset` when Safari supports border radius on outline.\n // Using `box-shadow` to create outlines is a hack and as such `outline` should be preferred.\n \"tw-relative\",\n \"before:tw-content-['']\",\n \"before:tw-block\",\n \"before:tw-absolute\",\n \"before:-tw-inset-x-[0.1em]\",\n \"before:tw-rounded-md\",\n \"before:tw-transition\",\n \"focus-visible:before:tw-ring-2\",\n \"focus-visible:before:tw-ring-text-contrast\",\n \"focus-visible:tw-z-10\",\n];\n\n@Directive()\nabstract class LinkDirective {\n @Input()\n linkType: LinkType = \"primary\";\n}\n\n@Directive({\n selector: \"a[bitLink]\",\n})\nexport class AnchorLinkDirective extends LinkDirective {\n @HostBinding(\"class\") get classList() {\n return [\"before:-tw-inset-y-[0.125rem]\"]\n .concat(commonStyles)\n .concat(linkStyles[this.linkType] ?? []);\n }\n}\n\n@Directive({\n selector: \"button[bitLink]\",\n})\nexport class ButtonLinkDirective extends LinkDirective {\n @HostBinding(\"class\") get classList() {\n return [\"before:-tw-inset-y-[0.25rem]\"]\n .concat(commonStyles)\n .concat(linkStyles[this.linkType] ?? []);\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { AnchorLinkDirective, ButtonLinkDirective } from \"./link.directive\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [AnchorLinkDirective, ButtonLinkDirective],\n declarations: [AnchorLinkDirective, ButtonLinkDirective],\n})\nexport class LinkModule {}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"bit-menu-divider\",\n templateUrl: \"./menu-divider.component.html\",\n})\nexport class MenuDividerComponent {}\n","\n","import { FocusableOption } from \"@angular/cdk/a11y\";\nimport { Directive, ElementRef, HostBinding } from \"@angular/core\";\n\n@Directive({\n selector: \"[bitMenuItem]\",\n})\nexport class MenuItemDirective implements FocusableOption {\n @HostBinding(\"class\") classList = [\n \"tw-block\",\n \"tw-py-1\",\n \"tw-px-4\",\n \"!tw-text-main\",\n \"!tw-no-underline\",\n \"tw-cursor-pointer\",\n \"tw-border-none\",\n \"tw-bg-background\",\n \"tw-text-left\",\n \"hover:tw-bg-secondary-100\",\n \"focus:tw-bg-secondary-100\",\n \"focus:tw-z-50\",\n \"focus:tw-outline-none\",\n \"focus:tw-ring\",\n \"focus:tw-ring-offset-2\",\n \"focus:tw-ring-primary-700\",\n \"active:!tw-ring-0\",\n \"active:!tw-ring-offset-0\",\n ];\n @HostBinding(\"attr.role\") role = \"menuitem\";\n @HostBinding(\"tabIndex\") tabIndex = \"-1\";\n\n constructor(private elementRef: ElementRef) {}\n\n focus() {\n this.elementRef.nativeElement.focus();\n }\n}\n","import { Overlay, OverlayConfig, OverlayRef } from \"@angular/cdk/overlay\";\nimport { TemplatePortal } from \"@angular/cdk/portal\";\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { Observable, Subscription } from \"rxjs\";\nimport { filter, mergeWith } from \"rxjs/operators\";\n\nimport { MenuComponent } from \"./menu.component\";\n\n@Directive({\n selector: \"[bitMenuTriggerFor]\",\n})\nexport class MenuTriggerForDirective implements OnDestroy {\n @HostBinding(\"attr.aria-expanded\") isOpen = false;\n @HostBinding(\"attr.aria-haspopup\") get hasPopup(): \"menu\" | \"dialog\" {\n return this.menu?.ariaRole || \"menu\";\n }\n @HostBinding(\"attr.role\") role = \"button\";\n\n @Input(\"bitMenuTriggerFor\") menu: MenuComponent;\n\n private overlayRef: OverlayRef;\n private defaultMenuConfig: OverlayConfig = {\n panelClass: \"bit-menu-panel\",\n hasBackdrop: true,\n backdropClass: \"cdk-overlay-transparent-backdrop\",\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions([\n {\n originX: \"start\",\n originY: \"bottom\",\n overlayX: \"start\",\n overlayY: \"top\",\n },\n {\n originX: \"end\",\n originY: \"bottom\",\n overlayX: \"end\",\n overlayY: \"top\",\n },\n ])\n .withLockedPosition(true)\n .withFlexibleDimensions(false)\n .withPush(true),\n };\n private closedEventsSub: Subscription;\n private keyDownEventsSub: Subscription;\n\n constructor(\n private elementRef: ElementRef,\n private viewContainerRef: ViewContainerRef,\n private overlay: Overlay\n ) {}\n\n @HostListener(\"click\") toggleMenu() {\n this.isOpen ? this.destroyMenu() : this.openMenu();\n }\n\n ngOnDestroy() {\n this.disposeAll();\n }\n\n private openMenu() {\n if (this.menu == null) {\n throw new Error(\"Cannot find bit-menu element\");\n }\n\n this.isOpen = true;\n this.overlayRef = this.overlay.create(this.defaultMenuConfig);\n\n const templatePortal = new TemplatePortal(this.menu.templateRef, this.viewContainerRef);\n this.overlayRef.attach(templatePortal);\n\n this.closedEventsSub = this.getClosedEvents().subscribe((event: KeyboardEvent | undefined) => {\n if (event?.key === \"Tab\") {\n // Required to ensure tab order resumes correctly\n this.elementRef.nativeElement.focus();\n }\n this.destroyMenu();\n });\n this.keyDownEventsSub =\n this.menu.keyManager &&\n this.overlayRef\n .keydownEvents()\n .subscribe((event: KeyboardEvent) => this.menu.keyManager.onKeydown(event));\n }\n\n private destroyMenu() {\n if (this.overlayRef == null || !this.isOpen) {\n return;\n }\n\n this.isOpen = false;\n this.disposeAll();\n }\n\n private getClosedEvents(): Observable {\n const detachments = this.overlayRef.detachments();\n const escKey = this.overlayRef.keydownEvents().pipe(\n filter((event: KeyboardEvent) => {\n const keys = this.menu.ariaRole === \"menu\" ? [\"Escape\", \"Tab\"] : [\"Escape\"];\n return keys.includes(event.key);\n })\n );\n const backdrop = this.overlayRef.backdropClick();\n const menuClosed = this.menu.closed;\n\n return detachments.pipe(mergeWith(escKey, backdrop, menuClosed));\n }\n\n private disposeAll() {\n this.closedEventsSub?.unsubscribe();\n this.overlayRef?.dispose();\n this.keyDownEventsSub?.unsubscribe();\n }\n}\n","\n \n \n \n\n","import { FocusKeyManager } from \"@angular/cdk/a11y\";\nimport {\n Component,\n Output,\n TemplateRef,\n ViewChild,\n EventEmitter,\n ContentChildren,\n QueryList,\n AfterContentInit,\n Input,\n} from \"@angular/core\";\n\nimport { MenuItemDirective } from \"./menu-item.directive\";\n\n@Component({\n selector: \"bit-menu\",\n templateUrl: \"./menu.component.html\",\n exportAs: \"menuComponent\",\n})\nexport class MenuComponent implements AfterContentInit {\n @ViewChild(TemplateRef) templateRef: TemplateRef;\n @Output() closed = new EventEmitter();\n @ContentChildren(MenuItemDirective, { descendants: true })\n menuItems: QueryList;\n keyManager?: FocusKeyManager;\n\n @Input() ariaRole: \"menu\" | \"dialog\" = \"menu\";\n\n @Input() ariaLabel: string;\n\n ngAfterContentInit() {\n if (this.ariaRole === \"menu\") {\n this.keyManager = new FocusKeyManager(this.menuItems).withWrap();\n }\n }\n}\n","import { A11yModule } from \"@angular/cdk/a11y\";\nimport { OverlayModule } from \"@angular/cdk/overlay\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { MenuDividerComponent } from \"./menu-divider.component\";\nimport { MenuItemDirective } from \"./menu-item.directive\";\nimport { MenuTriggerForDirective } from \"./menu-trigger-for.directive\";\nimport { MenuComponent } from \"./menu.component\";\n\n@NgModule({\n imports: [A11yModule, CommonModule, OverlayModule],\n declarations: [MenuComponent, MenuTriggerForDirective, MenuItemDirective, MenuDividerComponent],\n exports: [MenuComponent, MenuTriggerForDirective, MenuItemDirective, MenuDividerComponent],\n})\nexport class MenuModule {}\n","import { 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 { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { FormControlModule } from \"../form-control\";\n\nimport { RadioButtonComponent } from \"./radio-button.component\";\nimport { RadioGroupComponent } from \"./radio-group.component\";\nimport { RadioInputComponent } from \"./radio-input.component\";\n\n@NgModule({\n imports: [CommonModule, FormControlModule],\n declarations: [RadioInputComponent, RadioButtonComponent, RadioGroupComponent],\n exports: [FormControlModule, RadioInputComponent, RadioButtonComponent, RadioGroupComponent],\n})\nexport class RadioButtonModule {}\n","export type ButtonType = \"primary\" | \"secondary\" | \"danger\" | \"unstyled\";\n\nexport abstract class ButtonLikeAbstraction {\n loading: boolean;\n disabled: boolean;\n setButtonType: (value: ButtonType) => void;\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/abstractions/i18n.service\";\n\n/**\n * Temporarily duplicate this pipe\n */\n@Pipe({\n name: \"i18n\",\n})\nexport class I18nPipe implements PipeTransform {\n constructor(private i18nService: I18nService) {}\n\n transform(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.i18nService.t(id, p1, p2, p3);\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { I18nPipe } from \"./i18n.pipe\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [I18nPipe],\n exports: [CommonModule, I18nPipe],\n})\nexport class SharedModule {}\n","import { HostBinding, Directive } from \"@angular/core\";\n\n@Directive({\n selector: \"th[bitCell], td[bitCell]\",\n})\nexport class CellDirective {\n @HostBinding(\"class\") get classList() {\n return [\"tw-p-3\", \"tw-align-middle\"];\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","\n\n\n \n \n \n \n \n \n
    \n","import { isDataSource } from \"@angular/cdk/collections\";\nimport {\n AfterContentChecked,\n Component,\n ContentChild,\n Directive,\n Input,\n OnDestroy,\n TemplateRef,\n} from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nimport { TableDataSource } from \"./table-data-source\";\n\n@Directive({\n selector: \"ng-template[body]\",\n})\nexport class TableBodyDirective {\n // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n constructor(public readonly template: TemplateRef) {}\n}\n\n@Component({\n selector: \"bit-table\",\n templateUrl: \"./table.component.html\",\n})\nexport class TableComponent implements OnDestroy, AfterContentChecked {\n @Input() dataSource: TableDataSource;\n\n @ContentChild(TableBodyDirective) templateVariable: TableBodyDirective;\n\n protected rows: Observable;\n\n private _initialized = false;\n\n ngAfterContentChecked(): void {\n if (!this._initialized && isDataSource(this.dataSource)) {\n this._initialized = true;\n\n const dataStream = this.dataSource.connect();\n this.rows = dataStream;\n }\n }\n\n ngOnDestroy(): void {\n if (isDataSource(this.dataSource)) {\n this.dataSource.disconnect();\n }\n }\n}\n","import { Component } from \"@angular/core\";\n\n/**\n * Component used for styling the tab header/background for both content and navigation tabs\n */\n@Component({\n selector: \"bit-tab-header\",\n host: {\n class:\n \"tw-h-16 tw-pl-4 tw-bg-background-alt tw-flex tw-items-end tw-border-0 tw-border-b tw-border-solid tw-border-secondary-300\",\n },\n template: ``,\n})\nexport class TabHeaderComponent {}\n","import { Directive } from \"@angular/core\";\n\n/**\n * Directive used for styling the container for bit tab labels\n */\n@Directive({\n selector: \"[bitTabListContainer]\",\n host: {\n class: \"tw-inline-flex tw-flex-wrap tw-leading-5\",\n },\n})\nexport class TabListContainerDirective {}\n","import { FocusableOption } from \"@angular/cdk/a11y\";\nimport { Directive, ElementRef, HostBinding, Input } from \"@angular/core\";\n\n/**\n * Directive used for styling tab header items for both nav links (anchor tags)\n * and content tabs (button tags)\n */\n@Directive({ selector: \"[bitTabListItem]\" })\nexport class TabListItemDirective implements FocusableOption {\n @Input() active: boolean;\n @Input() disabled: boolean;\n\n @HostBinding(\"attr.disabled\")\n get disabledAttr() {\n return this.disabled || null; // native disabled attr must be null when false\n }\n\n constructor(private elementRef: ElementRef) {}\n\n focus() {\n this.elementRef.nativeElement.focus();\n }\n\n click() {\n this.elementRef.nativeElement.click();\n }\n\n @HostBinding(\"class\")\n get classList(): string[] {\n return this.baseClassList\n .concat(this.active ? this.activeClassList : [])\n .concat(this.disabled ? this.disabledClassList : [])\n .concat(this.textColorClassList);\n }\n\n /**\n * Classes used for styling tab item text color.\n * Separate text color class list required to override bootstrap classes in Web.\n */\n get textColorClassList(): string[] {\n if (this.disabled) {\n return [\"!tw-text-muted\", \"hover:!tw-text-muted\"];\n }\n if (this.active) {\n return [\"!tw-text-primary-500\", \"hover:!tw-text-primary-700\"];\n }\n return [\"!tw-text-main\", \"hover:!tw-text-main\"];\n }\n\n get baseClassList(): string[] {\n return [\n \"tw-block\",\n \"tw-relative\",\n \"tw-py-2\",\n \"tw-px-4\",\n \"tw-font-semibold\",\n \"tw-transition\",\n \"tw-rounded-t\",\n \"tw-border-0\",\n \"tw-border-x\",\n \"tw-border-t-4\",\n \"tw-border-transparent\",\n \"tw-border-solid\",\n \"tw-bg-transparent\",\n \"hover:tw-underline\",\n \"focus-visible:tw-z-10\",\n \"focus-visible:tw-outline-none\",\n \"focus-visible:tw-ring-2\",\n \"focus-visible:tw-ring-primary-700\",\n ];\n }\n\n get disabledClassList(): string[] {\n return [\"!tw-bg-secondary-100\", \"!tw-no-underline\", \"tw-cursor-not-allowed\"];\n }\n\n get activeClassList(): string[] {\n return [\n \"tw--mb-px\",\n \"tw-border-x-secondary-300\",\n \"tw-border-t-primary-500\",\n \"tw-border-b\",\n \"tw-border-b-background\",\n \"tw-bg-background\",\n \"hover:tw-border-t-primary-700\",\n \"focus-visible:tw-border-t-primary-700\",\n \"focus-visible:!tw-text-primary-700\",\n ];\n }\n}\n","import { TemplatePortal } from \"@angular/cdk/portal\";\nimport { Component, HostBinding, Input } from \"@angular/core\";\n\n@Component({\n selector: \"bit-tab-body\",\n templateUrl: \"tab-body.component.html\",\n})\nexport class TabBodyComponent {\n private _firstRender: boolean;\n\n @Input() content: TemplatePortal;\n @Input() preserveContent = false;\n\n @HostBinding(\"attr.hidden\") get hidden() {\n return !this.active || null;\n }\n\n @Input()\n get active() {\n return this._active;\n }\n set active(value: boolean) {\n this._active = value;\n if (this._active) {\n this._firstRender = true;\n }\n }\n private _active: boolean;\n\n /**\n * The tab content to render.\n * Inactive tabs that have never been rendered/active do not have their\n * content rendered by default for performance. If `preserveContent` is `true`\n * then the content persists after the first time content is rendered.\n */\n get tabContent() {\n if (this.active) {\n return this.content;\n }\n if (this.preserveContent && this._firstRender) {\n return this.content;\n }\n return null;\n }\n}\n","\n \n \n \n\n \n \n \n \n\n {{ tab.textLabel }}\n \n \n \n\n
    \n \n \n
    \n","\n","import { FocusKeyManager } from \"@angular/cdk/a11y\";\nimport { coerceNumberProperty } from \"@angular/cdk/coercion\";\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n Component,\n ContentChildren,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChildren,\n} from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { TabListItemDirective } from \"../shared/tab-list-item.directive\";\n\nimport { TabComponent } from \"./tab.component\";\n\n/** Used to generate unique ID's for each tab component */\nlet nextId = 0;\n\n@Component({\n selector: \"bit-tab-group\",\n templateUrl: \"./tab-group.component.html\",\n})\nexport class TabGroupComponent\n implements AfterContentChecked, AfterContentInit, AfterViewInit, OnDestroy\n{\n private readonly _groupId: number;\n private readonly destroy$ = new Subject();\n private _indexToSelect: number | null = 0;\n\n /**\n * Aria label for the tab list menu\n */\n @Input() label = \"\";\n\n /**\n * Keep the content of off-screen tabs in the DOM.\n * Useful for keeping